1<!DOCTYPE html><html lang="en-us"><head><title>Jxnblk | Brent Jackson</title><meta name="description" content="Design engineer and aspiring indie game dev based in Brooklyn, NY"/><style> /* ia-writer-mono-latin-400-normal */ @font-face { font-family: 'iA Writer Mono'; font-style: normal; font-display: swap; font-weight: 400; src: url(https://cdn.jsdelivr.net/fontsource/fonts/ia-writer-mono@latest/latin-400-normal.woff2) format('woff2'), url(https://cdn.jsdelivr.net/fontsource/fonts/ia-writer-mono@latest/latin-400-normal.woff) format('woff'); } /* ia-writer-mono-latin-700-normal */ @font-face { font-family: 'iA Writer Mono'; font-style: normal; font-display: swap; font-weight: 700; src: url(https://cdn.jsdelivr.net/fontsource/fonts/ia-writer-mono@latest/latin-700-normal.woff2) format('woff2'), url(https://cdn.jsdelivr.net/fontsource/fonts/ia-writer-mono@latest/latin-700-normal.woff) format('woff'); } :root { --text: #000; --background: #fff; --primary: #4c4cb1; --greeble: #bbb; } /* color modes */ .light { --text: #000; --background: #fff; --greeble: #bbb; } /** TODO */ .bright { --text: #000; --background: #fff; --greeble: #fda900; } .foliage { --text: #3a6c0b; --background: #f0f4ec; --greeble: #a2c185; --primary: #5f8e33; } .paper { --text: #4d4019; --background: #faefd0; --greeble: #ccc09d; --primary: #8e5200; } .amber { --text: #422c00; --background: #e5b656; --greeble: #c3a058; --primary: #541c00; } .tomato { --text: #32221b; --background: #ee976a; --greeble: #f05200; --primary: #003c5b; } .brown { --text: #dab9a8; --background: #422d23; --greeble: #634f44; --primary: #0cf } .dark { --text: #eee; --background: #222; --greeble: #666; --primary: #0cf } .black { --text: #fff; --background: #000; --greeble: #333; --primary: #0cf } body { --primary-3: color-mix(in srgb, var(--primary) 50%, var(--background)); --primary-2: color-mix(in srgb, var(--primary) 25%, var(--background)); --primary-1: color-mix(in srgb, var(--primary) 12%, var(--background)); --primary-0: color-mix(in srgb, var(--primary) 6%, var(--background)); --primary-dark: color-mix(in srgb, var(--primary) 50%, var(--text)); --highlight: #b1e5e5; --highlight-5: color-mix(in srgb, var(--highlight) 50%, var(--background)); --highlight-2: color-mix(in srgb, var(--highlight) 25%, var(--background)); --highlight-1: color-mix(in srgb, var(--highlight) 12%, var(--background)); --highlight-0: color-mix(in srgb, var(--highlight) 6%, var(--background)); --highlight-dark: color-mix(in srgb, var(--highlight) 50%, var(--text)); --greeble: var(--highlight); } /** css */ * { box-sizing: border-box } body { margin: 0; font-family: 'iA Writer Mono', Menlo, ui-monospace, monospace; font-size: 16px; line-height: 32px; color: var(--text); background-color: var(--background); transition: background-color 0.2s ease-in-out; } img { max-width: 100%; height: auto; } h1, h2, h3, h4, h5 { font-size: 16px; margin: 0; } h6, .h6 { font-size: 12px; margin: 0; } h3, h4, h5, .h3, .h4, .h5 { margin-top: 32px; margin-bottom: 32px; } p, ul, ol, blockquote { margin-top: 0; margin-bottom: 32px; } .bold { font-weight: bold } .normal { font-weight: normal; } .caps { text-transform: uppercase; letter-spacing: 0.125em; } a { color: var(--primary); text-decoration-color: var(--primary-2); transition-property: color, background-color, opacity; transition-duration: 0.3s; transition-timing-function: ease-in-out; } a:hover { color: var(--primary); background-color: var(--primary-0); text-decoration-style: solid; text-decoration-color: var(--primary); } button { appearance: none; font-family: inherit; font-size: inherit; font-weight: inherit; border: none; border-radius: none; background: none; color: inherit; cursor: pointer; outline: none; } code { font-size: 14px; color: var(--primary); background-color: var(--primary-0); padding: 2px 4px; border-radius: 3px; } /** todo */ pre { color: var(--primary); background-color: var(--primary-0); padding: 16px; font-size: 12px; border-radius: 4px; overflow: auto; } pre code { color: inherit; background-color: inherit; padding: 0; border-radius: 0; } ul { padding: 0; } ol {} table { width: 100%; border-collapse: separate; border-spacing: 0; margin-bottom: 32px; }
1 tr { margin-top: -1px; } th { text-align: left; padding: 8px 0; border-bottom-style: solid; } td { text-align: left; padding: 8px 0; border-bottom: 1px solid; border-color: var(--primary-1); } /** home hero */ .display { /* font-family: "Archivo Black", sans-serif; */ font-family: system-ui, sans-serif; font-weight: 900; } .hero-container { container-type: inline-size; } .h0 { /* font-size: clamp(16px, 10vi, 128px); */ font-size: clamp(16px, 14cqw, 128px); max-width: 100%; } /* 8 80px cols with 32px gaps */ .container { max-width: 928px; margin-left: auto; margin-right: auto; padding: 32px; } .space-children { display: flex; flex-direction: column; gap: 64px; } .nav { display: flex; flex-wrap: wrap; align-items: center; column-gap: 16px; padding-top: 16px; padding-bottom: 16px; } .navLink { text-decoration: none; color: inherit; } .button { display: inline-flex; align-items: center; padding: 4px; border-radius: 4px; } .button:hover { color: var(--primary); background-color: var(--primary-0); } .posts { list-style: none; padding: 0; } .posts li { margin-top: 96px; margin-bottom: 96px; } .post-title { color: inherit; font-weight: bold; text-decoration: none; } .post-title:hover { color: inherit; text-decoration: underline; text-decoration-color: var(--primary); background-color: var(--primary-1); } .bold-links a { font-weight: bold; } .byline { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; } .right { text-align: right; } .promo { position: relative; container-type: inline-size; } .promo-inner { --base: 56.25cqw; height: var(--base); height: calc(var(--base) + 32px - mod(var(--base), 32px)); } .promo-short { --base: 40cqw; } .promo img { width: 100%; height: 100%; object-fit: cover; } .promo a { display: block; padding: 4px 16px; font-size: 12px; color: var(--text); background-color: var(--background); text-decoration: none; } .anchor { position: absolute; right: 0; bottom: 0; margin: 8px; } .promo a:hover { background-color: var(--primary); } .grid { display: grid; gridTemplateColumns: repeated(8, 96px); gridGap: 32px; gridAutoFlow: row dense; gridAutoRows: minmax(32px max-content); } /** todo grid system */ @media screen and (min-width: 1056px) { } .guides { background-size: 32px 32px; background-image: linear-gradient(to right, var(--highlight-2) 1px, transparent 1px), linear-gradient(to bottom, var(--highlight-2) 1px, transparent 1px); } .baseline { background-size: 32px 32px; background-position: 0 22px; /* background-image: linear-gradient(to bottom, rgba(255, 0, 127, 0.1) 1px, transparent 1px); */ background-image: linear-gradient(to bottom, var(--primary-0) 1px, transparent 1px); } .dotgrid { background-size: 32px 32px; background-position: calc(50% - 15px) -15px; background-image: radial-gradient(var(--primary-2) 1px, transparent 0); } /* angled boxes */ .angr, .angl { position: relative; height: 32px; background-color: var(--greeble); padding-left: 16px; padding-right: 16px; } .angr::after, .angl::after { position: absolute; top: 0; bottom: 0; content: ''; display: block; height: 32px; width: 32px; } .angr::after { right: -32px; background-image: linear-gradient(45deg, var(--greeble) 50%, transparent 50%); } .angl::after { left: -32px; background-image: linear-gradient(225deg, var(--greeble) 50%, transparent 50%); } .angr-up::after { /* angle up */ background-image: linear-gradient(135deg, var(--greeble) 50%, transparent 50%); } .angl-up::after { background-image: linear-gradient(-45deg, var(--greeble) 50%, transparent 50%); } .ma { margin: auto } .m0 { margin: 0 } .mt { margin-top: 32px } .mb { margin-bottom: 32px } .mt2 { margin-top: 64px } .mb2 { margin-bottom: 64px } .pad { padding: 16px } .pad2 { padding: 32px } .flex { display: flex; align-items: center; column-gap: 32px } .wrap { flex-wrap: wrap } .gap0 { gap: 0 } .gap2 { gap: 64px } .grow { flex-grow: 1 } .noshrink { flex-shrink: 0 } .min { min-width: 0 } .fullwidth { width: 100% } @media screen and (min-width: 40em) { .md-hide { display: none; } } .greeble { color: var(--greeble) } .invert { color: var(--background); background-color: var(--text); } </style>
1<link rel="icon" href="https://jxnblk-avatar.web.val.run?size=32&color=white&reverse=true&scale=1.375"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:image" content="https://jxnblk--92670e2200e811f0a151569c3dd06744.web.val.run/"/><meta property="og:title" content="Jxnblk | Brent Jackson"/><meta property="og:description" content="Design engineer and aspiring indie game dev based in Brooklyn, NY"/><meta property="og:url" content="https://jxnblk.com/blog"/><meta property="og:type" content="website"/><meta property="og:logo" content="https://jxnblk-avatar.web.val.run"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Jxnblk | Brent Jackson"/><meta name="twitter:description" content="Design engineer and aspiring indie game dev based in Brooklyn, NY"/><meta name="twitter:image" content="https://jxnblk--92670e2200e811f0a151569c3dd06744.web.val.run/"/><meta name="twitter:site" content="@jxnblk"/><link rel="preconnect" href="https://esm.town"/><link rel="preconnect" href="https://esm.sh"/><link rel="preconnect" href="https://jxnblk.com"/><link rel="preconnect" href="https://novanticagame.com"/></head><body class="light">
1<script> 2let color = localStorage.getItem("color"); 3if (color) document.body.className = color; 4</script>
4<div id="dotgrid" class=""><div class="container"><div class="flex gap2"><div class="angr grow"></div><div class="angl h6 bold">v512.16.32</div></div><header class="nav"><a href="/" class="navLink">Jxnblk</a><a href="/blog" class="navLink">Blog</a><a href="/#about" class="navLink">About</a><div class="md-hide fullwidth"></div><a href="https://github.com/jxnblk" class="navLink" target="_blank" rel="noopener noreferrer">GitHub</a><a href="https://x.com/jxnblk" class="navLink" target="_blank" rel="noopener noreferrer">Twitter (x)</a><a href="https://val.town/u/jxnblk" class="navLink" target="_blank" rel="noopener noreferrer">Val Town</a><div class="ma"></div><button id="color-button" title="Change color scheme" class="button">⬤</button></header></div><div class="container"><h1>Blog</h1><div class="greeble mt"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="64" class="" fill="currentColor"><defs><pattern id="tile" patternUnits="userSpaceOnUse" width="64" height="64" x="32"><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 32 32" fill="currentColor" stroke="none"><path d="M32 0 L0 32 L0 16 L16 0z M32 16 L32 32 L16 32z"></path></svg></pattern></defs><rect width="100%" height="64" fill="url(#tile)"></rect></svg></div><ul class="posts"><li data-slug="interior-scene-transitions"><div class="mb xmt2"><h3 class="mb"><a href="/blog/interior-scene-transitions" class="post-title">Interior Scene Transitions in Unity</a></h3><div class="flex wrap h6"><div class="angr angr-up">10/19/2023</div><div class="mr"></div><div>#<!-- -->devlog</div><div>#<!-- -->unity</div><div>#<!-- -->scene management</div></div></div><div><p><a href="https://novanticagame.com">Novantica</a> is set in an open world environment with various interior scenes that asynchronously load in when the player is nearby. 5When I started developing the game, I was originally planning to use a top-down third-person perspective, like many of my favorite old adventure games. 6Because it was set in an urban environment, I also wanted the player to be able to look up towards the sky and get a sense of the urban architecture. 7I tried a few different approaches to shifting the camera based on how the player was moving, but never quite achieved what I'd hoped to. 8Eventually I decide to make the camera work like many third-person perspective games and allow the user to move the camera using the right stick on a controller.</p> 9<p>This approach worked really well for the open outdoor areas, but made the interior scenes feel cramped and awkward. 10Many other games just leave things to the player to figure out, but I've never really liked how games did that. 11I can't tell you how many times I would stop in the middle of a cave in <em>Tears of the Kingdom</em> just to look around and try to understand where, exactly, Link was in relation to the cave. 12This free camera movement also made some of the puzzle mechanics in the Novantica awkward â e.g. making it difficult to see where a box needed to be pushed.</p> 13<p>Then, I had an idea I wanted to test out...</p> 14<iframe 15 title="Screencap of Novantica game interior camera transition" 16 src="https://jxnblk-redditembed2.web.val.run?id=17at2r7&sub=Unity3D" 17 width="960" 18 style="width:100%;aspect-ratio:16/10;border:none" 19></iframe> 20<!-- 21<blockquote class="reddit-embed-bq" style="height:500px" data-embed-height="500"><a href="https://www.reddit.com/r/Unity3D/comments/17at2r7/interior_scene_transition_what_do_you_think/">Interior scene transition - what do you think?</a><br> by<a href="https://www.reddit.com/user/vantomgames/">u/vantomgames</a> in<a href="https://www.reddit.com/r/Unity3D/">Unity3D</a></blockquote>
21<script async="" src="https://embed.reddit.com/widgets.js" charset="UTF-8"></script>
21 22--> 23<br /> 24</div><div class="flex"><div class="ma"></div><a href="/blog/interior-scene-transitions">Read the full post</a></div></li><li data-slug="modular-characters-part-one"><div class="mb xmt2"><h3 class="mb"><a href="/blog/modular-characters-part-one" class="post-title">Modular Characters Part I</a></h3><div class="flex wrap h6"><div class="angr angr-up">10/16/2023</div><div class="mr"></div><div>#<!-- -->devlog</div><div>#<!-- -->unity</div><div>#<!-- -->blender</div><div>#<!-- -->character design</div><div>#<!-- -->mixamo</div></div></div><div><p><img 25src='https://blog.jxnblk.com/images/modular-npcs/in-game-crowd.webp' 26alt='Screenshot from Novantica with NPC crowd walking in the street' 27/></p> 28<p>Since <a href="https://novanticagame.com">Novantica</a> is set in a futuristic city, I always wanted to make sure the game had a certain level of city life â people walking around, bots zooming by, drones buzzing, trams gliding, and bikes rolling along. 29I hadn't done much 3D modeling before learning Unity, and, while modeling props, buildings, and other blockish things didn't seem to difficult, I struggled with creating humanoid characters. 30I knew that I wanted something low-poly, simple, and a bit cartoonish for the game's characters, but I'll admit that character design is probably not my strong suit.</p> 31</div><div class="flex"><div class="ma"></div><a href="/blog/modular-characters-part-one">Read the full post</a></div></li><li data-slug="the-mystery-of-the-mustard-people"><div class="mb xmt2"><h3 class="mb"><a href="/blog/the-mystery-of-the-mustard-people" class="post-title">The Mystery of the Mustard People</a></h3><div class="flex wrap h6"><div class="angr angr-up">8/21/2023</div><div class="mr"></div><div>#<!-- -->devlog</div><div>#<!-- -->unity</div><div>#<!-- -->materials</div><div>#<!-- -->shaders</div></div></div><div><p>One of the more perplexing bugs I encountered working on <a href="https://novanticagame.com">Novantica</a> so far was when all the NPC extras in the game suddenly turned a greenish-yellow color. 32I had just swapped out URP materials for ones using a new shader, so I suspected that change made this happen, 33but I didn't want to revert back to the old materials. 34To add icing to the cake, this issue was only happening in builds, not in the editor. 35I started to dig in, but didn't realize it would take so long to track down.</p> 36</div><div class="flex"><div class="ma"></div><a href="/blog/the-mystery-of-the-mustard-people">Read the full post</a></div></li><li data-slug="making-sourdough-and-learning-unity"><div class="mb xmt2"><h3 class="mb"><a href="/blog/making-sourdough-and-learning-unity" class="post-title">Making Sourdough & Learning Unity</a></h3><div class="flex wrap h6"><div class="angr angr-up">8/19/2023</div><div class="mr"></div><div>#<!-- -->devlog</div><div>#<!-- -->unity</div><div>#<!-- -->life</div></div></div><div><p>In March 2020, I remember the former mayor one day telling people to go out for dinner and see a show â and the next day hearing that it wasn't safe to get within six feet of another person. If you haven't been to New York before, it's not easy to walk around outside and not get within six feet of another person. In hindsight, it was relatively safe to be outdoors, but at the time, we were afraid to step outside the door for a few weeks.</p> 37<p>I also remember a lot of people thinking that the whole thing would blow over in a month or two, but everything that I had been reading made me suspect that was far too optimistic. 38As someone who walks to get to 99% of the places I'm going and thoroughly enjoys it, I realized that I would have to pick up a few new hobbies to keep my sanity.</p> 39</div><div class="flex"><div class="ma"></div><a href="/blog/making-sourdough-and-learning-unity">Read the full post</a></div></li><li data-slug="two-steps-forward"><div class="mb xmt2"><h3 class="mb"><a href="/blog/two-steps-forward" class="post-title">Two Steps Forward, One Step Back</a></h3><div class="flex wrap h6"><div class="angr angr-up">3/6/2020</div><div class="mr"></div></div></div><div>Building UI with design constraints from utlity CSS to CSS-in-JS</div><div class="flex"><div class="ma"></div><a href="/blog/two-steps-forward">Read the full post</a></div></li><li data-slug="design-graph"><div class="mb xmt2"><h3 class="mb"><a href="/blog/design-graph" class="post-title">The Design Graph</a></h3><div class="flex wrap h6"><div class="angr angr-up">2/18/2020</div><div class="mr"></div></div></div><div>A constraint-based system for organizing styles in UI design</div><div class="flex"><div class="ma"></div><a href="/blog/design-graph">Read the full post</a></div></li><li data-slug="a-conceptual-look-at-theming"><div class="mb xmt2"><h3 class="mb"><a href="/blog/a-conceptual-look-at-theming" class="post-title">A Conceptual Look at Theming</a></h3><div class="flex wrap h6"><div class="angr angr-up">8/10/2019</div><div class="mr"></div></div></div><div>An exploration on the relationship between global and component-based styles and a mental model for styling applications.</div><div class="flex"><div class="ma"></div><a href="/blog/a-conceptual-look-at-theming">Read the full post</a></div></li><li data-slug="code-literacy"><div class="mb xmt2"><h3 class="mb"><a href="/blog/code-literacy" class="post-title">Code Literacy</a></h3><div class="flex wrap h6"><div class="angr angr-up">7/25/2019</div><div class="mr"></div></div></div><div>Asking should designers code is asking the wrong question.</div><div class="flex"><div class="ma"></div><a href="/blog/code-literacy">Read the full post</a></div></li><li data-slug="portability"><div class="mb xmt2"><h3 class="mb"><a href="/blog/portability" class="post-title">Portability</a></h3><div class="flex wrap h6"><div class="angr angr-up">7/23/2019</div><div class="mr"></div></div></div><div>Defining a portable file format for high level style information.</div><div class="flex"><div class="ma"></div><a href="/blog/portability">Read the full post</a></div></li><li data-slug="themeability"><div class="mb xmt2"><h3 class="mb"><a href="/blog/themeability" class="post-title">Themeability</a></h3><div class="flex wrap h6"><div class="angr angr-up">7/21/2019</div><div class="mr"></div></div></div><div>Using constraint-based design principles to create themeable components and UI</div><div class="flex"><div class="ma"></div><a href="/blog/themeability">Read the full post</a></div></li><li data-slug="the-cascade-is-not-inheritance"><div class="mb xmt2"><h3 class="mb"><a href="/blog/the-cascade-is-not-inheritance" class="post-title">The Cascade is Not Inheritance</a></h3><div class="flex wrap h6"><div class="angr angr-up">7/20/2019</div><div class="mr"></div></div></div><div>On more than one occasion, I've heard people conflate the cascade feature of CSS with inheritance.</div><div class="flex"><div class="ma"></div><a href="/blog/the-cascade-is-not-inheritance">Read the full post</a></div></li><li data-slug="why-you-should-learn-css-in-js"><div class="mb xmt2"><h3 class="mb"><a href="/blog/why-you-should-learn-css-in-js" class="post-title">Why you should definitely learn how to use CSS-in-JS</a></h3><div class="flex wrap h6"><div class="angr angr-up">7/20/2019</div><div class="mr"></div></div></div><div>CSS-in-JS solutions provide a lot of benefits over lower-level approaches</div><div class="flex"><div class="ma"></div><a href="/blog/why-you-should-learn-css-in-js">Read the full post</a></div></li><li data-slug="the-modern-front-end-design-system"><div class="mb xmt2"><h3 class="mb"><a href="/blog/the-modern-front-end-design-system" class="post-title">The Modern Front-End Design System Stack</a></h3><div class="flex wrap h6"><div class="angr angr-up">7/18/2019</div><div class="mr"></div></div></div><div>Tools for building modern front-end applications in 2019</div><div class="flex"><div class="ma"></div><a href="/blog/the-modern-front-end-design-system">Read the full post</a></div></li><li data-slug="iterations-on-a-theme"><div class="mb xmt2"><h3 class="mb"><a href="/blog/iterations-on-a-theme" class="post-title">Iterations on a Theme</a></h3><div class="flex wrap h6"><div class="angr angr-up">4/6/2019</div><div class="mr"></div></div></div><div>A look at common threads across over 500 GitHub repos</div><div class="flex"><div class="ma"></div><a href="/blog/iterations-on-a-theme">Read the full post</a></div></li><li data-slug="interoperability"><div class="mb xmt2"><h3 class="mb"><a href="/blog/interoperability" class="post-title">Interoperability</a></h3><div class="flex wrap h6"><div class="angr angr-up">3/21/2019</div><div class="mr"></div></div></div><div>Using standards-based approaches for UI component interoperability</div><div class="flex"><div class="ma"></div><a href="/blog/interoperability">Read the full post</a></div></li><li data-slug="the-three-tenets-of-styled-system"><div class="mb xmt2"><h3 class="mb"><a href="/blog/the-three-tenets-of-styled-system" class="post-title">The Three Tenets of Styled System</a></h3><div class="flex wrap h6"><div class="angr angr-up">3/17/2019</div><div class="mr"></div></div></div><div>A look at some of the core ideas built into Styled System</div><div class="flex"><div class="ma"></div><a href="/blog/the-three-tenets-of-styled-system">Read the full post</a></div></li><li data-slug="progressive-documentation"><div class="mb xmt2"><h3 class="mb"><a href="/blog/progressive-documentation" class="post-title">Progressive Documentation</a></h3><div class="flex wrap h6"><div class="angr angr-up">9/1/2018</div><div class="mr"></div></div></div><div>Attempting to make writing documentation easier and faster</div><div class="flex"><div class="ma"></div><a href="/blog/progressive-documentation">Read the full post</a></div></li><li data-slug="defining-component-apis-in-react"><div class="mb xmt2"><h3 class="mb"><a href="/blog/defining-component-apis-in-react" class="post-title">Defining Component APIs in React</a></h3><div class="flex wrap h6"><div class="angr angr-up">7/8/2018</div><div class="mr"></div></div></div><div>Over the years, Iâve noticed patterns in how I tend to approach component APIs and building out applications and libraries. The following is a collection of thoughts, opinions, and advice for defining component APIs that are meant to be more flexible, composable, and easier to understand. None of these are hard-and-fast rules, but theyâve helped guide the way I think about organizing and creating components.</div><div class="flex"><div class="ma"></div><a href="/blog/defining-component-apis-in-react">Read the full post</a></div></li><li data-slug="patterns-for-style-composition-in-react"><div class="mb xmt2"><h3 class="mb"><a href="/blog/patterns-for-style-composition-in-react" class="post-title">Patterns for Style Composition in React</a></h3><div class="flex wrap h6"><div class="angr angr-up">8/13/2016</div><div class="mr"></div><div>#<!-- -->css</div><div>#<!-- -->css-in-js</div><div>#<!-- -->design systems</div><div>#<!-- -->style guides</div><div>#<!-- -->react</div></div></div><div>While React is extremely flexible in terms of how you can structure your applicationâs UI, Iâve found that a few patterns for style composition have helped me keep things organized and easy to work with.</div><div class="flex"><div class="ma"></div><a href="/blog/patterns-for-style-composition-in-react">Read the full post</a></div></li><li data-slug="universal-ui-components"><div class="mb xmt2"><h3 class="mb"><a href="/blog/universal-ui-components" class="post-title">Universal UI Components</a></h3><div class="flex wrap h6"><div class="angr angr-up">7/6/2016</div><div class="mr"></div></div></div><div><p>For a while now, Iâve been interested in the idea of creating portable, 40interoperable functional UI components that can work in any DOM rendering library, 41whether itâs 42<a href="https://facebook.github.io/react/">React</a>, 43<a href="https://preactjs.com">Preact</a>, 44<a href="https://github.com/dominictarr/hyperscript">hyperscript</a>, 45<a href="https://github.com/shama/bel">bel</a>, 46<a href="https://github.com/maxogden/yo-yo">yo-yo</a>, 47or some other library.</p> 48<p>The idea of functional UI components is a simple one: pass arguments into a function and it returns a representation of the DOM,
49usually with encapsulated styles and interactivity handled with callbacks to a global state, a la Redux.</p> 50</div><div class="flex"><div class="ma"></div><a href="/blog/universal-ui-components">Read the full post</a></div></li><li data-slug="unit-testing-ui"><div class="mb xmt2"><h3 class="mb"><a href="/blog/unit-testing-ui" class="post-title">Unit testing UI</a></h3><div class="flex wrap h6"><div class="angr angr-up">6/20/2016</div><div class="mr"></div></div></div><div><p>I recently read 51<a href="http://product.voxmedia.com/2016/4/20/11458814/how-designers-can-use-unit-testing-to-build-resilient-and-happy-design-systems">this excellent article</a>, 52where the design team at Vox has devised a testing framework for new UI <a href="/blog/posts/components">components</a> introduced into their pattern library. 53While the methods they suggest are excellent, and what Iâd consider something that should be industry-standard in our field, 54it got me thinking that this concept could be taken a step further. 55What if designers wrote actual unit tests for UI components? 56What if those tests were actually applied in user acceptance testing, A/B tests, and tested against performance metrics?</p> 57</div><div class="flex"><div class="ma"></div><a href="/blog/unit-testing-ui">Read the full post</a></div></li><li data-slug="components"><div class="mb xmt2"><h3 class="mb"><a href="/blog/components" class="post-title">Components</a></h3><div class="flex wrap h6"><div class="angr angr-up">6/17/2016</div><div class="mr"></div></div></div><div><p>Everything in a UI is a component. 58This includes buttons, inputs, forms, promotional modules, pages, user flows, etc. 59I use the word <em>component</em> not only because this is how the underlying code is written in libraries like React and Ember, 60but also because pieces of a well-designed UI system should be <a href="https://en.wikipedia.org/wiki/Composability">composable</a>.</p> 61</div><div class="flex"><div class="ma"></div><a href="/blog/components">Read the full post</a></div></li><li data-slug="zero-configuration-react-static-site-generator"><div class="mb xmt2"><h3 class="mb"><a href="/blog/zero-configuration-react-static-site-generator" class="post-title">Zero-Configuration React Static Site Generator</a></h3><div class="flex wrap h6"><div class="angr angr-up">2/15/2016</div><div class="mr"></div><div>#<!-- -->react</div><div>#<!-- -->static-site-generator</div></div></div><div><p>React is a great way to generate static HTML with a component-based UI. 62One of the biggest hurdles to working with React is the amount of boilerplate and build configuration it takes to get going. 63I wanted to make it dead-simple to start building static pages with React 64and without the need to install tons of npm modules and configure webpack.</p> 65</div><div class="flex"><div class="ma"></div><a href="/blog/zero-configuration-react-static-site-generator">Read the full post</a></div></li><li data-slug="mathematical-web-typography"><div class="mb xmt2"><h3 class="mb"><a href="/blog/mathematical-web-typography" class="post-title">Mathematical Web Typography</a></h3><div class="flex wrap h6"><div class="angr angr-up">6/23/2015</div><div class="mr"></div><div>#<!-- -->css</div><div>#<!-- -->typography</div><div>#<!-- -->math</div></div></div><div><p>When it comes to designing for the Web 66I like to follow a handful of general principles. 67First, design for the medium, or as Frank Chimero puts it, 68follow <a href="http://frankchimero.com/writing/the-webs-grain/">âthe grain of the Webâ</a>. 69The Web is fluid - based on screens and devices of varying sizes â 70and typography on the Web should reflect that. 71Second, design <a href="http://alistapart.com/article/content-out-layout">content-out</a>, 72which usually means designing around a strong typographical base since the large majority of Web content and UI is text. 73And last, design with <a href="http://alistapart.com/article/more-meaningful-typography">modular scales</a>. 74Things built on the Web should be fluid and infinitely scalable. 75Using modular scales in a design compliments that idea and keeps things organized in the face of growing complexity.</p> 76</div><div class="flex"><div class="ma"></div><a href="/blog/mathematical-web-typography">Read the full post</a></div></li><li data-slug="mini-macbook-review"><div class="mb xmt2"><h3 class="mb"><a href="/blog/mini-macbook-review" class="post-title">Mini MacBook Review</a></h3><div class="flex wrap h6"><div class="angr angr-up">6/17/2015</div><div class="mr"></div><div>#<!-- -->apple</div><div>#<!-- -->macbook</div><div>#<!-- -->review</div><div>#<!-- -->laptop</div><div>#<!-- -->tech</div></div></div><div>Why the new MacBook might just be my favorite computer ever</div><div class="flex"><div class="ma"></div><a href="/blog/mini-macbook-review">Read the full post</a></div></li><li data-slug="color-palette-documentation-for-living-style-guides"><div class="mb xmt2"><h3 class="mb"><a href="/blog/color-palette-documentation-for-living-style-guides" class="post-title">Color Palette Documentation for Living Style Guides</a></h3><div class="flex wrap h6"><div class="angr angr-up">6/15/2015</div><div class="mr"></div><div>#<!-- -->css</div><div>#<!-- -->color</div><div>#<!-- -->documentation</div><div>#<!-- -->style guide</div><div>#<!-- -->living style guide</div><div>#<!-- -->color contrast</div><div>#<!-- -->accessibility</div><div>#<!-- -->a11y</div></div></div><div><p>Virtually every style guide has a color palette section in its documentation. 77Many times Iâve seen this documentation created manually, where every change to a color requires updating the values in two places â the stylesheet and the style guide. 78This often leads to one falling out of sync with the other, 79and makes maintaining a living style guide more difficult.</p> 80<p>The problem with this approach is that the values are being defined in two different places. 81For a true living style guide, the code should serve as the single source of truth. 82Extracting color values from CSS can help keep documentation in sync,
83expose outdated colors, and point out opportunities for normalizing designs.</p> 84</div><div class="flex"><div class="ma"></div><a href="/blog/color-palette-documentation-for-living-style-guides">Read the full post</a></div></li><li data-slug="static-site-generation-with-react-and-webpack"><div class="mb xmt2"><h3 class="mb"><a href="/blog/static-site-generation-with-react-and-webpack" class="post-title">Static Site Generation with React and Webpack</a></h3><div class="flex wrap h6"><div class="angr angr-up">6/6/2015</div><div class="mr"></div><div>#<!-- -->react</div><div>#<!-- -->webpack</div><div>#<!-- -->static-site</div><div>#<!-- -->tutorial</div></div></div><div><p>Iâve been dabbling with React for a few months now and using it in several small open source projects 85to better understand the technology. 86Reactâs focus on reusablility, along with the ability to install and require components via npm, 87provides an elegant way to rapidly build application UI in an efficient and consistent way. 88Itâs also a great way to handle server-side rendering and provides high cohesion between markup and display logic.</p> 89</div><div class="flex"><div class="ma"></div><a href="/blog/static-site-generation-with-react-and-webpack">Read the full post</a></div></li><li data-slug="rethinking-variables-in-css"><div class="mb xmt2"><h3 class="mb"><a href="/blog/rethinking-variables-in-css" class="post-title">Rethinking Variables in CSS</a></h3><div class="flex wrap h6"><div class="angr angr-up">5/8/2015</div><div class="mr"></div><div>#<!-- -->css</div><div>#<!-- -->variables</div><div>#<!-- -->preprocessors</div><div>#<!-- -->postprocessors</div><div>#<!-- -->postcss</div></div></div><div><p>CSS was first introduced as a way to reduce the complexity of using inline styles and to help separate concerns. After years of ballooning stylesheets with the same values being used over and over and losing sync, CSS preprocessors introduced variables to help keep values defined in a single place. Soon <a href="http://dev.w3.org/csswg/css-variables/">custom properties</a> will be part of the CSS specification, which promises a native, more robust approach than what preprocessors can do.</p> 90<p>While variables and custom properties make updating multiple instances of the same value trivial, we often still end up with multiple instances of the same property-value definitions spread throughout a global stylesheet.</p> 91</div><div class="flex"><div class="ma"></div><a href="/blog/rethinking-variables-in-css">Read the full post</a></div></li><li data-slug="5-ways-to-not-shoot-yourself-in-the-foot-with-css"><div class="mb xmt2"><h3 class="mb"><a href="/blog/5-ways-to-not-shoot-yourself-in-the-foot-with-css" class="post-title">5 ways to not shoot yourself in the foot with CSS</a></h3><div class="flex wrap h6"><div class="angr angr-up">12/30/2014</div><div class="mr"></div></div></div><div><ol> 92<li>Donât make assumptions</li> 93<li>Donât be specific</li> 94<li>Donât override anything</li> 95<li>Donât entangle it with markup</li> 96<li>Donât repeat yourself</li> 97</ol> 98</div><div class="flex"><div class="ma"></div><a href="/blog/5-ways-to-not-shoot-yourself-in-the-foot-with-css">Read the full post</a></div></li><li data-slug="its-okay-to-look-the-same"><div class="mb xmt2"><h3 class="mb"><a href="/blog/its-okay-to-look-the-same" class="post-title">Itâs Okay to Look the Same</a></h3><div class="flex wrap h6"><div class="angr angr-up">4/25/2014</div><div class="mr"></div></div></div><div><p>Every once in a while I hear someone complain about the visual homogenization of the web, and front-end frameworks often get the brunt of the attack. This visual sameness isnât necessarily a bad thing.</p> 99</div><div class="flex"><div class="ma"></div><a href="/blog/its-okay-to-look-the-same">Read the full post</a></div></li><li data-slug="i-dont-know-how-to-design"><div class="mb xmt2"><h3 class="mb"><a href="/blog/i-dont-know-how-to-design" class="post-title">I donât know how to design</a></h3><div class="flex wrap h6"><div class="angr angr-up">4/16/2014</div><div class="mr"></div></div></div><div><p>Iâll admit it.</p> 100</div><div class="flex"><div class="ma"></div><a href="/blog/i-dont-know-how-to-design">Read the full post</a></div></li><li data-slug="designing-in-the-browser-faster"><div class="mb xmt2"><h3 class="mb"><a href="/blog/designing-in-the-browser-faster" class="post-title">Designing in the Browser Faster</a></h3><div class="flex wrap h6"><div class="angr angr-up">4/14/2014</div><div class="mr"></div></div></div><div><p>Iâve been dabbling with HTML and CSS for yearsâbuilding small websites for myself and friends and building prototypes to test designs. And, while Iâve been fascinated with the idea of designing in the browser for a long time, it wasnât until recently that itâs become much, much faster for me than using traditional design software.</p> 101</div><div class="flex"><div class="ma"></div><a href="/blog/designing-in-the-browser-faster">Read the full post</a></div></li><li data-slug="an-update-on-the-hamburger-menu"><div class="mb xmt2"><h3 class="mb"><a href="/blog/an-update-on-the-hamburger-menu" class="post-title">An Update on the Hamburger Menu</a></h3><div class="flex wrap h6"><div class="angr angr-up">4/12/2014</div><div class="mr"></div></div></div><div><p>
101About a year ago, I wrote <a href="http://jxnblk.tumblr.com/post/36218805036/hamburgers-basements-why-not-to-use-left-nav-flyouts">Hamburgers & Basements: Why Not to Use Left Nav Flyouts</a>.</p> 102<p>Since then, a few things have happened.</p> 103</div><div class="flex"><div class="ma"></div><a href="/blog/an-update-on-the-hamburger-menu">Read the full post</a></div></li><li data-slug="im-sick-of-your-tiny-tiny-type"><div class="mb xmt2"><h3 class="mb"><a href="/blog/im-sick-of-your-tiny-tiny-type" class="post-title">Iâm Sick of Your Tiny, Tiny Type</a></h3><div class="flex wrap h6"><div class="angr angr-up">1/29/2013</div><div class="mr"></div></div></div><div><p>Your tiny type is hard to read â no, not hard to read, impossible to read. I carry my phone with me everywhere, but I always seem to forget my magnifying glass. I tap the Safari Reader button, but thatâs not a solution to the problem. Thatâs a band-aid for your bad typesetting.</p> 104</div><div class="flex"><div class="ma"></div><a href="/blog/im-sick-of-your-tiny-tiny-type">Read the full post</a></div></li><li data-slug="organizing-mobile-navigation-based-on-information-seeking-behavior"><div class="mb xmt2"><h3 class="mb"><a href="/blog/organizing-mobile-navigation-based-on-information-seeking-behavior" class="post-title">Organizing Mobile Navigation Based on Information-Seeking Behavior</a></h3><div class="flex wrap h6"><div class="angr angr-up">1/16/2013</div><div class="mr"></div></div></div><div><p>When opening an application, a user should be able to understand its functionality, see relevant content, and get to where they want to go. Applications that obscure navigation with the intent of focusing on content can make finding specific information difficult. On the other hand, skewing towards too much navigation can overwhelm the user. Mobile apps should balance navigation for users with different information needs.</p> 105</div><div class="flex"><div class="ma"></div><a href="/blog/organizing-mobile-navigation-based-on-information-seeking-behavior">Read the full post</a></div></li><li data-slug="buckets-and-jumpoffs-using-content-centric-contextual-navigation"><div class="mb xmt2"><h3 class="mb"><a href="/blog/buckets-and-jumpoffs-using-content-centric-contextual-navigation" class="post-title">Buckets and Jumpoffs: Using Content-Centric Contextual Navigation</a></h3><div class="flex wrap h6"><div class="angr angr-up">12/7/2012</div><div class="mr"></div></div></div><div><p>While table views provide a clear and simple way to navigate certain types of content, mobile should be about putting content and user goals first and navigation second. Don't overload the user with navigation choices, show meaningful content instead. Even though tab bars are great â sitting below the content, out of the way until the user needs them â there are new opportunities to explore content-centric contextual navigation when designing for mobile.</p> 106</div><div class="flex"><div class="ma"></div><a href="/blog/buckets-and-jumpoffs-using-content-centric-contextual-navigation">Read the full post</a></div></li><li data-slug="the-advantages-of-table-views-over-left-nav-flyouts"><div class="mb xmt2"><h3 class="mb"><a href="/blog/the-advantages-of-table-views-over-left-nav-flyouts" class="post-title">The Advantages of Table Views Over Left Nav Flyouts</a></h3><div class="flex wrap h6"><div class="angr angr-up">12/1/2012</div><div class="mr"></div></div></div><div>At first glance, these two navigation patterns seem very similar, but there are a few points that give table views a huge leg up. When dealing with a multi-tiered hierarchy or a variable amount of navigation items â such as text messages, emails, folksonomic categories, folders, files, etc. â table views can be a great solution. Lists are generally easier to scan than tiles, and vertical scrolling is an easy interaction for touchscreen mobile devices.</div><div class="flex"><div class="ma"></div><a href="/blog/the-advantages-of-table-views-over-left-nav-flyouts">Read the full post</a></div></li><li data-slug="hamburgers-and-basements-why-not-to-use-left-nav-flyouts"><div class="mb xmt2"><h3 class="mb"><a href="/blog/hamburgers-and-basements-why-not-to-use-left-nav-flyouts" class="post-title">Hamburgers & Basements: Why Not to Use Left Nav Flyouts</a></h3><div class="flex wrap h6"><div class="angr angr-up">11/21/2012</div><div class="mr"></div></div></div><div><blockquote> 107<p><strong><em>"Good design makes a product understandable"</em></strong> â Dieter Rams</p> 108</blockquote> 109<p>Good navigation should do at least three things well: (1) it should allow the user to navigate;
109 (2) it should serve as wayfinding, letting the user know where they are; and (3) it should help the user understand what the product is capable of. If your navigation is not doing these three things, something's wrong.</p> 110</div><div class="flex"><div class="ma"></div><a href="/blog/hamburgers-and-basements-why-not-to-use-left-nav-flyouts">Read the full post</a></div></li><li data-slug="microbeats-is-the-best-journal-ive-ever-kept"><div class="mb xmt2"><h3 class="mb"><a href="/blog/microbeats-is-the-best-journal-ive-ever-kept" class="post-title">Microbeats is the Best Journal Iâve Ever Kept</a></h3><div class="flex wrap h6"><div class="angr angr-up">11/7/2012</div><div class="mr"></div></div></div><div><p>Iâve been producing electronic music on my computer for about a decade now, and I donât have a whole lot to show for it. After moving to DC from Shanghai, where I played a lot of live sets and DJ gigs, I realized there wasnât much of a music scene in DC, and I stopped playing out. After a few years, I noticed that I generally wasnât being inspired, and I wasnât growing much as an artist. I also noticed that I had a tendency to never finish the tracks that Iâd started. I was pretty good at creating catchy little loops, but they never evolved into anything beyond that.</p> 111</div><div class="flex"><div class="ma"></div><a href="/blog/microbeats-is-the-best-journal-ive-ever-kept">Read the full post</a></div></li></ul></div><footer class="container mb2 mt2"><div class="flex gap2"><div class="angr angr-up"></div><div class="angl angl-up grow"></div></div><div class="nav"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-24 -24 176 176" width="48" height="48" style="display:block;margin:0" fill="currentColor"><style> 112.reverse .reverse-hide { 113 display: none; 114} 115</style><path d=" 116 M64 0 L64 4 L76 4 L74 6 L94 14 L92 16 L104 20 L100 22 L106 28 L102 28 L106 56 Q110 62 110 70 T105 84 L96 108 C92 116 76 128 64 128 C52 128 36 116 32 108 L23 84 Q18 78 18 70 T22 56 L22 22 L26 24 L34 12 L36 16z 117 M72 40 Q56 30 40 30 Q32 34 30 48 L30 48 L28 74 C28 81 37 102 38 104 C46 118 62 121 64 121 C66 121 82 118 90 104 C91 102 100 81 100 74 L99 52 L94 40 L92 42 L84 38 L84 42 L74 36 118 M57 88 H71 A2 2 0 0 1 71 92 H57 A2 2 0 0 1 57 88 119 M53 104 H75 A2 2 0 0 1 75 108 H53 A2 2 0 0 1 53 104 120" transform-origin="64 64" transform="scale(1)"></path><path d=" 121 M44 62 A5.5 5.5 0 0 0 44 73 A5.5 5.5 0 0 0 44 62 122 M84 62 A5.5 5.5 0 0 0 84 73 A5.5 5.5 0 0 0 84 62 123 M33.3 60.4 C34.6 57.8 37 55.9 39.7 55.2 C43 54.4 46.8 55.3 50.4 58 C51.3 58.6 52.5 58.4 53.2 57.5 C53.8 56.6 53.6 55.4 52.7 54.7 C46.8 50.5 41.8 50.5 38.7 51.3 C34.8 52.3 31.5 54.9 29.7 58.6 C29.2 59.6 29.6 60.8 30.6 61.3 C30.9 61.4 31.2 61.5 31.5 61.5 C32.2 61.5 32.9 61.1 33.3 60.4 z 124 M97.7 61.9 C98.5 61.2 98.6 59.9 97.9 59.1 C94.3 55 90.1 52.9 85.4 53 C82 53 78.3 54.2 74.3 56.6 C73.3 57.2 73 58.4 73.6 59.3 C74.2 60.3 75.4 60.6 76.3 60 C79.7 58 82.7 57 85.5 57 C89 57 92.1 58.5 95 61.7 C95.4 62.2 95.9 62.4 96.5 62.4 C96.8 62.4 97.3 62.2 97.7 61.9 z 125" transform-origin="64 64" transform="scale(1)" class="reverse-hide"></path></svg><a href="/" class="navLink">Jxnblk</a><a href="/blog" class="navLink">Blog</a><a href="/#about" class="navLink">About</a><div class="md-hide fullwidth"></div><a href="https://github.com/jxnblk" class="navLink" target="_blank" rel="noopener noreferrer">GitHub</a><a href="https://x.com/jxnblk" class="navLink" target="_blank" rel="noopener noreferrer">Twitter (x)</a><a href="https://val.town/u/jxnblk" class="navLink" target="_blank" rel="noopener noreferrer">Val Town</a></div><div class="mt2 greeble"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="32" class="" fill="currentColor"><defs><pattern id="tile" patternUnits="userSpaceOnUse" width="32" height="32" x="0"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="currentColor" stroke="none"><path d="M32 0 L0 32 L0 16 L16 0z M32 16 L32 32 L16 32z"></path></svg></pattern></defs><rect width="100%" height="32" fill="url(#tile)"></rect></svg></div><div class="h6 flex"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 128 128" fill="currentColor" stroke="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M111.088 47.5436V118.859L110.826 119.118L110.564 119.374L110.302 119.625L110.04 119.871L109.778 120.113L109.521 120.347L109.264 120.578L109.007 120.803L108.7
1255 121.025L108.487 121.247L108.225 121.466L107.962 121.68L107.7 121.89L107.438 122.097L107.175 122.298L106.913 122.497L106.683 122.667L106.454 122.834L106.224 122.998L105.994 123.159L105.765 123.317L105.535 123.473L105.306 123.625L105.076 123.774L104.835 123.927L104.595 124.078L104.354 124.224L104.114 124.368L103.873 124.509L103.633 124.647L103.427 124.762L103.221 124.875L103.016 124.986L102.81 125.095L102.604 125.201L102.402 125.304L102.2 125.404L101.998 125.502L101.796 125.598L101.59 125.694L101.383 125.788L101.177 125.88L100.971 125.969L100.765 126.057L100.559 126.142L100.353 126.225L100.146 126.306L99.9403 126.385L99.734 126.462L99.5279 126.538L99.3217 126.611L99.1155 126.681L98.9093 126.75L98.6825 126.824L98.4558 126.895L98.229 126.963L98.0022 127.03L97.7754 127.094L97.5696 127.15L97.3639 127.204L97.1582 127.257L96.9525 127.308L96.7468 127.356L96.5447 127.402L96.3427 127.446L96.1406 127.488L95.9385 127.528L95.698 127.574L95.4575 127.618L95.2169 127.659L94.9764 127.697L94.7359 127.733L94.4953 127.767L94.2548 127.799L94.0143 127.828L93.7738 127.855L93.5332 127.879L93.2927 127.901L93.0522 127.921L92.8254 127.938L92.5986 127.952L92.3718 127.965L92.145 127.975L91.9183 127.984L91.6777 127.991L91.4372 127.996L91.1967 127.999L90.9562 128L90.7156 127.998L90.4751 127.995L90.1917 127.988L89.9082 127.979L89.6247 127.966L89.3412 127.951L89.052 127.933L88.7627 127.911L88.4735 127.887L88.1842 127.861L87.895 127.831L87.6057 127.799L87.3165 127.764L86.9826 127.721L86.6486 127.674L86.3147 127.623L85.9807 127.57L85.6468 127.513L85.3129 127.452L84.979 127.389L84.6117 127.315L84.2444 127.238L83.8771 127.157L83.5097 127.072L83.1425 126.984L82.7325 126.881L82.3226 126.774L81.9127 126.663L81.5028 126.548L81.0929 126.429L80.683 126.306L80.273 126.179L79.8631 126.048L79.3166 125.868L78.7701 125.682L78.2236 125.49L77.6771 125.292L77.1307 125.088L76.5842 124.879L75.9401 124.626L75.2961 124.366L74.6521 124.1L74.0081 123.828L72.5147 123.175L71.0213 122.495L69.528 121.793L68.0349 121.074L66.5419 120.341L65.049 119.6L63.5563 118.854L61.6946 117.923L59.8333 117.002L57.9721 116.098L56.1112 115.219L55.3803 114.884L54.6493 114.553L53.9185 114.229L53.1877 113.912L52.4572 113.602L51.7263 113.3L50.9955 113.007L50.2652 112.723L49.7193 112.516L49.174 112.315L48.6287 112.12L48.0834 111.931L47.538 111.748L46.9927 111.572L46.5644 111.437L46.1355 111.307L45.7071 111.182L45.2788 111.06L44.8505 110.943L44.4222 110.831L44.0555 110.738L43.6882 110.649L43.3209 110.564L42.9542 110.482L42.5869 110.404L42.2202 110.33L41.8529 110.259L41.5648 110.207L41.2761 110.156L40.988 110.109L40.7 110.064L40.4113 110.021L40.1232 109.981L39.8345 109.944L39.5741 109.912L39.3131 109.883L39.0521 109.855L38.7911 109.831L38.5307 109.808L38.2741 109.788L38.0181 109.77L37.7621 109.754L37.5055 109.741L37.2444 109.729L36.9828 109.72L36.7218 109.714L36.4601 109.71L36.1991 109.709L35.9375 109.71L35.6764 109.714L35.4475 109.719L35.2186 109.725L34.9902 109.735L34.7619 109.746L34.533 109.759L34.3047 109.775L34.0757 109.792L33.8474 109.811L33.6078 109.834L33.3681 109.858L33.1291 109.885L32.8895 109.915L32.6499 109.946L32.4109 109.981L32.2058 110.012L32.0014 110.045L31.7964 110.08L31.592 110.116L31.3869 110.154L31.1856 110.193L30.985 110.235L30.7837 110.278L30.5825 110.322L30.3774 110.37L30.1724 110.419L29.9673 110.47L29.7623 110.524L29.5573 110.578L29.3522 110.635L29.1472 110.694L28.9421 110.755L28.7371 110.818L28.5321 110.882L28.327 110.949L28.122 111.018L27.9169 111.088L27.7119 111.161L27.4861 111.244L27.2609 111.329L27.0351 111.416L26.81 111.505L26.5842 111.598L26.3797 111.684L26.1753 111.772L25.9709 111.862L25.7665 111.955L25.5621 112.049L25.3608 112.143L25.1602 112.24L24.9595 112.339L24.7583 112.44L24.5539 112.546L24.3488 112.653L24.1438 112.763L23.9394 112.875L23.7343 112.989L23.5293 113.106L23.3249 113.224L23.0859 113.365L22.8469 113.51L22.6079 113.657L22.3689 113.808L22.1298 113.962L21.8908 114.119L21.6657 114.27L21.4405 114.424L21.2153 114.581L20.9902 114.741L20.765 114.904L20.5266 115.079L20.2876 115.258L20.0486 115.441L19.8102 115.626L19.5712 115.816L19.3322 116.008L19.1077 116.192L18.8825 116.381L18.6573 116.571L18.4322 116.765L18.207 116.962L17.956 117.185L17.7051 117.412L17.4541 117.644L17.2025 117.879L16.9516 118.118L16.7006 118.361L16.4497 118.608L16.1987 118.859L16 47.5436L16.0025 47.0682L16.01 46.5928L16.0214 46.1175L16.0383 45.
1256424L16.0597 45.1674L16.0855 44.6927L16.117 44.2183L16.1522 43.7442L16.1924 43.2705L16.2377 42.7972L16.2874 42.3243L16.3421 41.8521L16.4013 41.3803L16.4654 40.9092L16.534 40.4388L16.6076 39.9691L16.6855 39.5001L16.7686 39.0319L16.856 38.5646L16.9478 38.0982L17.0447 37.6327L17.1459 37.1682L17.2522 36.7048L17.3629 36.2424L17.478 35.7811L17.5982 35.3211L17.7227 34.8623L17.8516 34.4047L17.9856 33.9484L18.124 33.4935L18.2668 33.04L18.4139 32.588L18.5655 32.1375L18.7221 31.6885L18.8825 31.241L19.0479 30.7952L19.2177 30.3511L19.392 29.9087L19.5706 29.4681L19.753 29.0293L19.9404 28.5923L20.1323 28.1572L20.3285 27.724L20.5285 27.2929L20.7335 26.8638L20.9424 26.4367L21.1556 26.0118L21.3732 25.589L21.5946 25.1684L21.8204 24.75L22.0506 24.3339L22.2846 23.9201L22.5229 23.5087L22.7651 23.0997L23.0117 22.6932L23.2626 22.2891L23.5167 21.8876L23.7752 21.4886L24.0381 21.0922L24.3042 20.6985L24.5746 20.3074L24.8488 19.9191L25.1275 19.5336L25.4093 19.1508L25.6954 18.7709L25.9848 18.3938L26.2778 18.0197L26.5753 17.6485L26.876 17.2803L27.1804 16.9152L27.4886 16.5531L27.8006 16.1941L28.1157 15.8382L28.4346 15.4855L28.7566 15.136L29.0824 14.7898L29.412 14.4468L29.7447 14.1072L30.0806 13.7708L30.4202 13.4379L30.7624 13.1084L31.1089 12.7823L31.458 12.4597L31.8102 12.1406L32.1662 11.825L32.5247 11.513L32.8864 11.2047L33.2512 10.8999L33.6191 10.5988L33.9902 10.3014L34.3644 10.0077L34.7412 9.71785L35.1204 9.43174L35.5035 9.14939L35.8884 8.87089L36.2765 8.59628L36.6677 8.32558L37.0608 8.05877L37.457 7.79593L37.8558 7.53705L38.2571 7.28219L38.6609 7.0313L39.0678 6.78449L39.4766 6.54178L39.8873 6.30315L40.3012 6.06867L40.7169 5.83835L41.1352 5.61217L41.5554 5.39015L41.978 5.1724L42.4032 4.95887L42.8303 4.74961L43.2592 4.54457L43.6901 4.34387L44.1228 4.1475L44.558 3.95548L44.9945 3.7678L45.4335 3.58452L45.8738 3.40558L46.316 3.23111L46.76 3.06103L47.206 2.89543L47.6531 2.73429L48.1016 2.57761L48.5526 2.42547L49.0042 2.27779L49.4576 2.13464L49.9124 1.99608L50.3684 1.86204L50.8263 1.73254L51.2848 1.60769L51.7445 1.48737L52.2056 1.3717L52.6679 1.26063L53.1315 1.15421L53.5959 1.05238L54.0613 0.955269L54.5276 0.862748L54.9949 0.774945L55.463 0.691796L55.9319 0.613302L56.4016 0.539524L56.872 0.470464L57.3431 0.406121L57.8147 0.346432L58.287 0.291524L58.7598 0.241333L59.233 0.195859L59.7067 0.155102L60.1808 0.119062L60.6552 0.0878029L61.1299 0.0613239L61.6048 0.0395612L62.08 0.0225166L62.5
125552 0.0102517L63.0306 0.00276707L63.506 0L63.9815 0.00201234L64.4568 0.00874229L64.9321 0.0202524L65.4073 0.0365427L65.8822 0.0575502L66.357 0.0832746L66.8315 0.113779L67.3056 0.149064L67.7793 0.189003L68.2527 0.233722L68.7255 0.283222L69.1978 0.337376L69.6696 0.396309L70.1408 0.459897L70.6113 0.528203L71.0811 0.601225L71.5501 0.678965L72.0183 0.761359L72.4857 0.848471L72.9522 0.940173L73.4178 1.03659L73.8823 1.13767L74.3459 1.2434L74.8084 1.35372L75.2697 1.46869L75.7299 1.58819L76.1888 1.71235L76.6464 1.8411L77.1028 1.97444L77.5578 2.11231L78.0114 2.25471L78.4636 2.40163L78.9142 2.55308L79.3634 2.709L79.8109 2.86945L80.2569 3.03437L80.7011 3.20375L81.1436 3.37753L81.5844 3.55571L82.0234 3.7383L82.4605 3.92529L82.8957 4.11662L83.329 4.31229L83.7603 4.5123L84.1896 4.71665L84.6168 4.92522L85.042 5.13812L85.4649 5.35518L85.8857 5.57651L86.3043 5.80205L86.7205 6.03169L87.1345 6.26554L87.5461 6.50354L87.9553 6.74556L88.3621 6.99174L88.7663 7.24194L89.1681 7.49617L89.5673 7.75442L89.9638 8.01663L90.3578 8.28281L90.749 8.55289L91.1376 8.82692L91.5234 9.1048L91.9063 9.38651L92.2865 9.672L92.6638 9.96132L93.0382 10.2544L93.4096 10.5512L93.778 10.8517L94.1434 11.1558L94.5057 11.4637L94.865 11.7751L95.2211 12.0901L95.574 12.4086L95.9238 12.7307L96.2703 13.0562L96.6135 13.3852L96.9534 13.7176L97.29 14.0534L97.6232 14.3925L97.953 14.735L98.2794 15.0807L98.6023 15.4296L98.9217 15.7819L99.2375 16.1372L99.5497 16.4957L99.8584 16.8573L100.163 17.222L100.465 17.5897L100.763 17.9604L101.057 18.3341L101.347 18.7106L101.633 19.0901L101.916 19.4724L102.195 19.8575L102.47 20.2454L102.741 20.636L103.008 21.0293L103.271 21.4253L103.53 21.8239L103.785 22.225L104.036 22.6286L104.284 23.0348L104.527 23.4435L104.765 23.8545L105 24.2678L105.231 24.6836L105.458 25.1016L105.68 25.5219L105.898 25.9443L106.112 26.3689L106.321 26.7956L106.527 27.2245L106.728 27.6553L106.925 28.0881L107.117 28.5229L107.305 28.9595L107.489 29.3981L107.668 29.8384L107.843 30.2805L108.013 30.7244L108.179 31.1699L108.341 31.6171L108.498 32.0658L108.65 32.5161L108.798 32.968L108.942 33.4212L109.081 33.8759L109.215 34.3319L109.345 34.7893L109.47 35.2479L109.591 35.7078L109.707 36.1689L109.818 36.631L109.925 37.0943L110.027 37.5586L110.125 38.0239L110.218 38.4902L110.306 38.9574L110.389 39.4255L110.468 39.8943L110.542 40.3639L110.612 40.8343L110.676 41.3053L110.736 41.7769L110.792 42.2491L110.842 42.7218L110.888 43.1951L110.929 43.6687L110.966 44.1427L110.997 44.6172L111.024 45.0918L111.046 45.5667L111.064 46.0418L111.076 46.5171L111.084 46.9925L111.087 47.4679L111.088 47.5436ZM73.0545 47.5439L73.055 47.4488L73.0563 47.3537L73.0587 47.2587L73.0621 47.1637L73.0663 47.0687L73.0716 46.9737L73.0777 46.8788L73.0849 46.784L73.093 46.6892L73.1019 46.5946L73.1119 46.5L73.1228 46.4056L73.1347 46.3112L73.1475 46.217L73.1613 46.1229L73.1759 46.029L73.1915 45.9352L73.2081 45.8416L73.2256 45.7481L73.244 45.6548L73.2633 45.5617L73.2837 45.4688L73.3049 45.3762L73.327 45.2836L73.3501 45.1914L73.374 45.0994L73.3989 45.0076L73.4248 44.9161L73.4515 44.8249L73.4791 44.7339L73.5077 44.6432L73.5372 44.5528L73.5675 44.4627L73.5988 44.3728L73.631 44.2834L73.664 44.1942L73.698 44.1054L73.7328 44.0169L73.7685 43.9288L73.8051 43.841L73.8425 43.7536L73.8809 43.6666L73.9201 43.58L73.9602 43.4937L74.0011 43.4079L74.0429 43.3225L74.0855 43.2376L74.129 43.153L74.1733 43.0689L74.2185 42.9852L74.2645 42.9019L74.3113 42.8192L74.359 42.7369L74.4075 42.6551L74.4568 42.5738L74.5069 42.493L74.5578 42.4127L74.6095 42.3329L74.662 42.2536L74.7153 42.1749L74.7694 42.0967L74.8242 42.019L74.8799 41.9419L74.9363 41.8654L74.9934 41.7894L75.0514 41.714L75.11 41.6391L75.1695 41.5649L75.2296 41.4912L75.2906 41.4182L75.3521 41.3458L75.4145 41.274L75.4775 41.2028L75.5413 41.1323L75.6058 41.0624L75.6709 40.9932L75.7368 40.9245L75.8033 40.8566L75.8705 40.7893L75.9384 40.7228L76.0069 40.6569L76.0761 40.5916L76.146 40.5271L76.2164 40.4633L76.2876 40.4002L76.3593 40.3378L76.4317 40.2761L76.5047 40.2151L76.5783 40.1549L76.6525 40.0954L76.7272 40.0367L76.8026 39.9788L76.8786 39.9215L76.955 39.8651L77.0321 39.8093L77.1098 39.7544L77.1879 39.7003L77.2666 39.6469L77.3459 39.5944L77.4256 39.5426L77.5059 39.4916L77.5866 39.4415L77.6679 39.3921L77.7497 39.3435L77.8319 39.2958L77.9146 39.2489L77.9978 39.2028L78.0814 39.1576L78.1655 39.1132L78.2501 39.0697L78.335 39.027L78.4204 38.9851L78.5062 38.9441L78.5924 38.9039L78.679 38.8647L78.766 38.8263L78.8534 38.7887L78.9411 38.752L79.0292 38.7163L79.1177 38.6814L79.2064 38.6474L79.2955 38.6142L79.385 38.582L79.4748 38.5507L79.5649 38.5203L79.6552 38.4907L79.7459 38.4621L79.8369 38.4344L79.9281 38.4076L80.0196 38.3817L80.1114 38.3567L80.2034 38.3327L80.2956 38.3095L80.388 38.2873L80.4807 38.266L80.5736 38.2457L80.6667 38.2262L80.7599 38.2077L80.8534 38.1901L80.947 38.1735L81.0408 38.1579L81.1347 38.1431L81.2288 38.1292L81.3231 38.1164L81.4173 38.1045L81.5118 38.0935L81.6063 38.0835L81.701 38.0743L81.7958 38.0662L81.8906 38.059L81.9855 38.0528L82.0804 38.0474L82.1754 38.0431L82.2704 38.0397L82.3654 38.0372L82.4605 38.0357L82.5556 38.0352L82.6507 38.0356L82.7458 38.0369L82.8409 38.0392L82.9359 38.0425L83.0309 38.0467L83.1258 38.0518L83.2207 38.0579L83.3155 38.065L83.4103 38.073L83.5049 38.082L83.5995 38.0918L83.694 38.1026L83.7883 38.1144L83.8826 38.1272L83.9766 38.1408L84.0706 38.1554L84.1645 38.1709L84.2581 38.1874L84.3516 38.2048L84.4448 38.2232L84.538 38.2425L84.6309 38.2627L84.7236 38.2838L84.8161 38.3059L84.9083 38.3289L85.0004 38.3528L85.0922 38.3776L85.1837 38.4034L85.275 38.4301L85.366 38.4576L85.4567 38.4861L85.5471 38.5155L85.6372 38.5458L85.7271 38.577L85.8166 38.6091L85.9058 38.642L85.9946 38.6759L86.0832 38.7107L86.1713 38.7463L86.2591 38.7829L86.3465 38.8202L86.4336 38.8585L86.5202 38.8977L86.6065 38.9377L86.6923 38.9785L86.7778 39.0202L86.8628 39.0628L86.9474 39.1062L87.0316 39.1505L87.1153 39.1956L87.1985 39.2415L87.2813 39.2883L87.3636 39.3358L87.4455 39.3843L87.5268 39.4335L87.6076 39.4836L87.688 39.5344L87.7678 39.5861L87.8472 39.6385L87.926 39.6917L88.0042 39.7457L88.0819 39.8005L88.1591 39.8561L88.2357 39.9125L88.3117 39.9696L88.3872 40.0275L88.462 40.0861L88.5363 40.1454L88.61 40.2055L88.6831 40.2663L88.7556 40.3279L88.8274 40.3902L88.8987 40.4532L88.9692 40.5169L89.0392 40.5813L89.1085 40.6464L89.1771 40.7122L89.2451 40.7787L89.3124 40.8459L89.3791 40.9137L89.445 40.9822L89.5103 41.0513L89.5749 41.1211L89.6388 41.1915L89.7019 41.2626L89.7644 41.3343L89.8261 41.4066L89.8871 41.4795L89.9474 41.5531L90.007 41.6272L90.0657 41.702L90.1238 41.7773L90.181 41.8532L90.2376 41.9296L90.2933 42.0067L90.3483 42.0842L90.4025 42.1624L90.456 42.241L90.5086 42.3202L90.5604 42.4L90.6114 42.4802L90.6617 42.5609L90.7111 42.6421L90.7597 42.7239L90.8075 42.8061L90.8545 42.8887L90.9006 42.9719L90.9459 43.0555L90.9904 43.1396L91.034 43.224L91.0768 43.3089L91.1187 43.3943L91.1598 43.4801L91.2 43.5663L91.2393 43.6528L91.2778 43.7397L91.3154 43.8271L91.3521 43.9148L91.388 44.0029L91.4229 44.0913L91.457 44.1801L91.4902 44.2692L91.5225 44.3586L91.5539 44.4484L91.5845 44.5384L91.614 44.6288L91.6428 44.7194L91.6706 44.8103L91.6974 44.9015L91.7234 44.9931L91.7484 45.0848L91.7726 45.1767L91.7958 45.2689L91.8181 45.3614L91.8394 45.454L91.8599 45.5469L91.8794 45.6399L91.8979 45.7332L91.9155 45.8267L91.9323 45.9203L91.9481 46.014L91.9629 46.108L91.9767 46.202L91.9897 46.2962L92.0017 46.3905L92.0128 46.485L92.0229 46.5795L92.0321 46.6742L92.0403 46.7689L92.0476 46.8637L92.0539 46.9586L92.0593 47.0535L92.0637 47.1485L92.0672 47.2435L92.0697 47.3386L92.0713 47.4337L92.0719 47.5288L92.0716 47.6238L92.0703 47.7189L92.0681 47.814L92.0649 47.909L92.0608 48.004L92.0557 48.099L92.0497 48.1938L92.0427 48.2887L92.0348 48.3835L92.0259 48.4781L92.0161 48.5727L92.0054 48.6672L91.9937 48.7615L91.981 48.8558L91.9674 48.9499L91.9528 49.0439L91.9374 49.1377L91.921 49.2313L91.9037 49.3248L91.8853 49.4181L91.8662 49.5113L91.846 49.6042L91.825 49.6969L91.803 49.7895L91.7801 49.8817L91.7562 49.9737L91.7314 50.0656L91.7058 50.1572L91.6792 50.2484L91.6517 50.3394L91.6233 50.4302L91.594 50.5206L91.5638 50.6108L91.5326 50.7006L91.5006 50.7902L91.4677 50.8794L91.4339 50.9683L91.3992 51.0568L91.3636 51.145L91.3272 51.2328L91.2898 51.3203L91.2517 51.4073L91.2126 51.494L91.1727 51.5804L91.1319 51.6662L91.0902 51.7517L91.0477 51.8368L91.0044 51.9214L90.9601 52.0056L90.9151 52.0893L90.8693 52.172
1256L90.8226 52.2554L90.775 52.3378L90.7267 52.4197L90.6775 52.501L90.6276 52.582L90.5767 52.6624L90.5252 52.7423L90.4728 52.8216L90.4196 52.9004L90.3657 52.9787L90.3109 53.0565L90.2554 53.1337L90.1992 53.2103L90.1421 53.2864L90.0843 53.3619L90.0258 53.4368L89.9664 53.5112L89.9064 53.5849L89.8456 53.658L89.7841 53.7305L89.7219 53.8024L89.6589 53.8737L89.5953 53.9443L89.531 54.0143L89.4659 54.0837L89.4001 54.1524L89.3337 54.2204L89.2666 54.2878L89.1989 54.3545L89.1304 54.4205L89.0613 54.4858L88.9916 54.5505L88.9212 54.6144L88.8502 54.6776L88.7785 54.7402L88.7063 54.8019L88.6334 54.863L88.5598 54.9233L88.4857 54.9829L88.4111 55.0418L88.3358 55.0999L88.2599 55.1572L88.1835 55.2138L88.1065 55.2696L88.0291 55.3246L87.9509 55.3789L87.8723 55.4324L87.7932 55.4851L87.7135 55.537L87.6333 55.5881L87.5526 55.6384L87.4714 55.6879L87.3898 55.7366L87.3076 55.7844L87.2249 55.8315L87.1418 55.8777L87.0582 55.923L86.9743 55.9676L86.8898 56.0113L86.8049 56.0541L86.7196 56.0961L86.6339 56.1373L86.5477 56.1775L86.4612 56.217L86.3743 56.2555L86.287 56.2931L86.1993 56.3299L86.1113 56.3659L86.0229 56.4009L85.9341 56.4351L85.845 56.4684L85.7557 56.5004L85.6659 56.5319L85.5758 56.5627L85.4855 56.5923L85.3949 56.6212L85.304 56.6489L85.2128 56.6759L85.1214 56.7023L85.0297 56.7275L84.9377 56.7514L84.8455 56.7747L84.7531 56.7973L84.6605 56.8187L84.5676 56.8388L84.4745 56.8583L84.3813 56.8772L84.2879 56.8948L84.1943 56.9118L84.1006 56.9275L84.0066 56.9426L83.9126 56.9564L83.8184 56.9696L83.7241 56.9816L83.6297 56.9929L83.5351 57.003L83.4405 57.0118L83.3457 57.0206L83.2509 57.0275L83.156 57.0344L83.0611 57.0395L82.9662 57.0439L82.8711 57.0476L82.7761 57.0501L82.681 57.052L82.5859 57.0527H82.4909L82.3958 57.0514L82.3007 57.0489L82.2056 57.0457L82.1106 57.042L82.0157 57.0369L81.9208 57.0306L81.826 57.0237L81.7312 57.0162L81.6365 57.0074L81.5419 56.9979L81.4475 56.9872L81.3531 56.9753L81.2588 56.9627L81.1647 56.9495L81.0707 56.935L80.9769 56.9193L80.8832 56.903L80.7897 56.886L80.6964 56.8677L80.6032 56.8482L80.5103 56.8281L80.4175 56.8074L80.325 56.7854L80.2327 56.7627L80.1407 56.7388L80.0488 56.7143L79.9573 56.6885L79.8659 56.6621L79.7749 56.6344L79.6841 56.6061L79.5937 56.5772L79.5035 56.547L79.4136 56.5162L79.324 56.4839L79.2348 56.4511L79.1459 56.4173L79.0573 56.3827L78.9691 56.3472L78.8812 56.3109L78.7937 56.2736L78.7066 56.2354L78.62 56.1964L78.5336 56.1566L78.4477 56.1159L78.3621 56.0743L78.2771 56.0318L78.1924 55.9886L78.1082 55.9444L78.0244 55.8995L77.9411 55.8537L77.8582 55.807L77.7758 55.7596L77.6939 55.7113L77.6125 55.6622L77.5315 55.6123L77.4511 55.5615L77.3712 55.51L77.2918 55.4577L77.2129 55.4046L77.1346 55.3507L77.0568 55.296L76.9796 55.2406L76.9028 55.1843L76.8267 55.1273L76.7512 55.0696L76.6762 55.0111L76.6019 54.9519L76.5281 54.8919L76.4549 54.8312L76.3823 54.7698L76.3104 54.7076L76.2391 54.6447L76.1684 54.5811L76.0983 54.5168L76.0289 54.4518L75.9601 54.3861L75.8921 54.3198L75.8247 54.2527L75.7579 54.185L75.6918 54.1166L75.6264 54.0475L75.5618 53.9779L75.4978 53.9075L75.4345 53.8365L75.3719 53.7649L75.31 53.6927L75.249 53.6199L75.1885 53.5464L75.1289 53.4724L75.07 53.3978L75.0118 53.3225L74.9544 53.2467L74.8978 53.1704L74.8419 53.0934L74.7868 53.0159L74.7325 52.9379L74.6789 52.8593L74.6261 52.7802L74.5742 52.7006L74.523 52.6204L74.4726 52.5398L74.4231 52.4587L74.3743 52.377L74.3264 52.2949L74.2793 52.2123L74.2331 52.1292L74.1876 52.0457L74.143 51.9617L74.0993 51.8772L74.0563 51.7924L74.0143 51.7071L73.9731 51.6214L73.9327 51.5353L73.8932 51.4489L73.8547 51.3619L73.8169 51.2746L73.78 51.187L73.7441 51.099L73.709 51.0107L73.6747 50.9219L73.6414 50.8328L73.609 50.7435L73.5774 50.6538L73.5467 50.5638L73.517 50.4735L73.4881 50.3828L73.4602 50.2919L73.4332 50.2008L73.4071 50.1094L73.3819 50.0176L73.3576 49.9258L73.3342 49.8336L73.3118 49.7412L73.2903 49.6485L73.2698 49.5557L73.2501 49.4627L73.2313 49.3694L73.2136 49.276L73.1967 49.1824L73.1808 49.0887L73.1658 48.9948L73.1518 48.9007L73.1387 48.8066L73.1265 48.7123L73.1153 48.6178L73.105 48.5233L73.0957 48.4287L73.0874 48.334L73.0799 48.2392L73.0735 48.1443L73.0679 48.0494L73.0633 47.9544L73.0597 47.8594L73.057 47.7643L73.0553 47.6693L73.0545 47.5742L73.0545 47.5439ZM35.0156 47.5856V47.6806V47.7109L35.0162 47.806L35.0181 47.901L35.0206 47.9961L35.0244 48.0911L35.0288 48.1861L35.0344 48.2811L35.0407 48.3759L35.0483 48.4707L35.0565 48.5654L35.0659 48.66L35.076 48.7546L35.0873 48.849L35.0999 48.9433L35.1124 49.037
1255L35.1269 49.1315L35.142 49.2255L35.1577 49.3192L35.1747 49.4128L35.1923 49.5062L35.2112 49.5994L35.2307 49.6924L35.2514 49.7852L35.2728 49.8779L35.2955 49.9703L35.3187 50.0625L35.3426 50.1544L35.3678 50.2461L35.3942 50.3375L35.4213 50.4287L35.4489 50.5195L35.4779 50.6102L35.5074 50.7005L35.5383 50.7905L35.5697 50.8802L35.6024 50.9696L35.6357 51.0586L35.6697 51.1474L35.7049 51.2357L35.7408 51.3237L35.7779 51.4114L35.8156 51.4986L35.854 51.5856L35.8936 51.6721L35.9339 51.7582L35.9754 51.8438L36.0175 51.9291L36.0603 52.014L36.1037 52.0984L36.1483 52.1824L36.1943 52.2659L36.2402 52.349L36.2873 52.4316L36.3351 52.5137L36.3842 52.5954L36.4333 52.6765L36.4842 52.7571L36.5352 52.8373L36.5867 52.917L36.6396 52.996L36.6937 53.0746L36.7477 53.1526L36.8031 53.2301L36.8584 53.3071L36.915 53.3835L36.9729 53.4593L37.0308 53.5345L37.0899 53.6091L37.1497 53.6832L37.21 53.7566L37.271 53.8295L37.3327 53.9017L37.3956 53.9732L37.4585 54.0442L37.5226 54.1146L37.5874 54.1843L37.6528 54.2533L37.7189 54.3217L37.7855 54.3894L37.8528 54.4565L37.9208 54.5228L37.9899 54.5885L38.0591 54.6535L38.1296 54.7178L38.2 54.7814L38.2711 54.8443L38.3434 54.9065L38.4158 54.9679L38.4887 55.0286L38.5629 55.0886L38.6372 55.1478L38.712 55.2063L38.7875 55.2641L38.8636 55.321L38.9403 55.3773L39.0177 55.4328L39.0957 55.4874L39.1737 55.5413L39.2529 55.5945L39.3322 55.6467L39.412 55.6982L39.4925 55.749L39.5737 55.7989L39.6548 55.848L39.7366 55.8963L39.819 55.9437L39.902 55.9904L39.985 56.0362L40.0693 56.0811L40.1536 56.1253L40.2379 56.1686L40.3234 56.211L40.4083 56.2526L40.4945 56.2933L40.5806 56.3332L40.6674 56.3722L40.7549 56.4103L40.8423 56.4476L40.9297 56.4839L41.0184 56.5195L41.1071 56.5541L41.1958 56.5878L41.2851 56.6206L41.3744 56.6529L41.4643 56.6837L41.5543 56.7139L41.6448 56.7428L41.736 56.7711L41.8266 56.7988L41.9184 56.8252L42.0096 56.851L42.1015 56.8755L42.1939 56.8994L42.2858 56.9221L42.3782 56.9441L42.4713 56.9648L42.5644 56.985L42.6575 57.0045L42.7506 57.0227L42.8443 57.0397L42.938 57.056L43.0317 57.0718L43.1254 57.0862L43.2198 57.0994L43.3141 57.112L43.4085 57.124L43.5028 57.1347L43.5971 57.1441L43.6921 57.1529L43.7871 57.1604L43.8814 57.1674L43.9764 57.1737L44.0714 57.1787L44.1664 57.1825L44.2613 57.1856L44.3569 57.1881L44.4519 57.1894H44.5469L44.6419 57.1887L44.7368 57.1869L44.8318 57.1843L44.9268 57.1806L45.0218 57.1762L45.1167 57.1711L45.2117 57.1642L45.3067 57.1573L45.4016 57.1485L45.496 57.1397L45.5903 57.1296L45.6847 57.1183L45.779 57.1064L45.8734 57.0931L45.9677 57.0793L46.0614 57.0642L46.1551 57.0485L46.2489 57.0315L46.3419 57.0139L46.4357 56.995L46.5287 56.9755L46.6212 56.9554L46.7143 56.934L46.8061 56.9114L46.8986 56.8881L46.9904 56.8642L47.0822 56.839L47.1734 56.8126L47.2646 56.7856L47.3558 56.7579L47.4464 56.729L47.537 56.6994L47.6269 56.6686L47.7169 56.6371L47.8062 56.6051L47.8948 56.5718L47.9835 56.5376L48.0722 56.5026L48.1603 56.4666L48.2477 56.4298L48.3351 56.3922L48.4219 56.3537L48.5087 56.3142L48.5949 56.274L48.6804 56.2329L48.766 56.1908L48.8509 56.148L48.9352 56.1043L49.0194 56.0598L49.1025 56.0144L49.1861 55.9682L49.2685 55.9211L49.3509 55.8733L49.432 55.8247L49.5138 55.7752L49.5943 55.7248L49.6742 55.6738L49.7541 55.6218L49.8333 55.5692L49.9119 55.5156L49.9899 55.4614L50.0673 55.4063L50.1446 55.3505L50.2208 55.2939L50.2969 55.2366L50.3717 55.1785L50.4466 55.1197L50.5208 55.06L50.5944 54.9997L50.6673 54.9386L50.7396 54.8769L50.8114 54.8144L50.8818 54.7511L50.9522 54.6872L51.0221 54.6225L51.0912 54.5572L51.1598 54.4912L51.2277 54.4245L51.2944 54.3572L51.3611 54.2891L51.4271 54.2204L51.4919 54.1511L51.556 54.081L51.6196 54.0104L51.6831 53.9391L51.7447 53.8673L51.8064 53.7947L51.8674 53.7216L51.9271 53.6479L51.9869 53.5735L52.0454 53.4986L52.1032 53.4231L52.1598 53.347L52.2165 53.2704L52.2718 53.1932L52.3265 53.1155L52.3806 53.0372L52.4334 52.9583L52.4863 52.879L52.5379 52.7991L52.5882 52.7187L52.6385 52.6378L52.6875 52.5564L52.736 52.4745L52.7838 52.3922L52.8303 52.3093L52.8762 52.226L52.9209 52.1423L52.9653 52.0581L53.0086 51.9735L53.0512 51.8884L53.0928 51.8029L53.1336 51.7171L53.1735 51.6307L53.2126 51.5441L53.2508 51.457L53.2881 51.3695L53.3246 51.2817L53.3601 51.1935L53.3948 51.105L53.4286 51.0161L53.4615 50.9269L53.4936 50.8374L53.5246 50.7475L53.5549 50.6574L53.5842 50.5669L53.6126 50.4761L53.6401 50.3851L53.6667 50.2939L53.6924 50.2023L53.7171 50.1105L53.7409 50.0185L53.7639 49.9262L53.7858 49.8337L53.8069 49.741L53.8271 49.648L53.8463 49.5548L53.8646 49.4616L53.8819 49.368L53.8983 49.2744L53.9138 49.1806L53.9283 49.0866L53.9419 48.9925L53.9545 48.8983L53.9662 48.8039L53.977 48.7094L53.9868 48.6149L53.9957 48.5202L54.0036 48.4254L54.0106 48.3306L54.0166 48.2357L54.0217 48.1407L54.0258 48.0457L54.029 47.9507L54.0312 47.8556L54.0325 47.7605L54.0328 47.6655L54.0322 47.5704L54.0306 47.4753L54.0281 47.3803L54.0246 47.2852L54.0202 47.1903L54.0148 47.0953L54.0085 47.0004L54.0012 46.9057L53.993 46.8109L53.9838 46.7163L53.9737 46.6217L53.9626 46.5273L53.9506 46.4329L53.9377 46.3388L53.9238 46.2447L53.9089 46.1508L53.8932 46.057L
12553.8765 45.9634L53.8589 45.8699L53.8402 45.7767L53.8207 45.6836L53.8003 45.5907L53.779 45.4981L53.7567 45.4056L53.7334 45.3134L53.7094 45.2215L53.6843 45.1298L53.6583 45.0383L53.6314 44.9471L53.6036 44.8561L53.5749 44.7655L53.5453 44.6751L53.5148 44.5851L53.4834 44.4953L53.4511 44.4059L53.418 44.3168L53.3839 44.228L53.3489 44.1396L53.313 44.0515L53.2763 43.9638L53.2387 43.8764L53.2002 43.7895L53.1609 43.703L53.1207 43.6168L53.0796 43.531L53.0377 43.4457L52.9949 43.3608L52.9513 43.2763L52.9071 43.1922L52.8618 43.1086L52.8152 43.0255L52.7687 42.9428L52.7209 42.8606L52.6718 42.7788L52.6228 42.6976L52.5724 42.6169L52.5215 42.5367L52.4693 42.4569L52.4171 42.3778L52.3636 42.2991L52.3089 42.2209L52.2542 42.1434L52.1982 42.0663L52.1422 41.9899L52.0844 41.914L52.0265 41.8387L51.968 41.7639L51.9083 41.6899L51.8479 41.6163L51.7869 41.5434L51.7252 41.471L51.663 41.3993L51.5994 41.3283L51.5359 41.2578L51.4711 41.188L51.4057 41.1189L51.3397 41.0504L51.2736 40.9826L51.2057 40.9154L51.1378 40.8489L51.0692 40.7831L51 40.718L50.9302 40.6536L50.8598 40.5899L50.7881 40.5269L50.7164 40.4646L50.644 40.4031L50.5711 40.3422L50.4975 40.2821L50.4227 40.2228L50.3478 40.1642L50.2723 40.1063L50.1969 40.0492L50.1201 39.9928L50.0428 39.9372L49.9654 39.8825L49.8868 39.8284L49.8082 39.7752L49.7289 39.7228L49.649 39.6711L49.5685 39.6203L49.488 39.5702L49.4062 39.521L49.3245 39.4726L49.2421 39.425L49.1597 39.3782L49.076 39.3323L48.9924 39.2872L48.9081 39.2429L48.8238 39.1995L48.7389 39.157L48.6534 39.1153L48.5672 39.0744L48.481 39.0344L48.3942 38.9953L48.3075 38.9569L48.22 38.9196L48.132 38.883L48.0439 38.8474L47.9552 38.8127L47.8665 38.7788L47.7772 38.7458L47.6879 38.7137L47.598 38.6825L47.508 38.6522L47.4175 38.6228L47.3269 38.5943L47.2357 38.5668L47.1445 38.5401L47.0533 38.5143L46.9615 38.4896L46.869 38.4656L46.7772 38.4426L46.6847 38.4206L46.5916 38.3994L46.4992 38.3792L46.4055 38.3599L46.3124 38.3416L46.2193 38.3241L46.1256 38.3077L46.0312 38.2921L45.9375 38.2775L45.8432 38.2639L45.7495 38.2511L45.6551 38.2394L45.5601 38.2285L45.4658 38.2187L45.3715 38.2097L45.2765 38.2017L45.1815 38.1946L45.0865 38.1885L44.9916 38.1834L44.8966 38.1792L44.8016 38.176L44.7066 38.1736L44.6117 38.1723L44.5167 38.1719L44.4217 38.1724L44.3261 38.174L44.2311 38.1764L44.1362 38.1798L44.0412 38.1841L43.9462 38.1895L43.8512 38.1957L43.7569 38.2029L43.6619 38.2111L43.5676 38.2202L43.4726 38.2302L43.3783 38.2412L43.2839 38.2531L43.1896 38.266L43.0959 38.2798L43.0015 38.2946L42.9078 38.3102L42.8141 38.3269L42.721 38.3445L42.6273 38.363L42.5342 38.3824L42.4417 38.4028L42.3487 38.424L42.2562 38.4462L42.1644 38.4694L42.0725 38.4935L41.9807 38.5184L41.8889 38.5443L41.7977 38.5711L41.7071 38.5988L41.6159 38.6274L41.526 38.657L41.4354 38.6874L41.3461 38.7188L41.2568 38.751L41.1675 38.7841L41.0788 38.8181L40.9901 38.853L40.902 38.8888L40.814 38.9254L40.7272 38.963L40.6398 39.0014L40.5536 39.0407L40.4668 39.0808L40.3813 39.1218L40.2957 39.1637L40.2108 39.2064L40.1265 39.2499L40.0423 39.2943L39.9586 39.3395L39.8756 39.3856L39.7925 39.4325L39.7108 39.4802L39.629 39.5288L39.5473 39.5782L39.4668 39.6283L39.3862 39.6793L39.307 39.7311L39.2277 39.7837L39.1491 39.837L39.0705 39.8911L38.9931 39.9461L38.9158 40.0018L38.8397 40.0583L38.7636 40.1155L38.6881 40.1734L38.6132 40.2322L38.539 40.2917L38.4654 40.3519L38.3925 40.4128L38.3202 40.4745L38.2484 40.5369L38.1774 40.6L38.1069 40.6638L38.0371 40.7284L37.9679 40.7936L37.8994 40.8595L37.8314 40.926L37.7641 40.9933L37.6975 41.0613L37.6321 41.1299L37.5667 41.1991L37.5025 41.269L37.4383 41.3395L37.3755 41.4107L37.3132 41.4825L37.2515 41.5549L37.1905 41.628L37.1301 41.7016L37.071 41.7758L37.0125 41.8507L36.954 41.9261L36.8974 42.0021L36.8408 42.0786L36.7849 42.1557L36.7301 42.2334L36.676 42.3116L36.6232 42.3903L36.5704 42.4696L36.5188 42.5494L36.4679 42.6297L36.4175 42.7105L36.3685 42.7919L36.3201 42.8736L36.2722 42.956L36.2257 43.0387L36.1792 43.1219L36.1345 43.2056L36.0899 43.2897L36.0464 43.3743L36.0037 43.4592L35.9622 43.5447L35.9213 43.6305L35.881 43.7167L35.842 43.8034L35.8037 43.8903L35.7659 43.9778L35.7295 44.0655L35.6936 44.1536L35.659 44.2421L35.625 44.3309L35.5917 44.4201L35.5596 44.5096L35.5282 44.5994L35.498 44.6895L35.4684 44.7799L35.4401 44.8706L35.4125 44.9616L35.3854 45.0529L35.3596 45.1444L35.3351 45.2361L35.3112 45.3281L35.2879 45.4204L35.2659 45.5129L35.2445 45.6055L35.2244 45.6984L35.2049 45.7915L35.1867 45.8848L35.169 45.9783L35.1527 46.0719L35.137 46.1657L35.1219 46.2596L35.1087 46.3537L35.0955 46.448L35.0835 46.5423L35.0728 46.6368L35.0628 46.7314L35.0539 46.826L35.0458 46.9207L35.0388 47.0155L35.0326 47.1104L35.0275 47.2054L35.0231 47.3004L35.0194 47.3954L35.0175 47.4905L35.0156 47.5856Z"></path></svg><button id="grid-button">Grid</button><div class="ma"></div><div>©2024 Brent Jackson. All rights reserved</div></div></footer>
125<script type="module" src="https://esm.town/v/jxnblk/dotcom/client.ts"></script>
125</div></body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.