[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-linkedin-probes-6-167-chrome-extensions-invisibly-summary":3,"summaries-facets-categories":74,"summary-related-linkedin-probes-6-167-chrome-extensions-invisibly-summary":4371},{"id":4,"title":5,"ai":6,"body":13,"categories":52,"created_at":54,"date_modified":54,"description":46,"extension":55,"faq":54,"featured":56,"kicker_label":54,"meta":57,"navigation":58,"path":59,"published_at":60,"question":54,"scraped_at":54,"seo":61,"sitemap":62,"source_id":63,"source_name":64,"source_type":65,"source_url":66,"stem":67,"tags":68,"thumbnail_url":54,"tldr":71,"unknown_tags":72,"__hash__":73},"summaries\u002Fsummaries\u002Flinkedin-probes-6-167-chrome-extensions-invisibly-summary.md","LinkedIn Probes 6,167 Chrome Extensions Invisibly",{"provider":7,"model":8,"input_tokens":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",3668,1076,13498,0.0012491,{"type":14,"value":15,"toc":45},"minimark",[16,21,25,28,32,35,38,42],[17,18,20],"h2",{"id":19},"probing-mechanism-relies-on-legitimate-browser-apis","Probing Mechanism Relies on Legitimate Browser APIs",[22,23,24],"p",{},"LinkedIn loads a 2.7MB deobfuscated JavaScript bundle on every page, containing a hardcoded list of 6,167 Chrome extension IDs paired with specific internal file paths. The code probes each extension sequentially using browser APIs your browser grants freely—no exploits or hacks involved. If a file exists at the path (indicating installation), results are collected, encrypted, and transmitted to LinkedIn servers entirely in the background.",[22,26,27],{},"This technique determines exact extension presence without permissions, evading typical detection since it mimics standard resource checks.",[17,29,31],{"id":30},"why-its-worse-than-fingerprinting","Why It's Worse Than Fingerprinting",[22,33,34],{},"Unlike canvas or font-based fingerprinting, which infers device traits probabilistically, this directly inventories installed extensions—a unique, persistent identifier. Results enable precise user profiling (e.g., ad blockers, VPNs, productivity tools) for targeting, without privacy policy mention or user consent.",[22,36,37],{},"The operation's invisibility and scale make it one of the most invasive documented surveillance systems, legally murky as it leverages allowed APIs rather than vulnerabilities.",[17,39,41],{"id":40},"browsergate-scale-and-stealth","BrowserGate: Scale and Stealth",[22,43,44],{},"Dubbed 'BrowserGate,' this runs on production pages silently. No user notification occurs, and it's absent from LinkedIn's privacy disclosures. Developers auditing similar bundles can deobfuscate to uncover such lists, revealing targeted extensions for competitive intelligence or personalization.",{"title":46,"searchDepth":47,"depth":47,"links":48},"",2,[49,50,51],{"id":19,"depth":47,"text":20},{"id":30,"depth":47,"text":31},{"id":40,"depth":47,"text":41},[53],"Software Engineering",null,"md",false,{},true,"\u002Fsummaries\u002Flinkedin-probes-6-167-chrome-extensions-invisibly-summary","2026-04-08 21:21:20",{"title":5,"description":46},{"loc":59},"397f7ca2caab1c86","Level Up Coding","article","https:\u002F\u002Funknown","summaries\u002Flinkedin-probes-6-167-chrome-extensions-invisibly-summary",[69,70],"frontend","browser","LinkedIn's 2.7MB JS bundle silently probes 6,167 hardcoded Chrome extension IDs via internal file paths, encrypts results, and sends them to servers—undisclosed and more invasive than standard fingerprinting.",[70],"TfkUf1H2mby6Qe8BUXJvwO-cVfDUqsUveWfq6bIYIPs",[75,78,80,83,85,88,91,94,96,98,100,102,104,106,108,111,113,115,117,119,121,123,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,177,179,181,183,185,187,189,191,193,195,197,199,201,203,205,207,209,211,213,215,217,219,221,223,225,227,229,231,233,235,237,239,241,243,245,247,249,251,253,255,257,259,261,263,265,267,269,271,273,275,277,279,281,283,285,287,289,291,293,295,297,299,301,303,305,307,309,311,313,315,317,319,321,323,325,327,329,331,333,335,337,339,341,343,345,347,349,351,353,355,357,359,361,363,365,367,369,371,373,375,377,379,381,383,385,387,389,391,393,395,397,399,401,403,405,407,409,411,413,415,417,419,421,423,425,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,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,705,707,709,711,713,715,717,719,721,723,725,727,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,767,769,771,773,775,777,779,781,783,785,787,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],{"categories":76},[77],"Business & SaaS",{"categories":79},[77],{"categories":81},[82],"AI News & Trends",{"categories":84},[],{"categories":86},[87],"AI Automation",{"categories":89},[90],"Marketing & Growth",{"categories":92},[93],"Design & Frontend",{"categories":95},[53],{"categories":97},[],{"categories":99},[93],{"categories":101},[93],{"categories":103},[87],{"categories":105},[93],{"categories":107},[93],{"categories":109},[110],"AI & LLMs",{"categories":112},[93],{"categories":114},[93],{"categories":116},[],{"categories":118},[93],{"categories":120},[93],{"categories":122},[110],{"categories":124},[125],"Developer Productivity",{"categories":127},[110],{"categories":129},[110],{"categories":131},[110],{"categories":133},[82],{"categories":135},[110],{"categories":137},[87],{"categories":139},[77],{"categories":141},[82],{"categories":143},[90],{"categories":145},[],{"categories":147},[],{"categories":149},[87],{"categories":151},[90],{"categories":153},[110],{"categories":155},[125],{"categories":157},[82],{"categories":159},[],{"categories":161},[],{"categories":163},[],{"categories":165},[166],"Data Science & Visualization",{"categories":168},[],{"categories":170},[87],{"categories":172},[53],{"categories":174},[87],{"categories":176},[87],{"categories":178},[110],{"categories":180},[90],{"categories":182},[87],{"categories":184},[],{"categories":186},[],{"categories":188},[],{"categories":190},[93],{"categories":192},[93],{"categories":194},[87],{"categories":196},[90],{"categories":198},[125],{"categories":200},[93],{"categories":202},[110],{"categories":204},[53],{"categories":206},[110],{"categories":208},[],{"categories":210},[87],{"categories":212},[110],{"categories":214},[125],{"categories":216},[125],{"categories":218},[],{"categories":220},[90],{"categories":222},[77],{"categories":224},[110],{"categories":226},[77],{"categories":228},[77],{"categories":230},[87],{"categories":232},[90],{"categories":234},[87],{"categories":236},[77],{"categories":238},[87],{"categories":240},[93],{"categories":242},[110],{"categories":244},[93],{"categories":246},[110],{"categories":248},[77],{"categories":250},[110],{"categories":252},[90],{"categories":254},[],{"categories":256},[110],{"categories":258},[77],{"categories":260},[],{"categories":262},[82],{"categories":264},[53],{"categories":266},[],{"categories":268},[110],{"categories":270},[93],{"categories":272},[110],{"categories":274},[93],{"categories":276},[],{"categories":278},[87],{"categories":280},[],{"categories":282},[],{"categories":284},[],{"categories":286},[110],{"categories":288},[],{"categories":290},[110],{"categories":292},[110],{"categories":294},[93],{"categories":296},[110],{"categories":298},[125],{"categories":300},[87],{"categories":302},[90],{"categories":304},[125],{"categories":306},[125],{"categories":308},[125],{"categories":310},[90],{"categories":312},[90],{"categories":314},[110],{"categories":316},[110],{"categories":318},[77],{"categories":320},[93],{"categories":322},[53],{"categories":324},[77],{"categories":326},[77],{"categories":328},[77],{"categories":330},[93],{"categories":332},[],{"categories":334},[],{"categories":336},[110],{"categories":338},[110],{"categories":340},[53],{"categories":342},[110],{"categories":344},[110],{"categories":346},[],{"categories":348},[110],{"categories":350},[110],{"categories":352},[],{"categories":354},[110],{"categories":356},[82],{"categories":358},[82],{"categories":360},[],{"categories":362},[],{"categories":364},[90],{"categories":366},[90],{"categories":368},[53],{"categories":370},[110],{"categories":372},[],{"categories":374},[],{"categories":376},[87],{"categories":378},[110],{"categories":380},[110],{"categories":382},[],{"categories":384},[110,77],{"categories":386},[110],{"categories":388},[],{"categories":390},[110],{"categories":392},[110],{"categories":394},[],{"categories":396},[],{"categories":398},[87],{"categories":400},[110],{"categories":402},[110],{"categories":404},[87],{"categories":406},[110],{"categories":408},[],{"categories":410},[],{"categories":412},[110],{"categories":414},[],{"categories":416},[110],{"categories":418},[110],{"categories":420},[],{"categories":422},[87],{"categories":424},[],{"categories":426},[87,427],"DevOps & Cloud",{"categories":429},[110],{"categories":431},[87],{"categories":433},[110],{"categories":435},[],{"categories":437},[],{"categories":439},[],{"categories":441},[],{"categories":443},[110],{"categories":445},[87],{"categories":447},[],{"categories":449},[87],{"categories":451},[],{"categories":453},[110],{"categories":455},[],{"categories":457},[],{"categories":459},[],{"categories":461},[],{"categories":463},[87],{"categories":465},[110],{"categories":467},[90],{"categories":469},[82],{"categories":471},[77],{"categories":473},[125],{"categories":475},[],{"categories":477},[87],{"categories":479},[87],{"categories":481},[110],{"categories":483},[],{"categories":485},[],{"categories":487},[87],{"categories":489},[],{"categories":491},[87],{"categories":493},[87],{"categories":495},[82],{"categories":497},[87],{"categories":499},[110],{"categories":501},[],{"categories":503},[110],{"categories":505},[],{"categories":507},[82],{"categories":509},[87,510],"Product Strategy",{"categories":512},[53],{"categories":514},[510],{"categories":516},[110],{"categories":518},[87],{"categories":520},[],{"categories":522},[82],{"categories":524},[82],{"categories":526},[87],{"categories":528},[],{"categories":530},[87],{"categories":532},[110],{"categories":534},[110],{"categories":536},[125],{"categories":538},[110],{"categories":540},[],{"categories":542},[110,53],{"categories":544},[82],{"categories":546},[110],{"categories":548},[82],{"categories":550},[87],{"categories":552},[82],{"categories":554},[],{"categories":556},[53],{"categories":558},[77],{"categories":560},[],{"categories":562},[87],{"categories":564},[87],{"categories":566},[87],{"categories":568},[87],{"categories":570},[77],{"categories":572},[93],{"categories":574},[90],{"categories":576},[],{"categories":578},[87],{"categories":580},[],{"categories":582},[82],{"categories":584},[82],{"categories":586},[82],{"categories":588},[82],{"categories":590},[110],{"categories":592},[125],{"categories":594},[110],{"categories":596},[53],{"categories":598},[110,125],{"categories":600},[125],{"categories":602},[125],{"categories":604},[125],{"categories":606},[125],{"categories":608},[110],{"categories":610},[],{"categories":612},[],{"categories":614},[90],{"categories":616},[110],{"categories":618},[125],{"categories":620},[110],{"categories":622},[93],{"categories":624},[53],{"categories":626},[],{"categories":628},[110],{"categories":630},[125],{"categories":632},[90],{"categories":634},[82],{"categories":636},[53],{"categories":638},[110],{"categories":640},[],{"categories":642},[53],{"categories":644},[93],{"categories":646},[77],{"categories":648},[77],{"categories":650},[],{"categories":652},[93],{"categories":654},[82],{"categories":656},[125],{"categories":658},[87],{"categories":660},[87],{"categories":662},[110],{"categories":664},[110],{"categories":666},[82],{"categories":668},[82],{"categories":670},[125],{"categories":672},[82],{"categories":674},[],{"categories":676},[510],{"categories":678},[87],{"categories":680},[82],{"categories":682},[82],{"categories":684},[82],{"categories":686},[110],{"categories":688},[87],{"categories":690},[87],{"categories":692},[77],{"categories":694},[77],{"categories":696},[110],{"categories":698},[82],{"categories":700},[],{"categories":702},[110],{"categories":704},[77],{"categories":706},[87],{"categories":708},[87],{"categories":710},[87],{"categories":712},[93],{"categories":714},[87],{"categories":716},[125],{"categories":718},[82],{"categories":720},[82],{"categories":722},[82],{"categories":724},[82],{"categories":726},[82],{"categories":728},[],{"categories":730},[],{"categories":732},[125],{"categories":734},[82],{"categories":736},[82],{"categories":738},[82],{"categories":740},[],{"categories":742},[110],{"categories":744},[],{"categories":746},[],{"categories":748},[93],{"categories":750},[77],{"categories":752},[],{"categories":754},[82],{"categories":756},[87],{"categories":758},[87],{"categories":760},[87],{"categories":762},[90],{"categories":764},[87],{"categories":766},[],{"categories":768},[82],{"categories":770},[82],{"categories":772},[],{"categories":774},[90],{"categories":776},[90],{"categories":778},[110],{"categories":780},[82],{"categories":782},[77],{"categories":784},[53],{"categories":786},[110],{"categories":788},[],{"categories":790},[110],{"categories":792},[110],{"categories":794},[53],{"categories":796},[110],{"categories":798},[110],{"categories":800},[110],{"categories":802},[90],{"categories":804},[82],{"categories":806},[110],{"categories":808},[110],{"categories":810},[82],{"categories":812},[87],{"categories":814},[125],{"categories":816},[77],{"categories":818},[110],{"categories":820},[125],{"categories":822},[125],{"categories":824},[],{"categories":826},[82],{"categories":828},[82],{"categories":830},[125],{"categories":832},[87],{"categories":834},[87],{"categories":836},[87],{"categories":838},[87],{"categories":840},[93],{"categories":842},[110],{"categories":844},[110],{"categories":846},[510],{"categories":848},[110],{"categories":850},[110],{"categories":852},[87],{"categories":854},[77],{"categories":856},[90],{"categories":858},[],{"categories":860},[77],{"categories":862},[77],{"categories":864},[],{"categories":866},[93],{"categories":868},[110],{"categories":870},[],{"categories":872},[],{"categories":874},[82],{"categories":876},[82],{"categories":878},[82],{"categories":880},[82],{"categories":882},[],{"categories":884},[82],{"categories":886},[110],{"categories":888},[],{"categories":890},[82],{"categories":892},[82],{"categories":894},[77],{"categories":896},[110],{"categories":898},[],{"categories":900},[],{"categories":902},[82],{"categories":904},[82],{"categories":906},[110],{"categories":908},[82],{"categories":910},[82],{"categories":912},[82],{"categories":914},[82],{"categories":916},[82],{"categories":918},[],{"categories":920},[87],{"categories":922},[110],{"categories":924},[90],{"categories":926},[77],{"categories":928},[87],{"categories":930},[110],{"categories":932},[],{"categories":934},[90],{"categories":936},[82],{"categories":938},[82],{"categories":940},[82],{"categories":942},[82],{"categories":944},[125],{"categories":946},[53],{"categories":948},[],{"categories":950},[110],{"categories":952},[87],{"categories":954},[87],{"categories":956},[87],{"categories":958},[427],{"categories":960},[87],{"categories":962},[110],{"categories":964},[110],{"categories":966},[53],{"categories":968},[427],{"categories":970},[166],{"categories":972},[110],{"categories":974},[166],{"categories":976},[],{"categories":978},[90],{"categories":980},[90],{"categories":982},[93],{"categories":984},[427],{"categories":986},[87],{"categories":988},[110],{"categories":990},[110],{"categories":992},[87],{"categories":994},[87],{"categories":996},[87],{"categories":998},[125],{"categories":1000},[125],{"categories":1002},[87],{"categories":1004},[87],{"categories":1006},[],{"categories":1008},[87],{"categories":1010},[87],{"categories":1012},[110],{"categories":1014},[166],{"categories":1016},[87],{"categories":1018},[87],{"categories":1020},[87],{"categories":1022},[87],{"categories":1024},[77],{"categories":1026},[93],{"categories":1028},[82],{"categories":1030},[53],{"categories":1032},[427],{"categories":1034},[53],{"categories":1036},[166],{"categories":1038},[],{"categories":1040},[53],{"categories":1042},[],{"categories":1044},[],{"categories":1046},[53],{"categories":1048},[110],{"categories":1050},[],{"categories":1052},[],{"categories":1054},[],{"categories":1056},[77],{"categories":1058},[],{"categories":1060},[],{"categories":1062},[166],{"categories":1064},[110],{"categories":1066},[427],{"categories":1068},[110],{"categories":1070},[],{"categories":1072},[87],{"categories":1074},[125],{"categories":1076},[125],{"categories":1078},[90],{"categories":1080},[90],{"categories":1082},[90],{"categories":1084},[427],{"categories":1086},[53],{"categories":1088},[87],{"categories":1090},[77],{"categories":1092},[77],{"categories":1094},[53],{"categories":1096},[93],{"categories":1098},[166],{"categories":1100},[93],{"categories":1102},[],{"categories":1104},[110],{"categories":1106},[87],{"categories":1108},[87],{"categories":1110},[125],{"categories":1112},[87],{"categories":1114},[87],{"categories":1116},[93],{"categories":1118},[93],{"categories":1120},[87],{"categories":1122},[427],{"categories":1124},[110],{"categories":1126},[],{"categories":1128},[90],{"categories":1130},[87],{"categories":1132},[77],{"categories":1134},[87],{"categories":1136},[87],{"categories":1138},[],{"categories":1140},[110],{"categories":1142},[87],{"categories":1144},[87],{"categories":1146},[125],{"categories":1148},[87],{"categories":1150},[110],{"categories":1152},[],{"categories":1154},[87],{"categories":1156},[],{"categories":1158},[93],{"categories":1160},[125],{"categories":1162},[110],{"categories":1164},[53],{"categories":1166},[93],{"categories":1168},[125],{"categories":1170},[166],{"categories":1172},[125],{"categories":1174},[],{"categories":1176},[110],{"categories":1178},[110],{"categories":1180},[510],{"categories":1182},[53],{"categories":1184},[110,87],{"categories":1186},[87],{"categories":1188},[110],{"categories":1190},[87],{"categories":1192},[87,53],{"categories":1194},[87],{"categories":1196},[110],{"categories":1198},[],{"categories":1200},[125],{"categories":1202},[110],{"categories":1204},[87],{"categories":1206},[110],{"categories":1208},[],{"categories":1210},[53],{"categories":1212},[87],{"categories":1214},[],{"categories":1216},[166],{"categories":1218},[53],{"categories":1220},[87],{"categories":1222},[53],{"categories":1224},[],{"categories":1226},[87],{"categories":1228},[],{"categories":1230},[87],{"categories":1232},[],{"categories":1234},[],{"categories":1236},[93],{"categories":1238},[125],{"categories":1240},[110],{"categories":1242},[],{"categories":1244},[87],{"categories":1246},[53],{"categories":1248},[110],{"categories":1250},[110],{"categories":1252},[125],{"categories":1254},[77],{"categories":1256},[],{"categories":1258},[110],{"categories":1260},[110],{"categories":1262},[110],{"categories":1264},[87],{"categories":1266},[110],{"categories":1268},[],{"categories":1270},[93],{"categories":1272},[110],{"categories":1274},[87],{"categories":1276},[],{"categories":1278},[110],{"categories":1280},[],{"categories":1282},[110],{"categories":1284},[],{"categories":1286},[],{"categories":1288},[],{"categories":1290},[110],{"categories":1292},[110],{"categories":1294},[110],{"categories":1296},[],{"categories":1298},[110],{"categories":1300},[110],{"categories":1302},[110],{"categories":1304},[],{"categories":1306},[110],{"categories":1308},[],{"categories":1310},[90],{"categories":1312},[110],{"categories":1314},[],{"categories":1316},[],{"categories":1318},[],{"categories":1320},[110],{"categories":1322},[82],{"categories":1324},[82],{"categories":1326},[],{"categories":1328},[87],{"categories":1330},[110],{"categories":1332},[],{"categories":1334},[110],{"categories":1336},[110],{"categories":1338},[82],{"categories":1340},[],{"categories":1342},[110],{"categories":1344},[82],{"categories":1346},[87],{"categories":1348},[110],{"categories":1350},[],{"categories":1352},[],{"categories":1354},[],{"categories":1356},[87],{"categories":1358},[87],{"categories":1360},[87],{"categories":1362},[87],{"categories":1364},[110],{"categories":1366},[93],{"categories":1368},[93],{"categories":1370},[87],{"categories":1372},[87],{"categories":1374},[125],{"categories":1376},[510],{"categories":1378},[125],{"categories":1380},[125],{"categories":1382},[110],{"categories":1384},[87],{"categories":1386},[110],{"categories":1388},[125],{"categories":1390},[110],{"categories":1392},[87],{"categories":1394},[87],{"categories":1396},[87],{"categories":1398},[87],{"categories":1400},[87],{"categories":1402},[110],{"categories":1404},[125],{"categories":1406},[125],{"categories":1408},[90],{"categories":1410},[87],{"categories":1412},[],{"categories":1414},[87],{"categories":1416},[],{"categories":1418},[82],{"categories":1420},[110],{"categories":1422},[],{"categories":1424},[77],{"categories":1426},[93],{"categories":1428},[93],{"categories":1430},[87],{"categories":1432},[87],{"categories":1434},[110],{"categories":1436},[110],{"categories":1438},[82],{"categories":1440},[82],{"categories":1442},[427],{"categories":1444},[87],{"categories":1446},[82],{"categories":1448},[],{"categories":1450},[110],{"categories":1452},[87],{"categories":1454},[87],{"categories":1456},[87],{"categories":1458},[87],{"categories":1460},[110],{"categories":1462},[110],{"categories":1464},[110],{"categories":1466},[110],{"categories":1468},[87],{"categories":1470},[87],{"categories":1472},[87],{"categories":1474},[87],{"categories":1476},[],{"categories":1478},[93],{"categories":1480},[110],{"categories":1482},[110],{"categories":1484},[110],{"categories":1486},[],{"categories":1488},[90],{"categories":1490},[],{"categories":1492},[125],{"categories":1494},[],{"categories":1496},[87],{"categories":1498},[125],{"categories":1500},[93],{"categories":1502},[125],{"categories":1504},[],{"categories":1506},[125],{"categories":1508},[125],{"categories":1510},[],{"categories":1512},[93],{"categories":1514},[87],{"categories":1516},[87],{"categories":1518},[125],{"categories":1520},[110],{"categories":1522},[110],{"categories":1524},[],{"categories":1526},[82],{"categories":1528},[],{"categories":1530},[90],{"categories":1532},[],{"categories":1534},[93],{"categories":1536},[82],{"categories":1538},[93],{"categories":1540},[93],{"categories":1542},[93],{"categories":1544},[93],{"categories":1546},[93],{"categories":1548},[93],{"categories":1550},[93],{"categories":1552},[93],{"categories":1554},[93],{"categories":1556},[93],{"categories":1558},[],{"categories":1560},[87],{"categories":1562},[93],{"categories":1564},[110],{"categories":1566},[110],{"categories":1568},[93],{"categories":1570},[93],{"categories":1572},[93],{"categories":1574},[93],{"categories":1576},[93],{"categories":1578},[93],{"categories":1580},[93],{"categories":1582},[110,93],{"categories":1584},[93],{"categories":1586},[93],{"categories":1588},[93],{"categories":1590},[93],{"categories":1592},[],{"categories":1594},[93],{"categories":1596},[93],{"categories":1598},[93],{"categories":1600},[93],{"categories":1602},[93],{"categories":1604},[93],{"categories":1606},[93],{"categories":1608},[93],{"categories":1610},[93],{"categories":1612},[93,110],{"categories":1614},[93],{"categories":1616},[93],{"categories":1618},[],{"categories":1620},[82],{"categories":1622},[],{"categories":1624},[110],{"categories":1626},[],{"categories":1628},[87],{"categories":1630},[427],{"categories":1632},[510],{"categories":1634},[87],{"categories":1636},[87],{"categories":1638},[],{"categories":1640},[87],{"categories":1642},[],{"categories":1644},[87],{"categories":1646},[],{"categories":1648},[],{"categories":1650},[110],{"categories":1652},[110],{"categories":1654},[110],{"categories":1656},[82],{"categories":1658},[82],{"categories":1660},[82],{"categories":1662},[82],{"categories":1664},[],{"categories":1666},[82],{"categories":1668},[],{"categories":1670},[82],{"categories":1672},[110],{"categories":1674},[82],{"categories":1676},[82],{"categories":1678},[82],{"categories":1680},[82],{"categories":1682},[110],{"categories":1684},[82],{"categories":1686},[87],{"categories":1688},[],{"categories":1690},[87],{"categories":1692},[82],{"categories":1694},[110],{"categories":1696},[82],{"categories":1698},[82],{"categories":1700},[82],{"categories":1702},[110],{"categories":1704},[110],{"categories":1706},[110],{"categories":1708},[],{"categories":1710},[],{"categories":1712},[110],{"categories":1714},[82],{"categories":1716},[],{"categories":1718},[110],{"categories":1720},[87],{"categories":1722},[110],{"categories":1724},[87],{"categories":1726},[87],{"categories":1728},[110],{"categories":1730},[],{"categories":1732},[],{"categories":1734},[87],{"categories":1736},[87],{"categories":1738},[87],{"categories":1740},[87],{"categories":1742},[87],{"categories":1744},[87],{"categories":1746},[87],{"categories":1748},[87],{"categories":1750},[],{"categories":1752},[87],{"categories":1754},[87],{"categories":1756},[87],{"categories":1758},[110],{"categories":1760},[110],{"categories":1762},[110],{"categories":1764},[82],{"categories":1766},[110],{"categories":1768},[110],{"categories":1770},[110],{"categories":1772},[87],{"categories":1774},[90],{"categories":1776},[90],{"categories":1778},[90],{"categories":1780},[87],{"categories":1782},[],{"categories":1784},[110],{"categories":1786},[],{"categories":1788},[],{"categories":1790},[110],{"categories":1792},[],{"categories":1794},[87],{"categories":1796},[93],{"categories":1798},[125],{"categories":1800},[166],{"categories":1802},[110],{"categories":1804},[87],{"categories":1806},[93],{"categories":1808},[87],{"categories":1810},[90,77],{"categories":1812},[87],{"categories":1814},[87],{"categories":1816},[427],{"categories":1818},[53],{"categories":1820},[90],{"categories":1822},[125],{"categories":1824},[110],{"categories":1826},[],{"categories":1828},[110],{"categories":1830},[],{"categories":1832},[110],{"categories":1834},[110],{"categories":1836},[87],{"categories":1838},[],{"categories":1840},[110],{"categories":1842},[110],{"categories":1844},[125],{"categories":1846},[87],{"categories":1848},[110],{"categories":1850},[110,125],{"categories":1852},[125],{"categories":1854},[],{"categories":1856},[110],{"categories":1858},[110],{"categories":1860},[110],{"categories":1862},[],{"categories":1864},[],{"categories":1866},[87],{"categories":1868},[90],{"categories":1870},[82],{"categories":1872},[87],{"categories":1874},[110],{"categories":1876},[82],{"categories":1878},[],{"categories":1880},[125],{"categories":1882},[82],{"categories":1884},[],{"categories":1886},[166],{"categories":1888},[90],{"categories":1890},[77],{"categories":1892},[82],{"categories":1894},[110],{"categories":1896},[87],{"categories":1898},[110],{"categories":1900},[87],{"categories":1902},[87],{"categories":1904},[82],{"categories":1906},[125],{"categories":1908},[77],{"categories":1910},[110],{"categories":1912},[110],{"categories":1914},[],{"categories":1916},[],{"categories":1918},[110],{"categories":1920},[],{"categories":1922},[110],{"categories":1924},[82],{"categories":1926},[],{"categories":1928},[87],{"categories":1930},[125],{"categories":1932},[82],{"categories":1934},[125],{"categories":1936},[87],{"categories":1938},[110],{"categories":1940},[],{"categories":1942},[87],{"categories":1944},[93],{"categories":1946},[87],{"categories":1948},[93],{"categories":1950},[87],{"categories":1952},[87],{"categories":1954},[93],{"categories":1956},[],{"categories":1958},[],{"categories":1960},[93],{"categories":1962},[93],{"categories":1964},[93],{"categories":1966},[53],{"categories":1968},[125],{"categories":1970},[125],{"categories":1972},[87],{"categories":1974},[82],{"categories":1976},[125],{"categories":1978},[125],{"categories":1980},[90],{"categories":1982},[93],{"categories":1984},[87],{"categories":1986},[87],{"categories":1988},[110],{"categories":1990},[125],{"categories":1992},[110],{"categories":1994},[427],{"categories":1996},[510],{"categories":1998},[],{"categories":2000},[],{"categories":2002},[87],{"categories":2004},[82],{"categories":2006},[90],{"categories":2008},[90],{"categories":2010},[166],{"categories":2012},[166],{"categories":2014},[166],{"categories":2016},[87],{"categories":2018},[],{"categories":2020},[],{"categories":2022},[166],{"categories":2024},[53],{"categories":2026},[110],{"categories":2028},[53],{"categories":2030},[166],{"categories":2032},[53],{"categories":2034},[166],{"categories":2036},[53],{"categories":2038},[125],{"categories":2040},[110],{"categories":2042},[],{"categories":2044},[166],{"categories":2046},[427],{"categories":2048},[],{"categories":2050},[110],{"categories":2052},[110],{"categories":2054},[],{"categories":2056},[],{"categories":2058},[110],{"categories":2060},[110],{"categories":2062},[82],{"categories":2064},[110],{"categories":2066},[82],{"categories":2068},[],{"categories":2070},[],{"categories":2072},[82],{"categories":2074},[82],{"categories":2076},[110],{"categories":2078},[110],{"categories":2080},[110],{"categories":2082},[110],{"categories":2084},[110],{"categories":2086},[110],{"categories":2088},[90],{"categories":2090},[],{"categories":2092},[110],{"categories":2094},[],{"categories":2096},[],{"categories":2098},[87],{"categories":2100},[125],{"categories":2102},[],{"categories":2104},[427],{"categories":2106},[110,427],{"categories":2108},[110],{"categories":2110},[93],{"categories":2112},[93],{"categories":2114},[93],{"categories":2116},[93],{"categories":2118},[],{"categories":2120},[],{"categories":2122},[],{"categories":2124},[53],{"categories":2126},[87],{"categories":2128},[77],{"categories":2130},[53],{"categories":2132},[125],{"categories":2134},[93],{"categories":2136},[],{"categories":2138},[90],{"categories":2140},[510],{"categories":2142},[166],{"categories":2144},[166],{"categories":2146},[166],{"categories":2148},[125],{"categories":2150},[510],{"categories":2152},[125],{"categories":2154},[],{"categories":2156},[77],{"categories":2158},[53],{"categories":2160},[110],{"categories":2162},[90],{"categories":2164},[53],{"categories":2166},[90],{"categories":2168},[110],{"categories":2170},[93],{"categories":2172},[53],{"categories":2174},[427],{"categories":2176},[110],{"categories":2178},[82],{"categories":2180},[53],{"categories":2182},[],{"categories":2184},[110],{"categories":2186},[53],{"categories":2188},[53],{"categories":2190},[87],{"categories":2192},[],{"categories":2194},[90],{"categories":2196},[90],{"categories":2198},[90],{"categories":2200},[87],{"categories":2202},[110],{"categories":2204},[],{"categories":2206},[77],{"categories":2208},[125],{"categories":2210},[125],{"categories":2212},[166],{"categories":2214},[77],{"categories":2216},[82],{"categories":2218},[166],{"categories":2220},[],{"categories":2222},[82],{"categories":2224},[82],{"categories":2226},[82],{"categories":2228},[110],{"categories":2230},[77],{"categories":2232},[110],{"categories":2234},[],{"categories":2236},[],{"categories":2238},[],{"categories":2240},[53],{"categories":2242},[87],{"categories":2244},[],{"categories":2246},[125],{"categories":2248},[93],{"categories":2250},[],{"categories":2252},[90],{"categories":2254},[],{"categories":2256},[93],{"categories":2258},[110],{"categories":2260},[125],{"categories":2262},[77],{"categories":2264},[],{"categories":2266},[93],{"categories":2268},[93],{"categories":2270},[110],{"categories":2272},[],{"categories":2274},[],{"categories":2276},[53],{"categories":2278},[110],{"categories":2280},[],{"categories":2282},[87],{"categories":2284},[110],{"categories":2286},[],{"categories":2288},[53],{"categories":2290},[87],{"categories":2292},[110],{"categories":2294},[166],{"categories":2296},[110],{"categories":2298},[],{"categories":2300},[166],{"categories":2302},[110],{"categories":2304},[53],{"categories":2306},[110],{"categories":2308},[166],{"categories":2310},[87],{"categories":2312},[110],{"categories":2314},[110],{"categories":2316},[110,87],{"categories":2318},[87],{"categories":2320},[87],{"categories":2322},[87],{"categories":2324},[93],{"categories":2326},[125],{"categories":2328},[110],{"categories":2330},[125],{"categories":2332},[93],{"categories":2334},[110],{"categories":2336},[],{"categories":2338},[],{"categories":2340},[110],{"categories":2342},[110],{"categories":2344},[110],{"categories":2346},[87],{"categories":2348},[],{"categories":2350},[110],{"categories":2352},[110],{"categories":2354},[87],{"categories":2356},[87],{"categories":2358},[110],{"categories":2360},[110],{"categories":2362},[],{"categories":2364},[110],{"categories":2366},[],{"categories":2368},[110],{"categories":2370},[110],{"categories":2372},[110],{"categories":2374},[110],{"categories":2376},[110],{"categories":2378},[110],{"categories":2380},[110],{"categories":2382},[],{"categories":2384},[110],{"categories":2386},[82],{"categories":2388},[82],{"categories":2390},[],{"categories":2392},[],{"categories":2394},[110],{"categories":2396},[],{"categories":2398},[110],{"categories":2400},[110,427],{"categories":2402},[],{"categories":2404},[82],{"categories":2406},[],{"categories":2408},[110],{"categories":2410},[],{"categories":2412},[],{"categories":2414},[],{"categories":2416},[110],{"categories":2418},[],{"categories":2420},[110],{"categories":2422},[],{"categories":2424},[110],{"categories":2426},[110],{"categories":2428},[],{"categories":2430},[],{"categories":2432},[110,427],{"categories":2434},[427,110],{"categories":2436},[82],{"categories":2438},[],{"categories":2440},[110],{"categories":2442},[],{"categories":2444},[110],{"categories":2446},[110],{"categories":2448},[],{"categories":2450},[82],{"categories":2452},[110,77],{"categories":2454},[82],{"categories":2456},[53],{"categories":2458},[],{"categories":2460},[87],{"categories":2462},[110],{"categories":2464},[90],{"categories":2466},[110],{"categories":2468},[125],{"categories":2470},[125],{"categories":2472},[427],{"categories":2474},[82],{"categories":2476},[110],{"categories":2478},[427],{"categories":2480},[53],{"categories":2482},[110],{"categories":2484},[125],{"categories":2486},[],{"categories":2488},[110],{"categories":2490},[],{"categories":2492},[],{"categories":2494},[110],{"categories":2496},[],{"categories":2498},[110],{"categories":2500},[53],{"categories":2502},[77],{"categories":2504},[125],{"categories":2506},[90],{"categories":2508},[87],{"categories":2510},[125],{"categories":2512},[],{"categories":2514},[90],{"categories":2516},[],{"categories":2518},[],{"categories":2520},[110],{"categories":2522},[82],{"categories":2524},[90],{"categories":2526},[],{"categories":2528},[110],{"categories":2530},[82],{"categories":2532},[82],{"categories":2534},[90],{"categories":2536},[82],{"categories":2538},[110],{"categories":2540},[82],{"categories":2542},[110],{"categories":2544},[],{"categories":2546},[110],{"categories":2548},[110],{"categories":2550},[110],{"categories":2552},[82],{"categories":2554},[],{"categories":2556},[],{"categories":2558},[93],{"categories":2560},[82],{"categories":2562},[],{"categories":2564},[110],{"categories":2566},[110],{"categories":2568},[110],{"categories":2570},[110],{"categories":2572},[110],{"categories":2574},[110],{"categories":2576},[110],{"categories":2578},[110],{"categories":2580},[110],{"categories":2582},[90],{"categories":2584},[110,93],{"categories":2586},[82],{"categories":2588},[110],{"categories":2590},[53],{"categories":2592},[166],{"categories":2594},[110],{"categories":2596},[110],{"categories":2598},[],{"categories":2600},[],{"categories":2602},[110],{"categories":2604},[110],{"categories":2606},[],{"categories":2608},[93],{"categories":2610},[93],{"categories":2612},[125],{"categories":2614},[110],{"categories":2616},[125],{"categories":2618},[110],{"categories":2620},[110],{"categories":2622},[],{"categories":2624},[110],{"categories":2626},[],{"categories":2628},[],{"categories":2630},[110],{"categories":2632},[],{"categories":2634},[],{"categories":2636},[82],{"categories":2638},[],{"categories":2640},[110],{"categories":2642},[110],{"categories":2644},[110],{"categories":2646},[],{"categories":2648},[110],{"categories":2650},[82],{"categories":2652},[510],{"categories":2654},[87],{"categories":2656},[110],{"categories":2658},[],{"categories":2660},[87],{"categories":2662},[110],{"categories":2664},[],{"categories":2666},[110],{"categories":2668},[],{"categories":2670},[87],{"categories":2672},[],{"categories":2674},[],{"categories":2676},[87],{"categories":2678},[87],{"categories":2680},[87],{"categories":2682},[110],{"categories":2684},[],{"categories":2686},[87],{"categories":2688},[87],{"categories":2690},[],{"categories":2692},[],{"categories":2694},[87],{"categories":2696},[110],{"categories":2698},[82],{"categories":2700},[510],{"categories":2702},[90],{"categories":2704},[],{"categories":2706},[93],{"categories":2708},[110],{"categories":2710},[110],{"categories":2712},[77],{"categories":2714},[82],{"categories":2716},[82],{"categories":2718},[82],{"categories":2720},[82],{"categories":2722},[],{"categories":2724},[87],{"categories":2726},[87],{"categories":2728},[87],{"categories":2730},[87],{"categories":2732},[125],{"categories":2734},[110],{"categories":2736},[77],{"categories":2738},[],{"categories":2740},[125],{"categories":2742},[87],{"categories":2744},[93],{"categories":2746},[93],{"categories":2748},[93],{"categories":2750},[93],{"categories":2752},[93],{"categories":2754},[93],{"categories":2756},[110,77],{"categories":2758},[87],{"categories":2760},[77],{"categories":2762},[82],{"categories":2764},[82],{"categories":2766},[125],{"categories":2768},[],{"categories":2770},[],{"categories":2772},[90],{"categories":2774},[],{"categories":2776},[110],{"categories":2778},[90],{"categories":2780},[110],{"categories":2782},[53],{"categories":2784},[87],{"categories":2786},[77],{"categories":2788},[87],{"categories":2790},[53],{"categories":2792},[125],{"categories":2794},[87],{"categories":2796},[],{"categories":2798},[125],{"categories":2800},[],{"categories":2802},[],{"categories":2804},[87],{"categories":2806},[87],{"categories":2808},[87],{"categories":2810},[110],{"categories":2812},[110],{"categories":2814},[110],{"categories":2816},[110],{"categories":2818},[110],{"categories":2820},[],{"categories":2822},[427],{"categories":2824},[110],{"categories":2826},[],{"categories":2828},[],{"categories":2830},[],{"categories":2832},[125],{"categories":2834},[],{"categories":2836},[110],{"categories":2838},[],{"categories":2840},[82],{"categories":2842},[110],{"categories":2844},[82],{"categories":2846},[110],{"categories":2848},[87],{"categories":2850},[],{"categories":2852},[110],{"categories":2854},[110],{"categories":2856},[],{"categories":2858},[166],{"categories":2860},[166],{"categories":2862},[53],{"categories":2864},[93],{"categories":2866},[],{"categories":2868},[110],{"categories":2870},[87],{"categories":2872},[],{"categories":2874},[],{"categories":2876},[110],{"categories":2878},[53],{"categories":2880},[87],{"categories":2882},[77],{"categories":2884},[125,53],{"categories":2886},[53],{"categories":2888},[110],{"categories":2890},[87],{"categories":2892},[],{"categories":2894},[],{"categories":2896},[],{"categories":2898},[],{"categories":2900},[],{"categories":2902},[],{"categories":2904},[110],{"categories":2906},[],{"categories":2908},[],{"categories":2910},[110],{"categories":2912},[],{"categories":2914},[],{"categories":2916},[],{"categories":2918},[110],{"categories":2920},[82],{"categories":2922},[],{"categories":2924},[],{"categories":2926},[],{"categories":2928},[110],{"categories":2930},[],{"categories":2932},[110],{"categories":2934},[110],{"categories":2936},[],{"categories":2938},[110],{"categories":2940},[],{"categories":2942},[125],{"categories":2944},[125],{"categories":2946},[],{"categories":2948},[90],{"categories":2950},[],{"categories":2952},[],{"categories":2954},[],{"categories":2956},[93],{"categories":2958},[82],{"categories":2960},[87],{"categories":2962},[110],{"categories":2964},[77],{"categories":2966},[110],{"categories":2968},[],{"categories":2970},[],{"categories":2972},[90],{"categories":2974},[87],{"categories":2976},[],{"categories":2978},[427],{"categories":2980},[],{"categories":2982},[110],{"categories":2984},[110],{"categories":2986},[90],{"categories":2988},[110],{"categories":2990},[93],{"categories":2992},[87],{"categories":2994},[110],{"categories":2996},[87],{"categories":2998},[110],{"categories":3000},[87],{"categories":3002},[125],{"categories":3004},[125],{"categories":3006},[93],{"categories":3008},[],{"categories":3010},[110],{"categories":3012},[110],{"categories":3014},[90],{"categories":3016},[510],{"categories":3018},[125],{"categories":3020},[82],{"categories":3022},[110],{"categories":3024},[82],{"categories":3026},[110],{"categories":3028},[110],{"categories":3030},[],{"categories":3032},[110],{"categories":3034},[],{"categories":3036},[110],{"categories":3038},[90],{"categories":3040},[110],{"categories":3042},[110],{"categories":3044},[110],{"categories":3046},[],{"categories":3048},[110],{"categories":3050},[110],{"categories":3052},[510],{"categories":3054},[],{"categories":3056},[82],{"categories":3058},[427],{"categories":3060},[53],{"categories":3062},[],{"categories":3064},[166],{"categories":3066},[],{"categories":3068},[],{"categories":3070},[82],{"categories":3072},[110],{"categories":3074},[],{"categories":3076},[110],{"categories":3078},[110],{"categories":3080},[87],{"categories":3082},[110],{"categories":3084},[82],{"categories":3086},[82],{"categories":3088},[93],{"categories":3090},[93],{"categories":3092},[93],{"categories":3094},[110],{"categories":3096},[166],{"categories":3098},[82],{"categories":3100},[125],{"categories":3102},[],{"categories":3104},[93],{"categories":3106},[427],{"categories":3108},[93],{"categories":3110},[93],{"categories":3112},[82],{"categories":3114},[427],{"categories":3116},[110],{"categories":3118},[110],{"categories":3120},[110],{"categories":3122},[110],{"categories":3124},[],{"categories":3126},[87],{"categories":3128},[110],{"categories":3130},[93],{"categories":3132},[],{"categories":3134},[],{"categories":3136},[82],{"categories":3138},[],{"categories":3140},[87],{"categories":3142},[87],{"categories":3144},[87],{"categories":3146},[87],{"categories":3148},[87],{"categories":3150},[87],{"categories":3152},[87],{"categories":3154},[87],{"categories":3156},[],{"categories":3158},[],{"categories":3160},[110],{"categories":3162},[],{"categories":3164},[125],{"categories":3166},[125],{"categories":3168},[166],{"categories":3170},[],{"categories":3172},[],{"categories":3174},[],{"categories":3176},[93],{"categories":3178},[110],{"categories":3180},[],{"categories":3182},[77],{"categories":3184},[77],{"categories":3186},[93],{"categories":3188},[125],{"categories":3190},[166],{"categories":3192},[93],{"categories":3194},[93],{"categories":3196},[],{"categories":3198},[87],{"categories":3200},[77],{"categories":3202},[77],{"categories":3204},[110],{"categories":3206},[87],{"categories":3208},[53],{"categories":3210},[93],{"categories":3212},[],{"categories":3214},[90],{"categories":3216},[166],{"categories":3218},[82],{"categories":3220},[82],{"categories":3222},[82],{"categories":3224},[427],{"categories":3226},[],{"categories":3228},[87],{"categories":3230},[],{"categories":3232},[87],{"categories":3234},[87],{"categories":3236},[110],{"categories":3238},[110],{"categories":3240},[53],{"categories":3242},[87],{"categories":3244},[53],{"categories":3246},[],{"categories":3248},[87],{"categories":3250},[93],{"categories":3252},[93],{"categories":3254},[93],{"categories":3256},[110],{"categories":3258},[87],{"categories":3260},[110],{"categories":3262},[77],{"categories":3264},[82],{"categories":3266},[93],{"categories":3268},[82],{"categories":3270},[110],{"categories":3272},[],{"categories":3274},[82],{"categories":3276},[87],{"categories":3278},[82],{"categories":3280},[82],{"categories":3282},[82],{"categories":3284},[],{"categories":3286},[],{"categories":3288},[82],{"categories":3290},[82],{"categories":3292},[],{"categories":3294},[82],{"categories":3296},[110],{"categories":3298},[110],{"categories":3300},[82],{"categories":3302},[82],{"categories":3304},[110],{"categories":3306},[],{"categories":3308},[110],{"categories":3310},[87],{"categories":3312},[110],{"categories":3314},[110],{"categories":3316},[],{"categories":3318},[110],{"categories":3320},[110],{"categories":3322},[110],{"categories":3324},[82],{"categories":3326},[],{"categories":3328},[],{"categories":3330},[],{"categories":3332},[],{"categories":3334},[110],{"categories":3336},[110],{"categories":3338},[90],{"categories":3340},[82],{"categories":3342},[],{"categories":3344},[],{"categories":3346},[],{"categories":3348},[],{"categories":3350},[],{"categories":3352},[110],{"categories":3354},[],{"categories":3356},[],{"categories":3358},[110],{"categories":3360},[],{"categories":3362},[87],{"categories":3364},[87],{"categories":3366},[87],{"categories":3368},[77],{"categories":3370},[],{"categories":3372},[90],{"categories":3374},[53],{"categories":3376},[53],{"categories":3378},[427],{"categories":3380},[82],{"categories":3382},[],{"categories":3384},[110],{"categories":3386},[110],{"categories":3388},[77],{"categories":3390},[],{"categories":3392},[77],{"categories":3394},[],{"categories":3396},[],{"categories":3398},[],{"categories":3400},[53],{"categories":3402},[87],{"categories":3404},[87],{"categories":3406},[87],{"categories":3408},[87],{"categories":3410},[87],{"categories":3412},[],{"categories":3414},[82],{"categories":3416},[110],{"categories":3418},[110],{"categories":3420},[110],{"categories":3422},[],{"categories":3424},[77],{"categories":3426},[],{"categories":3428},[93],{"categories":3430},[166],{"categories":3432},[93],{"categories":3434},[],{"categories":3436},[],{"categories":3438},[110],{"categories":3440},[87],{"categories":3442},[],{"categories":3444},[110],{"categories":3446},[110],{"categories":3448},[110],{"categories":3450},[87],{"categories":3452},[87],{"categories":3454},[110],{"categories":3456},[166],{"categories":3458},[87],{"categories":3460},[],{"categories":3462},[110],{"categories":3464},[],{"categories":3466},[510],{"categories":3468},[53],{"categories":3470},[166],{"categories":3472},[53],{"categories":3474},[427],{"categories":3476},[110],{"categories":3478},[53],{"categories":3480},[427],{"categories":3482},[53],{"categories":3484},[93],{"categories":3486},[93],{"categories":3488},[],{"categories":3490},[53],{"categories":3492},[],{"categories":3494},[125],{"categories":3496},[53],{"categories":3498},[],{"categories":3500},[166],{"categories":3502},[166],{"categories":3504},[510],{"categories":3506},[],{"categories":3508},[110],{"categories":3510},[53],{"categories":3512},[427],{"categories":3514},[87],{"categories":3516},[166],{"categories":3518},[110],{"categories":3520},[125],{"categories":3522},[110],{"categories":3524},[],{"categories":3526},[],{"categories":3528},[],{"categories":3530},[90],{"categories":3532},[110],{"categories":3534},[93],{"categories":3536},[53],{"categories":3538},[53],{"categories":3540},[110],{"categories":3542},[90],{"categories":3544},[125],{"categories":3546},[110],{"categories":3548},[53],{"categories":3550},[110],{"categories":3552},[53],{"categories":3554},[125],{"categories":3556},[125],{"categories":3558},[87],{"categories":3560},[125],{"categories":3562},[53],{"categories":3564},[77],{"categories":3566},[53],{"categories":3568},[53],{"categories":3570},[53],{"categories":3572},[53],{"categories":3574},[],{"categories":3576},[82],{"categories":3578},[],{"categories":3580},[166],{"categories":3582},[110],{"categories":3584},[110],{"categories":3586},[],{"categories":3588},[],{"categories":3590},[],{"categories":3592},[110],{"categories":3594},[82],{"categories":3596},[110],{"categories":3598},[110],{"categories":3600},[],{"categories":3602},[110],{"categories":3604},[93],{"categories":3606},[110],{"categories":3608},[110],{"categories":3610},[110],{"categories":3612},[],{"categories":3614},[],{"categories":3616},[],{"categories":3618},[427],{"categories":3620},[427],{"categories":3622},[77],{"categories":3624},[87],{"categories":3626},[77,90],{"categories":3628},[110],{"categories":3630},[82],{"categories":3632},[],{"categories":3634},[93],{"categories":3636},[166],{"categories":3638},[110],{"categories":3640},[53],{"categories":3642},[110],{"categories":3644},[],{"categories":3646},[166],{"categories":3648},[427],{"categories":3650},[87],{"categories":3652},[77],{"categories":3654},[427],{"categories":3656},[87],{"categories":3658},[125],{"categories":3660},[87],{"categories":3662},[125],{"categories":3664},[110],{"categories":3666},[125],{"categories":3668},[125],{"categories":3670},[53],{"categories":3672},[166],{"categories":3674},[110],{"categories":3676},[90],{"categories":3678},[],{"categories":3680},[110],{"categories":3682},[93],{"categories":3684},[166],{"categories":3686},[77],{"categories":3688},[110],{"categories":3690},[166],{"categories":3692},[125],{"categories":3694},[110],{"categories":3696},[110],{"categories":3698},[166],{"categories":3700},[110],{"categories":3702},[125],{"categories":3704},[110],{"categories":3706},[],{"categories":3708},[110],{"categories":3710},[110],{"categories":3712},[110],{"categories":3714},[110],{"categories":3716},[],{"categories":3718},[87],{"categories":3720},[427],{"categories":3722},[],{"categories":3724},[],{"categories":3726},[110],{"categories":3728},[77],{"categories":3730},[90],{"categories":3732},[77],{"categories":3734},[],{"categories":3736},[110],{"categories":3738},[82],{"categories":3740},[110],{"categories":3742},[110],{"categories":3744},[],{"categories":3746},[87],{"categories":3748},[82],{"categories":3750},[110,427],{"categories":3752},[87,427],{"categories":3754},[427],{"categories":3756},[110],{"categories":3758},[87],{"categories":3760},[87],{"categories":3762},[53],{"categories":3764},[53],{"categories":3766},[53],{"categories":3768},[110],{"categories":3770},[93],{"categories":3772},[87],{"categories":3774},[],{"categories":3776},[427],{"categories":3778},[],{"categories":3780},[427],{"categories":3782},[427],{"categories":3784},[77],{"categories":3786},[87],{"categories":3788},[],{"categories":3790},[427],{"categories":3792},[110],{"categories":3794},[82],{"categories":3796},[110],{"categories":3798},[93],{"categories":3800},[53],{"categories":3802},[53],{"categories":3804},[53],{"categories":3806},[427],{"categories":3808},[],{"categories":3810},[],{"categories":3812},[],{"categories":3814},[110],{"categories":3816},[53],{"categories":3818},[110],{"categories":3820},[53],{"categories":3822},[427],{"categories":3824},[427],{"categories":3826},[110],{"categories":3828},[87],{"categories":3830},[],{"categories":3832},[110],{"categories":3834},[110],{"categories":3836},[110],{"categories":3838},[],{"categories":3840},[],{"categories":3842},[427],{"categories":3844},[427],{"categories":3846},[110,427],{"categories":3848},[87],{"categories":3850},[87],{"categories":3852},[87],{"categories":3854},[87],{"categories":3856},[87],{"categories":3858},[],{"categories":3860},[53],{"categories":3862},[110],{"categories":3864},[53],{"categories":3866},[90],{"categories":3868},[110],{"categories":3870},[510],{"categories":3872},[510],{"categories":3874},[87],{"categories":3876},[53],{"categories":3878},[],{"categories":3880},[87],{"categories":3882},[110],{"categories":3884},[],{"categories":3886},[93],{"categories":3888},[],{"categories":3890},[110],{"categories":3892},[87],{"categories":3894},[82],{"categories":3896},[110],{"categories":3898},[],{"categories":3900},[],{"categories":3902},[93],{"categories":3904},[93],{"categories":3906},[125],{"categories":3908},[93],{"categories":3910},[87],{"categories":3912},[],{"categories":3914},[87],{"categories":3916},[82],{"categories":3918},[110],{"categories":3920},[110],{"categories":3922},[],{"categories":3924},[110],{"categories":3926},[125],{"categories":3928},[110],{"categories":3930},[],{"categories":3932},[166],{"categories":3934},[53],{"categories":3936},[53],{"categories":3938},[77],{"categories":3940},[77],{"categories":3942},[77],{"categories":3944},[87],{"categories":3946},[77],{"categories":3948},[87],{"categories":3950},[427],{"categories":3952},[510],{"categories":3954},[82],{"categories":3956},[82],{"categories":3958},[82],{"categories":3960},[427],{"categories":3962},[82,77],{"categories":3964},[166],{"categories":3966},[87],{"categories":3968},[],{"categories":3970},[110],{"categories":3972},[],{"categories":3974},[53],{"categories":3976},[166],{"categories":3978},[93],{"categories":3980},[53],{"categories":3982},[125],{"categories":3984},[],{"categories":3986},[],{"categories":3988},[510],{"categories":3990},[],{"categories":3992},[93],{"categories":3994},[93],{"categories":3996},[166],{"categories":3998},[],{"categories":4000},[110],{"categories":4002},[166],{"categories":4004},[],{"categories":4006},[110],{"categories":4008},[110],{"categories":4010},[],{"categories":4012},[125],{"categories":4014},[110],{"categories":4016},[],{"categories":4018},[110],{"categories":4020},[],{"categories":4022},[],{"categories":4024},[87],{"categories":4026},[87],{"categories":4028},[],{"categories":4030},[53],{"categories":4032},[53],{"categories":4034},[53],{"categories":4036},[110,87],{"categories":4038},[87],{"categories":4040},[87],{"categories":4042},[87],{"categories":4044},[166],{"categories":4046},[166],{"categories":4048},[],{"categories":4050},[82],{"categories":4052},[110],{"categories":4054},[166],{"categories":4056},[166],{"categories":4058},[82],{"categories":4060},[77],{"categories":4062},[87],{"categories":4064},[53],{"categories":4066},[110],{"categories":4068},[110],{"categories":4070},[87],{"categories":4072},[53],{"categories":4074},[87],{"categories":4076},[110],{"categories":4078},[90],{"categories":4080},[],{"categories":4082},[110],{"categories":4084},[110],{"categories":4086},[110],{"categories":4088},[53],{"categories":4090},[],{"categories":4092},[166],{"categories":4094},[110],{"categories":4096},[87],{"categories":4098},[87],{"categories":4100},[53],{"categories":4102},[125],{"categories":4104},[125],{"categories":4106},[82],{"categories":4108},[87],{"categories":4110},[],{"categories":4112},[87],{"categories":4114},[110],{"categories":4116},[82],{"categories":4118},[110],{"categories":4120},[110],{"categories":4122},[110],{"categories":4124},[87],{"categories":4126},[166],{"categories":4128},[110],{"categories":4130},[93],{"categories":4132},[110],{"categories":4134},[110],{"categories":4136},[110],{"categories":4138},[110],{"categories":4140},[],{"categories":4142},[110],{"categories":4144},[166],{"categories":4146},[93],{"categories":4148},[110],{"categories":4150},[93],{"categories":4152},[],{"categories":4154},[],{"categories":4156},[],{"categories":4158},[110],{"categories":4160},[],{"categories":4162},[],{"categories":4164},[],{"categories":4166},[],{"categories":4168},[87],{"categories":4170},[125],{"categories":4172},[87],{"categories":4174},[87],{"categories":4176},[53],{"categories":4178},[77],{"categories":4180},[110],{"categories":4182},[110],{"categories":4184},[110],{"categories":4186},[77],{"categories":4188},[125],{"categories":4190},[],{"categories":4192},[166],{"categories":4194},[90],{"categories":4196},[93],{"categories":4198},[125],{"categories":4200},[125],{"categories":4202},[510],{"categories":4204},[87],{"categories":4206},[110],{"categories":4208},[110],{"categories":4210},[125],{"categories":4212},[110],{"categories":4214},[],{"categories":4216},[],{"categories":4218},[427],{"categories":4220},[93],{"categories":4222},[125],{"categories":4224},[110],{"categories":4226},[82],{"categories":4228},[125],{"categories":4230},[77],{"categories":4232},[87],{"categories":4234},[87],{"categories":4236},[82],{"categories":4238},[110],{"categories":4240},[],{"categories":4242},[],{"categories":4244},[],{"categories":4246},[110],{"categories":4248},[],{"categories":4250},[82],{"categories":4252},[],{"categories":4254},[110],{"categories":4256},[],{"categories":4258},[82],{"categories":4260},[87],{"categories":4262},[110],{"categories":4264},[427],{"categories":4266},[110],{"categories":4268},[125],{"categories":4270},[110],{"categories":4272},[125],{"categories":4274},[],{"categories":4276},[],{"categories":4278},[125],{"categories":4280},[125],{"categories":4282},[125],{"categories":4284},[],{"categories":4286},[125],{"categories":4288},[87],{"categories":4290},[],{"categories":4292},[110],{"categories":4294},[90],{"categories":4296},[166],{"categories":4298},[110],{"categories":4300},[],{"categories":4302},[125],{"categories":4304},[110],{"categories":4306},[510],{"categories":4308},[125],{"categories":4310},[125],{"categories":4312},[90],{"categories":4314},[53],{"categories":4316},[53],{"categories":4318},[],{"categories":4320},[53],{"categories":4322},[110],{"categories":4324},[],{"categories":4326},[],{"categories":4328},[87],{"categories":4330},[],{"categories":4332},[87],{"categories":4334},[87],{"categories":4336},[82],{"categories":4338},[110],{"categories":4340},[82],{"categories":4342},[125],{"categories":4344},[82],{"categories":4346},[53],{"categories":4348},[53],{"categories":4350},[53],{"categories":4352},[82],{"categories":4354},[110],{"categories":4356},[87],{"categories":4358},[427],{"categories":4360},[77],{"categories":4362},[427],{"categories":4364},[427],{"categories":4366},[53],{"categories":4368},[427],{"categories":4370},[427],[4372,4787,4912,5039],{"id":4373,"title":4374,"ai":4375,"body":4380,"categories":4775,"created_at":54,"date_modified":54,"description":46,"extension":55,"faq":54,"featured":56,"kicker_label":54,"meta":4776,"navigation":58,"path":4777,"published_at":60,"question":54,"scraped_at":54,"seo":4778,"sitemap":4779,"source_id":4780,"source_name":64,"source_type":65,"source_url":66,"stem":4781,"tags":4782,"thumbnail_url":54,"tldr":4784,"unknown_tags":4785,"__hash__":4786},"summaries\u002Fsummaries\u002Fredux-s-design-for-surgical-re-renders-and-predict-summary.md","Redux's Design for Surgical Re-renders and Predictable State",{"provider":7,"model":8,"input_tokens":4376,"output_tokens":4377,"processing_time_ms":4378,"cost_usd":4379},8028,1502,14418,0.00233395,{"type":14,"value":4381,"toc":4769},[4382,4386,4417,4432,4443,4472,4476,4483,4497,4519,4529,4533,4544,4721,4732,4736,4748,4759,4765],[17,4383,4385],{"id":4384},"global-state-without-prop-drilling-or-wasteful-passes","Global State Without Prop Drilling or Wasteful Passes",[22,4387,4388,4389,4393,4394,4397,4398,4397,4401,4397,4404,4407,4408,4412,4413,4416],{},"Prop drilling forces irrelevant components to pass state like ",[4390,4391,4392],"code",{},"isLoggedIn"," through layers—",[4390,4395,4396],{},"App"," to ",[4390,4399,4400],{},"Layout",[4390,4402,4403],{},"Navbar",[4390,4405,4406],{},"UserAvatar","—even when intermediates don't use it. Redux fixes this by storing shared state in a single central ",[4409,4410,4411],"strong",{},"store"," outside the React component tree, accessible by any component via ",[4390,4414,4415],{},"react-redux"," hooks.",[22,4418,4419,4420,4423,4424,4427,4428,4431],{},"State is data that changes over time and triggers UI re-renders. Local ",[4390,4421,4422],{},"useState"," notifies React via ",[4390,4425,4426],{},"setState",", but plain ",[4390,4429,4430],{},"let"," variables fail because they don't signal changes or persist across re-renders. Redux's store holds all global state as one predictable JavaScript object, eliminating threading and enabling direct access.",[22,4433,4434,4435,4438,4439,4442],{},"When state like ",[4390,4436,4437],{},"x"," changes (with 4 subscribers out of 10 total), only those 4 components re-render—not the whole app or all subscribers. ",[4390,4440,4441],{},"useSelector(state => state.x)"," subscribes components to specific slices via a newsletter-like model: Redux tracks per-slice subscribers and notifies surgically on changes.",[22,4444,4445,4448,4449,4452,4453,4456,4457,4460,4461,4463,4464,4467,4468,4471],{},[4390,4446,4447],{},"useSelector"," runs after every store update, performing strict ",[4390,4450,4451],{},"==="," equality checks on selected values. Creating new objects inline like ",[4390,4454,4455],{},"useSelector(state => ({ x: state.x }))"," fails because ",[4390,4458,4459],{},"{}"," !== ",[4390,4462,4459],{}," by reference, causing unnecessary re-renders. Fix by using separate ",[4390,4465,4466],{},"useSelectors"," or memoized selectors from ",[4390,4469,4470],{},"reselect",".",[17,4473,4475],{"id":4474},"unidirectional-flow-ensures-predictability-and-debuggability","Unidirectional Flow Ensures Predictability and Debuggability",[22,4477,4478,4479,4482],{},"Changes flow one way: user event → ",[4390,4480,4481],{},"dispatch(action)"," → reducer computes new state → store updates → subscribers notified.",[22,4484,4485,4488,4489,4492,4493,4496],{},[4409,4486,4487],{},"Actions"," are plain objects describing intent, e.g., ",[4390,4490,4491],{},"{ type: \"increment\", incrementBy: 5 }"," or ",[4390,4494,4495],{},"{ type: \"addToCart\", item: { id: 42, name: \"Red Shoes\" } }",". They carry no logic.",[22,4498,4499,4502,4503,4506,4507,4510,4511,4514,4515,4518],{},[4409,4500,4501],{},"Reducers"," are pure functions ",[4390,4504,4505],{},"(state, action) => newState"," using ",[4390,4508,4509],{},"switch"," on ",[4390,4512,4513],{},"action.type",". They return immutable copies via spreads like ",[4390,4516,4517],{},"{ ...state, value: state.value + action.incrementBy }",", never mutating. Unknown types return unchanged state. Purity enables testing and predictability—no side effects like API calls.",[22,4520,4521,4524,4525,4528],{},[4390,4522,4523],{},"useDispatch()"," provides the dispatch function; you never call reducers directly. This pipeline creates an audit trail: every change traces to dispatched actions, powering ",[4409,4526,4527],{},"Redux DevTools"," for inspecting actions, before\u002Fafter states, rewinding to past states, and replaying bugs.",[17,4530,4532],{"id":4531},"redux-toolkit-cuts-boilerplate-while-preserving-principles","Redux Toolkit Cuts Boilerplate While Preserving Principles",[22,4534,4535,4536,4539,4540,4543],{},"Classic Redux requires manual action types, creators, and switch reducers—verbose for one feature. ",[4409,4537,4538],{},"Redux Toolkit (RTK)","'s ",[4390,4541,4542],{},"createSlice"," bundles them:",[4545,4546,4550],"pre",{"className":4547,"code":4548,"language":4549,"meta":46,"style":46},"language-js shiki shiki-themes github-light github-dark","import { createSlice } from \"@reduxjs\u002Ftoolkit\";\nconst counterSlice = createSlice({\n  name: \"counter\",\n  initialState: { value: 0 },\n  reducers: {\n    increment: (state, action) => {\n      state.value += action.payload.incrementBy;  \u002F\u002F Immer enables 'mutation'\n    }\n  }\n});\nexport const { increment } = counterSlice.actions;\nexport default counterSlice.reducer;\n","js",[4390,4551,4552,4575,4594,4606,4618,4624,4652,4668,4674,4680,4686,4710],{"__ignoreMap":46},[4553,4554,4557,4561,4565,4568,4572],"span",{"class":4555,"line":4556},"line",1,[4553,4558,4560],{"class":4559},"szBVR","import",[4553,4562,4564],{"class":4563},"sVt8B"," { createSlice } ",[4553,4566,4567],{"class":4559},"from",[4553,4569,4571],{"class":4570},"sZZnC"," \"@reduxjs\u002Ftoolkit\"",[4553,4573,4574],{"class":4563},";\n",[4553,4576,4577,4580,4584,4587,4591],{"class":4555,"line":47},[4553,4578,4579],{"class":4559},"const",[4553,4581,4583],{"class":4582},"sj4cs"," counterSlice",[4553,4585,4586],{"class":4559}," =",[4553,4588,4590],{"class":4589},"sScJk"," createSlice",[4553,4592,4593],{"class":4563},"({\n",[4553,4595,4597,4600,4603],{"class":4555,"line":4596},3,[4553,4598,4599],{"class":4563},"  name: ",[4553,4601,4602],{"class":4570},"\"counter\"",[4553,4604,4605],{"class":4563},",\n",[4553,4607,4609,4612,4615],{"class":4555,"line":4608},4,[4553,4610,4611],{"class":4563},"  initialState: { value: ",[4553,4613,4614],{"class":4582},"0",[4553,4616,4617],{"class":4563}," },\n",[4553,4619,4621],{"class":4555,"line":4620},5,[4553,4622,4623],{"class":4563},"  reducers: {\n",[4553,4625,4627,4630,4633,4637,4640,4643,4646,4649],{"class":4555,"line":4626},6,[4553,4628,4629],{"class":4589},"    increment",[4553,4631,4632],{"class":4563},": (",[4553,4634,4636],{"class":4635},"s4XuR","state",[4553,4638,4639],{"class":4563},", ",[4553,4641,4642],{"class":4635},"action",[4553,4644,4645],{"class":4563},") ",[4553,4647,4648],{"class":4559},"=>",[4553,4650,4651],{"class":4563}," {\n",[4553,4653,4655,4658,4661,4664],{"class":4555,"line":4654},7,[4553,4656,4657],{"class":4563},"      state.value ",[4553,4659,4660],{"class":4559},"+=",[4553,4662,4663],{"class":4563}," action.payload.incrementBy;  ",[4553,4665,4667],{"class":4666},"sJ8bj","\u002F\u002F Immer enables 'mutation'\n",[4553,4669,4671],{"class":4555,"line":4670},8,[4553,4672,4673],{"class":4563},"    }\n",[4553,4675,4677],{"class":4555,"line":4676},9,[4553,4678,4679],{"class":4563},"  }\n",[4553,4681,4683],{"class":4555,"line":4682},10,[4553,4684,4685],{"class":4563},"});\n",[4553,4687,4689,4692,4695,4698,4701,4704,4707],{"class":4555,"line":4688},11,[4553,4690,4691],{"class":4559},"export",[4553,4693,4694],{"class":4559}," const",[4553,4696,4697],{"class":4563}," { ",[4553,4699,4700],{"class":4582},"increment",[4553,4702,4703],{"class":4563}," } ",[4553,4705,4706],{"class":4559},"=",[4553,4708,4709],{"class":4563}," counterSlice.actions;\n",[4553,4711,4713,4715,4718],{"class":4555,"line":4712},12,[4553,4714,4691],{"class":4559},[4553,4716,4717],{"class":4559}," default",[4553,4719,4720],{"class":4563}," counterSlice.reducer;\n",[22,4722,4723,4724,4727,4728,4731],{},"Dispatch as ",[4390,4725,4726],{},"dispatch(increment({ incrementBy: 5 }))","; RTK auto-generates typed action creators. ",[4409,4729,4730],{},"Immer"," converts mutating syntax to immutable updates under the hood, reducing code without risks.",[17,4733,4735],{"id":4734},"redux-beats-context-for-scale-and-tools","Redux Beats Context for Scale and Tools",[22,4737,4738,4739,4743,4744,4747],{},"Context solves prop drilling but re-renders ",[4740,4741,4742],"em",{},"all"," consumers on ",[4740,4745,4746],{},"any"," value change—no granular subscriptions. Fine for simple globals like theme; wasteful for complex, frequent updates.",[22,4749,4750,4751,4754,4755,4758],{},"Redux adds granular efficiency, DevTools time-travel, ",[4409,4752,4753],{},"middleware"," for async (e.g., ",[4390,4756,4757],{},"redux-thunk","), and team-scale consistency. Use Context for slow-changing basics; Redux for large apps needing performance, debugging, and enforced patterns.",[22,4760,4761,4762,4764],{},"Mental model: Store as central whiteboard. ",[4390,4763,4447],{}," reads and sticks a subscription note. Changes via action notes to reducer 'manager'—logged for replay. No direct scribbles.",[4766,4767,4768],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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":46,"searchDepth":47,"depth":47,"links":4770},[4771,4772,4773,4774],{"id":4384,"depth":47,"text":4385},{"id":4474,"depth":47,"text":4475},{"id":4531,"depth":47,"text":4532},{"id":4734,"depth":47,"text":4735},[53],{},"\u002Fsummaries\u002Fredux-s-design-for-surgical-re-renders-and-predict-summary",{"title":4374,"description":46},{"loc":4777},"33ccad64d7b5e22f","summaries\u002Fredux-s-design-for-surgical-re-renders-and-predict-summary",[69,4783],"software-engineering","Redux centralizes global state outside React's tree, uses selector subscriptions for re-rendering only changed slices, enforces unidirectional actions-to-reducers flow for auditability, and enables time-travel debugging via DevTools.",[4783],"l_gnu_9L_psahzo6eVDLy3rT7U12NYXYMAK-nArWNqU",{"id":4788,"title":4789,"ai":4790,"body":4795,"categories":4886,"created_at":54,"date_modified":54,"description":46,"extension":55,"faq":54,"featured":56,"kicker_label":54,"meta":4887,"navigation":58,"path":4899,"published_at":54,"question":54,"scraped_at":4900,"seo":4901,"sitemap":4902,"source_id":4903,"source_name":4904,"source_type":65,"source_url":4905,"stem":4906,"tags":4907,"thumbnail_url":54,"tldr":4909,"unknown_tags":4910,"__hash__":4911},"summaries\u002Fsummaries\u002F5-layer-mvvm-keeps-swiftui-apps-maintainable-summary.md","5-Layer MVVM Keeps SwiftUI Apps Maintainable",{"provider":7,"model":8,"input_tokens":4791,"output_tokens":4792,"processing_time_ms":4793,"cost_usd":4794},5306,1690,8817,0.00139935,{"type":14,"value":4796,"toc":4881},[4797,4801,4835,4838,4842,4867,4870,4874],[17,4798,4800],{"id":4799},"layered-mvvm-separates-concerns-for-scalability","Layered MVVM Separates Concerns for Scalability",[22,4802,4803,4804,4807,4808,4639,4811,4814,4815,4818,4819,4822,4823,4826,4827,4830,4831,4834],{},"Build SwiftUI apps using a 'full layer cake' MVVM with five distinct layers to prevent Views from handling data or logic, resulting in boring, maintainable code. Models define pure data structures like ",[4390,4805,4806],{},"Task"," (with title, notes, priority, category, due date, completion status), ",[4390,4809,4810],{},"SubTask",[4390,4812,4813],{},"TaskPriority"," (Low\u002FMedium\u002FHigh), and ",[4390,4816,4817],{},"TaskCategory","—no UI or persistence code. Repositories abstract storage via protocols like ",[4390,4820,4821],{},"TaskRepositoryProtocol","; ",[4390,4824,4825],{},"TaskRepository"," uses SwiftData's ",[4390,4828,4829],{},"ModelContext"," but hides it from callers. Services handle cross-cutting utilities: date checks (e.g., 'is this today?'), greeting generation, formatting, settings, and notifications, avoiding bloated ViewModels. ViewModels (",[4390,4832,4833],{},"@Observable",") manage screen state, fetch via repositories, process with services, and expose UI-ready data\u002Factions. Views render only, calling ViewModel methods without business rules.",[22,4836,4837],{},"This structure scales by keeping each layer single-responsibility: Views stay declarative, ViewModels testable, and data\u002Fpersistence swappable.",[17,4839,4841],{"id":4840},"dependency-injection-and-data-flow-enable-testing","Dependency Injection and Data Flow Enable Testing",[22,4843,4844,4845,4848,4849,4852,4853,4856,4857,4859,4860,4862,4863,4866],{},"Inject repositories and services at app launch via ",[4390,4846,4847],{},"@Environment"," or root views—ViewModels never instantiate dependencies. Data flows unidirectionally: user actions trigger ViewModel methods (e.g., ",[4390,4850,4851],{},"toggleComplete(task)","), which call ",[4390,4854,4855],{},"repository.toggleComplete(task)"," updating ",[4390,4858,4829],{},", then refresh observable state for Views. Protocols like ",[4390,4861,4821],{}," allow faking for unit tests: swap ",[4390,4864,4865],{},"FakeTaskRepository"," to test ViewModels without SwiftData, UI, or real persistence, verifying state changes and actions in isolation.",[22,4868,4869],{},"Trade-off: Adds upfront boilerplate but prevents God objects and eases refactoring as apps grow.",[17,4871,4873],{"id":4872},"demo-app-features-validate-architecture","Demo App Features Validate Architecture",[22,4875,4876,4877,4880],{},"The todo app showcases layers across screens. Today view displays due-today tasks with progress ring and personalized greeting (via Services). All Tasks lists with filters (All\u002FActive\u002FCompleted, by category) loaded by ViewModel. Add Task form sets priority\u002Fcategory\u002Fdue date\u002Ftime\u002Fsubtasks. Search queries tasks by name, showing matches with details. Settings manages profile, default priority, theme (System\u002FLight\u002FDark), notifications—all persisted via repository. UI uses Liquid Glass effects for polish. Run by opening ",[4390,4878,4879],{},"IOSMvvCApp.xcodeproj"," in Xcode; MIT licensed.",{"title":46,"searchDepth":47,"depth":47,"links":4882},[4883,4884,4885],{"id":4799,"depth":47,"text":4800},{"id":4840,"depth":47,"text":4841},{"id":4872,"depth":47,"text":4873},[53],{"content_references":4888,"triage":4896},[4889],{"type":4890,"title":4891,"author":4892,"publisher":4893,"url":4894,"context":4895},"other","MVVM in SwiftUI: Build an iOS App That Stays Organized as It Grows","sanjaynelagadde1992","Medium","https:\u002F\u002Fmedium.com\u002F@sanjaynelagadde1992\u002Fmvvm-in-swiftui-build-an-ios-app-that-stays-organized-as-it-grows-a16e64d9eb3a","recommended",{"relevance":4608,"novelty":4596,"quality":4608,"actionability":4608,"composite":4897,"reasoning":4898},3.8,"Category: Design & Frontend. The article provides a structured approach to implementing MVVM in SwiftUI, addressing the audience's need for maintainable code and scalability, which is a common pain point for developers. It offers specific examples of how to structure code and implement dependency injection, making it actionable for developers looking to improve their app architecture.","\u002Fsummaries\u002F5-layer-mvvm-keeps-swiftui-apps-maintainable-summary","2026-04-16 02:56:11",{"title":4789,"description":46},{"loc":4899},"9166f90169a38f6e","__oneoff__","https:\u002F\u002Fgithub.com\u002Fsanjaynela\u002FIOSMvvCApp","summaries\u002F5-layer-mvvm-keeps-swiftui-apps-maintainable-summary",[4908,69],"coding","Implement MVVM as five layers—Models, Repositories, Services, ViewModels, Views—to isolate UI from data, logic, and persistence, enabling dependency injection and isolated ViewModel testing.",[],"7Cb2ZrSSKCjiYUzBF637JEB_xInoc-EHc8VcjEV-ApQ",{"id":4913,"title":4914,"ai":4915,"body":4920,"categories":5008,"created_at":54,"date_modified":54,"description":46,"extension":55,"faq":54,"featured":56,"kicker_label":54,"meta":5009,"navigation":58,"path":5026,"published_at":5027,"question":54,"scraped_at":5027,"seo":5028,"sitemap":5029,"source_id":5030,"source_name":5031,"source_type":65,"source_url":5032,"stem":5033,"tags":5034,"thumbnail_url":54,"tldr":5036,"unknown_tags":5037,"__hash__":5038},"summaries\u002Fsummaries\u002Fuse-range-syntax-to-fix-media-query-overlap-bugs-summary.md","Use Range Syntax to Fix Media Query Overlap Bugs",{"provider":7,"model":8,"input_tokens":4916,"output_tokens":4917,"processing_time_ms":4918,"cost_usd":4919},4908,1507,15321,0.0017126,{"type":14,"value":4921,"toc":5003},[4922,4926,4937,4948,4959,4963,4974,4993,4997,5000],[17,4923,4925],{"id":4924},"prevent-layout-bugs-from-minmax-width-overlaps","Prevent Layout Bugs from min\u002Fmax-width Overlaps",[22,4927,4928,4929,4932,4933,4936],{},"Traditional media queries using ",[4390,4930,4931],{},"min-width"," (>=) and ",[4390,4934,4935],{},"max-width"," (\u003C=) create gaps when both target the same breakpoint, like 300px. At exactly 300px, both rules apply, hiding elements simultaneously—e.g., navigation and toggle both disappear, breaking the layout.",[22,4938,4939,4940,4943,4944,4947],{},"To fix without ranges, offset breakpoints manually: ",[4390,4941,4942],{},"max-width: 299px"," (\u003C=299px) for hiding nav on small screens, and ",[4390,4945,4946],{},"min-width: 300px"," (>=300px) for hiding toggle on large screens. This works for one breakpoint but scales poorly with multiples, leading to error-prone maintenance and 45-minute debug sessions.",[22,4949,4950,4951,4954,4955,4958],{},"Range syntax eliminates this: ",[4390,4952,4953],{},"@media (width \u003C= 300px)"," hides nav, ",[4390,4956,4957],{},"@media (width > 300px)"," hides toggle. At 300px, nav shows (not \u003C=) and toggle hides (>), ensuring seamless transitions.",[17,4960,4962],{"id":4961},"write-readable-ranges-for-complex-breakpoints","Write Readable Ranges for Complex Breakpoints",[22,4964,4965,4966,4969,4970,4973],{},"Ranges shine for styles between breakpoints. Instead of ",[4390,4967,4968],{},"@media (min-width: 300px) and (max-width: 500px)",", use ",[4390,4971,4972],{},"@media (300px \u003C= width \u003C= 500px)",". This directly expresses \"between 300px and 500px inclusive,\" reducing cognitive load during review or debugging.",[22,4975,4976,4977,4980,4981,4984,4985,4988,4989,4992],{},"Apply to container queries too: swap ",[4390,4978,4979],{},"@media"," for ",[4390,4982,4983],{},"@container",", e.g., ",[4390,4986,4987],{},"@container (width >= 300px)"," changes h1 styles, ",[4390,4990,4991],{},"@container (width >= 500px)"," adds more. This powers responsive components without viewport reliance.",[17,4994,4996],{"id":4995},"leverage-strong-browser-support","Leverage Strong Browser Support",[22,4998,4999],{},"Range syntax landed in March 2023 with wide adoption: Chrome, Edge, Firefox, Safari all support it, per Baseline and Web Platform Status. If you're using container queries, ranges are already viable—no polyfills needed.",[22,5001,5002],{},"Adopt today for clearer CSS that's easier to reason about, especially in teams. Test in projects to catch intent faster than deciphering min\u002Fmax logic.",{"title":46,"searchDepth":47,"depth":47,"links":5004},[5005,5006,5007],{"id":4924,"depth":47,"text":4925},{"id":4961,"depth":47,"text":4962},{"id":4995,"depth":47,"text":4996},[93],{"content_references":5010,"triage":5024},[5011,5017,5021],{"type":5012,"title":5013,"publisher":5014,"url":5015,"context":5016},"report","Media Queries Level 4","W3C","https:\u002F\u002Fwww.w3.org\u002FTR\u002Fmediaqueries-4\u002F#mq-range-context","cited",{"type":4890,"title":5018,"author":5019,"url":5020,"context":4895},"Unintentional CSS media query gaps","Steve Fenton","https:\u002F\u002Fstevefenton.co.uk\u002Fblog\u002F2023\u002F05\u002Funintentional-media-query-gaps\u002F",{"type":4890,"title":5022,"url":5023,"context":5016},"Media query range syntax","https:\u002F\u002Fwebstatus.dev\u002Ffeatures\u002Fmedia-query-range-syntax",{"relevance":4608,"novelty":4596,"quality":4608,"actionability":4608,"composite":4897,"reasoning":5025},"Category: Design & Frontend. The article addresses a specific pain point related to frontend development by providing a solution to media query overlap bugs, which is relevant for developers building responsive designs. It introduces the range syntax as a practical alternative to traditional media queries, offering a clearer and more maintainable approach.","\u002Fsummaries\u002Fuse-range-syntax-to-fix-media-query-overlap-bugs-summary","2026-05-04 16:13:43",{"title":4914,"description":46},{"loc":5026},"8cd34b92f1be4ae8","Ahmad Shadeed","https:\u002F\u002Fishadeed.com\u002Farticle\u002Frange-syntax\u002F","summaries\u002Fuse-range-syntax-to-fix-media-query-overlap-bugs-summary",[69,5035],"ui-ux","Replace min\u002Fmax-width media queries with range syntax like (width \u003C= 300px) to prevent elements from both hiding at shared breakpoints, improving readability and avoiding offset hacks.",[],"kTI_IoPqKfga2ET2Mz5zHJEmZeQ2IX_gg5kP2cGLgKw",{"id":5040,"title":5041,"ai":5042,"body":5047,"categories":5184,"created_at":54,"date_modified":54,"description":46,"extension":55,"faq":54,"featured":56,"kicker_label":54,"meta":5185,"navigation":58,"path":5192,"published_at":5193,"question":54,"scraped_at":5194,"seo":5195,"sitemap":5196,"source_id":5197,"source_name":5198,"source_type":65,"source_url":5199,"stem":5200,"tags":5201,"thumbnail_url":54,"tldr":5202,"unknown_tags":5203,"__hash__":5204},"summaries\u002Fsummaries\u002Fembed-interactive-html-textures-in-canvas-scenes-summary.md","Embed Interactive HTML Textures in Canvas Scenes",{"provider":7,"model":8,"input_tokens":5043,"output_tokens":5044,"processing_time_ms":5045,"cost_usd":5046},6092,1532,9720,0.00147755,{"type":14,"value":5048,"toc":5179},[5049,5053,5056,5059,5063,5070,5075,5126,5129,5176],[17,5050,5052],{"id":5051},"combine-canvas-power-with-html-layout-fidelity","Combine Canvas Power with HTML Layout Fidelity",[22,5054,5055],{},"Canvas excels at custom UIs like 3D scenes or whimsical interactions (e.g., pinball unsubscribes or virtual desktops), but struggles with complex text, internationalization, accessibility, and render quality—problems HTML solves natively. HTML in Canvas bridges this by treating canvas child elements as layout participants: they join the accessibility tree, receive focus, and stay interactive, but render invisibly off-screen as updatable textures. Changes trigger automatic repaints via paint events, or use requestRepaint() manually, like requestAnimationFrame(). This delivers canvas's visual freedom with HTML's reliability, enabling production-ready hybrids without rebuilding layouts from scratch.",[22,5057,5058],{},"Result: Live-updating elements like clocks or timetables appear as seamless textures in Three.js scenes, maintaining DOM interactivity without visual desync in most cases.",[17,5060,5062],{"id":5061},"implement-with-threejs-or-vanilla-canvas","Implement with Three.js or Vanilla Canvas",[22,5064,5065,5066],{},"Nest target HTML inside ",[5067,5068,5069],"canvas",{"layout-subtree":46},"—it acts as fallback if canvas fails, then becomes a texture source.",[22,5071,5072],{},[4409,5073,5074],{},"Three.js example:",[4545,5076,5080],{"className":5077,"code":5078,"language":5079,"meta":46,"style":46},"language-javascript shiki shiki-themes github-light github-dark","const texture = htmlElementImage2D(existingGLTexture, { \u002F\u002F color space, GPU options\n  htmlElement: document.getElementById('board'),\n});\n\u002F\u002F Apply texture to mesh, replacing static images like Thomas the Tank Engine.\n","javascript",[4390,5081,5082,5100,5117,5121],{"__ignoreMap":46},[4553,5083,5084,5086,5089,5091,5094,5097],{"class":4555,"line":4556},[4553,5085,4579],{"class":4559},[4553,5087,5088],{"class":4582}," texture",[4553,5090,4586],{"class":4559},[4553,5092,5093],{"class":4589}," htmlElementImage2D",[4553,5095,5096],{"class":4563},"(existingGLTexture, { ",[4553,5098,5099],{"class":4666},"\u002F\u002F color space, GPU options\n",[4553,5101,5102,5105,5108,5111,5114],{"class":4555,"line":47},[4553,5103,5104],{"class":4563},"  htmlElement: document.",[4553,5106,5107],{"class":4589},"getElementById",[4553,5109,5110],{"class":4563},"(",[4553,5112,5113],{"class":4570},"'board'",[4553,5115,5116],{"class":4563},"),\n",[4553,5118,5119],{"class":4555,"line":4596},[4553,5120,4685],{"class":4563},[4553,5122,5123],{"class":4555,"line":4608},[4553,5124,5125],{"class":4666},"\u002F\u002F Apply texture to mesh, replacing static images like Thomas the Tank Engine.\n",[22,5127,5128],{},"The texture auto-updates on DOM repaints. For a London Underground timetable, extract the ",[5130,5131,5133,5134,5139,5160,5163,5166,5170,5173],"div",{"id":5132},"board",", inject it as canvas child, and texture-swap it into a 3D plane—live clock ticks and times refresh without manual polling.",[22,5135,5136],{},[4409,5137,5138],{},"Vanilla 2D Canvas:",[4545,5140,5142],{"className":5077,"code":5141,"language":5079,"meta":46,"style":46},"ctx.drawElementImage(formElement, x, y, width, height);\n\u002F\u002F Renders interactive \u003Cform> directly.\n",[4390,5143,5144,5155],{"__ignoreMap":46},[4553,5145,5146,5149,5152],{"class":4555,"line":4556},[4553,5147,5148],{"class":4563},"ctx.",[4553,5150,5151],{"class":4589},"drawElementImage",[4553,5153,5154],{"class":4563},"(formElement, x, y, width, height);\n",[4553,5156,5157],{"class":4555,"line":47},[4553,5158,5159],{"class":4666},"\u002F\u002F Renders interactive \u003Cform> directly.\n",[22,5161,5162],{},"WebGPU variant: copyElementImage() for advanced shaders, like jelly sliders over hidden inputs.",[22,5164,5165],{},"Enable in Chrome Canary via flag (proposal stage). Full code in GitHub proposal demos.",[17,5167,5169],{"id":5168},"experimental-edges-and-privacy-safeguards","Experimental Edges and Privacy Safeguards",[22,5171,5172],{},"Performance lags (frame-late draws, desyncs), scrollbars crash, and bugs persist—ideal for experiment feedback. Privacy mitigations block fingerprinting: no system colors, themes, spellcheck, visited links, or preferences in textures. Avoids expanding JS-accessible data leaks.",[22,5174,5175],{},"Trade-off: Canvas whimsy + HTML robustness now viable for fun UIs (e.g., finger-gun tweets, YouTube eyes, beer-browsing desktops), but stabilize before production. Demos from Matt Rothenberg, Wes Bos, AA, and others prove viability—fork and iterate.",[4766,5177,5178],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":46,"searchDepth":47,"depth":47,"links":5180},[5181,5182,5183],{"id":5051,"depth":47,"text":5052},{"id":5061,"depth":47,"text":5062},{"id":5168,"depth":47,"text":5169},[93],{"content_references":5186,"triage":5190},[5187],{"type":4890,"title":5188,"url":5189,"context":4895},"HTML in Canvas Proposal","https:\u002F\u002Fgithub.com\u002FWICG\u002Fhtml-in-canvas",{"relevance":4608,"novelty":4596,"quality":4608,"actionability":4608,"composite":4897,"reasoning":5191},"Category: Design & Frontend. The article discusses a novel approach to integrating HTML elements within canvas scenes, addressing specific pain points like accessibility and layout fidelity. It provides practical implementation examples using Three.js and Vanilla Canvas, making it actionable for developers looking to enhance their UI\u002FUX.","\u002Fsummaries\u002Fembed-interactive-html-textures-in-canvas-scenes-summary","2026-04-19 17:30:00","2026-04-21 15:16:51",{"title":5041,"description":46},{"loc":5192},"7519c73348243dba","Better Stack","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1zfRSiZBLyQ","summaries\u002Fembed-interactive-html-textures-in-canvas-scenes-summary",[69,5035],"HTML in Canvas renders live, interactive DOM elements as GPU textures in WebGL or 2D canvases, solving canvas's text\u002Flayout issues while preserving HTML's accessibility and performance.",[],"yzp70N8aNE0YNdGZP0MQJ49soQjwFB6S4zvuFrv6jOg"]