[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-cuda-matrix-transpose-naive-to-swizzled-optimizati-summary":3,"summaries-facets-categories":352,"summary-related-cuda-matrix-transpose-naive-to-swizzled-optimizati-summary":4649},{"id":4,"title":5,"ai":6,"body":13,"categories":320,"created_at":322,"date_modified":322,"description":43,"extension":323,"faq":322,"featured":324,"kicker_label":322,"meta":325,"navigation":334,"path":335,"published_at":336,"question":322,"scraped_at":337,"seo":338,"sitemap":339,"source_id":340,"source_name":341,"source_type":342,"source_url":343,"stem":344,"tags":345,"thumbnail_url":322,"tldr":349,"unknown_tags":350,"__hash__":351},"summaries\u002Fsummaries\u002Fcuda-matrix-transpose-naive-to-swizzled-optimizati-summary.md","CUDA Matrix Transpose: Naive to Swizzled Optimization",{"provider":7,"model":8,"input_tokens":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",13081,2422,31112,0.0038047,{"type":14,"value":15,"toc":313},"minimark",[16,21,34,37,90,93,96,100,103,106,130,161,164,167,171,178,185,195,210,213,216,219,223,237,246,249,260,263,266,270,306,309],[17,18,20],"h2",{"id":19},"coalescing-tension-why-naive-transpose-fails-on-gpu","Coalescing Tension: Why Naive Transpose Fails on GPU",[22,23,24,25,29,30,33],"p",{},"Matrix transpose (B[y]",[26,27,28],"span",{},"x"," = A[x]",[26,31,32],{},"y",") seems trivial on CPU but exposes GPU memory hierarchy flaws. GPUs thrive on coalesced access—32 threads in a warp hitting contiguous global memory (GMEM) addresses merge into few transactions. Transpose forces a tradeoff: row-major reads are coalesced but column-major writes are strided (non-coalesced), or vice versa. Strided access kills bandwidth for large matrices.",[22,35,36],{},"Author implements two baselines with 16x16 blocks (256 threads) for 100% SM occupancy on RTX 5060 (1,536 threads\u002FSM max; 6 blocks\u002FSM). Larger 32x32 blocks drop to 66% occupancy; smaller 8x8 increases overheads like block count and register pressure.",[38,39,44],"pre",{"className":40,"code":41,"language":42,"meta":43,"style":43},"language-cuda shiki shiki-themes github-light github-dark","__global__ void transpose_coalesced_read_kernel(float *a, float *b, int width, int height) {\n    int x = blockIdx.x * blockDim.x + threadIdx.x;\n    int y = blockIdx.y * blockDim.y + threadIdx.y;\n    if (x \u003C width && y \u003C height) {\n        b[x * height + y] = a[y * width + x];  \u002F\u002F Coalesced read, strided write\n    }\n}\n","cuda","",[45,46,47,54,60,66,72,78,84],"code",{"__ignoreMap":43},[26,48,51],{"class":49,"line":50},"line",1,[26,52,53],{},"__global__ void transpose_coalesced_read_kernel(float *a, float *b, int width, int height) {\n",[26,55,57],{"class":49,"line":56},2,[26,58,59],{},"    int x = blockIdx.x * blockDim.x + threadIdx.x;\n",[26,61,63],{"class":49,"line":62},3,[26,64,65],{},"    int y = blockIdx.y * blockDim.y + threadIdx.y;\n",[26,67,69],{"class":49,"line":68},4,[26,70,71],{},"    if (x \u003C width && y \u003C height) {\n",[26,73,75],{"class":49,"line":74},5,[26,76,77],{},"        b[x * height + y] = a[y * width + x];  \u002F\u002F Coalesced read, strided write\n",[26,79,81],{"class":49,"line":80},6,[26,82,83],{},"    }\n",[26,85,87],{"class":49,"line":86},7,[26,88,89],{},"}\n",[22,91,92],{},"Coalesced-write variant swaps indices. Both suffer one slow side, bottlenecking bandwidth. Decision: Prioritize occupancy over tile size initially, as hardware limits (e.g., threads\u002FSM) dictate block config before SMEM size (32x32 tile=4KB, fine vs 100KB\u002FSM).",[22,94,95],{},"\"Matrix transpose has a fundamental tension: If we read by rows (coalesced reads), the transposed write must be by columns (non-coalesced, strided writes).\" – Highlights the irreducible access pattern conflict driving all optimizations.",[17,97,99],{"id":98},"shared-memory-tiling-cache-for-coalesced-gmem-io","Shared Memory Tiling: Cache for Coalesced GMEM I\u002FO",[22,101,102],{},"Solution: Use on-chip shared memory (SMEM) as tiling cache. Partition matrix into 32x32 tiles; each 32x8 threadblock (256 threads) loads tile rows coalesced from GMEM into SMEM, transposes in-place, writes columns as coalesced GMEM rows.",[22,104,105],{},"Key decisions:",[107,108,109,121,124],"ul",{},[110,111,112,113,116,117,120],"li",{},"Tile 32x32 despite 32x8 threads: Loop unrolls over 4 row batches (",[45,114,115],{},"tiling_row=8",", ",[45,118,119],{},"j += tiling_row",") for contiguity.",[110,122,123],{},"Dual fast\u002Fslow paths: Full tiles skip bounds checks; partials handle edges.",[110,125,126,129],{},[45,127,128],{},"__syncthreads()"," synchronizes before transpose read.",[38,131,133],{"className":40,"code":132,"language":42,"meta":43,"style":43},"__shared__ float tile[32][32];\n\u002F\u002F Load: tile[ty + j][tx] = a[(y + j)*width + x];  \u002F\u002F Coalesced rows to SMEM\n__syncthreads();\n\u002F\u002F Write: b[(y + j)*height + x] = tile[tx][ty + j];  \u002F\u002F Columns from SMEM to coalesced rows\n",[45,134,135,140,148,153],{"__ignoreMap":43},[26,136,137],{"class":49,"line":50},[26,138,139],{},"__shared__ float tile[32][32];\n",[26,141,142,145],{"class":49,"line":56},[26,143,144],{},"\u002F\u002F Load: tile[ty + j][tx] = a[(y + j)*width + x];",[26,146,147],{},"  \u002F\u002F Coalesced rows to SMEM\n",[26,149,150],{"class":49,"line":62},[26,151,152],{},"__syncthreads();\n",[26,154,155,158],{"class":49,"line":68},[26,156,157],{},"\u002F\u002F Write: b[(y + j)*height + x] = tile[tx][ty + j];",[26,159,160],{},"  \u002F\u002F Columns from SMEM to coalesced rows\n",[22,162,163],{},"Tradeoff: Fixes GMEM but introduces SMEM bank conflicts on transpose read—column access hits same bank repeatedly (32 banks, 4B each; warp column read serializes 32 requests).",[22,165,166],{},"\"SMEM is on-chip, has extremely high bandwidth, and tolerates random access far better than GMEM.\" – Explains why tiling shifts bottleneck from GMEM bandwidth to SMEM access patterns.",[17,168,170],{"id":169},"bank-conflicts-padding-vs-swizzling-tradeoffs","Bank Conflicts: Padding vs. Swizzling Tradeoffs",[22,172,173,174,177],{},"SMEM banks (32x4B): Same-bank warp accesses serialize. Transpose read ",[45,175,176],{},"tile[tx][ty]"," maps columns to one bank (bank ID = col % 32).",[22,179,180,184],{},[181,182,183],"strong",{},"Padding fix",": 32x33 array; each row shifts by 1 bank, distributing column access. Simple, but wastes ~3% space (1KB extra\u002FSMEM tile).",[22,186,187,190,191,194],{},[181,188,189],{},"Swizzling fix",": XOR mapping ",[45,192,193],{},"(col ^ row)"," remaps addresses bijectively—no conflicts, no padding. Every row\u002Fcolumn hits all banks uniquely. Used in CuDNN\u002FCUTLASS.",[38,196,198],{"className":40,"code":197,"language":42,"meta":43,"style":43},"tile[sy][(sx*4 + 0) ^ sy] = va.x;  \u002F\u002F Write with swizzle\nvb.x = tile[(sx*4 + 0)][sy ^ (sx*4 + 0)];  \u002F\u002F Read inverse swizzle\n",[45,199,200,205],{"__ignoreMap":43},[26,201,202],{"class":49,"line":50},[26,203,204],{},"tile[sy][(sx*4 + 0) ^ sy] = va.x;  \u002F\u002F Write with swizzle\n",[26,206,207],{"class":49,"line":56},[26,208,209],{},"vb.x = tile[(sx*4 + 0)][sy ^ (sx*4 + 0)];  \u002F\u002F Read inverse swizzle\n",[22,211,212],{},"Proof: For fixed col C, row x ≠ y implies (x⊕C) ≠ (y⊕C), as XOR is invertible. Script verifies 32x32 bank uniformity post-swizzle.",[22,214,215],{},"Decision chain: Padding first (easy), swizzle ultimate (space-efficient, aligns with async copies\u002FTensor Cores). Swizzle chosen for production as it preserves alignment.",[22,217,218],{},"\"If padding is like 'expanding the parking lot' (sacrificing space) to avoid congestion, then swizzle is a genius traffic controller.\" – Metaphor captures swizzle's elegance over brute-force padding.",[17,220,222],{"id":221},"vectorization-float4-for-bandwidth-peak","Vectorization: Float4 for Bandwidth Peak",[22,224,225,226,229,230,116,233,236],{},"Further: ",[45,227,228],{},"float4"," (LDS.128\u002FST S.128) loads 128B\u002Fwarp vs scalar. Remap 256 threads to 64x4-element handlers (",[45,231,232],{},"tid %8 = sx",[45,234,235],{},"tid\u002F8=sy","; each loads 4 elems).",[22,238,239,240,242,243,245],{},"No SMEM loop: Unpack ",[45,241,228],{}," va to 4 scalar SMEM writes (padding breaks vec alignment; swizzle complicates). On write, pack from SMEM to ",[45,244,228],{},".",[22,247,248],{},"Tradeoffs:",[107,250,251,254,257],{},[110,252,253],{},"Gains GMEM bandwidth (4x elems\u002Fthread).",[110,255,256],{},"SMEM unpack\u002Fpack scalar (vec SMEM tricky with padding\u002Fswizzle).",[110,258,259],{},"Block still 256 threads, full occupancy.",[22,261,262],{},"Swizzled vec version applies XOR per component. Result: Coalesced vec GMEM + conflict-free SMEM.",[22,264,265],{},"\"With 32×32, only one block fits per SM, giving just 2\u002F3 occupancy and seriously hurting pipeline efficiency. With 16×16, an SM can host 6 blocks totaling 1,536 threads — 100% occupancy.\" – Hardware-specific reasoning trumps generic \"larger=better\".",[17,267,269],{"id":268},"key-takeaways","Key Takeaways",[107,271,272,275,278,281,284,287,290,293,296],{},[110,273,274],{},"Start with 16x16 blocks for occupancy on consumer GPUs (RTX 50xx: 1536 threads\u002FSM); scale tile size independently via loops.",[110,276,277],{},"Always tile with SMEM for strided GMEM patterns—coalesce both read\u002Fwrite sides.",[110,279,280],{},"Audit SMEM bank conflicts post-tiling; visualize bank maps for column\u002Frow access.",[110,282,283],{},"Prefer XOR swizzle over padding: Zero extra space, bijection guarantees no conflicts.",[110,285,286],{},"Vectorize GMEM with float4 early; defer full SMEM vec until alignment\u002Fswizzle resolved.",[110,288,289],{},"Bounds-check only on edges (fast\u002Fslow paths); unroll loops for throughput.",[110,291,292],{},"Hardware knowledge (threads\u002FSM, SMEM KB) drives block sizing over theory.",[110,294,295],{},"Test iteratively: Naive → SMEM → Padding\u002FSwizzle → Vec.",[110,297,298,299,245],{},"Full code: ",[300,301,305],"a",{"href":302,"rel":303},"https:\u002F\u002Fgithub.com\u002FWingEdge777\u002FVitamin-CUDA",[304],"nofollow","Vitamin-CUDA GitHub",[22,307,308],{},"\"Writing an efficient transpose kernel is a classic litmus test for a CUDA engineer’s skills.\" – Frames transpose as skill benchmark, urging hands-on iteration.",[310,311,312],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":43,"searchDepth":56,"depth":56,"links":314},[315,316,317,318,319],{"id":19,"depth":56,"text":20},{"id":98,"depth":56,"text":99},{"id":169,"depth":56,"text":170},{"id":221,"depth":56,"text":222},{"id":268,"depth":56,"text":269},[321],"Software Engineering",null,"md",false,{"content_references":326,"triage":331},[327],{"type":328,"title":329,"url":302,"context":330},"other","WingEdge777\u002FVitamin-CUDA","mentioned",{"relevance":62,"novelty":56,"quality":68,"actionability":62,"composite":332,"reasoning":333},3.05,"Category: Software Engineering. The article discusses GPU optimization techniques for matrix transposition, which is relevant to software engineering but lacks a direct connection to building AI-powered products. While it provides some insights into performance optimization, it does not address broader product-building strategies or actionable frameworks that the target audience would prioritize.",true,"\u002Fsummaries\u002Fcuda-matrix-transpose-naive-to-swizzled-optimizati-summary","2026-05-06 17:04:21","2026-05-07 11:23:31",{"title":5,"description":43},{"loc":335},"8a8a00d485edd16f","Level Up Coding","article","https:\u002F\u002Flevelup.gitconnected.com\u002Fcuda-in-practice-matrix-transpose-72024ab6f409?source=rss----5517fd7b58a6---4","summaries\u002Fcuda-matrix-transpose-naive-to-swizzled-optimizati-summary",[346,347,42,348],"software-engineering","dev-productivity","gpu-optimization","Matrix transpose on GPU pits coalesced reads against writes; solve via shared memory tiling, then fix bank conflicts with padding or XOR swizzling, plus float4 vectorization for peak bandwidth.",[346,347,42,348],"b7FSB35JMrG7teiJXsvID2jd6dWJMBpmVnHDlIrmvIw",[353,356,358,361,363,366,369,372,374,376,378,380,382,384,386,389,391,393,395,397,399,401,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,445,447,449,451,453,455,457,459,461,463,465,467,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691,693,695,697,699,701,703,706,708,710,712,714,716,718,720,722,724,726,728,730,732,734,736,738,740,742,744,746,748,750,752,754,756,758,760,762,764,766,768,770,772,774,776,778,780,782,784,786,789,791,793,795,797,799,801,803,805,807,809,811,813,815,817,819,821,823,825,827,829,831,833,835,837,839,841,843,845,847,849,851,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919,921,923,925,927,929,931,933,935,937,939,941,943,945,947,949,951,953,955,957,959,961,963,965,967,969,971,973,975,977,979,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169,3171,3173,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329,3331,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703,3705,3707,3709,3711,3713,3715,3717,3719,3721,3723,3725,3727,3729,3731,3733,3735,3737,3739,3741,3743,3745,3747,3749,3751,3753,3755,3757,3759,3761,3763,3765,3767,3769,3771,3773,3775,3777,3779,3781,3783,3785,3787,3789,3791,3793,3795,3797,3799,3801,3803,3805,3807,3809,3811,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877,3879,3881,3883,3885,3887,3889,3891,3893,3895,3897,3899,3901,3903,3905,3907,3909,3911,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3933,3935,3937,3939,3941,3943,3945,3947,3949,3951,3953,3955,3957,3959,3961,3963,3965,3967,3969,3971,3973,3975,3977,3979,3981,3983,3985,3987,3989,3991,3993,3995,3997,3999,4001,4003,4005,4007,4009,4011,4013,4015,4017,4019,4021,4023,4025,4027,4029,4031,4033,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061,4063,4065,4067,4069,4071,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4163,4165,4167,4169,4171,4173,4175,4177,4179,4181,4183,4185,4187,4189,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219,4221,4223,4225,4227,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265,4267,4269,4271,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4321,4323,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4371,4373,4375,4377,4379,4381,4383,4385,4387,4389,4391,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411,4413,4415,4417,4419,4421,4423,4425,4427,4429,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511,4513,4515,4517,4519,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627,4629,4631,4633,4635,4637,4639,4641,4643,4645,4647],{"categories":354},[355],"Business & SaaS",{"categories":357},[355],{"categories":359},[360],"AI News & Trends",{"categories":362},[],{"categories":364},[365],"AI Automation",{"categories":367},[368],"Marketing & Growth",{"categories":370},[371],"Design & Frontend",{"categories":373},[321],{"categories":375},[],{"categories":377},[371],{"categories":379},[371],{"categories":381},[365],{"categories":383},[371],{"categories":385},[371],{"categories":387},[388],"AI & LLMs",{"categories":390},[371],{"categories":392},[371],{"categories":394},[],{"categories":396},[371],{"categories":398},[371],{"categories":400},[388],{"categories":402},[403],"Developer Productivity",{"categories":405},[388],{"categories":407},[388],{"categories":409},[388],{"categories":411},[360],{"categories":413},[388],{"categories":415},[365],{"categories":417},[355],{"categories":419},[360],{"categories":421},[368],{"categories":423},[],{"categories":425},[],{"categories":427},[365],{"categories":429},[368],{"categories":431},[388],{"categories":433},[403],{"categories":435},[360],{"categories":437},[],{"categories":439},[],{"categories":441},[],{"categories":443},[444],"Data Science & Visualization",{"categories":446},[],{"categories":448},[365],{"categories":450},[321],{"categories":452},[365],{"categories":454},[365],{"categories":456},[388],{"categories":458},[368],{"categories":460},[365],{"categories":462},[],{"categories":464},[],{"categories":466},[],{"categories":468},[371],{"categories":470},[371],{"categories":472},[365],{"categories":474},[368],{"categories":476},[403],{"categories":478},[371],{"categories":480},[388],{"categories":482},[321],{"categories":484},[388],{"categories":486},[],{"categories":488},[365],{"categories":490},[388],{"categories":492},[403],{"categories":494},[403],{"categories":496},[],{"categories":498},[368],{"categories":500},[355],{"categories":502},[388],{"categories":504},[355],{"categories":506},[355],{"categories":508},[365],{"categories":510},[368],{"categories":512},[365],{"categories":514},[355],{"categories":516},[365],{"categories":518},[371],{"categories":520},[388],{"categories":522},[371],{"categories":524},[388],{"categories":526},[355],{"categories":528},[388],{"categories":530},[368],{"categories":532},[],{"categories":534},[388],{"categories":536},[355],{"categories":538},[],{"categories":540},[360],{"categories":542},[321],{"categories":544},[],{"categories":546},[388],{"categories":548},[371],{"categories":550},[388],{"categories":552},[371],{"categories":554},[],{"categories":556},[365],{"categories":558},[],{"categories":560},[],{"categories":562},[],{"categories":564},[388],{"categories":566},[],{"categories":568},[388],{"categories":570},[388],{"categories":572},[371],{"categories":574},[388],{"categories":576},[403],{"categories":578},[365],{"categories":580},[368],{"categories":582},[403],{"categories":584},[403],{"categories":586},[403],{"categories":588},[368],{"categories":590},[368],{"categories":592},[388],{"categories":594},[388],{"categories":596},[355],{"categories":598},[371],{"categories":600},[321],{"categories":602},[355],{"categories":604},[355],{"categories":606},[355],{"categories":608},[371],{"categories":610},[],{"categories":612},[],{"categories":614},[388],{"categories":616},[388],{"categories":618},[321],{"categories":620},[388],{"categories":622},[388],{"categories":624},[],{"categories":626},[388],{"categories":628},[388],{"categories":630},[],{"categories":632},[388],{"categories":634},[360],{"categories":636},[360],{"categories":638},[],{"categories":640},[],{"categories":642},[368],{"categories":644},[368],{"categories":646},[321],{"categories":648},[388],{"categories":650},[],{"categories":652},[],{"categories":654},[365],{"categories":656},[388],{"categories":658},[388],{"categories":660},[],{"categories":662},[388,355],{"categories":664},[388],{"categories":666},[],{"categories":668},[388],{"categories":670},[388],{"categories":672},[],{"categories":674},[],{"categories":676},[365],{"categories":678},[388],{"categories":680},[388],{"categories":682},[365],{"categories":684},[388],{"categories":686},[],{"categories":688},[],{"categories":690},[388],{"categories":692},[],{"categories":694},[388],{"categories":696},[388],{"categories":698},[],{"categories":700},[365],{"categories":702},[],{"categories":704},[365,705],"DevOps & Cloud",{"categories":707},[388],{"categories":709},[365],{"categories":711},[388],{"categories":713},[],{"categories":715},[],{"categories":717},[],{"categories":719},[],{"categories":721},[388],{"categories":723},[365],{"categories":725},[],{"categories":727},[365],{"categories":729},[],{"categories":731},[388],{"categories":733},[],{"categories":735},[],{"categories":737},[],{"categories":739},[],{"categories":741},[365],{"categories":743},[388],{"categories":745},[368],{"categories":747},[360],{"categories":749},[355],{"categories":751},[403],{"categories":753},[],{"categories":755},[365],{"categories":757},[365],{"categories":759},[388],{"categories":761},[],{"categories":763},[],{"categories":765},[365],{"categories":767},[],{"categories":769},[365],{"categories":771},[365],{"categories":773},[360],{"categories":775},[365],{"categories":777},[388],{"categories":779},[],{"categories":781},[388],{"categories":783},[],{"categories":785},[360],{"categories":787},[365,788],"Product Strategy",{"categories":790},[321],{"categories":792},[788],{"categories":794},[388],{"categories":796},[365],{"categories":798},[],{"categories":800},[360],{"categories":802},[360],{"categories":804},[365],{"categories":806},[],{"categories":808},[365],{"categories":810},[388],{"categories":812},[388],{"categories":814},[403],{"categories":816},[388],{"categories":818},[],{"categories":820},[388,321],{"categories":822},[360],{"categories":824},[388],{"categories":826},[360],{"categories":828},[365],{"categories":830},[360],{"categories":832},[],{"categories":834},[321],{"categories":836},[355],{"categories":838},[],{"categories":840},[365],{"categories":842},[365],{"categories":844},[365],{"categories":846},[365],{"categories":848},[355],{"categories":850},[371],{"categories":852},[368],{"categories":854},[],{"categories":856},[365],{"categories":858},[],{"categories":860},[360],{"categories":862},[360],{"categories":864},[360],{"categories":866},[360],{"categories":868},[388],{"categories":870},[403],{"categories":872},[388],{"categories":874},[321],{"categories":876},[388,403],{"categories":878},[403],{"categories":880},[403],{"categories":882},[403],{"categories":884},[403],{"categories":886},[388],{"categories":888},[],{"categories":890},[],{"categories":892},[368],{"categories":894},[388],{"categories":896},[403],{"categories":898},[388],{"categories":900},[371],{"categories":902},[321],{"categories":904},[],{"categories":906},[388],{"categories":908},[403],{"categories":910},[368],{"categories":912},[360],{"categories":914},[321],{"categories":916},[388],{"categories":918},[],{"categories":920},[321],{"categories":922},[371],{"categories":924},[355],{"categories":926},[355],{"categories":928},[],{"categories":930},[371],{"categories":932},[360],{"categories":934},[403],{"categories":936},[365],{"categories":938},[365],{"categories":940},[388],{"categories":942},[388],{"categories":944},[360],{"categories":946},[360],{"categories":948},[403],{"categories":950},[360],{"categories":952},[],{"categories":954},[788],{"categories":956},[365],{"categories":958},[360],{"categories":960},[360],{"categories":962},[360],{"categories":964},[388],{"categories":966},[365],{"categories":968},[365],{"categories":970},[355],{"categories":972},[355],{"categories":974},[388],{"categories":976},[360],{"categories":978},[],{"categories":980},[388],{"categories":982},[355],{"categories":984},[365],{"categories":986},[365],{"categories":988},[365],{"categories":990},[371],{"categories":992},[365],{"categories":994},[403],{"categories":996},[360],{"categories":998},[360],{"categories":1000},[360],{"categories":1002},[360],{"categories":1004},[360],{"categories":1006},[],{"categories":1008},[],{"categories":1010},[403],{"categories":1012},[360],{"categories":1014},[360],{"categories":1016},[360],{"categories":1018},[],{"categories":1020},[388],{"categories":1022},[],{"categories":1024},[],{"categories":1026},[371],{"categories":1028},[355],{"categories":1030},[],{"categories":1032},[360],{"categories":1034},[365],{"categories":1036},[365],{"categories":1038},[365],{"categories":1040},[368],{"categories":1042},[365],{"categories":1044},[],{"categories":1046},[360],{"categories":1048},[360],{"categories":1050},[],{"categories":1052},[368],{"categories":1054},[368],{"categories":1056},[388],{"categories":1058},[360],{"categories":1060},[355],{"categories":1062},[321],{"categories":1064},[388],{"categories":1066},[],{"categories":1068},[388],{"categories":1070},[388],{"categories":1072},[321],{"categories":1074},[388],{"categories":1076},[388],{"categories":1078},[388],{"categories":1080},[368],{"categories":1082},[360],{"categories":1084},[388],{"categories":1086},[388],{"categories":1088},[360],{"categories":1090},[365],{"categories":1092},[403],{"categories":1094},[355],{"categories":1096},[388],{"categories":1098},[403],{"categories":1100},[403],{"categories":1102},[],{"categories":1104},[360],{"categories":1106},[360],{"categories":1108},[403],{"categories":1110},[365],{"categories":1112},[365],{"categories":1114},[365],{"categories":1116},[365],{"categories":1118},[371],{"categories":1120},[388],{"categories":1122},[388],{"categories":1124},[788],{"categories":1126},[388],{"categories":1128},[388],{"categories":1130},[365],{"categories":1132},[355],{"categories":1134},[368],{"categories":1136},[],{"categories":1138},[355],{"categories":1140},[355],{"categories":1142},[],{"categories":1144},[371],{"categories":1146},[388],{"categories":1148},[],{"categories":1150},[],{"categories":1152},[360],{"categories":1154},[360],{"categories":1156},[360],{"categories":1158},[360],{"categories":1160},[],{"categories":1162},[360],{"categories":1164},[388],{"categories":1166},[],{"categories":1168},[360],{"categories":1170},[360],{"categories":1172},[355],{"categories":1174},[388],{"categories":1176},[],{"categories":1178},[],{"categories":1180},[360],{"categories":1182},[360],{"categories":1184},[388],{"categories":1186},[360],{"categories":1188},[360],{"categories":1190},[360],{"categories":1192},[360],{"categories":1194},[360],{"categories":1196},[],{"categories":1198},[365],{"categories":1200},[388],{"categories":1202},[368],{"categories":1204},[355],{"categories":1206},[365],{"categories":1208},[388],{"categories":1210},[],{"categories":1212},[368],{"categories":1214},[360],{"categories":1216},[360],{"categories":1218},[360],{"categories":1220},[360],{"categories":1222},[403],{"categories":1224},[321],{"categories":1226},[],{"categories":1228},[388],{"categories":1230},[365],{"categories":1232},[365],{"categories":1234},[365],{"categories":1236},[705],{"categories":1238},[365],{"categories":1240},[388],{"categories":1242},[388],{"categories":1244},[321],{"categories":1246},[705],{"categories":1248},[444],{"categories":1250},[388],{"categories":1252},[444],{"categories":1254},[],{"categories":1256},[368],{"categories":1258},[368],{"categories":1260},[371],{"categories":1262},[705],{"categories":1264},[365],{"categories":1266},[388],{"categories":1268},[388],{"categories":1270},[365],{"categories":1272},[365],{"categories":1274},[365],{"categories":1276},[403],{"categories":1278},[403],{"categories":1280},[365],{"categories":1282},[365],{"categories":1284},[],{"categories":1286},[365],{"categories":1288},[365],{"categories":1290},[388],{"categories":1292},[444],{"categories":1294},[365],{"categories":1296},[365],{"categories":1298},[365],{"categories":1300},[365],{"categories":1302},[355],{"categories":1304},[371],{"categories":1306},[360],{"categories":1308},[321],{"categories":1310},[705],{"categories":1312},[321],{"categories":1314},[444],{"categories":1316},[],{"categories":1318},[321],{"categories":1320},[],{"categories":1322},[],{"categories":1324},[321],{"categories":1326},[388],{"categories":1328},[],{"categories":1330},[],{"categories":1332},[],{"categories":1334},[355],{"categories":1336},[],{"categories":1338},[],{"categories":1340},[444],{"categories":1342},[388],{"categories":1344},[705],{"categories":1346},[388],{"categories":1348},[],{"categories":1350},[365],{"categories":1352},[403],{"categories":1354},[403],{"categories":1356},[368],{"categories":1358},[368],{"categories":1360},[368],{"categories":1362},[705],{"categories":1364},[321],{"categories":1366},[365],{"categories":1368},[355],{"categories":1370},[355],{"categories":1372},[321],{"categories":1374},[371],{"categories":1376},[444],{"categories":1378},[371],{"categories":1380},[],{"categories":1382},[388],{"categories":1384},[365],{"categories":1386},[365],{"categories":1388},[403],{"categories":1390},[365],{"categories":1392},[365],{"categories":1394},[371],{"categories":1396},[371],{"categories":1398},[365],{"categories":1400},[705],{"categories":1402},[388],{"categories":1404},[],{"categories":1406},[368],{"categories":1408},[365],{"categories":1410},[355],{"categories":1412},[365],{"categories":1414},[365],{"categories":1416},[],{"categories":1418},[388],{"categories":1420},[365],{"categories":1422},[365],{"categories":1424},[403],{"categories":1426},[365],{"categories":1428},[388],{"categories":1430},[],{"categories":1432},[365],{"categories":1434},[],{"categories":1436},[371],{"categories":1438},[403],{"categories":1440},[388],{"categories":1442},[321],{"categories":1444},[371],{"categories":1446},[403],{"categories":1448},[444],{"categories":1450},[403],{"categories":1452},[],{"categories":1454},[388],{"categories":1456},[388],{"categories":1458},[788],{"categories":1460},[321],{"categories":1462},[388,365],{"categories":1464},[365],{"categories":1466},[388],{"categories":1468},[365],{"categories":1470},[365,321],{"categories":1472},[365],{"categories":1474},[388],{"categories":1476},[],{"categories":1478},[403],{"categories":1480},[388],{"categories":1482},[365],{"categories":1484},[388],{"categories":1486},[],{"categories":1488},[321],{"categories":1490},[365],{"categories":1492},[],{"categories":1494},[444],{"categories":1496},[321],{"categories":1498},[365],{"categories":1500},[321],{"categories":1502},[],{"categories":1504},[365],{"categories":1506},[],{"categories":1508},[365],{"categories":1510},[],{"categories":1512},[],{"categories":1514},[371],{"categories":1516},[403],{"categories":1518},[388],{"categories":1520},[],{"categories":1522},[365],{"categories":1524},[321],{"categories":1526},[388],{"categories":1528},[388],{"categories":1530},[403],{"categories":1532},[355],{"categories":1534},[],{"categories":1536},[388],{"categories":1538},[388],{"categories":1540},[388],{"categories":1542},[365],{"categories":1544},[388],{"categories":1546},[],{"categories":1548},[371],{"categories":1550},[388],{"categories":1552},[365],{"categories":1554},[],{"categories":1556},[388],{"categories":1558},[],{"categories":1560},[388],{"categories":1562},[],{"categories":1564},[],{"categories":1566},[],{"categories":1568},[388],{"categories":1570},[388],{"categories":1572},[388],{"categories":1574},[],{"categories":1576},[388],{"categories":1578},[388],{"categories":1580},[388],{"categories":1582},[],{"categories":1584},[388],{"categories":1586},[],{"categories":1588},[368],{"categories":1590},[388],{"categories":1592},[],{"categories":1594},[],{"categories":1596},[],{"categories":1598},[388],{"categories":1600},[360],{"categories":1602},[360],{"categories":1604},[],{"categories":1606},[365],{"categories":1608},[388],{"categories":1610},[],{"categories":1612},[388],{"categories":1614},[388],{"categories":1616},[360],{"categories":1618},[],{"categories":1620},[388],{"categories":1622},[360],{"categories":1624},[365],{"categories":1626},[388],{"categories":1628},[],{"categories":1630},[],{"categories":1632},[],{"categories":1634},[365],{"categories":1636},[365],{"categories":1638},[365],{"categories":1640},[365],{"categories":1642},[388],{"categories":1644},[371],{"categories":1646},[371],{"categories":1648},[365],{"categories":1650},[365],{"categories":1652},[403],{"categories":1654},[788],{"categories":1656},[403],{"categories":1658},[403],{"categories":1660},[388],{"categories":1662},[365],{"categories":1664},[388],{"categories":1666},[403],{"categories":1668},[388],{"categories":1670},[365],{"categories":1672},[365],{"categories":1674},[365],{"categories":1676},[365],{"categories":1678},[365],{"categories":1680},[388],{"categories":1682},[403],{"categories":1684},[403],{"categories":1686},[368],{"categories":1688},[365],{"categories":1690},[],{"categories":1692},[365],{"categories":1694},[],{"categories":1696},[360],{"categories":1698},[388],{"categories":1700},[],{"categories":1702},[355],{"categories":1704},[371],{"categories":1706},[371],{"categories":1708},[365],{"categories":1710},[365],{"categories":1712},[388],{"categories":1714},[388],{"categories":1716},[360],{"categories":1718},[360],{"categories":1720},[705],{"categories":1722},[365],{"categories":1724},[360],{"categories":1726},[],{"categories":1728},[388],{"categories":1730},[365],{"categories":1732},[365],{"categories":1734},[365],{"categories":1736},[365],{"categories":1738},[388],{"categories":1740},[388],{"categories":1742},[388],{"categories":1744},[388],{"categories":1746},[365],{"categories":1748},[365],{"categories":1750},[365],{"categories":1752},[365],{"categories":1754},[],{"categories":1756},[371],{"categories":1758},[388],{"categories":1760},[388],{"categories":1762},[388],{"categories":1764},[],{"categories":1766},[368],{"categories":1768},[],{"categories":1770},[403],{"categories":1772},[],{"categories":1774},[365],{"categories":1776},[403],{"categories":1778},[371],{"categories":1780},[403],{"categories":1782},[],{"categories":1784},[403],{"categories":1786},[403],{"categories":1788},[],{"categories":1790},[371],{"categories":1792},[365],{"categories":1794},[365],{"categories":1796},[403],{"categories":1798},[388],{"categories":1800},[388],{"categories":1802},[],{"categories":1804},[360],{"categories":1806},[],{"categories":1808},[368],{"categories":1810},[],{"categories":1812},[371],{"categories":1814},[360],{"categories":1816},[371],{"categories":1818},[371],{"categories":1820},[371],{"categories":1822},[371],{"categories":1824},[371],{"categories":1826},[371],{"categories":1828},[371],{"categories":1830},[371],{"categories":1832},[371],{"categories":1834},[371],{"categories":1836},[],{"categories":1838},[365],{"categories":1840},[371],{"categories":1842},[388],{"categories":1844},[388],{"categories":1846},[371],{"categories":1848},[371],{"categories":1850},[371],{"categories":1852},[371],{"categories":1854},[371],{"categories":1856},[371],{"categories":1858},[371],{"categories":1860},[388,371],{"categories":1862},[371],{"categories":1864},[371],{"categories":1866},[371],{"categories":1868},[371],{"categories":1870},[],{"categories":1872},[371],{"categories":1874},[371],{"categories":1876},[371],{"categories":1878},[371],{"categories":1880},[371],{"categories":1882},[371],{"categories":1884},[371],{"categories":1886},[371],{"categories":1888},[371],{"categories":1890},[371,388],{"categories":1892},[371],{"categories":1894},[371],{"categories":1896},[],{"categories":1898},[360],{"categories":1900},[],{"categories":1902},[388],{"categories":1904},[],{"categories":1906},[365],{"categories":1908},[705],{"categories":1910},[788],{"categories":1912},[365],{"categories":1914},[365],{"categories":1916},[],{"categories":1918},[365],{"categories":1920},[],{"categories":1922},[365],{"categories":1924},[],{"categories":1926},[],{"categories":1928},[388],{"categories":1930},[388],{"categories":1932},[388],{"categories":1934},[360],{"categories":1936},[360],{"categories":1938},[360],{"categories":1940},[360],{"categories":1942},[],{"categories":1944},[360],{"categories":1946},[],{"categories":1948},[360],{"categories":1950},[388],{"categories":1952},[360],{"categories":1954},[360],{"categories":1956},[360],{"categories":1958},[360],{"categories":1960},[388],{"categories":1962},[360],{"categories":1964},[365],{"categories":1966},[],{"categories":1968},[365],{"categories":1970},[360],{"categories":1972},[388],{"categories":1974},[360],{"categories":1976},[360],{"categories":1978},[360],{"categories":1980},[388],{"categories":1982},[388],{"categories":1984},[388],{"categories":1986},[],{"categories":1988},[],{"categories":1990},[388],{"categories":1992},[360],{"categories":1994},[],{"categories":1996},[388],{"categories":1998},[365],{"categories":2000},[388],{"categories":2002},[365],{"categories":2004},[365],{"categories":2006},[388],{"categories":2008},[],{"categories":2010},[],{"categories":2012},[365],{"categories":2014},[365],{"categories":2016},[365],{"categories":2018},[365],{"categories":2020},[365],{"categories":2022},[365],{"categories":2024},[365],{"categories":2026},[365],{"categories":2028},[],{"categories":2030},[365],{"categories":2032},[365],{"categories":2034},[365],{"categories":2036},[388],{"categories":2038},[388],{"categories":2040},[388],{"categories":2042},[360],{"categories":2044},[388],{"categories":2046},[388],{"categories":2048},[388],{"categories":2050},[365],{"categories":2052},[368],{"categories":2054},[368],{"categories":2056},[368],{"categories":2058},[365],{"categories":2060},[],{"categories":2062},[388],{"categories":2064},[],{"categories":2066},[],{"categories":2068},[388],{"categories":2070},[],{"categories":2072},[365],{"categories":2074},[371],{"categories":2076},[403],{"categories":2078},[444],{"categories":2080},[388],{"categories":2082},[365],{"categories":2084},[371],{"categories":2086},[365],{"categories":2088},[368,355],{"categories":2090},[365],{"categories":2092},[365],{"categories":2094},[705],{"categories":2096},[321],{"categories":2098},[368],{"categories":2100},[403],{"categories":2102},[388],{"categories":2104},[],{"categories":2106},[388],{"categories":2108},[],{"categories":2110},[388],{"categories":2112},[388],{"categories":2114},[365],{"categories":2116},[],{"categories":2118},[388],{"categories":2120},[388],{"categories":2122},[403],{"categories":2124},[365],{"categories":2126},[388],{"categories":2128},[388,403],{"categories":2130},[403],{"categories":2132},[],{"categories":2134},[388],{"categories":2136},[388],{"categories":2138},[388],{"categories":2140},[],{"categories":2142},[],{"categories":2144},[365],{"categories":2146},[368],{"categories":2148},[360],{"categories":2150},[365],{"categories":2152},[388],{"categories":2154},[360],{"categories":2156},[],{"categories":2158},[403],{"categories":2160},[360],{"categories":2162},[],{"categories":2164},[444],{"categories":2166},[368],{"categories":2168},[355],{"categories":2170},[360],{"categories":2172},[388],{"categories":2174},[365],{"categories":2176},[388],{"categories":2178},[365],{"categories":2180},[365],{"categories":2182},[360],{"categories":2184},[403],{"categories":2186},[355],{"categories":2188},[388],{"categories":2190},[388],{"categories":2192},[],{"categories":2194},[],{"categories":2196},[388],{"categories":2198},[],{"categories":2200},[388],{"categories":2202},[360],{"categories":2204},[],{"categories":2206},[365],{"categories":2208},[403],{"categories":2210},[360],{"categories":2212},[403],{"categories":2214},[365],{"categories":2216},[388],{"categories":2218},[],{"categories":2220},[365],{"categories":2222},[371],{"categories":2224},[365],{"categories":2226},[371],{"categories":2228},[365],{"categories":2230},[365],{"categories":2232},[371],{"categories":2234},[],{"categories":2236},[],{"categories":2238},[371],{"categories":2240},[371],{"categories":2242},[371],{"categories":2244},[321],{"categories":2246},[403],{"categories":2248},[403],{"categories":2250},[365],{"categories":2252},[360],{"categories":2254},[403],{"categories":2256},[403],{"categories":2258},[368],{"categories":2260},[371],{"categories":2262},[365],{"categories":2264},[365],{"categories":2266},[388],{"categories":2268},[403],{"categories":2270},[388],{"categories":2272},[705],{"categories":2274},[788],{"categories":2276},[],{"categories":2278},[],{"categories":2280},[365],{"categories":2282},[360],{"categories":2284},[368],{"categories":2286},[368],{"categories":2288},[444],{"categories":2290},[444],{"categories":2292},[444],{"categories":2294},[365],{"categories":2296},[],{"categories":2298},[],{"categories":2300},[444],{"categories":2302},[321],{"categories":2304},[388],{"categories":2306},[321],{"categories":2308},[444],{"categories":2310},[321],{"categories":2312},[444],{"categories":2314},[321],{"categories":2316},[403],{"categories":2318},[388],{"categories":2320},[],{"categories":2322},[444],{"categories":2324},[705],{"categories":2326},[],{"categories":2328},[388],{"categories":2330},[388],{"categories":2332},[],{"categories":2334},[],{"categories":2336},[388],{"categories":2338},[388],{"categories":2340},[360],{"categories":2342},[388],{"categories":2344},[360],{"categories":2346},[],{"categories":2348},[],{"categories":2350},[360],{"categories":2352},[360],{"categories":2354},[388],{"categories":2356},[388],{"categories":2358},[388],{"categories":2360},[388],{"categories":2362},[388],{"categories":2364},[388],{"categories":2366},[368],{"categories":2368},[],{"categories":2370},[388],{"categories":2372},[],{"categories":2374},[],{"categories":2376},[365],{"categories":2378},[403],{"categories":2380},[],{"categories":2382},[705],{"categories":2384},[388,705],{"categories":2386},[388],{"categories":2388},[371],{"categories":2390},[371],{"categories":2392},[371],{"categories":2394},[371],{"categories":2396},[],{"categories":2398},[],{"categories":2400},[],{"categories":2402},[321],{"categories":2404},[365],{"categories":2406},[355],{"categories":2408},[321],{"categories":2410},[403],{"categories":2412},[371],{"categories":2414},[],{"categories":2416},[368],{"categories":2418},[788],{"categories":2420},[444],{"categories":2422},[444],{"categories":2424},[444],{"categories":2426},[403],{"categories":2428},[788],{"categories":2430},[403],{"categories":2432},[],{"categories":2434},[355],{"categories":2436},[321],{"categories":2438},[388],{"categories":2440},[368],{"categories":2442},[321],{"categories":2444},[368],{"categories":2446},[388],{"categories":2448},[371],{"categories":2450},[321],{"categories":2452},[705],{"categories":2454},[388],{"categories":2456},[360],{"categories":2458},[321],{"categories":2460},[],{"categories":2462},[388],{"categories":2464},[321],{"categories":2466},[321],{"categories":2468},[365],{"categories":2470},[],{"categories":2472},[368],{"categories":2474},[368],{"categories":2476},[368],{"categories":2478},[365],{"categories":2480},[388],{"categories":2482},[],{"categories":2484},[355],{"categories":2486},[403],{"categories":2488},[403],{"categories":2490},[444],{"categories":2492},[355],{"categories":2494},[360],{"categories":2496},[444],{"categories":2498},[],{"categories":2500},[360],{"categories":2502},[360],{"categories":2504},[360],{"categories":2506},[388],{"categories":2508},[355],{"categories":2510},[388],{"categories":2512},[],{"categories":2514},[],{"categories":2516},[],{"categories":2518},[321],{"categories":2520},[365],{"categories":2522},[],{"categories":2524},[403],{"categories":2526},[371],{"categories":2528},[],{"categories":2530},[368],{"categories":2532},[],{"categories":2534},[371],{"categories":2536},[388],{"categories":2538},[403],{"categories":2540},[355],{"categories":2542},[],{"categories":2544},[371],{"categories":2546},[371],{"categories":2548},[388],{"categories":2550},[],{"categories":2552},[],{"categories":2554},[321],{"categories":2556},[388],{"categories":2558},[],{"categories":2560},[365],{"categories":2562},[388],{"categories":2564},[],{"categories":2566},[321],{"categories":2568},[365],{"categories":2570},[388],{"categories":2572},[444],{"categories":2574},[388],{"categories":2576},[],{"categories":2578},[444],{"categories":2580},[388],{"categories":2582},[321],{"categories":2584},[388],{"categories":2586},[444],{"categories":2588},[365],{"categories":2590},[388],{"categories":2592},[388],{"categories":2594},[388,365],{"categories":2596},[365],{"categories":2598},[365],{"categories":2600},[365],{"categories":2602},[371],{"categories":2604},[403],{"categories":2606},[388],{"categories":2608},[403],{"categories":2610},[371],{"categories":2612},[388],{"categories":2614},[],{"categories":2616},[],{"categories":2618},[388],{"categories":2620},[388],{"categories":2622},[388],{"categories":2624},[365],{"categories":2626},[],{"categories":2628},[388],{"categories":2630},[388],{"categories":2632},[365],{"categories":2634},[365],{"categories":2636},[388],{"categories":2638},[388],{"categories":2640},[],{"categories":2642},[388],{"categories":2644},[],{"categories":2646},[388],{"categories":2648},[388],{"categories":2650},[388],{"categories":2652},[388],{"categories":2654},[388],{"categories":2656},[388],{"categories":2658},[388],{"categories":2660},[],{"categories":2662},[388],{"categories":2664},[360],{"categories":2666},[360],{"categories":2668},[],{"categories":2670},[],{"categories":2672},[388],{"categories":2674},[],{"categories":2676},[388],{"categories":2678},[388,705],{"categories":2680},[],{"categories":2682},[360],{"categories":2684},[],{"categories":2686},[388],{"categories":2688},[],{"categories":2690},[],{"categories":2692},[],{"categories":2694},[388],{"categories":2696},[],{"categories":2698},[388],{"categories":2700},[],{"categories":2702},[388],{"categories":2704},[388],{"categories":2706},[],{"categories":2708},[],{"categories":2710},[388,705],{"categories":2712},[705,388],{"categories":2714},[360],{"categories":2716},[],{"categories":2718},[388],{"categories":2720},[],{"categories":2722},[388],{"categories":2724},[388],{"categories":2726},[],{"categories":2728},[360],{"categories":2730},[388,355],{"categories":2732},[360],{"categories":2734},[321],{"categories":2736},[],{"categories":2738},[365],{"categories":2740},[388],{"categories":2742},[368],{"categories":2744},[388],{"categories":2746},[403],{"categories":2748},[403],{"categories":2750},[705],{"categories":2752},[360],{"categories":2754},[388],{"categories":2756},[705],{"categories":2758},[321],{"categories":2760},[388],{"categories":2762},[403],{"categories":2764},[],{"categories":2766},[388],{"categories":2768},[],{"categories":2770},[],{"categories":2772},[388],{"categories":2774},[],{"categories":2776},[388],{"categories":2778},[321],{"categories":2780},[355],{"categories":2782},[403],{"categories":2784},[368],{"categories":2786},[365],{"categories":2788},[403],{"categories":2790},[],{"categories":2792},[368],{"categories":2794},[],{"categories":2796},[],{"categories":2798},[388],{"categories":2800},[360],{"categories":2802},[368],{"categories":2804},[],{"categories":2806},[388],{"categories":2808},[360],{"categories":2810},[360],{"categories":2812},[368],{"categories":2814},[360],{"categories":2816},[388],{"categories":2818},[360],{"categories":2820},[388],{"categories":2822},[],{"categories":2824},[388],{"categories":2826},[388],{"categories":2828},[388],{"categories":2830},[360],{"categories":2832},[],{"categories":2834},[],{"categories":2836},[371],{"categories":2838},[360],{"categories":2840},[],{"categories":2842},[388],{"categories":2844},[388],{"categories":2846},[388],{"categories":2848},[388],{"categories":2850},[388],{"categories":2852},[388],{"categories":2854},[388],{"categories":2856},[388],{"categories":2858},[388],{"categories":2860},[368],{"categories":2862},[388,371],{"categories":2864},[360],{"categories":2866},[388],{"categories":2868},[321],{"categories":2870},[444],{"categories":2872},[388],{"categories":2874},[388],{"categories":2876},[],{"categories":2878},[],{"categories":2880},[388],{"categories":2882},[388],{"categories":2884},[],{"categories":2886},[371],{"categories":2888},[371],{"categories":2890},[403],{"categories":2892},[388],{"categories":2894},[403],{"categories":2896},[388],{"categories":2898},[388],{"categories":2900},[],{"categories":2902},[388],{"categories":2904},[],{"categories":2906},[],{"categories":2908},[388],{"categories":2910},[],{"categories":2912},[],{"categories":2914},[360],{"categories":2916},[],{"categories":2918},[388],{"categories":2920},[388],{"categories":2922},[388],{"categories":2924},[],{"categories":2926},[388],{"categories":2928},[360],{"categories":2930},[788],{"categories":2932},[365],{"categories":2934},[388],{"categories":2936},[],{"categories":2938},[365],{"categories":2940},[388],{"categories":2942},[],{"categories":2944},[388],{"categories":2946},[],{"categories":2948},[365],{"categories":2950},[],{"categories":2952},[],{"categories":2954},[365],{"categories":2956},[365],{"categories":2958},[365],{"categories":2960},[388],{"categories":2962},[],{"categories":2964},[365],{"categories":2966},[365],{"categories":2968},[],{"categories":2970},[],{"categories":2972},[365],{"categories":2974},[388],{"categories":2976},[360],{"categories":2978},[788],{"categories":2980},[368],{"categories":2982},[],{"categories":2984},[371],{"categories":2986},[388],{"categories":2988},[388],{"categories":2990},[355],{"categories":2992},[360],{"categories":2994},[360],{"categories":2996},[360],{"categories":2998},[360],{"categories":3000},[],{"categories":3002},[365],{"categories":3004},[365],{"categories":3006},[365],{"categories":3008},[365],{"categories":3010},[403],{"categories":3012},[388],{"categories":3014},[355],{"categories":3016},[],{"categories":3018},[403],{"categories":3020},[365],{"categories":3022},[371],{"categories":3024},[371],{"categories":3026},[371],{"categories":3028},[371],{"categories":3030},[371],{"categories":3032},[371],{"categories":3034},[388,355],{"categories":3036},[365],{"categories":3038},[355],{"categories":3040},[360],{"categories":3042},[360],{"categories":3044},[403],{"categories":3046},[],{"categories":3048},[],{"categories":3050},[368],{"categories":3052},[],{"categories":3054},[388],{"categories":3056},[368],{"categories":3058},[388],{"categories":3060},[321],{"categories":3062},[365],{"categories":3064},[355],{"categories":3066},[365],{"categories":3068},[321],{"categories":3070},[403],{"categories":3072},[365],{"categories":3074},[],{"categories":3076},[403],{"categories":3078},[],{"categories":3080},[],{"categories":3082},[365],{"categories":3084},[365],{"categories":3086},[365],{"categories":3088},[388],{"categories":3090},[388],{"categories":3092},[388],{"categories":3094},[388],{"categories":3096},[388],{"categories":3098},[],{"categories":3100},[705],{"categories":3102},[388],{"categories":3104},[],{"categories":3106},[],{"categories":3108},[],{"categories":3110},[403],{"categories":3112},[],{"categories":3114},[388],{"categories":3116},[],{"categories":3118},[360],{"categories":3120},[388],{"categories":3122},[360],{"categories":3124},[388],{"categories":3126},[365],{"categories":3128},[],{"categories":3130},[388],{"categories":3132},[388],{"categories":3134},[],{"categories":3136},[444],{"categories":3138},[444],{"categories":3140},[321],{"categories":3142},[371],{"categories":3144},[],{"categories":3146},[388],{"categories":3148},[365],{"categories":3150},[],{"categories":3152},[],{"categories":3154},[388],{"categories":3156},[321],{"categories":3158},[365],{"categories":3160},[355],{"categories":3162},[403,321],{"categories":3164},[321],{"categories":3166},[388],{"categories":3168},[365],{"categories":3170},[],{"categories":3172},[],{"categories":3174},[],{"categories":3176},[],{"categories":3178},[],{"categories":3180},[],{"categories":3182},[388],{"categories":3184},[],{"categories":3186},[],{"categories":3188},[388],{"categories":3190},[],{"categories":3192},[],{"categories":3194},[],{"categories":3196},[388],{"categories":3198},[360],{"categories":3200},[],{"categories":3202},[],{"categories":3204},[],{"categories":3206},[388],{"categories":3208},[],{"categories":3210},[388],{"categories":3212},[388],{"categories":3214},[],{"categories":3216},[388],{"categories":3218},[],{"categories":3220},[403],{"categories":3222},[403],{"categories":3224},[],{"categories":3226},[368],{"categories":3228},[],{"categories":3230},[],{"categories":3232},[],{"categories":3234},[371],{"categories":3236},[360],{"categories":3238},[365],{"categories":3240},[388],{"categories":3242},[355],{"categories":3244},[388],{"categories":3246},[],{"categories":3248},[],{"categories":3250},[368],{"categories":3252},[365],{"categories":3254},[],{"categories":3256},[705],{"categories":3258},[],{"categories":3260},[388],{"categories":3262},[388],{"categories":3264},[368],{"categories":3266},[388],{"categories":3268},[371],{"categories":3270},[365],{"categories":3272},[388],{"categories":3274},[365],{"categories":3276},[388],{"categories":3278},[365],{"categories":3280},[403],{"categories":3282},[403],{"categories":3284},[371],{"categories":3286},[],{"categories":3288},[388],{"categories":3290},[388],{"categories":3292},[368],{"categories":3294},[788],{"categories":3296},[403],{"categories":3298},[360],{"categories":3300},[388],{"categories":3302},[360],{"categories":3304},[388],{"categories":3306},[388],{"categories":3308},[],{"categories":3310},[388],{"categories":3312},[],{"categories":3314},[388],{"categories":3316},[368],{"categories":3318},[388],{"categories":3320},[388],{"categories":3322},[388],{"categories":3324},[],{"categories":3326},[388],{"categories":3328},[388],{"categories":3330},[788],{"categories":3332},[],{"categories":3334},[360],{"categories":3336},[705],{"categories":3338},[321],{"categories":3340},[],{"categories":3342},[444],{"categories":3344},[],{"categories":3346},[],{"categories":3348},[360],{"categories":3350},[388],{"categories":3352},[],{"categories":3354},[388],{"categories":3356},[388],{"categories":3358},[365],{"categories":3360},[388],{"categories":3362},[360],{"categories":3364},[360],{"categories":3366},[371],{"categories":3368},[371],{"categories":3370},[371],{"categories":3372},[388],{"categories":3374},[444],{"categories":3376},[360],{"categories":3378},[403],{"categories":3380},[],{"categories":3382},[371],{"categories":3384},[705],{"categories":3386},[371],{"categories":3388},[371],{"categories":3390},[360],{"categories":3392},[705],{"categories":3394},[388],{"categories":3396},[388],{"categories":3398},[388],{"categories":3400},[388],{"categories":3402},[],{"categories":3404},[365],{"categories":3406},[388],{"categories":3408},[371],{"categories":3410},[],{"categories":3412},[],{"categories":3414},[360],{"categories":3416},[],{"categories":3418},[365],{"categories":3420},[365],{"categories":3422},[365],{"categories":3424},[365],{"categories":3426},[365],{"categories":3428},[365],{"categories":3430},[365],{"categories":3432},[365],{"categories":3434},[],{"categories":3436},[],{"categories":3438},[388],{"categories":3440},[],{"categories":3442},[403],{"categories":3444},[403],{"categories":3446},[444],{"categories":3448},[],{"categories":3450},[],{"categories":3452},[],{"categories":3454},[371],{"categories":3456},[388],{"categories":3458},[],{"categories":3460},[355],{"categories":3462},[355],{"categories":3464},[371],{"categories":3466},[403],{"categories":3468},[444],{"categories":3470},[371],{"categories":3472},[371],{"categories":3474},[],{"categories":3476},[365],{"categories":3478},[355],{"categories":3480},[355],{"categories":3482},[388],{"categories":3484},[365],{"categories":3486},[321],{"categories":3488},[371],{"categories":3490},[],{"categories":3492},[368],{"categories":3494},[444],{"categories":3496},[360],{"categories":3498},[360],{"categories":3500},[360],{"categories":3502},[705],{"categories":3504},[],{"categories":3506},[365],{"categories":3508},[],{"categories":3510},[365],{"categories":3512},[365],{"categories":3514},[388],{"categories":3516},[388],{"categories":3518},[321],{"categories":3520},[365],{"categories":3522},[321],{"categories":3524},[],{"categories":3526},[365],{"categories":3528},[371],{"categories":3530},[371],{"categories":3532},[371],{"categories":3534},[388],{"categories":3536},[365],{"categories":3538},[388],{"categories":3540},[355],{"categories":3542},[360],{"categories":3544},[371],{"categories":3546},[360],{"categories":3548},[388],{"categories":3550},[],{"categories":3552},[360],{"categories":3554},[365],{"categories":3556},[360],{"categories":3558},[360],{"categories":3560},[360],{"categories":3562},[],{"categories":3564},[],{"categories":3566},[360],{"categories":3568},[360],{"categories":3570},[],{"categories":3572},[360],{"categories":3574},[388],{"categories":3576},[388],{"categories":3578},[360],{"categories":3580},[360],{"categories":3582},[388],{"categories":3584},[],{"categories":3586},[388],{"categories":3588},[365],{"categories":3590},[388],{"categories":3592},[388],{"categories":3594},[],{"categories":3596},[388],{"categories":3598},[388],{"categories":3600},[388],{"categories":3602},[360],{"categories":3604},[],{"categories":3606},[],{"categories":3608},[],{"categories":3610},[],{"categories":3612},[388],{"categories":3614},[388],{"categories":3616},[368],{"categories":3618},[360],{"categories":3620},[],{"categories":3622},[],{"categories":3624},[],{"categories":3626},[],{"categories":3628},[],{"categories":3630},[388],{"categories":3632},[],{"categories":3634},[],{"categories":3636},[388],{"categories":3638},[],{"categories":3640},[365],{"categories":3642},[365],{"categories":3644},[365],{"categories":3646},[355],{"categories":3648},[],{"categories":3650},[368],{"categories":3652},[321],{"categories":3654},[321],{"categories":3656},[705],{"categories":3658},[360],{"categories":3660},[],{"categories":3662},[388],{"categories":3664},[388],{"categories":3666},[355],{"categories":3668},[],{"categories":3670},[355],{"categories":3672},[],{"categories":3674},[],{"categories":3676},[],{"categories":3678},[321],{"categories":3680},[365],{"categories":3682},[365],{"categories":3684},[365],{"categories":3686},[365],{"categories":3688},[365],{"categories":3690},[],{"categories":3692},[360],{"categories":3694},[388],{"categories":3696},[388],{"categories":3698},[388],{"categories":3700},[],{"categories":3702},[355],{"categories":3704},[],{"categories":3706},[371],{"categories":3708},[444],{"categories":3710},[371],{"categories":3712},[],{"categories":3714},[],{"categories":3716},[388],{"categories":3718},[365],{"categories":3720},[],{"categories":3722},[388],{"categories":3724},[388],{"categories":3726},[388],{"categories":3728},[365],{"categories":3730},[365],{"categories":3732},[388],{"categories":3734},[444],{"categories":3736},[365],{"categories":3738},[],{"categories":3740},[388],{"categories":3742},[],{"categories":3744},[788],{"categories":3746},[321],{"categories":3748},[444],{"categories":3750},[321],{"categories":3752},[705],{"categories":3754},[388],{"categories":3756},[321],{"categories":3758},[705],{"categories":3760},[321],{"categories":3762},[371],{"categories":3764},[371],{"categories":3766},[],{"categories":3768},[321],{"categories":3770},[],{"categories":3772},[403],{"categories":3774},[321],{"categories":3776},[],{"categories":3778},[444],{"categories":3780},[444],{"categories":3782},[788],{"categories":3784},[],{"categories":3786},[388],{"categories":3788},[321],{"categories":3790},[705],{"categories":3792},[365],{"categories":3794},[444],{"categories":3796},[388],{"categories":3798},[403],{"categories":3800},[388],{"categories":3802},[],{"categories":3804},[],{"categories":3806},[],{"categories":3808},[368],{"categories":3810},[388],{"categories":3812},[371],{"categories":3814},[321],{"categories":3816},[321],{"categories":3818},[388],{"categories":3820},[368],{"categories":3822},[403],{"categories":3824},[388],{"categories":3826},[321],{"categories":3828},[388],{"categories":3830},[321],{"categories":3832},[403],{"categories":3834},[403],{"categories":3836},[365],{"categories":3838},[403],{"categories":3840},[321],{"categories":3842},[355],{"categories":3844},[321],{"categories":3846},[321],{"categories":3848},[321],{"categories":3850},[321],{"categories":3852},[],{"categories":3854},[360],{"categories":3856},[],{"categories":3858},[444],{"categories":3860},[388],{"categories":3862},[388],{"categories":3864},[],{"categories":3866},[],{"categories":3868},[],{"categories":3870},[388],{"categories":3872},[360],{"categories":3874},[388],{"categories":3876},[388],{"categories":3878},[],{"categories":3880},[388],{"categories":3882},[371],{"categories":3884},[388],{"categories":3886},[388],{"categories":3888},[388],{"categories":3890},[],{"categories":3892},[],{"categories":3894},[],{"categories":3896},[705],{"categories":3898},[705],{"categories":3900},[355],{"categories":3902},[365],{"categories":3904},[355,368],{"categories":3906},[388],{"categories":3908},[360],{"categories":3910},[],{"categories":3912},[371],{"categories":3914},[444],{"categories":3916},[388],{"categories":3918},[321],{"categories":3920},[388],{"categories":3922},[],{"categories":3924},[444],{"categories":3926},[705],{"categories":3928},[365],{"categories":3930},[355],{"categories":3932},[705],{"categories":3934},[365],{"categories":3936},[403],{"categories":3938},[365],{"categories":3940},[403],{"categories":3942},[388],{"categories":3944},[403],{"categories":3946},[403],{"categories":3948},[321],{"categories":3950},[444],{"categories":3952},[388],{"categories":3954},[368],{"categories":3956},[],{"categories":3958},[388],{"categories":3960},[371],{"categories":3962},[444],{"categories":3964},[355],{"categories":3966},[388],{"categories":3968},[444],{"categories":3970},[403],{"categories":3972},[388],{"categories":3974},[388],{"categories":3976},[444],{"categories":3978},[388],{"categories":3980},[403],{"categories":3982},[388],{"categories":3984},[],{"categories":3986},[388],{"categories":3988},[388],{"categories":3990},[388],{"categories":3992},[388],{"categories":3994},[],{"categories":3996},[365],{"categories":3998},[705],{"categories":4000},[],{"categories":4002},[],{"categories":4004},[388],{"categories":4006},[355],{"categories":4008},[368],{"categories":4010},[355],{"categories":4012},[],{"categories":4014},[388],{"categories":4016},[360],{"categories":4018},[388],{"categories":4020},[388],{"categories":4022},[],{"categories":4024},[365],{"categories":4026},[360],{"categories":4028},[388,705],{"categories":4030},[365,705],{"categories":4032},[705],{"categories":4034},[388],{"categories":4036},[365],{"categories":4038},[365],{"categories":4040},[321],{"categories":4042},[321],{"categories":4044},[321],{"categories":4046},[388],{"categories":4048},[371],{"categories":4050},[365],{"categories":4052},[],{"categories":4054},[705],{"categories":4056},[],{"categories":4058},[705],{"categories":4060},[705],{"categories":4062},[355],{"categories":4064},[365],{"categories":4066},[],{"categories":4068},[705],{"categories":4070},[388],{"categories":4072},[360],{"categories":4074},[388],{"categories":4076},[371],{"categories":4078},[321],{"categories":4080},[321],{"categories":4082},[321],{"categories":4084},[705],{"categories":4086},[],{"categories":4088},[],{"categories":4090},[],{"categories":4092},[388],{"categories":4094},[321],{"categories":4096},[388],{"categories":4098},[321],{"categories":4100},[705],{"categories":4102},[705],{"categories":4104},[388],{"categories":4106},[365],{"categories":4108},[],{"categories":4110},[388],{"categories":4112},[388],{"categories":4114},[388],{"categories":4116},[],{"categories":4118},[],{"categories":4120},[705],{"categories":4122},[705],{"categories":4124},[388,705],{"categories":4126},[365],{"categories":4128},[365],{"categories":4130},[365],{"categories":4132},[365],{"categories":4134},[365],{"categories":4136},[],{"categories":4138},[321],{"categories":4140},[388],{"categories":4142},[321],{"categories":4144},[368],{"categories":4146},[388],{"categories":4148},[788],{"categories":4150},[788],{"categories":4152},[365],{"categories":4154},[321],{"categories":4156},[],{"categories":4158},[365],{"categories":4160},[388],{"categories":4162},[],{"categories":4164},[371],{"categories":4166},[],{"categories":4168},[388],{"categories":4170},[365],{"categories":4172},[360],{"categories":4174},[388],{"categories":4176},[],{"categories":4178},[],{"categories":4180},[371],{"categories":4182},[371],{"categories":4184},[403],{"categories":4186},[371],{"categories":4188},[365],{"categories":4190},[],{"categories":4192},[365],{"categories":4194},[360],{"categories":4196},[388],{"categories":4198},[388],{"categories":4200},[],{"categories":4202},[388],{"categories":4204},[403],{"categories":4206},[388],{"categories":4208},[],{"categories":4210},[444],{"categories":4212},[321],{"categories":4214},[321],{"categories":4216},[355],{"categories":4218},[355],{"categories":4220},[355],{"categories":4222},[365],{"categories":4224},[355],{"categories":4226},[365],{"categories":4228},[705],{"categories":4230},[788],{"categories":4232},[360],{"categories":4234},[360],{"categories":4236},[360],{"categories":4238},[705],{"categories":4240},[360,355],{"categories":4242},[444],{"categories":4244},[365],{"categories":4246},[],{"categories":4248},[388],{"categories":4250},[],{"categories":4252},[321],{"categories":4254},[444],{"categories":4256},[371],{"categories":4258},[321],{"categories":4260},[403],{"categories":4262},[],{"categories":4264},[],{"categories":4266},[788],{"categories":4268},[],{"categories":4270},[371],{"categories":4272},[371],{"categories":4274},[444],{"categories":4276},[],{"categories":4278},[388],{"categories":4280},[444],{"categories":4282},[],{"categories":4284},[388],{"categories":4286},[388],{"categories":4288},[],{"categories":4290},[403],{"categories":4292},[388],{"categories":4294},[],{"categories":4296},[388],{"categories":4298},[],{"categories":4300},[],{"categories":4302},[365],{"categories":4304},[365],{"categories":4306},[],{"categories":4308},[321],{"categories":4310},[321],{"categories":4312},[321],{"categories":4314},[388,365],{"categories":4316},[365],{"categories":4318},[365],{"categories":4320},[365],{"categories":4322},[444],{"categories":4324},[444],{"categories":4326},[],{"categories":4328},[360],{"categories":4330},[388],{"categories":4332},[444],{"categories":4334},[444],{"categories":4336},[360],{"categories":4338},[355],{"categories":4340},[365],{"categories":4342},[321],{"categories":4344},[388],{"categories":4346},[388],{"categories":4348},[365],{"categories":4350},[321],{"categories":4352},[365],{"categories":4354},[388],{"categories":4356},[368],{"categories":4358},[],{"categories":4360},[388],{"categories":4362},[388],{"categories":4364},[388],{"categories":4366},[321],{"categories":4368},[],{"categories":4370},[444],{"categories":4372},[388],{"categories":4374},[365],{"categories":4376},[365],{"categories":4378},[321],{"categories":4380},[403],{"categories":4382},[403],{"categories":4384},[360],{"categories":4386},[365],{"categories":4388},[],{"categories":4390},[365],{"categories":4392},[388],{"categories":4394},[360],{"categories":4396},[388],{"categories":4398},[388],{"categories":4400},[388],{"categories":4402},[365],{"categories":4404},[444],{"categories":4406},[388],{"categories":4408},[371],{"categories":4410},[388],{"categories":4412},[388],{"categories":4414},[388],{"categories":4416},[388],{"categories":4418},[],{"categories":4420},[388],{"categories":4422},[444],{"categories":4424},[371],{"categories":4426},[388],{"categories":4428},[371],{"categories":4430},[],{"categories":4432},[],{"categories":4434},[],{"categories":4436},[388],{"categories":4438},[],{"categories":4440},[],{"categories":4442},[],{"categories":4444},[],{"categories":4446},[365],{"categories":4448},[403],{"categories":4450},[365],{"categories":4452},[365],{"categories":4454},[321],{"categories":4456},[355],{"categories":4458},[388],{"categories":4460},[388],{"categories":4462},[388],{"categories":4464},[355],{"categories":4466},[403],{"categories":4468},[],{"categories":4470},[444],{"categories":4472},[368],{"categories":4474},[371],{"categories":4476},[403],{"categories":4478},[403],{"categories":4480},[788],{"categories":4482},[365],{"categories":4484},[388],{"categories":4486},[388],{"categories":4488},[403],{"categories":4490},[388],{"categories":4492},[],{"categories":4494},[],{"categories":4496},[705],{"categories":4498},[371],{"categories":4500},[403],{"categories":4502},[388],{"categories":4504},[360],{"categories":4506},[403],{"categories":4508},[355],{"categories":4510},[365],{"categories":4512},[365],{"categories":4514},[360],{"categories":4516},[388],{"categories":4518},[],{"categories":4520},[],{"categories":4522},[],{"categories":4524},[388],{"categories":4526},[],{"categories":4528},[360],{"categories":4530},[],{"categories":4532},[388],{"categories":4534},[],{"categories":4536},[360],{"categories":4538},[365],{"categories":4540},[388],{"categories":4542},[705],{"categories":4544},[388],{"categories":4546},[403],{"categories":4548},[388],{"categories":4550},[403],{"categories":4552},[],{"categories":4554},[],{"categories":4556},[403],{"categories":4558},[403],{"categories":4560},[403],{"categories":4562},[],{"categories":4564},[403],{"categories":4566},[365],{"categories":4568},[],{"categories":4570},[388],{"categories":4572},[368],{"categories":4574},[444],{"categories":4576},[388],{"categories":4578},[],{"categories":4580},[403],{"categories":4582},[388],{"categories":4584},[788],{"categories":4586},[403],{"categories":4588},[403],{"categories":4590},[368],{"categories":4592},[321],{"categories":4594},[321],{"categories":4596},[],{"categories":4598},[321],{"categories":4600},[388],{"categories":4602},[],{"categories":4604},[],{"categories":4606},[365],{"categories":4608},[],{"categories":4610},[365],{"categories":4612},[365],{"categories":4614},[360],{"categories":4616},[388],{"categories":4618},[360],{"categories":4620},[403],{"categories":4622},[360],{"categories":4624},[321],{"categories":4626},[321],{"categories":4628},[321],{"categories":4630},[360],{"categories":4632},[388],{"categories":4634},[365],{"categories":4636},[705],{"categories":4638},[355],{"categories":4640},[705],{"categories":4642},[705],{"categories":4644},[321],{"categories":4646},[705],{"categories":4648},[705],[4650,4699,4754,4821],{"id":4651,"title":4652,"ai":4653,"body":4658,"categories":4686,"created_at":322,"date_modified":322,"description":43,"extension":323,"faq":322,"featured":324,"kicker_label":322,"meta":4687,"navigation":334,"path":4688,"published_at":4689,"question":322,"scraped_at":322,"seo":4690,"sitemap":4691,"source_id":4692,"source_name":341,"source_type":342,"source_url":4693,"stem":4694,"tags":4695,"thumbnail_url":322,"tldr":4696,"unknown_tags":4697,"__hash__":4698},"summaries\u002Fsummaries\u002Fdebug-like-a-plumber-probe-hidden-bugs-indirectly-summary.md","Debug Like a Plumber: Probe Hidden Bugs Indirectly",{"provider":7,"model":8,"input_tokens":4654,"output_tokens":4655,"processing_time_ms":4656,"cost_usd":4657},3670,895,9736,0.00115885,{"type":14,"value":4659,"toc":4681},[4660,4664,4667,4671,4674,4678],[17,4661,4663],{"id":4662},"force-hidden-problems-to-reveal-themselves","Force Hidden Problems to Reveal Themselves",[22,4665,4666],{},"A leak detection specialist fixed an underground pipe leak near a driveway without digging: he connected a compressor to inject tracer gas into the pipe, then walked the surface with a handheld detector. The gas escaped only through the break, bubbling up through soil to the detector. In 20 minutes, he pinpointed the spot: 'Dig here.' He succeeded by assuming the problem was invisible—buried under concrete—so his method didn't try direct visibility. Instead, it created an inescapable signal from the issue itself.",[17,4668,4670],{"id":4669},"engineers-faulty-assumption-slows-debugging","Engineers' Faulty Assumption Slows Debugging",[22,4672,4673],{},"Software teams facing production bugs assume visibility: code is readable, dashboards show metrics, logs capture events. They read code, stare at dashboards, add logging (often more logging). This direct inspection fails because production issues are 'underground'—intermittent, environment-specific, or emergent—making them hard to spot even when staring.",[17,4675,4677],{"id":4676},"adopt-the-tracer-gas-mindset-for-faster-fixes","Adopt the Tracer Gas Mindset for Faster Fixes",[22,4679,4680],{},"Shift to the plumber's assumption: production bugs can't be seen directly, so inject probes that the problem can't hide from. Examples include targeted canary deployments, synthetic traffic simulating user paths, or chaos experiments flipping switches to surface weaknesses. These methods guarantee the bug announces itself, cutting debug time from hours\u002Fdays to minutes, just as tracer gas did.",{"title":43,"searchDepth":56,"depth":56,"links":4682},[4683,4684,4685],{"id":4662,"depth":56,"text":4663},{"id":4669,"depth":56,"text":4670},{"id":4676,"depth":56,"text":4677},[321],{},"\u002Fsummaries\u002Fdebug-like-a-plumber-probe-hidden-bugs-indirectly-summary","2026-04-08 21:21:18",{"title":4652,"description":43},{"loc":4688},"eab4d08860b92327","https:\u002F\u002Funknown","summaries\u002Fdebug-like-a-plumber-probe-hidden-bugs-indirectly-summary",[346,347],"Production bugs hide like underground leaks—don't inspect directly; inject 'tracer gas' probes that force issues to surface, as a leak specialist did in 20 minutes without digging.",[346,347],"eQXdnBNNwKzp0JlLvV4OYhZyB_B8r_sBqFLBNDxYV4U",{"id":4700,"title":4701,"ai":4702,"body":4707,"categories":4735,"created_at":322,"date_modified":322,"description":43,"extension":323,"faq":322,"featured":324,"kicker_label":322,"meta":4736,"navigation":334,"path":4741,"published_at":4742,"question":322,"scraped_at":4743,"seo":4744,"sitemap":4745,"source_id":4746,"source_name":4747,"source_type":342,"source_url":4748,"stem":4749,"tags":4750,"thumbnail_url":322,"tldr":4751,"unknown_tags":4752,"__hash__":4753},"summaries\u002Fsummaries\u002Fjuniors-ship-faster-but-lack-system-shape-summary.md","Juniors Ship Faster But Lack System Shape",{"provider":7,"model":8,"input_tokens":4703,"output_tokens":4704,"processing_time_ms":4705,"cost_usd":4706},3927,1130,12244,0.00084355,{"type":14,"value":4708,"toc":4730},[4709,4713,4716,4720,4723,4727],[17,4710,4712],{"id":4711},"speed-masks-shallow-understanding","Speed Masks Shallow Understanding",[22,4714,4715],{},"Junior engineers now close far more tickets than seniors—14 per sprint versus 4—while delivering clean PRs, passing tests, and earning minimal code review feedback. Dashboards label them high performers. This isn't luck; it's consistent over months. Use this metric cautiously: it measures output volume, not depth. Juniors excel at tactical tasks like syntax and implementation because tools (implied AI in context) accelerate routine coding, freeing seniors for architecture—but eroding that edge if not addressed.",[17,4717,4719],{"id":4718},"incidents-expose-the-gap","Incidents Expose the Gap",[22,4721,4722],{},"During a subtle production incident, the junior on-call couldn't navigate despite reading stack traces and logs. She pinged the senior not for syntax help, but because she didn't recognize 'which part mattered'—lacking the system's 'shape.' This mental model lets experienced engineers orient quickly: predicting where bugs hide based on architecture, data flows, and historical patterns. Without it, juniors ship fast but debug slowly, risking outages. Build this by pairing juniors on incidents, diagramming system boundaries early, and enforcing architecture reviews in PRs.",[17,4724,4726],{"id":4725},"redefining-seniority-for-ai-era","Redefining Seniority for AI Era",[22,4728,4729],{},"Traditional seniority wasn't shipping speed; it was maintaining the full system shape in working memory to triage, hypothesize, and fix under pressure. As juniors close the speed gap, teams risk a bench of fast coders who can't handle chaos. Counter by measuring 'shape mastery': incident resolution time, architecture docs contributed, and cross-module changes proposed. Promote based on this, not tickets closed—ensuring velocity doesn't trade away reliability.",{"title":43,"searchDepth":56,"depth":56,"links":4731},[4732,4733,4734],{"id":4711,"depth":56,"text":4712},{"id":4718,"depth":56,"text":4719},{"id":4725,"depth":56,"text":4726},[403],{"content_references":4737,"triage":4738},[],{"relevance":74,"novelty":68,"quality":68,"actionability":68,"composite":4739,"reasoning":4740},4.35,"Category: Software Engineering. The article addresses the balance between speed and understanding in software engineering, highlighting a critical pain point for product builders: the need for juniors to grasp system architecture. It provides actionable strategies like pairing juniors on incidents and enforcing architecture reviews, making it relevant and practical for the target audience.","\u002Fsummaries\u002Fjuniors-ship-faster-but-lack-system-shape-summary","2026-04-21 00:22:22","2026-04-21 15:26:05",{"title":4701,"description":43},{"loc":4741},"f0cb31fd5d79ac17","Generative AI","https:\u002F\u002Fgenerativeai.pub\u002Fmy-juniors-ship-faster-than-my-seniors-and-im-worried-about-them-4b284c7384ff?source=rss----440100e76000---4","summaries\u002Fjuniors-ship-faster-but-lack-system-shape-summary",[347,346],"Juniors outperform seniors on tickets shipped (14 vs 4) with clean PRs, but falter in incidents because they don't grasp the system's architecture—seniority means holding that mental model, not raw speed.",[347,346],"zeK25GgvM906VppZxF4aw1uIAb4jMQcW1v-yS3srQM8",{"id":4755,"title":4756,"ai":4757,"body":4762,"categories":4798,"created_at":322,"date_modified":322,"description":43,"extension":323,"faq":322,"featured":324,"kicker_label":322,"meta":4799,"navigation":334,"path":4807,"published_at":4808,"question":322,"scraped_at":4809,"seo":4810,"sitemap":4811,"source_id":4812,"source_name":4813,"source_type":342,"source_url":4814,"stem":4815,"tags":4816,"thumbnail_url":322,"tldr":4818,"unknown_tags":4819,"__hash__":4820},"summaries\u002Fsummaries\u002Ffix-node-js-api-slowness-db-n-1-cache-code-tweaks-summary.md","Fix Node.js API Slowness: DB N+1, Cache, Code Tweaks",{"provider":7,"model":8,"input_tokens":4758,"output_tokens":4759,"processing_time_ms":4760,"cost_usd":4761},4678,1319,19511,0.00157245,{"type":14,"value":4763,"toc":4792},[4764,4768,4771,4775,4778,4782,4785,4789],[17,4765,4767],{"id":4766},"profile-first-to-avoid-guessing","Profile First to Avoid Guessing",[22,4769,4770],{},"Use Node.js built-in Performance Hooks API to measure exact timings without code changes—run multiple times to confirm slowness like 'took: 1200 ms' and identify the slowest function. This reveals true bottlenecks instead of assumptions, preventing wasted fixes on non-issues.",[17,4772,4774],{"id":4773},"solve-database-n1-queries-and-indexing","Solve Database N+1 Queries and Indexing",[22,4776,4777],{},"N+1 problem from repeated queries in loops (e.g., one query per item) dominates slowdowns—replace with single relational fetches or SQL joins to load all data at once. Add indexes on queried fields, slashing times from 1s to 100ms. Avoid unindexed scans on large tables, as they force full table reads.",[17,4779,4781],{"id":4780},"cache-repeated-queries-and-parallelize-logic","Cache Repeated Queries and Parallelize Logic",[22,4783,4784],{},"For static-ish data like product lists or dashboards queried per request, store results in Redis—subsequent calls hit cache instantly instead of DB. Parallelize sequential operations (e.g., Promise.all on arrays) over for-loops, but limit concurrency for large arrays (e.g., 1000 items) with p-limit to prevent overload. Watch for blocking sync code, big loops, or heavy JSON parsing that stalls Node's single thread—keep event loop free.",[17,4786,4788],{"id":4787},"trim-payloads-timeout-externals-and-compress","Trim Payloads, Timeout Externals, and Compress",[22,4790,4791],{},"Request only needed fields (e.g., \u002Fusers?fields=id,name) to cut data volume. Set timeouts on external API calls to avoid indefinite hangs, with error handling. Enable gzip\u002FBrotli compression middleware—turns 500kb JSON into 50-100kb over the wire, speeding perceived response without core changes.",{"title":43,"searchDepth":56,"depth":56,"links":4793},[4794,4795,4796,4797],{"id":4766,"depth":56,"text":4767},{"id":4773,"depth":56,"text":4774},{"id":4780,"depth":56,"text":4781},{"id":4787,"depth":56,"text":4788},[321],{"content_references":4800,"triage":4805},[4801],{"type":4802,"title":4803,"context":4804},"tool","Redis","recommended",{"relevance":74,"novelty":62,"quality":68,"actionability":74,"composite":4739,"reasoning":4806},"Category: Software Engineering. The article provides practical solutions to common performance issues in Node.js APIs, addressing specific pain points like N+1 queries and caching strategies. It offers actionable steps such as using Performance Hooks and implementing Redis caching, making it highly relevant for developers looking to optimize their applications.","\u002Fsummaries\u002Ffix-node-js-api-slowness-db-n-1-cache-code-tweaks-summary","2026-05-07 04:36:46","2026-05-07 11:23:58",{"title":4756,"description":43},{"loc":4807},"305222dcfdf3f742","Data and Beyond","https:\u002F\u002Fmedium.com\u002Fdata-and-beyond\u002Fyour-node-js-api-is-slow-heres-exactly-why-and-how-i-fix-it-eab13e48c270?source=rss----b680b860beb1---4","summaries\u002Ffix-node-js-api-slowness-db-n-1-cache-code-tweaks-summary",[346,347,4817],"caching","Profile with Performance Hooks to confirm slowness (e.g., 1200ms), then fix N+1 queries via joins\u002Findexes (1s to 100ms), add Redis caching for repeated data, parallelize loops, trim payloads, timeout external APIs, and gzip responses (500kb to 50-100kb).",[346,347,4817],"WHjUFb1-lCLMZ3iDEC52DtlzqolMIUudFRqubqRMj2U",{"id":4822,"title":4823,"ai":4824,"body":4829,"categories":5293,"created_at":322,"date_modified":322,"description":43,"extension":323,"faq":322,"featured":324,"kicker_label":322,"meta":5294,"navigation":334,"path":5299,"published_at":5300,"question":322,"scraped_at":5301,"seo":5302,"sitemap":5303,"source_id":5304,"source_name":341,"source_type":342,"source_url":5305,"stem":5306,"tags":5307,"thumbnail_url":322,"tldr":5309,"unknown_tags":5310,"__hash__":5311},"summaries\u002Fsummaries\u002Fscale-compose-nav-with-nested-graphs-and-state-lay-summary.md","Scale Compose Nav with Nested Graphs and State Layers",{"provider":7,"model":8,"input_tokens":4825,"output_tokens":4826,"processing_time_ms":4827,"cost_usd":4828},6768,1765,14725,0.00221345,{"type":14,"value":4830,"toc":5287},[4831,4835,4838,4841,4905,4908,4984,4987,4990,5023,5027,5030,5033,5055,5084,5096,5099,5103,5110,5166,5169,5198,5201,5205,5228,5267,5285],[17,4832,4834],{"id":4833},"nested-graphs-isolate-features-and-simplify-reasoning","Nested Graphs Isolate Features and Simplify Reasoning",[22,4836,4837],{},"Flat NavHosts with dozens of composables become unmaintainable—files bloat, flows interfere, back stacks confuse, and refactors risk breakage. Instead, centralize ownership in one root NavHost that only defines major app flows (e.g., auth, main), then nest separate graphs per feature.",[22,4839,4840],{},"Root setup:",[38,4842,4846],{"className":4843,"code":4844,"language":4845,"meta":43,"style":43},"language-kotlin shiki shiki-themes github-light github-dark","@Composable\nfun AppNavHost(navController: NavHostController) {\n    NavHost(\n        navController = navController,\n        startDestination = Graph.AUTH,\n        route = Graph.ROOT\n    ) {\n        authNavGraph(navController)\n        mainNavGraph(navController)\n    }\n}\n","kotlin",[45,4847,4848,4853,4858,4863,4868,4873,4878,4883,4889,4895,4900],{"__ignoreMap":43},[26,4849,4850],{"class":49,"line":50},[26,4851,4852],{},"@Composable\n",[26,4854,4855],{"class":49,"line":56},[26,4856,4857],{},"fun AppNavHost(navController: NavHostController) {\n",[26,4859,4860],{"class":49,"line":62},[26,4861,4862],{},"    NavHost(\n",[26,4864,4865],{"class":49,"line":68},[26,4866,4867],{},"        navController = navController,\n",[26,4869,4870],{"class":49,"line":74},[26,4871,4872],{},"        startDestination = Graph.AUTH,\n",[26,4874,4875],{"class":49,"line":80},[26,4876,4877],{},"        route = Graph.ROOT\n",[26,4879,4880],{"class":49,"line":86},[26,4881,4882],{},"    ) {\n",[26,4884,4886],{"class":49,"line":4885},8,[26,4887,4888],{},"        authNavGraph(navController)\n",[26,4890,4892],{"class":49,"line":4891},9,[26,4893,4894],{},"        mainNavGraph(navController)\n",[26,4896,4898],{"class":49,"line":4897},10,[26,4899,83],{},[26,4901,4903],{"class":49,"line":4902},11,[26,4904,89],{},[22,4906,4907],{},"Feature graphs group related screens:",[38,4909,4911],{"className":4843,"code":4910,"language":4845,"meta":43,"style":43},"fun NavGraphBuilder.authNavGraph(navController: NavHostController) {\n    navigation(startDestination = \"login\", route = Graph.AUTH) {\n        composable(\"login\") {\n            LoginScreen(\n                onLoginSuccess = {\n                    navController.navigate(Graph.MAIN) {\n                        popUpTo(Graph.AUTH) { inclusive = true }\n                    }\n                }\n            )\n        }\n        \u002F\u002F signup composable...\n    }\n}\n",[45,4912,4913,4918,4923,4928,4933,4938,4943,4948,4953,4958,4963,4968,4974,4979],{"__ignoreMap":43},[26,4914,4915],{"class":49,"line":50},[26,4916,4917],{},"fun NavGraphBuilder.authNavGraph(navController: NavHostController) {\n",[26,4919,4920],{"class":49,"line":56},[26,4921,4922],{},"    navigation(startDestination = \"login\", route = Graph.AUTH) {\n",[26,4924,4925],{"class":49,"line":62},[26,4926,4927],{},"        composable(\"login\") {\n",[26,4929,4930],{"class":49,"line":68},[26,4931,4932],{},"            LoginScreen(\n",[26,4934,4935],{"class":49,"line":74},[26,4936,4937],{},"                onLoginSuccess = {\n",[26,4939,4940],{"class":49,"line":80},[26,4941,4942],{},"                    navController.navigate(Graph.MAIN) {\n",[26,4944,4945],{"class":49,"line":86},[26,4946,4947],{},"                        popUpTo(Graph.AUTH) { inclusive = true }\n",[26,4949,4950],{"class":49,"line":4885},[26,4951,4952],{},"                    }\n",[26,4954,4955],{"class":49,"line":4891},[26,4956,4957],{},"                }\n",[26,4959,4960],{"class":49,"line":4897},[26,4961,4962],{},"            )\n",[26,4964,4965],{"class":49,"line":4902},[26,4966,4967],{},"        }\n",[26,4969,4971],{"class":49,"line":4970},12,[26,4972,4973],{},"        \u002F\u002F signup composable...\n",[26,4975,4977],{"class":49,"line":4976},13,[26,4978,83],{},[26,4980,4982],{"class":49,"line":4981},14,[26,4983,89],{},[22,4985,4986],{},"This keeps graphs small, prevents cross-flow pollution, and makes back stack behavior predictable—e.g., clear auth stack on login success.",[22,4988,4989],{},"Centralize routes with sealed classes to avoid string typos:",[38,4991,4993],{"className":4843,"code":4992,"language":4845,"meta":43,"style":43},"sealed class AppScreen(val route: String) {\n    data object Home : AppScreen(\"home\")\n    data object UserDetails : AppScreen(\"user\u002F{userId}\") {\n        fun createRoute(userId: Long) = \"user\u002F$userId\"\n    }\n}\n",[45,4994,4995,5000,5005,5010,5015,5019],{"__ignoreMap":43},[26,4996,4997],{"class":49,"line":50},[26,4998,4999],{},"sealed class AppScreen(val route: String) {\n",[26,5001,5002],{"class":49,"line":56},[26,5003,5004],{},"    data object Home : AppScreen(\"home\")\n",[26,5006,5007],{"class":49,"line":62},[26,5008,5009],{},"    data object UserDetails : AppScreen(\"user\u002F{userId}\") {\n",[26,5011,5012],{"class":49,"line":68},[26,5013,5014],{},"        fun createRoute(userId: Long) = \"user\u002F$userId\"\n",[26,5016,5017],{"class":49,"line":74},[26,5018,83],{},[26,5020,5021],{"class":49,"line":80},[26,5022,89],{},[17,5024,5026],{"id":5025},"layered-state-keeps-navigation-stable","Layered State Keeps Navigation Stable",[22,5028,5029],{},"Navigation only handles movement and small primitives (IDs, filters, flags)—never full objects, which fail serialization and stale quickly. Load data in destinations.",[22,5031,5032],{},"Three layers:",[5034,5035,5036,5045],"ol",{},[110,5037,5038,5041,5042,245],{},[181,5039,5040],{},"Nav args",": Primitives only, e.g., ",[45,5043,5044],{},"navController.navigate(UserDetails.createRoute(42L))",[110,5046,5047,5050,5051,5054],{},[181,5048,5049],{},"ViewModels",": Screen\u002Fbusiness state with API calls, loading\u002Ferrors. Extract args via ",[45,5052,5053],{},"SavedStateHandle",":",[38,5056,5058],{"className":4843,"code":5057,"language":4845,"meta":43,"style":43},"class UserDetailsViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {\n    private val userId: Long = checkNotNull(savedStateHandle[\"userId\"])\n    val uiState = MutableStateFlow(UserDetailsUiState())\n    \u002F\u002F Load data in init...\n}\n",[45,5059,5060,5065,5070,5075,5080],{"__ignoreMap":43},[26,5061,5062],{"class":49,"line":50},[26,5063,5064],{},"class UserDetailsViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {\n",[26,5066,5067],{"class":49,"line":56},[26,5068,5069],{},"    private val userId: Long = checkNotNull(savedStateHandle[\"userId\"])\n",[26,5071,5072],{"class":49,"line":62},[26,5073,5074],{},"    val uiState = MutableStateFlow(UserDetailsUiState())\n",[26,5076,5077],{"class":49,"line":68},[26,5078,5079],{},"    \u002F\u002F Load data in init...\n",[26,5081,5082],{"class":49,"line":74},[26,5083,89],{},[5034,5085,5086],{"start":62},[110,5087,5088,5091,5092,5095],{},[181,5089,5090],{},"Composable state",": UI-only like ",[45,5093,5094],{},"rememberSaveable { mutableStateOf(\"\") }"," for inputs\u002Ftoggles.",[22,5097,5098],{},"This separation makes nav robust: pass ID, fetch fresh data, avoid fragile deep passing.",[17,5100,5102],{"id":5101},"route-level-wiring-and-tab-polish","Route-Level Wiring and Tab Polish",[22,5104,5105,5106,5109],{},"Avoid scattering ",[45,5107,5108],{},"NavController"," in leaf UI—pass lambdas from route composables for reusable, testable screens:",[38,5111,5113],{"className":4843,"code":5112,"language":4845,"meta":43,"style":43},"@Composable\nfun HomeRoute(navController: NavHostController) {\n    HomeScreen(\n        onOpenSettings = { navController.navigate(\"settings\") },\n        onOpenUser = { id -> navController.navigate(\"user\u002F$id\") }\n    )\n}\n@Composable\nfun HomeScreen(onOpenSettings: () -> Unit, onOpenUser: (Long) -> Unit) {\n    \u002F\u002F Buttons call lambdas\n}\n",[45,5114,5115,5119,5124,5129,5134,5139,5144,5148,5152,5157,5162],{"__ignoreMap":43},[26,5116,5117],{"class":49,"line":50},[26,5118,4852],{},[26,5120,5121],{"class":49,"line":56},[26,5122,5123],{},"fun HomeRoute(navController: NavHostController) {\n",[26,5125,5126],{"class":49,"line":62},[26,5127,5128],{},"    HomeScreen(\n",[26,5130,5131],{"class":49,"line":68},[26,5132,5133],{},"        onOpenSettings = { navController.navigate(\"settings\") },\n",[26,5135,5136],{"class":49,"line":74},[26,5137,5138],{},"        onOpenUser = { id -> navController.navigate(\"user\u002F$id\") }\n",[26,5140,5141],{"class":49,"line":80},[26,5142,5143],{},"    )\n",[26,5145,5146],{"class":49,"line":86},[26,5147,89],{},[26,5149,5150],{"class":49,"line":4885},[26,5151,4852],{},[26,5153,5154],{"class":49,"line":4891},[26,5155,5156],{},"fun HomeScreen(onOpenSettings: () -> Unit, onOpenUser: (Long) -> Unit) {\n",[26,5158,5159],{"class":49,"line":4897},[26,5160,5161],{},"    \u002F\u002F Buttons call lambdas\n",[26,5163,5164],{"class":49,"line":4902},[26,5165,89],{},[22,5167,5168],{},"For bottom tabs, use this nav spec to avoid duplicates, save\u002Frestore state:",[38,5170,5172],{"className":4843,"code":5171,"language":4845,"meta":43,"style":43},"navController.navigate(route) {\n    popUpTo(navController.graph.startDestinationId) { saveState = true }\n    launchSingleTop = true\n    restoreState = true\n}\n",[45,5173,5174,5179,5184,5189,5194],{"__ignoreMap":43},[26,5175,5176],{"class":49,"line":50},[26,5177,5178],{},"navController.navigate(route) {\n",[26,5180,5181],{"class":49,"line":56},[26,5182,5183],{},"    popUpTo(navController.graph.startDestinationId) { saveState = true }\n",[26,5185,5186],{"class":49,"line":62},[26,5187,5188],{},"    launchSingleTop = true\n",[26,5190,5191],{"class":49,"line":68},[26,5192,5193],{},"    restoreState = true\n",[26,5195,5196],{"class":49,"line":74},[26,5197,89],{},[22,5199,5200],{},"This preserves tab state across switches, polishing UX.",[17,5202,5204],{"id":5203},"full-stack-ties-it-together","Full Stack Ties It Together",[22,5206,5207,5208,5211,5212,5215,5216,5219,5220,5223,5224,5227],{},"Thin ",[45,5209,5210],{},"MainActivity"," sets ",[45,5213,5214],{},"App()"," with ",[45,5217,5218],{},"rememberNavController()",". ",[45,5221,5222],{},"AppNavHost"," wires root. Graphs use route sealed interfaces (e.g., ",[45,5225,5226],{},"AuthDest.Login.route","). UserDetails handles args:",[38,5229,5231],{"className":4843,"code":5230,"language":4845,"meta":43,"style":43},"composable(\n    route = MainDest.UserDetails.route,\n    arguments = listOf(navArgument(MainDest.UserDetails.ARG) { type = NavType.LongType })\n) { entry ->\n    val userId = entry.arguments?.getLong(MainDest.UserDetails.ARG) ?: return@composable\n    UserDetailsRoute(userId)\n}\n",[45,5232,5233,5238,5243,5248,5253,5258,5263],{"__ignoreMap":43},[26,5234,5235],{"class":49,"line":50},[26,5236,5237],{},"composable(\n",[26,5239,5240],{"class":49,"line":56},[26,5241,5242],{},"    route = MainDest.UserDetails.route,\n",[26,5244,5245],{"class":49,"line":62},[26,5246,5247],{},"    arguments = listOf(navArgument(MainDest.UserDetails.ARG) { type = NavType.LongType })\n",[26,5249,5250],{"class":49,"line":68},[26,5251,5252],{},") { entry ->\n",[26,5254,5255],{"class":49,"line":74},[26,5256,5257],{},"    val userId = entry.arguments?.getLong(MainDest.UserDetails.ARG) ?: return@composable\n",[26,5259,5260],{"class":49,"line":80},[26,5261,5262],{},"    UserDetailsRoute(userId)\n",[26,5264,5265],{"class":49,"line":86},[26,5266,89],{},[22,5268,5269,5272,5273,5276,5277,5280,5281,5284],{},[45,5270,5271],{},"UserDetailsRoute"," injects ",[45,5274,5275],{},"viewModel()",", collects ",[45,5278,5279],{},"uiState",", passes to pure ",[45,5282,5283],{},"UserDetailsScreen",". Add screens freely without central chaos.",[310,5286,312],{},{"title":43,"searchDepth":56,"depth":56,"links":5288},[5289,5290,5291,5292],{"id":4833,"depth":56,"text":4834},{"id":5025,"depth":56,"text":5026},{"id":5101,"depth":56,"text":5102},{"id":5203,"depth":56,"text":5204},[321],{"content_references":5295,"triage":5296},[],{"relevance":68,"novelty":62,"quality":68,"actionability":68,"composite":5297,"reasoning":5298},3.8,"Category: Software Engineering. The article provides a practical approach to scaling navigation in Jetpack Compose, addressing a common pain point for developers managing complex app architectures. It includes specific code examples and a structured method for implementing nested graphs and layered state, making it actionable for developers looking to improve their navigation systems.","\u002Fsummaries\u002Fscale-compose-nav-with-nested-graphs-and-state-lay-summary","2026-05-01 20:30:17","2026-05-03 17:00:35",{"title":4823,"description":43},{"loc":5299},"8d5558e87957c77a","https:\u002F\u002Flevelup.gitconnected.com\u002Fscaling-navigation-in-jetpack-compose-from-simple-apps-to-real-world-architecture-c6cf897f5a58?source=rss----5517fd7b58a6---4","summaries\u002Fscale-compose-nav-with-nested-graphs-and-state-lay-summary",[5308,346,347],"coding","For apps with 20-50 screens, use one root NavHost with nested feature graphs, centralized route objects, and layered state (nav args for IDs, ViewModels for data, composables for UI) to prevent navigation fragility.",[346,347],"l_opHrrBKP8SsiiSn4aRcYU6UI8dTbSHz_vxq7PFeGs"]