tag:blogger.com,1999:blog-62328194862616960352024-03-05T14:53:44.188-06:00Getting Genetics DoneGetting Things Done in Genetics & Bioinformatics ResearchStephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.comBlogger399125tag:blogger.com,1999:blog-6232819486261696035.post-32382376939148839992017-02-01T13:35:00.000-06:002017-02-01T13:35:59.890-06:00Staying Current in Bioinformatics & Genomics: 2017 Edition<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=3238237693914883999;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=0;src=link">
<div style="margin: 1.2em 0px !important;">
A while back I wrote <a href="http://www.gettinggeneticsdone.com/2012/05/how-to-stay-current-in.html">this post</a> about how I stay current in bioinformatics & genomics. That was <em>nearly five years ago</em>. A lot has changed since then. A few links are dead. Some of the blogs or Twitter accounts I mentioned have shifted focus or haven’t been updated in years (guilty as charged). The way we consume media has evolved — Google thought they could kill off RSS (<a href="http://feedly.com/">long live RSS!</a>), there are many new literature alert services, preprints have really taken off in this field, and many more scientists are engaging via social media than before.</div>
<div style="margin: 1.2em 0px !important;">
People still frequently ask me how I stay current and keep a finger on the pulse of the field. I’m not claiming to be able to do this well — that’s a near-impossible task for anyone. Five years later and I still run our bioinformatics core, and I’m still mostly focused on <em>applied</em> methodology and study design rather than any particular phenotype, model system, disease, or specific method. It helps me to know that <a href="https://f1000research.com/articles/4-1521/v2">transcript-level estimates improve gene-level inferences from RNA-seq data</a>, and that there’s <a href="https://bioconductor.org/packages/release/bioc/html/tximport.html">software to help me do this</a>, but the details underlying kmer shredding vs pseudoalignment to a transcriptome de Bruijn graph aren’t as important to me as knowing that there’s a software implementation that’s well documented, actively supported, and performs well in fair benchmarks. As such, most of what I pay attention to is applied/methods-focused.</div>
<div style="margin: 1.2em 0px !important;">
<strong>What follows is a scattershot, noncomprensive guide to the people, blogs, news outlets, journals, and aggregators that I lean on in an attempt to stay on top of things.</strong> I’ve inevitably omitted some key resources, so <strong>please don’t be offended</strong> if you don’t see your name/blog/Twitter/<em>etc.</em> listed here (drop a link in the comments!). Whatever I write here now will be out of date in no time, so I’ll try to write an update post every year instead of every five.</div>
<h1 id="twitter" style="border-bottom: 1px solid rgb(221, 221, 221); font-size: 1.6em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Twitter</h1>
<div style="margin: 1.2em 0px !important;">
In the <a href="http://www.gettinggeneticsdone.com/2012/05/how-to-stay-current-in.html">2012 post</a> I ended with Twitter, but I have to lead with it this time. Twitter is probably my most valuable resource for learning about the bleeding-edge developments in genomics & bioinformatics. It’s great for learning what’s new and contributing to the dialogue in your field, but only when used effectively. </div>
<div style="margin: 1.2em 0px !important;">
I aggressively prune the list of people I follow to keep what I see relevant and engaging. I can tolerate an occasional digression into politics, posting pictures of you drinking with colleagues at a conference, or self-congratulatory announcements. But once these off-topic Tweets become the norm, I unfollow. I also rely on the built-in <a href="https://support.twitter.com/articles/76460">list feature</a>. I follow a few hundred people, but I only add a select few dozen to a “notjunk” list that I look at when I’m short on time. Folks in this list don’t Tweet too often and have a high signal-to-noise ratio (as far as what I’m interested in reading). If I don’t get a chance to catch up on my entire timeline, I can at least breeze through recent Tweets from folks on this list. </div>
<div style="margin: 1.2em 0px !important;">
I’m also wary of following extremely prolific users. For example — if someone’s been on Twitter less than a year, already has 20,000 Tweets, but only 100 followers, it tells me they’ve got a lot to say but nobody cares. I let the hive mind work for me in this case, using this Tweet-to-follower ratio as sort of a proxy for signal-to-noise.</div>
<div style="margin: 1.2em 0px !important;">
I mostly follow individuals and aggregators, but I also follow a few organization accounts. These can be a mixed bag. Only a few organization accounts do this well, delivering interesting and applicable content to a targeted audience, while many more are poor attempts at marketing and self-promotion while not offering any substantive value or interesting content. </div>
<div style="margin: 1.2em 0px !important;">
<strong>Individuals:</strong> In no particular order, here’s an incomplete list of people who Tweet content that I find consistently on-topic and interesting.</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;">Aaron Quinlan (<a href="https://twitter.com/aaronquinlan">aaronquinlan</a>)</li>
<li style="margin: 0.5em 0px;">Adam Phillippy (<a href="https://twitter.com/aphillippy">aphillippy</a>)</li>
<li style="margin: 0.5em 0px;">Andrew Severin (<a href="https://twitter.com/isugif">isugif</a>)</li>
<li style="margin: 0.5em 0px;">Casey Greene (<a href="https://twitter.com/GreeneScientist">GreeneScientist</a>)</li>
<li style="margin: 0.5em 0px;">Clive Brown (<a href="https://twitter.com/Clive_G_Brown">Clive_G_Brown</a>)</li>
<li style="margin: 0.5em 0px;">Dan MacArthur (<a href="https://twitter.com/dgmacarthur">dgmacarthur</a>)</li>
<li style="margin: 0.5em 0px;">David Robinson (<a href="https://twitter.com/drob">drob</a>)</li>
<li style="margin: 0.5em 0px;">Elisabeth Bik (<a href="https://twitter.com/MicrobiomDigest">MicrobiomDigest</a>)</li>
<li style="margin: 0.5em 0px;">Frank Harrell (<a href="https://twitter.com/f2harrell">f2harrell</a>)</li>
<li style="margin: 0.5em 0px;">Hadley Wickham (<a href="https://twitter.com/hadleywickham">hadleywickham</a>)</li>
<li style="margin: 0.5em 0px;">Heng Li (<a href="https://twitter.com/lh3lh3">lh3lh3</a>)</li>
<li style="margin: 0.5em 0px;">James Hadfield (<a href="https://twitter.com/coregenomics">coregenomics</a>)</li>
<li style="margin: 0.5em 0px;">Jared Simpson (<a href="https://twitter.com/jaredtsimpson">jaredtsimpson</a>)</li>
<li style="margin: 0.5em 0px;">Jeff Leek (<a href="https://twitter.com/jtleek">jtleek</a>)</li>
<li style="margin: 0.5em 0px;">Jenny Bryan (<a href="https://twitter.com/JennyBryan">JennyBryan</a>)</li>
<li style="margin: 0.5em 0px;">Julia Silge (<a href="https://twitter.com/juliasilge">juliasilge</a>)</li>
<li style="margin: 0.5em 0px;">Krista Ternus (<a href="https://twitter.com/KristaTernus">KristaTernus</a>)</li>
<li style="margin: 0.5em 0px;">Lex Nederbragt (<a href="https://twitter.com/lexnederbragt">lexnederbragt</a>)</li>
<li style="margin: 0.5em 0px;">Lior Pachter (<a href="https://twitter.com/lpachter">lpachter</a>)</li>
<li style="margin: 0.5em 0px;">Mick Watson (<a href="https://twitter.com/biomickwatson">biomickwatson</a>)</li>
<li style="margin: 0.5em 0px;">Mike Love (<a href="https://twitter.com/mikelove">mikelove</a>)</li>
<li style="margin: 0.5em 0px;">Nick Loman (<a href="https://twitter.com/pathogenomenick">pathogenomenick</a>)</li>
<li style="margin: 0.5em 0px;">Nicolas Robine (<a href="https://twitter.com/notSoJunkDNA">notSoJunkDNA</a>)</li>
<li style="margin: 0.5em 0px;">Phil Ashton (<a href="https://twitter.com/flashton2003">flashton2003</a>)</li>
<li style="margin: 0.5em 0px;">RNA-seq Blog (<a href="https://twitter.com/rnaseqblog">rnaseqblog</a>)</li>
<li style="margin: 0.5em 0px;">Rob Patro (<a href="https://twitter.com/nomad421">nomad421</a>)</li>
<li style="margin: 0.5em 0px;">Roger Peng (<a href="https://twitter.com/rdpeng">rdpeng</a>)</li>
<li style="margin: 0.5em 0px;">Sam Minot (<a href="https://twitter.com/sminot">sminot</a>)</li>
<li style="margin: 0.5em 0px;">Sean Davis (<a href="https://twitter.com/seandavis12">seandavis12</a>)</li>
<li style="margin: 0.5em 0px;">Titus Brown (<a href="https://twitter.com/ctitusbrown">ctitusbrown</a>)</li>
<li style="margin: 0.5em 0px;">Torsten Seemann (<a href="https://twitter.com/torstenseemann">torstenseemann</a>)</li>
<li style="margin: 0.5em 0px;">Tuuli Lappalainen (<a href="https://twitter.com/tuuliel">tuuliel</a>)</li>
<li style="margin: 0.5em 0px;">Vince Buffalo (<a href="https://twitter.com/vsbuffalo">vsbuffalo</a>)</li>
<li style="margin: 0.5em 0px;">Willem van Schaik (<a href="https://twitter.com/WvSchaik">WvSchaik</a>)</li>
<li style="margin: 0.5em 0px;">Zamin Iqbal (<a href="https://twitter.com/ZaminIqbal">ZaminIqbal</a>)</li>
<li style="margin: 0.5em 0px;"><a href="https://twitter.com/genetics_blog/following">Many more I’m failing to specifically mention…</a></li>
</ul>
<div style="margin: 1.2em 0px !important;">
<strong>Others:</strong> Besides individual accounts, there are also a number of aggregators and organizations that I keep on a high signal-to-noise <a href="https://support.twitter.com/articles/76460">list</a>. </div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;">bioRxiv (<a href="https://twitter.com/biorxivpreprint">biorxivpreprint</a>)</li>
<li style="margin: 0.5em 0px;">bioRxiv Bioinfo (<a href="https://twitter.com/biorxiv_bioinfo">biorxiv_bioinfo</a>)</li>
<li style="margin: 0.5em 0px;">bioRxiv Genomics (<a href="https://twitter.com/biorxiv_genomic">biorxiv_genomic</a>)</li>
<li style="margin: 0.5em 0px;">Metagenomics Papers (<a href="https://twitter.com/metagenomic_lit">metagenomic_lit</a>)</li>
<li style="margin: 0.5em 0px;">InformaticsGW (<a href="https://twitter.com/UduakGW">UduakGW</a>)</li>
<li style="margin: 0.5em 0px;">Hacker News 300 (<a href="https://twitter.com/newsyc300">newsyc300</a>)</li>
<li style="margin: 0.5em 0px;">CompBiolPapers (<a href="https://twitter.com/compbiolpapers">compbiolpapers</a>)</li>
<li style="margin: 0.5em 0px;">RNA-seq paper aggregator (<a href="https://twitter.com/RNA_seq">RNA_seq</a>)</li>
<li style="margin: 0.5em 0px;">Bioconductor (<a href="https://twitter.com/Bioconductor">Bioconductor</a>)</li>
<li style="margin: 0.5em 0px;">RStudio Tips (<a href="https://twitter.com/rstudiotips">rstudiotips</a>)</li>
</ul>
<h1 id="blogs" style="border-bottom: 1px solid rgb(221, 221, 221); font-size: 1.6em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Blogs</h1>
<div style="margin: 1.2em 0px !important;">
I follow these and other blogs using RSS. I’ve been happy with the free version of <a href="http://feedly.com/">Feedly</a> ever since Google Reader was killed. The web interface and iOS app have everything I need, and they both integrate nicely with other services like Evernote, Instapaper, Buffer, Twitter, etc. If you can’t find a direct link to the blog’s RSS feed, you can usually type the name of the blog into Feedly’s search bar and it’ll find it for you. Similar to my “notjunk” list in Twitter, I have a Favorites category in Feedly where I include only the feeds I absolutely wouldn’t want to miss.</div>
<div style="margin: 1.2em 0px !important;">
These are some of the few that I try to read whenever something new is posted, and Feedly helps me keep those organized, either by “starring” something I want to come back to, or saving it for later with <a href="https://www.instapaper.com/">Instapaper</a>. They’re in no particular order, and I’m sure I’ve forgotten something.</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><a href="http://varianceexplained.org/">Variance Explained</a>: David Robinson’s blog (Data Scientist at Stack Overflow, works in R and Python).</li>
<li style="margin: 0.5em 0px;"><a href="https://globalbiodefense.com/">Global Biodefense</a>: News on pathogens, outbreaks, and preparedness, with periodic posts on genomics and bioinformatics-related developments and funding opportunities.</li>
<li style="margin: 0.5em 0px;"><a href="https://flxlexblog.wordpress.com/">In between lines of code</a>: Lex Nederbragt’s blog on biology, sequencing, bioinformatics, …</li>
<li style="margin: 0.5em 0px;"><a href="http://simplystatistics.org/">Simply Statistics</a>: A statistics blog by Rafa Irizarry, Roger Peng, and Jeff Leek.</li>
<li style="margin: 0.5em 0px;"><a href="https://liorpachter.wordpress.com/">Bits of DNA</a>: Reviews and commentary on computational biology by Lior Pachter (fair warning: dialogue here can get a bit heated!).</li>
<li style="margin: 0.5em 0px;"><a href="http://bcb.io/articles/">Blue Collar Bioinformatics</a>: articles related tool validation and the open source bioinformatics community.</li>
<li style="margin: 0.5em 0px;"><a href="https://microbiomedigest.com/">Microbiome Digest - Bik’s Picks</a>: A daily digest of scientific microbiome papers, by Elisabeth Bik, Science Editor at uBiome.</li>
<li style="margin: 0.5em 0px;"><a href="http://ivory.idyll.org/blog/">Living in an Ivory Basement</a>: Titus Brown’s blog on metagenomics, open science, testing, reproducibility, and programming.</li>
<li style="margin: 0.5em 0px;"><a href="http://enseqlopedia.com/">Enseqlopedia</a>: James Hadfield’s blog on all things NGS.</li>
<li style="margin: 0.5em 0px;"><a href="http://www.epistasisblog.org/">Epistasis Blog</a>: Jason Moore’s computational biology blog.</li>
<li style="margin: 0.5em 0px;"><a href="https://blog.rstudio.org/">RStudio Blog</a>: announcements about new RStudio functionality, updates about the <a href="http://tidyverse.org/">tidyverse</a>, and more. </li>
<li style="margin: 0.5em 0px;"><a href="http://nextgenseek.com/">nextgenseek.com</a>: Next-Gen Sequencing Blog covering new developments in NGS data & analysis.</li>
<li style="margin: 0.5em 0px;"><a href="http://www.rna-seqblog.com/">RNA-Seq Blog</a>: Transcriptome Research & Industry News.</li>
<li style="margin: 0.5em 0px;"><a href="http://www.theallium.com/">The Allium</a>: We all need a little humor in our lives. Like <em>The Onion</em>, but for science.</li>
</ul>
<h1 id="others" style="border-bottom: 1px solid rgb(221, 221, 221); font-size: 1.6em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Others</h1>
<div style="margin: 1.2em 0px !important;">
I’m unsure how to categorize the rest. These are things like aggregators, Q&A sites/forums, and others.</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><a href="http://nuzzel.com/about">Nuzzel</a> is something I’ve only been using for a few months but it works very well. It’s meant to solve the Twitter / social media overload problem. If you’re following a few hundred people, you could easily have thousands of Tweets per day to read through (or miss). Nuzzel emails you a daily newsletter of the most relevant content in your Twitter feed. I’m guessing it does this by analyzing how many people you follow share, retweet, or favorite the same links. I try to read everything in my RSS feeds but I could never do this with Twitter (nor should you worry about trying). Nuzzel helps you catch up on things that are trending among the people you follow. It’s not a substitute for following the right people (see the Twitter section above).</li>
<li style="margin: 0.5em 0px;"><a href="https://rweekly.org/">RWeekly</a>: weekly updates from the entire R community. Offers an RSS feed but I subscribe to the weekly email. Each email sends out about 50 links with one-sentence descriptions to things being done in the R community that week.</li>
<li style="margin: 0.5em 0px;"><a href="https://www.r-bloggers.com/">R Bloggers</a> aggregates RSS feeds from hundreds of blogs about R. Much more comprehensive than RWeekly, but lots to sort through.</li>
<li style="margin: 0.5em 0px;"><a href="https://www.genomeweb.com/">GenomeWeb</a> still provides high-quality original content as well as summaries of what’s going on in the field. Create an account, log in, view your profile page, and subscribe to some of their regular emails. I subscribe to their daily news, the scan, informatics, sequencing, and infectious diseases bulletins. <em>Pro tip</em>: Much of their content is only available for premium subscribers. If you sign up with a .edu address, you can access all this content for free.</li>
<li style="margin: 0.5em 0px;"><a href="https://blog.f1000.com/2012/05/24/search-smart-f1000-smartsearch/">F1000’s Smart Search</a> is one of the few literature recommendation services that I find useful, relevant, and current. My RNA-seq and metagenomics alerts consistently deliver relevant and fresh content.</li>
<li style="margin: 0.5em 0px;"><a href="https://www.biostars.org/">BioStars</a>: This is a stack exchange Q&A site focused on bioinformatics, computational genomics, biological data analysis. You can go to the homepage and sort by topic, views, answers, etc., and the platform offers <a href="https://www.biostars.org/info/rss/">several granular ways to subscribe via RSS</a>.</li>
<li style="margin: 0.5em 0px;"><a href="https://support.bioconductor.org/">Bioconductor Support</a>: This is a Q&A site much like BioStars that replaced the Bioconductor mailing list. You can do things like <a href="https://support.bioconductor.org/?sort=Views&limit=This%20month&answered=all&q=">limit to a certain time period and sort by views</a>, for example, if you only want to log in occasionally to see what’s being talked about.</li>
<li style="margin: 0.5em 0px;"><a href="http://seqanswers.com/forums/forumdisplay.php?f=18">SEQanswers</a>: I subscribe to all new threads in the SEQanswers bioinformatics forum, and regularly browse post titles. When something sparks my interest, I’ll click into that post and subscribe to future updates on that post via email. </li>
<li style="margin: 0.5em 0px;"><a href="https://scholar.google.com/">Google Scholar</a> lets you search and create email alerts.</li>
<li style="margin: 0.5em 0px;"><a href="https://www.ncbi.nlm.nih.gov/guide/howto/receive-search-results/">PubMed Alerts</a>: You can save, automate, and have search results emailed to you through your MyNCBI account. Surprisingly, these seem to be more relevant than the Google Scholar searches for the terms that I use.</li>
<li style="margin: 0.5em 0px;"><a href="https://www.ncbi.nlm.nih.gov/pubmed/trending/">PubMed Trending</a> - I have no idea how PubMed ranks these. It seemed to be more useful in the past, but now it seems that the top “trending” articles alternate between CRISPR/Cas9, and old kinesiology / sports medicine articles.</li>
<li style="margin: 0.5em 0px;"><a href="https://ifttt.com/">IFTTT</a>: <em>If This Then That</em> is a service that connects many different web services together in <a href="https://ifttt.com/discover">an endless number of ways</a>. At home I might connect Facebook and Dropbox, so that whenever someone tags me in a photo, that photo is automatically downloaded to my Dropbox. At work I can connect an RSS feed to an Evernote note or Google Doc. It’s useful is so many ways, both for personal and for work-related tasks. I mostly use it here as a last safeguard so that things I really shouldn’t miss don’t slip through the cracks. I have recipes that do things like email me if certain low-volume Twitter accounts post a new Tweet, others that automatically save to Instapaper things like starred articles in Feedly. I also use this to keep a close eye on a few accounts on GitHub. I have connections set up for a few users on GitHub so that whenever one of these users creates a new public repository, I get an email. I’ve also used IFTTT to archive Tweets coming out of various hashtags — you can create a recipe where <em>if</em> a new Tweet contains certain keywords or hashtags, <em>then</em> save that Tweet to Evernote, a shared Google Doc spreadsheet, etc. <a href="https://zapier.com/">Zapier</a> is a similar service that I’ve heard provides more granular control, but I haven’t tried it.</li>
<li style="margin: 0.5em 0px;"><strong>Podcasts</strong>: I listen to every episode of Roger Peng and Hilary Parker’s <a href="https://overcast.fm/itunes1040614570/not-so-standard-deviations">Not So Standard Deviations</a> data science podcast, and most episodes of Roger Peng and Elizabeth Matsui’s <a href="https://overcast.fm/itunes1133375717/the-effort-report">The Effort Report</a> (this one’s more about life in academia in general). I use the Overcast iOS app to listen to these and other podcasts on ~1.75X speed. (When I met Hilary at the <a href="http://www.gettinggeneticsdone.com/2017/01/rstudio-conference-2017-recap.html">RStudio Conference</a> I heard her speak for the first time at regular 1X speed. Odd experience.) Finally, I just learned about the <a href="https://www.r-podcast.org/">R podcast</a>. I haven’t listened to much yet, but I’ve added it to my long Overcast queue.</li>
</ul>
<h1 id="preprints-" style="border-bottom: 1px solid rgb(221, 221, 221); font-size: 1.6em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Preprints!</h1>
<div style="margin: 1.2em 0px !important;">
Preprints in life sciences were nearly unheard of when I wrote the <a href="http://www.gettinggeneticsdone.com/2012/05/how-to-stay-current-in.html">2012 post</a>. <a href="https://blogs.biomedcentral.com/on-biology/2016/12/14/ahead-of-the-curve-embracing-preprints/">Now</a> <a href="http://www.nature.com/news/big-biology-projects-warm-up-to-preprints-1.21074">everybody’s</a> <a href="http://www.nature.com/news/when-a-preprint-becomes-the-final-paper-1.21333">doing</a> <a href="http://www.nature.com/news/biologists-urged-to-hug-a-preprint-1.19384">it</a>. There are still a few people using the <a href="https://arxiv.org/archive/q-bio"><strong>arXiv</strong> Quantitative biology channel</a>, and I’ll occasionally find something in <a href="https://peerj.com/preprints-search/"><strong>PeerJ</strong> Preprints</a> that grabs my attention. </div>
<div style="margin: 1.2em 0px !important;">
<strong><a href="http://biorxiv.org/alertsrss">bioRxiv</a></strong> is the biggest player here, hands down. The <a href="http://biorxiv.org/alertsrss">Alerts/RSS</a> page lets you sign up for email alerts on particular topics, or subscribe to RSS feeds coming from particular categories that interest you. I subscribe to the Genomics and Bioinformatics feeds. I also follow several of the bioRxiv’s top-level and category Twitter feeds <a href="https://twitter.com/biorxivpreprint">@biorxivpreprint</a>, <a href="https://twitter.com/biorxiv_bioinfo">@biorxiv_bioinfo</a>, and <a href="https://twitter.com/biorxiv_genomic">@biorxiv_genomic</a>).</div>
<div style="margin: 1.2em 0px !important;">
<strong><a href="https://f1000research.com/">F1000 Research</a></strong> deserves some special attention here. It’s somewhere in-between a preprint server and a peer-reviewed publication. You can upload manuscripts (or other research outputs like posters or slides), and they’re immediately and permanently published, and given a DOI. Then one or more rounds of open peer review as well as public comment take place, and authors can update the published paper for further review. Check out the <a href="https://f1000research.com/articles/4-1521/v2">transcript estimates / gene inference paper</a> I mentioned earlier. You’ll see it’s “version 2,” and was approved by two referees. If you look at the right-hand panel, you can actually go back and see the prior to revision, as well as see who reviewed it, what the reviewer wrote, and how the authors responded to those reviews. It’s an innovative platform where peer review is open and transparent, and is <em>independent of publication</em>, since papers are published before they are reviewed, and remain regardless of the outcome of the review. F1000 Research has a number of <strong><a href="https://f1000research.com/channels">channels</a></strong> that are externally curated by different organizations, societies, conferences, etc. I subscribe to and get alerts about the <strong><a href="https://f1000research.com/channels/rpackage">R package</a></strong> and <strong><a href="https://f1000research.com/channels/bioconductor">Bioconductor</a></strong> channels. Whenever a new preprint is dropped into one of these channels, I’ll get an email and an RSS item.</div>
<div style="margin: 1.2em 0px !important;">
I only recently discovered <strong><a href="http://www.prepubmed.org/">PrePubMed</a></strong>, which looks very useful. PrePubMed indexes preprints from arXiv q-bio, PeerJ Preprints, bioRxiv, F1000Research, preprints.org, The Winnower, Nature Precedings, and Wellcome Open Research. In the tools box on the homepage, you can <a href="http://www.prepubmed.org/rss_feed/">enter a search string and get back an RSS feed with results from that search</a>. It looks like PrePubMed is maintained by a single person, but he’s made the entire thing <a href="https://github.com/OmnesRes/prepub">open source</a>, so you could presumably set this up and mirror it on your own, should you check back in 2021 and the link be dead.</div>
<h1 id="journals" style="border-bottom: 1px solid rgb(221, 221, 221); font-size: 1.6em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Journals</h1>
<div style="margin: 1.2em 0px !important;">
I started with Journals in my <a href="http://www.gettinggeneticsdone.com/2012/05/how-to-stay-current-in.html">2012 post</a>, but they’re last (and probably <em>least</em>) here. I still subscribe to a few journals’ RSS feeds, but in most cases, by the time I see a new Table of Contents hit my RSS reader, I probably saw the publications making the rounds on Twitter, blogs, or other channels mentioned above. It’s also no longer unusual to see a “publication” land where I read the preprint on biorXiv <em>months ago</em>, and perhaps even a blog post before that! What “publication” means is changing rapidly, and I’m sure the lines between a <em>blog post</em>, <em>preprint</em>, and <em>journal article</em> will be even blurrier in the year 2022 post. </div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><a href="https://academic.oup.com/bioinformatics">Bioinformatics</a></li>
<li style="margin: 0.5em 0px;"><a href="https://bmcbioinformatics.biomedcentral.com/">BMC Bioinformatics</a></li>
<li style="margin: 0.5em 0px;"><a href="https://academic.oup.com/bib">Briefings in Bioinformatics</a></li>
<li style="margin: 0.5em 0px;"><a href="http://genomebiology.biomedcentral.com/">Genome Biology</a></li>
<li style="margin: 0.5em 0px;"><a href="http://genome.cshlp.org/rss/">Genome Research: current and AOP</a></li>
<li style="margin: 0.5em 0px;"><a href="http://microbiomejournal.biomedcentral.com/">Microbiome</a></li>
<li style="margin: 0.5em 0px;"><a href="http://www.nature.com/ng/newsfeeds.html">Nature Genetics, current & AOP</a></li>
<li style="margin: 0.5em 0px;"><a href="http://www.nature.com/nrg/info/newsfeeds.html">Nature Reviews Genetics, current & AOP</a></li>
<li style="margin: 0.5em 0px;"><a href="https://academic.oup.com/nar">Nucleic Acids Research</a></li>
<li style="margin: 0.5em 0px;"><a href="http://journals.plos.org/ploscompbiol/s/help-using-this-site#loc-article-feeds">PLOS Computational Biology</a></li>
<li style="margin: 0.5em 0px;"><a href="http://journals.plos.org/plosgenetics/s/help-using-this-site#loc-article-feeds">PLOS Genetics</a></li>
</ul>
<h1 id="how-do-you-have-the-time-to-do-this-" style="border-bottom: 1px solid rgb(221, 221, 221); font-size: 1.6em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
How do you have the time to do this?</h1>
<div style="margin: 1.2em 0px !important;">
How do you not? It’s not as bad as it seems. I probably spend an hour each weekday scanning all the resources mentioned here, and I find the time well spent. I can breeze through my Twitter and RSS feeds on my bus ride into work, and saving things I actually want to look at later with a bookmark, star, favorite, Instapaper, etc.</div>
<div style="margin: 1.2em 0px !important;">
I should have prefaced this whole article with the note that I hardly ever <em>actually fully read</em> any of the papers or blog posts I see here. If I see, for example, a new WGS variant caller published, I’ll glance at the figures benchmarking it against GATK and FreeBayes, and skim through the documentation on the GitHub README or BioConductor vignette. If either of these is missing or falls short, that’s usually enough for me to ignore the publication completely <a href="http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005265">(don’t underestimate the importance of good documentation!)</a>.</div>
<div style="margin: 1.2em 0px !important;">
It’s taken me a decade to compile and continually hone this list of resources to the things that I find useful and relevant. This is what works for <em>me</em>, <em>now</em>, in 2017. It’s not a one-size-fits-all, and the 2018-me will probably have a somewhat different list, but I hope you’ll find it useful. If your interests are similar to what I’ve discussed here, how do you stay current? What have I left out? Let me know in the comments!</div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PGRpdiBjbGFzcz0ibWFya2Rvd24taGVyZS13cmFwcGVyIiBkYXRhLW1kLXVybD0iaHR0cHM6Ly93
d3cuYmxvZ2dlci5jb20vYmxvZ2dlci5nP2Jsb2dJRD02MjMyODE5NDg2MjYxNjk2MDM1I2VkaXRv
ci90YXJnZXQ9cG9zdDtwb3N0SUQ9MzIzODIzNzY5MzkxNDg4Mzk5OTtvblB1Ymxpc2hlZE1lbnU9
YWxscG9zdHM7b25DbG9zZWRNZW51PWFsbHBvc3RzO3Bvc3ROdW09MDtzcmM9bGluayIgc3R5bGU9
IiIgbWFya2Rvd24taGVyZS13cmFwcGVyLWNvbnRlbnQtbW9kaWZpZWQ9InRydWUiPjxwPkEgd2hp
bGUgYmFjayBJIHdyb3RlIFt0aGlzIHBvc3RdKGh0dHA6Ly93d3cuZ2V0dGluZ2dlbmV0aWNzZG9u
ZS5jb20vMjAxMi8wNS9ob3ctdG8tc3RheS1jdXJyZW50LWluLmh0bWwpIGFib3V0IGhvdyBJIHN0
YXkgY3VycmVudCBpbiBiaW9pbmZvcm1hdGljcyAmYW1wOyBnZW5vbWljcy4gVGhhdCB3YXMgX25l
YXJseSBmaXZlIHllYXJzIGFnb18uIEEgbG90IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZW4uIEEgZmV3
IGxpbmtzIGFyZSBkZWFkLiBTb21lIG9mIHRoZSBibG9ncyBvciBUd2l0dGVyIGFjY291bnRzIEkg
bWVudGlvbmVkIGhhdmUgc2hpZnRlZCBmb2N1cyBvciBoYXZlbid0IGJlZW4gdXBkYXRlZCBpbiB5
ZWFycyAoZ3VpbHR5IGFzIGNoYXJnZWQpLiBUaGUgd2F5IHdlIGNvbnN1bWUgbWVkaWEgaGFzIGV2
b2x2ZWQgLS0gR29vZ2xlIHRob3VnaHQgdGhleSBjb3VsZCBraWxsIG9mZiBSU1MgKFtsb25nIGxp
dmUgUlNTIV0oaHR0cDovL2ZlZWRseS5jb20pKSwgdGhlcmUgYXJlIG1hbnkgbmV3IGxpdGVyYXR1
cmUgYWxlcnQgc2VydmljZXMsIHByZXByaW50cyBoYXZlIHJlYWxseSB0YWtlbiBvZmYgaW4gdGhp
cyBmaWVsZCwgYW5kIG1hbnkgbW9yZSBzY2llbnRpc3RzIGFyZSBlbmdhZ2luZyB2aWEgc29jaWFs
IG1lZGlhIHRoYW4gYmVmb3JlLjwvcD48cD48YnI+PC9wPjxwPlBlb3BsZSBzdGlsbCBmcmVxdWVu
dGx5IGFzayBtZSBob3cgSSBzdGF5IGN1cnJlbnQgYW5kIGtlZXAgYSBmaW5nZXIgb24gdGhlIHB1
bHNlIG9mIHRoZSBmaWVsZC4gSSdtIG5vdCBjbGFpbWluZyB0byBiZSBhYmxlIHRvIGRvIHRoaXMg
d2VsbCAtLSB0aGF0J3MgYSBuZWFyLWltcG9zc2libGUgdGFzayBmb3IgYW55b25lLiBGaXZlIHll
YXJzIGxhdGVyIGFuZCBJIHN0aWxsIHJ1biBvdXIgYmlvaW5mb3JtYXRpY3MgY29yZSwgYW5kIEkn
bSBzdGlsbCBtb3N0bHkgZm9jdXNlZCBvbiBfYXBwbGllZF8gbWV0aG9kb2xvZ3kgYW5kIHN0dWR5
IGRlc2lnbiByYXRoZXIgdGhhbiBhbnkgcGFydGljdWxhciBwaGVub3R5cGUsIG1vZGVsIHN5c3Rl
bSwgZGlzZWFzZSwgb3Igc3BlY2lmaWMgbWV0aG9kLiBJdCBoZWxwcyBtZSB0byBrbm93IHRoYXQg
W3RyYW5zY3JpcHQtbGV2ZWwgZXN0aW1hdGVzIGltcHJvdmUgZ2VuZS1sZXZlbCBpbmZlcmVuY2Vz
IGZyb20gUk5BLXNlcSBkYXRhXShodHRwczovL2YxMDAwcmVzZWFyY2guY29tL2FydGljbGVzLzQt
MTUyMS92MiksIGFuZCB0aGF0IHRoZXJlJ3MgW3NvZnR3YXJlIHRvIGhlbHAgbWUgZG8gdGhpc10o
aHR0cHM6Ly9iaW9jb25kdWN0b3Iub3JnL3BhY2thZ2VzL3JlbGVhc2UvYmlvYy9odG1sL3R4aW1w
b3J0Lmh0bWwpLCBidXQgdGhlIGRldGFpbHMgdW5kZXJseWluZyBrbWVyIHNocmVkZGluZyB2cyBw
c2V1ZG9hbGlnbm1lbnQgdG8gYSB0cmFuc2NyaXB0b21lIGRlIEJydWlqbiBncmFwaCBhcmVuJ3Qg
YXMgaW1wb3J0YW50IHRvIG1lIGFzIGtub3dpbmcgdGhhdCB0aGVyZSdzIGEgc29mdHdhcmUgaW1w
bGVtZW50YXRpb24gdGhhdCdzIHdlbGwgZG9jdW1lbnRlZCwgYWN0aXZlbHkgc3VwcG9ydGVkLCBh
bmQgcGVyZm9ybXMgd2VsbCBpbiBmYWlyIGJlbmNobWFya3MuIEFzIHN1Y2gsIG1vc3Qgb2Ygd2hh
dCBJIHBheSBhdHRlbnRpb24gdG8gaXMgYXBwbGllZC9tZXRob2RzLWZvY3VzZWQuPC9wPjxwPjxi
cj48L3A+PHA+KipXaGF0IGZvbGxvd3MgaXMgYSBzY2F0dGVyc2hvdCwgbm9uY29tcHJlbnNpdmUg
Z3VpZGUgdG8gdGhlIHBlb3BsZSwgYmxvZ3MsIG5ld3Mgb3V0bGV0cywgam91cm5hbHMsIGFuZCBh
Z2dyZWdhdG9ycyB0aGF0IEkgbGVhbiBvbiBpbiBhbiBhdHRlbXB0IHRvIHN0YXkgb24gdG9wIG9m
IHRoaW5ncy4qKiBJJ3ZlIGluZXZpdGFibHkgb21pdHRlZCBzb21lIGtleSByZXNvdXJjZXMsIHNv
ICoqcGxlYXNlIGRvbid0IGJlIG9mZmVuZGVkKiogaWYgeW91IGRvbid0IHNlZSB5b3VyIG5hbWUv
YmxvZy9Ud2l0dGVyL19ldGMuXyBsaXN0ZWQgaGVyZSAoZHJvcCBhIGxpbmsgaW4gdGhlIGNvbW1l
bnRzISkuIFdoYXRldmVyIEkgd3JpdGUgaGVyZSBub3cgd2lsbCBiZSBvdXQgb2YgZGF0ZSBpbiBu
byB0aW1lLCBzbyBJJ2xsIHRyeSB0byB3cml0ZSBhbiB1cGRhdGUgcG9zdCBldmVyeSB5ZWFyIGlu
c3RlYWQgb2YgZXZlcnkgZml2ZS48L3A+PHA+PGJyPjwvcD48cD4jIFR3aXR0ZXI8L3A+PHA+PGJy
PjwvcD48cD5JbiB0aGUgWzIwMTIgcG9zdF0oaHR0cDovL3d3dy5nZXR0aW5nZ2VuZXRpY3Nkb25l
LmNvbS8yMDEyLzA1L2hvdy10by1zdGF5LWN1cnJlbnQtaW4uaHRtbCkgSSBlbmRlZCB3aXRoIFR3
aXR0ZXIsIGJ1dCBJIGhhdmUgdG8gbGVhZCB3aXRoIGl0IHRoaXMgdGltZS4gVHdpdHRlciBpcyBw
cm9iYWJseSBteSBtb3N0IHZhbHVhYmxlIHJlc291cmNlIGZvciBsZWFybmluZyBhYm91dCB0aGUg
YmxlZWRpbmctZWRnZSBkZXZlbG9wbWVudHMgaW4gZ2Vub21pY3MgJmFtcDsgYmlvaW5mb3JtYXRp
Y3MuIEl0J3MgZ3JlYXQgZm9yIGxlYXJuaW5nIHdoYXQncyBuZXcgYW5kIGNvbnRyaWJ1dGluZyB0
byB0aGUgZGlhbG9ndWUgaW4geW91ciBmaWVsZCwgYnV0IG9ubHkgd2hlbiB1c2VkIGVmZmVjdGl2
ZWx5LiZuYnNwOzwvcD48cD48YnI+PC9wPjxwPkkgYWdncmVzc2l2ZWx5IHBydW5lIHRoZSBsaXN0
IG9mIHBlb3BsZSBJIGZvbGxvdyB0byBrZWVwIHdoYXQgSSBzZWUgcmVsZXZhbnQgYW5kIGVuZ2Fn
aW5nLiBJIGNhbiB0b2xlcmF0ZSBhbiBvY2Nhc2lvbmFsIGRpZ3Jlc3Npb24gaW50byBwb2xpdGlj
cywgcG9zdGluZyBwaWN0dXJlcyBvZiB5b3UgZHJpbmtpbmcgd2l0aCBjb2xsZWFndWVzIGF0IGEg
Y29uZmVyZW5jZSwgb3Igc2VsZi1jb25ncmF0dWxhdG9yeSBhbm5vdW5jZW1lbnRzLiBCdXQgb25j
ZSB0aGVzZSBvZmYtdG9waWMgVHdlZXRzIGJlY29tZSB0aGUgbm9ybSwgSSB1bmZvbGxvdy4gSSBh
bHNvIHJlbHkgb24gdGhlIGJ1aWx0LWluIFtsaXN0IGZlYXR1cmVdKGh0dHBzOi8vc3VwcG9ydC50
d2l0dGVyLmNvbS9hcnRpY2xlcy83NjQ2MCkuIEkgZm9sbG93IGEgZmV3IGh1bmRyZWQgcGVvcGxl
LCBidXQgSSBvbmx5IGFkZCBhIHNlbGVjdCBmZXcgZG96ZW4gdG8gYSAibm90anVuayIgbGlzdCB0
aGF0IEkgbG9vayBhdCB3aGVuIEknbSBzaG9ydCBvbiB0aW1lLiBGb2xrcyBpbiB0aGlzIGxpc3Qg
ZG9uJ3QgVHdlZXQgdG9vIG9mdGVuIGFuZCBoYXZlIGEgaGlnaCBzaWduYWwtdG8tbm9pc2UgcmF0
aW8gKGFzIGZhciBhcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHJlYWRpbmcpLiBJZiBJIGRvbid0
IGdldCBhIGNoYW5jZSB0byBjYXRjaCB1cCBvbiBteSBlbnRpcmUgdGltZWxpbmUsIEkgY2FuIGF0
IGxlYXN0IGJyZWV6ZSB0aHJvdWdoIHJlY2VudCBUd2VldHMgZnJvbSBmb2xrcyBvbiB0aGlzIGxp
c3QuJm5ic3A7PC9wPjxwPjxicj48L3A+PHA+SSdtIGFsc28gd2FyeSBvZiBmb2xsb3dpbmcgZXh0
cmVtZWx5IHByb2xpZmljIHVzZXJzLiBGb3IgZXhhbXBsZSAtLSBpZiBzb21lb25lJ3MgYmVlbiBv
biBUd2l0dGVyIGxlc3MgdGhhbiBhIHllYXIsIGFscmVhZHkgaGFzIDIwLDAwMCBUd2VldHMsIGJ1
dCBvbmx5IDEwMCBmb2xsb3dlcnMsIGl0IHRlbGxzIG1lIHRoZXkndmUgZ290IGEgbG90IHRvIHNh
eSBidXQgbm9ib2R5IGNhcmVzLiBJIGxldCB0aGUgaGl2ZSBtaW5kIHdvcmsgZm9yIG1lIGluIHRo
aXMgY2FzZSwgdXNpbmcgdGhpcyBUd2VldC10by1mb2xsb3dlciByYXRpbyBhcyBzb3J0IG9mIGEg
cHJveHkgZm9yIHNpZ25hbC10by1ub2lzZS48L3A+PHA+PGJyPjwvcD48cD5JIG1vc3RseSBmb2xs
b3cgaW5kaXZpZHVhbHMgYW5kIGFnZ3JlZ2F0b3JzLCBidXQgSSBhbHNvIGZvbGxvdyBhIGZldyBv
cmdhbml6YXRpb24gYWNjb3VudHMuIFRoZXNlIGNhbiBiZSBhIG1peGVkIGJhZy4gT25seSBhIGZl
dyBvcmdhbml6YXRpb24gYWNjb3VudHMgZG8gdGhpcyB3ZWxsLCBkZWxpdmVyaW5nIGludGVyZXN0
aW5nIGFuZCBhcHBsaWNhYmxlIGNvbnRlbnQgdG8gYSB0YXJnZXRlZCBhdWRpZW5jZSwgd2hpbGUg
bWFueSBtb3JlIGFyZSBwb29yIGF0dGVtcHRzIGF0IG1hcmtldGluZyBhbmQgc2VsZi1wcm9tb3Rp
b24gd2hpbGUgbm90IG9mZmVyaW5nIGFueSBzdWJzdGFudGl2ZSB2YWx1ZSBvciBpbnRlcmVzdGlu
ZyBjb250ZW50LiZuYnNwOzwvcD48cD48YnI+PC9wPjxwPioqSW5kaXZpZHVhbHM6KiogSW4gbm8g
cGFydGljdWxhciBvcmRlciwgaGVyZSdzIGFuIGluY29tcGxldGUgbGlzdCBvZiBwZW9wbGUgd2hv
IFR3ZWV0IGNvbnRlbnQgdGhhdCBJIGZpbmQgY29uc2lzdGVudGx5IG9uLXRvcGljIGFuZCBpbnRl
cmVzdGluZy48L3A+PHA+PGJyPjwvcD48cD4tIEFhcm9uIFF1aW5sYW4gKFthYXJvbnF1aW5sYW5d
KGh0dHBzOi8vdHdpdHRlci5jb20vYWFyb25xdWlubGFuKSk8L3A+PHA+LSBBZGFtIFBoaWxsaXBw
eSAoW2FwaGlsbGlwcHldKGh0dHBzOi8vdHdpdHRlci5jb20vYXBoaWxsaXBweSkpPC9wPjxwPi0g
QW5kcmV3IFNldmVyaW4gKFtpc3VnaWZdKGh0dHBzOi8vdHdpdHRlci5jb20vaXN1Z2lmKSk8L3A+
PHA+LSBDYXNleSBHcmVlbmUgKFtHcmVlbmVTY2llbnRpc3RdKGh0dHBzOi8vdHdpdHRlci5jb20v
R3JlZW5lU2NpZW50aXN0KSk8L3A+PHA+LSBDbGl2ZSBCcm93biAoW0NsaXZlX0dfQnJvd25dKGh0
dHBzOi8vdHdpdHRlci5jb20vQ2xpdmVfR19Ccm93bikpPC9wPjxwPi0gRGFuIE1hY0FydGh1ciAo
W2RnbWFjYXJ0aHVyXShodHRwczovL3R3aXR0ZXIuY29tL2RnbWFjYXJ0aHVyKSk8L3A+PHA+LSBE
YXZpZCBSb2JpbnNvbiAoW2Ryb2JdKGh0dHBzOi8vdHdpdHRlci5jb20vZHJvYikpPC9wPjxwPi0g
RWxpc2FiZXRoIEJpayAoW01pY3JvYmlvbURpZ2VzdF0oaHR0cHM6Ly90d2l0dGVyLmNvbS9NaWNy
b2Jpb21EaWdlc3QpKTwvcD48cD4tIEZyYW5rIEhhcnJlbGwgKFtmMmhhcnJlbGxdKGh0dHBzOi8v
dHdpdHRlci5jb20vZjJoYXJyZWxsKSk8L3A+PHA+LSBIYWRsZXkgV2lja2hhbSAoW2hhZGxleXdp
Y2toYW1dKGh0dHBzOi8vdHdpdHRlci5jb20vaGFkbGV5d2lja2hhbSkpPC9wPjxwPi0gSGVuZyBM
aSAoW2xoM2xoM10oaHR0cHM6Ly90d2l0dGVyLmNvbS9saDNsaDMpKTwvcD48cD4tIEphbWVzIEhh
ZGZpZWxkIChbY29yZWdlbm9taWNzXShodHRwczovL3R3aXR0ZXIuY29tL2NvcmVnZW5vbWljcykp
PC9wPjxwPi0gSmFyZWQgU2ltcHNvbiAoW2phcmVkdHNpbXBzb25dKGh0dHBzOi8vdHdpdHRlci5j
b20vamFyZWR0c2ltcHNvbikpPC9wPjxwPi0gSmVmZiBMZWVrIChbanRsZWVrXShodHRwczovL3R3
aXR0ZXIuY29tL2p0bGVlaykpPC9wPjxwPi0gSmVubnkgQnJ5YW4gKFtKZW5ueUJyeWFuXShodHRw
czovL3R3aXR0ZXIuY29tL0plbm55QnJ5YW4pKTwvcD48cD4tIEp1bGlhIFNpbGdlIChbanVsaWFz
aWxnZV0oaHR0cHM6Ly90d2l0dGVyLmNvbS9qdWxpYXNpbGdlKSk8L3A+PHA+LSBLcmlzdGEgVGVy
bnVzIChbS3Jpc3RhVGVybnVzXShodHRwczovL3R3aXR0ZXIuY29tL0tyaXN0YVRlcm51cykpPC9w
PjxwPi0gTGV4IE5lZGVyYnJhZ3QgKFtsZXhuZWRlcmJyYWd0XShodHRwczovL3R3aXR0ZXIuY29t
L2xleG5lZGVyYnJhZ3QpKTwvcD48cD4tIExpb3IgUGFjaHRlciAoW2xwYWNodGVyXShodHRwczov
L3R3aXR0ZXIuY29tL2xwYWNodGVyKSk8L3A+PHA+LSBNaWNrIFdhdHNvbiAoW2Jpb21pY2t3YXRz
b25dKGh0dHBzOi8vdHdpdHRlci5jb20vYmlvbWlja3dhdHNvbikpPC9wPjxwPi0gTWlrZSBMb3Zl
IChbbWlrZWxvdmVdKGh0dHBzOi8vdHdpdHRlci5jb20vbWlrZWxvdmUpKTwvcD48cD4tIE5pY2sg
TG9tYW4gKFtwYXRob2dlbm9tZW5pY2tdKGh0dHBzOi8vdHdpdHRlci5jb20vcGF0aG9nZW5vbWVu
aWNrKSk8L3A+PHA+LSBOaWNvbGFzIFJvYmluZSAoW25vdFNvSnVua0ROQV0oaHR0cHM6Ly90d2l0
dGVyLmNvbS9ub3RTb0p1bmtETkEpKTwvcD48cD4tIFBoaWwgQXNodG9uIChbZmxhc2h0b24yMDAz
XShodHRwczovL3R3aXR0ZXIuY29tL2ZsYXNodG9uMjAwMykpPC9wPjxwPi0gUk5BLXNlcSBCbG9n
IChbcm5hc2VxYmxvZ10oaHR0cHM6Ly90d2l0dGVyLmNvbS9ybmFzZXFibG9nKSk8L3A+PHA+LSBS
b2IgUGF0cm8gKFtub21hZDQyMV0oaHR0cHM6Ly90d2l0dGVyLmNvbS9ub21hZDQyMSkpPC9wPjxw
Pi0gUm9nZXIgUGVuZyAoW3JkcGVuZ10oaHR0cHM6Ly90d2l0dGVyLmNvbS9yZHBlbmcpKTwvcD48
cD4tIFNhbSBNaW5vdCAoW3NtaW5vdF0oaHR0cHM6Ly90d2l0dGVyLmNvbS9zbWlub3QpKTwvcD48
cD4tIFNlYW4gRGF2aXMgKFtzZWFuZGF2aXMxMl0oaHR0cHM6Ly90d2l0dGVyLmNvbS9zZWFuZGF2
aXMxMikpPC9wPjxwPi0gVGl0dXMgQnJvd24gKFtjdGl0dXNicm93bl0oaHR0cHM6Ly90d2l0dGVy
LmNvbS9jdGl0dXNicm93bikpPC9wPjxwPi0gVG9yc3RlbiBTZWVtYW5uIChbdG9yc3RlbnNlZW1h
bm5dKGh0dHBzOi8vdHdpdHRlci5jb20vdG9yc3RlbnNlZW1hbm4pKTwvcD48cD4tIFR1dWxpIExh
cHBhbGFpbmVuIChbdHV1bGllbF0oaHR0cHM6Ly90d2l0dGVyLmNvbS90dXVsaWVsKSk8L3A+PHA+
LSBWaW5jZSBCdWZmYWxvIChbdnNidWZmYWxvXShodHRwczovL3R3aXR0ZXIuY29tL3ZzYnVmZmFs
bykpPC9wPjxwPi0gV2lsbGVtIHZhbiBTY2hhaWsgKFtXdlNjaGFpa10oaHR0cHM6Ly90d2l0dGVy
LmNvbS9XdlNjaGFpaykpPC9wPjxwPi0gWmFtaW4gSXFiYWwgKFtaYW1pbklxYmFsXShodHRwczov
L3R3aXR0ZXIuY29tL1phbWluSXFiYWwpKTwvcD48cD4tIFtNYW55IG1vcmUgSSdtIGZhaWxpbmcg
dG8gc3BlY2lmaWNhbGx5IG1lbnRpb24uLi5dKGh0dHBzOi8vdHdpdHRlci5jb20vZ2VuZXRpY3Nf
YmxvZy9mb2xsb3dpbmcpPC9wPjxwPjxicj48L3A+PHA+KipPdGhlcnM6KiogQmVzaWRlcyBpbmRp
dmlkdWFsIGFjY291bnRzLCB0aGVyZSBhcmUgYWxzbyBhIG51bWJlciBvZiBhZ2dyZWdhdG9ycyBh
bmQgb3JnYW5pemF0aW9ucyB0aGF0IEkga2VlcCBvbiBhIGhpZ2ggc2lnbmFsLXRvLW5vaXNlIFts
aXN0XShodHRwczovL3N1cHBvcnQudHdpdHRlci5jb20vYXJ0aWNsZXMvNzY0NjApLiZuYnNwOzwv
cD48cD48YnI+PC9wPjxwPi0gYmlvUnhpdiAoW2Jpb3J4aXZwcmVwcmludF0oaHR0cHM6Ly90d2l0
dGVyLmNvbS9iaW9yeGl2cHJlcHJpbnQpKTwvcD48cD4tIGJpb1J4aXYgQmlvaW5mbyAoW2Jpb3J4
aXZfYmlvaW5mb10oaHR0cHM6Ly90d2l0dGVyLmNvbS9iaW9yeGl2X2Jpb2luZm8pKTwvcD48cD4t
IGJpb1J4aXYgR2Vub21pY3MgKFtiaW9yeGl2X2dlbm9taWNdKGh0dHBzOi8vdHdpdHRlci5jb20v
Ymlvcnhpdl9nZW5vbWljKSk8L3A+PHA+LSBNZXRhZ2Vub21pY3MgUGFwZXJzIChbbWV0YWdlbm9t
aWNfbGl0XShodHRwczovL3R3aXR0ZXIuY29tL21ldGFnZW5vbWljX2xpdCkpPC9wPjxwPi0gSW5m
b3JtYXRpY3NHVyAoW1VkdWFrR1ddKGh0dHBzOi8vdHdpdHRlci5jb20vVWR1YWtHVykpPC9wPjxw
Pi0gSGFja2VyIE5ld3MgMzAwIChbbmV3c3ljMzAwXShodHRwczovL3R3aXR0ZXIuY29tL25ld3N5
YzMwMCkpPC9wPjxwPi0gQ29tcEJpb2xQYXBlcnMgKFtjb21wYmlvbHBhcGVyc10oaHR0cHM6Ly90
d2l0dGVyLmNvbS9jb21wYmlvbHBhcGVycykpPC9wPjxwPi0gUk5BLXNlcSBwYXBlciBhZ2dyZWdh
dG9yIChbUk5BX3NlcV0oaHR0cHM6Ly90d2l0dGVyLmNvbS9STkFfc2VxKSk8L3A+PHA+LSBCaW9j
b25kdWN0b3IgKFtCaW9jb25kdWN0b3JdKGh0dHBzOi8vdHdpdHRlci5jb20vQmlvY29uZHVjdG9y
KSk8L3A+PHA+LSBSU3R1ZGlvIFRpcHMgKFtyc3R1ZGlvdGlwc10oaHR0cHM6Ly90d2l0dGVyLmNv
bS9yc3R1ZGlvdGlwcykpPC9wPjxwPjxicj48L3A+PHA+IyBCbG9nczwvcD48cD48YnI+PC9wPjxw
PkkgZm9sbG93IHRoZXNlIGFuZCBvdGhlciBibG9ncyB1c2luZyBSU1MuIEkndmUgYmVlbiBoYXBw
eSB3aXRoIHRoZSBmcmVlIHZlcnNpb24gb2YgW0ZlZWRseV0oaHR0cDovL2ZlZWRseS5jb20vKSBl
dmVyIHNpbmNlIEdvb2dsZSBSZWFkZXIgd2FzIGtpbGxlZC4gVGhlIHdlYiBpbnRlcmZhY2UgYW5k
IGlPUyBhcHAgaGF2ZSBldmVyeXRoaW5nIEkgbmVlZCwgYW5kIHRoZXkgYm90aCBpbnRlZ3JhdGUg
bmljZWx5IHdpdGggb3RoZXIgc2VydmljZXMgbGlrZSBFdmVybm90ZSwgSW5zdGFwYXBlciwgQnVm
ZmVyLCBUd2l0dGVyLCBldGMuIElmIHlvdSBjYW4ndCBmaW5kIGEgZGlyZWN0IGxpbmsgdG8gdGhl
IGJsb2cncyBSU1MgZmVlZCwgeW91IGNhbiB1c3VhbGx5IHR5cGUgdGhlIG5hbWUgb2YgdGhlIGJs
b2cgaW50byBGZWVkbHkncyBzZWFyY2ggYmFyIGFuZCBpdCdsbCBmaW5kIGl0IGZvciB5b3UuIFNp
bWlsYXIgdG8gbXkgIm5vdGp1bmsiIGxpc3QgaW4gVHdpdHRlciwgSSBoYXZlIGEgRmF2b3JpdGVz
IGNhdGVnb3J5IGluIEZlZWRseSB3aGVyZSBJIGluY2x1ZGUgb25seSB0aGUgZmVlZHMgSSBhYnNv
bHV0ZWx5IHdvdWxkbid0IHdhbnQgdG8gbWlzcy48L3A+PHA+PGJyPjwvcD48cD5UaGVzZSBhcmUg
c29tZSBvZiB0aGUgZmV3IHRoYXQgSSB0cnkgdG8gcmVhZCB3aGVuZXZlciBzb21ldGhpbmcgbmV3
IGlzIHBvc3RlZCwgYW5kIEZlZWRseSBoZWxwcyBtZSBrZWVwIHRob3NlIG9yZ2FuaXplZCwgZWl0
aGVyIGJ5ICJzdGFycmluZyIgc29tZXRoaW5nIEkgd2FudCB0byBjb21lIGJhY2sgdG8sIG9yIHNh
dmluZyBpdCBmb3IgbGF0ZXIgd2l0aCBbSW5zdGFwYXBlcl0oaHR0cHM6Ly93d3cuaW5zdGFwYXBl
ci5jb20vKS4gVGhleSdyZSBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyLCBhbmQgSSdtIHN1cmUgSSd2
ZSBmb3Jnb3R0ZW4gc29tZXRoaW5nLjwvcD48cD48YnI+PC9wPjxwPi0gW1ZhcmlhbmNlIEV4cGxh
aW5lZF0oaHR0cDovL3ZhcmlhbmNlZXhwbGFpbmVkLm9yZy8pOiBEYXZpZCBSb2JpbnNvbidzIGJs
b2cgKERhdGEgU2NpZW50aXN0IGF0IFN0YWNrIE92ZXJmbG93LCB3b3JrcyBpbiBSIGFuZCBQeXRo
b24pLjwvcD48cD4tIFtHbG9iYWwgQmlvZGVmZW5zZV0oaHR0cHM6Ly9nbG9iYWxiaW9kZWZlbnNl
LmNvbS8pOiBOZXdzIG9uIHBhdGhvZ2Vucywgb3V0YnJlYWtzLCBhbmQgcHJlcGFyZWRuZXNzLCB3
aXRoIHBlcmlvZGljIHBvc3RzIG9uIGdlbm9taWNzIGFuZCBiaW9pbmZvcm1hdGljcy1yZWxhdGVk
IGRldmVsb3BtZW50cyBhbmQgZnVuZGluZyBvcHBvcnR1bml0aWVzLjwvcD48cD4tIFtJbiBiZXR3
ZWVuIGxpbmVzIG9mIGNvZGVdKGh0dHBzOi8vZmx4bGV4YmxvZy53b3JkcHJlc3MuY29tLyk6IExl
eCBOZWRlcmJyYWd0J3MgYmxvZyBvbiBiaW9sb2d5LCBzZXF1ZW5jaW5nLCBiaW9pbmZvcm1hdGlj
cywgLi4uPC9wPjxwPi0gW1NpbXBseSBTdGF0aXN0aWNzXShodHRwOi8vc2ltcGx5c3RhdGlzdGlj
cy5vcmcvKTogQSBzdGF0aXN0aWNzIGJsb2cgYnkgUmFmYSBJcml6YXJyeSwgUm9nZXIgUGVuZywg
YW5kIEplZmYgTGVlay48L3A+PHA+LSBbQml0cyBvZiBETkFdKGh0dHBzOi8vbGlvcnBhY2h0ZXIu
d29yZHByZXNzLmNvbS8pOiBSZXZpZXdzIGFuZCBjb21tZW50YXJ5IG9uIGNvbXB1dGF0aW9uYWwg
YmlvbG9neSBieSBMaW9yIFBhY2h0ZXIgKGZhaXIgd2FybmluZzogZGlhbG9ndWUgaGVyZSBjYW4g
Z2V0IGEgYml0IGhlYXRlZCEpLjwvcD48cD4tIFtCbHVlIENvbGxhciBCaW9pbmZvcm1hdGljc10o
aHR0cDovL2JjYi5pby9hcnRpY2xlcy8pOiBhcnRpY2xlcyByZWxhdGVkIHRvb2wgdmFsaWRhdGlv
biBhbmQgdGhlIG9wZW4gc291cmNlIGJpb2luZm9ybWF0aWNzIGNvbW11bml0eS48L3A+PHA+LSBb
TWljcm9iaW9tZSBEaWdlc3QgLSBCaWsncyBQaWNrc10oaHR0cHM6Ly9taWNyb2Jpb21lZGlnZXN0
LmNvbS8pOiBBIGRhaWx5IGRpZ2VzdCBvZiBzY2llbnRpZmljIG1pY3JvYmlvbWUgcGFwZXJzLCBi
eSBFbGlzYWJldGggQmlrLCBTY2llbmNlIEVkaXRvciBhdCB1QmlvbWUuPC9wPjxwPi0gW0xpdmlu
ZyBpbiBhbiBJdm9yeSBCYXNlbWVudF0oaHR0cDovL2l2b3J5LmlkeWxsLm9yZy9ibG9nLyk6IFRp
dHVzIEJyb3duJ3MgYmxvZyBvbiBtZXRhZ2Vub21pY3MsIG9wZW4gc2NpZW5jZSwgdGVzdGluZywg
cmVwcm9kdWNpYmlsaXR5LCBhbmQgcHJvZ3JhbW1pbmcuPC9wPjxwPi0gW0Vuc2VxbG9wZWRpYV0o
aHR0cDovL2Vuc2VxbG9wZWRpYS5jb20vKTogSmFtZXMgSGFkZmllbGQncyBibG9nIG9uIGFsbCB0
aGluZ3MgTkdTLjwvcD48cD4tIFtFcGlzdGFzaXMgQmxvZ10oaHR0cDovL3d3dy5lcGlzdGFzaXNi
bG9nLm9yZy8pOiBKYXNvbiBNb29yZSdzIGNvbXB1dGF0aW9uYWwgYmlvbG9neSBibG9nLjwvcD48
cD4tIFtSU3R1ZGlvIEJsb2ddKGh0dHBzOi8vYmxvZy5yc3R1ZGlvLm9yZy8pOiBhbm5vdW5jZW1l
bnRzIGFib3V0IG5ldyBSU3R1ZGlvIGZ1bmN0aW9uYWxpdHksIHVwZGF0ZXMgYWJvdXQgdGhlIFt0
aWR5dmVyc2VdKGh0dHA6Ly90aWR5dmVyc2Uub3JnLyksIGFuZCBtb3JlLiZuYnNwOzwvcD48cD4t
IFtuZXh0Z2Vuc2Vlay5jb21dKGh0dHA6Ly9uZXh0Z2Vuc2Vlay5jb20vKTogTmV4dC1HZW4gU2Vx
dWVuY2luZyBCbG9nIGNvdmVyaW5nIG5ldyBkZXZlbG9wbWVudHMgaW4gTkdTIGRhdGEgJmFtcDsg
YW5hbHlzaXMuPC9wPjxwPi0gW1JOQS1TZXEgQmxvZ10oaHR0cDovL3d3dy5ybmEtc2VxYmxvZy5j
b20vKTogVHJhbnNjcmlwdG9tZSBSZXNlYXJjaCAmYW1wOyBJbmR1c3RyeSBOZXdzLjwvcD48cD4t
IFtUaGUgQWxsaXVtXShodHRwOi8vd3d3LnRoZWFsbGl1bS5jb20vKTogV2UgYWxsIG5lZWQgYSBs
aXR0bGUgaHVtb3IgaW4gb3VyIGxpdmVzLiBMaWtlIF9UaGUgT25pb25fLCBidXQgZm9yIHNjaWVu
Y2UuPC9wPjxwPjxicj48L3A+PHA+IyBPdGhlcnM8L3A+PHA+PGJyPjwvcD48cD5JJ20gdW5zdXJl
IGhvdyB0byBjYXRlZ29yaXplIHRoZSByZXN0LiBUaGVzZSBhcmUgdGhpbmdzIGxpa2UgYWdncmVn
YXRvcnMsIFEmYW1wO0Egc2l0ZXMvZm9ydW1zLCBhbmQgb3RoZXJzLjwvcD48cD48YnI+PC9wPjxw
Pi0gW051enplbF0oaHR0cDovL251enplbC5jb20vYWJvdXQpIGlzIHNvbWV0aGluZyBJJ3ZlIG9u
bHkgYmVlbiB1c2luZyBmb3IgYSBmZXcgbW9udGhzIGJ1dCBpdCB3b3JrcyB2ZXJ5IHdlbGwuIEl0
J3MgbWVhbnQgdG8gc29sdmUgdGhlIFR3aXR0ZXIgLyBzb2NpYWwgbWVkaWEgb3ZlcmxvYWQgcHJv
YmxlbS4gSWYgeW91J3JlIGZvbGxvd2luZyBhIGZldyBodW5kcmVkIHBlb3BsZSwgeW91IGNvdWxk
IGVhc2lseSBoYXZlIHRob3VzYW5kcyBvZiBUd2VldHMgcGVyIGRheSB0byByZWFkIHRocm91Z2gg
KG9yIG1pc3MpLiBOdXp6ZWwgZW1haWxzIHlvdSBhIGRhaWx5IG5ld3NsZXR0ZXIgb2YgdGhlIG1v
c3QgcmVsZXZhbnQgY29udGVudCBpbiB5b3VyIFR3aXR0ZXIgZmVlZC4gSSdtIGd1ZXNzaW5nIGl0
IGRvZXMgdGhpcyBieSBhbmFseXppbmcgaG93IG1hbnkgcGVvcGxlIHlvdSBmb2xsb3cgc2hhcmUs
IHJldHdlZXQsIG9yIGZhdm9yaXRlIHRoZSBzYW1lIGxpbmtzLiBJIHRyeSB0byByZWFkIGV2ZXJ5
dGhpbmcgaW4gbXkgUlNTIGZlZWRzIGJ1dCBJIGNvdWxkIG5ldmVyIGRvIHRoaXMgd2l0aCBUd2l0
dGVyIChub3Igc2hvdWxkIHlvdSB3b3JyeSBhYm91dCB0cnlpbmcpLiBOdXp6ZWwgaGVscHMgeW91
IGNhdGNoIHVwIG9uIHRoaW5ncyB0aGF0IGFyZSB0cmVuZGluZyBhbW9uZyB0aGUgcGVvcGxlIHlv
dSBmb2xsb3cuIEl0J3Mgbm90IGEgc3Vic3RpdHV0ZSBmb3IgZm9sbG93aW5nIHRoZSByaWdodCBw
ZW9wbGUgKHNlZSB0aGUgVHdpdHRlciBzZWN0aW9uIGFib3ZlKS48L3A+PHA+LSBbUldlZWtseV0o
aHR0cHM6Ly9yd2Vla2x5Lm9yZy8pOiB3ZWVrbHkgdXBkYXRlcyBmcm9tIHRoZSBlbnRpcmUgUiBj
b21tdW5pdHkuIE9mZmVycyBhbiBSU1MgZmVlZCBidXQgSSBzdWJzY3JpYmUgdG8gdGhlIHdlZWts
eSBlbWFpbC4gRWFjaCBlbWFpbCBzZW5kcyBvdXQgYWJvdXQgNTAgbGlua3Mgd2l0aCBvbmUtc2Vu
dGVuY2UgZGVzY3JpcHRpb25zIHRvIHRoaW5ncyBiZWluZyBkb25lIGluIHRoZSBSIGNvbW11bml0
eSB0aGF0IHdlZWsuPC9wPjxwPi0gW1IgQmxvZ2dlcnNdKGh0dHBzOi8vd3d3LnItYmxvZ2dlcnMu
Y29tLykgYWdncmVnYXRlcyBSU1MgZmVlZHMgZnJvbSBodW5kcmVkcyBvZiBibG9ncyBhYm91dCBS
LiBNdWNoIG1vcmUgY29tcHJlaGVuc2l2ZSB0aGFuIFJXZWVrbHksIGJ1dCBsb3RzIHRvIHNvcnQg
dGhyb3VnaC48L3A+PHA+LSBbR2Vub21lV2ViXShodHRwczovL3d3dy5nZW5vbWV3ZWIuY29tLykg
c3RpbGwgcHJvdmlkZXMgaGlnaC1xdWFsaXR5IG9yaWdpbmFsIGNvbnRlbnQgYXMgd2VsbCBhcyBz
dW1tYXJpZXMgb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBmaWVsZC4gQ3JlYXRlIGFuIGFjY291
bnQsIGxvZyBpbiwgdmlldyB5b3VyIHByb2ZpbGUgcGFnZSwgYW5kIHN1YnNjcmliZSB0byBzb21l
IG9mIHRoZWlyIHJlZ3VsYXIgZW1haWxzLiBJIHN1YnNjcmliZSB0byB0aGVpciBkYWlseSBuZXdz
LCB0aGUgc2NhbiwgaW5mb3JtYXRpY3MsIHNlcXVlbmNpbmcsIGFuZCBpbmZlY3Rpb3VzIGRpc2Vh
c2VzIGJ1bGxldGlucy4gX1BybyB0aXBfOiBNdWNoIG9mIHRoZWlyIGNvbnRlbnQgaXMgb25seSBh
dmFpbGFibGUgZm9yIHByZW1pdW0gc3Vic2NyaWJlcnMuIElmIHlvdSBzaWduIHVwIHdpdGggYSAu
ZWR1IGFkZHJlc3MsIHlvdSBjYW4gYWNjZXNzIGFsbCB0aGlzIGNvbnRlbnQgZm9yIGZyZWUuPC9w
PjxwPi0gW0YxMDAwJ3MgU21hcnQgU2VhcmNoXShodHRwczovL2Jsb2cuZjEwMDAuY29tLzIwMTIv
MDUvMjQvc2VhcmNoLXNtYXJ0LWYxMDAwLXNtYXJ0c2VhcmNoLykgaXMgb25lIG9mIHRoZSBmZXcg
bGl0ZXJhdHVyZSByZWNvbW1lbmRhdGlvbiBzZXJ2aWNlcyB0aGF0IEkgZmluZCB1c2VmdWwsIHJl
bGV2YW50LCBhbmQgY3VycmVudC4gTXkgUk5BLXNlcSBhbmQgbWV0YWdlbm9taWNzIGFsZXJ0cyBj
b25zaXN0ZW50bHkgZGVsaXZlciByZWxldmFudCBhbmQgZnJlc2ggY29udGVudC48L3A+PHA+LSBb
QmlvU3RhcnNdKGh0dHBzOi8vd3d3LmJpb3N0YXJzLm9yZy8pOiBUaGlzIGlzIGEgc3RhY2sgZXhj
aGFuZ2UgUSZhbXA7QSBzaXRlIGZvY3VzZWQgb24gYmlvaW5mb3JtYXRpY3MsIGNvbXB1dGF0aW9u
YWwgZ2Vub21pY3MsIGJpb2xvZ2ljYWwgZGF0YSBhbmFseXNpcy4gWW91IGNhbiBnbyB0byB0aGUg
aG9tZXBhZ2UgYW5kIHNvcnQgYnkgdG9waWMsIHZpZXdzLCBhbnN3ZXJzLCBldGMuLCBhbmQgdGhl
IHBsYXRmb3JtIG9mZmVycyBbc2V2ZXJhbCBncmFudWxhciB3YXlzIHRvIHN1YnNjcmliZSB2aWEg
UlNTXShodHRwczovL3d3dy5iaW9zdGFycy5vcmcvaW5mby9yc3MvKS48L3A+PHA+LSBbQmlvY29u
ZHVjdG9yIFN1cHBvcnRdKGh0dHBzOi8vc3VwcG9ydC5iaW9jb25kdWN0b3Iub3JnLyk6IFRoaXMg
aXMgYSBRJmFtcDtBIHNpdGUgbXVjaCBsaWtlIEJpb1N0YXJzIHRoYXQgcmVwbGFjZWQgdGhlIEJp
b2NvbmR1Y3RvciBtYWlsaW5nIGxpc3QuIFlvdSBjYW4gZG8gdGhpbmdzIGxpa2UgW2xpbWl0IHRv
IGEgY2VydGFpbiB0aW1lIHBlcmlvZCBhbmQgc29ydCBieSB2aWV3c10oaHR0cHM6Ly9zdXBwb3J0
LmJpb2NvbmR1Y3Rvci5vcmcvP3NvcnQ9Vmlld3MmYW1wO2xpbWl0PVRoaXMlMjBtb250aCZhbXA7
YW5zd2VyZWQ9YWxsJmFtcDtxPSksIGZvciBleGFtcGxlLCBpZiB5b3Ugb25seSB3YW50IHRvIGxv
ZyBpbiBvY2Nhc2lvbmFsbHkgdG8gc2VlIHdoYXQncyBiZWluZyB0YWxrZWQgYWJvdXQuPC9wPjxw
Pi0gW1NFUWFuc3dlcnNdKGh0dHA6Ly9zZXFhbnN3ZXJzLmNvbS9mb3J1bXMvZm9ydW1kaXNwbGF5
LnBocD9mPTE4KTogSSBzdWJzY3JpYmUgdG8gYWxsIG5ldyB0aHJlYWRzIGluIHRoZSBTRVFhbnN3
ZXJzIGJpb2luZm9ybWF0aWNzIGZvcnVtLCBhbmQgcmVndWxhcmx5IGJyb3dzZSBwb3N0IHRpdGxl
cy4gV2hlbiBzb21ldGhpbmcgc3BhcmtzIG15IGludGVyZXN0LCBJJ2xsIGNsaWNrIGludG8gdGhh
dCBwb3N0IGFuZCBzdWJzY3JpYmUgdG8gZnV0dXJlIHVwZGF0ZXMgb24gdGhhdCBwb3N0IHZpYSBl
bWFpbC4mbmJzcDs8L3A+PHA+LSBbR29vZ2xlIFNjaG9sYXJdKGh0dHBzOi8vc2Nob2xhci5nb29n
bGUuY29tLykgbGV0cyB5b3Ugc2VhcmNoIGFuZCBjcmVhdGUgZW1haWwgYWxlcnRzLjwvcD48cD4t
IFtQdWJNZWQgQWxlcnRzXShodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L2d1aWRlL2hvd3Rv
L3JlY2VpdmUtc2VhcmNoLXJlc3VsdHMvKTogWW91IGNhbiBzYXZlLCBhdXRvbWF0ZSwgYW5kIGhh
dmUgc2VhcmNoIHJlc3VsdHMgZW1haWxlZCB0byB5b3UgdGhyb3VnaCB5b3VyIE15TkNCSSBhY2Nv
dW50LiBTdXJwcmlzaW5nbHksIHRoZXNlIHNlZW0gdG8gYmUgbW9yZSByZWxldmFudCB0aGFuIHRo
ZSBHb29nbGUgU2Nob2xhciBzZWFyY2hlcyBmb3IgdGhlIHRlcm1zIHRoYXQgSSB1c2UuPC9wPjxw
Pi0gW1B1Yk1lZCBUcmVuZGluZ10oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wdWJtZWQv
dHJlbmRpbmcvKSAtIEkgaGF2ZSBubyBpZGVhIGhvdyBQdWJNZWQgcmFua3MgdGhlc2UuIEl0IHNl
ZW1lZCB0byBiZSBtb3JlIHVzZWZ1bCBpbiB0aGUgcGFzdCwgYnV0IG5vdyBpdCBzZWVtcyB0aGF0
IHRoZSB0b3AgInRyZW5kaW5nIiBhcnRpY2xlcyBhbHRlcm5hdGUgYmV0d2VlbiBDUklTUFIvQ2Fz
OSwgYW5kIG9sZCBraW5lc2lvbG9neSAvIHNwb3J0cyBtZWRpY2luZSBhcnRpY2xlcy48L3A+PHA+
LSBbSUZUVFRdKGh0dHBzOi8vaWZ0dHQuY29tLyk6IF9JZiBUaGlzIFRoZW4gVGhhdF8gaXMgYSBz
ZXJ2aWNlIHRoYXQgY29ubmVjdHMgbWFueSBkaWZmZXJlbnQgd2ViIHNlcnZpY2VzIHRvZ2V0aGVy
IGluIFthbiBlbmRsZXNzIG51bWJlciBvZiB3YXlzXShodHRwczovL2lmdHR0LmNvbS9kaXNjb3Zl
cikuIEF0IGhvbWUgSSBtaWdodCBjb25uZWN0IEZhY2Vib29rIGFuZCBEcm9wYm94LCBzbyB0aGF0
IHdoZW5ldmVyIHNvbWVvbmUgdGFncyBtZSBpbiBhIHBob3RvLCB0aGF0IHBob3RvIGlzIGF1dG9t
YXRpY2FsbHkgZG93bmxvYWRlZCB0byBteSBEcm9wYm94LiBBdCB3b3JrIEkgY2FuIGNvbm5lY3Qg
YW4gUlNTIGZlZWQgdG8gYW4gRXZlcm5vdGUgbm90ZSBvciBHb29nbGUgRG9jLiBJdCdzIHVzZWZ1
bCBpcyBzbyBtYW55IHdheXMsIGJvdGggZm9yIHBlcnNvbmFsIGFuZCBmb3Igd29yay1yZWxhdGVk
IHRhc2tzLiBJIG1vc3RseSB1c2UgaXQgaGVyZSBhcyBhIGxhc3Qgc2FmZWd1YXJkIHNvIHRoYXQg
dGhpbmdzIEkgcmVhbGx5IHNob3VsZG4ndCBtaXNzIGRvbid0IHNsaXAgdGhyb3VnaCB0aGUgY3Jh
Y2tzLiBJIGhhdmUgcmVjaXBlcyB0aGF0IGRvIHRoaW5ncyBsaWtlIGVtYWlsIG1lIGlmIGNlcnRh
aW4gbG93LXZvbHVtZSBUd2l0dGVyIGFjY291bnRzIHBvc3QgYSBuZXcgVHdlZXQsIG90aGVycyB0
aGF0IGF1dG9tYXRpY2FsbHkgc2F2ZSB0byBJbnN0YXBhcGVyIHRoaW5ncyBsaWtlIHN0YXJyZWQg
YXJ0aWNsZXMgaW4gRmVlZGx5LiBJIGFsc28gdXNlIHRoaXMgdG8ga2VlcCBhIGNsb3NlIGV5ZSBv
biBhIGZldyBhY2NvdW50cyBvbiBHaXRIdWIuIEkgaGF2ZSBjb25uZWN0aW9ucyBzZXQgdXAgZm9y
IGEgZmV3IHVzZXJzIG9uIEdpdEh1YiBzbyB0aGF0IHdoZW5ldmVyIG9uZSBvZiB0aGVzZSB1c2Vy
cyBjcmVhdGVzIGEgbmV3IHB1YmxpYyByZXBvc2l0b3J5LCBJIGdldCBhbiBlbWFpbC4gSSd2ZSBh
bHNvIHVzZWQgSUZUVFQgdG8gYXJjaGl2ZSBUd2VldHMgY29taW5nIG91dCBvZiB2YXJpb3VzIGhh
c2h0YWdzIC0tIHlvdSBjYW4gY3JlYXRlIGEgcmVjaXBlIHdoZXJlIF9pZl8gYSBuZXcgVHdlZXQg
Y29udGFpbnMgY2VydGFpbiBrZXl3b3JkcyBvciBoYXNodGFncywgX3RoZW5fIHNhdmUgdGhhdCBU
d2VldCB0byBFdmVybm90ZSwgYSBzaGFyZWQgR29vZ2xlIERvYyBzcHJlYWRzaGVldCwgZXRjLiBb
WmFwaWVyXShodHRwczovL3phcGllci5jb20vKSBpcyBhIHNpbWlsYXIgc2VydmljZSB0aGF0IEkn
dmUgaGVhcmQgcHJvdmlkZXMgbW9yZSBncmFudWxhciBjb250cm9sLCBidXQgSSBoYXZlbid0IHRy
aWVkIGl0LjwvcD48cD4tICoqUG9kY2FzdHMqKjogSSBsaXN0ZW4gdG8gZXZlcnkgZXBpc29kZSBv
ZiBSb2dlciBQZW5nIGFuZCBIaWxhcnkgUGFya2VyJ3MgW05vdCBTbyBTdGFuZGFyZCBEZXZpYXRp
b25zXShodHRwczovL292ZXJjYXN0LmZtL2l0dW5lczEwNDA2MTQ1NzAvbm90LXNvLXN0YW5kYXJk
LWRldmlhdGlvbnMpIGRhdGEgc2NpZW5jZSBwb2RjYXN0LCBhbmQgbW9zdCBlcGlzb2RlcyBvZiBS
b2dlciBQZW5nIGFuZCBFbGl6YWJldGggTWF0c3VpJ3MgW1RoZSBFZmZvcnQgUmVwb3J0XShodHRw
czovL292ZXJjYXN0LmZtL2l0dW5lczExMzMzNzU3MTcvdGhlLWVmZm9ydC1yZXBvcnQpICh0aGlz
IG9uZSdzIG1vcmUgYWJvdXQgbGlmZSBpbiBhY2FkZW1pYSBpbiBnZW5lcmFsKS4gSSB1c2UgdGhl
IE92ZXJjYXN0IGlPUyBhcHAgdG8gbGlzdGVuIHRvIHRoZXNlIGFuZCBvdGhlciBwb2RjYXN0cyBv
biB+MS43NVggc3BlZWQuIChXaGVuIEkgbWV0IEhpbGFyeSBhdCB0aGUgW1JTdHVkaW8gQ29uZmVy
ZW5jZV0oaHR0cDovL3d3dy5nZXR0aW5nZ2VuZXRpY3Nkb25lLmNvbS8yMDE3LzAxL3JzdHVkaW8t
Y29uZmVyZW5jZS0yMDE3LXJlY2FwLmh0bWwpIEkgaGVhcmQgaGVyIHNwZWFrIGZvciB0aGUgZmly
c3QgdGltZSBhdCByZWd1bGFyIDFYIHNwZWVkLiBPZGQgZXhwZXJpZW5jZS4pIEZpbmFsbHksIEkg
anVzdCBsZWFybmVkIGFib3V0IHRoZSBbUiBwb2RjYXN0XShodHRwczovL3d3dy5yLXBvZGNhc3Qu
b3JnLykuIEkgaGF2ZW4ndCBsaXN0ZW5lZCB0byBtdWNoIHlldCwgYnV0IEkndmUgYWRkZWQgaXQg
dG8gbXkgbG9uZyBPdmVyY2FzdCBxdWV1ZS48L3A+PHA+PGJyPjwvcD48cD4jIFByZXByaW50cyE8
L3A+PHA+PGJyPjwvcD48cD5QcmVwcmludHMgaW4gbGlmZSBzY2llbmNlcyB3ZXJlIG5lYXJseSB1
bmhlYXJkIG9mIHdoZW4gSSB3cm90ZSB0aGUgWzIwMTIgcG9zdF0oaHR0cDovL3d3dy5nZXR0aW5n
Z2VuZXRpY3Nkb25lLmNvbS8yMDEyLzA1L2hvdy10by1zdGF5LWN1cnJlbnQtaW4uaHRtbCkuIFtO
b3ddKGh0dHBzOi8vYmxvZ3MuYmlvbWVkY2VudHJhbC5jb20vb24tYmlvbG9neS8yMDE2LzEyLzE0
L2FoZWFkLW9mLXRoZS1jdXJ2ZS1lbWJyYWNpbmctcHJlcHJpbnRzLykgW2V2ZXJ5Ym9keSdzXSho
dHRwOi8vd3d3Lm5hdHVyZS5jb20vbmV3cy9iaWctYmlvbG9neS1wcm9qZWN0cy13YXJtLXVwLXRv
LXByZXByaW50cy0xLjIxMDc0KSBbZG9pbmddKGh0dHA6Ly93d3cubmF0dXJlLmNvbS9uZXdzL3do
ZW4tYS1wcmVwcmludC1iZWNvbWVzLXRoZS1maW5hbC1wYXBlci0xLjIxMzMzKSBbaXRdKGh0dHA6
Ly93d3cubmF0dXJlLmNvbS9uZXdzL2Jpb2xvZ2lzdHMtdXJnZWQtdG8taHVnLWEtcHJlcHJpbnQt
MS4xOTM4NCkuIFRoZXJlIGFyZSBzdGlsbCBhIGZldyBwZW9wbGUgdXNpbmcgdGhlIFsqKmFyWGl2
KiogUXVhbnRpdGF0aXZlIGJpb2xvZ3kgY2hhbm5lbF0oaHR0cHM6Ly9hcnhpdi5vcmcvYXJjaGl2
ZS9xLWJpbyksIGFuZCBJJ2xsIG9jY2FzaW9uYWxseSBmaW5kIHNvbWV0aGluZyBpbiBbKipQZWVy
SioqIFByZXByaW50c10oaHR0cHM6Ly9wZWVyai5jb20vcHJlcHJpbnRzLXNlYXJjaC8pIHRoYXQg
Z3JhYnMgbXkgYXR0ZW50aW9uLiZuYnNwOzwvcD48cD48YnI+PC9wPjxwPioqW2Jpb1J4aXZdKGh0
dHA6Ly9iaW9yeGl2Lm9yZy9hbGVydHNyc3MpKiogaXMgdGhlIGJpZ2dlc3QgcGxheWVyIGhlcmUs
IGhhbmRzIGRvd24uIFRoZSBbQWxlcnRzL1JTU10oaHR0cDovL2Jpb3J4aXYub3JnL2FsZXJ0c3Jz
cykgcGFnZSBsZXRzIHlvdSBzaWduIHVwIGZvciBlbWFpbCBhbGVydHMgb24gcGFydGljdWxhciB0
b3BpY3MsIG9yIHN1YnNjcmliZSB0byBSU1MgZmVlZHMgY29taW5nIGZyb20gcGFydGljdWxhciBj
YXRlZ29yaWVzIHRoYXQgaW50ZXJlc3QgeW91LiBJIHN1YnNjcmliZSB0byB0aGUgR2Vub21pY3Mg
YW5kIEJpb2luZm9ybWF0aWNzIGZlZWRzLiBJIGFsc28gZm9sbG93IHNldmVyYWwgb2YgdGhlIGJp
b1J4aXYncyB0b3AtbGV2ZWwgYW5kIGNhdGVnb3J5IFR3aXR0ZXIgZmVlZHMgW0BiaW9yeGl2cHJl
cHJpbnRdKGh0dHBzOi8vdHdpdHRlci5jb20vYmlvcnhpdnByZXByaW50KSwgW0BiaW9yeGl2X2Jp
b2luZm9dKGh0dHBzOi8vdHdpdHRlci5jb20vYmlvcnhpdl9iaW9pbmZvKSwgYW5kIFtAYmlvcnhp
dl9nZW5vbWljXShodHRwczovL3R3aXR0ZXIuY29tL2Jpb3J4aXZfZ2Vub21pYykpLjwvcD48cD48
YnI+PC9wPjxwPioqW0YxMDAwIFJlc2VhcmNoXShodHRwczovL2YxMDAwcmVzZWFyY2guY29tLykq
KiBkZXNlcnZlcyBzb21lIHNwZWNpYWwgYXR0ZW50aW9uIGhlcmUuIEl0J3Mgc29tZXdoZXJlIGlu
LWJldHdlZW4gYSBwcmVwcmludCBzZXJ2ZXIgYW5kIGEgcGVlci1yZXZpZXdlZCBwdWJsaWNhdGlv
bi4gWW91IGNhbiB1cGxvYWQgbWFudXNjcmlwdHMgKG9yIG90aGVyIHJlc2VhcmNoIG91dHB1dHMg
bGlrZSBwb3N0ZXJzIG9yIHNsaWRlcyksIGFuZCB0aGV5J3JlIGltbWVkaWF0ZWx5IGFuZCBwZXJt
YW5lbnRseSBwdWJsaXNoZWQsIGFuZCBnaXZlbiBhIERPSS4gVGhlbiBvbmUgb3IgbW9yZSByb3Vu
ZHMgb2Ygb3BlbiBwZWVyIHJldmlldyBhcyB3ZWxsIGFzIHB1YmxpYyBjb21tZW50IHRha2UgcGxh
Y2UsIGFuZCBhdXRob3JzIGNhbiB1cGRhdGUgdGhlIHB1Ymxpc2hlZCBwYXBlciBmb3IgZnVydGhl
ciByZXZpZXcuIENoZWNrIG91dCB0aGUgW3RyYW5zY3JpcHQgZXN0aW1hdGVzIC8gZ2VuZSBpbmZl
cmVuY2UgcGFwZXJdKGh0dHBzOi8vZjEwMDByZXNlYXJjaC5jb20vYXJ0aWNsZXMvNC0xNTIxL3Yy
KSBJIG1lbnRpb25lZCBlYXJsaWVyLiBZb3UnbGwgc2VlIGl0J3MgInZlcnNpb24gMiwiIGFuZCB3
YXMgYXBwcm92ZWQgYnkgdHdvIHJlZmVyZWVzLiBJZiB5b3UgbG9vayBhdCB0aGUgcmlnaHQtaGFu
ZCBwYW5lbCwgeW91IGNhbiBhY3R1YWxseSBnbyBiYWNrIGFuZCBzZWUgdGhlIHByaW9yIHRvIHJl
dmlzaW9uLCBhcyB3ZWxsIGFzIHNlZSB3aG8gcmV2aWV3ZWQgaXQsIHdoYXQgdGhlIHJldmlld2Vy
IHdyb3RlLCBhbmQgaG93IHRoZSBhdXRob3JzIHJlc3BvbmRlZCB0byB0aG9zZSByZXZpZXdzLiBJ
dCdzIGFuIGlubm92YXRpdmUgcGxhdGZvcm0gd2hlcmUgcGVlciByZXZpZXcgaXMgb3BlbiBhbmQg
dHJhbnNwYXJlbnQsIGFuZCBpcyBfaW5kZXBlbmRlbnQgb2YgcHVibGljYXRpb25fLCBzaW5jZSBw
YXBlcnMgYXJlIHB1Ymxpc2hlZCBiZWZvcmUgdGhleSBhcmUgcmV2aWV3ZWQsIGFuZCByZW1haW4g
cmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSBvZiB0aGUgcmV2aWV3LiBGMTAwMCBSZXNlYXJjaCBo
YXMgYSBudW1iZXIgb2YgKipbY2hhbm5lbHNdKGh0dHBzOi8vZjEwMDByZXNlYXJjaC5jb20vY2hh
bm5lbHMpKiogdGhhdCBhcmUgZXh0ZXJuYWxseSBjdXJhdGVkIGJ5IGRpZmZlcmVudCBvcmdhbml6
YXRpb25zLCBzb2NpZXRpZXMsIGNvbmZlcmVuY2VzLCBldGMuIEkgc3Vic2NyaWJlIHRvIGFuZCBn
ZXQgYWxlcnRzIGFib3V0IHRoZSAqKltSIHBhY2thZ2VdKGh0dHBzOi8vZjEwMDByZXNlYXJjaC5j
b20vY2hhbm5lbHMvcnBhY2thZ2UpKiogYW5kICoqW0Jpb2NvbmR1Y3Rvcl0oaHR0cHM6Ly9mMTAw
MHJlc2VhcmNoLmNvbS9jaGFubmVscy9iaW9jb25kdWN0b3IpKiogY2hhbm5lbHMuIFdoZW5ldmVy
IGEgbmV3IHByZXByaW50IGlzIGRyb3BwZWQgaW50byBvbmUgb2YgdGhlc2UgY2hhbm5lbHMsIEkn
bGwgZ2V0IGFuIGVtYWlsIGFuZCBhbiBSU1MgaXRlbS48L3A+PHA+PGJyPjwvcD48cD5JIG9ubHkg
cmVjZW50bHkgZGlzY292ZXJlZCAqKltQcmVQdWJNZWRdKGh0dHA6Ly93d3cucHJlcHVibWVkLm9y
Zy8pKiosIHdoaWNoIGxvb2tzIHZlcnkgdXNlZnVsLiBQcmVQdWJNZWQgaW5kZXhlcyBwcmVwcmlu
dHMgZnJvbSBhclhpdiBxLWJpbywgUGVlckogUHJlcHJpbnRzLCBiaW9SeGl2LCBGMTAwMFJlc2Vh
cmNoLCBwcmVwcmludHMub3JnLCBUaGUgV2lubm93ZXIsIE5hdHVyZSBQcmVjZWRpbmdzLCBhbmQg
V2VsbGNvbWUgT3BlbiBSZXNlYXJjaC4gSW4gdGhlIHRvb2xzIGJveCBvbiB0aGUgaG9tZXBhZ2Us
IHlvdSBjYW4gW2VudGVyIGEgc2VhcmNoIHN0cmluZyBhbmQgZ2V0IGJhY2sgYW4gUlNTIGZlZWQg
d2l0aCByZXN1bHRzIGZyb20gdGhhdCBzZWFyY2hdKGh0dHA6Ly93d3cucHJlcHVibWVkLm9yZy9y
c3NfZmVlZC8pLiBJdCBsb29rcyBsaWtlIFByZVB1Yk1lZCBpcyBtYWludGFpbmVkIGJ5IGEgc2lu
Z2xlIHBlcnNvbiwgYnV0IGhlJ3MgbWFkZSB0aGUgZW50aXJlIHRoaW5nIFtvcGVuIHNvdXJjZV0o
aHR0cHM6Ly9naXRodWIuY29tL09tbmVzUmVzL3ByZXB1YiksIHNvIHlvdSBjb3VsZCBwcmVzdW1h
Ymx5IHNldCB0aGlzIHVwIGFuZCBtaXJyb3IgaXQgb24geW91ciBvd24sIHNob3VsZCB5b3UgY2hl
Y2sgYmFjayBpbiAyMDIxIGFuZCB0aGUgbGluayBiZSBkZWFkLjwvcD48cD48YnI+PC9wPjxwPiMg
Sm91cm5hbHM8L3A+PHA+PGJyPjwvcD48cD5JIHN0YXJ0ZWQgd2l0aCBKb3VybmFscyBpbiBteSBb
MjAxMiBwb3N0XShodHRwOi8vd3d3LmdldHRpbmdnZW5ldGljc2RvbmUuY29tLzIwMTIvMDUvaG93
LXRvLXN0YXktY3VycmVudC1pbi5odG1sKSwgYnV0IHRoZXkncmUgbGFzdCAoYW5kIHByb2JhYmx5
IF9sZWFzdF8pIGhlcmUuIEkgc3RpbGwgc3Vic2NyaWJlIHRvIGEgZmV3IGpvdXJuYWxzJyBSU1Mg
ZmVlZHMsIGJ1dCBpbiBtb3N0IGNhc2VzLCBieSB0aGUgdGltZSBJIHNlZSBhIG5ldyBUYWJsZSBv
ZiBDb250ZW50cyBoaXQgbXkgUlNTIHJlYWRlciwgSSBwcm9iYWJseSBzYXcgdGhlIHB1YmxpY2F0
aW9ucyBtYWtpbmcgdGhlIHJvdW5kcyBvbiBUd2l0dGVyLCBibG9ncywgb3Igb3RoZXIgY2hhbm5l
bHMgbWVudGlvbmVkIGFib3ZlLiBJdCdzIGFsc28gbm8gbG9uZ2VyIHVudXN1YWwgdG8gc2VlIGEg
InB1YmxpY2F0aW9uIiBsYW5kIHdoZXJlIEkgcmVhZCB0aGUgcHJlcHJpbnQgb24gYmlvclhpdiBf
bW9udGhzIGFnb18sIGFuZCBwZXJoYXBzIGV2ZW4gYSBibG9nIHBvc3QgYmVmb3JlIHRoYXQhIFdo
YXQgInB1YmxpY2F0aW9uIiBtZWFucyBpcyBjaGFuZ2luZyByYXBpZGx5LCBhbmQgSSdtIHN1cmUg
dGhlIGxpbmVzIGJldHdlZW4gYSBfYmxvZyBwb3N0XywgX3ByZXByaW50XywgYW5kIF9qb3VybmFs
IGFydGljbGVfIHdpbGwgYmUgZXZlbiBibHVycmllciBpbiB0aGUgeWVhciAyMDIyIHBvc3QuJm5i
c3A7PC9wPjxwPjxicj48L3A+PHA+LSBbQmlvaW5mb3JtYXRpY3NdKGh0dHBzOi8vYWNhZGVtaWMu
b3VwLmNvbS9iaW9pbmZvcm1hdGljcyk8L3A+PHA+LSBbQk1DIEJpb2luZm9ybWF0aWNzXShodHRw
czovL2JtY2Jpb2luZm9ybWF0aWNzLmJpb21lZGNlbnRyYWwuY29tLyk8L3A+PHA+LSBbQnJpZWZp
bmdzIGluIEJpb2luZm9ybWF0aWNzXShodHRwczovL2FjYWRlbWljLm91cC5jb20vYmliKTwvcD48
cD4tIFtHZW5vbWUgQmlvbG9neV0oaHR0cDovL2dlbm9tZWJpb2xvZ3kuYmlvbWVkY2VudHJhbC5j
b20vKTwvcD48cD4tIFtHZW5vbWUgUmVzZWFyY2g6IGN1cnJlbnQgYW5kIEFPUF0oaHR0cDovL2dl
bm9tZS5jc2hscC5vcmcvcnNzLyk8L3A+PHA+LSBbTWljcm9iaW9tZV0oaHR0cDovL21pY3JvYmlv
bWVqb3VybmFsLmJpb21lZGNlbnRyYWwuY29tLyk8L3A+PHA+LSBbTmF0dXJlIEdlbmV0aWNzLCBj
dXJyZW50ICZhbXA7IEFPUF0oaHR0cDovL3d3dy5uYXR1cmUuY29tL25nL25ld3NmZWVkcy5odG1s
KTwvcD48cD4tIFtOYXR1cmUgUmV2aWV3cyBHZW5ldGljcywgY3VycmVudCAmYW1wOyBBT1BdKGh0
dHA6Ly93d3cubmF0dXJlLmNvbS9ucmcvaW5mby9uZXdzZmVlZHMuaHRtbCk8L3A+PHA+LSBbTnVj
bGVpYyBBY2lkcyBSZXNlYXJjaF0oaHR0cHM6Ly9hY2FkZW1pYy5vdXAuY29tL25hcik8L3A+PHA+
LSBbUExPUyBDb21wdXRhdGlvbmFsIEJpb2xvZ3ldKGh0dHA6Ly9qb3VybmFscy5wbG9zLm9yZy9w
bG9zY29tcGJpb2wvcy9oZWxwLXVzaW5nLXRoaXMtc2l0ZSNsb2MtYXJ0aWNsZS1mZWVkcyk8L3A+
PHA+LSBbUExPUyBHZW5ldGljc10oaHR0cDovL2pvdXJuYWxzLnBsb3Mub3JnL3Bsb3NnZW5ldGlj
cy9zL2hlbHAtdXNpbmctdGhpcy1zaXRlI2xvYy1hcnRpY2xlLWZlZWRzKTwvcD48cD48YnI+PC9w
PjxwPiMgSG93IGRvIHlvdSBoYXZlIHRoZSB0aW1lIHRvIGRvIHRoaXM/PC9wPjxwPjxicj48L3A+
PHA+SG93IGRvIHlvdSBub3Q/IEl0J3Mgbm90IGFzIGJhZCBhcyBpdCBzZWVtcy4gSSBwcm9iYWJs
eSBzcGVuZCBhbiBob3VyIGVhY2ggd2Vla2RheSBzY2FubmluZyBhbGwgdGhlIHJlc291cmNlcyBt
ZW50aW9uZWQgaGVyZSwgYW5kIEkgZmluZCB0aGUgdGltZSB3ZWxsIHNwZW50LiBJIGNhbiBicmVl
emUgdGhyb3VnaCBteSBUd2l0dGVyIGFuZCBSU1MgZmVlZHMgb24gbXkgYnVzIHJpZGUgaW50byB3
b3JrLCBhbmQgc2F2aW5nIHRoaW5ncyBJIGFjdHVhbGx5IHdhbnQgdG8gbG9vayBhdCBsYXRlciB3
aXRoIGEgYm9va21hcmssIHN0YXIsIGZhdm9yaXRlLCBJbnN0YXBhcGVyLCBldGMuPC9wPjxwPjxi
cj48L3A+PHA+SSBzaG91bGQgaGF2ZSBwcmVmYWNlZCB0aGlzIHdob2xlIGFydGljbGUgd2l0aCB0
aGUgbm90ZSB0aGF0IEkgaGFyZGx5IGV2ZXIgX2FjdHVhbGx5IGZ1bGx5IHJlYWRfIGFueSBvZiB0
aGUgcGFwZXJzIG9yIGJsb2cgcG9zdHMgSSBzZWUgaGVyZS4gSWYgSSBzZWUsIGZvciBleGFtcGxl
LCBhIG5ldyBXR1MgdmFyaWFudCBjYWxsZXIgcHVibGlzaGVkLCBJJ2xsIGdsYW5jZSBhdCB0aGUg
ZmlndXJlcyBiZW5jaG1hcmtpbmcgaXQgYWdhaW5zdCBHQVRLIGFuZCBGcmVlQmF5ZXMsIGFuZCBz
a2ltIHRocm91Z2ggdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIEdpdEh1YiBSRUFETUUgb3IgQmlv
Q29uZHVjdG9yIHZpZ25ldHRlLiBJZiBlaXRoZXIgb2YgdGhlc2UgaXMgbWlzc2luZyBvciBmYWxs
cyBzaG9ydCwgdGhhdCdzIHVzdWFsbHkgZW5vdWdoIGZvciBtZSB0byBpZ25vcmUgdGhlIHB1Ymxp
Y2F0aW9uIGNvbXBsZXRlbHkgWyhkb24ndCB1bmRlcmVzdGltYXRlIHRoZSBpbXBvcnRhbmNlIG9m
IGdvb2QgZG9jdW1lbnRhdGlvbiEpXShodHRwOi8vam91cm5hbHMucGxvcy5vcmcvcGxvc2NvbXBi
aW9sL2FydGljbGU/aWQ9MTAuMTM3MS9qb3VybmFsLnBjYmkuMTAwNTI2NSkuPC9wPjxwPjxicj48
L3A+PHA+SXQncyB0YWtlbiBtZSBhIGRlY2FkZSB0byBjb21waWxlIGFuZCBjb250aW51YWxseSBo
b25lIHRoaXMgbGlzdCBvZiByZXNvdXJjZXMgdG8gdGhlIHRoaW5ncyB0aGF0IEkgZmluZCB1c2Vm
dWwgYW5kIHJlbGV2YW50LiBUaGlzIGlzIHdoYXQgd29ya3MgZm9yIF9tZV8sIF9ub3dfLCBpbiAy
MDE3LiBJdCdzIG5vdCBhIG9uZS1zaXplLWZpdHMtYWxsLCBhbmQgdGhlIDIwMTgtbWUgd2lsbCBw
cm9iYWJseSBoYXZlIGEgc29tZXdoYXQgZGlmZmVyZW50IGxpc3QsIGJ1dCBJIGhvcGUgeW91J2xs
IGZpbmQgaXQgdXNlZnVsLiBJZiB5b3VyIGludGVyZXN0cyBhcmUgc2ltaWxhciB0byB3aGF0IEkn
dmUgZGlzY3Vzc2VkIGhlcmUsIGhvdyBkbyB5b3Ugc3RheSBjdXJyZW50PyBXaGF0IGhhdmUgSSBs
ZWZ0IG91dD8gTGV0IG1lIGtub3cgaW4gdGhlIGNvbW1lbnRzITwvcD48ZGl2Pjxicj48L2Rpdj48
L2Rpdj4=">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com4tag:blogger.com,1999:blog-6232819486261696035.post-68051635488091186662017-01-14T15:48:00.000-06:002017-02-16T16:20:10.918-06:00RStudio Conference 2017 Recap<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=6805163548809118666">
<div style="margin: 1.2em 0px !important;">
The first ever <a href="https://www.rstudio.com/conference/">RStudio conference</a> was held January 11-14, 2017 in Orlando, FL. For anyone else like me who spends hours each working day staring into an RStudio session, the conference was truly <em>excellent</em>. The <a href="https://www.rstudio.com/conference/#speakers">speaker lineup</a> was diverse and covered lots of areas related to development in R, including the tidyverse, the RStudio IDE, Shiny, htmlwidgets, and authoring with RMarkdown. </div>
<div style="margin: 1.2em 0px !important;">
This is <em>not</em> a complete list by any means — with split sessions I could only go to half the talks at most. Here are some noncomprehensive notes and links to slides and resources for some of the awesome things are doing with R and RStudio that I learned about at the RStudio Conference.</div>
<hr />
<div style="margin: 1.2em 0px !important;">
<strong>Hadley Wickham</strong> kicked off the meeting with a keynote on <strong>doing data science in R</strong>. The talk focused on the <strong><a href="http://tidyverse.org/">tidyverse</a></strong>, and the notion of splitting functions into <em>commands</em> that <em>do something</em>, as compared to <em>queries</em> that <em>calculate something</em>, and how it’s generally a good idea to keep these different functionalties contained in their own separate functions. (Contrast this to things like <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">lm</code> that both computes values and does things, like printing those values to the screen, making it difficult to capture (see <a href="https://cran.r-project.org/web/packages/broom/index.html">broom</a>). </div>
<div style="margin: 1.2em 0px !important;">
I asked Hadley after his talk about strategies to reduce issues getting Bioconductor data structures to play nicely with tidyverse tools. Within minutes <strong><a href="https://twitter.com/drob">David Robinson</a></strong> released a new feature in the <strong><a href="https://github.com/dgrtwo/fuzzyjoin">fuzzyjoin package</a></strong> that leverages IRanges within this tidyverse-friendly package for efficiently doing things like joining on genomic intervals.</div>
<div style="margin: 1.2em 0px !important;">
</div>
<blockquote class="twitter-tweet" data-cards="hidden" data-conversation="none" data-partner="tweetdeck" style="border-left: 4px solid rgb(221, 221, 221); color: #777777; margin: 1.2em 0px; padding: 0px 1em; quotes: none;">
<div dir="ltr" lang="en" style="margin: 1.2em 0px !important;">
Another <a href="https://twitter.com/hashtag/rstudioconf?src=hash">#rstudioconf</a>-inspired addition to fuzzyjoin:<br />
<br />
genome_join, for overlapping intervals on the same chromosome<a href="https://twitter.com/genetics_blog">@genetics_blog</a> <a href="https://twitter.com/hashtag/rstats?src=hash">#rstats</a> <a href="https://t.co/oUctyNYc09">pic.twitter.com/oUctyNYc09</a></div>
— David Robinson (@drob) <a href="https://twitter.com/drob/status/820054313909284865">January 13, 2017</a></blockquote>
<div style="margin: 1.2em 0px !important;">
</div>
<div style="margin: 1.2em 0px !important;">
<strong><a href="https://twitter.com/CVWickham/">Charlotte Wickham’s</a></strong> 2-hour <strong>purrr tutorial</strong> was awesome. <a href="http://bit.ly/purrr-rstudioconf">Here’s a link</a> to a shared dropbox folder with code, challenges, slides, data, etc. The <a href="https://github.com/hadley/purrr#readme">purrr package</a> is a core package in the tidyverse, and I’ll be replacing many of the base <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">?apply</code> and plyr <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">??ply</code> functions that I still use here and there. The <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">map_*</code> functions are integral to working with nested list-columns in dplyr, and I think I’m finally starting to grok how to work with these.</div>
<div style="margin: 1.2em 0px !important;">
<strong><a href="https://twitter.com/JennyBryan">Jenny Bryan</a></strong> gave a great talk on <strong>list columns</strong>. You can see her <a href="https://speakerdeck.com/jennybc/putting-square-pegs-in-round-holes-using-list-cols-in-your-dataframe">slides here</a>. Jenny also put together <a href="https://jennybc.github.io/purrr-tutorial/">this excellent tutorial</a> with lots of worked examples and code snippets. And if you need some example list data structures for more practice or for teaching that aren’t foo/bar/iris/mtcars-level boring, see her <a href="https://github.com/jennybc/repurrrsive">repurrrsive package</a>. Related to this, for more on list columns and purrr map functions, start reading at the <a href="http://r4ds.had.co.nz/many-models.html">“Many Models” section of Hadley’s <em>R for Data Science</em> book</a>.</div>
<div style="margin: 1.2em 0px !important;">
<strong><a href="https://twitter.com/juliasilge">Julia Silge</a></strong>, data scientist at Stack Overflow, gave a great introduction to tidy text mining with R. You can read Julia and David’s <a href="http://tidytextmining.com/"><em>Tidy Text Mining with R</em> book here online</a> (the book was authored in Rmarkdown using bookdown!).</div>
<div style="margin: 1.2em 0px !important;">
<strong><a href="https://twitter.com/andrewflowers">Andrew Flowers</a></strong>, data journalist and former <a href="https://fivethirtyeight.com/contributors/andrew-flowers/">writer at FiveThirtyEight</a> gave the second day’s keynote address on finding and telling stories using R. He gave a series of examples illustrating six motivating features that make data stories worth telling, along with potential danger inherent to each one:</div>
<ol style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;">Novelty <em>(potential danger: triviality)</em></li>
<li style="margin: 0.5em 0px;">Outlier <em>(spurious result; see also, p-hacking)</em></li>
<li style="margin: 0.5em 0px;">Archetype <em>(oversimplification)</em></li>
<li style="margin: 0.5em 0px;">Trend <em>(variance)</em></li>
<li style="margin: 0.5em 0px;">Debunking <em>(confirmation bias)</em></li>
<li style="margin: 0.5em 0px;">Forecast <em>(overfitting)</em></li>
</ol>
<div style="margin: 1.2em 0px !important;">
<strong><a href="https://twitter.com/xieyihui">Yihui Xie</a></strong> led a two-hour tutorial on <strong>advanced RMarkdown</strong>. You can see his <a href="https://slides.yihui.name/2017-rstudio-conf-rmarkdown-Yihui-Xie.html">slides here</a>. The <a href="https://github.com/rstudio/rticles">rticles package</a> has LaTeX Journal Article Templates for R Markdown for various journals. The <a href="https://github.com/rstudio/tufte">tufte package</a> now supports both PDF and HTML output. See an <a href="http://rstudio.github.io/tufte/">example here</a>. Yihui’s <a href="https://github.com/yihui/xaringan">xaringan package</a> ports the <a href="https://remarkjs.com/">remark.js</a> library for slideshows into R. Careful. Yihui warns that you may not sleep after learning about how cool remark.js is. Yihui showed an early version of the in-development <a href="https://github.com/rstudio/blogdown">blogdown package</a> that can build blog-aware static websites using the blazing-fast and well-documented <a href="http://gohugo.io/">Hugo</a> static site generator. Finally, the <strong><a href="https://github.com/rstudio/bookdown">bookdown package</a></strong> is just awesome. It takes multiple RMarkdown documents as input and renders into multiple output formats (screen-readable ebook, PDF, epub, etc.). It looks great for writing books and technical documentation with pushbutton publishing to multiple output formats with some nice built-in styles out of the box. Some examples:</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><a href="https://bookdown.org/yihui/bookdown/">bookdown.org/yihui/bookdown</a> — The bookdown book, written in RMarkdown with bookdown. <em>(whoa, meta)</em></li>
<li style="margin: 0.5em 0px;"><a href="http://r4ds.had.co.nz/">r4ds.had.co.nz</a> — Garrett Grolemund and Hadley Wickham’s <em>R for Data Science</em> book.</li>
<li style="margin: 0.5em 0px;"><a href="http://tidytextmining.com/">tidytextmining.com</a> — Julia and David’s book on text mining</li>
<li style="margin: 0.5em 0px;"><a href="http://moderndive.com/">moderndive.com</a> — an open-source introductory statistics class textbook</li>
</ul>
<div style="margin: 1.2em 0px !important;">
Finally, a few gems from other talks that I jotted down:</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><strong><a href="https://twitter.com/old_man_chester">Chester Ismay</a></strong> gave a great talk on teaching introductory statistics using R, with the <a href="http://moderndive.com/">open-source course textbook</a> written in RMarkdown using bookdown.</li>
<li style="margin: 0.5em 0px;"><strong><a href="https://twitter.com/hrbrmstr">Bob Rudis</a></strong> talked about using pipes (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">%>%</code>), and pipes within pipes, and best piping practices. See his <a href="https://twitter.com/hrbrmstr">slides here</a>.</li>
<li style="margin: 0.5em 0px;"><strong><a href="https://twitter.com/hspter">Hilary Parker</a></strong> talked about the idea of an <em>analysis development</em>, (and analysis developers), drawing similarities to software development/developers. Hilary discussed this once before on the excellent <a href="https://soundcloud.com/nssd-podcast">podcast</a> that she and Roger Peng host, and you can probably find it in their <em><a href="https://leanpub.com/conversationsondatascience/">Conversations On Data Science</a></em> ebook that summarize and transcribe these conversations.</li>
<li style="margin: 0.5em 0px;"><strong><a href="https://twitter.com/drsimonj">Simon Jackson</a></strong> introduced <strong><a href="https://cran.r-project.org/web/packages/corrr/vignettes/using-corrr.html">corrr package</a></strong> for exploring and manipulating correlations and correlation matrices in a tidy way.</li>
<li style="margin: 0.5em 0px;"><strong><a href="https://twitter.com/gshotwell">Gordon Shotwell</a></strong> introduced the <strong><a href="https://github.com/GShotwell/easyMake">easymake</a></strong> package that generates Makefiles from a data frame using R.</li>
<li style="margin: 0.5em 0px;"><strong><a href="https://twitter.com/_inundata">Karthik Ram</a></strong> quickly introduced several of the (many) <strong><a href="https://ropensci.org/packages/">rOpenSci packages</a></strong> related to data publication, data access, scientific literature access, scalable & reproducible computing, databases, visualization, taxonomy, geospatial analysis, and many utility tools for data analysis and manipulation.</li>
</ul>
<hr />
<div style="margin: 1.2em 0px !important;">
With split sessions I missed more than half the talks. Lots of people here are active on Twitter, and you can catch many more notes and tidbits on the <a href="https://twitter.com/search?q=%23rstudioconf">#rstudioconf</a> hashtag. The meeting was superbly organized, I learned a ton, and I enjoyed meeting in person many of the folks I follow on Twitter and elsewhere online. A few days of 80-degree weather in mid-January didn’t hurt either. I’ll definitely be coming again next year. Kudos to the rstudio::conf organizers and speakers!</div>
<div style="margin: 1.2em 0px !important;">
All the talks were recorded and will supposedly find their way to <a href="https://www.rstudio.com/">rstudio.com</a> at some point soon. I’ll update this post with a link when that happens.<br />
<br />
<hr />
<div style="margin-bottom: 1.2em !important; margin-top: 1.2em !important;">
<strong><em>Update Feb 16, 2017:</em></strong> All the talks have now been posted online <a href="https://www.rstudio.com/resources/webinars/#rstudioconf">here</a> under the rstudio::conf2017 heading.</div>
<div style="margin-bottom: 1.2em !important; margin-top: 1.2em !important;">
Day 1:</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/data-science-in-the-tidyverse/">Data Science in the Tidyverse – Hadley Wickham</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/building-dashboards-with-shiny/">Building Dashboards with Shiny Tutorial – Joe Cheng & Winston Chang</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/happy-r-users-purrr/">Happy R Users Purrr Tutorial – Charlotte Wickham</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/whats-new-with-shiny/">What’s new with Shiny – Joe Cheng</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/database-best-practices/">Database Best Practices – Jim Hester</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/dynamic-shiny-interfaces/">Dynamic Shiny Interfaces – Bárbara Borges Ribeiro</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/using-web-apis-from-r/">Using Web APIs from R – Amanda Gadrow</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/bookmarking-shiny-state-finally/">Bookmarking Shiny State - Winston Chang</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/competitive-modeling-of-outcomes-for-prediction/">Competitive Modeling of Outcomes for Prediction – Max Kuhn</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/interactive-network-visualization-with-threejs-and-r/">Fun with htmlwidgets:3D interactive network visualization with threejs and R – Bryan Lewis</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/writing-readable-code-with-pipes/">Writing Readable Code with Pipes – Bob Rudis</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/mapping-in-r-with-leaflet/">Mapping in R with Leaflet – Bhaskar Karambelkar</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/using-list-cols-in-your-dataframe/">Putting square pegs in round holes: Using list-cols in your dataframe – Jenny Bryan</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/linking-html-widgets-with-crosstalk/">Linking HTML Widgets with Crosstalk – Joe Cheng</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/text-mining-the-tidy-way/">Text Mining the tidy Way – Julia Silge</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/trelliscopejs/">TrelliscopeJS – Ryan Hafen</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/teaching-introductory-statistics-using-the-tidyverse/">Teaching Introductory Statistics Using the tidyverse via bookdown – Chester Ismay</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/user-lightning-talks/">Lightning Talks – User Submitted Talks</a></li>
</ul>
<div style="margin-bottom: 1.2em !important; margin-top: 1.2em !important;">
Day 2:</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/finding-and-telling-stories-with-r/">Finding and Telling Stories with R – Andrew Flowers</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/advanced-r-markdown-tutorial/">Advanced R Markdown Tutorial – Yihui Xie</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/happy-git-and-gihub-for-the-user-tutorial/">Happy Git and Gihub for the useR Tutorial – Jenny Bryan</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/opinionated-analysis-development/">Opinionated Analysis Development Hilary Parker</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/whats-new-with-the-ide/">What’s New with the IDE – Kevin Ushey</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/dashboards-made-easy/">Dashboards made easy – Sean Lopp</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/rstudio-server-pro-power-tools/">RStudio Server Pro Power Tools – Jonathan McPherson</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/making-websites-with-r/">Making Websites with R – Yihui Xie</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/customizing-extending-r-markdown/">Customizing and Extending R Markdown – Yihui Xie</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/understand-code-performance-with-the-profiler/">Understand Code Performance with the profiler – Winston Chang</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos//resources/videos/making-websites-with-r/">Extending & Customizing R Markdown – Yihui Xie (Begins at the 32 minute mark)</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/extending-r-with-c-a-brief-introduction-to-rcpp/">Extending R with C++: A Brief Introduction to Rcpp – Dirk Eddelbuettel</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/r-notebook-workflows/">R Notebook Workflows – Jonathan McPherson</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/rs-role-in-data-science/">R’s Role in Data Science – Joseph Rickert</a></li>
<li style="margin: 0.5em 0px;"><a href="https://www.rstudio.com/resources/videos/all-things-r-and-rstudio/">All Things R and RStudio Q & A</a></li>
</ul>
<div>
<br /></div>
</div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PGRpdiBjbGFzcz0ibWFya2Rvd24taGVyZS13cmFwcGVyIiBkYXRhLWJsb2dnZXItZXNjYXBlZC1k
YXRhLW1kLXVybD0iaHR0cHM6Ly93d3cuYmxvZ2dlci5jb20vYmxvZ2dlci5nP2Jsb2dJRD02MjMy
ODE5NDg2MjYxNjk2MDM1I2VkaXRvci90YXJnZXQ9cG9zdDtwb3N0SUQ9NjgwNTE2MzU0ODgwOTEx
ODY2NiI+PGRpdiBkYXRhLWJsb2dnZXItZXNjYXBlZC1zdHlsZT0ibWFyZ2luOiAxLjJlbSAwcHgg
IWltcG9ydGFudDsiIHN0eWxlPSJtYXJnaW46IDEuMmVtIDBweDsiPjxwPlRoZSBmaXJzdCBldmVy
IFtSU3R1ZGlvIGNvbmZlcmVuY2VdKGh0dHBzOi8vd3d3LnJzdHVkaW8uY29tL2NvbmZlcmVuY2Uv
KSB3YXMgaGVsZCBKYW51YXJ5IDExLTE0LCAyMDE3IGluIE9ybGFuZG8sIEZMLiBGb3IgYW55b25l
IGVsc2UgbGlrZSBtZSB3aG8gc3BlbmRzIGhvdXJzIGVhY2ggd29ya2luZyBkYXkgc3RhcmluZyBp
bnRvIGFuIFJTdHVkaW8gc2Vzc2lvbiwgdGhlIGNvbmZlcmVuY2Ugd2FzIHRydWx5IF9leGNlbGxl
bnRfLiBUaGUgW3NwZWFrZXIgbGluZXVwXShodHRwczovL3d3dy5yc3R1ZGlvLmNvbS9jb25mZXJl
bmNlLyNzcGVha2Vycykgd2FzIGRpdmVyc2UgYW5kIGNvdmVyZWQgbG90cyBvZiBhcmVhcyByZWxh
dGVkIHRvIGRldmVsb3BtZW50IGluIFIsIGluY2x1ZGluZyB0aGUgdGlkeXZlcnNlLCB0aGUgUlN0
dWRpbyBJREUsIFNoaW55LCBodG1sd2lkZ2V0cywgYW5kIGF1dGhvcmluZyB3aXRoIFJNYXJrZG93
bi4mbmJzcDs8L3A+PHA+PGJyPjwvcD48cD5UaGlzIGlzIF9ub3RfIGEgY29tcGxldGUgbGlzdCBi
eSBhbnkgbWVhbnMgLS0gd2l0aCBzcGxpdCBzZXNzaW9ucyBJIGNvdWxkIG9ubHkgZ28gdG8gaGFs
ZiB0aGUgdGFsa3MgYXQgbW9zdC4gSGVyZSBhcmUgc29tZSBub25jb21wcmVoZW5zaXZlIG5vdGVz
IGFuZCBsaW5rcyB0byBzbGlkZXMgYW5kIHJlc291cmNlcyBmb3Igc29tZSBvZiB0aGUgYXdlc29t
ZSB0aGluZ3MgYXJlIGRvaW5nIHdpdGggUiBhbmQgUlN0dWRpbyB0aGF0IEkgbGVhcm5lZCBhYm91
dCBhdCB0aGUgUlN0dWRpbyBDb25mZXJlbmNlLjwvcD48cD48YnI+PC9wPjxwPi0tLS08L3A+PHA+
PGJyPjwvcD48cD4qKkhhZGxleSBXaWNraGFtKioga2lja2VkIG9mZiB0aGUgbWVldGluZyB3aXRo
IGEga2V5bm90ZSBvbiAqKmRvaW5nIGRhdGEgc2NpZW5jZSBpbiBSKiouIFRoZSB0YWxrIGZvY3Vz
ZWQgb24gdGhlICoqW3RpZHl2ZXJzZV0oaHR0cDovL3RpZHl2ZXJzZS5vcmcvKSoqLCBhbmQgdGhl
IG5vdGlvbiBvZiBzcGxpdHRpbmcgZnVuY3Rpb25zIGludG8gX2NvbW1hbmRzXyB0aGF0IF9kbyBz
b21ldGhpbmdfLCBhcyBjb21wYXJlZCB0byBfcXVlcmllc18gdGhhdCBfY2FsY3VsYXRlIHNvbWV0
aGluZ18sIGFuZCBob3cgaXQncyBnZW5lcmFsbHkgYSBnb29kIGlkZWEgdG8ga2VlcCB0aGVzZSBk
aWZmZXJlbnQgZnVuY3Rpb25hbHRpZXMgY29udGFpbmVkIGluIHRoZWlyIG93biBzZXBhcmF0ZSBm
dW5jdGlvbnMuIChDb250cmFzdCB0aGlzIHRvIHRoaW5ncyBsaWtlIGBsbWAgdGhhdCBib3RoIGNv
bXB1dGVzIHZhbHVlcyBhbmQgZG9lcyB0aGluZ3MsIGxpa2UgcHJpbnRpbmcgdGhvc2UgdmFsdWVz
IHRvIHRoZSBzY3JlZW4sIG1ha2luZyBpdCBkaWZmaWN1bHQgdG8gY2FwdHVyZSAoc2VlIFticm9v
bV0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2Jyb29tL2luZGV4Lmh0
bWwpKS4mbmJzcDs8L3A+PHA+PGJyPjwvcD48cD5JIGFza2VkIEhhZGxleSBhZnRlciBoaXMgdGFs
ayBhYm91dCBzdHJhdGVnaWVzIHRvIHJlZHVjZSBpc3N1ZXMgZ2V0dGluZyBCaW9jb25kdWN0b3Ig
ZGF0YSBzdHJ1Y3R1cmVzIHRvIHBsYXkgbmljZWx5IHdpdGggdGlkeXZlcnNlIHRvb2xzLiBXaXRo
aW4gbWludXRlcyAqKltEYXZpZCBSb2JpbnNvbl0oaHR0cHM6Ly90d2l0dGVyLmNvbS9kcm9iKSoq
IHJlbGVhc2VkIGEgbmV3IGZlYXR1cmUgaW4gdGhlICoqW2Z1enp5am9pbiBwYWNrYWdlXShodHRw
czovL2dpdGh1Yi5jb20vZGdydHdvL2Z1enp5am9pbikqKiB0aGF0IGxldmVyYWdlcyBJUmFuZ2Vz
IHdpdGhpbiB0aGlzIHRpZHl2ZXJzZS1mcmllbmRseSBwYWNrYWdlIGZvciBlZmZpY2llbnRseSBk
b2luZyB0aGluZ3MgbGlrZSBqb2luaW5nIG9uIGdlbm9taWMgaW50ZXJ2YWxzLjwvcD48cD48YnI+
PC9wPjxwPiZsdDtibG9ja3F1b3RlIGNsYXNzPSJ0d2l0dGVyLXR3ZWV0IiBkYXRhLWNvbnZlcnNh
dGlvbj0ibm9uZSIgZGF0YS1jYXJkcz0iaGlkZGVuIiBkYXRhLXBhcnRuZXI9InR3ZWV0ZGVjayIm
Z3Q7Jmx0O3AgbGFuZz0iZW4iIGRpcj0ibHRyIiZndDtBbm90aGVyICZsdDthIGhyZWY9Imh0dHBz
Oi8vdHdpdHRlci5jb20vaGFzaHRhZy9yc3R1ZGlvY29uZj9zcmM9aGFzaCImZ3Q7I3JzdHVkaW9j
b25mJmx0Oy9hJmd0Oy1pbnNwaXJlZCBhZGRpdGlvbiB0byBmdXp6eWpvaW46Jmx0O2JyJmd0OyZs
dDticiZndDtnZW5vbWVfam9pbiwgZm9yIG92ZXJsYXBwaW5nIGludGVydmFscyBvbiB0aGUgc2Ft
ZSBjaHJvbW9zb21lJmx0O2EgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9nZW5ldGljc19ibG9n
IiZndDtAZ2VuZXRpY3NfYmxvZyZsdDsvYSZndDsgJmx0O2EgaHJlZj0iaHR0cHM6Ly90d2l0dGVy
LmNvbS9oYXNodGFnL3JzdGF0cz9zcmM9aGFzaCImZ3Q7I3JzdGF0cyZsdDsvYSZndDsgJmx0O2Eg
aHJlZj0iaHR0cHM6Ly90LmNvL29VY3R5TlljMDkiJmd0O3BpYy50d2l0dGVyLmNvbS9vVWN0eU5Z
YzA5Jmx0Oy9hJmd0OyZsdDsvcCZndDsmYW1wO21kYXNoOyBEYXZpZCBSb2JpbnNvbiAoQGRyb2Ip
ICZsdDthIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vZHJvYi9zdGF0dXMvODIwMDU0MzEzOTA5
Mjg0ODY1IiZndDtKYW51YXJ5IDEzLCAyMDE3Jmx0Oy9hJmd0OyZsdDsvYmxvY2txdW90ZSZndDs8
L3A+PHA+Jmx0O3NjcmlwdCBhc3luYyBzcmM9Ii8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0
cy5qcyIgY2hhcnNldD0idXRmLTgiJmd0OyZsdDsvc2NyaXB0Jmd0OzwvcD48cD48YnI+PC9wPjxw
PioqW0NoYXJsb3R0ZSBXaWNraGFtJ3NdKGh0dHBzOi8vdHdpdHRlci5jb20vQ1ZXaWNraGFtLykq
KiAyLWhvdXIgKipwdXJyciB0dXRvcmlhbCoqIHdhcyBhd2Vzb21lLiBbSGVyZSdzIGEgbGlua10o
aHR0cDovL2JpdC5seS9wdXJyci1yc3R1ZGlvY29uZikgdG8gYSBzaGFyZWQgZHJvcGJveCBmb2xk
ZXIgd2l0aCBjb2RlLCBjaGFsbGVuZ2VzLCBzbGlkZXMsIGRhdGEsIGV0Yy4gVGhlIFtwdXJyciBw
YWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vaGFkbGV5L3B1cnJyI3JlYWRtZSkgaXMgYSBjb3Jl
IHBhY2thZ2UgaW4gdGhlIHRpZHl2ZXJzZSwgYW5kIEknbGwgYmUgcmVwbGFjaW5nIG1hbnkgb2Yg
dGhlIGJhc2UgYD9hcHBseWAgYW5kIHBseXIgYD8/cGx5YCBmdW5jdGlvbnMgdGhhdCBJIHN0aWxs
IHVzZSBoZXJlIGFuZCB0aGVyZS4gVGhlIGBtYXBfKmAgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhbCB0
byB3b3JraW5nIHdpdGggbmVzdGVkIGxpc3QtY29sdW1ucyBpbiBkcGx5ciwgYW5kIEkgdGhpbmsg
SSdtIGZpbmFsbHkgc3RhcnRpbmcgdG8gZ3JvayBob3cgdG8gd29yayB3aXRoIHRoZXNlLjwvcD48
cD48YnI+PC9wPjxwPioqW0plbm55IEJyeWFuXShodHRwczovL3R3aXR0ZXIuY29tL0plbm55QnJ5
YW4pKiogZ2F2ZSBhIGdyZWF0IHRhbGsgb24gKipsaXN0IGNvbHVtbnMqKi4gWW91IGNhbiBzZWUg
aGVyIFtzbGlkZXMgaGVyZV0oaHR0cHM6Ly9zcGVha2VyZGVjay5jb20vamVubnliYy9wdXR0aW5n
LXNxdWFyZS1wZWdzLWluLXJvdW5kLWhvbGVzLXVzaW5nLWxpc3QtY29scy1pbi15b3VyLWRhdGFm
cmFtZSkuIEplbm55IGFsc28gcHV0IHRvZ2V0aGVyIFt0aGlzIGV4Y2VsbGVudCB0dXRvcmlhbF0o
aHR0cHM6Ly9qZW5ueWJjLmdpdGh1Yi5pby9wdXJyci10dXRvcmlhbC8pIHdpdGggbG90cyBvZiB3
b3JrZWQgZXhhbXBsZXMgYW5kIGNvZGUgc25pcHBldHMuIEFuZCBpZiB5b3UgbmVlZCBzb21lIGV4
YW1wbGUgbGlzdCBkYXRhIHN0cnVjdHVyZXMgZm9yIG1vcmUgcHJhY3RpY2Ugb3IgZm9yIHRlYWNo
aW5nIHRoYXQgYXJlbid0IGZvby9iYXIvaXJpcy9tdGNhcnMtbGV2ZWwgYm9yaW5nLCBzZWUgaGVy
IFtyZXB1cnJyc2l2ZSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vamVubnliYy9yZXB1cnJy
c2l2ZSkuIFJlbGF0ZWQgdG8gdGhpcywgZm9yIG1vcmUgb24gbGlzdCBjb2x1bW5zIGFuZCBwdXJy
ciBtYXAgZnVuY3Rpb25zLCBzdGFydCByZWFkaW5nIGF0IHRoZSBbIk1hbnkgTW9kZWxzIiBzZWN0
aW9uIG9mIEhhZGxleSdzIF9SIGZvciBEYXRhIFNjaWVuY2VfIGJvb2tdKGh0dHA6Ly9yNGRzLmhh
ZC5jby5uei9tYW55LW1vZGVscy5odG1sKS48L3A+PHA+PGJyPjwvcD48cD4qKltKdWxpYSBTaWxn
ZV0oaHR0cHM6Ly90d2l0dGVyLmNvbS9qdWxpYXNpbGdlKSoqLCBkYXRhIHNjaWVudGlzdCBhdCBT
dGFjayBPdmVyZmxvdywgZ2F2ZSBhIGdyZWF0IGludHJvZHVjdGlvbiB0byB0aWR5IHRleHQgbWlu
aW5nIHdpdGggUi4gWW91IGNhbiByZWFkIEp1bGlhIGFuZCBEYXZpZCdzIFtfVGlkeSBUZXh0IE1p
bmluZyB3aXRoIFJfIGJvb2sgaGVyZSBvbmxpbmVdKGh0dHA6Ly90aWR5dGV4dG1pbmluZy5jb20v
KSAodGhlIGJvb2sgd2FzIGF1dGhvcmVkIGluIFJtYXJrZG93biB1c2luZyBib29rZG93biEpLjwv
cD48cD48YnI+PC9wPjxwPioqW0FuZHJldyBGbG93ZXJzXShodHRwczovL3R3aXR0ZXIuY29tL2Fu
ZHJld2Zsb3dlcnMpKiosIGRhdGEgam91cm5hbGlzdCBhbmQgZm9ybWVyIFt3cml0ZXIgYXQgRml2
ZVRoaXJ0eUVpZ2h0XShodHRwczovL2ZpdmV0aGlydHllaWdodC5jb20vY29udHJpYnV0b3JzL2Fu
ZHJldy1mbG93ZXJzLykgZ2F2ZSB0aGUgc2Vjb25kIGRheSdzIGtleW5vdGUgYWRkcmVzcyBvbiBm
aW5kaW5nIGFuZCB0ZWxsaW5nIHN0b3JpZXMgdXNpbmcgUi4gSGUgZ2F2ZSBhIHNlcmllcyBvZiBl
eGFtcGxlcyBpbGx1c3RyYXRpbmcgc2l4IG1vdGl2YXRpbmcgZmVhdHVyZXMgdGhhdCBtYWtlIGRh
dGEgc3RvcmllcyB3b3J0aCB0ZWxsaW5nLCBhbG9uZyB3aXRoIHBvdGVudGlhbCBkYW5nZXIgaW5o
ZXJlbnQgdG8gZWFjaCBvbmU6PC9wPjxwPjxicj48L3A+PHA+MS4gTm92ZWx0eSBfKHBvdGVudGlh
bCBkYW5nZXI6IHRyaXZpYWxpdHkpXzwvcD48cD4yLiBPdXRsaWVyIF8oc3B1cmlvdXMgcmVzdWx0
OyBzZWUgYWxzbywgcC1oYWNraW5nKV88L3A+PHA+My4gQXJjaGV0eXBlIF8ob3ZlcnNpbXBsaWZp
Y2F0aW9uKV88L3A+PHA+NC4gVHJlbmQgXyh2YXJpYW5jZSlfPC9wPjxwPjUuIERlYnVua2luZyBf
KGNvbmZpcm1hdGlvbiBiaWFzKV88L3A+PHA+Ni4gRm9yZWNhc3QgXyhvdmVyZml0dGluZylfPC9w
PjxwPjxicj48L3A+PHA+KipbWWlodWkgWGllXShodHRwczovL3R3aXR0ZXIuY29tL3hpZXlpaHVp
KSoqIGxlZCBhIHR3by1ob3VyIHR1dG9yaWFsIG9uICoqYWR2YW5jZWQgUk1hcmtkb3duKiouIFlv
dSBjYW4gc2VlIGhpcyBbc2xpZGVzIGhlcmVdKGh0dHBzOi8vc2xpZGVzLnlpaHVpLm5hbWUvMjAx
Ny1yc3R1ZGlvLWNvbmYtcm1hcmtkb3duLVlpaHVpLVhpZS5odG1sKS4gVGhlIFtydGljbGVzIHBh
Y2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL3J0aWNsZXMpIGhhcyBMYVRlWCBKb3Vy
bmFsIEFydGljbGUgVGVtcGxhdGVzIGZvciBSIE1hcmtkb3duIGZvciB2YXJpb3VzIGpvdXJuYWxz
LiBUaGUgW3R1ZnRlIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL3R1ZnRlKSBu
b3cgc3VwcG9ydHMgYm90aCBQREYgYW5kIEhUTUwgb3V0cHV0LiBTZWUgYW4gW2V4YW1wbGUgaGVy
ZV0oaHR0cDovL3JzdHVkaW8uZ2l0aHViLmlvL3R1ZnRlLykuIFlpaHVpJ3MgW3hhcmluZ2FuIHBh
Y2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS95aWh1aS94YXJpbmdhbikgcG9ydHMgdGhlIFtyZW1h
cmsuanNdKGh0dHBzOi8vcmVtYXJranMuY29tLykgbGlicmFyeSBmb3Igc2xpZGVzaG93cyBpbnRv
IFIuIENhcmVmdWwuIFlpaHVpIHdhcm5zIHRoYXQgeW91IG1heSBub3Qgc2xlZXAgYWZ0ZXIgbGVh
cm5pbmcgYWJvdXQgaG93IGNvb2wgcmVtYXJrLmpzIGlzLiBZaWh1aSBzaG93ZWQgYW4gZWFybHkg
dmVyc2lvbiBvZiB0aGUgaW4tZGV2ZWxvcG1lbnQgW2Jsb2dkb3duIHBhY2thZ2VdKGh0dHBzOi8v
Z2l0aHViLmNvbS9yc3R1ZGlvL2Jsb2dkb3duKSB0aGF0IGNhbiBidWlsZCBibG9nLWF3YXJlIHN0
YXRpYyB3ZWJzaXRlcyB1c2luZyB0aGUgYmxhemluZy1mYXN0IGFuZCB3ZWxsLWRvY3VtZW50ZWQg
W0h1Z29dKGh0dHA6Ly9nb2h1Z28uaW8vKSBzdGF0aWMgc2l0ZSBnZW5lcmF0b3IuIEZpbmFsbHks
IHRoZSAqKltib29rZG93biBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9ib29r
ZG93bikqKiBpcyBqdXN0IGF3ZXNvbWUuIEl0IHRha2VzIG11bHRpcGxlIFJNYXJrZG93biBkb2N1
bWVudHMgYXMgaW5wdXQgYW5kIHJlbmRlcnMgaW50byBtdWx0aXBsZSBvdXRwdXQgZm9ybWF0cyAo
c2NyZWVuLXJlYWRhYmxlIGVib29rLCBQREYsIGVwdWIsIGV0Yy4pLiBJdCBsb29rcyBncmVhdCBm
b3Igd3JpdGluZyBib29rcyBhbmQgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24gd2l0aCBwdXNoYnV0
dG9uIHB1Ymxpc2hpbmcgdG8gbXVsdGlwbGUgb3V0cHV0IGZvcm1hdHMgd2l0aCBzb21lIG5pY2Ug
YnVpbHQtaW4gc3R5bGVzIG91dCBvZiB0aGUgYm94LiBTb21lIGV4YW1wbGVzOjwvcD48cD48YnI+
PC9wPjxwPi0gW2Jvb2tkb3duLm9yZy95aWh1aS9ib29rZG93bl0oaHR0cHM6Ly9ib29rZG93bi5v
cmcveWlodWkvYm9va2Rvd24vKSAtLSBUaGUgYm9va2Rvd24gYm9vaywgd3JpdHRlbiBpbiBSTWFy
a2Rvd24gd2l0aCBib29rZG93bi4gXyh3aG9hLCBtZXRhKV88L3A+PHA+LSBbcjRkcy5oYWQuY28u
bnpdKGh0dHA6Ly9yNGRzLmhhZC5jby5uei8pIC0tIEdhcnJldHQgR3JvbGVtdW5kIGFuZCBIYWRs
ZXkgV2lja2hhbSdzIF9SIGZvciBEYXRhIFNjaWVuY2VfIGJvb2suPC9wPjxwPi0gW3RpZHl0ZXh0
bWluaW5nLmNvbV0oaHR0cDovL3RpZHl0ZXh0bWluaW5nLmNvbS8pIC0tIEp1bGlhIGFuZCBEYXZp
ZCdzIGJvb2sgb24gdGV4dCBtaW5pbmc8L3A+PHA+LSBbbW9kZXJuZGl2ZS5jb21dKGh0dHA6Ly9t
b2Rlcm5kaXZlLmNvbSkgLS0gYW4gb3Blbi1zb3VyY2UgaW50cm9kdWN0b3J5IHN0YXRpc3RpY3Mg
Y2xhc3MgdGV4dGJvb2s8L3A+PHA+PGJyPjwvcD48cD5GaW5hbGx5LCBhIGZldyBnZW1zIGZyb20g
b3RoZXIgdGFsa3MgdGhhdCBJIGpvdHRlZCBkb3duOjwvcD48cD48YnI+PC9wPjxwPi0gKipbQ2hl
c3RlciBJc21heV0oaHR0cHM6Ly90d2l0dGVyLmNvbS9vbGRfbWFuX2NoZXN0ZXIpKiogZ2F2ZSBh
IGdyZWF0IHRhbGsgb24gdGVhY2hpbmcgaW50cm9kdWN0b3J5IHN0YXRpc3RpY3MgdXNpbmcgUiwg
d2l0aCB0aGUgW29wZW4tc291cmNlIGNvdXJzZSB0ZXh0Ym9va10oaHR0cDovL21vZGVybmRpdmUu
Y29tKSB3cml0dGVuIGluIFJNYXJrZG93biB1c2luZyBib29rZG93bi48L3A+PHA+LSAqKltCb2Ig
UnVkaXNdKGh0dHBzOi8vdHdpdHRlci5jb20vaHJicm1zdHIpKiogdGFsa2VkIGFib3V0IHVzaW5n
IHBpcGVzIChgJSZndDslYCksIGFuZCBwaXBlcyB3aXRoaW4gcGlwZXMsIGFuZCBiZXN0IHBpcGlu
ZyBwcmFjdGljZXMuIFNlZSBoaXMgW3NsaWRlcyBoZXJlXShodHRwczovL3R3aXR0ZXIuY29tL2hy
YnJtc3RyKS48L3A+PHA+LSAqKltIaWxhcnkgUGFya2VyXShodHRwczovL3R3aXR0ZXIuY29tL2hz
cHRlcikqKiB0YWxrZWQgYWJvdXQgdGhlIGlkZWEgb2YgYW4gX2FuYWx5c2lzIGRldmVsb3BtZW50
XywgKGFuZCBhbmFseXNpcyBkZXZlbG9wZXJzKSwgZHJhd2luZyBzaW1pbGFyaXRpZXMgdG8gc29m
dHdhcmUgZGV2ZWxvcG1lbnQvZGV2ZWxvcGVycy4gSGlsYXJ5IGRpc2N1c3NlZCB0aGlzIG9uY2Ug
YmVmb3JlIG9uIHRoZSBleGNlbGxlbnQgW3BvZGNhc3RdKGh0dHBzOi8vc291bmRjbG91ZC5jb20v
bnNzZC1wb2RjYXN0KSB0aGF0IHNoZSBhbmQgUm9nZXIgUGVuZyBob3N0LCBhbmQgeW91IGNhbiBw
cm9iYWJseSBmaW5kIGl0IGluIHRoZWlyIF9bQ29udmVyc2F0aW9ucyBPbiBEYXRhIFNjaWVuY2Vd
KGh0dHBzOi8vbGVhbnB1Yi5jb20vY29udmVyc2F0aW9uc29uZGF0YXNjaWVuY2UvKV8gZWJvb2sg
dGhhdCBzdW1tYXJpemUgYW5kIHRyYW5zY3JpYmUgdGhlc2UgY29udmVyc2F0aW9ucy48L3A+PHA+
LSAqKltTaW1vbiBKYWNrc29uXShodHRwczovL3R3aXR0ZXIuY29tL2Ryc2ltb25qKSoqIGludHJv
ZHVjZWQgKipbY29ycnIgcGFja2FnZV0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3Bh
Y2thZ2VzL2NvcnJyL3ZpZ25ldHRlcy91c2luZy1jb3Jyci5odG1sKSoqIGZvciBleHBsb3Jpbmcg
YW5kIG1hbmlwdWxhdGluZyBjb3JyZWxhdGlvbnMgYW5kIGNvcnJlbGF0aW9uIG1hdHJpY2VzIGlu
IGEgdGlkeSB3YXkuPC9wPjxwPi0gKipbR29yZG9uIFNob3R3ZWxsXShodHRwczovL3R3aXR0ZXIu
Y29tL2dzaG90d2VsbCkqKiBpbnRyb2R1Y2VkIHRoZSAqKltlYXN5bWFrZV0oaHR0cHM6Ly9naXRo
dWIuY29tL0dTaG90d2VsbC9lYXN5TWFrZSkqKiBwYWNrYWdlIHRoYXQgZ2VuZXJhdGVzIE1ha2Vm
aWxlcyBmcm9tIGEgZGF0YSBmcmFtZSB1c2luZyBSLjwvcD48cD4tICoqW0thcnRoaWsgUmFtXSho
dHRwczovL3R3aXR0ZXIuY29tL19pbnVuZGF0YSkqKiBxdWlja2x5IGludHJvZHVjZWQgc2V2ZXJh
bCBvZiB0aGUgKG1hbnkpICoqW3JPcGVuU2NpIHBhY2thZ2VzXShodHRwczovL3JvcGVuc2NpLm9y
Zy9wYWNrYWdlcy8pKiogcmVsYXRlZCB0byBkYXRhIHB1YmxpY2F0aW9uLCBkYXRhIGFjY2Vzcywg
c2NpZW50aWZpYyBsaXRlcmF0dXJlIGFjY2Vzcywgc2NhbGFibGUgJmFtcDsgcmVwcm9kdWNpYmxl
IGNvbXB1dGluZywgZGF0YWJhc2VzLCB2aXN1YWxpemF0aW9uLCB0YXhvbm9teSwgZ2Vvc3BhdGlh
bCBhbmFseXNpcywgYW5kIG1hbnkgdXRpbGl0eSB0b29scyBmb3IgZGF0YSBhbmFseXNpcyBhbmQg
bWFuaXB1bGF0aW9uLjwvcD48cD48YnI+PC9wPjxwPi0tLS08L3A+PHA+PGJyPjwvcD48cD5XaXRo
IHNwbGl0IHNlc3Npb25zIEkgbWlzc2VkIG1vcmUgdGhhbiBoYWxmIHRoZSB0YWxrcy4gTG90cyBv
ZiBwZW9wbGUgaGVyZSBhcmUgYWN0aXZlIG9uIFR3aXR0ZXIsIGFuZCB5b3UgY2FuIGNhdGNoIG1h
bnkgbW9yZSBub3RlcyBhbmQgdGlkYml0cyBvbiB0aGUgWyNyc3R1ZGlvY29uZl0oaHR0cHM6Ly90
d2l0dGVyLmNvbS9zZWFyY2g/cT0lMjNyc3R1ZGlvY29uZikgaGFzaHRhZy4gVGhlIG1lZXRpbmcg
d2FzIHN1cGVyYmx5IG9yZ2FuaXplZCwgSSBsZWFybmVkIGEgdG9uLCBhbmQgSSBlbmpveWVkIG1l
ZXRpbmcgaW4gcGVyc29uIG1hbnkgb2YgdGhlIGZvbGtzIEkgZm9sbG93IG9uIFR3aXR0ZXIgYW5k
IGVsc2V3aGVyZSBvbmxpbmUuIEEgZmV3IGRheXMgb2YgODAtZGVncmVlIHdlYXRoZXIgaW4gbWlk
LUphbnVhcnkgZGlkbid0IGh1cnQgZWl0aGVyLiBJJ2xsIGRlZmluaXRlbHkgYmUgY29taW5nIGFn
YWluIG5leHQgeWVhci4gS3Vkb3MgdG8gdGhlIHJzdHVkaW86OmNvbmYgb3JnYW5pemVycyBhbmQg
c3BlYWtlcnMhPC9wPjxwPjxicj48L3A+PHA+QWxsIHRoZSB0YWxrcyB3ZXJlIHJlY29yZGVkIGFu
ZCB3aWxsIHN1cHBvc2VkbHkgZmluZCB0aGVpciB3YXkgdG8gW3JzdHVkaW8uY29tXShodHRwczov
L3d3dy5yc3R1ZGlvLmNvbS8pIGF0IHNvbWUgcG9pbnQgc29vbi4gSSdsbCB1cGRhdGUgdGhpcyBw
b3N0IHdpdGggYSBsaW5rIHdoZW4gdGhhdCBoYXBwZW5zLjwvcD48L2Rpdj48L2Rpdj4=">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com1tag:blogger.com,1999:blog-6232819486261696035.post-10699358064434758212016-09-19T09:20:00.001-05:002016-09-19T09:20:58.743-05:00Primers in computational biologyI recently stumbled across this <a href="http://www.nature.com/nbt/collections/compbio/index.html" target="_blank">collection</a> of computational biology primers in Nature Biotechnology. Many of these are old, but they're still great resources to get a fundamental understanding of the topic. Here they are in no particular order.<br />
<br />
...<br />
<br />
<b>How does multiple testing correction work?</b><br />
<a href="http://www.nature.com/nbt/journal/v27/n12/full/nbt1209-1135.html">http://www.nature.com/nbt/journal/v27/n12/full/nbt1209-1135.html</a><br />
<br />
<b>What is principal component analysis?</b><br />
<a href="http://www.nature.com/nbt/journal/v26/n3/full/nbt0308-303.html">http://www.nature.com/nbt/journal/v26/n3/full/nbt0308-303.html</a><br />
<br />
<b>SNP imputation in association studies</b><br />
<a href="http://www.nature.com/nbt/journal/v27/n4/full/nbt0409-349.html">http://www.nature.com/nbt/journal/v27/n4/full/nbt0409-349.html</a><br />
<br />
<b>How does gene expression clustering work?</b><br />
<a href="http://www.nature.com/nbt/journal/v23/n12/full/nbt1205-1499.html">http://www.nature.com/nbt/journal/v23/n12/full/nbt1205-1499.html</a><br />
<br />
<b>What is a hidden Markov model?</b><br />
<a href="http://www.nature.com/nbt/journal/v22/n10/full/nbt1004-1315.html">http://www.nature.com/nbt/journal/v22/n10/full/nbt1004-1315.html</a><br />
<br />
<b>What is a support vector machine?</b><br />
<a href="http://www.nature.com/nbt/journal/v24/n12/full/nbt1206-1565.html">http://www.nature.com/nbt/journal/v24/n12/full/nbt1206-1565.html</a><br />
<div>
<br /></div>
<div>
<b>What is the expectation maximization algorithm?</b><br />
<a href="http://www.nature.com/nbt/journal/v26/n8/full/nbt1406.html">http://www.nature.com/nbt/journal/v26/n8/full/nbt1406.html</a></div>
<div>
<br /></div>
<b>Where did the BLOSUM62 alignment score matrix come from?</b><br />
<a href="http://www.nature.com/nbt/journal/v22/n8/full/nbt0804-1035.html">http://www.nature.com/nbt/journal/v22/n8/full/nbt0804-1035.html</a><br />
<br />
<b>What are DNA sequence motifs?</b><br />
<a href="http://www.nature.com/nbt/journal/v24/n4/full/nbt0406-423.html">http://www.nature.com/nbt/journal/v24/n4/full/nbt0406-423.html</a><br />
<br />
<b>How does DNA sequence motif discovery work?</b><br />
<a href="http://www.nature.com/nbt/journal/v24/n8/full/nbt0806-959.html">http://www.nature.com/nbt/journal/v24/n8/full/nbt0806-959.html</a><br />
<br />
<b>What are decision trees?</b><br />
<a href="http://www.nature.com/nbt/journal/v26/n9/full/nbt0908-1011.html">http://www.nature.com/nbt/journal/v26/n9/full/nbt0908-1011.html</a><br />
<br />
<b>What is dynamic programming?</b><br />
<a href="http://www.nature.com/nbt/journal/v22/n7/full/nbt0704-909.html">http://www.nature.com/nbt/journal/v22/n7/full/nbt0704-909.html</a><br />
<br />
<b>What is Bayesian statistics?</b><br />
<a href="http://www.nature.com/nbt/journal/v22/n9/full/nbt0904-1177.html">http://www.nature.com/nbt/journal/v22/n9/full/nbt0904-1177.html</a><br />
<br />
<b>What are artificial neural networks?</b><br />
<a href="http://www.nature.com/nbt/journal/v26/n2/full/nbt1386.html">http://www.nature.com/nbt/journal/v26/n2/full/nbt1386.html</a><br />
<br />
<b>How does eukaryotic gene prediction work?</b><br />
<a href="http://www.nature.com/nbt/journal/v25/n8/full/nbt0807-883.html">http://www.nature.com/nbt/journal/v25/n8/full/nbt0807-883.html</a><br />
<br />
<b>How to map billions of short reads onto genomes</b><br />
<a href="http://www.nature.com/nbt/journal/v27/n5/full/nbt0509-455.html">http://www.nature.com/nbt/journal/v27/n5/full/nbt0509-455.html</a><br />
<br />
<b>How to apply de Bruijn graphs to genome assembly</b><br />
<a href="http://www.nature.com/nbt/journal/v29/n11/full/nbt.2023.html">http://www.nature.com/nbt/journal/v29/n11/full/nbt.2023.html</a><br />
<br /><div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com0tag:blogger.com,1999:blog-6232819486261696035.post-83780385762251778612016-06-30T13:22:00.001-05:002016-06-30T13:22:52.809-05:00Syntax Highlight Code in Keynote or Powerpoint<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=8378038576225177861;onPublishedMenu=editor;onClosedMenu=editor;postNum=0;src=link" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
I came across <a href="https://gist.github.com/jimbojsb/1630790">this awesome gist</a> explaining how to syntax highlight code in Keynote. The same trick works for Powerpoint. Mac only.</div>
<ol style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><a href="http://brew.sh/">Install homebrew</a> if you don’t have it already and <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">brew install highlight</code>.</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">highlight -O rtf myfile.ext | pbcopy</code> to highlight code to a formatted text converter in RTF output format, and copy the result to the system clipboard.</li>
<li style="margin: 0.5em 0px;">Paste into Keynote or Powerpoint.</li>
</ol>
<div style="margin: 1.2em 0px !important;">
If I’ve got some code in a file called <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">eset_pca.R</code>:</div>
<div style="margin: 1.2em 0px !important;">
<script src="https://gist.github.com/stephenturner/96a78f5146f085afb837d0bcc87bcb40.js"></script></div>
<div style="margin: 1.2em 0px !important;">
I can simply <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">highlight -O rtf eset_pca.R | pbcopy</code> and then paste it right into Keynote or Powerpoint.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT_4tb25QOl73-_Y7UeCzzOVwqN0XZfNt-u-lSLRXkwPKVp3r9jaMZR9Q8CDo58A7ZXZHz-L8liB3PHnZnrFWBglLpsW6Jk4vSi8fFCTMSUFw6qmxkPX9HbGRwb1PvFfmN7XToApklkhg/s1600/Screen+Shot+2016-06-30+at+2.18.40+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="476" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT_4tb25QOl73-_Y7UeCzzOVwqN0XZfNt-u-lSLRXkwPKVp3r9jaMZR9Q8CDo58A7ZXZHz-L8liB3PHnZnrFWBglLpsW6Jk4vSi8fFCTMSUFw6qmxkPX9HbGRwb1PvFfmN7XToApklkhg/s640/Screen+Shot+2016-06-30+at+2.18.40+PM.png" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PHA+SSBjYW1lIGFjcm9zcyBbdGhpcyBhd2Vzb21lIGdpc3RdKGh0dHBzOi8vZ2lzdC5naXRodWIu
Y29tL2ppbWJvanNiLzE2MzA3OTApIGV4cGxhaW5pbmcgaG93IHRvIHN5bnRheCBoaWdobGlnaHQg
Y29kZSBpbiBLZXlub3RlLiBUaGUgc2FtZSB0cmljayB3b3JrcyBmb3IgUG93ZXJwb2ludC4gTWFj
IG9ubHkuPC9wPjxwPjxicj48L3A+PHA+MS4gW0luc3RhbGwgaG9tZWJyZXddKGh0dHA6Ly9icmV3
LnNoLykgaWYgeW91IGRvbid0IGhhdmUgaXQgYWxyZWFkeSBhbmQgYGJyZXcgaW5zdGFsbCBoaWdo
bGlnaHRgLjwvcD48cD4yLiBgaGlnaGxpZ2h0IC1PIHJ0ZiBteWZpbGUuZXh0IHwgcGJjb3B5YCB0
byBoaWdobGlnaHQgY29kZSB0byBhIGZvcm1hdHRlZCB0ZXh0IGNvbnZlcnRlciBpbiBSVEYgb3V0
cHV0IGZvcm1hdCwgYW5kIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC48
L3A+PHA+My4gUGFzdGUgaW50byBLZXlub3RlIG9yIFBvd2VycG9pbnQuPC9wPjxwPjxicj48L3A+
PHA+SWYgSSd2ZSBnb3Qgc29tZSBjb2RlIGluIGEgZmlsZSBjYWxsZWQgYGVzZXRfcGNhLlJgOjwv
cD48cD48YnI+PC9wPjxwPjxicj48L3A+PHA+PGJyPjwvcD48cD5JIGNhbiBzaW1wbHkgYGhpZ2hs
aWdodCAtTyBydGYgZXNldF9wY2EuUiB8IHBiY29weWAgYW5kIENtZC1WIHJpZ2h0IGludG8gS2V5
bm90ZSBvciBQb3dlcnBvaW50LjwvcD48cD48YnI+PC9wPg==">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com0tag:blogger.com,1999:blog-6232819486261696035.post-91595156323529808312016-06-01T13:48:00.000-05:002016-06-01T13:48:50.776-05:00Covcalc: Shiny App for Calculating Coverage Depth or Read Counts for Sequencing Experiments<i>How many reads do I need? What's my sequencing depth?</i> These are common questions I get all the time. Calculating how much sequence data you need to hit a target depth of coverage, or the inverse, what's the coverage depth given a set amount of sequencing, are both easy to answer with some basic algebra. Given one or the other, plus the genome size and read length/configuration, you can calculate either. This was inspired by a <a href="http://core-genomics.blogspot.com/2016/05/how-many-reads-to-sequence-genome.html" target="_blank">similar calculator written by James Hadfield</a>, and was an opportunity for me to create my first <a href="http://shiny.rstudio.com/" target="_blank">Shiny</a> app.<br />
<br />
Check out the app here:<br />
<a href="http://apps.bioconnector.virginia.edu/covcalc/" target="_blank">http://apps.bioconnector.virginia.edu/covcalc/</a><br />
<br />
And the source code on GitHub:<br />
<a href="https://github.com/stephenturner/covcalc" target="_blank">https://github.com/stephenturner/covcalc</a><br />
<br />
Give it your read length, whether you're using single- or paired-end sequencing, select a genome or enter your own. Then, select whether you want to calculate (a) the number of reads you need to hit a target depth of coverage, or (b) the coverage depth you'll hit given a set number of sequencing reads. Once you make the selection, use the slider to adjust either the desired coverage or number of reads sequenced, and the output text below is automatically updated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpKEOxFlF2ziy-IWAEaebb1UMRLWxksIcsThyL7GhQpDsrjo5AtwW4UmUsrIum8Ein6WLX8X0naL4z8wjkqZuIrOb56sQ6yithX2_uJwKMqwPeTf7gAEn2hGFJ68pm37PSuyn5rbjN6DE/s1600/Screen+Shot+2016-06-01+at+2.39.36+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="618" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpKEOxFlF2ziy-IWAEaebb1UMRLWxksIcsThyL7GhQpDsrjo5AtwW4UmUsrIum8Ein6WLX8X0naL4z8wjkqZuIrOb56sQ6yithX2_uJwKMqwPeTf7gAEn2hGFJ68pm37PSuyn5rbjN6DE/s640/Screen+Shot+2016-06-01+at+2.39.36+PM.png" width="640" /></a></div>
<br />
<a href="http://apps.bioconnector.virginia.edu/covcalc/" target="_blank">Shiny App: Coverage / Read Count Calculator</a><div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com3tag:blogger.com,1999:blog-6232819486261696035.post-38109096909849949292016-02-05T11:17:00.000-06:002016-02-05T11:26:31.718-06:00Shiny Developer Conference 2016 Recap<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=3810909690984994929">
<!-- # Shiny Developer Conference Recap -->
<div style="margin: 1.2em 0px !important;">
<em>This is a guest post from <a href="https://github.com/vpnagraj">VP Nagraj</a>, a data scientist embedded within UVA’s Health Sciences Library, who runs our <a href="https://www.bioconnector.virginia.edu/dash">Data Analysis Support Hub (DASH)</a> service.</em></div>
<hr />
<div style="margin: 1.2em 0px !important;">
Last weekend I was fortunate enough to be able to participate in the <a href="http://blog.rstudio.org/2015/10/29/shiny-developer-conference-stanford-university-january-2016/">first ever Shiny Developer Conference hosted by RStudio at Stanford University</a>. I’ve built a handful of apps, and have taught an introductory workshop on Shiny. In spite of that, almost all of the presentations de-mystified at least one aspect of the <em>how</em>, <em>why</em> or <em>so what</em> of the framework. Here’s a recap of what resonated with me, as well as some code and links out to my attempts to put what I digested into practice.</div>
<h3 id="tl-dr" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
tl;dr</h3>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;">reactivity is a beast</li>
<li style="margin: 0.5em 0px;">javascript isn’t cheating</li>
<li style="margin: 0.5em 0px;">there are already a ton of shiny features … and more on the way</li>
</ul>
<h3 id="reactivity" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
reactivity</h3>
<div style="margin: 1.2em 0px !important;">
For me, understanding reactivity has been one of the biggest challenges to using Shiny … or at least to using Shiny <em>well</em>. But after > 3 hours of an <a href="https://cdn.rawgit.com/rstudio/reactivity-tutorial/master/slides.html#/">extensive (and really clear) presentation by Joe Cheng</a>, I think I’m finally starting to see what I’ve been missing. Here’s something in particular that stuck out to me:</div>
<blockquote style="border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 4px; color: #777777; margin: 1.2em 0px; padding: 0px 1em; quotes: none;">
<div style="margin: 1.2em 0px !important;">
<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">output$plot = renderPlot()</code> is not an <em>imperative</em> to the browser to do a <strong>what</strong> … it’s a <em>recipe</em> for <strong>how</strong> the browser should do something.</div>
</blockquote>
<div style="margin: 1.2em 0px !important;">
Shiny ‘render’ functions (e.g. <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">renderPlot()</code>, <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">renderText()</code>, etc) inherently depend on reactivity. What the point above emphasizes is that assignments to a reactive expression are not the same as assignments made in “regular” R programming. Reactive outputs depend on inputs, and subsequently change as those inputs are manipulated.</div>
<div style="margin: 1.2em 0px !important;">
If you want to watch how those changes happen in your own app, try adding <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">options(shiny.reactlog=TRUE)</code> to the top of your server script. When you run the app in a browser and press <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">COMMAND + F3</code> (or <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">CTRL + F3</code> on Windows) you’ll see a force directed network that outlines the connections between inputs and outputs.</div>
<div style="margin: 1.2em 0px !important;">
Another way to implement reactivity is with the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">reactive()</code> function.<br />For my apps, one of the pitfalls has been re-running the same code multiple times. That’s a perfect use-case for reactivity <em>outside</em> of the render functions.</div>
<div style="margin: 1.2em 0px !important;">
Here’s a trivial example:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(shiny)
ui = fluidPage(
numericInput(<span class="hljs-string">"threshold"</span>, <span class="hljs-string">"mpg threshold"</span>, value = <span class="hljs-number">20</span>),
plotOutput(<span class="hljs-string">"size"</span>),
textOutput(<span class="hljs-string">"names"</span>)
)
server = <span class="hljs-keyword">function</span>(input, output) {
output$size = renderPlot({
dat = subset(mtcars, mpg > input$threshold)
hist(dat$wt)
})
output$names = renderText({
dat = subset(mtcars, mpg > input$threshold)
rownames(dat)
})
}
shinyApp(ui = ui, server = server)
</code></pre>
<div style="margin: 1.2em 0px !important;">
The code above works … but it’s redundant. There’s no need to calculate the “dat” object separately in each render function.</div>
<div style="margin: 1.2em 0px !important;">
The code below does the same thing but stores “dat” in a reactive that is only calculated once.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(shiny)
ui = fluidPage(
numericInput(<span class="hljs-string">"threshold"</span>, <span class="hljs-string">"mpg threshold"</span>, value = <span class="hljs-number">20</span>),
plotOutput(<span class="hljs-string">"size"</span>),
textOutput(<span class="hljs-string">"names"</span>)
)
server = <span class="hljs-keyword">function</span>(input, output) {
dat = reactive({
subset(mtcars, mpg > input$threshold)
})
output$size = renderPlot({
hist(dat()$wt)
})
output$names = renderText({
rownames(dat())
})
}
shinyApp(ui = ui, server = server)
</code></pre>
<h3 id="javascript" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
javascript</h3>
<div style="margin: 1.2em 0px !important;">
For whatever reason I’ve been stuck on the idea that using JavaScript inside a Shiny app would be “cheating”. But Shiny is actually well equipped for extensions with JavaScript libraries. Several of the speakers leaned in on this idea. <a href="https://github.com/yihui">Yihui Xie</a> presented on the <a href="http://rstudio.github.io/DT/">DT</a> package, which is an interface to use features like client-side filtering from the DataTables library. And <a href="http://deanattali.com/">Dean Attali</a> demonstrated <a href="https://github.com/daattali/shinyjs">shinyjs</a>, a package that makes it really easy to incorporate JavaScript operations.</div>
<div style="margin: 1.2em 0px !important;">
Below is code for a <a href="http://apps.bioconnector.virginia.edu/game/">masterpiece</a> that that does some <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">hide()</code> and <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">show()</code>:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># https://apps.bioconnector.virginia.edu/game</span>
<span class="hljs-keyword">library</span>(shiny)
<span class="hljs-keyword">library</span>(shinyjs)
shinyApp(
ui = fluidPage(
titlePanel(actionButton(<span class="hljs-string">"start"</span>, <span class="hljs-string">"start the game"</span>)),
useShinyjs(),
hidden(actionButton(<span class="hljs-string">"restart"</span>, <span class="hljs-string">"restart the game"</span>)),
tags$h3(hidden(textOutput(<span class="hljs-string">"game_over"</span>)))
),
server = <span class="hljs-keyword">function</span>(input, output) {
output$game_over =
renderText({
<span class="hljs-string">"game over, man ... game over"</span>
})
observeEvent(input$start, {
show(<span class="hljs-string">"game_over"</span>, anim = <span class="hljs-literal">TRUE</span>, animType = <span class="hljs-string">"fade"</span>)
hide(<span class="hljs-string">"start"</span>)
show(<span class="hljs-string">"restart"</span>)
})
observeEvent(input$restart, {
hide(<span class="hljs-string">"game_over"</span>)
hide(<span class="hljs-string">"restart"</span>)
show(<span class="hljs-string">"start"</span>)
})
}
)
</code></pre>
<h3 id="everything-else" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
everything else</h3>
<h4 id="brushing" style="font-size: 1.2em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
brushing</h4>
<div style="margin: 1.2em 0px !important;">
<a href="http://shiny.rstudio.com/articles/plot-interaction.html">http://shiny.rstudio.com/articles/plot-interaction.html</a></div>
<div style="margin: 1.2em 0px !important;">
Adding a brush argument to <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">plotOutput()</code> let’s you click and drag to select a points on a plot. You can use this for “zooming in” on something like a time series plot. Here’s the <a href="https://github.com/vpnagraj/names">code</a> for an <a href="http://apps.bioconnector.virginia.edu/names/">app</a> I wrote based on data from the <a href="https://github.com/hadley/babynames">babynames</a> package - in this case the brush let’s you zoom to see name frequency over specific range of years.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># http://apps.bioconnector.virginia.edu/names/</span>
<span class="hljs-keyword">library</span>(shiny)
<span class="hljs-keyword">library</span>(ggplot2)
<span class="hljs-keyword">library</span>(ggthemes)
<span class="hljs-keyword">library</span>(babynames)
<span class="hljs-keyword">library</span>(scales)
options(scipen=<span class="hljs-number">999</span>)
ui = fluidPage(titlePanel(title = <span class="hljs-string">"names (1880-2012)"</span>),
textInput(<span class="hljs-string">"name"</span>, <span class="hljs-string">"enter a name"</span>),
actionButton(<span class="hljs-string">"go"</span>, <span class="hljs-string">"search"</span>),
plotOutput(<span class="hljs-string">"plot1"</span>, brush = <span class="hljs-string">"plot_brush"</span>),
plotOutput(<span class="hljs-string">"plot2"</span>),
htmlOutput(<span class="hljs-string">"info"</span>)
)
server = <span class="hljs-keyword">function</span>(input, output) {
dat = eventReactive(input$go, {
subset(babynames, tolower(name) == tolower(input$name))
})
output$plot1 = renderPlot({
ggplot(dat(), aes(year, prop, col=sex)) +
geom_line() +
xlim(<span class="hljs-number">1880</span>,<span class="hljs-number">2012</span>) +
theme_minimal() +
<span class="hljs-comment"># format labels with percent function from scales package</span>
scale_y_continuous(labels = percent) +
labs(list(title =<span class="hljs-string">"% of individuals born with name by year and gender"</span>,
x = <span class="hljs-string">"\n click-and-drag over the plot to 'zoom'"</span>,
y = <span class="hljs-string">""</span>))
})
output$plot2 = renderPlot({
<span class="hljs-comment"># need latest version of shiny to use req() function</span>
req(input$plot_brush)
brushed = brushedPoints(dat(), input$plot_brush)
ggplot(brushed, aes(year, prop, col=sex)) +
geom_line() +
theme_minimal() +
<span class="hljs-comment"># format labels with percent function from scales package</span>
scale_y_continuous(labels = percent) +
labs(list(title =<span class="hljs-string">"% of individuals born with name by year and gender"</span>,
x = <span class="hljs-string">""</span>,
y = <span class="hljs-string">""</span>))
})
output$info = renderText({
<span class="hljs-string">"data source: <a href="https://github.com/hadley/babynames">social security administration names from babynames package</a><br />
"</span>
})
}
shinyApp(ui, server)
</code></pre>
<h4 id="gadgets" style="font-size: 1.2em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
gadgets</h4>
<div style="margin: 1.2em 0px !important;">
<a href="http://shiny.rstudio.com/articles/gadgets.html">http://shiny.rstudio.com/articles/gadgets.html</a></div>
<div style="margin: 1.2em 0px !important;">
A relatively easy way to leverage Shiny reactivity for visual inspection and interaction with data <em>within</em> RStudio. The main difference here is that you’re using an abbreviated (or ‘mini’) ui. The advantage of this workflow is that you can include it in your script to make your analysis interactive. I modified the example in the documentation and wrote a <a href="https://gist.github.com/vpnagraj/31b39232d75cb29f52a8">basic brushing gadget that removes outliers</a>:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(shiny)
<span class="hljs-keyword">library</span>(miniUI)
<span class="hljs-keyword">library</span>(ggplot2)
outlier_rm = <span class="hljs-keyword">function</span>(data, xvar, yvar) {
ui = miniPage(
gadgetTitleBar(<span class="hljs-string">"Drag to select points"</span>),
miniContentPanel(
<span class="hljs-comment"># The brush="brush" argument means we can listen for</span>
<span class="hljs-comment"># brush events on the plot using input$brush.</span>
plotOutput(<span class="hljs-string">"plot"</span>, height = <span class="hljs-string">"100%"</span>, brush = <span class="hljs-string">"brush"</span>)
)
)
server = <span class="hljs-keyword">function</span>(input, output, session) {
<span class="hljs-comment"># Render the plot</span>
output$plot = renderPlot({
<span class="hljs-comment"># Plot the data with x/y vars indicated by the caller.</span>
ggplot(data, aes_string(xvar, yvar)) + geom_point()
})
<span class="hljs-comment"># Handle the Done button being pressed.</span>
observeEvent(input$done, {
<span class="hljs-comment"># create id for data</span>
data$id = <span class="hljs-number">1</span>:nrow(data)
<span class="hljs-comment"># Return the brushed points. See ?shiny::brushedPoints.</span>
p = brushedPoints(data, input$brush)
<span class="hljs-comment"># create vector of ids that match brushed points and data</span>
g = which(p$id %<span class="hljs-keyword">in</span>% data$id)
<span class="hljs-comment"># return a subset of the original data without brushed points</span>
stopApp(data[-g,])
})
}
runGadget(ui, server)
}
<span class="hljs-comment"># run to open plot viewer</span>
<span class="hljs-comment"># click and drag to brush</span>
<span class="hljs-comment"># press done return a subset of the original data without brushed points</span>
<span class="hljs-keyword">library</span>(gapminder)
outlier_rm(gapminder, <span class="hljs-string">"lifeExp"</span>, <span class="hljs-string">"gdpPercap"</span>)
<span class="hljs-comment"># you can also use the same method above but pass the output into a dplyr pipe syntax</span>
<span class="hljs-comment"># without the selection what is the mean life expectancy by country?</span>
<span class="hljs-keyword">library</span>(dplyr)
outlier_rm(gapminder, <span class="hljs-string">"lifeExp"</span>, <span class="hljs-string">"gdpPercap"</span>) %>%
group_by(country) %>%
summarise(mean(lifeExp))
</code></pre>
<h4 id="req-" style="font-size: 1.2em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
req()</h4>
<div style="margin: 1.2em 0px !important;">
<a href="http://shiny.rstudio.com/reference/shiny/latest/req.html">http://shiny.rstudio.com/reference/shiny/latest/req.html</a></div>
<div style="margin: 1.2em 0px !important;">
This solves the issue of requiring an input - I’m definitely going to use this so I don’t have to do the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">return(NULL)</code> work around:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># no need to do do this any more</span>
<span class="hljs-comment"># </span>
<span class="hljs-comment"># inFile = input$file1</span>
<span class="hljs-comment"># </span>
<span class="hljs-comment"># if (is.null(inFile))</span>
<span class="hljs-comment"># return(NULL)</span>
<span class="hljs-comment"># use req() instead</span>
req(input$file1)
</code></pre>
<h4 id="profvis" style="font-size: 1.2em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
profvis</h4>
<div style="margin: 1.2em 0px !important;">
<a href="http://rpubs.com/wch/123888">http://rpubs.com/wch/123888</a></div>
<div style="margin: 1.2em 0px !important;">
Super helpful method for digging into the call stack of your R code to see how you might optimize it. </div>
<div style="margin: 1.2em 0px !important;">
One or two seconds of processing can make a big difference, particularly for a Shiny app … </div>
<h3 id="rstudio-connect" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
rstudio connect</h3>
<div style="margin: 1.2em 0px !important;">
<a href="https://www.rstudio.com/rstudio-connect-beta/">https://www.rstudio.com/rstudio-connect-beta/</a></div>
<div style="margin: 1.2em 0px !important;">
Jeff Allen from RStudio gave a talk on deployment options for Shiny applications and mentioned this product, which is a “coming soon” platform for hosting apps alongside RMarkdown documents and plots. It’s not available as a full release yet, but there is a beta version for testing.</div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+Jmx0OyEtLSAjIFNoaW55IERldmVsb3BlciBD
b25mZXJlbmNlIFJlY2FwIC0tJmd0OzwvaT48L2Rpdj48ZGl2PjxpPjxicj48L2k+PC9kaXY+PGRp
dj48aT5fVGhpcyBpcyBhIGd1ZXN0IHBvc3QgZnJvbSBbVlAgTmFncmFqXShodHRwczovL2dpdGh1
Yi5jb20vdnBuYWdyYWopLCBhIGRhdGEgc2NpZW50aXN0IGVtYmVkZGVkIHdpdGhpbiBVVkHigJlz
IEhlYWx0aCBTY2llbmNlcyBMaWJyYXJ5LCB3aG8gcnVucyBvdXIgW0RhdGEgQW5hbHlzaXMgU3Vw
cG9ydCBIdWIgKERBU0gpXShodHRwczovL3d3dy5iaW9jb25uZWN0b3IudmlyZ2luaWEuZWR1L2Rh
c2gpIHNlcnZpY2UuXzwvaT48L2Rpdj48ZGl2PjxpPjxicj48L2k+PC9kaXY+PGRpdj48aT4tLS0t
PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPjxicj48L2k+PC9kaXY+PGRp
dj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+TGFzdCB3ZWVrZW5kIEkgd2FzIGZvcnR1bmF0ZSBl
bm91Z2ggdG8gYmUgYWJsZSB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgW2ZpcnN0IGV2ZXIgU2hpbnkg
RGV2ZWxvcGVyIENvbmZlcmVuY2UgaG9zdGVkIGJ5IFJTdHVkaW8gYXQgU3RhbmZvcmQgVW5pdmVy
c2l0eV0oaHR0cDovL2Jsb2cucnN0dWRpby5vcmcvMjAxNS8xMC8yOS9zaGlueS1kZXZlbG9wZXIt
Y29uZmVyZW5jZS1zdGFuZm9yZC11bml2ZXJzaXR5LWphbnVhcnktMjAxNi8pLiBJJ3ZlIGJ1aWx0
IGEgaGFuZGZ1bCBvZiBhcHBzLCBhbmQgaGF2ZSB0YXVnaHQgYW4gaW50cm9kdWN0b3J5IHdvcmtz
aG9wIG9uIFNoaW55LiBJbiBzcGl0ZSBvZiB0aGF0LCBhbG1vc3QgYWxsIG9mIHRoZSBwcmVzZW50
YXRpb25zIGRlLW15c3RpZmllZCBhdCBsZWFzdCBvbmUgYXNwZWN0IG9mIHRoZSAqaG93KiwgKndo
eSogb3IgKnNvIHdoYXQqIG9mIHRoZSBmcmFtZXdvcmsuIEhlcmUncyBhIHJlY2FwIG9mIHdoYXQg
cmVzb25hdGVkIHdpdGggbWUsIGFzIHdlbGwgYXMgc29tZSBjb2RlIGFuZCBsaW5rcyBvdXQgdG8g
bXkgYXR0ZW1wdHMgdG8gcHV0IHdoYXQgSSBkaWdlc3RlZCBpbnRvIHByYWN0aWNlLjwvaT48L2Rp
dj48ZGl2PjxpPjxicj48L2k+PC9kaXY+PGRpdj48aT4jIyMgdGw7ZHI8L2k+PC9kaXY+PGRpdj48
aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+LSByZWFjdGl2aXR5IGlzIGEgYmVhc3Q8L2k+PC9kaXY+
PGRpdj48aT4tIGphdmFzY3JpcHQgaXNuJ3QgY2hlYXRpbmc8L2k+PC9kaXY+PGRpdj48aT4tIHRo
ZXJlIGFyZSBhbHJlYWR5IGEgdG9uIG9mIHNoaW55IGZlYXR1cmVzIC4uLiBhbmQgbW9yZSBvbiB0
aGUgd2F5PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPiMjIyByZWFjdGl2
aXR5PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPkZvciBtZSwgdW5kZXJz
dGFuZGluZyByZWFjdGl2aXR5IGhhcyBiZWVuIG9uZSBvZiB0aGUgYmlnZ2VzdCBjaGFsbGVuZ2Vz
IHRvIHVzaW5nIFNoaW55IC4uLiBvciBhdCBsZWFzdCB0byB1c2luZyBTaGlueSAqd2VsbCouIEJ1
dCBhZnRlciAmZ3Q7IDMgaG91cnMgb2YgYW4gW2V4dGVuc2l2ZSAoYW5kIHJlYWxseSBjbGVhcikg
cHJlc2VudGF0aW9uIGJ5IEpvZSBDaGVuZ10oaHR0cHM6Ly9jZG4ucmF3Z2l0LmNvbS9yc3R1ZGlv
L3JlYWN0aXZpdHktdHV0b3JpYWwvbWFzdGVyL3NsaWRlcy5odG1sIy8pLCBJIHRoaW5rIEknbSBm
aW5hbGx5IHN0YXJ0aW5nIHRvIHNlZSB3aGF0IEkndmUgYmVlbiBtaXNzaW5nLiBIZXJlJ3Mgc29t
ZXRoaW5nIGluIHBhcnRpY3VsYXIgdGhhdCBzdHVjayBvdXQgdG8gbWU6PC9pPjwvZGl2PjxkaXY+
PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPiZndDsgYGBgb3V0cHV0JHBsb3QgPSByZW5kZXJQbG90
KClgYGAgaXMgbm90IGFuICppbXBlcmF0aXZlKiB0byB0aGUgYnJvd3NlciB0byBkbyBhICoqd2hh
dCoqIC4uLiBpdCdzIGEgKnJlY2lwZSogZm9yICoqaG93KiogdGhlIGJyb3dzZXIgc2hvdWxkIGRv
IHNvbWV0aGluZy48L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+U2hpbnkg
J3JlbmRlcicgZnVuY3Rpb25zIChlLmcuIGByZW5kZXJQbG90KClgLCBgcmVuZGVyVGV4dCgpYCwg
ZXRjKSBpbmhlcmVudGx5IGRlcGVuZCBvbiByZWFjdGl2aXR5LiBXaGF0IHRoZSBwb2ludCBhYm92
ZSBlbXBoYXNpemVzIGlzIHRoYXQgYXNzaWdubWVudHMgdG8gYSByZWFjdGl2ZSBleHByZXNzaW9u
IGFyZSBub3QgdGhlIHNhbWUgYXMgYXNzaWdubWVudHMgbWFkZSBpbiAicmVndWxhciIgUiBwcm9n
cmFtbWluZy4gUmVhY3RpdmUgb3V0cHV0cyBkZXBlbmQgb24gaW5wdXRzLCBhbmQgc3Vic2VxdWVu
dGx5IGNoYW5nZSBhcyB0aG9zZSBpbnB1dHMgYXJlIG1hbmlwdWxhdGVkLjwvaT48L2Rpdj48ZGl2
PjxpPjxicj48L2k+PC9kaXY+PGRpdj48aT5JZiB5b3Ugd2FudCB0byB3YXRjaCBob3cgdGhvc2Ug
Y2hhbmdlcyBoYXBwZW4gaW4geW91ciBvd24gYXBwLCB0cnkgYWRkaW5nIGBvcHRpb25zKHNoaW55
LnJlYWN0bG9nPVRSVUUpYCB0byB0aGUgdG9wIG9mIHlvdXIgc2VydmVyIHNjcmlwdC4gV2hlbiB5
b3UgcnVuIHRoZSBhcHAgaW4gYSBicm93c2VyIGFuZCBwcmVzcyBgQ09NTUFORCArIEYzYCAob3Ig
YENUUkwgKyBGM2Agb24gV2luZG93cykgeW91J2xsIHNlZSBhIGZvcmNlIGRpcmVjdGVkIG5ldHdv
cmsgdGhhdCBvdXRsaW5lcyB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBpbnB1dHMgYW5kIG91dHB1
dHMuPC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPkFub3RoZXIgd2F5IHRv
IGltcGxlbWVudCByZWFjdGl2aXR5IGlzIHdpdGggdGhlIGByZWFjdGl2ZSgpYCBmdW5jdGlvbi4m
bmJzcDs8L2k+PC9kaXY+PGRpdj48aT5Gb3IgbXkgYXBwcywgb25lIG9mIHRoZSBwaXRmYWxscyBo
YXMgYmVlbiByZS1ydW5uaW5nIHRoZSBzYW1lIGNvZGUgbXVsdGlwbGUgdGltZXMuIFRoYXQncyBh
IHBlcmZlY3QgdXNlLWNhc2UgZm9yIHJlYWN0aXZpdHkgKm91dHNpZGUqIG9mIHRoZSByZW5kZXIg
ZnVuY3Rpb25zLjwvaT48L2Rpdj48ZGl2PjxpPjxicj48L2k+PC9kaXY+PGRpdj48aT5IZXJlJ3Mg
YSB0cml2aWFsIGV4YW1wbGU6PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2Pjxp
Pjxicj48L2k+PC9kaXY+PGRpdj48aT5gYGByPC9pPjwvZGl2PjxkaXY+PGk+bGlicmFyeShzaGlu
eSk8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyB1
aSA9IGZsdWlkUGFnZSg8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7bnVtZXJpY0lucHV0KCJ0aHJlc2hvbGQiLCAibXBnIHRocmVzaG9sZCIsIHZhbHVl
ID0gMjApLDwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDtwbG90T3V0cHV0KCJzaXplIiksPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwO3RleHRPdXRwdXQoIm5hbWVzIik8L2k+PC9kaXY+PGRpdj48aT4mbmJz
cDsgJm5ic3A7ICk8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2
PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyBzZXJ2ZXIgPSBmdW5jdGlvbihpbnB1dCwgb3V0cHV0KSB7
PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyBvdXRwdXQkc2l6ZSA9IHJlbmRlclBsb3QoezwvaT48L2Rpdj48ZGl2PjxpPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2Pjxk
aXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZGF0ID0gc3Vi
c2V0KG10Y2FycywgbXBnICZndDsgaW5wdXQkdGhyZXNob2xkKTwvaT48L2Rpdj48ZGl2PjxpPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGhpc3QoZGF0JHd0KTwvaT48
L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5i
c3A7PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH0pPC9pPjwv
ZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2Pjxk
aXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IG91dHB1dCRuYW1lcyA9IHJlbmRlclRl
eHQoezwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7Jm5ic3A7PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgZGF0ID0gc3Vic2V0KG10Y2FycywgbXBnICZndDsgaW5wdXQkdGhyZXNo
b2xkKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7IHJvd25hbWVzKGRhdCk8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7Jm5ic3A7
PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH0pPC9pPjwvZGl2
PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyB9PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48
ZGl2PjxpPnNoaW55QXBwKHVpID0gdWksIHNlcnZlciA9IHNlcnZlcik8L2k+PC9kaXY+PGRpdj48
aT5gYGA8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+VGhlIGNvZGUgYWJv
dmUgd29ya3MgLi4uIGJ1dCBpdCdzIHJlZHVuZGFudC4gVGhlcmUncyBubyBuZWVkIHRvIGNhbGN1
bGF0ZSB0aGUgImRhdCIgb2JqZWN0IHNlcGFyYXRlbHkgaW4gZWFjaCByZW5kZXIgZnVuY3Rpb24u
PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPlRoZSBjb2RlIGJlbG93IGRv
ZXMgdGhlIHNhbWUgdGhpbmcgYnV0IHN0b3JlcyAiZGF0IiBpbiBhIHJlYWN0aXZlIHRoYXQgaXMg
b25seSBjYWxjdWxhdGVkIG9uY2UuPC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2
PjxpPjxicj48L2k+PC9kaXY+PGRpdj48aT5gYGByPC9pPjwvZGl2PjxkaXY+PGk+bGlicmFyeShz
aGlueSk8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+dWkgPSBmbHVpZFBh
Z2UoPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyBudW1lcmljSW5wdXQoInRocmVzaG9s
ZCIsICJtcGcgdGhyZXNob2xkIiwgdmFsdWUgPSAyMCksPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7
ICZuYnNwOyBwbG90T3V0cHV0KCJzaXplIiksPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNw
OyB0ZXh0T3V0cHV0KCJuYW1lcyIpPC9pPjwvZGl2PjxkaXY+PGk+KTwvaT48L2Rpdj48ZGl2Pjxp
Pjxicj48L2k+PC9kaXY+PGRpdj48aT5zZXJ2ZXIgPSBmdW5jdGlvbihpbnB1dCwgb3V0cHV0KSB7
PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZu
YnNwOyAmbmJzcDsgZGF0ID0gcmVhY3RpdmUoezwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyBzdWJzZXQobXRjYXJzLCBtcGcgJmd0OyBpbnB1dCR0aHJlc2hvbGQpPC9pPjwv
ZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2Pjxk
aXY+PGk+Jm5ic3A7ICZuYnNwOyB9KTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsmbmJz
cDs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7IG91dHB1dCRzaXplID0gcmVuZGVyUGxv
dCh7PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9p
PjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGhpc3QoZGF0KCkkd3Qp
PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwv
ZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyB9KTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJz
cDsmbmJzcDs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7IG91dHB1dCRuYW1lcyA9IHJl
bmRlclRleHQoezwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZu
YnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyByb3duYW1l
cyhkYXQoKSk8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJz
cDs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7IH0pPC9pPjwvZGl2PjxkaXY+PGk+fTwv
aT48L2Rpdj48ZGl2PjxpPjxicj48L2k+PC9kaXY+PGRpdj48aT5zaGlueUFwcCh1aSA9IHVpLCBz
ZXJ2ZXIgPSBzZXJ2ZXIpPC9pPjwvZGl2PjxkaXY+PGk+YGBgPC9pPjwvZGl2PjxkaXY+PGk+PGJy
PjwvaT48L2Rpdj48ZGl2PjxpPiMjIyBqYXZhc2NyaXB0PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwv
aT48L2Rpdj48ZGl2PjxpPkZvciB3aGF0ZXZlciByZWFzb24gSSd2ZSBiZWVuIHN0dWNrIG9uIHRo
ZSBpZGVhIHRoYXQgdXNpbmcgSmF2YVNjcmlwdCBpbnNpZGUgYSBTaGlueSBhcHAgd291bGQgYmUg
ImNoZWF0aW5nIi4gQnV0IFNoaW55IGlzIGFjdHVhbGx5IHdlbGwgZXF1aXBwZWQgZm9yIGV4dGVu
c2lvbnMgd2l0aCBKYXZhU2NyaXB0IGxpYnJhcmllcy4gU2V2ZXJhbCBvZiB0aGUgc3BlYWtlcnMg
bGVhbmVkIGluIG9uIHRoaXMgaWRlYS4gW1lpaHVpIFhpZV0oaHR0cHM6Ly9naXRodWIuY29tL3lp
aHVpKSBwcmVzZW50ZWQgb24gdGhlIFtEVF0oaHR0cDovL3JzdHVkaW8uZ2l0aHViLmlvL0RULykg
cGFja2FnZSwgd2hpY2ggaXMgYW4gaW50ZXJmYWNlIHRvIHVzZSBmZWF0dXJlcyBsaWtlIGNsaWVu
dC1zaWRlIGZpbHRlcmluZyBmcm9tIHRoZSBEYXRhVGFibGVzIGxpYnJhcnkuIEFuZCBbRGVhbiBB
dHRhbGldKGh0dHA6Ly9kZWFuYXR0YWxpLmNvbS8pIGRlbW9uc3RyYXRlZCBbc2hpbnlqc10oaHR0
cHM6Ly9naXRodWIuY29tL2RhYXR0YWxpL3NoaW55anMpLCBhIHBhY2thZ2UgdGhhdCBtYWtlcyBp
dCByZWFsbHkgZWFzeSB0byBpbmNvcnBvcmF0ZSBKYXZhU2NyaXB0IG9wZXJhdGlvbnMuPC9pPjwv
ZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPkJlbG93IGlzIGNvZGUgZm9yIGEgW21h
c3RlcnBpZWNlXShodHRwOi8vYXBwcy5iaW9jb25uZWN0b3IudmlyZ2luaWEuZWR1L2dhbWUvKSB0
aGF0IHRoYXQgZG9lcyBzb21lIGBoaWRlKClgIGFuZCBgc2hvdygpYDo8L2k+PC9kaXY+PGRpdj48
aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPmBgYHI8L2k+PC9k
aXY+PGRpdj48aT4jIGh0dHBzOi8vYXBwcy5iaW9jb25uZWN0b3IudmlyZ2luaWEuZWR1L2dhbWU8
L2k+PC9kaXY+PGRpdj48aT5saWJyYXJ5KHNoaW55KTwvaT48L2Rpdj48ZGl2PjxpPmxpYnJhcnko
c2hpbnlqcyk8L2k+PC9kaXY+PGRpdj48aT5zaGlueUFwcCg8L2k+PC9kaXY+PGRpdj48aT4mbmJz
cDsmbmJzcDs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgdWkgPSBmbHVpZFBhZ2UoJm5ic3A7PC9p
PjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHRpdGxlUGFuZWwoYWN0
aW9uQnV0dG9uKCJzdGFydCIsICJzdGFydCB0aGUgZ2FtZSIpKSw8L2k+PC9kaXY+PGRpdj48aT4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgdXNlU2hpbnlqcygpLDwvaT48L2Rpdj48ZGl2Pjxp
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBoaWRkZW4oYWN0aW9uQnV0dG9uKCJyZXN0YXJ0
IiwgInJlc3RhcnQgdGhlIGdhbWUiKSksPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IHRhZ3MkaDMoaGlkZGVuKHRleHRPdXRwdXQoImdhbWVfb3ZlciIpKSk8L2k+
PC9kaXY+PGRpdj48aT4mbmJzcDsgKSw8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsmbmJzcDs8L2k+
PC9kaXY+PGRpdj48aT4mbmJzcDsgc2VydmVyID0gZnVuY3Rpb24oaW5wdXQsIG91dHB1dCkgezwv
aT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2PjxkaXY+
PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IG91dHB1dCRnYW1lX292ZXIgPTwvaT48L2Rp
dj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJlbmRl
clRleHQoezwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgImdhbWUgb3ZlciwgbWFuIC4uLiBnYW1lIG92ZXIiPC9p
PjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
fSkgJm5ic3A7PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5i
c3A7PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7b2JzZXJ2ZUV2
ZW50KGlucHV0JHN0YXJ0LCB7PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2Pjxp
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHNob3coImdhbWVfb3Zl
ciIsIGFuaW0gPSBUUlVFLCBhbmltVHlwZSA9ICJmYWRlIik8L2k+PC9kaXY+PGRpdj48aT4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBoaWRlKCJzdGFydCIpPC9pPjwv
ZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgc2hv
dygicmVzdGFydCIpPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IH0pPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7PC9pPjwvZGl2
PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7b2JzZXJ2ZUV2ZW50KGlucHV0JHJl
c3RhcnQsIHs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyBoaWRlKCJnYW1lX292ZXIiKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGhpZGUoInJlc3RhcnQiKTwvaT48L2Rpdj48
ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHNob3coInN0
YXJ0Iik8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfSk8L2k+
PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNw
OyB9PC9pPjwvZGl2PjxkaXY+PGk+KTwvaT48L2Rpdj48ZGl2PjxpPmBgYDwvaT48L2Rpdj48ZGl2
PjxpPjxicj48L2k+PC9kaXY+PGRpdj48aT4jIyMgZXZlcnl0aGluZyBlbHNlPC9pPjwvZGl2Pjxk
aXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPiMjIyMgYnJ1c2hpbmc8L2k+PC9kaXY+PGRpdj48
aT5baHR0cDovL3NoaW55LnJzdHVkaW8uY29tL2FydGljbGVzL3Bsb3QtaW50ZXJhY3Rpb24uaHRt
bF0oaHR0cDovL3NoaW55LnJzdHVkaW8uY29tL2FydGljbGVzL3Bsb3QtaW50ZXJhY3Rpb24uaHRt
bCk8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+QWRkaW5nIGEgYnJ1c2gg
YXJndW1lbnQgdG8gYHBsb3RPdXRwdXQoKWAgbGV0J3MgeW91IGNsaWNrIGFuZCBkcmFnIHRvIHNl
bGVjdCBhICZuYnNwOyAmbmJzcDsgJm5ic3A7cG9pbnRzIG9uIGEgcGxvdC4gWW91IGNhbiB1c2Ug
dGhpcyBmb3IgInpvb21pbmcgaW4iIG9uIHNvbWV0aGluZyBsaWtlIGEgdGltZSBzZXJpZXMgcGxv
dC4gSGVyZSdzIHRoZSBbY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL3ZwbmFncmFqL25hbWVzKSBm
b3IgYW4gW2FwcF0oaHR0cDovL2FwcHMuYmlvY29ubmVjdG9yLnZpcmdpbmlhLmVkdS9uYW1lcy8p
IEkgd3JvdGUgYmFzZWQgb24gZGF0YSBmcm9tIHRoZSBbYmFieW5hbWVzXShodHRwczovL2dpdGh1
Yi5jb20vaGFkbGV5L2JhYnluYW1lcykgcGFja2FnZSAtIGluIHRoaXMgY2FzZSB0aGUgYnJ1c2gg
bGV0J3MgeW91IHpvb20gdG8gc2VlIG5hbWUgZnJlcXVlbmN5IG92ZXIgc3BlY2lmaWMgcmFuZ2Ug
b2YgeWVhcnMuPC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPjxicj48L2k+
PC9kaXY+PGRpdj48aT5gYGByPC9pPjwvZGl2PjxkaXY+PGk+IyBodHRwOi8vYXBwcy5iaW9jb25u
ZWN0b3IudmlyZ2luaWEuZWR1L25hbWVzLzwvaT48L2Rpdj48ZGl2PjxpPmxpYnJhcnkoc2hpbnkp
PC9pPjwvZGl2PjxkaXY+PGk+bGlicmFyeShnZ3Bsb3QyKTwvaT48L2Rpdj48ZGl2PjxpPmxpYnJh
cnkoZ2d0aGVtZXMpPC9pPjwvZGl2PjxkaXY+PGk+bGlicmFyeShiYWJ5bmFtZXMpPC9pPjwvZGl2
PjxkaXY+PGk+bGlicmFyeShzY2FsZXMpPC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48
ZGl2PjxpPm9wdGlvbnMoc2NpcGVuPTk5OSk8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2
PjxkaXY+PGk+dWkgPSBmbHVpZFBhZ2UodGl0bGVQYW5lbCh0aXRsZSA9ICJuYW1lcyAoMTg4MC0y
MDEyKSIpLDwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgdGV4dElucHV0KCJuYW1lIiwgImVudGVyIGEgbmFtZSIp
LDwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgYWN0aW9uQnV0dG9uKCJnbyIsICJzZWFyY2giKSw8L2k+PC9kaXY+
PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7IHBsb3RPdXRwdXQoInBsb3QxIiwgYnJ1c2ggPSAicGxvdF9icnVzaCIpLDwvaT48L2Rp
dj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgcGxvdE91dHB1dCgicGxvdDIiKSw8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGh0bWxPdXRwdXQo
ImluZm8iKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJzcDs8L2k+PC9kaXY+PGRpdj48aT4pPC9pPjwvZGl2
PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPnNlcnZlciA9IGZ1bmN0aW9uKGlucHV0LCBv
dXRwdXQpIHs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2Pjxk
aXY+PGk+Jm5ic3A7ICZuYnNwOyBkYXQgPSBldmVudFJlYWN0aXZlKGlucHV0JGdvLCB7PC9pPjwv
ZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2Pjxk
aXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHN1YnNldChiYWJ5bmFtZXMsIHRvbG93
ZXIobmFtZSkgPT0gdG9sb3dlcihpbnB1dCRuYW1lKSk8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJzcDs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7
IH0pPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2Pjxp
PiZuYnNwOyAmbmJzcDsgb3V0cHV0JHBsb3QxID0gcmVuZGVyUGxvdCh7PC9pPjwvZGl2PjxkaXY+
PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2PjxkaXY+PGk+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGdncGxvdChkYXQoKSwgYWVzKHllYXIsIHByb3AsIGNv
bD1zZXgpKSArJm5ic3A7PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgZ2VvbV9saW5lKCkgKyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHhsaW0oMTg4MCwyMDEyKSAr
PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgdGhlbWVfbWluaW1hbCgpICs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAjIGZvcm1hdCBsYWJlbHMgd2l0aCBwZXJjZW50IGZ1bmN0
aW9uIGZyb20gc2NhbGVzIHBhY2thZ2U8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGVy
Y2VudCkgKzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IGxhYnMobGlzdCh0aXRsZSA9IiUgb2YgaW5kaXZpZHVhbHMgYm9ybiB3aXRoIG5h
bWUgYnkgeWVhciBhbmQgZ2VuZGVyIiw8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IHggPSAiXG4gY2xpY2stYW5kLWRyYWcgb3ZlciB0aGUgcGxvdCB0byAnem9vbSciLDwvaT48
L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgeSA9ICIiKSk8L2k+PC9kaXY+PGRpdj48
aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJzcDs8L2k+PC9kaXY+PGRpdj48aT4mbmJz
cDsgJm5ic3A7IH0pPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvaT48L2Rp
dj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgb3V0cHV0JHBsb3QyID0gcmVuZGVyUGxvdCh7PC9pPjwv
ZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2Pjxk
aXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICMgbmVlZCBsYXRlc3QgdmVyc2lvbiBv
ZiBzaGlueSB0byB1c2UgcmVxKCkgZnVuY3Rpb248L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgcmVxKGlucHV0JHBsb3RfYnJ1c2gpPC9pPjwvZGl2PjxkaXY+PGk+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGJydXNoZWQgPSBicnVzaGVkUG9pbnRzKGRhdCgp
LCBpbnB1dCRwbG90X2JydXNoKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyBnZ3Bsb3QoYnJ1c2hlZCwgYWVzKHllYXIsIHByb3AsIGNvbD1zZXgpKSArJm5ic3A7PC9pPjwv
ZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZ2Vv
bV9saW5lKCkgKzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IHRoZW1lX21pbmltYWwoKSArPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIyBmb3JtYXQgbGFiZWxzIHdpdGggcGVy
Y2VudCBmdW5jdGlvbiBmcm9tIHNjYWxlcyBwYWNrYWdlPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgc2NhbGVfeV9jb250aW51b3VzKGxh
YmVscyA9IHBlcmNlbnQpICs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyBsYWJzKGxpc3QodGl0bGUgPSIlIG9mIGluZGl2aWR1YWxzIGJv
cm4gd2l0aCBuYW1lIGJ5IHllYXIgYW5kIGdlbmRlciIsPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyB4ID0gIiIsPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyB5ID0gIiIpKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZu
YnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgfSk8L2k+PC9kaXY+PGRpdj48aT4m
bmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyBvdXRwdXQk
aW5mbyA9IHJlbmRlclRleHQoezwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAiJmx0O3AmZ3Q7ZGF0YSBzb3VyY2U6ICZsdDthIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9o
YWRsZXkvYmFieW5hbWVzJyZndDtzb2NpYWwgc2VjdXJpdHkgYWRtaW5pc3RyYXRpb24gbmFtZXMg
ZnJvbSBiYWJ5bmFtZXMgcGFja2FnZSZsdDsvYSZndDsmbHQ7L3AmZ3Q7IjwvaT48L2Rpdj48ZGl2
PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZu
YnNwOyAmbmJzcDsgfSk8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwv
ZGl2PjxkaXY+PGk+fTwvaT48L2Rpdj48ZGl2PjxpPjxicj48L2k+PC9kaXY+PGRpdj48aT5zaGlu
eUFwcCh1aSwgc2VydmVyKTwvaT48L2Rpdj48ZGl2PjxpPmBgYDwvaT48L2Rpdj48ZGl2PjxpPjxi
cj48L2k+PC9kaXY+PGRpdj48aT4jIyMjIGdhZGdldHM8L2k+PC9kaXY+PGRpdj48aT5baHR0cDov
L3NoaW55LnJzdHVkaW8uY29tL2FydGljbGVzL2dhZGdldHMuaHRtbF0oaHR0cDovL3NoaW55LnJz
dHVkaW8uY29tL2FydGljbGVzL2dhZGdldHMuaHRtbCk8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9p
PjwvZGl2PjxkaXY+PGk+QSByZWxhdGl2ZWx5IGVhc3kgd2F5IHRvIGxldmVyYWdlIFNoaW55IHJl
YWN0aXZpdHkgZm9yIHZpc3VhbCBpbnNwZWN0aW9uIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGRhdGEg
KndpdGhpbiogUlN0dWRpby4gVGhlIG1haW4gZGlmZmVyZW5jZSBoZXJlIGlzIHRoYXQgeW91J3Jl
IHVzaW5nIGFuIGFiYnJldmlhdGVkIChvciAnbWluaScpIHVpLiBUaGUgYWR2YW50YWdlIG9mIHRo
aXMgd29ya2Zsb3cgaXMgdGhhdCB5b3UgY2FuIGluY2x1ZGUgaXQgaW4geW91ciBzY3JpcHQgdG8g
bWFrZSB5b3VyIGFuYWx5c2lzIGludGVyYWN0aXZlLiBJIG1vZGlmaWVkIHRoZSBleGFtcGxlIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZCB3cm90ZSBhIFtiYXNpYyBicnVzaGluZyBnYWRnZXQgdGhh
dCByZW1vdmVzIG91dGxpZXJzXShodHRwczovL2dpc3QuZ2l0aHViLmNvbS92cG5hZ3Jhai8zMWIz
OTIzMmQ3NWNiMjlmNTJhOCk6PC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2Pjxp
Pjxicj48L2k+PC9kaXY+PGRpdj48aT5gYGByPC9pPjwvZGl2PjxkaXY+PGk+bGlicmFyeShzaGlu
eSk8L2k+PC9kaXY+PGRpdj48aT5saWJyYXJ5KG1pbmlVSSk8L2k+PC9kaXY+PGRpdj48aT5saWJy
YXJ5KGdncGxvdDIpPC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPm91dGxp
ZXJfcm0gPSBmdW5jdGlvbihkYXRhLCB4dmFyLCB5dmFyKSB7PC9pPjwvZGl2PjxkaXY+PGk+Jm5i
c3A7ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgdWkgPSBtaW5p
UGFnZSg8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZ2FkZ2V0
VGl0bGVCYXIoIkRyYWcgdG8gc2VsZWN0IHBvaW50cyIpLDwvaT48L2Rpdj48ZGl2PjxpPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBtaW5pQ29udGVudFBhbmVsKDwvaT48L2Rpdj48ZGl2Pjxp
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICMgVGhlIGJydXNoPSJi
cnVzaCIgYXJndW1lbnQgbWVhbnMgd2UgY2FuIGxpc3RlbiBmb3I8L2k+PC9kaXY+PGRpdj48aT4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAjIGJydXNoIGV2ZW50cyBv
biB0aGUgcGxvdCB1c2luZyBpbnB1dCRicnVzaC48L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBwbG90T3V0cHV0KCJwbG90IiwgaGVpZ2h0
ID0gIjEwMCUiLCBicnVzaCA9ICJicnVzaCIpPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyApPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyZuYnNw
OzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgc2VydmVyID0gZnVuY3Rpb24oaW5wdXQs
IG91dHB1dCwgc2Vzc2lvbikgezwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAjIFJlbmRlciB0aGUgcGxvdDwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyBvdXRwdXQkcGxvdCA9IHJlbmRlclBsb3QoezwvaT48L2Rpdj48ZGl2PjxpPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICMgUGxvdCB0aGUgZGF0YSB3aXRo
IHgveSB2YXJzIGluZGljYXRlZCBieSB0aGUgY2FsbGVyLjwvaT48L2Rpdj48ZGl2PjxpPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGdncGxvdChkYXRhLCBhZXNfc3Ry
aW5nKHh2YXIsIHl2YXIpKSArIGdlb21fcG9pbnQoKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyB9KTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAjIEhhbmRsZSB0aGUgRG9uZSBidXR0b24gYmVpbmcgcHJlc3NlZC48L2k+PC9kaXY+PGRp
dj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgb2JzZXJ2ZUV2ZW50KGlucHV0JGRvbmUs
IHs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyZuYnNwOzwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICMgY3JlYXRlIGlkIGZvciBkYXRhPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZGF0YSRpZCA9IDE6bnJvdyhkYXRh
KTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7Jm5ic3A7PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgIyBSZXR1cm4gdGhlIGJydXNoZWQgcG9pbnRzLiBTZWUgP3NoaW55OjpicnVz
aGVkUG9pbnRzLjwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IHAgPSBicnVzaGVkUG9pbnRzKGRhdGEsIGlucHV0JGJydXNoKTwvaT48L2Rp
dj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7
PC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgIyBjcmVhdGUgdmVjdG9yIG9mIGlkcyB0aGF0IG1hdGNoIGJydXNoZWQgcG9pbnRzIGFuZCBk
YXRhPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgZyA9IHdoaWNoKHAkaWQgJWluJSBkYXRhJGlkKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7PC9pPjwvZGl2PjxkaXY+
PGk+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIyByZXR1cm4gYSBz
dWJzZXQgb2YgdGhlIG9yaWdpbmFsIGRhdGEgd2l0aG91dCBicnVzaGVkIHBvaW50czwvaT48L2Rp
dj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHN0b3BB
cHAoZGF0YVstZyxdKTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyB9KTwvaT48L2Rpdj48ZGl2PjxpPiZuYnNwOyAmbmJzcDsgfTwvaT48L2Rpdj48ZGl2PjxpPiZu
YnNwOyAmbmJzcDsmbmJzcDs8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7IHJ1bkdhZGdl
dCh1aSwgc2VydmVyKTwvaT48L2Rpdj48ZGl2PjxpPn08L2k+PC9kaXY+PGRpdj48aT48YnI+PC9p
PjwvZGl2PjxkaXY+PGk+IyBydW4gdG8gb3BlbiBwbG90IHZpZXdlcjwvaT48L2Rpdj48ZGl2Pjxp
PiMgY2xpY2sgYW5kIGRyYWcgdG8gYnJ1c2g8L2k+PC9kaXY+PGRpdj48aT4jIHByZXNzIGRvbmUg
cmV0dXJuIGEgc3Vic2V0IG9mIHRoZSBvcmlnaW5hbCBkYXRhIHdpdGhvdXQgYnJ1c2hlZCBwb2lu
dHM8L2k+PC9kaXY+PGRpdj48aT5saWJyYXJ5KGdhcG1pbmRlcik8L2k+PC9kaXY+PGRpdj48aT5v
dXRsaWVyX3JtKGdhcG1pbmRlciwgImxpZmVFeHAiLCAiZ2RwUGVyY2FwIik8L2k+PC9kaXY+PGRp
dj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+IyB5b3UgY2FuIGFsc28gdXNlIHRoZSBzYW1lIG1l
dGhvZCBhYm92ZSBidXQgcGFzcyB0aGUgb3V0cHV0IGludG8gYSBkcGx5ciBwaXBlIHN5bnRheDwv
aT48L2Rpdj48ZGl2PjxpPiMgd2l0aG91dCB0aGUgc2VsZWN0aW9uIHdoYXQgaXMgdGhlIG1lYW4g
bGlmZSBleHBlY3RhbmN5IGJ5IGNvdW50cnk/PC9pPjwvZGl2PjxkaXY+PGk+bGlicmFyeShkcGx5
cik8L2k+PC9kaXY+PGRpdj48aT5vdXRsaWVyX3JtKGdhcG1pbmRlciwgImxpZmVFeHAiLCAiZ2Rw
UGVyY2FwIikgJSZndDslPC9pPjwvZGl2PjxkaXY+PGk+Jm5ic3A7ICZuYnNwOyBncm91cF9ieShj
b3VudHJ5KSAlJmd0OyU8L2k+PC9kaXY+PGRpdj48aT4mbmJzcDsgJm5ic3A7IHN1bW1hcmlzZSht
ZWFuKGxpZmVFeHApKTwvaT48L2Rpdj48ZGl2PjxpPmBgYDwvaT48L2Rpdj48ZGl2PjxpPjxicj48
L2k+PC9kaXY+PGRpdj48aT4jIyMjIHJlcSgpJm5ic3A7PC9pPjwvZGl2PjxkaXY+PGk+W2h0dHA6
Ly9zaGlueS5yc3R1ZGlvLmNvbS9yZWZlcmVuY2Uvc2hpbnkvbGF0ZXN0L3JlcS5odG1sXShodHRw
Oi8vc2hpbnkucnN0dWRpby5jb20vcmVmZXJlbmNlL3NoaW55L2xhdGVzdC9yZXEuaHRtbCk8L2k+
PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+VGhpcyBzb2x2ZXMgdGhlIGlzc3Vl
IG9mIHJlcXVpcmluZyBhbiBpbnB1dCAtIEknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIHVzZSB0aGlz
IHNvIEkgZG9uJ3QgaGF2ZSB0byBkbyB0aGUgYHJldHVybihOVUxMKWAgd29yayBhcm91bmQ6PC9p
PjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPjxicj48L2k+PC9kaXY+PGRpdj48
aT5gYGByPC9pPjwvZGl2PjxkaXY+PGk+IyBubyBuZWVkIHRvIGRvIGRvIHRoaXMgYW55IG1vcmU8
L2k+PC9kaXY+PGRpdj48aT4jJm5ic3A7PC9pPjwvZGl2PjxkaXY+PGk+IyBpbkZpbGUgPSBpbnB1
dCRmaWxlMTwvaT48L2Rpdj48ZGl2PjxpPiMmbmJzcDs8L2k+PC9kaXY+PGRpdj48aT4jICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBpZiAoaXMubnVsbChpbkZpbGUpKTwvaT48L2Rpdj48ZGl2
PjxpPiMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0dXJuKE5V
TEwpPC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPiMgdXNlIHJlcSgpIGlu
c3RlYWQ8L2k+PC9kaXY+PGRpdj48aT5yZXEoaW5wdXQkZmlsZTEpPC9pPjwvZGl2PjxkaXY+PGk+
YGBgPC9pPjwvZGl2PjxkaXY+PGk+PGJyPjwvaT48L2Rpdj48ZGl2PjxpPiMjIyMgcHJvZnZpczwv
aT48L2Rpdj48ZGl2PjxpPltodHRwOi8vcnB1YnMuY29tL3djaC8xMjM4ODhdKGh0dHA6Ly9ycHVi
cy5jb20vd2NoLzEyMzg4OCk8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+
U3VwZXIgaGVscGZ1bCBtZXRob2QgZm9yIGRpZ2dpbmcgaW50byB0aGUgY2FsbCBzdGFjayBvZiB5
b3VyIFIgY29kZSB0byBzZWUgaG93IHlvdSBtaWdodCBvcHRpbWl6ZSBpdC4mbmJzcDs8L2k+PC9k
aXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+T25lIG9yIHR3byBzZWNvbmRzIG9mIHBy
b2Nlc3NpbmcgY2FuIG1ha2UgYSBiaWcgZGlmZmVyZW5jZSwgcGFydGljdWxhcmx5IGZvciBhIFNo
aW55IGFwcCAuLi4mbmJzcDs8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+
IyMjIHJzdHVkaW8gY29ubmVjdDwvaT48L2Rpdj48ZGl2PjxpPltodHRwczovL3d3dy5yc3R1ZGlv
LmNvbS9yc3R1ZGlvLWNvbm5lY3QtYmV0YS9dKGh0dHBzOi8vd3d3LnJzdHVkaW8uY29tL3JzdHVk
aW8tY29ubmVjdC1iZXRhLyk8L2k+PC9kaXY+PGRpdj48aT48YnI+PC9pPjwvZGl2PjxkaXY+PGk+
SmVmZiBBbGxlbiBmcm9tIFJTdHVkaW8gZ2F2ZSBhIHRhbGsgb24gZGVwbG95bWVudCBvcHRpb25z
IGZvciBTaGlueSBhcHBsaWNhdGlvbnMgYW5kIG1lbnRpb25lZCB0aGlzIHByb2R1Y3QsIHdoaWNo
IGlzIGEgImNvbWluZyBzb29uIiBwbGF0Zm9ybSBmb3IgaG9zdGluZyBhcHBzIGFsb25nc2lkZSBS
TWFya2Rvd24gZG9jdW1lbnRzIGFuZCBwbG90cy4gSXQncyBub3QgYXZhaWxhYmxlIGFzIGEgZnVs
bCByZWxlYXNlIHlldCwgYnV0IHRoZXJlIGlzIGEgYmV0YSB2ZXJzaW9uIGZvciB0ZXN0aW5nLjwv
aT48L2Rpdj48ZGl2Pjxicj48L2Rpdj4=">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com6tag:blogger.com,1999:blog-6232819486261696035.post-16225993707514357652016-01-08T09:50:00.003-06:002016-01-08T09:58:22.450-06:00Repel overlapping text labels in ggplot2<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=1622599370751435765">
<div style="margin: 1.2em 0px !important;">
A while back I showed you <a href="http://www.gettinggeneticsdone.com/2014/05/r-volcano-plots-to-visualize-rnaseq-microarray.html">how to make volcano plots</a> in base R for visualizing gene expression results. This is just one of many genome-scale plots where you might want to show all individual results but highlight or call out important results by labeling them, for example, with a gene name. </div>
<div style="margin: 1.2em 0px !important;">
But if you want to annotate lots of points, the annotations usually get so crowded that they overlap one another and become illegible. There are ways around this - reducing the font size, or adjusting the position or angle of the text, but these usually don’t completely solve the problem, and can even make the visualization worse. Here’s the plot again, reading the <a href="https://gist.github.com/stephenturner/806e31fce55a8b7175af">results directly from GitHub</a>, and drawing the plot with ggplot2 and geom_text out of the box.<br />
<br />
<script src="https://gist.github.com/stephenturner/ae4958d84198017e6340.js"></script><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRZP6DBrP4ja0nffYn-Pz2B5xA2VqgDy_gmnYMdbJ_mvoBA5mur2c5SjWB2_Uaa_CVlc4jj3202dEWByXNxPyF855eG6UcTbXRUI5jnJPXI3R-N3CUaN3DsjP4jU0B2P35quJTeV9zIk0/s1600/ggrepel_geomtext.png"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRZP6DBrP4ja0nffYn-Pz2B5xA2VqgDy_gmnYMdbJ_mvoBA5mur2c5SjWB2_Uaa_CVlc4jj3202dEWByXNxPyF855eG6UcTbXRUI5jnJPXI3R-N3CUaN3DsjP4jU0B2P35quJTeV9zIk0/s640/ggrepel_geomtext.png" width="640" /></a><br />
<br />
What a mess. It’s difficult to see what any of those downregulated genes are on the left. Enter the <a href="https://github.com/slowkow/ggrepel">ggrepel</a> package, a new extension of ggplot2 that repels text labels away from one another. Just sub in geom_text_repel() in place of geom_text() and the extension is smart enough to try to figure out how to label the points such that the labels don’t interfere with each other. Here it is in action.</div>
<div style="margin: 1.2em 0px !important;">
<br />
<script src="https://gist.github.com/stephenturner/a5b34eb2311a946c721a.js"></script><br />
<br /></div>
<div style="margin: 1.2em 0px !important;">
And the result (much better!):</div>
<div style="margin: 1.2em 0px !important;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHFAoZmlUSt9B7vvKixwkE-h0vgxkdrpgJCrnFzBh1aHYCX8lj5W-8ADnaieIqJLudI5l7rQstikB6siilUw9LUh_3Mpz8__rzbSyGfPjLStXcjlMjpK0FXc_wmj6Nzw_7893DFT2rfcs/s1600/ggrepel.png"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHFAoZmlUSt9B7vvKixwkE-h0vgxkdrpgJCrnFzBh1aHYCX8lj5W-8ADnaieIqJLudI5l7rQstikB6siilUw9LUh_3Mpz8__rzbSyGfPjLStXcjlMjpK0FXc_wmj6Nzw_7893DFT2rfcs/s640/ggrepel.png" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
See the <a href="https://github.com/slowkow/ggrepel/blob/master/vignettes/ggrepel.md">ggrepel package vignette</a> for more.</div>
<div style="margin: 1.2em 0px !important;">
</div>
<div style="margin: 1.2em 0px !important;">
</div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PGRpdiBjbGFzcz0ibWFya2Rvd24taGVyZS13cmFwcGVyIiBkYXRhLWJsb2dnZXItZXNjYXBlZC1k
YXRhLW1kLXVybD0iaHR0cHM6Ly93d3cuYmxvZ2dlci5jb20vYmxvZ2dlci5nP2Jsb2dJRD02MjMy
ODE5NDg2MjYxNjk2MDM1I2VkaXRvci90YXJnZXQ9cG9zdDtwb3N0SUQ9MTYyMjU5OTM3MDc1MTQz
NTc2NSI+PGRpdiBkYXRhLWJsb2dnZXItZXNjYXBlZC1zdHlsZT0ibWFyZ2luOiAxLjJlbSAwcHgg
IWltcG9ydGFudDsiPjxwPkEgd2hpbGUgYmFjayBJIHNob3dlZCB5b3UgPGEgaHJlZj0iaHR0cDov
L3d3dy5nZXR0aW5nZ2VuZXRpY3Nkb25lLmNvbS8yMDE0LzA1L3Itdm9sY2Fuby1wbG90cy10by12
aXN1YWxpemUtcm5hc2VxLW1pY3JvYXJyYXkuaHRtbCI+aG93IHRvIG1ha2Ugdm9sY2FubyBwbG90
czwvYT4gaW4gYmFzZSBSIGZvciB2aXN1YWxpemluZyBnZW5lIGV4cHJlc3Npb24gcmVzdWx0cy4g
VGhpcyBpcyBqdXN0IG9uZSBvZiBtYW55IGdlbm9tZS1zY2FsZSBwbG90cyB3aGVyZSB5b3UgbWln
aHQgd2FudCB0byBzaG93IGFsbCBpbmRpdmlkdWFsIHJlc3VsdHMgYnV0IGhpZ2hsaWdodCBvciBj
YWxsIG91dCBpbXBvcnRhbnQgcmVzdWx0cyBieSBsYWJlbGluZyB0aGVtLCBmb3IgZXhhbXBsZSwg
d2l0aCBhIGdlbmUgbmFtZS4gPC9wPjwvZGl2PjxkaXYgZGF0YS1ibG9nZ2VyLWVzY2FwZWQtc3R5
bGU9Im1hcmdpbjogMS4yZW0gMHB4ICFpbXBvcnRhbnQ7Ij48cD5CdXQgaWYgeW91IHdhbnQgdG8g
YW5ub3RhdGUgbG90cyBvZiBwb2ludHMsIHRoZSBhbm5vdGF0aW9ucyB1c3VhbGx5IGdldCBzbyBj
cm93ZGVkIHRoYXQgdGhleSBvdmVybGFwIG9uZSBhbm90aGVyIGFuZCBiZWNvbWUgaWxsZWdpYmxl
LiBUaGVyZSBhcmUgd2F5cyBhcm91bmQgdGhpcyAtIHJlZHVjaW5nIHRoZSBmb250IHNpemUsIG9y
IGFkanVzdGluZyB0aGUgcG9zaXRpb24gb3IgYW5nbGUgb2YgdGhlIHRleHQsIGJ1dCB0aGVzZSB1
c3VhbGx5IGRvbuKAmXQgY29tcGxldGVseSBzb2x2ZSB0aGUgcHJvYmxlbSwgYW5kIGNhbiBldmVu
IG1ha2UgdGhlIHZpc3VhbGl6YXRpb24gd29yc2UuIEhlcmXigJlzIHRoZSBwbG90IGFnYWluLCBy
ZWFkaW5nIHRoZSA8YSBocmVmPSJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9zdGVwaGVudHVybmVy
LzgwNmUzMWZjZTU1YThiNzE3NWFmIj5yZXN1bHRzIGRpcmVjdGx5IGZyb20gR2l0SHViPC9hPiwg
YW5kIGRyYXdpbmcgdGhlIHBsb3Qgd2l0aCBnZ3Bsb3QyIGFuZCA8Y29kZSBkYXRhLWJsb2dnZXIt
ZXNjYXBlZC1zdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsgYm9yZGVyLXJhZGl1czog
M3B4OyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjM0LCAyMzQsIDIzNCk7IGRpc3BsYXk6IGlubGlu
ZTsgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBJbmNvbnNvbGF0YSwgQ291cmllciwgbW9ub3NwYWNl
OyBmb250LXNpemU6IDAuODVlbTsgbWFyZ2luOiAwcHggMC4xNWVtOyBwYWRkaW5nOiAwcHggMC4z
ZW07IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPmdlb21fdGV4dDwvY29kZT4gb3V0IG9mIHRoZSBi
b3guPC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPiMgTG9hZCBwYWNrYWdlczwvcD48cD5saWJy
YXJ5KGRwbHlyKTwvcD48cD5saWJyYXJ5KGdncGxvdDIpPC9wPjxkaXY+PGJyPjwvZGl2PjxkaXY+
PGRpdj4jIFJlYWQgZGF0YSBmcm9tIHRoZSB3ZWI8L2Rpdj48ZGl2PnVybCA9ICJodHRwczovL2dp
c3QuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N0ZXBoZW50dXJuZXIvODA2ZTMxZmNlNTVhOGI3MTc1
YWYvcmF3LzFhNTA3YzRjM2Y5ZjFiYWFhM2E2OTE4NzIyM2ZmM2QzMDUwNjI4ZDQvcmVzdWx0cy50
eHQiPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5yZXN1bHRzID0gcmVhZC50YWJsZSh1cmwsIGhl
YWRlcj1UUlVFKTwvZGl2PjxkaXY+cmVzdWx0cyA9IG11dGF0ZShyZXN1bHRzLCBzaWc9aWZlbHNl
KHJlc3VsdHMkcGFkaiZsdDswLjA1LCAiRkRSJmx0OzAuMDUiLCAiTm90IFNpZyIpKTwvZGl2Pjxk
aXY+PGJyPjwvZGl2PjxkaXY+cCA9IGdncGxvdChyZXN1bHRzLCBhZXMobG9nMkZvbGRDaGFuZ2Us
IC1sb2cxMChwdmFsdWUpKSkgKzwvZGl2PjxkaXY+Jm5ic3A7IGdlb21fcG9pbnQoYWVzKGNvbD1z
aWcpKSArPC9kaXY+PGRpdj4mbmJzcDsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJyZWQi
LCAiYmxhY2siKSk8L2Rpdj48ZGl2PnA8L2Rpdj48ZGl2PnArZ2VvbV90ZXh0KGRhdGE9ZmlsdGVy
KHJlc3VsdHMsIHBhZGombHQ7MC4wNSksIGFlcyhsYWJlbD1HZW5lKSk8L2Rpdj48L2Rpdj48ZGl2
Pjxicj48L2Rpdj48cD5gYGA8L3A+PC9kaXY+PHByZSBzdHlsZT0iZm9udC1mYW1pbHk6IENvbnNv
bGFzLCBJbmNvbnNvbGF0YSwgQ291cmllciwgbW9ub3NwYWNlOyBmb250LXNpemU6IDAuODVlbTsg
Zm9udC1zaXplOiAxZW07IGxpbmUtaGVpZ2h0OiAxLjJlbTsgbWFyZ2luOiAxLjJlbSAwcHg7Ij48
Y29kZSBkYXRhLWJsb2dnZXItZXNjYXBlZC1zdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Y4Zjhm
ODsgYmFja2dyb3VuZDogcmdiKDI0OCwgMjQ4LCAyNTUpOyBib3JkZXItcmFkaXVzOiAzcHg7IGJv
cmRlci1yYWRpdXM6IDNweDsgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwNCwgMjA0LCAyMDQpOyBi
b3JkZXI6IDFweCBzb2xpZCByZ2IoMjM0LCAyMzQsIDIzNCk7IGNvbG9yOiAjMzMzMzMzOyBkaXNw
bGF5OiBibG9jayAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgZGlzcGxheTogaW5saW5lOyBm
b250LWZhbWlseTogQ29uc29sYXMsIEluY29uc29sYXRhLCBDb3VyaWVyLCBtb25vc3BhY2U7IGZv
bnQtc2l6ZTogMC44NWVtOyBtYXJnaW46IDBweCAwLjE1ZW07IG92ZXJmbG93OiBhdXRvOyBwYWRk
aW5nOiAwLjVlbSAwLjdlbTsgcGFkZGluZzogMC41ZW07IHBhZGRpbmc6IDBweCAwLjNlbTsgd2hp
dGUtc3BhY2U6IHByZS13cmFwOyB3aGl0ZS1zcGFjZTogcHJlOyI+PCEtLTAtLT48L2NvZGU+PC9w
cmU+PGRpdiBkYXRhLWJsb2dnZXItZXNjYXBlZC1zdHlsZT0ibWFyZ2luOiAxLjJlbSAwcHggIWlt
cG9ydGFudDsiPjxwPjxhIGhyZWY9Imh0dHA6Ly8xLmJwLmJsb2dzcG90LmNvbS8tcWF3eUY2LW9l
czgvVm9fWTlkaTZfVUkvQUFBQUFBQUNjeTgvMi1fRnBiaERNYm8vczE2MDAvZ2dyZXBlbF9nZW9t
dGV4dC5wbmciPjxpbWcgYm9yZGVyPSIwIiBoZWlnaHQ9IjY0MCIgc3JjPSJodHRwczovLzEuYnAu
YmxvZ3Nwb3QuY29tLy1xYXd5RjYtb2VzOC9Wb19ZOWRpNl9VSS9BQUFBQUFBQ2N5OC8yLV9GcGJo
RE1iby9zNjQwL2dncmVwZWxfZ2VvbXRleHQucG5nIiB3aWR0aD0iNjQwIj48L2E+PC9wPjwvZGl2
PjxkaXYgZGF0YS1ibG9nZ2VyLWVzY2FwZWQtc3R5bGU9Im1hcmdpbjogMS4yZW0gMHB4ICFpbXBv
cnRhbnQ7Ij48cD5XaGF0IGEgbWVzcy4gSXTigJlzIGRpZmZpY3VsdCB0byBzZWUgd2hhdCBhbnkg
b2YgdGhvc2UgZG93bnJlZ3VsYXRlZCBnZW5lcyBhcmUgb24gdGhlIGxlZnQuIEVudGVyIHRoZSA8
YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2xvd2tvdy9nZ3JlcGVsIj5nZ3JlcGVsPC9hPiBw
YWNrYWdlLCBhIG5ldyBleHRlbnNpb24gb2YgZ2dwbG90MiB0aGF0IHJlcGVscyB0ZXh0IGxhYmVs
cyBhd2F5IGZyb20gb25lIGFub3RoZXIuIEp1c3Qgc3ViIGluIGdlb21fdGV4dF9yZXBlbCgpIGlu
IHBsYWNlIG9mIGdlb21fdGV4dCgpIGFuZCB0aGUgZXh0ZW5zaW9uIGlzIHNtYXJ0IGVub3VnaCB0
byB0cnkgdG8gZmlndXJlIG91dCBob3cgdG8gbGFiZWwgdGhlIHBvaW50cyBzdWNoIHRoYXQgdGhl
IGxhYmVscyBkb27igJl0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuIEhlcmUgaXQgaXMgaW4g
YWN0aW9uLjwvcD48L2Rpdj48cHJlIHN0eWxlPSJmb250LWZhbWlseTogQ29uc29sYXMsIEluY29u
c29sYXRhLCBDb3VyaWVyLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMC44NWVtOyBmb250LXNpemU6
IDFlbTsgbGluZS1oZWlnaHQ6IDEuMmVtOyBtYXJnaW46IDEuMmVtIDBweDsiPjxjb2RlIGRhdGEt
YmxvZ2dlci1lc2NhcGVkLXN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4OyBiYWNrZ3Jv
dW5kOiByZ2IoMjQ4LCAyNDgsIDI1NSk7IGJvcmRlci1yYWRpdXM6IDNweDsgYm9yZGVyLXJhZGl1
czogM3B4OyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjA0LCAyMDQsIDIwNCk7IGJvcmRlcjogMXB4
IHNvbGlkIHJnYigyMzQsIDIzNCwgMjM0KTsgY29sb3I6ICMzMzMzMzM7IGRpc3BsYXk6IGJsb2Nr
ICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrOyBkaXNwbGF5OiBpbmxpbmU7IGZvbnQtZmFtaWx5
OiBDb25zb2xhcywgSW5jb25zb2xhdGEsIENvdXJpZXIsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAw
Ljg1ZW07IG1hcmdpbjogMHB4IDAuMTVlbTsgb3ZlcmZsb3c6IGF1dG87IHBhZGRpbmc6IDAuNWVt
IDAuN2VtOyBwYWRkaW5nOiAwLjVlbTsgcGFkZGluZzogMHB4IDAuM2VtOyB3aGl0ZS1zcGFjZTog
cHJlLXdyYXA7IHdoaXRlLXNwYWNlOiBwcmU7Ij4jIEluc3RhbGwgZ2dyZXBlbCBwYWNrYWdlIGlm
IG5lZWRlZAojIGluc3RhbGwucGFja2FnZXMoImRldnRvb2xzIikKIyBkZXZ0b29sczo6aW5zdGFs
bF9naXRodWIoInNsb3drb3cvZ2dyZXBlbCIpCmxpYnJhcnkoZ2dyZXBlbCkKCnArZ2VvbV90ZXh0
X3JlcGVsKGRhdGE9ZmlsdGVyKHJlc3VsdHMsIHBhZGombHQ7MCBkYXRhLWJsb2dnZXItZXNjYXBl
ZC0uMDU9IiIgZGF0YS1ibG9nZ2VyLWVzY2FwZWQtYWVzPSIiIGRhdGEtYmxvZ2dlci1lc2NhcGVk
LWNvZGU9IiIgZGF0YS1ibG9nZ2VyLWVzY2FwZWQtbGFiZWw9IkdlbmUpKSImZ3Q7PCEtLTAtLT48
L2NvZGU+PC9wcmU+PGRpdiBkYXRhLWJsb2dnZXItZXNjYXBlZC1zdHlsZT0ibWFyZ2luOiAxLjJl
bSAwcHggIWltcG9ydGFudDsiPjxwPkFuZCB0aGUgcmVzdWx0IChtdWNoIGJldHRlciEpOjwvcD48
L2Rpdj48ZGl2IGRhdGEtYmxvZ2dlci1lc2NhcGVkLXN0eWxlPSJtYXJnaW46IDEuMmVtIDBweCAh
aW1wb3J0YW50OyI+PHA+PGEgaHJlZj0iaHR0cDovLzEuYnAuYmxvZ3Nwb3QuY29tLy1JSUxncUZu
R1Rpay9Wb19aMEFadk55SS9BQUFBQUFBQ2N6SS9OX0dNUjE5LXFvVS9zMTYwMC9nZ3JlcGVsLnBu
ZyI+PGltZyBib3JkZXI9IjAiIGhlaWdodD0iNjQwIiBzcmM9Imh0dHBzOi8vMS5icC5ibG9nc3Bv
dC5jb20vLUlJTGdxRm5HVGlrL1ZvX1owQVp2TnlJL0FBQUFBQUFDY3pJL05fR01SMTktcW9VL3M2
NDAvZ2dyZXBlbC5wbmciIHdpZHRoPSI2NDAiPjwvYT48L3A+PC9kaXY+PGRpdiBkYXRhLWJsb2dn
ZXItZXNjYXBlZC1zdHlsZT0ibWFyZ2luOiAxLjJlbSAwcHggIWltcG9ydGFudDsiPjxwPlNlZSB0
aGUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3Nsb3drb3cvZ2dyZXBlbC9ibG9iL21hc3Rl
ci92aWduZXR0ZXMvZ2dyZXBlbC5tZCI+Z2dyZXBlbCBwYWNrYWdlIHZpZ25ldHRlPC9hPiBmb3Ig
bW9yZS48L3A+PC9kaXY+PGRpdiBkYXRhLWJsb2dnZXItZXNjYXBlZC1zdHlsZT0ibWFyZ2luOiAx
LjJlbSAwcHggIWltcG9ydGFudDsiPjxwPuKAizwvcD48L2Rpdj48ZGl2IGRhdGEtYmxvZ2dlci1l
c2NhcGVkLXRpdGxlPSJNREg6UEdScGRpQmpiR0Z6Y3owaWJXRnlhMlJ2ZDI0dGFHVnlaUzEzY21G
d2NHVnlJaUJrWVhSaExXSnNiMmRuWlhJdFpYTmpZWEJsWkMxawpZWFJoTFcxa0xYVnliRDBpYUhS
MGNITTZMeTkzZDNjdVlteHZaMmRsY2k1amIyMHZZbXh2WjJkbGNpNW5QMkpzYjJkSlJEMDJNak15
Ck9ERTVORGcyTWpZeE5qazJNRE0xSTJWa2FYUnZjaTkwWVhKblpYUTljRzl6ZER0d2IzTjBTVVE5
TVRZeU1qVTVPVE0zTURjMU1UUXoKTlRjMk5TSWdaR0YwWVMxaWJHOW5aMlZ5TFdWelkyRndaV1F0
YldGeWEyUnZkMjR0YUdWeVpTMTNjbUZ3Y0dWeUxXTnZiblJsYm5RdApiVzlrYVdacFpXUTlJblJ5
ZFdVaVBqeGthWFlnWkdGMFlTMWliRzluWjJWeUxXVnpZMkZ3WldRdGMzUjViR1U5SW0xaGNtZHBi
am9nCk1TNHlaVzBnTUhCNElDRnBiWEJ2Y25SaGJuUTdJajQ4Y0Q1QklIZG9hV3hsSUdKaFkyc2dT
U0J6YUc5M1pXUWdlVzkxSUR4aElHaHkKWldZOUltaDBkSEE2THk5M2QzY3VaMlYwZEdsdVoyZGxi
bVYwYVdOelpHOXVaUzVqYjIwdk1qQXhOQzh3TlM5eUxYWnZiR05oYm04dApjR3h2ZEhNdGRHOHRk
bWx6ZFdGc2FYcGxMWEp1WVhObGNTMXRhV055YjJGeWNtRjVMbWgwYld3aVBtaHZkeUIwYnlCdFlX
dGxJSFp2CmJHTmhibThnY0d4dmRITThMMkUrSUdsdUlHSmhjMlVnVWlCbWIzSWdkbWx6ZFdGc2FY
cHBibWNnWjJWdVpTQmxlSEJ5WlhOemFXOXUKSUhKbGMzVnNkSE11SUZSb2FYTWdhWE1nYW5WemRD
QnZibVVnYjJZZ2JXRnVlU0JuWlc1dmJXVXRjMk5oYkdVZ2NHeHZkSE1nZDJobApjbVVnZVc5MUlH
MXBaMmgwSUhkaGJuUWdkRzhnYzJodmR5QmhiR3dnYVc1a2FYWnBaSFZoYkNCeVpYTjFiSFJ6SUdK
MWRDQm9hV2RvCmJHbG5hSFFnYjNJZ1kyRnNiQ0J2ZFhRZ2FXMXdiM0owWVc1MElISmxjM1ZzZEhN
Z1lua2diR0ZpWld4cGJtY2dkR2hsYlN3Z1ptOXkKSUdWNFlXMXdiR1VzSUhkcGRHZ2dZU0JuWlc1
bElHNWhiV1V1SUR3dmNENDhMMlJwZGo0OFpHbDJJR1JoZEdFdFlteHZaMmRsY2kxbApjMk5oY0dW
a0xYTjBlV3hsUFNKdFlYSm5hVzQ2SURFdU1tVnRJREJ3ZUNBaGFXMXdiM0owWVc1ME95SStQSEEr
UW5WMElHbG1JSGx2CmRTQjNZVzUwSUhSdklHRnVibTkwWVhSbElHeHZkSE1nYjJZZ2NHOXBiblJ6
TENCMGFHVWdZVzV1YjNSaGRHbHZibk1nZFhOMVlXeHMKZVNCblpYUWdjMjhnWTNKdmQyUmxaQ0Iw
YUdGMElIUm9aWGtnYjNabGNteGhjQ0J2Ym1VZ1lXNXZkR2hsY2lCaGJtUWdZbVZqYjIxbApJR2xz
YkdWbmFXSnNaUzRnVkdobGNtVWdZWEpsSUhkaGVYTWdZWEp2ZFc1a0lIUm9hWE1nTFNCeVpXUjFZ
Mmx1WnlCMGFHVWdabTl1CmRDQnphWHBsTENCdmNpQmhaR3AxYzNScGJtY2dkR2hsSUhCdmMybDBh
Vzl1SUc5eUlHRnVaMnhsSUc5bUlIUm9aU0IwWlhoMExDQmkKZFhRZ2RHaGxjMlVnZFhOMVlXeHNl
U0JrYjI3aWdKbDBJR052YlhCc1pYUmxiSGtnYzI5c2RtVWdkR2hsSUhCeWIySnNaVzBzSUdGdQpa
Q0JqWVc0Z1pYWmxiaUJ0WVd0bElIUm9aU0IyYVhOMVlXeHBlbUYwYVc5dUlIZHZjbk5sTGlCSVpY
Smw0b0NaY3lCMGFHVWdjR3h2CmRDQmhaMkZwYml3Z2NtVmhaR2x1WnlCMGFHVWdQR0VnWkdGMFlT
MWliRzluWjJWeUxXVnpZMkZ3WldRdGRHRnlaMlYwUFNKZllteGgKYm1zaUlHaHlaV1k5SW1oMGRI
QnpPaTh2WjJsemRDNW5hWFJvZFdJdVkyOXRMM04wWlhCb1pXNTBkWEp1WlhJdk9EQTJaVE14Wm1O
bApOVFZoT0dJM01UYzFZV1lpUG5KbGMzVnNkSE1nWkdseVpXTjBiSGtnWm5KdmJTQkhhWFJJZFdJ
OEwyRStMQ0JoYm1RZ1pISmhkMmx1Clp5QjBhR1VnY0d4dmRDQjNhWFJvSUdkbmNHeHZkRElnWVc1
a0lHQm5aVzl0WDNSbGVIUmdJRzkxZENCdlppQjBhR1VnWW05NExqd3YKY0Q0OGNENDhZbkkrUEM5
d1BqeHdQbUJnWUR3dmNENDhjRDRqSUV4dllXUWdjR0ZqYTJGblpYTThMM0ErUEhBK2JHbGljbUZ5
ZVNoawpjR3g1Y2lrOEwzQStQSEErYkdsaWNtRnllU2huWjNCc2IzUXlLVHd2Y0Q0OFpHbDJQanhr
YVhZK1BHSnlQand2WkdsMlBqeGthWFkrCkl5QlNaV0ZrSUdSaGRHRWdabkp2YlNCMGFHVWdkMlZp
UEM5a2FYWStQR1JwZGo1MWNtd2dQU0FpYUhSMGNITTZMeTluYVhOMExtZHAKZEdoMVluVnpaWEpq
YjI1MFpXNTBMbU52YlM5emRHVndhR1Z1ZEhWeWJtVnlMemd3Tm1Vek1XWmpaVFUxWVRoaU56RTNO
V0ZtTDNKaApkeTh4WVRVd04yTTBZek5tT1dZeFltRmhZVE5oTmpreE9EY3lNak5tWmpOa016QTFN
RFl5T0dRMEwzSmxjM1ZzZEhNdWRIaDBJand2ClpHbDJQanhrYVhZK1BHSnlQand2WkdsMlBqeGth
WFkrY21WemRXeDBjeUE5SUhKbFlXUXVkR0ZpYkdVb2RYSnNMQ0JvWldGa1pYSTkKVkZKVlJTazhM
MlJwZGo0OFpHbDJQbkpsYzNWc2RITWdQU0J0ZFhSaGRHVW9jbVZ6ZFd4MGN5d2djMmxuUFdsbVpX
eHpaU2h5WlhOMQpiSFJ6SkhCaFpHb21iSFE3TUM0d05Td2dJa1pFVWlac2REc3dMakExSWl3Z0lr
NXZkQ0JUYVdjaUtTazhMMlJwZGo0OFpHbDJQanhpCmNqNDhMMlJwZGo0OFpHbDJQbkFnUFNCbloz
QnNiM1FvY21WemRXeDBjeXdnWVdWektHeHZaekpHYjJ4a1EyaGhibWRsTENBdGJHOW4KTVRBb2NI
WmhiSFZsS1NrcElDczhMMlJwZGo0OFpHbDJQaVp1WW5Od095Qm5aVzl0WDNCdmFXNTBLR0ZsY3lo
amIydzljMmxuS1NrZwpLend2WkdsMlBqeGthWFkrSm01aWMzQTdJSE5qWVd4bFgyTnZiRzl5WDIx
aGJuVmhiQ2gyWVd4MVpYTTlZeWdpY21Wa0lpd2dJbUpzCllXTnJJaWtwUEM5a2FYWStQR1JwZGo1
d0syZGxiMjFmZEdWNGRDaGtZWFJoUFdacGJIUmxjaWh5WlhOMWJIUnpMQ0J3WVdScUpteDAKT3pB
dU1EVXBMQ0JoWlhNb2JHRmlaV3c5UjJWdVpTa3BQQzlrYVhZK1BDOWthWFkrUEdScGRqNDhZbkkr
UEM5a2FYWStQSEErWUdCZwpQQzl3UGp4d1BqeGljajQ4TDNBK1BDOWthWFkrUEdScGRpQmtZWFJo
TFdKc2IyZG5aWEl0WlhOallYQmxaQzF6ZEhsc1pUMGliV0Z5CloybHVPaUF4TGpKbGJTQXdjSGdn
SVdsdGNHOXlkR0Z1ZERzaVBqeHdQanhoSUdoeVpXWTlJbWgwZEhBNkx5OHhMbUp3TG1Kc2IyZHoK
Y0c5MExtTnZiUzh0Y1dGM2VVWTJMVzlsY3pndlZtOWZXVGxrYVRaZlZVa3ZRVUZCUVVGQlFVTmpl
VGd2TWkxZlJuQmlhRVJOWW04dgpjekUyTURBdloyZHlaWEJsYkY5blpXOXRkR1Y0ZEM1d2JtY2lQ
anhwYldjZ1ltOXlaR1Z5UFNJd0lpQm9aV2xuYUhROUlqWTBNQ0lnCmMzSmpQU0pvZEhSd2N6b3ZM
ekV1WW5BdVlteHZaM053YjNRdVkyOXRMeTF4WVhkNVJqWXRiMlZ6T0M5V2IxOVpPV1JwTmw5VlNT
OUIKUVVGQlFVRkJRMk41T0M4eUxWOUdjR0pvUkUxaWJ5OXpOalF3TDJkbmNtVndaV3hmWjJWdmJY
UmxlSFF1Y0c1bklpQjNhV1IwYUQwaQpOalF3SWo0OEwyRStQQzl3UGp3dlpHbDJQanhrYVhZZ1pH
RjBZUzFpYkc5bloyVnlMV1Z6WTJGd1pXUXRjM1I1YkdVOUltMWhjbWRwCmJqb2dNUzR5WlcwZ01I
QjRJQ0ZwYlhCdmNuUmhiblE3SWo0OGNENVhhR0YwSUdFZ2JXVnpjeTRnU1hUaWdKbHpJR1JwWm1a
cFkzVnMKZENCMGJ5QnpaV1VnZDJoaGRDQmhibmtnYjJZZ2RHaHZjMlVnWkc5M2JuSmxaM1ZzWVhS
bFpDQm5aVzVsY3lCaGNtVWdiMjRnZEdobApJR3hsWm5RdUlFVnVkR1Z5SUhSb1pTQThZU0JrWVhS
aExXSnNiMmRuWlhJdFpYTmpZWEJsWkMxMFlYSm5aWFE5SWw5aWJHRnVheUlnCmFISmxaajBpYUhS
MGNITTZMeTluYVhSb2RXSXVZMjl0TDNOc2IzZHJiM2N2WjJkeVpYQmxiQ0krWjJkeVpYQmxiRHd2
WVQ0Z2NHRmoKYTJGblpTd2dZU0J1WlhjZ1pYaDBaVzV6YVc5dUlHOW1JR2RuY0d4dmRESWdkR2ho
ZENCeVpYQmxiSE1nZEdWNGRDQnNZV0psYkhNZwpZWGRoZVNCbWNtOXRJRzl1WlNCaGJtOTBhR1Z5
TGlCS2RYTjBJSE4xWWlCcGJpQThZMjlrWlNCa1lYUmhMV0pzYjJkblpYSXRaWE5qCllYQmxaQzF6
ZEhsc1pUMGlZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlk0WmpobU9Ec2dZbTl5WkdWeUxYSmha
R2wxY3pvZ00zQjQKT3lCaWIzSmtaWEk2SURGd2VDQnpiMnhwWkNCeVoySW9Nak0wTENBeU16UXNJ
REl6TkNrN0lHUnBjM0JzWVhrNklHbHViR2x1WlRzZwpabTl1ZEMxbVlXMXBiSGs2SUVOdmJuTnZi
R0Z6TENCSmJtTnZibk52YkdGMFlTd2dRMjkxY21sbGNpd2diVzl1YjNOd1lXTmxPeUJtCmIyNTBM
WE5wZW1VNklEQXVPRFZsYlRzZ2JXRnlaMmx1T2lBd2NIZ2dNQzR4TldWdE95QndZV1JrYVc1bk9p
QXdjSGdnTUM0elpXMDcKSUhkb2FYUmxMWE53WVdObE9pQndjbVV0ZDNKaGNEc2lQbWRsYjIxZmRH
VjRkRjl5WlhCbGJDZ3BQQzlqYjJSbFBpQnBiaUJ3YkdGagpaU0J2WmlBOFkyOWtaU0JrWVhSaExX
SnNiMmRuWlhJdFpYTmpZWEJsWkMxemRIbHNaVDBpWW1GamEyZHliM1Z1WkMxamIyeHZjam9nCkky
WTRaamhtT0RzZ1ltOXlaR1Z5TFhKaFpHbDFjem9nTTNCNE95QmliM0prWlhJNklERndlQ0J6YjJ4
cFpDQnlaMklvTWpNMExDQXkKTXpRc0lESXpOQ2s3SUdScGMzQnNZWGs2SUdsdWJHbHVaVHNnWm05
dWRDMW1ZVzFwYkhrNklFTnZibk52YkdGekxDQkpibU52Ym5OdgpiR0YwWVN3Z1EyOTFjbWxsY2l3
Z2JXOXViM053WVdObE95Qm1iMjUwTFhOcGVtVTZJREF1T0RWbGJUc2diV0Z5WjJsdU9pQXdjSGdn
Ck1DNHhOV1Z0T3lCd1lXUmthVzVuT2lBd2NIZ2dNQzR6WlcwN0lIZG9hWFJsTFhOd1lXTmxPaUJ3
Y21VdGQzSmhjRHNpUG1kbGIyMWYKZEdWNGRDZ3BQQzlqYjJSbFBpQmhibVFnZEdobElHVjRkR1Z1
YzJsdmJpQnBjeUJ6YldGeWRDQmxibTkxWjJnZ2RHOGdkSEo1SUhSdgpJR1pwWjNWeVpTQnZkWFFn
YUc5M0lIUnZJR3hoWW1Wc0lIUm9aU0J3YjJsdWRITWdjM1ZqYUNCMGFHRjBJSFJvWlNCc1lXSmxi
SE1nClpHOXU0b0NaZENCcGJuUmxjbVpsY21VZ2QybDBhQ0JsWVdOb0lHOTBhR1Z5TGlCSVpYSmxJ
R2wwSUdseklHbHVJR0ZqZEdsdmJpNDgKTDNBK1BIQStQR0p5UGp3dmNENDhjRDVnWUdBOEwzQStQ
SEErSXlCSmJuTjBZV3hzSUdkbmNtVndaV3dnY0dGamEyRm5aU0JwWmlCdQpaV1ZrWldROEwzQStQ
SEErSXlCcGJuTjBZV3hzTG5CaFkydGhaMlZ6S0NKa1pYWjBiMjlzY3lJcFBDOXdQanh3UGlNZ1pH
VjJkRzl2CmJITTZPbWx1YzNSaGJHeGZaMmwwYUhWaUtDSnpiRzkzYTI5M0wyZG5jbVZ3Wld3aUtU
d3ZjRDQ4Y0Q1c2FXSnlZWEo1S0dkbmNtVncKWld3cFBDOXdQanhrYVhZK1BHSnlQand2WkdsMlBq
eGthWFkrUEdScGRqNXdLMmRsYjIxZmRHVjRkRjl5WlhCbGJDaGtZWFJoUFdacApiSFJsY2loeVpY
TjFiSFJ6TENCd1lXUnFKbXgwT3pBdU1EVXBMQ0JoWlhNb2JHRmlaV3c5UjJWdVpTa3BQQzlrYVhZ
K1BDOWthWFkrClBIQStZR0JnUEM5d1BqeHdQanhpY2o0OEwzQStQQzlrYVhZK1BHUnBkaUJrWVhS
aExXSnNiMmRuWlhJdFpYTmpZWEJsWkMxemRIbHMKWlQwaWJXRnlaMmx1T2lBeExqSmxiU0F3Y0hn
Z0lXbHRjRzl5ZEdGdWREc2lQanh3UGtGdVpDQjBhR1VnY21WemRXeDBJQ2h0ZFdObwpJR0psZEhS
bGNpRXBPand2Y0Q0OEwyUnBkajQ4WkdsMklHUmhkR0V0WW14dloyZGxjaTFsYzJOaGNHVmtMWE4w
ZVd4bFBTSnRZWEpuCmFXNDZJREV1TW1WdElEQndlQ0FoYVcxd2IzSjBZVzUwT3lJK1BIQStQR0Vn
YUhKbFpqMGlhSFIwY0Rvdkx6RXVZbkF1WW14dlozTncKYjNRdVkyOXRMeTFKU1V4bmNVWnVSMVJw
YXk5V2IxOWFNRUZhZGs1NVNTOUJRVUZCUVVGQlEyTjZTUzlPWDBkTlVqRTVMWEZ2VlM5egpNVFl3
TUM5blozSmxjR1ZzTG5CdVp5SStQR2x0WnlCaWIzSmtaWEk5SWpBaUlHaGxhV2RvZEQwaU5qUXdJ
aUJ6Y21NOUltaDBkSEJ6Ck9pOHZNUzVpY0M1aWJHOW5jM0J2ZEM1amIyMHZMVWxKVEdkeFJtNUhW
R2xyTDFadlgxb3dRVnAyVG5sSkwwRkJRVUZCUVVGRFkzcEoKTDA1ZlIwMVNNVGt0Y1c5VkwzTTJO
REF2WjJkeVpYQmxiQzV3Ym1jaUlIZHBaSFJvUFNJMk5EQWlQand2WVQ0OEwzQStQQzlrYVhZKwpQ
R1JwZGlCa1lYUmhMV0pzYjJkblpYSXRaWE5qWVhCbFpDMXpkSGxzWlQwaWJXRnlaMmx1T2lBeExq
SmxiU0F3Y0hnZ0lXbHRjRzl5CmRHRnVkRHNpUGp4d1BsTmxaU0IwYUdVZ1BHRWdaR0YwWVMxaWJH
OW5aMlZ5TFdWelkyRndaV1F0ZEdGeVoyVjBQU0pmWW14aGJtc2kKSUdoeVpXWTlJbWgwZEhCek9p
OHZaMmwwYUhWaUxtTnZiUzl6Ykc5M2EyOTNMMmRuY21Wd1pXd3ZZbXh2WWk5dFlYTjBaWEl2ZG1s
bgpibVYwZEdWekwyZG5jbVZ3Wld3dWJXUWlQbWRuY21Wd1pXd2djR0ZqYTJGblpTQjJhV2R1WlhS
MFpUd3ZZVDRnWm05eUlHMXZjbVV1ClBDOXdQand2WkdsMlBqeGthWFlnWkdGMFlTMWliRzluWjJW
eUxXVnpZMkZ3WldRdGRHbDBiR1U5SWsxRVNEcFFTRUVyVVZOQ00yRkgKYkhOYVUwSnBXVmRPY2ts
RmEyZGpNbWgyWkRKV2EwbEliSFprVTBKaVlVYzVNMGxJVW5aSlJ6Rm9ZVEpWWjJSdE9YTlpNa1ox
WW5sQwpkMkpIT1RCak1UQnZDbUZJVWpCalJHOTJURE5rTTJSNU5XNWFXRkl3WVZjMWJsb3lWblZh
V0ZKd1dUTk9hMkl5Tld4TWJVNTJZbE00CmVVMUVSVEJNZWtFeFRETkpkR1J0T1hOWk1rWjFZbmt4
ZDJKSE9UQUtZM2t4TUdKNU1USmhXRTR4V1ZkNGNHVnRWWFJqYlRWb1l6SlcKZUV4WE1YQlpNMHAy
V1ZoS2VWbFlhM1ZoU0ZKMFlrTnJaMkZYTkdkWmJVWjZXbE5DVTBsSFduWmphVUl5WVZoT01RcFpW
M2h3WlcxcwpkVnA1UW01YVZ6VnNTVWRXTkdOSVNteGpNMDV3WWpJMFoyTnRWbnBrVjNnd1kzazBa
MVpIYUhCamVVSndZM2xDY1dSWVRqQkpSemx0ClNVZEdkV1ZUUW5Wa1Z6RnBDbHBZU1dkaU1sbG5X
akpXZFdJeU1XeE1XRTVxV1ZkNGJFbElRbk5pTTFKNlNVaGtiMXBZU214SlNHeDIKWkZOQ2RHRlha
RzlrUTBJeldWYzFNRWxJVW5aSlNFNXZZak5qWjFsWGVITUtTVWRzZFZwSGJESmhWMUl4V1ZkM1oy
TnRWbnBrVjNndwpZM2xDYVdSWVVXZGhSMnh1WVVkNGNGb3lhREJKUnpsNVNVZE9hR0pIZDJkaU0x
WXdTVWRzZEdOSE9YbGtSMFoxWkVOQ2VRcGFXRTR4CllraFNla2xIU2pWSlIzaG9XVzFXYzJGWE5X
NUpTRkp2V2xjd2MwbEhXblpqYVVKc1pVZEdkR05IZUd4TVEwSXpZVmhTYjBsSFJXZGEKTWxaMVds
TkNkVmxYTVd4TWFWcDFDbGx1VG5kUGVuZDJZMFEwT0dORU5EaFpia2tyVUVNNWQxQnFlSGRRYTBv
eFpFTkNjRnBwUWpWaQpNMVZuWkRKR2RXUkRRakJpZVVKb1ltMDFkbVJIUmpCYVUwSnpZak5TZWts
SE9XMEtTVWhDZG1GWE5UQmplWGRuWkVkb2JFbEhSblZpCmJUa3dXVmhTY0dJeU5YcEpTRlo2WkZk
R2MySklhMmRhTWxZd1NVaE9ka2xIVG5saU0yUnJXbGRSWjJSSGFHaGtRMEl3WVVkV05RcEoKUnpr
eVdsaEtjMWxZUVdkaU1qVnNTVWRHZFdJelVtOWFXRWxuV1ZjMWEwbEhTbXhaTWpsMFdsTkNjR0pI
ZUd4YU1teHBZa2RWZFVsRwpVbTlhV0Vwc1NVZEdlVnBUUWpOWldHeDZDa2xIUm5saU0xWjFXa05D
TUdGSGJIcEpRekJuWTIxV2EyUlhUbkJpYldOblpFZG9iRWxIClduWmlibEZuWXpKc05scFRkMmRp
TTBsbldWZFNjV1JZVGpCaFZ6VnVTVWhTYjFwVFFuY0tZak5PY0dSSGJIWmlhVUoyWTJsQ2FHSnQK
WkhOYVUwSjJXbWxDTUdGSFZXZGtSMVkwWkVOM1oxbHVWakJKU0ZKdldsaE9iRWxJVm5wa1YwWnpZ
a2hyWjFwSE9YVktNMUZuV1RJNQpkQXBqUjNoc1pFZFdjMlZUUW5waU1uZ3lXbE5DTUdGSFZXZGpT
RXAyV1cxNGJHSlRkMmRaVnpWclNVZE9hR0pwUW14a2JWWjFTVWN4CmFHRXlWV2RrUjJoc1NVaGFj
R016Vm1oaVIydzJDbGxZVW5CaU1qUm5aREk1ZVdNeVZYVkpSV2hzWTIxVmJtTjVRakJoUjFWblkw
ZDQKZG1SRFFtaGFNa1p3WW1sM1oyTnRWbWhhUjJ4MVdubENhMWxZVW1oSlIxSndZMjFXYW1SSGVE
VUtTVWRhZVdJeU1HZFNNbXd3VTBoVwphVXhEUW1oaWJWRm5Xa2hLYUdReWJIVmFlVUl3WVVkVloy
TkhlSFprUTBJellWaFNiMGxIWkc1alIzaDJaRVJKWjJJelZqQkpSemx0ClNVaFNid3BhVTBKcFlq
Tm5kVkJET1hkUWFuaDNVR3A0YVdOcU5EaE1NMEVyVUVoQksxbEhRbWRRUXpsM1VHcDRkMUJwVFdk
VVJ6bG8KV2tOQ2QxbFhUbkpaVjJSc1kzcDNkbU5FTkRoalJEVnpDbUZYU25sWldFbzFTMGRTZDJK
SWJIbExWSGQyWTBRME9HTkVOWE5oVjBwNQpXVmhLTlV0SFpHNWpSM2gyWkVSSmNGQkRPWGRRYW5o
cllWaFpLMUJIVW5Ca2FqUTRXVzVKSzFCRE9Xc0tZVmhaSzFCSFVuQmthalJxClNVWktiRmxYVVdk
YVIwWXdXVk5DYldOdE9YUkpTRkp2V2xOQ00xcFhTVGhNTWxKd1pHbzBPRnBIYkRKUWJsWjVZa05C
T1VsRFNtOWsKU0ZKM1kzcHZkZ3BNTW1Sd1l6TlJkVm95YkRCaFNGWnBaRmhPYkdOdFRuWmlibEpz
WW01UmRWa3lPWFJNTTA0d1dsaENiMXBYTlRCawpXRXAxV2xoSmRrOUVRVEphVkUxNFdtMU9iRTVV
Vm1oUFIwa3pDazFVWXpGWlYxbDJZMjFHTTB4NlJtaE9WRUV6V1hwU2FrMHlXVFZhCmFrWnBXVmRH
YUUweVJUSlBWRVUwVG5wSmVVMHlXbTFOTWxGNlRVUlZkMDVxU1RSYVJGRjJZMjFXZW1SWGVEQUtZ
M2sxTUdWSVVXbFEKUXpscllWaFpLMUJIVW5Ca2FqUTRXVzVKSzFCRE9XdGhXRmtyVUVkU2NHUnFO
WGxhV0U0eFlraFNla2xFTUdkamJWWm9Xa00xTUZsWApTbk5hVTJneFkyMTNjd3BKUjJoc1dWZFNi
R05xTVZWVmJGWkdTMVIzZGxwSGJESlFhbmhyWVZoWksyTnRWbnBrVjNnd1kzbEJPVWxICk1URmtS
MFl3V2xOb2VWcFlUakZpU0ZKNlRFTkNlbUZYWXpsaFYxcHNDbUpJVG14TFNFcHNZek5XYzJSSVRX
dGpSMFpyWVdsYWMyUkUKYzNkTWFrRXhURU5CYVZKclVsTktiWGd3VDNwQmRVMUVWV2xNUTBGcFZH
MDVNRWxHVG5CYWVVbHdTMVIzZGxwSGJESUtVR3A0YTJGWQpXU3RRUjBwNVVHcDNkbHBIYkRKUWFu
aHJZVmhaSzBsNVFrNVpWM1JzU1VoU2IxcFRRbWxaV0U1c1NVaENjMkl6VVRoTU1sSndaR28wCk9G
cEhiREpRYmtGblNtMTRNQXBQZVRCbldqSmtkMkpIT1RCTFNFcHNZek5XYzJSSVRYTkpSMFpzWTNs
b2MySXlZM2xTYlRseldrVk8KYjFsWE5XNWFVM2RuVEZkNGRscDZSWGRMU0VJeVdWZDRNVnBUYTNC
TFUwRnlDbEJET1d0aFdGa3JVRWRTY0dScU5HMWliVXA2WTBSegpaMW95Vm5aaVZqbDNZakpzZFdS
RGFHaGFXRTF2V1RJNWMxQllUbkJhZVd0d1NVTnpPRXd5VW5Ca2FqUTRXa2RzTWxCcFduVUtXVzVP
CmQwOTVRbnBaTWtaeldsWTVhbUl5ZUhaamJEbDBXVmMxTVZsWGQyOWtiVVp6WkZkV2VsQlhUVzlK
Ymtwc1drTkpjMGxEU21saVIwWnEKWVhsSmNFdFVkM1phUjJ3eVVHcDNkZ3BhUjJ3eVVHcDRhMkZZ
V1N0UVIwcDVVR3AzZGxwSGJESlFhbmhyWVZoWkswbDVRbWhhUjFGbgpaRWRXTkdSRFFuTlpWMHBz
WWtoTk9Fd3lVbkJrYWpRNFdrZHNNbEJ1UVhKYU1sWjJDbUpXT1RCYVdHZ3dTMGRTYUdSSFJUbGFi
V3h6ClpFZFdlVXRJU214ak0xWnpaRWhOYzBsSVFtaGFSMjl0WWtoUk4wMUROSGRPVTJ0elNVZEdi
R041YUhOWlYwcHNZa1F4U0ZwWE5Xd0sKUzFOck9Fd3lVbkJrYWpRNFdrZHNNbEJ0UW1kWlJIZDJX
a2RzTWxCcWVHdGhXRmtyVUVkS2VWQnFkM1phUjJ3eVVHcDRhMkZZV1N0UQpSMFZuWVZjeGFGb3lW
bWhpYlU1dllqTkpPUXBKYWtWcFNVZG9lVnBYV1RsSmJXZ3daRWhCTmt4NU9IaE1iVXAzVEcxS2My
SXlaSHBqClJ6a3dURzFPZG1KVE9IUmpWMFl6WlZWWk1reFhPV3hqZW1kMlZtMDVabGRVYkd0aFZG
cG1DbFpWYTNaUlZVWkNVVlZHUWxGVlRtcGwKVkdkMlRXa3habEp1UW1saFJWSk9XVzA0ZG1ONlJU
Sk5SRUYyV2pKa2VWcFlRbXhpUmpsdVdsYzVkR1JIVmpSa1F6VjNZbTFqYVZCcQplSEFLWWxkaloy
TXpTbXBRVTBwdlpFaFNkMDlwT0haTlV6VnBZME0xYVdKSE9XNWpNMEoyWkVNMWFtSXlNSFpNV0Va
b1pETnNSMDVwCk1YWmFXRTAwVERGYWRsZ3hhelZhUjJzeVdERldTZ3BNTUVaQ1VWVkdRbEZWUmtS
Wk0yczBUSHBKZEZnd1duZFpiV2hGVkZkS2Rrd3oKVFRKT1JFRjJXakprZVZwWVFteGlSamx1V2xj
NWRHUkhWalJrUXpWM1ltMWphVWxIU25aamJWSnNDbU5xTUdsTlEwbG5aREpzYTJSSApaemxKYWxr
d1RVTkpaMkZIVm5CYU1tZ3dVRk5KTWs1RVFXbFFhbmQyV1ZRME9GbHVTU3RRUXpscllWaFpLMUJI
VW5Ca2FqUTRXVzVKCksxQkRPV3NLWVZoWksxQkhVbkJrYWpWWVlVZEdNRWxIUldkaVYxWjZZM2sw
WjFOWVVXNWplVUpyWVZkYWJXRlhUakZpU0ZGblpFYzQKWjJNeVZteEpTR1J2V1ZoUloxbFhOVFZK
UnpsdFNVaFNid3BpTTA1c1NVZFNkbVF5TlhsYVYyUXhZa2RHTUZwWFVXZGFNbFoxV2xoTgpaMWxZ
U214SlJ6bDFTVWhTYjFwVFFuTmFWMW93VEdsQ1JtSnVVbXhqYVVJd1lVZFZaMWN5Wkc1amJWWjND
bHBYZUdSTFIyZ3daRWhDCmVrOXBPSFphTW13d1lVaFdhVXh0VG5aaVV6bDZZa2M1TTJFeU9UTk1N
bVJ1WTIxV2QxcFhkM0JKU0VKb1dUSjBhRm95VlhOSlIwVm4KWW0xV00wbEhWalFLWkVkV2RXTXli
SFppYVVKMldtbENibG96UW5OaU0xRjVTVWhTYjFsWVVXZGpiVlozV2xkNGVrbElVbXhsU0ZGbgpZ
a2RHYVZwWGVIcEpSMFl6V1ZocloxcHVTblppVTBKMlltMVZad3BaVnpWMlpFZG9iR05wTkdkVGJs
WjZaRU5DZW1SWFNXZGhWelJuCldVZGtiR0l5TVdaa1IxWTBaRVk1ZVZwWVFteGlRMmR3V1VOQ2NH
SnBRbmRpUjBacVdsTkNkbHBwUW1kYU1sWjJDbUpXT1RCYVdHZ3cKUzBOc1owbEhSblZhUTBJd1lV
ZFZaMXBZYURCYVZ6VjZZVmM1ZFVsSGJIcEpTRTUwV1ZoS01FbEhWblZpTTFadVlVTkNNR0o1UWpC
agpibXRuWkVjNFoxcHRiRzRLWkZoS2JFbEhPVEZrUTBKdllqTmpaMlJIT0dkaVIwWnBXbGQzWjJS
SGFHeEpTRUoyWVZjMU1HTjVRbnBrClYwNXZTVWhTYjFsWVVXZGtSMmhzU1VkNGFGbHRWbk5qZVVK
cllqSTBiZ3BrUTBKd1ltNVNiR050V214amJWVm5aREpzTUdGRFFteFoKVjA1dlNVYzVNR0ZIVm5s
TWFVSkpXbGhLYkVsSGJEQkpSMng2U1Vkc2RVbEhSbXBrUjJ4MlltazBPRXd5VW5Ca2FqUTRDbHBI
YkRKUQphbmhwWTJvME9Fd3lVbkJrYWpRNFdrZHNNbEJ0UW1kWlJIZDJXa2RzTWxCcWVHdGhXRmty
VUVkU2NHUnFOR3BKUld4MVl6TlNhR0pICmQyZGFNbVI1V2xoQ2JHSkRRbmNLV1ZkT2NsbFhaR3hK
UjJ4dFNVYzFiRnBYVW14YVJIZDJXa2RzTWxCcWVHdGhXRmtyU1hsQ2NHSnUKVGpCWlYzaHpURzVD
YUZreWRHaGFNbFo2UzBOS2ExcFlXakJpTWpselkzbEpjQXBRUXpscllWaFpLMUJIVW5Ca2FqUnFT
VWRTYkdSdQpVblppTW5oNlQycHdjR0p1VGpCWlYzaHpXREprY0dSSGFERlphV2RwWXpKNGRtUXlk
SFprZVRsdVdqTktiR05IVm5OSmFXczRDa3d5ClVuQmthalE0V2tkc01sQnRlSEJaYmtwb1kyNXJi
MW95WkhsYVdFSnNZa05yT0V3eVVuQmthalE0VERKU2NHUnFORGhhUjJ3eVVHcDQKYVdOcU5EaE1N
bEp3WkdvME9GcEhiRElLVUdwNGEyRllXU3RqUTNSdVdsYzVkRmd6VW14bFNGSm1ZMjFXZDFwWGQy
OWFSMFl3V1ZReApiV0ZYZURCYVdFbHZZMjFXZW1SWGVEQmplWGRuWTBkR2EyRnBXbk5rUkhOM1RH
cEJNUXBMVTNkbldWZFdla3RIZUdoWmJWWnpVRlZrCmJHSnRWWEJMVkhkMldrZHNNbEJxZUd0aFdG
a3JXVWRDWjFCRE9XdGhXRmtyVUVNNWEyRllXU3RRUjFKd1pHbzBPRmx1U1N0UVF6bHIKQ21GWVdT
dFFSMUp3WkdvMVFtSnRVV2RrUjJoc1NVaEtiR016Vm5Oa1EwRnZZbGhXYW1GRFFtbGFXRkl3V2xo
SmFFdFViemhNTWxKdwpaR28wT0ZwSGJESlFhbmhwWTJvME9Fd3lVbkFLWkdvME9GcEhiREpRYW5o
b1NVZHNkRmxYWkd4WlZ6VnFZVWM1ZVZCVFNYaEphVUp2ClkyMVdiVkJUU205a1NGSjNUMms0ZGsx
VE5XbGpRelZwWWtjNWJtTXpRblprUXpWcVlqSXdkZ3BNVld4S1ZFZGtlRkp0TlVoV1IyeHkKVERG
YWRsZ3hiM2RSVm5BeVZHNXNTa3d3UmtKUlZVWkNVVlZHUkZremNFcE1NRFZtVWpBeFUwMVVhM1Jq
VnpsV1RETk5lRTVxUVhkTQpNbVJ1Q21OdFZuZGFWM2QxWTBjMWJrbHFORGhoVnpGdVNVaE9lVmw2
TUdsaFNGSXdZMFJ2ZGt4NlJYVlpia0YxV1cxNGRsb3pUbmRpCk0xRjFXVEk1ZEV4NU1VcFRWWGh1
WTFWYWRWSXhVbkFLWVhrNVYySXhPV0ZOUlVaaFpHczFOVk5UT1VKUlZVWkNVVlZHUWxFeVRqWlQK
VXpsUFdEQmtUbFZxUlRWTVdFWjJWbE01ZWs1cVVYZE1NbVJ1WTIxV2QxcFhkM1ZqUnpWdVNXbENh
UXBpTTBwcldsaEpPVWxxUVdsSgpTR1J3V2toU2IxQlRTVEpPUkVGcFNVZG9iR0ZYWkc5a1JEQnBU
bXBSZDBscU5EaE1Na1VyVUVkS2VWQnFkM1phUjJ3eVVHcDRhMkZZCldTdFFSMHA1Q2xCcWQzWmFS
Mnd5VUdwNGEyRllXU3RWTWxac1NVaFNiMXBUUW1KYU1tUjVXbGhDYkdKRFFuZFpWMDV5V1Zka2JF
bEkKV25CYU1qVnNaRWhTYkZoVGFHOWtTRkozWTNwdmRrd3laSEFLWkVkb01WbHBOV3BpTWpCMll6
SjRkbVF5ZEhaa2VUbHVXak5LYkdOSApWbk5NTWtwellqSkpkbUpYUm5wa1IxWjVURE5hY0ZveU5X
eGtTRkpzWTNrNWJsb3pTbXhqUjFaelRHMHhhd3BMVTBKdFlqTkpaMkpYCk9YbGFVelE0VERKU2NH
UnFORDBpSUhOMGVXeGxQU0ptYjI1MExYTnBlbVU2SURCbGJUc2dhR1ZwWjJoME9pQXdPeUJ0WVhK
bmFXNDYKSURBN0lHMWhlQzFvWldsbmFIUTZJREE3SUcxaGVDMTNhV1IwYURvZ01Ec2diM1psY21a
c2IzYzZJR2hwWkdSbGJqc2djR0ZrWkdsdQpaem9nTURzZ2QybGtkR2c2SURBN0lqNDhjRDdpZ0lz
OEwzQStQQzlrYVhZK1BDOWthWFkrIiBzdHlsZT0iZm9udC1zaXplOiAwZW07IGhlaWdodDogMDsg
bWFyZ2luOiAwOyBtYXgtaGVpZ2h0OiAwOyBtYXgtd2lkdGg6IDA7IG92ZXJmbG93OiBoaWRkZW47
IHBhZGRpbmc6IDA7IHdpZHRoOiAwOyI+PHA+4oCLPC9wPjwvZGl2PjwvZGl2Pg==">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com8tag:blogger.com,1999:blog-6232819486261696035.post-79944704922306572122015-12-14T08:29:00.000-06:002015-12-14T08:29:15.653-06:00GRUPO: Shiny App For Benchmarking Pubmed Publication Output<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=7994470492230657212" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
<em>This is a guest post from <a href="https://github.com/vpnagraj">VP Nagraj</a>, a data scientist embedded within UVA’s Health Sciences Library, who runs our <a href="https://www.bioconnector.virginia.edu/dash">Data Analysis Support Hub (DASH)</a> service.</em></div>
<h2 id="the-what" style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; font-size: 1.4em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
The What</h2>
<div style="margin: 1.2em 0px !important;">
<a href="http://apps.bioconnector.virginia.edu/grupo/">GRUPO (Gauging Research University Publication Output)</a> is a Shiny app that provides side-by-side benchmarking of American research university publication activity.</div>
<h2 id="the-how" style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; font-size: 1.4em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
The How</h2>
<div style="margin: 1.2em 0px !important;">
The <a href="https://github.com/vpnagraj/grupo">code behind the app</a> is written in R, and leverages the <a href="http://www.ncbi.nlm.nih.gov/books/NBK25501/">NCBI Eutils API</a> via the <a href="https://cran.r-project.org/web/packages/rentrez/index.html">rentrez</a> package interface.</div>
<div style="margin: 1.2em 0px !important;">
The methodology is fairly simple:</div>
<ol style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;">Build the search query in Pubmed syntax based on user input parameters.</li>
<li style="margin: 0.5em 0px;">Extract total number of articles from results.</li>
<li style="margin: 0.5em 0px;">Output a visualization of the total counts for both selected institutions.</li>
<li style="margin: 0.5em 0px;">Extract unique article identifiers from results.</li>
<li style="margin: 0.5em 0px;">Output the number of article identifiers that match (i.e. “collaborations”) between the two selected institutions.</li>
</ol>
<h3 id="build-query" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Build Query</h3>
<div style="margin: 1.2em 0px !important;">
The syntax for the searching Pubmed relies on <a href="http://www.ncbi.nlm.nih.gov/books/NBK3827/#pubmedhelp.Search_Field_Descriptions_and">MEDLINE tags</a> and boolean operators. You can peek into how to use the keywords and build these kinds of queries with the <a href="http://www.ncbi.nlm.nih.gov/pubmed/advanced">Pubmed Advanced Search Builder</a>. </div>
<div style="margin: 1.2em 0px !important;">
GRUPO builds its queries based on two fields in particular: “Affiliation” and “Date.” Because this search term will have to be built multiple times (at least twice to compare results for two institutions) I wrote a helper function called <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">build_query()</code>:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># use %y/%m/%d (e.g. 1999/02/14) date format for startDate and endDate arguments</span>
build_query = <span class="hljs-keyword">function</span>(institution, startDate, endDate) {
<span class="hljs-keyword">if</span> (grepl(<span class="hljs-string">"-"</span>, institution)==<span class="hljs-literal">TRUE</span>) {
split_name = strsplit(institution, split=<span class="hljs-string">"-"</span>)
search_term = paste(split_name[[<span class="hljs-number">1</span>]][<span class="hljs-number">1</span>], <span class="hljs-string">'[Affiliation]'</span>,
<span class="hljs-string">' AND '</span>,
split_name[[<span class="hljs-number">1</span>]][<span class="hljs-number">2</span>],
<span class="hljs-string">'[Affiliation]'</span>,
<span class="hljs-string">' AND '</span>,
startDate,
<span class="hljs-string">'[PDAT] : '</span>,
endDate,
<span class="hljs-string">'[PDAT]'</span>,
sep=<span class="hljs-string">''</span>)
search_term = gsub(<span class="hljs-string">"-"</span>,<span class="hljs-string">"/"</span>,search_term)
} <span class="hljs-keyword">else</span> {
search_term = paste(institution,
<span class="hljs-string">'[Affiliation]'</span>,
<span class="hljs-string">' AND '</span>,
startDate,
<span class="hljs-string">'[PDAT] : '</span>,
endDate,
<span class="hljs-string">'[PDAT]'</span>,
sep=<span class="hljs-string">''</span>)
search_term = gsub(<span class="hljs-string">"-"</span>,<span class="hljs-string">"/"</span>,search_term)
}
<span class="hljs-keyword">return</span>(search_term)
}
</code></pre>
<div style="margin: 1.2em 0px !important;">
The <em>if/else</em> logic in there accommodates cases like “University of North Carolina-Chapel Hill”, which otherwise wouldn’t search properly in the affiliation field. This method does depend on the institution name having its specific locale separated by a <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">-</code> symbol. In other words, if you passed in “University of Colorado/Boulder” you’d be stuck.</div>
<div style="margin: 1.2em 0px !important;">
So by using this function for the University of Virginia from January 1, 2014 to January 1, 2015 you’d get the following term:</div>
<div style="margin: 1.2em 0px !important;">
<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">University of Virginia[Affiliation] AND 2014/01/01[PDAT] : 2015/01/01[PDAT]</code></div>
<div style="margin: 1.2em 0px !important;">
And for University of Texas-Austin over the same dates you get the following term:</div>
<div style="margin: 1.2em 0px !important;">
<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">University of Texas[Affiliation] AND Austin[Affiliation] AND 2014/01/01[PDAT] : 2015/01/01[PDAT]</code></div>
<div style="margin: 1.2em 0px !important;">
The advantage of using this function in a Shiny app is that you can pass the institution names and dates dynamically. Users enter the input parameters for which date range and institutions to search via the widgets in the ui.R script.</div>
<div style="margin: 1.2em 0px !important;">
For the app to work, there has to be one date picker widget and two text inputs (one for each of the two institutions) in the ui.R script. The corresponding server.R script would have a reactive element wrapped around the following:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">search_term = build_query(institution = input$institution1, startDate = input$dates[<span class="hljs-number">1</span>], endDate = input$dates[<span class="hljs-number">2</span>])
search_term2 = build_query(institution = input$institution2, startDate = input$dates[<span class="hljs-number">1</span>], endDate = input$dates[<span class="hljs-number">2</span>])
<span class="hljs-comment">### Run Query</span>
</code></pre>
<div style="margin: 1.2em 0px !important;">
With the query built, you can run the search in Pubmed. The <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">entrez_search()</code> function from the <em>rentrez</em> package lets us get the information we want. This function returns four elements: </div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;">ids (unique Pubmed identifiers for each article in the result list)</li>
<li style="margin: 0.5em 0px;">count (total number of results)</li>
<li style="margin: 0.5em 0px;">retmax (maximum number of results that could have been returned)</li>
<li style="margin: 0.5em 0px;">file (the actual XML record containing the values above)</li>
</ul>
<div style="margin: 1.2em 0px !important;">
The following code returns total articles for each of two different searches:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">affiliation_search = entrez_search(<span class="hljs-string">"pubmed"</span>, search_term, retmax = <span class="hljs-number">99999</span>)
affiliation_search2 = entrez_search(<span class="hljs-string">"pubmed"</span>, search_term2, retmax = <span class="hljs-number">99999</span>)
total_articles = as.numeric(affiliation_search$count)
total_articles2 = as.numeric(affiliation_search2$count)
</code></pre>
<h3 id="plot-results" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Plot Results</h3>
<div style="margin: 1.2em 0px !important;">
The code above lives in the server.R script and is the functional workhorse for the app. But to adequately represent the benchmarking, GRUPO needed some kind of plot. </div>
<div style="margin: 1.2em 0px !important;">
We can combine the total articles for each institution with the institution names, which we used to build the search terms. The result is a tiny (2 x 2) data frame of “Institution” and “Total.Articles” variables. Nothing fancy. But it does the trick.</div>
<div style="margin: 1.2em 0px !important;">
With a data frame in hand, we can load it into <em>ggplot2</em> and do some very simple barplotting:</div>
<div style="margin: 1.2em 0px !important;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz0Z6LABS8SI5OwE2a9mXGVa5dkx-CPUohd7AwDASQ3cZOw7_v467lTmI1GAEW24En2IeKJRamNiFkigYrt66NCZ5nPAfSFFYgjRdamWF54dEPNI-uUNknRnC4YX1xG9bcJgaXwKQCIAY/s1600/grupo_example.png" imageanchor="1"><img border="0" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz0Z6LABS8SI5OwE2a9mXGVa5dkx-CPUohd7AwDASQ3cZOw7_v467lTmI1GAEW24En2IeKJRamNiFkigYrt66NCZ5nPAfSFFYgjRdamWF54dEPNI-uUNknRnC4YX1xG9bcJgaXwKQCIAY/s640/grupo_example.png" width="640" /></a></div>
<h3 id="output-collaborations" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Output Collaborations</h3>
<div style="margin: 1.2em 0px !important;">
Although the primary function of GRUPO is side-by-side benchmarking, it does have at least one other feature so far.</div>
<div style="margin: 1.2em 0px !important;">
The inclusion of the “ids” object in the query result makes it possible to do something else. You can compare how many of the article identifiers match between two queries. That should represent the number of “collaborations” (i.e. how many of the publications share authorship) between individuals at the two institutions.</div>
<div style="margin: 1.2em 0px !important;">
To get the total number of collaborations, we can do a simple calculation of length on the vector of intersections between the two search results:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">collaboration_count = length(intersect(affiliation_search$ids,affiliation_search2$ids)
</code></pre>
<div style="margin: 1.2em 0px !important;">
By placing the search call inside a <a href="http://shiny.rstudio.com/articles/reactivity-overview.html">reactive element</a> within Shiny, GRUPO can store the results (“count” and “ids”) rather than repeating the query for each purpose.</div>
<div style="margin: 1.2em 0px !important;">
<strong>NB</strong> This approach to assessing collaboration counts is spurious when considering articles published before October 2013, which was when the <a href="https://www.nlm.nih.gov/bsd/mms/medlineelements.html#ad">National Library of Medicine (NLM) began including affiliation tags for <em>all</em> authors.</a></div>
<h2 id="the-next-steps" style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; font-size: 1.4em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
The Next Steps</h2>
<div style="margin: 1.2em 0px !important;">
What’s next? There are a number of potential new features for GRUPO. It’s worth pointing out that a discussion of these possibilities will likely highlight some of the limitations of the app as it exists now.</div>
<div style="margin: 1.2em 0px !important;">
For example, it would be advantageous to include other “research output” data sources. GRUPO currently only accounts for publications indexed in Pubmed. That’s a fairly one-dimensional representation of scholarly activities. Information about publications indexed elsewhere, funding awarded or altmetric indicators isn’t accounted for. </div>
<div style="margin: 1.2em 0px !important;">
And neither is any information about the institutions. While all of them are considered to have <a href="https://en.wikipedia.org/wiki/List_of_research_universities_in_the_United_States">very high research activity</a> one could argue that some are “apples” and some are “oranges” based on discrepancies in budgets, number of faculty members, student body size, etc. A more thorough benchmarking tool might model research universities based on additional administrative data, and restrict comparisons to “similar” institutions. </div>
<div style="margin: 1.2em 0px !important;">
So GRUPO is still a work in progress. But it’s a solid example of a Shiny app that effectively leverages an API as its primary data source. Feel free to post a comment if you have any feedback or questions.</div>
<div style="margin: 1.2em 0px !important;">
Grupo Shiny App: <a href="http://apps.bioconnector.virginia.edu/grupo/">http://apps.bioconnector.virginia.edu/grupo/</a></div>
<div style="margin: 1.2em 0px !important;">
Grupo Source Code: <a href="https://github.com/vpnagraj/grupo">https://github.com/vpnagraj/grupo</a></div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PHA+X1RoaXMgaXMgYSBndWVzdCBwb3N0IGZyb20gW1ZQIE5hZ3Jhal0oaHR0cHM6Ly9naXRodWIu
Y29tL3ZwbmFncmFqKSwgYSBkYXRhIHNjaWVudGlzdCBlbWJlZGRlZCB3aXRoaW4gVVZBJ3MgSGVh
bHRoIFNjaWVuY2VzIExpYnJhcnksIHdobyBydW5zIG91ciBbRGF0YSBBbmFseXNpcyBTdXBwb3J0
IEh1YiAoREFTSCldKGh0dHBzOi8vd3d3LmJpb2Nvbm5lY3Rvci52aXJnaW5pYS5lZHUvZGFzaCkg
c2VydmljZS5fPC9wPjxwPjxicj48L3A+PHA+IyMgVGhlIFdoYXQ8L3A+PHA+PGJyPjwvcD48cD5b
R1JVUE8gKEdhdWdpbmcgUmVzZWFyY2ggVW5pdmVyc2l0eSBQdWJsaWNhdGlvbiBPdXRwdXQpXSho
dHRwOi8vYXBwcy5iaW9jb25uZWN0b3IudmlyZ2luaWEuZWR1L2dydXBvLykgaXMgYSBTaGlueSBh
cHAgdGhhdCBwcm92aWRlcyBzaWRlLWJ5LXNpZGUgYmVuY2htYXJraW5nIG9mIEFtZXJpY2FuIHJl
c2VhcmNoIHVuaXZlcnNpdHkgcHVibGljYXRpb24gYWN0aXZpdHkuPC9wPjxwPjxicj48L3A+PHA+
IyMgVGhlIEhvdzwvcD48cD48YnI+PC9wPjxwPlRoZSBbY29kZSBiZWhpbmQgdGhlIGFwcF0oaHR0
cHM6Ly9naXRodWIuY29tL3ZwbmFncmFqL2dydXBvKSBpcyB3cml0dGVuIGluIFIsIGFuZCBsZXZl
cmFnZXMgdGhlIFtOQ0JJIEV1dGlscyBBUEldKGh0dHA6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9i
b29rcy9OQksyNTUwMS8pIHZpYSB0aGUgW3JlbnRyZXpdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qu
b3JnL3dlYi9wYWNrYWdlcy9yZW50cmV6L2luZGV4Lmh0bWwpIHBhY2thZ2UgaW50ZXJmYWNlLjwv
cD48cD48YnI+PC9wPjxwPlRoZSBtZXRob2RvbG9neSBpcyBmYWlybHkgc2ltcGxlOjwvcD48cD48
YnI+PC9wPjxwPjEuIEJ1aWxkIHRoZSBzZWFyY2ggcXVlcnkgaW4gUHVibWVkIHN5bnRheCBiYXNl
ZCBvbiB1c2VyIGlucHV0IHBhcmFtZXRlcnMuPC9wPjxwPjIuIEV4dHJhY3QgdG90YWwgbnVtYmVy
IG9mIGFydGljbGVzIGZyb20gcmVzdWx0cy48L3A+PHA+My4gT3V0cHV0IGEgdmlzdWFsaXphdGlv
biBvZiB0aGUgdG90YWwgY291bnRzIGZvciBib3RoIHNlbGVjdGVkIGluc3RpdHV0aW9ucy48L3A+
PHA+NC4gRXh0cmFjdCB1bmlxdWUgYXJ0aWNsZSBpZGVudGlmaWVycyBmcm9tIHJlc3VsdHMuPC9w
PjxwPjUuIE91dHB1dCB0aGUgbnVtYmVyIG9mIGFydGljbGUgaWRlbnRpZmllcnMgdGhhdCBtYXRj
aCAoaS5lLiAiY29sbGFib3JhdGlvbnMiKSBiZXR3ZWVuIHRoZSB0d28gc2VsZWN0ZWQgaW5zdGl0
dXRpb25zLjwvcD48cD48YnI+PC9wPjxwPiMjIyBCdWlsZCBRdWVyeTwvcD48cD48YnI+PC9wPjxw
PlRoZSBzeW50YXggZm9yIHRoZSBzZWFyY2hpbmcgUHVibWVkIHJlbGllcyBvbiBbTUVETElORSB0
YWdzXShodHRwOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvYm9va3MvTkJLMzgyNy8jcHVibWVkaGVs
cC5TZWFyY2hfRmllbGRfRGVzY3JpcHRpb25zX2FuZCkgYW5kIGJvb2xlYW4gb3BlcmF0b3JzLiBZ
b3UgY2FuIHBlZWsgaW50byBob3cgdG8gdXNlIHRoZSBrZXl3b3JkcyBhbmQgYnVpbGQgdGhlc2Ug
a2luZHMgb2YgcXVlcmllcyB3aXRoIHRoZSBbUHVibWVkIEFkdmFuY2VkIFNlYXJjaCBCdWlsZGVy
XShodHRwOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvcHVibWVkL2FkdmFuY2VkKS4mbmJzcDs8L3A+
PHA+PGJyPjwvcD48cD5HUlVQTyBidWlsZHMgaXRzIHF1ZXJpZXMgYmFzZWQgb24gdHdvIGZpZWxk
cyBpbiBwYXJ0aWN1bGFyOiAiQWZmaWxpYXRpb24iIGFuZCAiRGF0ZS4iIEJlY2F1c2UgdGhpcyBz
ZWFyY2ggdGVybSB3aWxsIGhhdmUgdG8gYmUgYnVpbHQgbXVsdGlwbGUgdGltZXMgKGF0IGxlYXN0
IHR3aWNlIHRvIGNvbXBhcmUgcmVzdWx0cyBmb3IgdHdvIGluc3RpdHV0aW9ucykgSSB3cm90ZSBh
IGhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYGJ1aWxkX3F1ZXJ5KClgOjwvcD48cD48YnI+PC9wPjxw
PmBgYHI8L3A+PHA+IyB1c2UgJXkvJW0vJWQgKGUuZy4gMTk5OS8wMi8xNCkgZGF0ZSBmb3JtYXQg
Zm9yIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBhcmd1bWVudHM8L3A+PHA+PGJyPjwvcD48cD5idWls
ZF9xdWVyeSA9IGZ1bmN0aW9uKGluc3RpdHV0aW9uLCBzdGFydERhdGUsIGVuZERhdGUpIHs8L3A+
PHA+Jm5ic3A7ICZuYnNwOyZuYnNwOzwvcD48cD4mbmJzcDsgJm5ic3A7IGlmIChncmVwbCgiLSIs
IGluc3RpdHV0aW9uKT09VFJVRSkgeyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7PC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBz
cGxpdF9uYW1lID0gc3Ryc3BsaXQoaW5zdGl0dXRpb24sIHNwbGl0PSItIik8L3A+PHA+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHNlYXJjaF90ZXJtID0gcGFzdGUoc3BsaXRfbmFtZVtbMV1d
WzFdLCAnW0FmZmlsaWF0aW9uXScsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7JyBBTkQgJyw8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtzcGxpdF9uYW1lW1sxXV1bMl0sPC9wPjxwPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7J1tBZmZpbGlhdGlvbl0nLDwv
cD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOycgQU5E
ICcsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
c3RhcnREYXRlLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOydbUERBVF0gOiAnLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwO2VuZERhdGUsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7J1tQREFUXScsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7c2VwPScnKTwvcD48cD4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgc2VhcmNoX3Rlcm0gPSBnc3ViKCItIiwiLyIsc2VhcmNoX3Rlcm0pPC9wPjxw
PiZuYnNwOyAmbmJzcDsgfSBlbHNlIHs8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IHNlYXJjaF90ZXJtID0gcGFzdGUoaW5zdGl0dXRpb24sJm5ic3A7PC9wPjxwPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7J1tBZmZpbGlhdGlvbl0nLDwvcD48
cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOycgQU5EICcs
PC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7c3Rh
cnREYXRlLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOydbUERBVF0gOiAnLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwO2VuZERhdGUsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7J1tQREFUXScsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7c2VwPScnKTwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgc2VhcmNoX3Rlcm0gPSBnc3ViKCItIiwiLyIsc2VhcmNoX3Rlcm0pPC9wPjxwPiZu
YnNwOyAmbmJzcDsgfTwvcD48cD4mbmJzcDsgJm5ic3A7Jm5ic3A7PC9wPjxwPiZuYnNwOyAmbmJz
cDsgcmV0dXJuKHNlYXJjaF90ZXJtKTwvcD48cD59PC9wPjxwPmBgYDwvcD48cD48YnI+PC9wPjxw
PlRoZSBfaWYvZWxzZV8gbG9naWMgaW4gdGhlcmUgYWNjb21tb2RhdGVzIGNhc2VzIGxpa2UgIlVu
aXZlcnNpdHkgb2YgTm9ydGggQ2Fyb2xpbmEtQ2hhcGVsIEhpbGwiLCB3aGljaCBvdGhlcndpc2Ug
d291bGRuJ3Qgc2VhcmNoIHByb3Blcmx5IGluIHRoZSBhZmZpbGlhdGlvbiBmaWVsZC4gVGhpcyBt
ZXRob2QgZG9lcyBkZXBlbmQgb24gdGhlIGluc3RpdHV0aW9uIG5hbWUgaGF2aW5nIGl0cyBzcGVj
aWZpYyBsb2NhbGUgc2VwYXJhdGVkIGJ5IGEgYC1gIHN5bWJvbC4gSW4gb3RoZXIgd29yZHMsIGlm
IHlvdSBwYXNzZWQgaW4gIlVuaXZlcnNpdHkgb2YgQ29sb3JhZG8vQm91bGRlciIgeW91J2QgYmUg
c3R1Y2suPC9wPjxwPjxicj48L3A+PHA+U28gYnkgdXNpbmcgdGhpcyBmdW5jdGlvbiBmb3IgdGhl
IFVuaXZlcnNpdHkgb2YgVmlyZ2luaWEgZnJvbSBKYW51YXJ5IDEsIDIwMTQgdG8gSmFudWFyeSAx
LCAyMDE1IHlvdSdkIGdldCB0aGUgZm9sbG93aW5nIHRlcm06PC9wPjxwPjxicj48L3A+PHA+YFVu
aXZlcnNpdHkgb2YgVmlyZ2luaWFbQWZmaWxpYXRpb25dIEFORCAyMDE0LzAxLzAxW1BEQVRdIDog
MjAxNS8wMS8wMVtQREFUXWA8L3A+PHA+PGJyPjwvcD48cD5BbmQgZm9yIFVuaXZlcnNpdHkgb2Yg
VGV4YXMtQXVzdGluIG92ZXIgdGhlIHNhbWUgZGF0ZXMgeW91IGdldCB0aGUgZm9sbG93aW5nIHRl
cm06PC9wPjxwPjxicj48L3A+PHA+YFVuaXZlcnNpdHkgb2YgVGV4YXNbQWZmaWxpYXRpb25dIEFO
RCBBdXN0aW5bQWZmaWxpYXRpb25dIEFORCAyMDE0LzAxLzAxW1BEQVRdIDogMjAxNS8wMS8wMVtQ
REFUXWA8L3A+PHA+PGJyPjwvcD48cD5UaGUgYWR2YW50YWdlIG9mIHVzaW5nIHRoaXMgZnVuY3Rp
b24gaW4gYSBTaGlueSBhcHAgaXMgdGhhdCB5b3UgY2FuIHBhc3MgdGhlIGluc3RpdHV0aW9uIG5h
bWVzIGFuZCBkYXRlcyBkeW5hbWljYWxseS4gVXNlcnMgZW50ZXIgdGhlIGlucHV0IHBhcmFtZXRl
cnMgZm9yIHdoaWNoIGRhdGUgcmFuZ2UgYW5kIGluc3RpdHV0aW9ucyB0byBzZWFyY2ggdmlhIHRo
ZSB3aWRnZXRzIGluIHRoZSB1aS5SIHNjcmlwdC48L3A+PHA+PGJyPjwvcD48cD5Gb3IgdGhlIGFw
cCB0byB3b3JrLCB0aGVyZSBoYXMgdG8gYmUgb25lIGRhdGUgcGlja2VyIHdpZGdldCBhbmQgdHdv
IHRleHQgaW5wdXRzIChvbmUgZm9yIGVhY2ggb2YgdGhlIHR3byBpbnN0aXR1dGlvbnMpIGluIHRo
ZSB1aS5SIHNjcmlwdC4gVGhlIGNvcnJlc3BvbmRpbmcgc2VydmVyLlIgc2NyaXB0IHdvdWxkIGhh
dmUgYSByZWFjdGl2ZSBlbGVtZW50IHdyYXBwZWQgYXJvdW5kIHRoZSBmb2xsb3dpbmc6PC9wPjxw
Pjxicj48L3A+PHA+YGBgcjwvcD48cD5zZWFyY2hfdGVybSA9IGJ1aWxkX3F1ZXJ5KGluc3RpdHV0
aW9uID0gaW5wdXQkaW5zdGl0dXRpb24xLCBzdGFydERhdGUgPSBpbnB1dCRkYXRlc1sxXSwgZW5k
RGF0ZSA9IGlucHV0JGRhdGVzWzJdKTwvcD48cD5zZWFyY2hfdGVybTIgPSBidWlsZF9xdWVyeShp
bnN0aXR1dGlvbiA9IGlucHV0JGluc3RpdHV0aW9uMiwgc3RhcnREYXRlID0gaW5wdXQkZGF0ZXNb
MV0sIGVuZERhdGUgPSBpbnB1dCRkYXRlc1syXSk8L3A+PHA+IyMjIFJ1biBRdWVyeTwvcD48cD5g
YGA8L3A+PHA+PGJyPjwvcD48cD5XaXRoIHRoZSBxdWVyeSBidWlsdCwgeW91IGNhbiBydW4gdGhl
IHNlYXJjaCBpbiBQdWJtZWQuIFRoZSBgZW50cmV6X3NlYXJjaCgpYCBmdW5jdGlvbiBmcm9tIHRo
ZSBfcmVudHJlel8gcGFja2FnZSBsZXRzIHVzIGdldCB0aGUgaW5mb3JtYXRpb24gd2Ugd2FudC4g
VGhpcyBmdW5jdGlvbiByZXR1cm5zIGZvdXIgZWxlbWVudHM6Jm5ic3A7PC9wPjxwPjxicj48L3A+
PHA+LSBpZHMgKHVuaXF1ZSBQdWJtZWQgaWRlbnRpZmllcnMgZm9yIGVhY2ggYXJ0aWNsZSBpbiB0
aGUgcmVzdWx0IGxpc3QpPC9wPjxwPi0gY291bnQgKHRvdGFsIG51bWJlciBvZiByZXN1bHRzKTwv
cD48cD4tIHJldG1heCAobWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyB0aGF0IGNvdWxkIGhhdmUg
YmVlbiByZXR1cm5lZCk8L3A+PHA+LSBmaWxlICh0aGUgYWN0dWFsIFhNTCByZWNvcmQgY29udGFp
bmluZyB0aGUgdmFsdWVzIGFib3ZlKTwvcD48cD48YnI+PC9wPjxwPlRoZSBmb2xsb3dpbmcgY29k
ZSByZXR1cm5zIHRvdGFsIGFydGljbGVzIGZvciBlYWNoIG9mIHR3byBkaWZmZXJlbnQgc2VhcmNo
ZXM6PC9wPjxwPjxicj48L3A+PHA+YGBgcjwvcD48cD5hZmZpbGlhdGlvbl9zZWFyY2ggPSBlbnRy
ZXpfc2VhcmNoKCJwdWJtZWQiLCBzZWFyY2hfdGVybSwgcmV0bWF4ID0gOTk5OTkpPC9wPjxwPmFm
ZmlsaWF0aW9uX3NlYXJjaDIgPSBlbnRyZXpfc2VhcmNoKCJwdWJtZWQiLCBzZWFyY2hfdGVybTIs
IHJldG1heCA9IDk5OTk5KTwvcD48cD48YnI+PC9wPjxwPnRvdGFsX2FydGljbGVzID0gYXMubnVt
ZXJpYyhhZmZpbGlhdGlvbl9zZWFyY2gkY291bnQpPC9wPjxwPnRvdGFsX2FydGljbGVzMiA9IGFz
Lm51bWVyaWMoYWZmaWxpYXRpb25fc2VhcmNoMiRjb3VudCk8L3A+PHA+YGBgPC9wPjxwPjxicj48
L3A+PHA+IyMjIFBsb3QgUmVzdWx0czwvcD48cD48YnI+PC9wPjxwPlRoZSBjb2RlIGFib3ZlIGxp
dmVzIGluIHRoZSBzZXJ2ZXIuUiBzY3JpcHQgYW5kIGlzIHRoZSBmdW5jdGlvbmFsIHdvcmtob3Jz
ZSBmb3IgdGhlIGFwcC4gQnV0IHRvIGFkZXF1YXRlbHkgcmVwcmVzZW50IHRoZSBiZW5jaG1hcmtp
bmcsIEdSVVBPIG5lZWRlZCBzb21lIGtpbmQgb2YgcGxvdC4mbmJzcDs8L3A+PHA+PGJyPjwvcD48
cD5XZSBjYW4gY29tYmluZSB0aGUgdG90YWwgYXJ0aWNsZXMgZm9yIGVhY2ggaW5zdGl0dXRpb24g
d2l0aCB0aGUgaW5zdGl0dXRpb24gbmFtZXMsIHdoaWNoIHdlIHVzZWQgdG8gYnVpbGQgdGhlIHNl
YXJjaCB0ZXJtcy4gVGhlIHJlc3VsdCBpcyBhIHRpbnkgKDIgeCAyKSBkYXRhIGZyYW1lIG9mICJJ
bnN0aXR1dGlvbiIgYW5kICJUb3RhbC5BcnRpY2xlcyIgdmFyaWFibGVzLiBOb3RoaW5nIGZhbmN5
LiBCdXQgaXQgZG9lcyB0aGUgdHJpY2suPC9wPjxwPjxicj48L3A+PHA+V2l0aCBhIGRhdGEgZnJh
bWUgaW4gaGFuZCwgd2UgY2FuIGxvYWQgaXQgaW50byBfZ2dwbG90Ml8gYW5kIGRvIHNvbWUgdmVy
eSBzaW1wbGUgYmFycGxvdHRpbmc6PC9wPjxwPjxicj48L3A+PHA+eHgtZ3J1cG9fZXhhbXBsZS5w
bmc8L3A+PHA+PGJyPjwvcD48cD4jIyMgT3V0cHV0IENvbGxhYm9yYXRpb25zPC9wPjxwPjxicj48
L3A+PHA+QWx0aG91Z2ggdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgR1JVUE8gaXMgc2lkZS1ieS1z
aWRlIGJlbmNobWFya2luZywgaXQgZG9lcyBoYXZlIGF0IGxlYXN0IG9uZSBvdGhlciBmZWF0dXJl
IHNvIGZhci48L3A+PHA+PGJyPjwvcD48cD5UaGUgaW5jbHVzaW9uIG9mIHRoZSAiaWRzIiBvYmpl
Y3QgaW4gdGhlIHF1ZXJ5IHJlc3VsdCBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBzb21ldGhpbmcg
ZWxzZS4gWW91IGNhbiBjb21wYXJlIGhvdyBtYW55IG9mIHRoZSBhcnRpY2xlIGlkZW50aWZpZXJz
IG1hdGNoIGJldHdlZW4gdHdvIHF1ZXJpZXMuIFRoYXQgc2hvdWxkIHJlcHJlc2VudCB0aGUgbnVt
YmVyIG9mICJjb2xsYWJvcmF0aW9ucyIgKGkuZS4gaG93IG1hbnkgb2YgdGhlIHB1YmxpY2F0aW9u
cyBzaGFyZSBhdXRob3JzaGlwKSBiZXR3ZWVuIGluZGl2aWR1YWxzIGF0IHRoZSB0d28gaW5zdGl0
dXRpb25zLjwvcD48cD48YnI+PC9wPjxwPlRvIGdldCB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbGxh
Ym9yYXRpb25zLCB3ZSBjYW4gZG8gYSBzaW1wbGUgY2FsY3VsYXRpb24gb2YgbGVuZ3RoIG9uIHRo
ZSB2ZWN0b3Igb2YgaW50ZXJzZWN0aW9ucyBiZXR3ZWVuIHRoZSB0d28gc2VhcmNoIHJlc3VsdHM6
PC9wPjxwPjxicj48L3A+PHA+YGBgcjwvcD48cD5jb2xsYWJvcmF0aW9uX2NvdW50ID0gbGVuZ3Ro
KGludGVyc2VjdChhZmZpbGlhdGlvbl9zZWFyY2gkaWRzLGFmZmlsaWF0aW9uX3NlYXJjaDIkaWRz
KTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5CeSBwbGFjaW5nIHRoZSBzZWFyY2ggY2FsbCBp
bnNpZGUgYSBbcmVhY3RpdmUgZWxlbWVudF0oaHR0cDovL3NoaW55LnJzdHVkaW8uY29tL2FydGlj
bGVzL3JlYWN0aXZpdHktb3ZlcnZpZXcuaHRtbCkgd2l0aGluIFNoaW55LCBHUlVQTyBjYW4gc3Rv
cmUgdGhlIHJlc3VsdHMgKCJjb3VudCIgYW5kICJpZHMiKSByYXRoZXIgdGhhbiByZXBlYXRpbmcg
dGhlIHF1ZXJ5IGZvciBlYWNoIHB1cnBvc2UuPC9wPjxwPjxicj48L3A+PHA+KipOQioqIFRoaXMg
YXBwcm9hY2ggdG8gYXNzZXNzaW5nIGNvbGxhYm9yYXRpb24gY291bnRzIGlzIHNwdXJpb3VzIHdo
ZW4gY29uc2lkZXJpbmcgYXJ0aWNsZXMgcHVibGlzaGVkIGJlZm9yZSBPY3RvYmVyIDIwMTMsIHdo
aWNoIHdhcyB3aGVuIHRoZSBbTmF0aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZSAoTkxNKSBiZWdh
biBpbmNsdWRpbmcgYWZmaWxpYXRpb24gdGFncyBmb3IgKmFsbCogYXV0aG9ycy5dKGh0dHBzOi8v
d3d3Lm5sbS5uaWguZ292L2JzZC9tbXMvbWVkbGluZWVsZW1lbnRzLmh0bWwjYWQpPC9wPjxwPjxi
cj48L3A+PHA+IyMgVGhlIE5leHQgU3RlcHM8L3A+PHA+PGJyPjwvcD48cD5XaGF0J3MgbmV4dD8g
VGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBvdGVudGlhbCBuZXcgZmVhdHVyZXMgZm9yIEdSVVBPLiBJ
dCdzIHdvcnRoIHBvaW50aW5nIG91dCB0aGF0IGEgZGlzY3Vzc2lvbiBvZiB0aGVzZSBwb3NzaWJp
bGl0aWVzIHdpbGwgbGlrZWx5IGhpZ2hsaWdodCBzb21lIG9mIHRoZSBsaW1pdGF0aW9ucyBvZiB0
aGUgYXBwIGFzIGl0IGV4aXN0cyBub3cuPC9wPjxwPjxicj48L3A+PHA+Rm9yIGV4YW1wbGUsIGl0
IHdvdWxkIGJlIGFkdmFudGFnZW91cyB0byBpbmNsdWRlIG90aGVyICJyZXNlYXJjaCBvdXRwdXQi
IGRhdGEgc291cmNlcy4gR1JVUE8gY3VycmVudGx5IG9ubHkgYWNjb3VudHMgZm9yIHB1YmxpY2F0
aW9ucyBpbmRleGVkIGluIFB1Ym1lZC4gVGhhdCdzIGEgZmFpcmx5IG9uZS1kaW1lbnNpb25hbCBy
ZXByZXNlbnRhdGlvbiBvZiBzY2hvbGFybHkgYWN0aXZpdGllcy4gSW5mb3JtYXRpb24gYWJvdXQg
cHVibGljYXRpb25zIGluZGV4ZWQgZWxzZXdoZXJlLCBmdW5kaW5nIGF3YXJkZWQgb3IgYWx0bWV0
cmljIGluZGljYXRvcnMgaXNuJ3QgYWNjb3VudGVkIGZvci4mbmJzcDs8L3A+PHA+PGJyPjwvcD48
cD5BbmQgbmVpdGhlciBpcyBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGluc3RpdHV0aW9ucy4g
V2hpbGUgYWxsIG9mIHRoZW0gYXJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBbdmVyeSBoaWdoIHJlc2Vh
cmNoIGFjdGl2aXR5XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX3Jlc2Vh
cmNoX3VuaXZlcnNpdGllc19pbl90aGVfVW5pdGVkX1N0YXRlcykgb25lIGNvdWxkIGFyZ3VlIHRo
YXQgc29tZSBhcmUgImFwcGxlcyIgYW5kIHNvbWUgYXJlICJvcmFuZ2VzIiBiYXNlZCBvbiBkaXNj
cmVwYW5jaWVzIGluIGJ1ZGdldHMsIG51bWJlciBvZiBmYWN1bHR5IG1lbWJlcnMsIHN0dWRlbnQg
Ym9keSBzaXplLCBldGMuIEEgbW9yZSB0aG9yb3VnaCBiZW5jaG1hcmtpbmcgdG9vbCBtaWdodCBt
b2RlbCByZXNlYXJjaCB1bml2ZXJzaXRpZXMgYmFzZWQgb24gYWRkaXRpb25hbCBhZG1pbmlzdHJh
dGl2ZSBkYXRhLCBhbmQgcmVzdHJpY3QgY29tcGFyaXNvbnMgdG8gInNpbWlsYXIiIGluc3RpdHV0
aW9ucy4mbmJzcDs8L3A+PHA+PGJyPjwvcD48cD5TbyBHUlVQTyBpcyBzdGlsbCBhIHdvcmsgaW4g
cHJvZ3Jlc3MuIEJ1dCBpdCdzIGEgc29saWQgZXhhbXBsZSBvZiBhIFNoaW55IGFwcCB0aGF0IGVm
ZmVjdGl2ZWx5IGxldmVyYWdlcyBhbiBBUEkgYXMgaXRzIHByaW1hcnkgZGF0YSBzb3VyY2UuIEZl
ZWwgZnJlZSB0byBwb3N0IGEgY29tbWVudCBpZiB5b3UgaGF2ZSBhbnkgZmVlZGJhY2sgb3IgcXVl
c3Rpb25zLjwvcD48cD48YnI+PC9wPjxwPkdydXBvIFNoaW55IEFwcDogJmx0O2h0dHA6Ly9hcHBz
LmJpb2Nvbm5lY3Rvci52aXJnaW5pYS5lZHUvZ3J1cG8vJmd0OzwvcD48cD48YnI+PC9wPjxwPkdy
dXBvIFNvdXJjZSBDb2RlOiAmbHQ7aHR0cHM6Ly9naXRodWIuY29tL3ZwbmFncmFqL2dydXBvJmd0
OzwvcD48ZGl2Pjxicj48L2Rpdj4=">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com1tag:blogger.com,1999:blog-6232819486261696035.post-73255638178886253622015-12-04T11:40:00.000-06:002015-12-04T11:40:48.641-06:00Tutorial: RNA-seq differential expression & pathway analysis with Sailfish, DESeq2, GAGE, and Pathview<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=7325563817888625362" markdown-here-wrapper-content-modified="true">
<h2 id="background" style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; font-size: 1.4em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Background</h2>
<div style="margin: 1.2em 0px !important;">
This tutorial shows an example of RNA-seq data analysis with DESeq2, followed by KEGG pathway analysis using <a href="http://bioconductor.org/packages/gage">GAGE</a>. Using data from <a href="http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE37704">GSE37704</a>, with processed data available on Figshare DOI: <a href="http://dx.doi.org/10.6084/m9.figshare.1601975">10.6084/m9.figshare.1601975</a>. This dataset has six samples from GSE37704, where expression was quantified by either: (A) mapping to to GRCh38 using STAR then counting reads mapped to genes with featureCounts under the union-intersection model, or (B) alignment-free quantification using <a href="http://www.nature.com/nbt/journal/v32/n5/full/nbt.2862.html">Sailfish</a>, summarized at the gene level using the GRCh38 GTF file. Both datasets are restricted to protein-coding genes only. Here I’ll use the Sailfish gene-level estimated counts.</div>
<h2 id="differential-expression-analysis" style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; font-size: 1.4em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Differential expression analysis</h2>
<div style="margin: 1.2em 0px !important;">
First, import the countdata and metadata directly from the web. Set up the DESeqDataSet, run the DESeq2 pipeline.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># Note importing BioC pkgs after dplyr requires explicitly using dplyr::select()</span>
<span class="hljs-keyword">library</span>(dplyr)
<span class="hljs-keyword">library</span>(DESeq2)
<span class="hljs-comment"># Which data do you want to use? Let's use the sailfish counts.</span>
<span class="hljs-comment"># browseURL("http://dx.doi.org/10.6084/m9.figshare.1601975")</span>
<span class="hljs-comment"># countDataURL = "http://files.figshare.com/2439061/GSE37704_featurecounts.csv"</span>
countDataURL = <span class="hljs-string">"http://files.figshare.com/2600373/GSE37704_sailfish_genecounts.csv"</span>
<span class="hljs-comment"># Import countdata</span>
countData = read.csv(countDataURL, row.names=<span class="hljs-number">1</span>) %>%
dplyr::select(-length) %>%
as.matrix()
<span class="hljs-comment"># Filter data where you only have 0 or 1 read count across all samples.</span>
countData = countData[rowSums(countData)><span class="hljs-number">1</span>, ]
head(countData)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## SRR493366 SRR493367 SRR493368 SRR493369 SRR493370
## ENSG00000198888 17528 23007 30241 24418 29152
## ENSG00000198763 21264 26720 35550 28878 32416
## ENSG00000198804 130975 151207 195514 178130 196727
## ENSG00000198712 49769 61906 78608 66478 69758
## ENSG00000228253 9304 11160 12830 12608 13041
## ENSG00000198899 45401 51260 66851 63433 66123
## SRR493371
## ENSG00000198888 34416
## ENSG00000198763 38422
## ENSG00000198804 244670
## ENSG00000198712 86808
## ENSG00000228253 16063
## ENSG00000198899 79215
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># Import metadata</span>
colData = read.csv(<span class="hljs-string">"http://files.figshare.com/2439060/GSE37704_metadata.csv"</span>, row.names=<span class="hljs-number">1</span>)
colData
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## condition
## SRR493366 control_sirna
## SRR493367 control_sirna
## SRR493368 control_sirna
## SRR493369 hoxa1_kd
## SRR493370 hoxa1_kd
## SRR493371 hoxa1_kd
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># Set up the DESeqDataSet Object and run the DESeq pipeline</span>
dds = DESeqDataSetFromMatrix(countData=countData,
colData=colData,
design=~condition)
dds = DESeq(dds)
dds
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## class: DESeqDataSet
## dim: 16755 6
## metadata(0):
## assays(3): counts mu cooks
## rownames(16755): ENSG00000198888 ENSG00000198763 ...
## ENSG00000267795 ENSG00000165795
## rowRanges metadata column names(27): baseMean baseVar ... deviance
## maxCooks
## colnames(6): SRR493366 SRR493367 ... SRR493370 SRR493371
## colData names(2): condition sizeFactor
</code></pre>
<div style="margin: 1.2em 0px !important;">
Next, get results for the HoxA1 knockdown versus control siRNA, and reorder them by p-value. Call <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">summary</code> on the results object to get a sense of how many genes are up or down-regulated at FDR 0.1.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">res = results(dds, contrast=c(<span class="hljs-string">"condition"</span>, <span class="hljs-string">"hoxa1_kd"</span>, <span class="hljs-string">"control_sirna"</span>))
res = res[order(res$pvalue),]
summary(res)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">##
## out of 16755 with nonzero total read count
## adjusted p-value < 0.1
## LFC > 0 (up) : 4193, 25%
## LFC < 0 (down) : 4286, 26%
## outliers [1] : 22, 0.13%
## low counts [2] : 1299, 7.8%
## (mean count < 1)
## [1] see 'cooksCutoff' argument of ?results
## [2] see 'independentFiltering' argument of ?results
</code></pre>
<div style="margin: 1.2em 0px !important;">
Since we mapped and counted against the Ensembl annotation, our results only have information about Ensembl gene IDs. But, our pathway analysis downstream will use KEGG pathways, and genes in KEGG pathways are annotated with Entrez gene IDs. I wrote an R package for doing this offline the dplyr way (<a href="https://github.com/stephenturner/annotables">https://github.com/stephenturner/annotables</a>), but the canonical Bioconductor way to do it is with the AnnotationDbi and organism annotation packages. Here we’re using the organism package (“org”) for Homo sapiens (“Hs”), organized as an AnnotationDbi database package (“db”) using Entrez Gene IDs (“eg”) as primary keys. To see what all the keys are, use the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">columns</code> function.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(<span class="hljs-string">"AnnotationDbi"</span>)
<span class="hljs-keyword">library</span>(<span class="hljs-string">"org.Hs.eg.db"</span>)
columns(org.Hs.eg.db)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## [1] "ACCNUM" "ALIAS" "ENSEMBL" "ENSEMBLPROT"
## [5] "ENSEMBLTRANS" "ENTREZID" "ENZYME" "EVIDENCE"
## [9] "EVIDENCEALL" "GENENAME" "GO" "GOALL"
## [13] "IPI" "MAP" "OMIM" "ONTOLOGY"
## [17] "ONTOLOGYALL" "PATH" "PFAM" "PMID"
## [21] "PROSITE" "REFSEQ" "SYMBOL" "UCSCKG"
## [25] "UNIGENE" "UNIPROT"
</code></pre>
<div style="margin: 1.2em 0px !important;">
Let’s use the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">mapIds</code> function to add more columns to the results. The <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">row.names</code> of our results table has the Ensembl gene ID (our key), so we need to specify <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">keytype=ENSEMBL</code>. The <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">column</code> argument tells the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">mapIds</code> function which information we want, and the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">multiVals</code> argument tells the function what to do if there are multiple possible values for a single input value. Here we ask to just give us back the first one that occurs in the database. Let’s get the Entrez IDs, gene symbols, and full gene names.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">res$symbol = mapIds(org.Hs.eg.db,
keys=row.names(res),
column=<span class="hljs-string">"SYMBOL"</span>,
keytype=<span class="hljs-string">"ENSEMBL"</span>,
multiVals=<span class="hljs-string">"first"</span>)
res$entrez = mapIds(org.Hs.eg.db,
keys=row.names(res),
column=<span class="hljs-string">"ENTREZID"</span>,
keytype=<span class="hljs-string">"ENSEMBL"</span>,
multiVals=<span class="hljs-string">"first"</span>)
res$name = mapIds(org.Hs.eg.db,
keys=row.names(res),
column=<span class="hljs-string">"GENENAME"</span>,
keytype=<span class="hljs-string">"ENSEMBL"</span>,
multiVals=<span class="hljs-string">"first"</span>)
head(res, <span class="hljs-number">10</span>)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## log2 fold change (MAP): condition hoxa1_kd vs control_sirna
## Wald test p-value: condition hoxa1_kd vs control_sirna
## DataFrame with 10 rows and 9 columns
## baseMean log2FoldChange lfcSE stat pvalue
## <numeric> <numeric> <numeric> <numeric> <numeric>
## ENSG00000148773 1885.344 -3.172502 0.07868572 -40.31865 0
## ENSG00000138623 2939.936 -2.418238 0.05889229 -41.06205 0
## ENSG00000104368 13601.963 2.016802 0.05249643 38.41789 0
## ENSG00000124766 2692.200 2.379545 0.06193654 38.41908 0
## ENSG00000122861 35889.413 2.224779 0.05258658 42.30697 0
## ENSG00000116016 4558.157 -1.885339 0.04258766 -44.26961 0
## ENSG00000164251 2404.103 3.325196 0.07021236 47.35912 0
## ENSG00000125257 6187.386 1.943762 0.04259189 45.63692 0
## ENSG00000104321 9334.555 3.186856 0.06227530 51.17367 0
## ENSG00000183508 2110.345 3.190612 0.07488305 42.60794 0
## padj symbol entrez
## <numeric> <character> <character>
## ENSG00000148773 0 MKI67 4288
## ENSG00000138623 0 SEMA7A 8482
## ENSG00000104368 0 PLAT 5327
## ENSG00000124766 0 SOX4 6659
## ENSG00000122861 0 PLAU 5328
## ENSG00000116016 0 EPAS1 2034
## ENSG00000164251 0 F2RL1 2150
## ENSG00000125257 0 ABCC4 10257
## ENSG00000104321 0 TRPA1 8989
## ENSG00000183508 0 FAM46C 54855
## name
## <character>
## ENSG00000148773 marker of proliferation Ki-67
## ENSG00000138623 semaphorin 7A, GPI membrane anchor (John Milton Hagen blood group)
## ENSG00000104368 plasminogen activator, tissue
## ENSG00000124766 SRY (sex determining region Y)-box 4
## ENSG00000122861 plasminogen activator, urokinase
## ENSG00000116016 endothelial PAS domain protein 1
## ENSG00000164251 coagulation factor II (thrombin) receptor-like 1
## ENSG00000125257 ATP-binding cassette, sub-family C (CFTR/MRP), member 4
## ENSG00000104321 transient receptor potential cation channel, subfamily A, member 1
## ENSG00000183508 family with sequence similarity 46, member C
</character></character></character></numeric></numeric></numeric></numeric></numeric></numeric></code></pre>
<h2 id="pathway-analysis" style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; font-size: 1.4em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Pathway analysis</h2>
<div style="margin: 1.2em 0px !important;">
We’re going to use the <a href="http://bioconductor.org/packages/release/bioc/html/gage.html">gage</a> package (Generally Applicable Gene-set Enrichment for Pathway Analysis) for pathway analysis. See also the <a href="http://bioconductor.org/packages/release/bioc/vignettes/gage/inst/doc/RNA-seqWorkflow.pdf">gage package workflow vignette for RNA-seq pathway analysis</a>. Once we have a list of enriched pathways, we’re going to use the <a href="http://bioconductor.org/packages/release/bioc/html/pathview.html">pathview</a> package to draw pathway diagrams, shading the molecules in the pathway by their degree of up/down-regulation.</div>
<h3 id="kegg-pathways" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
KEGG pathways</h3>
<div style="margin: 1.2em 0px !important;">
The <a href="http://bioconductor.org/packages/release/data/experiment/html/gageData.html"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">gageData</code></a> package has pre-compiled databases mapping genes to KEGG pathways and GO terms for common organisms. <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">kegg.sets.hs</code> is a named list of 229 elements. Each element is a character vector of member gene Entrez IDs for a single KEGG pathway. (See also <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">go.sets.hs</code>). <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">sigmet.idx.hs</code> is an index of numbers of sinaling and metabolic pathways in <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">kegg.set.gs</code>. In other words, KEGG pathway include other types of pathway definitions, like “Global Map” and “Human Diseases”, which may be undesirable in pathway analysis. Therefore, <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">kegg.sets.hs[sigmet.idx.hs]</code> gives you the “cleaner” gene sets of sinaling and metabolic pathways only.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(pathview)
<span class="hljs-keyword">library</span>(gage)
<span class="hljs-keyword">library</span>(gageData)
data(kegg.sets.hs)
data(sigmet.idx.hs)
kegg.sets.hs = kegg.sets.hs[sigmet.idx.hs]
head(kegg.sets.hs, <span class="hljs-number">3</span>)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## $`hsa00232 Caffeine metabolism`
## [1] "10" "1544" "1548" "1549" "1553" "7498" "9"
##
## $`hsa00983 Drug metabolism - other enzymes`
## [1] "10" "1066" "10720" "10941" "151531" "1548" "1549"
## [8] "1551" "1553" "1576" "1577" "1806" "1807" "1890"
## [15] "221223" "2990" "3251" "3614" "3615" "3704" "51733"
## [22] "54490" "54575" "54576" "54577" "54578" "54579" "54600"
## [29] "54657" "54658" "54659" "54963" "574537" "64816" "7083"
## [36] "7084" "7172" "7363" "7364" "7365" "7366" "7367"
## [43] "7371" "7372" "7378" "7498" "79799" "83549" "8824"
## [50] "8833" "9" "978"
##
## $`hsa00230 Purine metabolism`
## [1] "100" "10201" "10606" "10621" "10622" "10623" "107"
## [8] "10714" "108" "10846" "109" "111" "11128" "11164"
## [15] "112" "113" "114" "115" "122481" "122622" "124583"
## [22] "132" "158" "159" "1633" "171568" "1716" "196883"
## [29] "203" "204" "205" "221823" "2272" "22978" "23649"
## [36] "246721" "25885" "2618" "26289" "270" "271" "27115"
## [43] "272" "2766" "2977" "2982" "2983" "2984" "2986"
## [50] "2987" "29922" "3000" "30833" "30834" "318" "3251"
## [57] "353" "3614" "3615" "3704" "377841" "471" "4830"
## [64] "4831" "4832" "4833" "4860" "4881" "4882" "4907"
## [71] "50484" "50940" "51082" "51251" "51292" "5136" "5137"
## [78] "5138" "5139" "5140" "5141" "5142" "5143" "5144"
## [85] "5145" "5146" "5147" "5148" "5149" "5150" "5151"
## [92] "5152" "5153" "5158" "5167" "5169" "51728" "5198"
## [99] "5236" "5313" "5315" "53343" "54107" "5422" "5424"
## [106] "5425" "5426" "5427" "5430" "5431" "5432" "5433"
## [113] "5434" "5435" "5436" "5437" "5438" "5439" "5440"
## [120] "5441" "5471" "548644" "55276" "5557" "5558" "55703"
## [127] "55811" "55821" "5631" "5634" "56655" "56953" "56985"
## [134] "57804" "58497" "6240" "6241" "64425" "646625" "654364"
## [141] "661" "7498" "8382" "84172" "84265" "84284" "84618"
## [148] "8622" "8654" "87178" "8833" "9060" "9061" "93034"
## [155] "953" "9533" "954" "955" "956" "957" "9583"
## [162] "9615"
</code></pre>
<div style="margin: 1.2em 0px !important;">
The <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">gage()</code> function requires a named vector of fold changes, where the names of the values are the Entrez gene IDs. </div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">foldchanges = res$log2FoldChange
names(foldchanges) = res$entrez
head(foldchanges)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## 4288 8482 5327 6659 5328 2034
## -3.172502 -2.418238 2.016802 2.379545 2.224779 -1.885339
</code></pre>
<div style="margin: 1.2em 0px !important;">
Now, let’s run the pathway analysis. See help on the gage function with <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">?gage</code>. Specifically, you might want to try changing the value of <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">same.dir</code>. This value determins whether to test for changes in a gene set toward a single direction (all genes up or down regulated) or changes towards both directions simultaneously (any genes in the pathway dysregulated). </div>
<blockquote style="border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 4px; color: #777777; margin: 1.2em 0px; padding: 0px 1em; quotes: none;">
<div style="margin: 1.2em 0px !important;">
For experimentally derived gene sets, GO term groups, etc, coregulation is commonly the case, hence <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">same.dir = TRUE</code> (default); In KEGG, BioCarta pathways, genes frequently are not coregulated, hence it could be informative to let <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">same.dir = FALSE</code>. Although <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">same.dir = TRUE</code> could also be interesting for pathways.</div>
</blockquote>
<div style="margin: 1.2em 0px !important;">
Here, we’re using <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">same.dir = TRUE</code>, which will give us separate lists for pathways that are upregulated versus pathways that are downregulated. Let’s look at the first few results from each.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># Get the results</span>
keggres = gage(foldchanges, gsets=kegg.sets.hs, same.dir=<span class="hljs-literal">TRUE</span>)
<span class="hljs-comment"># Look at both up (greater), down (less), and statatistics.</span>
lapply(keggres, head)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## $greater
## p.geomean stat.mean p.val
## hsa04142 Lysosome 0.0002630657 3.517890 0.0002630657
## hsa04640 Hematopoietic cell lineage 0.0017919390 2.976432 0.0017919390
## hsa04630 Jak-STAT signaling pathway 0.0048980977 2.604390 0.0048980977
## hsa00140 Steroid hormone biosynthesis 0.0051115493 2.636206 0.0051115493
## hsa04062 Chemokine signaling pathway 0.0125582961 2.250765 0.0125582961
## hsa00511 Other glycan degradation 0.0223819919 2.104311 0.0223819919
## q.val set.size exp1
## hsa04142 Lysosome 0.04261664 116 0.0002630657
## hsa04640 Hematopoietic cell lineage 0.14514706 61 0.0017919390
## hsa04630 Jak-STAT signaling pathway 0.20701775 119 0.0048980977
## hsa00140 Steroid hormone biosynthesis 0.20701775 39 0.0051115493
## hsa04062 Chemokine signaling pathway 0.40688879 156 0.0125582961
## hsa00511 Other glycan degradation 0.49956506 15 0.0223819919
##
## $less
## p.geomean stat.mean p.val
## hsa04110 Cell cycle 2.165725e-06 -4.722301 2.165725e-06
## hsa03030 DNA replication 3.807440e-06 -4.835336 3.807440e-06
## hsa04114 Oocyte meiosis 1.109869e-04 -3.767561 1.109869e-04
## hsa03013 RNA transport 1.181787e-03 -3.071947 1.181787e-03
## hsa03440 Homologous recombination 1.197124e-03 -3.190747 1.197124e-03
## hsa00240 Pyrimidine metabolism 1.570318e-03 -2.992059 1.570318e-03
## q.val set.size exp1
## hsa04110 Cell cycle 0.0003084027 121 2.165725e-06
## hsa03030 DNA replication 0.0003084027 36 3.807440e-06
## hsa04114 Oocyte meiosis 0.0059932916 101 1.109869e-04
## hsa03013 RNA transport 0.0387868193 145 1.181787e-03
## hsa03440 Homologous recombination 0.0387868193 28 1.197124e-03
## hsa00240 Pyrimidine metabolism 0.0423985796 96 1.570318e-03
##
## $stats
## stat.mean exp1
## hsa04142 Lysosome 3.517890 3.517890
## hsa04640 Hematopoietic cell lineage 2.976432 2.976432
## hsa04630 Jak-STAT signaling pathway 2.604390 2.604390
## hsa00140 Steroid hormone biosynthesis 2.636206 2.636206
## hsa04062 Chemokine signaling pathway 2.250765 2.250765
## hsa00511 Other glycan degradation 2.104311 2.104311
</code></pre>
<div style="margin: 1.2em 0px !important;">
Now, let’s process the results to pull out the top 5 upregulated pathways, then further process that just to get the IDs. We’ll use these KEGG pathway IDs downstream for plotting.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># Get the pathways</span>
keggrespathways = data.frame(id=rownames(keggres$greater), keggres$greater) %>%
tbl_df() %>%
filter(row_number()<=<span class="hljs-number">5</span>) %>%
.$id %>%
as.character()
keggrespathways
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## [1] "hsa04142 Lysosome"
## [2] "hsa04640 Hematopoietic cell lineage"
## [3] "hsa04630 Jak-STAT signaling pathway"
## [4] "hsa00140 Steroid hormone biosynthesis"
## [5] "hsa04062 Chemokine signaling pathway"
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># Get the IDs.</span>
keggresids = substr(keggrespathways, start=<span class="hljs-number">1</span>, <span class="hljs-keyword">stop</span>=<span class="hljs-number">8</span>)
keggresids
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## [1] "hsa04142" "hsa04640" "hsa04630" "hsa00140" "hsa04062"
</code></pre>
<div style="margin: 1.2em 0px !important;">
Finally, the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">pathview()</code> function in the pathview package makes the plots. Let’s write a function so we can loop through and draw plots for the top 5 pathways we created above.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># Define plotting function for applying later</span>
plot_pathway = <span class="hljs-keyword">function</span>(pid) pathview(gene.data=foldchanges, pathway.id=pid, species=<span class="hljs-string">"hsa"</span>, new.signature=<span class="hljs-literal">FALSE</span>)
<span class="hljs-comment"># plot multiple pathways (plots saved to disk and returns a throwaway list object)</span>
tmp = sapply(keggresids, <span class="hljs-keyword">function</span>(pid) pathview(gene.data=foldchanges, pathway.id=pid, species=<span class="hljs-string">"hsa"</span>))
</code></pre>
<div style="margin: 1.2em 0px !important;">
Here are the plots:</div>
<div style="margin: 1.2em 0px !important;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqEHsEAAd5Gj6LSceAHI5yEvAsk0EZdyy-IpUtZhmPewOKoC_icusNX4kHfadPq53H7EIcD9oFOZOoqZDfd7iwtlRpHS1C_jxDFruJA4tPD1Z9eHWbRdBD0LgebXRKRhHuwbJ6Cr6hlNk/s1600/hsa00140.pathview.png" imageanchor="1"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqEHsEAAd5Gj6LSceAHI5yEvAsk0EZdyy-IpUtZhmPewOKoC_icusNX4kHfadPq53H7EIcD9oFOZOoqZDfd7iwtlRpHS1C_jxDFruJA4tPD1Z9eHWbRdBD0LgebXRKRhHuwbJ6Cr6hlNk/s640/hsa00140.pathview.png" width="568" /></a></div>
<div style="margin: 1.2em 0px !important;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb7UTi1zKMNC-hJySIRlXQ6hv6ZWnNgvmP7r8nZGwtVirGY8V_86UGn_gUpO18lDlPLxSbQvdE-XL7gzvvhD6MbcqfzN64anyNkTDoWuLCR2tXx0sX35dzbxXf7Bo-vU1j7UFE2UzsOTg/s1600/hsa04640.pathview.png" imageanchor="1"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb7UTi1zKMNC-hJySIRlXQ6hv6ZWnNgvmP7r8nZGwtVirGY8V_86UGn_gUpO18lDlPLxSbQvdE-XL7gzvvhD6MbcqfzN64anyNkTDoWuLCR2tXx0sX35dzbxXf7Bo-vU1j7UFE2UzsOTg/s640/hsa04640.pathview.png" width="450" /></a></div>
<div style="margin: 1.2em 0px !important;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5TQyyTQyIsubrhV-1MZbPUBbkBfT498o8MkkW9kW-pJhX7uKxh8hyphenhyphenkJKqHQVfMraIqiEIvf6daDqZOnQOEuIipYykJ1HLlh9R2UDp2Wxgen0gD1HE0-FSKg6jSNTd_pHT__WR3EncWFQ/s1600/hsa04630.pathview.png" imageanchor="1"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5TQyyTQyIsubrhV-1MZbPUBbkBfT498o8MkkW9kW-pJhX7uKxh8hyphenhyphenkJKqHQVfMraIqiEIvf6daDqZOnQOEuIipYykJ1HLlh9R2UDp2Wxgen0gD1HE0-FSKg6jSNTd_pHT__WR3EncWFQ/s640/hsa04630.pathview.png" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQi-G-38os4Sh_FvsCLq8Yewh5r1dggpupUK3oOXXt-boTYmW5YnTEr7CHg9jD5zFzKJRZPcNNzUjNa3DT3nQfK5DcgYVxP-0r2BgdnDHLu_6AGtCRITZmBDPcM2FdKCXKCD0SDlG0Az4/s1600/hsa04142.pathview.png" imageanchor="1"><img border="0" height="465" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQi-G-38os4Sh_FvsCLq8Yewh5r1dggpupUK3oOXXt-boTYmW5YnTEr7CHg9jD5zFzKJRZPcNNzUjNa3DT3nQfK5DcgYVxP-0r2BgdnDHLu_6AGtCRITZmBDPcM2FdKCXKCD0SDlG0Az4/s640/hsa04142.pathview.png" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIeiWjW5f8hWCtFdmKHno18_48Zquss0Z3i5EwtEZ5kJ7gxf1N20Ahi1qTSkpIh8vgIv9xXPaq4v4HRnAf2_v-dXOSM2nkhtAkXb6VdOOeCp03Qjtwo10T-Dz1tfrc1u5sTq2keQwCNIw/s1600/hsa04062.pathview.png" imageanchor="1"><img border="0" height="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIeiWjW5f8hWCtFdmKHno18_48Zquss0Z3i5EwtEZ5kJ7gxf1N20Ahi1qTSkpIh8vgIv9xXPaq4v4HRnAf2_v-dXOSM2nkhtAkXb6VdOOeCp03Qjtwo10T-Dz1tfrc1u5sTq2keQwCNIw/s640/hsa04062.pathview.png" width="640" /></a></div>
<h3 id="gene-ontology-go-" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Gene Ontology (GO)</h3>
<div style="margin: 1.2em 0px !important;">
We can also do a similar procedure with gene ontology. Similar to above, <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">go.sets.hs</code> has all GO terms. <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">go.subs.hs</code> is a named list containing indexes for the BP, CC, and MF ontologies. Let’s only do Biological Process.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">data(go.sets.hs)
data(go.subs.hs)
gobpsets = go.sets.hs[go.subs.hs$BP]
gobpres = gage(foldchanges, gsets=gobpsets, same.dir=<span class="hljs-literal">TRUE</span>)
lapply(gobpres, head)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## $greater
## p.geomean
## GO:0007156 homophilic cell adhesion 3.914568e-05
## GO:0008285 negative regulation of cell proliferation 2.907332e-04
## GO:0016339 calcium-dependent cell-cell adhesion 4.218753e-04
## GO:0016337 cell-cell adhesion 6.170551e-04
## GO:0048729 tissue morphogenesis 6.581460e-04
## GO:1901617 organic hydroxy compound biosynthetic process 8.876161e-04
## stat.mean
## GO:0007156 homophilic cell adhesion 4.017207
## GO:0008285 negative regulation of cell proliferation 3.453345
## GO:0016339 calcium-dependent cell-cell adhesion 3.543891
## GO:0016337 cell-cell adhesion 3.244296
## GO:0048729 tissue morphogenesis 3.223979
## GO:1901617 organic hydroxy compound biosynthetic process 3.157421
## p.val
## GO:0007156 homophilic cell adhesion 3.914568e-05
## GO:0008285 negative regulation of cell proliferation 2.907332e-04
## GO:0016339 calcium-dependent cell-cell adhesion 4.218753e-04
## GO:0016337 cell-cell adhesion 6.170551e-04
## GO:0048729 tissue morphogenesis 6.581460e-04
## GO:1901617 organic hydroxy compound biosynthetic process 8.876161e-04
## q.val
## GO:0007156 homophilic cell adhesion 0.1613977
## GO:0008285 negative regulation of cell proliferation 0.4720349
## GO:0016339 calcium-dependent cell-cell adhesion 0.4720349
## GO:0016337 cell-cell adhesion 0.4720349
## GO:0048729 tissue morphogenesis 0.4720349
## GO:1901617 organic hydroxy compound biosynthetic process 0.4720349
## set.size
## GO:0007156 homophilic cell adhesion 124
## GO:0008285 negative regulation of cell proliferation 458
## GO:0016339 calcium-dependent cell-cell adhesion 27
## GO:0016337 cell-cell adhesion 355
## GO:0048729 tissue morphogenesis 429
## GO:1901617 organic hydroxy compound biosynthetic process 141
## exp1
## GO:0007156 homophilic cell adhesion 3.914568e-05
## GO:0008285 negative regulation of cell proliferation 2.907332e-04
## GO:0016339 calcium-dependent cell-cell adhesion 4.218753e-04
## GO:0016337 cell-cell adhesion 6.170551e-04
## GO:0048729 tissue morphogenesis 6.581460e-04
## GO:1901617 organic hydroxy compound biosynthetic process 8.876161e-04
##
## $less
## p.geomean stat.mean
## GO:0048285 organelle fission 4.411540e-18 -8.850004
## GO:0000280 nuclear division 7.459684e-18 -8.805564
## GO:0007067 mitosis 7.459684e-18 -8.805564
## GO:0000087 M phase of mitotic cell cycle 2.286444e-17 -8.655644
## GO:0007059 chromosome segregation 1.872901e-13 -7.686883
## GO:0051301 cell division 5.841375e-12 -6.887763
## p.val q.val
## GO:0048285 organelle fission 4.411540e-18 1.025209e-14
## GO:0000280 nuclear division 7.459684e-18 1.025209e-14
## GO:0007067 mitosis 7.459684e-18 1.025209e-14
## GO:0000087 M phase of mitotic cell cycle 2.286444e-17 2.356752e-14
## GO:0007059 chromosome segregation 1.872901e-13 1.544394e-10
## GO:0051301 cell division 5.841375e-12 4.013998e-09
## set.size exp1
## GO:0048285 organelle fission 376 4.411540e-18
## GO:0000280 nuclear division 352 7.459684e-18
## GO:0007067 mitosis 352 7.459684e-18
## GO:0000087 M phase of mitotic cell cycle 362 2.286444e-17
## GO:0007059 chromosome segregation 141 1.872901e-13
## GO:0051301 cell division 462 5.841375e-12
##
## $stats
## stat.mean
## GO:0007156 homophilic cell adhesion 4.017207
## GO:0008285 negative regulation of cell proliferation 3.453345
## GO:0016339 calcium-dependent cell-cell adhesion 3.543891
## GO:0016337 cell-cell adhesion 3.244296
## GO:0048729 tissue morphogenesis 3.223979
## GO:1901617 organic hydroxy compound biosynthetic process 3.157421
## exp1
## GO:0007156 homophilic cell adhesion 4.017207
## GO:0008285 negative regulation of cell proliferation 3.453345
## GO:0016339 calcium-dependent cell-cell adhesion 3.543891
## GO:0016337 cell-cell adhesion 3.244296
## GO:0048729 tissue morphogenesis 3.223979
## GO:1901617 organic hydroxy compound biosynthetic process 3.157421
</code></pre>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PHA+IyBUdXRvcmlhbDogUk5BLXNlcSBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiAmYW1wOyBwYXRo
d2F5IGFuYWx5c2lzIHdpdGggU2FpbGZpc2gsIERFU2VxMiwgR0FHRSwgYW5kIFBhdGh2aWV3PC9w
PjxwPjxicj48L3A+PHA+IyMgQmFja2dyb3VuZDwvcD48cD48YnI+PC9wPjxwPlRoaXMgdHV0b3Jp
YWwgc2hvd3MgYW4gZXhhbXBsZSBvZiBSTkEtc2VxIGRhdGEgYW5hbHlzaXMgd2l0aCBERVNlcTIs
IGZvbGxvd2VkIGJ5IEtFR0cgcGF0aHdheSBhbmFseXNpcyB1c2luZyBbR0FHRV0oaHR0cDovL2Jp
b2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMvZ2FnZSkuIFVzaW5nIGRhdGEgZnJvbSBbR1NFMzc3MDRd
KGh0dHA6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW8vcXVlcnkvYWNjLmNnaT9hY2M9R1NFMzc3
MDQpLCB3aXRoIHByb2Nlc3NlZCBkYXRhIGF2YWlsYWJsZSBvbiBGaWdzaGFyZSBET0k6IFsxMC42
MDg0L205LmZpZ3NoYXJlLjE2MDE5NzVdKGh0dHA6Ly9keC5kb2kub3JnLzEwLjYwODQvbTkuZmln
c2hhcmUuMTYwMTk3NSkuIFRoaXMgZGF0YXNldCBoYXMgc2l4IHNhbXBsZXMgZnJvbSBHU0UzNzcw
NCwgd2hlcmUgZXhwcmVzc2lvbiB3YXMgcXVhbnRpZmllZCBieSBlaXRoZXI6IChBKSBtYXBwaW5n
IHRvIHRvIEdSQ2gzOCB1c2luZyBTVEFSIHRoZW4gY291bnRpbmcgcmVhZHMgbWFwcGVkIHRvIGdl
bmVzIHdpdGggZmVhdHVyZUNvdW50cyB1bmRlciB0aGUgdW5pb24taW50ZXJzZWN0aW9uIG1vZGVs
LCBvciAoQikgYWxpZ25tZW50LWZyZWUgcXVhbnRpZmljYXRpb24gdXNpbmcgW1NhaWxmaXNoXSho
dHRwOi8vd3d3Lm5hdHVyZS5jb20vbmJ0L2pvdXJuYWwvdjMyL241L2Z1bGwvbmJ0LjI4NjIuaHRt
bCksIHN1bW1hcml6ZWQgYXQgdGhlIGdlbmUgbGV2ZWwgdXNpbmcgdGhlIEdSQ2gzOCBHVEYgZmls
ZS4gQm90aCBkYXRhc2V0cyBhcmUgcmVzdHJpY3RlZCB0byBwcm90ZWluLWNvZGluZyBnZW5lcyBv
bmx5LiBIZXJlIEknbGwgdXNlIHRoZSBTYWlsZmlzaCBnZW5lLWxldmVsIGVzdGltYXRlZCBjb3Vu
dHMuPC9wPjxwPjxicj48L3A+PHA+IyMgRGlmZmVyZW50aWFsIGV4cHJlc3Npb24gYW5hbHlzaXM8
L3A+PHA+PGJyPjwvcD48cD5GaXJzdCwgaW1wb3J0IHRoZSBjb3VudGRhdGEgYW5kIG1ldGFkYXRh
IGRpcmVjdGx5IGZyb20gdGhlIHdlYi4gU2V0IHVwIHRoZSBERVNlcURhdGFTZXQsIHJ1biB0aGUg
REVTZXEyIHBpcGVsaW5lLjwvcD48cD48YnI+PC9wPjxwPjxicj48L3A+PHA+YGBgcjwvcD48cD4j
IE5vdGUgaW1wb3J0aW5nIEJpb0MgcGtncyBhZnRlciBkcGx5ciByZXF1aXJlcyBleHBsaWNpdGx5
IHVzaW5nIGRwbHlyOjpzZWxlY3QoKTwvcD48cD5saWJyYXJ5KGRwbHlyKTwvcD48cD5saWJyYXJ5
KERFU2VxMik8L3A+PHA+PGJyPjwvcD48cD4jIFdoaWNoIGRhdGEgZG8geW91IHdhbnQgdG8gdXNl
PyBMZXQncyB1c2UgdGhlIHNhaWxmaXNoIGNvdW50cy48L3A+PHA+IyBicm93c2VVUkwoImh0dHA6
Ly9keC5kb2kub3JnLzEwLjYwODQvbTkuZmlnc2hhcmUuMTYwMTk3NSIpPC9wPjxwPiMgY291bnRE
YXRhVVJMID0gImh0dHA6Ly9maWxlcy5maWdzaGFyZS5jb20vMjQzOTA2MS9HU0UzNzcwNF9mZWF0
dXJlY291bnRzLmNzdiI8L3A+PHA+Y291bnREYXRhVVJMID0gImh0dHA6Ly9maWxlcy5maWdzaGFy
ZS5jb20vMjYwMDM3My9HU0UzNzcwNF9zYWlsZmlzaF9nZW5lY291bnRzLmNzdiI8L3A+PHA+PGJy
PjwvcD48cD4jIEltcG9ydCBjb3VudGRhdGE8L3A+PHA+Y291bnREYXRhID0gcmVhZC5jc3YoY291
bnREYXRhVVJMLCByb3cubmFtZXM9MSkgJSZndDslJm5ic3A7PC9wPjxwPiZuYnNwOyBkcGx5cjo6
c2VsZWN0KC1sZW5ndGgpICUmZ3Q7JSZuYnNwOzwvcD48cD4mbmJzcDsgYXMubWF0cml4KCk8L3A+
PHA+PGJyPjwvcD48cD4jIEZpbHRlciBkYXRhIHdoZXJlIHlvdSBvbmx5IGhhdmUgMCBvciAxIHJl
YWQgY291bnQgYWNyb3NzIGFsbCBzYW1wbGVzLjwvcD48cD5jb3VudERhdGEgPSBjb3VudERhdGFb
cm93U3Vtcyhjb3VudERhdGEpJmd0OzEsIF08L3A+PHA+aGVhZChjb3VudERhdGEpPC9wPjxwPmBg
YDwvcD48cD48YnI+PC9wPjxwPmBgYDwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFNSUjQ5MzM2NiBTUlI0OTMzNjcgU1JSNDkz
MzY4IFNSUjQ5MzM2OSBTUlI0OTMzNzA8L3A+PHA+IyMgRU5TRzAwMDAwMTk4ODg4ICZuYnNwOyAm
bmJzcDsgMTc1MjggJm5ic3A7ICZuYnNwOyAyMzAwNyAmbmJzcDsgJm5ic3A7IDMwMjQxICZuYnNw
OyAmbmJzcDsgMjQ0MTggJm5ic3A7ICZuYnNwOyAyOTE1MjwvcD48cD4jIyBFTlNHMDAwMDAxOTg3
NjMgJm5ic3A7ICZuYnNwOyAyMTI2NCAmbmJzcDsgJm5ic3A7IDI2NzIwICZuYnNwOyAmbmJzcDsg
MzU1NTAgJm5ic3A7ICZuYnNwOyAyODg3OCAmbmJzcDsgJm5ic3A7IDMyNDE2PC9wPjxwPiMjIEVO
U0cwMDAwMDE5ODgwNCAmbmJzcDsgJm5ic3A7MTMwOTc1ICZuYnNwOyAmbmJzcDsxNTEyMDcgJm5i
c3A7ICZuYnNwOzE5NTUxNCAmbmJzcDsgJm5ic3A7MTc4MTMwICZuYnNwOyAmbmJzcDsxOTY3Mjc8
L3A+PHA+IyMgRU5TRzAwMDAwMTk4NzEyICZuYnNwOyAmbmJzcDsgNDk3NjkgJm5ic3A7ICZuYnNw
OyA2MTkwNiAmbmJzcDsgJm5ic3A7IDc4NjA4ICZuYnNwOyAmbmJzcDsgNjY0NzggJm5ic3A7ICZu
YnNwOyA2OTc1ODwvcD48cD4jIyBFTlNHMDAwMDAyMjgyNTMgJm5ic3A7ICZuYnNwOyAmbmJzcDs5
MzA0ICZuYnNwOyAmbmJzcDsgMTExNjAgJm5ic3A7ICZuYnNwOyAxMjgzMCAmbmJzcDsgJm5ic3A7
IDEyNjA4ICZuYnNwOyAmbmJzcDsgMTMwNDE8L3A+PHA+IyMgRU5TRzAwMDAwMTk4ODk5ICZuYnNw
OyAmbmJzcDsgNDU0MDEgJm5ic3A7ICZuYnNwOyA1MTI2MCAmbmJzcDsgJm5ic3A7IDY2ODUxICZu
YnNwOyAmbmJzcDsgNjM0MzMgJm5ic3A7ICZuYnNwOyA2NjEyMzwvcD48cD4jIyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFNSUjQ5MzM3MTwv
cD48cD4jIyBFTlNHMDAwMDAxOTg4ODggJm5ic3A7ICZuYnNwOyAzNDQxNjwvcD48cD4jIyBFTlNH
MDAwMDAxOTg3NjMgJm5ic3A7ICZuYnNwOyAzODQyMjwvcD48cD4jIyBFTlNHMDAwMDAxOTg4MDQg
Jm5ic3A7ICZuYnNwOzI0NDY3MDwvcD48cD4jIyBFTlNHMDAwMDAxOTg3MTIgJm5ic3A7ICZuYnNw
OyA4NjgwODwvcD48cD4jIyBFTlNHMDAwMDAyMjgyNTMgJm5ic3A7ICZuYnNwOyAxNjA2MzwvcD48
cD4jIyBFTlNHMDAwMDAxOTg4OTkgJm5ic3A7ICZuYnNwOyA3OTIxNTwvcD48cD5gYGA8L3A+PHA+
PGJyPjwvcD48cD5gYGByPC9wPjxwPiMgSW1wb3J0IG1ldGFkYXRhPC9wPjxwPmNvbERhdGEgPSBy
ZWFkLmNzdigiaHR0cDovL2ZpbGVzLmZpZ3NoYXJlLmNvbS8yNDM5MDYwL0dTRTM3NzA0X21ldGFk
YXRhLmNzdiIsIHJvdy5uYW1lcz0xKTwvcD48cD5jb2xEYXRhPC9wPjxwPmBgYDwvcD48cD48YnI+
PC9wPjxwPmBgYDwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgY29uZGl0aW9uPC9wPjxwPiMjIFNSUjQ5MzM2NiBjb250cm9sX3Npcm5hPC9w
PjxwPiMjIFNSUjQ5MzM2NyBjb250cm9sX3Npcm5hPC9wPjxwPiMjIFNSUjQ5MzM2OCBjb250cm9s
X3Npcm5hPC9wPjxwPiMjIFNSUjQ5MzM2OSAmbmJzcDsgJm5ic3A7ICZuYnNwO2hveGExX2tkPC9w
PjxwPiMjIFNSUjQ5MzM3MCAmbmJzcDsgJm5ic3A7ICZuYnNwO2hveGExX2tkPC9wPjxwPiMjIFNS
UjQ5MzM3MSAmbmJzcDsgJm5ic3A7ICZuYnNwO2hveGExX2tkPC9wPjxwPmBgYDwvcD48cD48YnI+
PC9wPjxwPmBgYHI8L3A+PHA+IyBTZXQgdXAgdGhlIERFU2VxRGF0YVNldCBPYmplY3QgYW5kIHJ1
biB0aGUgREVTZXEgcGlwZWxpbmU8L3A+PHA+ZGRzID0gREVTZXFEYXRhU2V0RnJvbU1hdHJpeChj
b3VudERhdGE9Y291bnREYXRhLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyBjb2xEYXRhPWNvbERhdGEsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRlc2lnbj1+Y29uZGl0aW9uKTwvcD48cD5k
ZHMgPSBERVNlcShkZHMpPC9wPjxwPmRkczwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5gYGA8
L3A+PHA+IyMgY2xhc3M6IERFU2VxRGF0YVNldCZuYnNwOzwvcD48cD4jIyBkaW06IDE2NzU1IDYm
bmJzcDs8L3A+PHA+IyMgbWV0YWRhdGEoMCk6PC9wPjxwPiMjIGFzc2F5cygzKTogY291bnRzIG11
IGNvb2tzPC9wPjxwPiMjIHJvd25hbWVzKDE2NzU1KTogRU5TRzAwMDAwMTk4ODg4IEVOU0cwMDAw
MDE5ODc2MyAuLi48L3A+PHA+IyMgJm5ic3A7IEVOU0cwMDAwMDI2Nzc5NSBFTlNHMDAwMDAxNjU3
OTU8L3A+PHA+IyMgcm93UmFuZ2VzIG1ldGFkYXRhIGNvbHVtbiBuYW1lcygyNyk6IGJhc2VNZWFu
IGJhc2VWYXIgLi4uIGRldmlhbmNlPC9wPjxwPiMjICZuYnNwOyBtYXhDb29rczwvcD48cD4jIyBj
b2xuYW1lcyg2KTogU1JSNDkzMzY2IFNSUjQ5MzM2NyAuLi4gU1JSNDkzMzcwIFNSUjQ5MzM3MTwv
cD48cD4jIyBjb2xEYXRhIG5hbWVzKDIpOiBjb25kaXRpb24gc2l6ZUZhY3RvcjwvcD48cD5gYGA8
L3A+PHA+PGJyPjwvcD48cD5OZXh0LCBnZXQgcmVzdWx0cyBmb3IgdGhlIEhveEExIGtub2NrZG93
biB2ZXJzdXMgY29udHJvbCBzaVJOQSwgYW5kIHJlb3JkZXIgdGhlbSBieSBwLXZhbHVlLiBDYWxs
IGBzdW1tYXJ5YCBvbiB0aGUgcmVzdWx0cyBvYmplY3QgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IG1h
bnkgZ2VuZXMgYXJlIHVwIG9yIGRvd24tcmVndWxhdGVkIGF0IEZEUiZsdDswLjEuPC9wPjxwPjxi
cj48L3A+PHA+PGJyPjwvcD48cD5gYGByPC9wPjxwPnJlcyA9IHJlc3VsdHMoZGRzLCBjb250cmFz
dD1jKCJjb25kaXRpb24iLCAiaG94YTFfa2QiLCAiY29udHJvbF9zaXJuYSIpKTwvcD48cD5yZXMg
PSByZXNbb3JkZXIocmVzJHB2YWx1ZSksXTwvcD48cD5zdW1tYXJ5KHJlcyk8L3A+PHA+YGBgPC9w
PjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPiMjJm5ic3A7PC9wPjxwPiMjIG91dCBvZiAxNjc1NSB3
aXRoIG5vbnplcm8gdG90YWwgcmVhZCBjb3VudDwvcD48cD4jIyBhZGp1c3RlZCBwLXZhbHVlICZs
dDsgMC4xPC9wPjxwPiMjIExGQyAmZ3Q7IDAgKHVwKSAmbmJzcDsgJm5ic3A7IDogNDE5MywgMjUl
Jm5ic3A7PC9wPjxwPiMjIExGQyAmbHQ7IDAgKGRvd24pICZuYnNwOyA6IDQyODYsIDI2JSZuYnNw
OzwvcD48cD4jIyBvdXRsaWVycyBbMV0gJm5ic3A7ICZuYnNwOyA6IDIyLCAwLjEzJSZuYnNwOzwv
cD48cD4jIyBsb3cgY291bnRzIFsyXSAmbmJzcDsgOiAxMjk5LCA3LjglJm5ic3A7PC9wPjxwPiMj
IChtZWFuIGNvdW50ICZsdDsgMSk8L3A+PHA+IyMgWzFdIHNlZSAnY29va3NDdXRvZmYnIGFyZ3Vt
ZW50IG9mID9yZXN1bHRzPC9wPjxwPiMjIFsyXSBzZWUgJ2luZGVwZW5kZW50RmlsdGVyaW5nJyBh
cmd1bWVudCBvZiA/cmVzdWx0czwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5TaW5jZSB3ZSBt
YXBwZWQgYW5kIGNvdW50ZWQgYWdhaW5zdCB0aGUgRW5zZW1ibCBhbm5vdGF0aW9uLCBvdXIgcmVz
dWx0cyBvbmx5IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgRW5zZW1ibCBnZW5lIElEcy4gQnV0LCBv
dXIgcGF0aHdheSBhbmFseXNpcyBkb3duc3RyZWFtIHdpbGwgdXNlIEtFR0cgcGF0aHdheXMsIGFu
ZCBnZW5lcyBpbiBLRUdHIHBhdGh3YXlzIGFyZSBhbm5vdGF0ZWQgd2l0aCBFbnRyZXogZ2VuZSBJ
RHMuIEkgd3JvdGUgYW4gUiBwYWNrYWdlIGZvciBkb2luZyB0aGlzIG9mZmxpbmUgdGhlIGRwbHly
IHdheSAoJmx0O2h0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVudHVybmVyL2Fubm90YWJsZXMmZ3Q7
KSwgYnV0IHRoZSBjYW5vbmljYWwgQmlvY29uZHVjdG9yIHdheSB0byBkbyBpdCBpcyB3aXRoIHRo
ZSBBbm5vdGF0aW9uRGJpIGFuZCBvcmdhbmlzbSBhbm5vdGF0aW9uIHBhY2thZ2VzLiBIZXJlIHdl
J3JlIHVzaW5nIHRoZSBvcmdhbmlzbSBwYWNrYWdlICgib3JnIikgZm9yIEhvbW8gc2FwaWVucyAo
IkhzIiksIG9yZ2FuaXplZCBhcyBhbiBBbm5vdGF0aW9uRGJpIGRhdGFiYXNlIHBhY2thZ2UgKCJk
YiIpIHVzaW5nIEVudHJleiBHZW5lIElEcyAoImVnIikgYXMgcHJpbWFyeSBrZXlzLiBUbyBzZWUg
d2hhdCBhbGwgdGhlIGtleXMgYXJlLCB1c2UgdGhlIGBjb2x1bW5zYCBmdW5jdGlvbi48L3A+PHA+
PGJyPjwvcD48cD48YnI+PC9wPjxwPmBgYHI8L3A+PHA+bGlicmFyeSgiQW5ub3RhdGlvbkRiaSIp
PC9wPjxwPmxpYnJhcnkoIm9yZy5Icy5lZy5kYiIpPC9wPjxwPmNvbHVtbnMob3JnLkhzLmVnLmRi
KTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5gYGA8L3A+PHA+IyMgJm5ic3A7WzFdICJBQ0NO
VU0iICZuYnNwOyAmbmJzcDsgJm5ic3A7ICJBTElBUyIgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IkVOU0VNQkwiICZuYnNwOyAmbmJzcDsgJm5ic3A7IkVOU0VNQkxQUk9UIiZuYnNwOzwvcD48
cD4jIyAmbmJzcDtbNV0gIkVOU0VNQkxUUkFOUyIgIkVOVFJFWklEIiAmbmJzcDsgJm5ic3A7ICJF
TlpZTUUiICZuYnNwOyAmbmJzcDsgJm5ic3A7ICJFVklERU5DRSIgJm5ic3A7ICZuYnNwOzwvcD48
cD4jIyAmbmJzcDtbOV0gIkVWSURFTkNFQUxMIiAmbmJzcDsiR0VORU5BTUUiICZuYnNwOyAmbmJz
cDsgIkdPIiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICJHT0FMTCIgJm5ic3A7
ICZuYnNwOyAmbmJzcDsmbmJzcDs8L3A+PHA+IyMgWzEzXSAiSVBJIiAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7Ik1BUCIgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyJPTUlNIiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIk9OVE9MT0dZIiAmbmJzcDsgJm5i
c3A7PC9wPjxwPiMjIFsxN10gIk9OVE9MT0dZQUxMIiAmbmJzcDsiUEFUSCIgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICJQRkFNIiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIlBNSUQi
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzwvcD48cD4jIyBbMjFdICJQUk9TSVRFIiAmbmJz
cDsgJm5ic3A7ICZuYnNwOyJSRUZTRVEiICZuYnNwOyAmbmJzcDsgJm5ic3A7ICJTWU1CT0wiICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICJVQ1NDS0ciICZuYnNwOyAmbmJzcDsgJm5ic3A7PC9wPjxwPiMj
IFsyNV0gIlVOSUdFTkUiICZuYnNwOyAmbmJzcDsgJm5ic3A7IlVOSVBST1QiPC9wPjxwPmBgYDwv
cD48cD48YnI+PC9wPjxwPkxldCdzIHVzZSB0aGUgYG1hcElkc2AgZnVuY3Rpb24gdG8gYWRkIG1v
cmUgY29sdW1ucyB0byB0aGUgcmVzdWx0cy4gVGhlIGByb3cubmFtZXNgIG9mIG91ciByZXN1bHRz
IHRhYmxlIGhhcyB0aGUgRW5zZW1ibCBnZW5lIElEIChvdXIga2V5KSwgc28gd2UgbmVlZCB0byBz
cGVjaWZ5ICZuYnNwO2BrZXl0eXBlPUVOU0VNQkxgLiBUaGUgYGNvbHVtbmAgYXJndW1lbnQgdGVs
bHMgdGhlIGBtYXBJZHNgIGZ1bmN0aW9uIHdoaWNoIGluZm9ybWF0aW9uIHdlIHdhbnQsIGFuZCB0
aGUgYG11bHRpVmFsc2AgYXJndW1lbnQgdGVsbHMgdGhlIGZ1bmN0aW9uIHdoYXQgdG8gZG8gaWYg
dGhlcmUgYXJlIG11bHRpcGxlIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBzaW5nbGUgaW5wdXQgdmFs
dWUuIEhlcmUgd2UgYXNrIHRvIGp1c3QgZ2l2ZSB1cyBiYWNrIHRoZSBmaXJzdCBvbmUgdGhhdCBv
Y2N1cnMgaW4gdGhlIGRhdGFiYXNlLiBMZXQncyBnZXQgdGhlIEVudHJleiBJRHMsIGdlbmUgc3lt
Ym9scywgYW5kIGZ1bGwgZ2VuZSBuYW1lcy5bXmxvdmVjb2RlXTwvcD48cD48YnI+PC9wPjxwPlte
bG92ZWNvZGVdOiBDb2RlIGZyb206IExvdmUsIE1pY2hhZWwgSS4sIGV0IGFsLiAiUk5BLVNlcSB3
b3JrZmxvdzogZ2VuZS1sZXZlbCBleHBsb3JhdG9yeSBhbmFseXNpcyBhbmQgZGlmZmVyZW50aWFs
IGV4cHJlc3Npb24uIiBfRjEwMDBSZXNlYXJjaF8gNCAoMjAxNSkuPC9wPjxwPjxicj48L3A+PHA+
PGJyPjwvcD48cD5gYGByPC9wPjxwPnJlcyRzeW1ib2wgPSBtYXBJZHMob3JnLkhzLmVnLmRiLDwv
cD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7a2V5cz1yb3cubmFtZXMocmVzKSwmbmJzcDs8L3A+PHA+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO2NvbHVtbj0iU1lNQk9MIiw8L3A+PHA+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwO2tleXR5cGU9IkVOU0VNQkwiLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bXVsdGlWYWxz
PSJmaXJzdCIpPC9wPjxwPnJlcyRlbnRyZXogPSBtYXBJZHMob3JnLkhzLmVnLmRiLDwvcD48cD4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7a2V5cz1yb3cubmFtZXMocmVzKSwmbmJzcDs8L3A+PHA+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwO2NvbHVtbj0iRU5UUkVaSUQiLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
a2V5dHlwZT0iRU5TRU1CTCIsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDttdWx0aVZhbHM9ImZp
cnN0Iik8L3A+PHA+cmVzJG5hbWUgPSAmbmJzcDsgbWFwSWRzKG9yZy5Icy5lZy5kYiw8L3A+PHA+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO2tleXM9cm93Lm5hbWVzKHJlcyksJm5ic3A7PC9wPjxwPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDtjb2x1bW49IkdFTkVOQU1FIiw8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
O2tleXR5cGU9IkVOU0VNQkwiLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bXVsdGlWYWxzPSJm
aXJzdCIpPC9wPjxwPjxicj48L3A+PHA+aGVhZChyZXMsIDEwKTwvcD48cD5gYGA8L3A+PHA+PGJy
PjwvcD48cD5gYGA8L3A+PHA+IyMgbG9nMiBmb2xkIGNoYW5nZSAoTUFQKTogY29uZGl0aW9uIGhv
eGExX2tkIHZzIGNvbnRyb2xfc2lybmEmbmJzcDs8L3A+PHA+IyMgV2FsZCB0ZXN0IHAtdmFsdWU6
IGNvbmRpdGlvbiBob3hhMV9rZCB2cyBjb250cm9sX3Npcm5hJm5ic3A7PC9wPjxwPiMjIERhdGFG
cmFtZSB3aXRoIDEwIHJvd3MgYW5kIDkgY29sdW1uczwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2Jhc2VNZWFuIGxv
ZzJGb2xkQ2hhbmdlICZuYnNwOyAmbmJzcDsgJm5ic3A7bGZjU0UgJm5ic3A7ICZuYnNwOyAmbmJz
cDtzdGF0ICZuYnNwOyAmbmJzcDtwdmFsdWU8L3A+PHA+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbHQ7bnVtZXJpYyZndDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsmbHQ7bnVtZXJpYyZndDsgJm5ic3A7Jmx0O251bWVyaWMmZ3Q7ICZsdDtu
dW1lcmljJmd0OyAmbHQ7bnVtZXJpYyZndDs8L3A+PHA+IyMgRU5TRzAwMDAwMTQ4NzczICZuYnNw
OzE4ODUuMzQ0ICZuYnNwOyAmbmJzcDsgJm5ic3A7LTMuMTcyNTAyIDAuMDc4Njg1NzIgLTQwLjMx
ODY1ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwPC9wPjxwPiMjIEVOU0cwMDAwMDEzODYy
MyAmbmJzcDsyOTM5LjkzNiAmbmJzcDsgJm5ic3A7ICZuYnNwOy0yLjQxODIzOCAwLjA1ODg5MjI5
IC00MS4wNjIwNSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMDwvcD48cD4jIyBFTlNHMDAw
MDAxMDQzNjggMTM2MDEuOTYzICZuYnNwOyAmbmJzcDsgJm5ic3A7IDIuMDE2ODAyIDAuMDUyNDk2
NDMgJm5ic3A7MzguNDE3ODkgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDA8L3A+PHA+IyMg
RU5TRzAwMDAwMTI0NzY2ICZuYnNwOzI2OTIuMjAwICZuYnNwOyAmbmJzcDsgJm5ic3A7IDIuMzc5
NTQ1IDAuMDYxOTM2NTQgJm5ic3A7MzguNDE5MDggJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IDA8L3A+PHA+IyMgRU5TRzAwMDAwMTIyODYxIDM1ODg5LjQxMyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAyLjIyNDc3OSAwLjA1MjU4NjU4ICZuYnNwOzQyLjMwNjk3ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAwPC9wPjxwPiMjIEVOU0cwMDAwMDExNjAxNiAmbmJzcDs0NTU4LjE1NyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOy0xLjg4NTMzOSAwLjA0MjU4NzY2IC00NC4yNjk2MSAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgMDwvcD48cD4jIyBFTlNHMDAwMDAxNjQyNTEgJm5ic3A7MjQwNC4xMDMg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgMy4zMjUxOTYgMC4wNzAyMTIzNiAmbmJzcDs0Ny4zNTkxMiAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMDwvcD48cD4jIyBFTlNHMDAwMDAxMjUyNTcgJm5i
c3A7NjE4Ny4zODYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMS45NDM3NjIgMC4wNDI1OTE4OSAmbmJz
cDs0NS42MzY5MiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMDwvcD48cD4jIyBFTlNHMDAw
MDAxMDQzMjEgJm5ic3A7OTMzNC41NTUgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMy4xODY4NTYgMC4w
NjIyNzUzMCAmbmJzcDs1MS4xNzM2NyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMDwvcD48
cD4jIyBFTlNHMDAwMDAxODM1MDggJm5ic3A7MjExMC4zNDUgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
My4xOTA2MTIgMC4wNzQ4ODMwNSAmbmJzcDs0Mi42MDc5NCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgMDwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7cGFkaiAmbmJzcDsgJm5ic3A7ICZu
YnNwO3N5bWJvbCAmbmJzcDsgJm5ic3A7ICZuYnNwO2VudHJlejwvcD48cD4jIyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZsdDtudW1lcmlj
Jmd0OyAmbHQ7Y2hhcmFjdGVyJmd0OyAmbHQ7Y2hhcmFjdGVyJmd0OzwvcD48cD4jIyBFTlNHMDAw
MDAxNDg3NzMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgTUtJNjcgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NDI4ODwvcD48cD4jIyBFTlNHMDAw
MDAxMzg2MjMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5ic3A7ICZuYnNwOyAmbmJz
cDtTRU1BN0EgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ODQ4MjwvcD48cD4jIyBFTlNHMDAw
MDAxMDQzNjggJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7UExBVCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs1MzI3PC9wPjxwPiMjIEVO
U0cwMDAwMDEyNDc2NiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMCAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDtTT1g0ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzY2NTk8L3A+PHA+
IyMgRU5TRzAwMDAwMTIyODYxICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO1BMQVUgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NTMyODwv
cD48cD4jIyBFTlNHMDAwMDAxMTYwMTYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgRVBBUzEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MjAzNDwv
cD48cD4jIyBFTlNHMDAwMDAxNjQyNTEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgRjJSTDEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MjE1MDwv
cD48cD4jIyBFTlNHMDAwMDAxMjUyNTcgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgQUJDQzQgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTAyNTc8L3A+PHA+
IyMgRU5TRzAwMDAwMTA0MzIxICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwICZuYnNwOyAm
bmJzcDsgJm5ic3A7IFRSUEExICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzg5ODk8L3A+PHA+
IyMgRU5TRzAwMDAwMTgzNTA4ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwICZuYnNwOyAm
bmJzcDsgJm5ic3A7RkFNNDZDICZuYnNwOyAmbmJzcDsgJm5ic3A7IDU0ODU1PC9wPjxwPiMjICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IG5hbWU8L3A+PHA+IyMg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbHQ7Y2hhcmFjdGVyJmd0OzwvcD48cD4jIyBFTlNHMDAw
MDAxNDg3NzMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bWFya2VyIG9mIHByb2xpZmVyYXRpb24gS2ktNjc8
L3A+PHA+IyMgRU5TRzAwMDAwMTM4NjIzIHNlbWFwaG9yaW4gN0EsIEdQSSBtZW1icmFuZSBhbmNo
b3IgKEpvaG4gTWlsdG9uIEhhZ2VuIGJsb29kIGdyb3VwKTwvcD48cD4jIyBFTlNHMDAwMDAxMDQz
NjggJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7cGxhc21pbm9nZW4gYWN0aXZhdG9yLCB0aXNzdWU8L3A+PHA+
IyMgRU5TRzAwMDAwMTI0NzY2ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IFNSWSAoc2V4IGRldGVybWluaW5nIHJlZ2lvbiBZKS1ib3ggNDwvcD48cD4jIyBF
TlNHMDAwMDAxMjI4NjEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyBwbGFzbWlub2dlbiBhY3RpdmF0b3IsIHVyb2tpbmFzZTwvcD48
cD4jIyBFTlNHMDAwMDAxMTYwMTYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBlbmRvdGhlbGlhbCBQQVMgZG9tYWluIHByb3RlaW4g
MTwvcD48cD4jIyBFTlNHMDAwMDAxNjQyNTEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgY29hZ3VsYXRpb24gZmFjdG9yIElJICh0
aHJvbWJpbikgcmVjZXB0b3ItbGlrZSAxPC9wPjxwPiMjIEVOU0cwMDAwMDEyNTI1NyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0FUUC1iaW5kaW5nIGNhc3NldHRlLCBz
dWItZmFtaWx5IEMgKENGVFIvTVJQKSwgbWVtYmVyIDQ8L3A+PHA+IyMgRU5TRzAwMDAwMTA0MzIx
IHRyYW5zaWVudCByZWNlcHRvciBwb3RlbnRpYWwgY2F0aW9uIGNoYW5uZWwsIHN1YmZhbWlseSBB
LCBtZW1iZXIgMTwvcD48cD4jIyBFTlNHMDAwMDAxODM1MDggJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBm
YW1pbHkgd2l0aCBzZXF1ZW5jZSBzaW1pbGFyaXR5IDQ2LCBtZW1iZXIgQzwvcD48cD5gYGA8L3A+
PHA+PGJyPjwvcD48cD4jIyBQYXRod2F5IGFuYWx5c2lzPC9wPjxwPjxicj48L3A+PHA+V2UncmUg
Z29pbmcgdG8gdXNlIHRoZSBbZ2FnZV0oaHR0cDovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMv
cmVsZWFzZS9iaW9jL2h0bWwvZ2FnZS5odG1sKSBwYWNrYWdlIChHZW5lcmFsbHkgQXBwbGljYWJs
ZSBHZW5lLXNldCBFbnJpY2htZW50IGZvciBQYXRod2F5IEFuYWx5c2lzKSBmb3IgcGF0aHdheSBh
bmFseXNpcy4gU2VlIGFsc28gdGhlIFtnYWdlIHBhY2thZ2Ugd29ya2Zsb3cgdmlnbmV0dGUgZm9y
IFJOQS1zZXEgcGF0aHdheSBhbmFseXNpc10oaHR0cDovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2Fn
ZXMvcmVsZWFzZS9iaW9jL3ZpZ25ldHRlcy9nYWdlL2luc3QvZG9jL1JOQS1zZXFXb3JrZmxvdy5w
ZGYpLiBPbmNlIHdlIGhhdmUgYSBsaXN0IG9mIGVucmljaGVkIHBhdGh3YXlzLCB3ZSdyZSBnb2lu
ZyB0byB1c2UgdGhlIFtwYXRodmlld10oaHR0cDovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMv
cmVsZWFzZS9iaW9jL2h0bWwvcGF0aHZpZXcuaHRtbCkgcGFja2FnZSB0byBkcmF3IHBhdGh3YXkg
ZGlhZ3JhbXMsIHNoYWRpbmcgdGhlIG1vbGVjdWxlcyBpbiB0aGUgcGF0aHdheSBieSB0aGVpciBk
ZWdyZWUgb2YgdXAvZG93bi1yZWd1bGF0aW9uLjwvcD48cD48YnI+PC9wPjxwPiMjIyBLRUdHIHBh
dGh3YXlzPC9wPjxwPjxicj48L3A+PHA+VGhlIFtgZ2FnZURhdGFgXShodHRwOi8vYmlvY29uZHVj
dG9yLm9yZy9wYWNrYWdlcy9yZWxlYXNlL2RhdGEvZXhwZXJpbWVudC9odG1sL2dhZ2VEYXRhLmh0
bWwpIHBhY2thZ2UgaGFzIHByZS1jb21waWxlZCBkYXRhYmFzZXMgbWFwcGluZyBnZW5lcyB0byBL
RUdHIHBhdGh3YXlzIGFuZCBHTyB0ZXJtcyBmb3IgY29tbW9uIG9yZ2FuaXNtcy4gYGtlZ2cuc2V0
cy5oc2AgaXMgYSBuYW1lZCBsaXN0IG9mIDIyOSBlbGVtZW50cy4gRWFjaCBlbGVtZW50IGlzIGEg
Y2hhcmFjdGVyIHZlY3RvciBvZiBtZW1iZXIgZ2VuZSBFbnRyZXogSURzIGZvciBhIHNpbmdsZSBL
RUdHIHBhdGh3YXkuIChTZWUgYWxzbyBgZ28uc2V0cy5oc2ApLiBgc2lnbWV0LmlkeC5oc2AgaXMg
YW4gaW5kZXggb2YgbnVtYmVycyBvZiBzaW5hbGluZyBhbmQgbWV0YWJvbGljIHBhdGh3YXlzIGlu
IGBrZWdnLnNldC5nc2AuIEluIG90aGVyIHdvcmRzLCBLRUdHIHBhdGh3YXkgaW5jbHVkZSBvdGhl
ciB0eXBlcyBvZiBwYXRod2F5IGRlZmluaXRpb25zLCBsaWtlICJHbG9iYWwgTWFwIiBhbmQgIkh1
bWFuIERpc2Vhc2VzIiwgd2hpY2ggbWF5IGJlIHVuZGVzaXJhYmxlIGluIHBhdGh3YXkgYW5hbHlz
aXMuIFRoZXJlZm9yZSwgYGtlZ2cuc2V0cy5oc1tzaWdtZXQuaWR4LmhzXWAgZ2l2ZXMgeW91IHRo
ZSAiY2xlYW5lciIgZ2VuZSBzZXRzIG9mIHNpbmFsaW5nIGFuZCBtZXRhYm9saWMgcGF0aHdheXMg
b25seS48L3A+PHA+PGJyPjwvcD48cD48YnI+PC9wPjxwPmBgYHI8L3A+PHA+bGlicmFyeShwYXRo
dmlldyk8L3A+PHA+bGlicmFyeShnYWdlKTwvcD48cD5saWJyYXJ5KGdhZ2VEYXRhKTwvcD48cD5k
YXRhKGtlZ2cuc2V0cy5ocyk8L3A+PHA+ZGF0YShzaWdtZXQuaWR4LmhzKTwvcD48cD5rZWdnLnNl
dHMuaHMgPSBrZWdnLnNldHMuaHNbc2lnbWV0LmlkeC5oc108L3A+PHA+aGVhZChrZWdnLnNldHMu
aHMsIDMpPC9wPjxwPmBgYDwvcD48cD48YnI+PC9wPjxwPmBgYDwvcD48cD4jIyAkYGhzYTAwMjMy
IENhZmZlaW5lIG1ldGFib2xpc21gPC9wPjxwPiMjIFsxXSAiMTAiICZuYnNwOyAiMTU0NCIgIjE1
NDgiICIxNTQ5IiAiMTU1MyIgIjc0OTgiICI5IiAmbmJzcDsmbmJzcDs8L3A+PHA+IyMmbmJzcDs8
L3A+PHA+IyMgJGBoc2EwMDk4MyBEcnVnIG1ldGFib2xpc20gLSBvdGhlciBlbnp5bWVzYDwvcD48
cD4jIyAmbmJzcDtbMV0gIjEwIiAmbmJzcDsgJm5ic3A7ICIxMDY2IiAmbmJzcDsgIjEwNzIwIiAm
bmJzcDsiMTA5NDEiICZuYnNwOyIxNTE1MzEiICIxNTQ4IiAmbmJzcDsgIjE1NDkiICZuYnNwOzwv
cD48cD4jIyAmbmJzcDtbOF0gIjE1NTEiICZuYnNwOyAiMTU1MyIgJm5ic3A7ICIxNTc2IiAmbmJz
cDsgIjE1NzciICZuYnNwOyAiMTgwNiIgJm5ic3A7ICIxODA3IiAmbmJzcDsgIjE4OTAiICZuYnNw
OzwvcD48cD4jIyBbMTVdICIyMjEyMjMiICIyOTkwIiAmbmJzcDsgIjMyNTEiICZuYnNwOyAiMzYx
NCIgJm5ic3A7ICIzNjE1IiAmbmJzcDsgIjM3MDQiICZuYnNwOyAiNTE3MzMiJm5ic3A7PC9wPjxw
PiMjIFsyMl0gIjU0NDkwIiAmbmJzcDsiNTQ1NzUiICZuYnNwOyI1NDU3NiIgJm5ic3A7IjU0NTc3
IiAmbmJzcDsiNTQ1NzgiICZuYnNwOyI1NDU3OSIgJm5ic3A7IjU0NjAwIiZuYnNwOzwvcD48cD4j
IyBbMjldICI1NDY1NyIgJm5ic3A7IjU0NjU4IiAmbmJzcDsiNTQ2NTkiICZuYnNwOyI1NDk2MyIg
Jm5ic3A7IjU3NDUzNyIgIjY0ODE2IiAmbmJzcDsiNzA4MyIgJm5ic3A7PC9wPjxwPiMjIFszNl0g
IjcwODQiICZuYnNwOyAiNzE3MiIgJm5ic3A7ICI3MzYzIiAmbmJzcDsgIjczNjQiICZuYnNwOyAi
NzM2NSIgJm5ic3A7ICI3MzY2IiAmbmJzcDsgIjczNjciICZuYnNwOzwvcD48cD4jIyBbNDNdICI3
MzcxIiAmbmJzcDsgIjczNzIiICZuYnNwOyAiNzM3OCIgJm5ic3A7ICI3NDk4IiAmbmJzcDsgIjc5
Nzk5IiAmbmJzcDsiODM1NDkiICZuYnNwOyI4ODI0IiAmbmJzcDs8L3A+PHA+IyMgWzUwXSAiODgz
MyIgJm5ic3A7ICI5IiAmbmJzcDsgJm5ic3A7ICZuYnNwOyI5NzgiICZuYnNwOyZuYnNwOzwvcD48
cD4jIyZuYnNwOzwvcD48cD4jIyAkYGhzYTAwMjMwIFB1cmluZSBtZXRhYm9saXNtYDwvcD48cD4j
IyAmbmJzcDsgWzFdICIxMDAiICZuYnNwOyAmbmJzcDsiMTAyMDEiICZuYnNwOyIxMDYwNiIgJm5i
c3A7IjEwNjIxIiAmbmJzcDsiMTA2MjIiICZuYnNwOyIxMDYyMyIgJm5ic3A7IjEwNyIgJm5ic3A7
Jm5ic3A7PC9wPjxwPiMjICZuYnNwOyBbOF0gIjEwNzE0IiAmbmJzcDsiMTA4IiAmbmJzcDsgJm5i
c3A7IjEwODQ2IiAmbmJzcDsiMTA5IiAmbmJzcDsgJm5ic3A7IjExMSIgJm5ic3A7ICZuYnNwOyIx
MTEyOCIgJm5ic3A7IjExMTY0IiZuYnNwOzwvcD48cD4jIyAmbmJzcDtbMTVdICIxMTIiICZuYnNw
OyAmbmJzcDsiMTEzIiAmbmJzcDsgJm5ic3A7IjExNCIgJm5ic3A7ICZuYnNwOyIxMTUiICZuYnNw
OyAmbmJzcDsiMTIyNDgxIiAiMTIyNjIyIiAiMTI0NTgzIjwvcD48cD4jIyAmbmJzcDtbMjJdICIx
MzIiICZuYnNwOyAmbmJzcDsiMTU4IiAmbmJzcDsgJm5ic3A7IjE1OSIgJm5ic3A7ICZuYnNwOyIx
NjMzIiAmbmJzcDsgIjE3MTU2OCIgIjE3MTYiICZuYnNwOyAiMTk2ODgzIjwvcD48cD4jIyAmbmJz
cDtbMjldICIyMDMiICZuYnNwOyAmbmJzcDsiMjA0IiAmbmJzcDsgJm5ic3A7IjIwNSIgJm5ic3A7
ICZuYnNwOyIyMjE4MjMiICIyMjcyIiAmbmJzcDsgIjIyOTc4IiAmbmJzcDsiMjM2NDkiJm5ic3A7
PC9wPjxwPiMjICZuYnNwO1szNl0gIjI0NjcyMSIgIjI1ODg1IiAmbmJzcDsiMjYxOCIgJm5ic3A7
ICIyNjI4OSIgJm5ic3A7IjI3MCIgJm5ic3A7ICZuYnNwOyIyNzEiICZuYnNwOyAmbmJzcDsiMjcx
MTUiJm5ic3A7PC9wPjxwPiMjICZuYnNwO1s0M10gIjI3MiIgJm5ic3A7ICZuYnNwOyIyNzY2IiAm
bmJzcDsgIjI5NzciICZuYnNwOyAiMjk4MiIgJm5ic3A7ICIyOTgzIiAmbmJzcDsgIjI5ODQiICZu
YnNwOyAiMjk4NiIgJm5ic3A7PC9wPjxwPiMjICZuYnNwO1s1MF0gIjI5ODciICZuYnNwOyAiMjk5
MjIiICZuYnNwOyIzMDAwIiAmbmJzcDsgIjMwODMzIiAmbmJzcDsiMzA4MzQiICZuYnNwOyIzMTgi
ICZuYnNwOyAmbmJzcDsiMzI1MSIgJm5ic3A7PC9wPjxwPiMjICZuYnNwO1s1N10gIjM1MyIgJm5i
c3A7ICZuYnNwOyIzNjE0IiAmbmJzcDsgIjM2MTUiICZuYnNwOyAiMzcwNCIgJm5ic3A7ICIzNzc4
NDEiICI0NzEiICZuYnNwOyAmbmJzcDsiNDgzMCIgJm5ic3A7PC9wPjxwPiMjICZuYnNwO1s2NF0g
IjQ4MzEiICZuYnNwOyAiNDgzMiIgJm5ic3A7ICI0ODMzIiAmbmJzcDsgIjQ4NjAiICZuYnNwOyAi
NDg4MSIgJm5ic3A7ICI0ODgyIiAmbmJzcDsgIjQ5MDciICZuYnNwOzwvcD48cD4jIyAmbmJzcDtb
NzFdICI1MDQ4NCIgJm5ic3A7IjUwOTQwIiAmbmJzcDsiNTEwODIiICZuYnNwOyI1MTI1MSIgJm5i
c3A7IjUxMjkyIiAmbmJzcDsiNTEzNiIgJm5ic3A7ICI1MTM3IiAmbmJzcDs8L3A+PHA+IyMgJm5i
c3A7Wzc4XSAiNTEzOCIgJm5ic3A7ICI1MTM5IiAmbmJzcDsgIjUxNDAiICZuYnNwOyAiNTE0MSIg
Jm5ic3A7ICI1MTQyIiAmbmJzcDsgIjUxNDMiICZuYnNwOyAiNTE0NCIgJm5ic3A7PC9wPjxwPiMj
ICZuYnNwO1s4NV0gIjUxNDUiICZuYnNwOyAiNTE0NiIgJm5ic3A7ICI1MTQ3IiAmbmJzcDsgIjUx
NDgiICZuYnNwOyAiNTE0OSIgJm5ic3A7ICI1MTUwIiAmbmJzcDsgIjUxNTEiICZuYnNwOzwvcD48
cD4jIyAmbmJzcDtbOTJdICI1MTUyIiAmbmJzcDsgIjUxNTMiICZuYnNwOyAiNTE1OCIgJm5ic3A7
ICI1MTY3IiAmbmJzcDsgIjUxNjkiICZuYnNwOyAiNTE3MjgiICZuYnNwOyI1MTk4IiAmbmJzcDs8
L3A+PHA+IyMgJm5ic3A7Wzk5XSAiNTIzNiIgJm5ic3A7ICI1MzEzIiAmbmJzcDsgIjUzMTUiICZu
YnNwOyAiNTMzNDMiICZuYnNwOyI1NDEwNyIgJm5ic3A7IjU0MjIiICZuYnNwOyAiNTQyNCIgJm5i
c3A7PC9wPjxwPiMjIFsxMDZdICI1NDI1IiAmbmJzcDsgIjU0MjYiICZuYnNwOyAiNTQyNyIgJm5i
c3A7ICI1NDMwIiAmbmJzcDsgIjU0MzEiICZuYnNwOyAiNTQzMiIgJm5ic3A7ICI1NDMzIiAmbmJz
cDs8L3A+PHA+IyMgWzExM10gIjU0MzQiICZuYnNwOyAiNTQzNSIgJm5ic3A7ICI1NDM2IiAmbmJz
cDsgIjU0MzciICZuYnNwOyAiNTQzOCIgJm5ic3A7ICI1NDM5IiAmbmJzcDsgIjU0NDAiICZuYnNw
OzwvcD48cD4jIyBbMTIwXSAiNTQ0MSIgJm5ic3A7ICI1NDcxIiAmbmJzcDsgIjU0ODY0NCIgIjU1
Mjc2IiAmbmJzcDsiNTU1NyIgJm5ic3A7ICI1NTU4IiAmbmJzcDsgIjU1NzAzIiZuYnNwOzwvcD48
cD4jIyBbMTI3XSAiNTU4MTEiICZuYnNwOyI1NTgyMSIgJm5ic3A7IjU2MzEiICZuYnNwOyAiNTYz
NCIgJm5ic3A7ICI1NjY1NSIgJm5ic3A7IjU2OTUzIiAmbmJzcDsiNTY5ODUiJm5ic3A7PC9wPjxw
PiMjIFsxMzRdICI1NzgwNCIgJm5ic3A7IjU4NDk3IiAmbmJzcDsiNjI0MCIgJm5ic3A7ICI2MjQx
IiAmbmJzcDsgIjY0NDI1IiAmbmJzcDsiNjQ2NjI1IiAiNjU0MzY0IjwvcD48cD4jIyBbMTQxXSAi
NjYxIiAmbmJzcDsgJm5ic3A7Ijc0OTgiICZuYnNwOyAiODM4MiIgJm5ic3A7ICI4NDE3MiIgJm5i
c3A7Ijg0MjY1IiAmbmJzcDsiODQyODQiICZuYnNwOyI4NDYxOCImbmJzcDs8L3A+PHA+IyMgWzE0
OF0gIjg2MjIiICZuYnNwOyAiODY1NCIgJm5ic3A7ICI4NzE3OCIgJm5ic3A7Ijg4MzMiICZuYnNw
OyAiOTA2MCIgJm5ic3A7ICI5MDYxIiAmbmJzcDsgIjkzMDM0IiZuYnNwOzwvcD48cD4jIyBbMTU1
XSAiOTUzIiAmbmJzcDsgJm5ic3A7Ijk1MzMiICZuYnNwOyAiOTU0IiAmbmJzcDsgJm5ic3A7Ijk1
NSIgJm5ic3A7ICZuYnNwOyI5NTYiICZuYnNwOyAmbmJzcDsiOTU3IiAmbmJzcDsgJm5ic3A7Ijk1
ODMiICZuYnNwOzwvcD48cD4jIyBbMTYyXSAiOTYxNSI8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+
PHA+VGhlIGBnYWdlKClgIGZ1bmN0aW9uIHJlcXVpcmVzIGEgbmFtZWQgdmVjdG9yIG9mIGZvbGQg
Y2hhbmdlcywgd2hlcmUgdGhlIG5hbWVzIG9mIHRoZSB2YWx1ZXMgYXJlIHRoZSBFbnRyZXogZ2Vu
ZSBJRHMuJm5ic3A7PC9wPjxwPjxicj48L3A+PHA+PGJyPjwvcD48cD5gYGByPC9wPjxwPmZvbGRj
aGFuZ2VzID0gcmVzJGxvZzJGb2xkQ2hhbmdlPC9wPjxwPm5hbWVzKGZvbGRjaGFuZ2VzKSA9IHJl
cyRlbnRyZXo8L3A+PHA+aGVhZChmb2xkY2hhbmdlcyk8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+
PHA+YGBgPC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7NDI4OCAmbmJzcDsgJm5ic3A7ICZu
YnNwOzg0ODIgJm5ic3A7ICZuYnNwOyAmbmJzcDs1MzI3ICZuYnNwOyAmbmJzcDsgJm5ic3A7NjY1
OSAmbmJzcDsgJm5ic3A7ICZuYnNwOzUzMjggJm5ic3A7ICZuYnNwOyAmbmJzcDsyMDM0Jm5ic3A7
PC9wPjxwPiMjIC0zLjE3MjUwMiAtMi40MTgyMzggJm5ic3A7Mi4wMTY4MDIgJm5ic3A7Mi4zNzk1
NDUgJm5ic3A7Mi4yMjQ3NzkgLTEuODg1MzM5PC9wPjxwPmBgYDwvcD48cD48YnI+PC9wPjxwPk5v
dywgbGV0J3MgcnVuIHRoZSBwYXRod2F5IGFuYWx5c2lzLiBTZWUgaGVscCBvbiB0aGUgZ2FnZSBm
dW5jdGlvbiB3aXRoIGA/Z2FnZWAuIFNwZWNpZmljYWxseSwgeW91IG1pZ2h0IHdhbnQgdG8gdHJ5
IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBgc2FtZS5kaXJgLiBUaGlzIHZhbHVlIGRldGVybWlucyB3
aGV0aGVyIHRvIHRlc3QgZm9yIGNoYW5nZXMgaW4gYSBnZW5lIHNldCB0b3dhcmQgYSBzaW5nbGUg
ZGlyZWN0aW9uIChhbGwgZ2VuZXMgdXAgb3IgZG93biByZWd1bGF0ZWQpIG9yIGNoYW5nZXMgdG93
YXJkcyBib3RoIGRpcmVjdGlvbnMgc2ltdWx0YW5lb3VzbHkgKGFueSBnZW5lcyBpbiB0aGUgcGF0
aHdheSBkeXNyZWd1bGF0ZWQpLiZuYnNwOzwvcD48cD48YnI+PC9wPjxwPiZndDsgRm9yIGV4cGVy
aW1lbnRhbGx5IGRlcml2ZWQgZ2VuZSBzZXRzLCBHTyB0ZXJtIGdyb3VwcywgZXRjLCBjb3JlZ3Vs
YXRpb24gaXMgY29tbW9ubHkgdGhlIGNhc2UsIGhlbmNlIGBzYW1lLmRpciA9IFRSVUVgIChkZWZh
dWx0KTsgSW4gS0VHRywgQmlvQ2FydGEgcGF0aHdheXMsIGdlbmVzIGZyZXF1ZW50bHkgYXJlIG5v
dCBjb3JlZ3VsYXRlZCwgaGVuY2UgaXQgY291bGQgYmUgaW5mb3JtYXRpdmUgdG8gbGV0IGBzYW1l
LmRpciA9IEZBTFNFYC4gQWx0aG91Z2ggYHNhbWUuZGlyID0gVFJVRWAgY291bGQgYWxzbyBiZSBp
bnRlcmVzdGluZyBmb3IgcGF0aHdheXMuPC9wPjxwPjxicj48L3A+PHA+SGVyZSwgd2UncmUgdXNp
bmcgYHNhbWUuZGlyID0gVFJVRWAsIHdoaWNoIHdpbGwgZ2l2ZSB1cyBzZXBhcmF0ZSBsaXN0cyBm
b3IgcGF0aHdheXMgdGhhdCBhcmUgdXByZWd1bGF0ZWQgdmVyc3VzIHBhdGh3YXlzIHRoYXQgYXJl
IGRvd25yZWd1bGF0ZWQuIExldCdzIGxvb2sgYXQgdGhlIGZpcnN0IGZldyByZXN1bHRzIGZyb20g
ZWFjaC48L3A+PHA+PGJyPjwvcD48cD48YnI+PC9wPjxwPmBgYHI8L3A+PHA+IyBHZXQgdGhlIHJl
c3VsdHM8L3A+PHA+a2VnZ3JlcyA9IGdhZ2UoZm9sZGNoYW5nZXMsIGdzZXRzPWtlZ2cuc2V0cy5o
cywgc2FtZS5kaXI9VFJVRSk8L3A+PHA+PGJyPjwvcD48cD4jIExvb2sgYXQgYm90aCB1cCAoZ3Jl
YXRlciksIGRvd24gKGxlc3MpLCBhbmQgc3RhdGF0aXN0aWNzLjwvcD48cD5sYXBwbHkoa2VnZ3Jl
cywgaGVhZCk8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPiMjICRncmVhdGVy
PC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7cC5nZW9tZWFuIHN0YXQu
bWVhbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtwLnZhbDwvcD48cD4jIyBoc2EwNDE0MiBM
eXNvc29tZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgMC4wMDAyNjMwNjU3ICZuYnNwOzMuNTE3ODkwIDAuMDAwMjYz
MDY1NzwvcD48cD4jIyBoc2EwNDY0MCBIZW1hdG9wb2lldGljIGNlbGwgbGluZWFnZSAmbmJzcDsg
MC4wMDE3OTE5MzkwICZuYnNwOzIuOTc2NDMyIDAuMDAxNzkxOTM5MDwvcD48cD4jIyBoc2EwNDYz
MCBKYWstU1RBVCBzaWduYWxpbmcgcGF0aHdheSAmbmJzcDsgMC4wMDQ4OTgwOTc3ICZuYnNwOzIu
NjA0MzkwIDAuMDA0ODk4MDk3NzwvcD48cD4jIyBoc2EwMDE0MCBTdGVyb2lkIGhvcm1vbmUgYmlv
c3ludGhlc2lzIDAuMDA1MTExNTQ5MyAmbmJzcDsyLjYzNjIwNiAwLjAwNTExMTU0OTM8L3A+PHA+
IyMgaHNhMDQwNjIgQ2hlbW9raW5lIHNpZ25hbGluZyBwYXRod2F5ICZuYnNwOzAuMDEyNTU4Mjk2
MSAmbmJzcDsyLjI1MDc2NSAwLjAxMjU1ODI5NjE8L3A+PHA+IyMgaHNhMDA1MTEgT3RoZXIgZ2x5
Y2FuIGRlZ3JhZGF0aW9uICZuYnNwOyAmbmJzcDsgMC4wMjIzODE5OTE5ICZuYnNwOzIuMTA0MzEx
IDAuMDIyMzgxOTkxOTwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDtxLnZhbCBzZXQuc2l6ZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZXhwMTwvcD48
cD4jIyBoc2EwNDE0MiBMeXNvc29tZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMC4wNDI2MTY2NCAmbmJzcDsgJm5i
c3A7ICZuYnNwOzExNiAwLjAwMDI2MzA2NTc8L3A+PHA+IyMgaHNhMDQ2NDAgSGVtYXRvcG9pZXRp
YyBjZWxsIGxpbmVhZ2UgJm5ic3A7IDAuMTQ1MTQ3MDYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNjEg
MC4wMDE3OTE5MzkwPC9wPjxwPiMjIGhzYTA0NjMwIEphay1TVEFUIHNpZ25hbGluZyBwYXRod2F5
ICZuYnNwOyAwLjIwNzAxNzc1ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTE5IDAuMDA0ODk4MDk3Nzwv
cD48cD4jIyBoc2EwMDE0MCBTdGVyb2lkIGhvcm1vbmUgYmlvc3ludGhlc2lzIDAuMjA3MDE3NzUg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgMzkgMC4wMDUxMTE1NDkzPC9wPjxwPiMjIGhzYTA0MDYyIENo
ZW1va2luZSBzaWduYWxpbmcgcGF0aHdheSAmbmJzcDswLjQwNjg4ODc5ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MTU2IDAuMDEyNTU4Mjk2MTwvcD48cD4jIyBoc2EwMDUxMSBPdGhlciBnbHljYW4gZGVn
cmFkYXRpb24gJm5ic3A7ICZuYnNwOyAwLjQ5OTU2NTA2ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE1
IDAuMDIyMzgxOTkxOTwvcD48cD4jIyZuYnNwOzwvcD48cD4jIyAkbGVzczwvcD48cD4jIyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDtwLmdlb21lYW4gc3RhdC5tZWFuICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwO3AudmFsPC9wPjxwPiMjIGhzYTA0MTEwIENlbGwgY3ljbGUgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDIuMTY1NzI1ZS0wNiAtNC43MjIzMDEgMi4x
NjU3MjVlLTA2PC9wPjxwPiMjIGhzYTAzMDMwIEROQSByZXBsaWNhdGlvbiAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7My44MDc0NDBlLTA2IC00LjgzNTMzNiAzLjgwNzQ0MGUtMDY8
L3A+PHA+IyMgaHNhMDQxMTQgT29jeXRlIG1laW9zaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAxLjEwOTg2OWUtMDQgLTMuNzY3NTYxIDEuMTA5ODY5ZS0wNDwvcD48cD4jIyBo
c2EwMzAxMyBSTkEgdHJhbnNwb3J0ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MS4xODE3ODdlLTAzIC0zLjA3MTk0NyAxLjE4MTc4N2UtMDM8L3A+PHA+IyMgaHNhMDM0
NDAgSG9tb2xvZ291cyByZWNvbWJpbmF0aW9uIDEuMTk3MTI0ZS0wMyAtMy4xOTA3NDcgMS4xOTcx
MjRlLTAzPC9wPjxwPiMjIGhzYTAwMjQwIFB5cmltaWRpbmUgbWV0YWJvbGlzbSAmbmJzcDsgJm5i
c3A7MS41NzAzMThlLTAzIC0yLjk5MjA1OSAxLjU3MDMxOGUtMDM8L3A+PHA+IyMgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtxLnZhbCBzZXQuc2l6ZSAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgZXhwMTwvcD48cD4jIyBoc2EwNDExMCBDZWxsIGN5Y2xlICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwLjAwMDMwODQwMjcgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxMjEgMi4xNjU3MjVlLTA2PC9wPjxwPiMjIGhzYTAzMDMwIEROQSByZXBsaWNh
dGlvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MC4wMDAzMDg0MDI3ICZuYnNw
OyAmbmJzcDsgJm5ic3A7IDM2IDMuODA3NDQwZS0wNjwvcD48cD4jIyBoc2EwNDExNCBPb2N5dGUg
bWVpb3NpcyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAuMDA1OTkzMjkxNiAm
bmJzcDsgJm5ic3A7ICZuYnNwOzEwMSAxLjEwOTg2OWUtMDQ8L3A+PHA+IyMgaHNhMDMwMTMgUk5B
IHRyYW5zcG9ydCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzAuMDM4
Nzg2ODE5MyAmbmJzcDsgJm5ic3A7ICZuYnNwOzE0NSAxLjE4MTc4N2UtMDM8L3A+PHA+IyMgaHNh
MDM0NDAgSG9tb2xvZ291cyByZWNvbWJpbmF0aW9uIDAuMDM4Nzg2ODE5MyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAyOCAxLjE5NzEyNGUtMDM8L3A+PHA+IyMgaHNhMDAyNDAgUHlyaW1pZGluZSBtZXRh
Ym9saXNtICZuYnNwOyAmbmJzcDswLjA0MjM5ODU3OTYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgOTYg
MS41NzAzMThlLTAzPC9wPjxwPiMjJm5ic3A7PC9wPjxwPiMjICRzdGF0czwvcD48cD4jIyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgc3RhdC5tZWFuICZuYnNwOyAmbmJzcDsgZXhwMTwvcD48cD4jIyBoc2Ew
NDE0MiBMeXNvc29tZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7My41MTc4OTAgMy41MTc4OTA8L3A+PHA+
IyMgaHNhMDQ2NDAgSGVtYXRvcG9pZXRpYyBjZWxsIGxpbmVhZ2UgJm5ic3A7ICZuYnNwOzIuOTc2
NDMyIDIuOTc2NDMyPC9wPjxwPiMjIGhzYTA0NjMwIEphay1TVEFUIHNpZ25hbGluZyBwYXRod2F5
ICZuYnNwOyAmbmJzcDsyLjYwNDM5MCAyLjYwNDM5MDwvcD48cD4jIyBoc2EwMDE0MCBTdGVyb2lk
IGhvcm1vbmUgYmlvc3ludGhlc2lzICZuYnNwOzIuNjM2MjA2IDIuNjM2MjA2PC9wPjxwPiMjIGhz
YTA0MDYyIENoZW1va2luZSBzaWduYWxpbmcgcGF0aHdheSAmbmJzcDsgMi4yNTA3NjUgMi4yNTA3
NjU8L3A+PHA+IyMgaHNhMDA1MTEgT3RoZXIgZ2x5Y2FuIGRlZ3JhZGF0aW9uICZuYnNwOyAmbmJz
cDsgJm5ic3A7Mi4xMDQzMTEgMi4xMDQzMTE8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+Tm93
LCBsZXQncyBwcm9jZXNzIHRoZSByZXN1bHRzIHRvIHB1bGwgb3V0IHRoZSB0b3AgNSB1cHJlZ3Vs
YXRlZCBwYXRod2F5cywgdGhlbiBmdXJ0aGVyIHByb2Nlc3MgdGhhdCBqdXN0IHRvIGdldCB0aGUg
SURzLiBXZSdsbCB1c2UgdGhlc2UgS0VHRyBwYXRod2F5IElEcyBkb3duc3RyZWFtIGZvciBwbG90
dGluZy48L3A+PHA+PGJyPjwvcD48cD48YnI+PC9wPjxwPmBgYHI8L3A+PHA+IyBHZXQgdGhlIHBh
dGh3YXlzPC9wPjxwPmtlZ2dyZXNwYXRod2F5cyA9IGRhdGEuZnJhbWUoaWQ9cm93bmFtZXMoa2Vn
Z3JlcyRncmVhdGVyKSwga2VnZ3JlcyRncmVhdGVyKSAlJmd0OyUmbmJzcDs8L3A+PHA+Jm5ic3A7
IHRibF9kZigpICUmZ3Q7JSZuYnNwOzwvcD48cD4mbmJzcDsgZmlsdGVyKHJvd19udW1iZXIoKSZs
dDs9NSkgJSZndDslJm5ic3A7PC9wPjxwPiZuYnNwOyAuJGlkICUmZ3Q7JSZuYnNwOzwvcD48cD4m
bmJzcDsgYXMuY2hhcmFjdGVyKCk8L3A+PHA+a2VnZ3Jlc3BhdGh3YXlzPC9wPjxwPmBgYDwvcD48
cD48YnI+PC9wPjxwPmBgYDwvcD48cD4jIyBbMV0gImhzYTA0MTQyIEx5c29zb21lIiAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDs8L3A+PHA+IyMgWzJdICJoc2EwNDY0MCBIZW1hdG9wb2lldGljIGNlbGwgbGluZWFnZSIg
Jm5ic3A7PC9wPjxwPiMjIFszXSAiaHNhMDQ2MzAgSmFrLVNUQVQgc2lnbmFsaW5nIHBhdGh3YXki
ICZuYnNwOzwvcD48cD4jIyBbNF0gImhzYTAwMTQwIFN0ZXJvaWQgaG9ybW9uZSBiaW9zeW50aGVz
aXMiPC9wPjxwPiMjIFs1XSAiaHNhMDQwNjIgQ2hlbW9raW5lIHNpZ25hbGluZyBwYXRod2F5Ijwv
cD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5gYGByPC9wPjxwPiMgR2V0IHRoZSBJRHMuPC9wPjxw
PmtlZ2dyZXNpZHMgPSBzdWJzdHIoa2VnZ3Jlc3BhdGh3YXlzLCBzdGFydD0xLCBzdG9wPTgpPC9w
PjxwPmtlZ2dyZXNpZHM8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPiMjIFsx
XSAiaHNhMDQxNDIiICJoc2EwNDY0MCIgImhzYTA0NjMwIiAiaHNhMDAxNDAiICJoc2EwNDA2MiI8
L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+RmluYWxseSwgdGhlIGBwYXRodmlldygpYCBmdW5j
dGlvbiBpbiB0aGUgcGF0aHZpZXcgcGFja2FnZSBtYWtlcyB0aGUgcGxvdHMuIExldCdzIHdyaXRl
IGEgZnVuY3Rpb24gc28gd2UgY2FuIGxvb3AgdGhyb3VnaCBhbmQgZHJhdyBwbG90cyBmb3IgdGhl
IHRvcCA1IHBhdGh3YXlzIHdlIGNyZWF0ZWQgYWJvdmUuPC9wPjxwPjxicj48L3A+PHA+PGJyPjwv
cD48cD5gYGByPC9wPjxwPiMgRGVmaW5lIHBsb3R0aW5nIGZ1bmN0aW9uIGZvciBhcHBseWluZyBs
YXRlcjwvcD48cD5wbG90X3BhdGh3YXkgPSBmdW5jdGlvbihwaWQpIHBhdGh2aWV3KGdlbmUuZGF0
YT1mb2xkY2hhbmdlcywgcGF0aHdheS5pZD1waWQsIHNwZWNpZXM9ImhzYSIsIG5ldy5zaWduYXR1
cmU9RkFMU0UpPC9wPjxwPjxicj48L3A+PHA+IyBwbG90IG11bHRpcGxlIHBhdGh3YXlzIChwbG90
cyBzYXZlZCB0byBkaXNrIGFuZCByZXR1cm5zIGEgdGhyb3dhd2F5IGxpc3Qgb2JqZWN0KTwvcD48
cD50bXAgPSBzYXBwbHkoa2VnZ3Jlc2lkcywgZnVuY3Rpb24ocGlkKSBwYXRodmlldyhnZW5lLmRh
dGE9Zm9sZGNoYW5nZXMsIHBhdGh3YXkuaWQ9cGlkLCBzcGVjaWVzPSJoc2EiKSk8L3A+PHA+YGBg
PC9wPjxwPjxicj48L3A+PHA+SGVyZSBhcmUgdGhlIHBsb3RzOjwvcD48cD48YnI+PC9wPjxwPiFb
XShoc2EwMDE0MC5wYXRodmlldy5wbmcpPC9wPjxwPjxicj48L3A+PHA+IVtdKGhzYTA0MDYyLnBh
dGh2aWV3LnBuZyk8L3A+PHA+PGJyPjwvcD48cD4hW10oaHNhMDQxNDIucGF0aHZpZXcucG5nKTwv
cD48cD48YnI+PC9wPjxwPiFbXShoc2EwNDYzMC5wYXRodmlldy5wbmcpPC9wPjxwPjxicj48L3A+
PHA+IVtdKGhzYTA0NjQwLnBhdGh2aWV3LnBuZyk8L3A+PHA+PGJyPjwvcD48cD4jIyMgR2VuZSBP
bnRvbG9neSAoR08pPC9wPjxwPjxicj48L3A+PHA+V2UgY2FuIGFsc28gZG8gYSBzaW1pbGFyIHBy
b2NlZHVyZSB3aXRoIGdlbmUgb250b2xvZ3kuIFNpbWlsYXIgdG8gYWJvdmUsIGBnby5zZXRzLmhz
YCBoYXMgYWxsIEdPIHRlcm1zLiBgZ28uc3Vicy5oc2AgaXMgYSBuYW1lZCBsaXN0IGNvbnRhaW5p
bmcgaW5kZXhlcyBmb3IgdGhlIEJQLCBDQywgYW5kIE1GIG9udG9sb2dpZXMuIExldCdzIG9ubHkg
ZG8gQmlvbG9naWNhbCBQcm9jZXNzLjwvcD48cD48YnI+PC9wPjxwPjxicj48L3A+PHA+YGBgcjwv
cD48cD5kYXRhKGdvLnNldHMuaHMpPC9wPjxwPmRhdGEoZ28uc3Vicy5ocyk8L3A+PHA+Z29icHNl
dHMgPSBnby5zZXRzLmhzW2dvLnN1YnMuaHMkQlBdPC9wPjxwPjxicj48L3A+PHA+Z29icHJlcyA9
IGdhZ2UoZm9sZGNoYW5nZXMsIGdzZXRzPWdvYnBzZXRzLCBzYW1lLmRpcj1UUlVFKTwvcD48cD48
YnI+PC9wPjxwPmxhcHBseShnb2JwcmVzLCBoZWFkKTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48
cD5gYGA8L3A+PHA+IyMgJGdyZWF0ZXI8L3A+PHA+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgcC5nZW9tZWFuPC9wPjxwPiMjIEdPOjAwMDcxNTYgaG9tb3BoaWxpYyBj
ZWxsIGFkaGVzaW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszLjkxNDU2OGUtMDU8L3A+PHA+IyMgR086
MDAwODI4NSBuZWdhdGl2ZSByZWd1bGF0aW9uIG9mIGNlbGwgcHJvbGlmZXJhdGlvbiAmbmJzcDsg
Jm5ic3A7IDIuOTA3MzMyZS0wNDwvcD48cD4jIyBHTzowMDE2MzM5IGNhbGNpdW0tZGVwZW5kZW50
IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NC4y
MTg3NTNlLTA0PC9wPjxwPiMjIEdPOjAwMTYzMzcgY2VsbC1jZWxsIGFkaGVzaW9uICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs2LjE3MDU1MWUtMDQ8L3A+PHA+IyMgR086
MDA0ODcyOSB0aXNzdWUgbW9ycGhvZ2VuZXNpcyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDs2LjU4MTQ2MGUtMDQ8L3A+PHA+IyMgR086MTkwMTYxNyBvcmdhbmljIGh5ZHJveHkgY29t
cG91bmQgYmlvc3ludGhldGljIHByb2Nlc3MgOC44NzYxNjFlLTA0PC9wPjxwPiMjICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtzdGF0Lm1lYW48L3A+PHA+IyMgR086MDAwNzE1NiBob21v
cGhpbGljIGNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA0LjAxNzIwNzwvcD48cD4j
IyBHTzowMDA4Mjg1IG5lZ2F0aXZlIHJlZ3VsYXRpb24gb2YgY2VsbCBwcm9saWZlcmF0aW9uICZu
YnNwOyAmbmJzcDsgJm5ic3A7My40NTMzNDU8L3A+PHA+IyMgR086MDAxNjMzOSBjYWxjaXVtLWRl
cGVuZGVudCBjZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAzLjU0Mzg5MTwvcD48cD4jIyBHTzowMDE2MzM3IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDMuMjQ0Mjk2PC9wPjxwPiMjIEdP
OjAwNDg3MjkgdGlzc3VlIG1vcnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7IDMuMjIzOTc5PC9wPjxwPiMjIEdPOjE5MDE2MTcgb3JnYW5pYyBoeWRyb3h5IGNvbXBv
dW5kIGJpb3N5bnRoZXRpYyBwcm9jZXNzICZuYnNwOzMuMTU3NDIxPC9wPjxwPiMjICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcC52YWw8L3A+PHA+
IyMgR086MDAwNzE1NiBob21vcGhpbGljIGNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzMuOTE0NTY4ZS0wNTwvcD48cD4jIyBHTzowMDA4Mjg1IG5lZ2F0aXZlIHJlZ3VsYXRpb24gb2Yg
Y2VsbCBwcm9saWZlcmF0aW9uICZuYnNwOyAmbmJzcDsgMi45MDczMzJlLTA0PC9wPjxwPiMjIEdP
OjAwMTYzMzkgY2FsY2l1bS1kZXBlbmRlbnQgY2VsbC1jZWxsIGFkaGVzaW9uICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs0LjIxODc1M2UtMDQ8L3A+PHA+IyMgR086MDAxNjMzNyBj
ZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzYuMTcwNTUxZS0wNDwvcD48cD4jIyBHTzowMDQ4NzI5IHRpc3N1ZSBtb3JwaG9nZW5lc2lzICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzYuNTgxNDYwZS0wNDwvcD48cD4jIyBHTzox
OTAxNjE3IG9yZ2FuaWMgaHlkcm94eSBjb21wb3VuZCBiaW9zeW50aGV0aWMgcHJvY2VzcyA4Ljg3
NjE2MWUtMDQ8L3A+PHA+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7cS52YWw8L3A+PHA+IyMgR086MDAwNzE1NiBob21vcGhpbGljIGNlbGwgYWRoZXNpb24g
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzAuMTYxMzk3NzwvcD48cD4jIyBHTzowMDA4Mjg1IG5lZ2F0aXZl
IHJlZ3VsYXRpb24gb2YgY2VsbCBwcm9saWZlcmF0aW9uICZuYnNwOyAmbmJzcDsgMC40NzIwMzQ5
PC9wPjxwPiMjIEdPOjAwMTYzMzkgY2FsY2l1bS1kZXBlbmRlbnQgY2VsbC1jZWxsIGFkaGVzaW9u
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDswLjQ3MjAzNDk8L3A+PHA+IyMgR086
MDAxNjMzNyBjZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzAuNDcyMDM0OTwvcD48cD4jIyBHTzowMDQ4NzI5IHRpc3N1ZSBtb3JwaG9nZW5l
c2lzICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzAuNDcyMDM0OTwvcD48cD4jIyBH
TzoxOTAxNjE3IG9yZ2FuaWMgaHlkcm94eSBjb21wb3VuZCBiaW9zeW50aGV0aWMgcHJvY2VzcyAw
LjQ3MjAzNDk8L3A+PHA+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3NldC5zaXpl
PC9wPjxwPiMjIEdPOjAwMDcxNTYgaG9tb3BoaWxpYyBjZWxsIGFkaGVzaW9uICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxMjQ8L3A+PHA+IyMgR086MDAwODI4NSBuZWdhdGl2ZSBy
ZWd1bGF0aW9uIG9mIGNlbGwgcHJvbGlmZXJhdGlvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7NDU4PC9wPjxwPiMjIEdPOjAwMTYzMzkgY2FsY2l1bS1kZXBlbmRlbnQgY2VsbC1j
ZWxsIGFkaGVzaW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsyNzwvcD48cD4jIyBHTzowMDE2MzM3IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMzU1PC9w
PjxwPiMjIEdPOjAwNDg3MjkgdGlzc3VlIG1vcnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNDI5PC9wPjxwPiMjIEdPOjE5MDE2MTcgb3Jn
YW5pYyBoeWRyb3h5IGNvbXBvdW5kIGJpb3N5bnRoZXRpYyBwcm9jZXNzICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MTQxPC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZXhwMTwvcD48cD4jIyBHTzowMDA3MTU2IGhvbW9waGlsaWMg
Y2VsbCBhZGhlc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7My45MTQ1NjhlLTA1PC9wPjxwPiMjIEdP
OjAwMDgyODUgbmVnYXRpdmUgcmVndWxhdGlvbiBvZiBjZWxsIHByb2xpZmVyYXRpb24gJm5ic3A7
ICZuYnNwOyAyLjkwNzMzMmUtMDQ8L3A+PHA+IyMgR086MDAxNjMzOSBjYWxjaXVtLWRlcGVuZGVu
dCBjZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQu
MjE4NzUzZS0wNDwvcD48cD4jIyBHTzowMDE2MzM3IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Ni4xNzA1NTFlLTA0PC9wPjxwPiMjIEdP
OjAwNDg3MjkgdGlzc3VlIG1vcnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7Ni41ODE0NjBlLTA0PC9wPjxwPiMjIEdPOjE5MDE2MTcgb3JnYW5pYyBoeWRyb3h5IGNv
bXBvdW5kIGJpb3N5bnRoZXRpYyBwcm9jZXNzIDguODc2MTYxZS0wNDwvcD48cD4jIyZuYnNwOzwv
cD48cD4jIyAkbGVzczwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgcC5nZW9tZWFuIHN0YXQubWVhbjwvcD48cD4jIyBHTzowMDQ4Mjg1IG9yZ2FuZWxsZSBm
aXNzaW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDQuNDExNTQw
ZS0xOCAtOC44NTAwMDQ8L3A+PHA+IyMgR086MDAwMDI4MCBudWNsZWFyIGRpdmlzaW9uICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcuNDU5Njg0ZS0xOCAt
OC44MDU1NjQ8L3A+PHA+IyMgR086MDAwNzA2NyBtaXRvc2lzICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Ny40NTk2ODRlLTE4IC04LjgwNTU2NDwvcD48cD4jIyBHTzowMDAwMDg3IE0gcGhhc2Ugb2YgbWl0
b3RpYyBjZWxsIGN5Y2xlIDIuMjg2NDQ0ZS0xNyAtOC42NTU2NDQ8L3A+PHA+IyMgR086MDAwNzA1
OSBjaHJvbW9zb21lIHNlZ3JlZ2F0aW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuODcy
OTAxZS0xMyAtNy42ODY4ODM8L3A+PHA+IyMgR086MDA1MTMwMSBjZWxsIGRpdmlzaW9uICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNS44NDEz
NzVlLTEyIC02Ljg4Nzc2MzwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBwLnZhbCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtx
LnZhbDwvcD48cD4jIyBHTzowMDQ4Mjg1IG9yZ2FuZWxsZSBmaXNzaW9uICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDQuNDExNTQwZS0xOCAxLjAyNTIwOWUtMTQ8L3A+
PHA+IyMgR086MDAwMDI4MCBudWNsZWFyIGRpdmlzaW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcuNDU5Njg0ZS0xOCAxLjAyNTIwOWUtMTQ8L3A+PHA+
IyMgR086MDAwNzA2NyBtaXRvc2lzICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNy40NTk2ODRlLTE4IDEu
MDI1MjA5ZS0xNDwvcD48cD4jIyBHTzowMDAwMDg3IE0gcGhhc2Ugb2YgbWl0b3RpYyBjZWxsIGN5
Y2xlIDIuMjg2NDQ0ZS0xNyAyLjM1Njc1MmUtMTQ8L3A+PHA+IyMgR086MDAwNzA1OSBjaHJvbW9z
b21lIHNlZ3JlZ2F0aW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuODcyOTAxZS0xMyAx
LjU0NDM5NGUtMTA8L3A+PHA+IyMgR086MDA1MTMwMSBjZWxsIGRpdmlzaW9uICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNS44NDEzNzVlLTEy
IDQuMDEzOTk4ZS0wOTwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3Nl
dC5zaXplICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBleHAxPC9wPjxwPiMjIEdPOjAwNDgy
ODUgb3JnYW5lbGxlIGZpc3Npb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszNzYgNC40MTE1NDBlLTE4PC9wPjxwPiMjIEdPOjAw
MDAyODAgbnVjbGVhciBkaXZpc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAzNTIgNy40NTk2ODRlLTE4PC9wPjxwPiMjIEdP
OjAwMDcwNjcgbWl0b3NpcyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MzUyIDcuNDU5Njg0ZS0xODwvcD48cD4jIyBHTzowMDAwMDg3IE0gcGhhc2Ugb2YgbWl0b3RpYyBj
ZWxsIGN5Y2xlICZuYnNwOyAmbmJzcDsgJm5ic3A7MzYyIDIuMjg2NDQ0ZS0xNzwvcD48cD4jIyBH
TzowMDA3MDU5IGNocm9tb3NvbWUgc2VncmVnYXRpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgMTQxIDEuODcyOTAxZS0xMzwvcD48cD4jIyBHTzowMDUxMzAxIGNl
bGwgZGl2aXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQ2MiA1Ljg0MTM3NWUtMTI8L3A+PHA+IyMm
bmJzcDs8L3A+PHA+IyMgJHN0YXRzPC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDtzdGF0Lm1lYW48L3A+PHA+IyMgR086MDAwNzE1NiBob21vcGhpbGljIGNlbGwgYWRoZXNp
b24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA0LjAxNzIwNzwvcD48cD4jIyBHTzowMDA4Mjg1IG5lZ2F0
aXZlIHJlZ3VsYXRpb24gb2YgY2VsbCBwcm9saWZlcmF0aW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7
My40NTMzNDU8L3A+PHA+IyMgR086MDAxNjMzOSBjYWxjaXVtLWRlcGVuZGVudCBjZWxsLWNlbGwg
YWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAzLjU0Mzg5MTwvcD48
cD4jIyBHTzowMDE2MzM3IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IDMuMjQ0Mjk2PC9wPjxwPiMjIEdPOjAwNDg3MjkgdGlzc3VlIG1v
cnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDMuMjIzOTc5PC9w
PjxwPiMjIEdPOjE5MDE2MTcgb3JnYW5pYyBoeWRyb3h5IGNvbXBvdW5kIGJpb3N5bnRoZXRpYyBw
cm9jZXNzICZuYnNwOzMuMTU3NDIxPC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO2V4cDE8L3A+PHA+IyMgR086MDAwNzE1NiBob21vcGhpbGljIGNl
bGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQuMDE3MjA3PC9wPjxwPiMjIEdPOjAwMDgy
ODUgbmVnYXRpdmUgcmVndWxhdGlvbiBvZiBjZWxsIHByb2xpZmVyYXRpb24gJm5ic3A7ICZuYnNw
OyAzLjQ1MzM0NTwvcD48cD4jIyBHTzowMDE2MzM5IGNhbGNpdW0tZGVwZW5kZW50IGNlbGwtY2Vs
bCBhZGhlc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7My41NDM4OTE8L3A+
PHA+IyMgR086MDAxNjMzNyBjZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzMuMjQ0Mjk2PC9wPjxwPiMjIEdPOjAwNDg3MjkgdGlzc3VlIG1v
cnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7My4yMjM5Nzk8L3A+
PHA+IyMgR086MTkwMTYxNyBvcmdhbmljIGh5ZHJveHkgY29tcG91bmQgYmlvc3ludGhldGljIHBy
b2Nlc3MgMy4xNTc0MjE8L3A+PHA+YGBgPC9wPjxkaXY+PGJyPjwvZGl2Pg==">
</div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PHA+IyBUdXRvcmlhbDogUk5BLXNlcSBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiAmYW1wOyBwYXRo
d2F5IGFuYWx5c2lzIHdpdGggU2FpbGZpc2gsIERFU2VxMiwgR0FHRSwgYW5kIFBhdGh2aWV3PC9w
PjxwPjxicj48L3A+PHA+IyMgQmFja2dyb3VuZDwvcD48cD48YnI+PC9wPjxwPlRoaXMgdHV0b3Jp
YWwgc2hvd3MgYW4gZXhhbXBsZSBvZiBSTkEtc2VxIGRhdGEgYW5hbHlzaXMgd2l0aCBERVNlcTIs
IGZvbGxvd2VkIGJ5IEtFR0cgcGF0aHdheSBhbmFseXNpcyB1c2luZyBbR0FHRV0oaHR0cDovL2Jp
b2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMvZ2FnZSkuIFVzaW5nIGRhdGEgZnJvbSBbR1NFMzc3MDRd
KGh0dHA6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW8vcXVlcnkvYWNjLmNnaT9hY2M9R1NFMzc3
MDQpLCB3aXRoIHByb2Nlc3NlZCBkYXRhIGF2YWlsYWJsZSBvbiBGaWdzaGFyZSBET0k6IFsxMC42
MDg0L205LmZpZ3NoYXJlLjE2MDE5NzVdKGh0dHA6Ly9keC5kb2kub3JnLzEwLjYwODQvbTkuZmln
c2hhcmUuMTYwMTk3NSkuIFRoaXMgZGF0YXNldCBoYXMgc2l4IHNhbXBsZXMgZnJvbSBHU0UzNzcw
NCwgd2hlcmUgZXhwcmVzc2lvbiB3YXMgcXVhbnRpZmllZCBieSBlaXRoZXI6IChBKSBtYXBwaW5n
IHRvIHRvIEdSQ2gzOCB1c2luZyBTVEFSIHRoZW4gY291bnRpbmcgcmVhZHMgbWFwcGVkIHRvIGdl
bmVzIHdpdGggZmVhdHVyZUNvdW50cyB1bmRlciB0aGUgdW5pb24taW50ZXJzZWN0aW9uIG1vZGVs
LCBvciAoQikgYWxpZ25tZW50LWZyZWUgcXVhbnRpZmljYXRpb24gdXNpbmcgW1NhaWxmaXNoXSho
dHRwOi8vd3d3Lm5hdHVyZS5jb20vbmJ0L2pvdXJuYWwvdjMyL241L2Z1bGwvbmJ0LjI4NjIuaHRt
bCksIHN1bW1hcml6ZWQgYXQgdGhlIGdlbmUgbGV2ZWwgdXNpbmcgdGhlIEdSQ2gzOCBHVEYgZmls
ZS4gQm90aCBkYXRhc2V0cyBhcmUgcmVzdHJpY3RlZCB0byBwcm90ZWluLWNvZGluZyBnZW5lcyBv
bmx5LiBIZXJlIEknbGwgdXNlIHRoZSBTYWlsZmlzaCBnZW5lLWxldmVsIGVzdGltYXRlZCBjb3Vu
dHMuPC9wPjxwPjxicj48L3A+PHA+IyMgRGlmZmVyZW50aWFsIGV4cHJlc3Npb24gYW5hbHlzaXM8
L3A+PHA+PGJyPjwvcD48cD5GaXJzdCwgaW1wb3J0IHRoZSBjb3VudGRhdGEgYW5kIG1ldGFkYXRh
IGRpcmVjdGx5IGZyb20gdGhlIHdlYi4gU2V0IHVwIHRoZSBERVNlcURhdGFTZXQsIHJ1biB0aGUg
REVTZXEyIHBpcGVsaW5lLjwvcD48cD48YnI+PC9wPjxwPjxicj48L3A+PHA+YGBgcjwvcD48cD4j
IE5vdGUgaW1wb3J0aW5nIEJpb0MgcGtncyBhZnRlciBkcGx5ciByZXF1aXJlcyBleHBsaWNpdGx5
IHVzaW5nIGRwbHlyOjpzZWxlY3QoKTwvcD48cD5saWJyYXJ5KGRwbHlyKTwvcD48cD5saWJyYXJ5
KERFU2VxMik8L3A+PHA+PGJyPjwvcD48cD4jIFdoaWNoIGRhdGEgZG8geW91IHdhbnQgdG8gdXNl
PyBMZXQncyB1c2UgdGhlIHNhaWxmaXNoIGNvdW50cy48L3A+PHA+IyBicm93c2VVUkwoImh0dHA6
Ly9keC5kb2kub3JnLzEwLjYwODQvbTkuZmlnc2hhcmUuMTYwMTk3NSIpPC9wPjxwPiMgY291bnRE
YXRhVVJMID0gImh0dHA6Ly9maWxlcy5maWdzaGFyZS5jb20vMjQzOTA2MS9HU0UzNzcwNF9mZWF0
dXJlY291bnRzLmNzdiI8L3A+PHA+Y291bnREYXRhVVJMID0gImh0dHA6Ly9maWxlcy5maWdzaGFy
ZS5jb20vMjYwMDM3My9HU0UzNzcwNF9zYWlsZmlzaF9nZW5lY291bnRzLmNzdiI8L3A+PHA+PGJy
PjwvcD48cD4jIEltcG9ydCBjb3VudGRhdGE8L3A+PHA+Y291bnREYXRhID0gcmVhZC5jc3YoY291
bnREYXRhVVJMLCByb3cubmFtZXM9MSkgJSZndDslJm5ic3A7PC9wPjxwPiZuYnNwOyBkcGx5cjo6
c2VsZWN0KC1sZW5ndGgpICUmZ3Q7JSZuYnNwOzwvcD48cD4mbmJzcDsgYXMubWF0cml4KCk8L3A+
PHA+PGJyPjwvcD48cD4jIEZpbHRlciBkYXRhIHdoZXJlIHlvdSBvbmx5IGhhdmUgMCBvciAxIHJl
YWQgY291bnQgYWNyb3NzIGFsbCBzYW1wbGVzLjwvcD48cD5jb3VudERhdGEgPSBjb3VudERhdGFb
cm93U3Vtcyhjb3VudERhdGEpJmd0OzEsIF08L3A+PHA+aGVhZChjb3VudERhdGEpPC9wPjxwPmBg
YDwvcD48cD48YnI+PC9wPjxwPmBgYDwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFNSUjQ5MzM2NiBTUlI0OTMzNjcgU1JSNDkz
MzY4IFNSUjQ5MzM2OSBTUlI0OTMzNzA8L3A+PHA+IyMgRU5TRzAwMDAwMTk4ODg4ICZuYnNwOyAm
bmJzcDsgMTc1MjggJm5ic3A7ICZuYnNwOyAyMzAwNyAmbmJzcDsgJm5ic3A7IDMwMjQxICZuYnNw
OyAmbmJzcDsgMjQ0MTggJm5ic3A7ICZuYnNwOyAyOTE1MjwvcD48cD4jIyBFTlNHMDAwMDAxOTg3
NjMgJm5ic3A7ICZuYnNwOyAyMTI2NCAmbmJzcDsgJm5ic3A7IDI2NzIwICZuYnNwOyAmbmJzcDsg
MzU1NTAgJm5ic3A7ICZuYnNwOyAyODg3OCAmbmJzcDsgJm5ic3A7IDMyNDE2PC9wPjxwPiMjIEVO
U0cwMDAwMDE5ODgwNCAmbmJzcDsgJm5ic3A7MTMwOTc1ICZuYnNwOyAmbmJzcDsxNTEyMDcgJm5i
c3A7ICZuYnNwOzE5NTUxNCAmbmJzcDsgJm5ic3A7MTc4MTMwICZuYnNwOyAmbmJzcDsxOTY3Mjc8
L3A+PHA+IyMgRU5TRzAwMDAwMTk4NzEyICZuYnNwOyAmbmJzcDsgNDk3NjkgJm5ic3A7ICZuYnNw
OyA2MTkwNiAmbmJzcDsgJm5ic3A7IDc4NjA4ICZuYnNwOyAmbmJzcDsgNjY0NzggJm5ic3A7ICZu
YnNwOyA2OTc1ODwvcD48cD4jIyBFTlNHMDAwMDAyMjgyNTMgJm5ic3A7ICZuYnNwOyAmbmJzcDs5
MzA0ICZuYnNwOyAmbmJzcDsgMTExNjAgJm5ic3A7ICZuYnNwOyAxMjgzMCAmbmJzcDsgJm5ic3A7
IDEyNjA4ICZuYnNwOyAmbmJzcDsgMTMwNDE8L3A+PHA+IyMgRU5TRzAwMDAwMTk4ODk5ICZuYnNw
OyAmbmJzcDsgNDU0MDEgJm5ic3A7ICZuYnNwOyA1MTI2MCAmbmJzcDsgJm5ic3A7IDY2ODUxICZu
YnNwOyAmbmJzcDsgNjM0MzMgJm5ic3A7ICZuYnNwOyA2NjEyMzwvcD48cD4jIyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFNSUjQ5MzM3MTwv
cD48cD4jIyBFTlNHMDAwMDAxOTg4ODggJm5ic3A7ICZuYnNwOyAzNDQxNjwvcD48cD4jIyBFTlNH
MDAwMDAxOTg3NjMgJm5ic3A7ICZuYnNwOyAzODQyMjwvcD48cD4jIyBFTlNHMDAwMDAxOTg4MDQg
Jm5ic3A7ICZuYnNwOzI0NDY3MDwvcD48cD4jIyBFTlNHMDAwMDAxOTg3MTIgJm5ic3A7ICZuYnNw
OyA4NjgwODwvcD48cD4jIyBFTlNHMDAwMDAyMjgyNTMgJm5ic3A7ICZuYnNwOyAxNjA2MzwvcD48
cD4jIyBFTlNHMDAwMDAxOTg4OTkgJm5ic3A7ICZuYnNwOyA3OTIxNTwvcD48cD5gYGA8L3A+PHA+
PGJyPjwvcD48cD5gYGByPC9wPjxwPiMgSW1wb3J0IG1ldGFkYXRhPC9wPjxwPmNvbERhdGEgPSBy
ZWFkLmNzdigiaHR0cDovL2ZpbGVzLmZpZ3NoYXJlLmNvbS8yNDM5MDYwL0dTRTM3NzA0X21ldGFk
YXRhLmNzdiIsIHJvdy5uYW1lcz0xKTwvcD48cD5jb2xEYXRhPC9wPjxwPmBgYDwvcD48cD48YnI+
PC9wPjxwPmBgYDwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgY29uZGl0aW9uPC9wPjxwPiMjIFNSUjQ5MzM2NiBjb250cm9sX3Npcm5hPC9w
PjxwPiMjIFNSUjQ5MzM2NyBjb250cm9sX3Npcm5hPC9wPjxwPiMjIFNSUjQ5MzM2OCBjb250cm9s
X3Npcm5hPC9wPjxwPiMjIFNSUjQ5MzM2OSAmbmJzcDsgJm5ic3A7ICZuYnNwO2hveGExX2tkPC9w
PjxwPiMjIFNSUjQ5MzM3MCAmbmJzcDsgJm5ic3A7ICZuYnNwO2hveGExX2tkPC9wPjxwPiMjIFNS
UjQ5MzM3MSAmbmJzcDsgJm5ic3A7ICZuYnNwO2hveGExX2tkPC9wPjxwPmBgYDwvcD48cD48YnI+
PC9wPjxwPmBgYHI8L3A+PHA+IyBTZXQgdXAgdGhlIERFU2VxRGF0YVNldCBPYmplY3QgYW5kIHJ1
biB0aGUgREVTZXEgcGlwZWxpbmU8L3A+PHA+ZGRzID0gREVTZXFEYXRhU2V0RnJvbU1hdHJpeChj
b3VudERhdGE9Y291bnREYXRhLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyBjb2xEYXRhPWNvbERhdGEsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRlc2lnbj1+Y29uZGl0aW9uKTwvcD48cD5k
ZHMgPSBERVNlcShkZHMpPC9wPjxwPmRkczwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5gYGA8
L3A+PHA+IyMgY2xhc3M6IERFU2VxRGF0YVNldCZuYnNwOzwvcD48cD4jIyBkaW06IDE2NzU1IDYm
bmJzcDs8L3A+PHA+IyMgbWV0YWRhdGEoMCk6PC9wPjxwPiMjIGFzc2F5cygzKTogY291bnRzIG11
IGNvb2tzPC9wPjxwPiMjIHJvd25hbWVzKDE2NzU1KTogRU5TRzAwMDAwMTk4ODg4IEVOU0cwMDAw
MDE5ODc2MyAuLi48L3A+PHA+IyMgJm5ic3A7IEVOU0cwMDAwMDI2Nzc5NSBFTlNHMDAwMDAxNjU3
OTU8L3A+PHA+IyMgcm93UmFuZ2VzIG1ldGFkYXRhIGNvbHVtbiBuYW1lcygyNyk6IGJhc2VNZWFu
IGJhc2VWYXIgLi4uIGRldmlhbmNlPC9wPjxwPiMjICZuYnNwOyBtYXhDb29rczwvcD48cD4jIyBj
b2xuYW1lcyg2KTogU1JSNDkzMzY2IFNSUjQ5MzM2NyAuLi4gU1JSNDkzMzcwIFNSUjQ5MzM3MTwv
cD48cD4jIyBjb2xEYXRhIG5hbWVzKDIpOiBjb25kaXRpb24gc2l6ZUZhY3RvcjwvcD48cD5gYGA8
L3A+PHA+PGJyPjwvcD48cD5OZXh0LCBnZXQgcmVzdWx0cyBmb3IgdGhlIEhveEExIGtub2NrZG93
biB2ZXJzdXMgY29udHJvbCBzaVJOQSwgYW5kIHJlb3JkZXIgdGhlbSBieSBwLXZhbHVlLiBDYWxs
IGBzdW1tYXJ5YCBvbiB0aGUgcmVzdWx0cyBvYmplY3QgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IG1h
bnkgZ2VuZXMgYXJlIHVwIG9yIGRvd24tcmVndWxhdGVkIGF0IEZEUiZsdDswLjEuPC9wPjxwPjxi
cj48L3A+PHA+PGJyPjwvcD48cD5gYGByPC9wPjxwPnJlcyA9IHJlc3VsdHMoZGRzLCBjb250cmFz
dD1jKCJjb25kaXRpb24iLCAiaG94YTFfa2QiLCAiY29udHJvbF9zaXJuYSIpKTwvcD48cD5yZXMg
PSByZXNbb3JkZXIocmVzJHB2YWx1ZSksXTwvcD48cD5zdW1tYXJ5KHJlcyk8L3A+PHA+YGBgPC9w
PjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPiMjJm5ic3A7PC9wPjxwPiMjIG91dCBvZiAxNjc1NSB3
aXRoIG5vbnplcm8gdG90YWwgcmVhZCBjb3VudDwvcD48cD4jIyBhZGp1c3RlZCBwLXZhbHVlICZs
dDsgMC4xPC9wPjxwPiMjIExGQyAmZ3Q7IDAgKHVwKSAmbmJzcDsgJm5ic3A7IDogNDE5MywgMjUl
Jm5ic3A7PC9wPjxwPiMjIExGQyAmbHQ7IDAgKGRvd24pICZuYnNwOyA6IDQyODYsIDI2JSZuYnNw
OzwvcD48cD4jIyBvdXRsaWVycyBbMV0gJm5ic3A7ICZuYnNwOyA6IDIyLCAwLjEzJSZuYnNwOzwv
cD48cD4jIyBsb3cgY291bnRzIFsyXSAmbmJzcDsgOiAxMjk5LCA3LjglJm5ic3A7PC9wPjxwPiMj
IChtZWFuIGNvdW50ICZsdDsgMSk8L3A+PHA+IyMgWzFdIHNlZSAnY29va3NDdXRvZmYnIGFyZ3Vt
ZW50IG9mID9yZXN1bHRzPC9wPjxwPiMjIFsyXSBzZWUgJ2luZGVwZW5kZW50RmlsdGVyaW5nJyBh
cmd1bWVudCBvZiA/cmVzdWx0czwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5TaW5jZSB3ZSBt
YXBwZWQgYW5kIGNvdW50ZWQgYWdhaW5zdCB0aGUgRW5zZW1ibCBhbm5vdGF0aW9uLCBvdXIgcmVz
dWx0cyBvbmx5IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgRW5zZW1ibCBnZW5lIElEcy4gQnV0LCBv
dXIgcGF0aHdheSBhbmFseXNpcyBkb3duc3RyZWFtIHdpbGwgdXNlIEtFR0cgcGF0aHdheXMsIGFu
ZCBnZW5lcyBpbiBLRUdHIHBhdGh3YXlzIGFyZSBhbm5vdGF0ZWQgd2l0aCBFbnRyZXogZ2VuZSBJ
RHMuIEkgd3JvdGUgYW4gUiBwYWNrYWdlIGZvciBkb2luZyB0aGlzIG9mZmxpbmUgdGhlIGRwbHly
IHdheSAoJmx0O2h0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVudHVybmVyL2Fubm90YWJsZXMmZ3Q7
KSwgYnV0IHRoZSBjYW5vbmljYWwgQmlvY29uZHVjdG9yIHdheSB0byBkbyBpdCBpcyB3aXRoIHRo
ZSBBbm5vdGF0aW9uRGJpIGFuZCBvcmdhbmlzbSBhbm5vdGF0aW9uIHBhY2thZ2VzLiBIZXJlIHdl
J3JlIHVzaW5nIHRoZSBvcmdhbmlzbSBwYWNrYWdlICgib3JnIikgZm9yIEhvbW8gc2FwaWVucyAo
IkhzIiksIG9yZ2FuaXplZCBhcyBhbiBBbm5vdGF0aW9uRGJpIGRhdGFiYXNlIHBhY2thZ2UgKCJk
YiIpIHVzaW5nIEVudHJleiBHZW5lIElEcyAoImVnIikgYXMgcHJpbWFyeSBrZXlzLiBUbyBzZWUg
d2hhdCBhbGwgdGhlIGtleXMgYXJlLCB1c2UgdGhlIGBjb2x1bW5zYCBmdW5jdGlvbi48L3A+PHA+
PGJyPjwvcD48cD48YnI+PC9wPjxwPmBgYHI8L3A+PHA+bGlicmFyeSgiQW5ub3RhdGlvbkRiaSIp
PC9wPjxwPmxpYnJhcnkoIm9yZy5Icy5lZy5kYiIpPC9wPjxwPmNvbHVtbnMob3JnLkhzLmVnLmRi
KTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5gYGA8L3A+PHA+IyMgJm5ic3A7WzFdICJBQ0NO
VU0iICZuYnNwOyAmbmJzcDsgJm5ic3A7ICJBTElBUyIgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IkVOU0VNQkwiICZuYnNwOyAmbmJzcDsgJm5ic3A7IkVOU0VNQkxQUk9UIiZuYnNwOzwvcD48
cD4jIyAmbmJzcDtbNV0gIkVOU0VNQkxUUkFOUyIgIkVOVFJFWklEIiAmbmJzcDsgJm5ic3A7ICJF
TlpZTUUiICZuYnNwOyAmbmJzcDsgJm5ic3A7ICJFVklERU5DRSIgJm5ic3A7ICZuYnNwOzwvcD48
cD4jIyAmbmJzcDtbOV0gIkVWSURFTkNFQUxMIiAmbmJzcDsiR0VORU5BTUUiICZuYnNwOyAmbmJz
cDsgIkdPIiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICJHT0FMTCIgJm5ic3A7
ICZuYnNwOyAmbmJzcDsmbmJzcDs8L3A+PHA+IyMgWzEzXSAiSVBJIiAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7Ik1BUCIgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyJPTUlNIiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIk9OVE9MT0dZIiAmbmJzcDsgJm5i
c3A7PC9wPjxwPiMjIFsxN10gIk9OVE9MT0dZQUxMIiAmbmJzcDsiUEFUSCIgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICJQRkFNIiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIlBNSUQi
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzwvcD48cD4jIyBbMjFdICJQUk9TSVRFIiAmbmJz
cDsgJm5ic3A7ICZuYnNwOyJSRUZTRVEiICZuYnNwOyAmbmJzcDsgJm5ic3A7ICJTWU1CT0wiICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICJVQ1NDS0ciICZuYnNwOyAmbmJzcDsgJm5ic3A7PC9wPjxwPiMj
IFsyNV0gIlVOSUdFTkUiICZuYnNwOyAmbmJzcDsgJm5ic3A7IlVOSVBST1QiPC9wPjxwPmBgYDwv
cD48cD48YnI+PC9wPjxwPkxldCdzIHVzZSB0aGUgYG1hcElkc2AgZnVuY3Rpb24gdG8gYWRkIG1v
cmUgY29sdW1ucyB0byB0aGUgcmVzdWx0cy4gVGhlIGByb3cubmFtZXNgIG9mIG91ciByZXN1bHRz
IHRhYmxlIGhhcyB0aGUgRW5zZW1ibCBnZW5lIElEIChvdXIga2V5KSwgc28gd2UgbmVlZCB0byBz
cGVjaWZ5ICZuYnNwO2BrZXl0eXBlPUVOU0VNQkxgLiBUaGUgYGNvbHVtbmAgYXJndW1lbnQgdGVs
bHMgdGhlIGBtYXBJZHNgIGZ1bmN0aW9uIHdoaWNoIGluZm9ybWF0aW9uIHdlIHdhbnQsIGFuZCB0
aGUgYG11bHRpVmFsc2AgYXJndW1lbnQgdGVsbHMgdGhlIGZ1bmN0aW9uIHdoYXQgdG8gZG8gaWYg
dGhlcmUgYXJlIG11bHRpcGxlIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBzaW5nbGUgaW5wdXQgdmFs
dWUuIEhlcmUgd2UgYXNrIHRvIGp1c3QgZ2l2ZSB1cyBiYWNrIHRoZSBmaXJzdCBvbmUgdGhhdCBv
Y2N1cnMgaW4gdGhlIGRhdGFiYXNlLiBMZXQncyBnZXQgdGhlIEVudHJleiBJRHMsIGdlbmUgc3lt
Ym9scywgYW5kIGZ1bGwgZ2VuZSBuYW1lcy5bXmxvdmVjb2RlXTwvcD48cD48YnI+PC9wPjxwPlte
bG92ZWNvZGVdOiBDb2RlIGZyb206IExvdmUsIE1pY2hhZWwgSS4sIGV0IGFsLiAiUk5BLVNlcSB3
b3JrZmxvdzogZ2VuZS1sZXZlbCBleHBsb3JhdG9yeSBhbmFseXNpcyBhbmQgZGlmZmVyZW50aWFs
IGV4cHJlc3Npb24uIiBfRjEwMDBSZXNlYXJjaF8gNCAoMjAxNSkuPC9wPjxwPjxicj48L3A+PHA+
PGJyPjwvcD48cD5gYGByPC9wPjxwPnJlcyRzeW1ib2wgPSBtYXBJZHMob3JnLkhzLmVnLmRiLDwv
cD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7a2V5cz1yb3cubmFtZXMocmVzKSwmbmJzcDs8L3A+PHA+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO2NvbHVtbj0iU1lNQk9MIiw8L3A+PHA+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwO2tleXR5cGU9IkVOU0VNQkwiLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bXVsdGlWYWxz
PSJmaXJzdCIpPC9wPjxwPnJlcyRlbnRyZXogPSBtYXBJZHMob3JnLkhzLmVnLmRiLDwvcD48cD4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7a2V5cz1yb3cubmFtZXMocmVzKSwmbmJzcDs8L3A+PHA+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwO2NvbHVtbj0iRU5UUkVaSUQiLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
a2V5dHlwZT0iRU5TRU1CTCIsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDttdWx0aVZhbHM9ImZp
cnN0Iik8L3A+PHA+cmVzJG5hbWUgPSAmbmJzcDsgbWFwSWRzKG9yZy5Icy5lZy5kYiw8L3A+PHA+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO2tleXM9cm93Lm5hbWVzKHJlcyksJm5ic3A7PC9wPjxwPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDtjb2x1bW49IkdFTkVOQU1FIiw8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
O2tleXR5cGU9IkVOU0VNQkwiLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bXVsdGlWYWxzPSJm
aXJzdCIpPC9wPjxwPjxicj48L3A+PHA+aGVhZChyZXMsIDEwKTwvcD48cD5gYGA8L3A+PHA+PGJy
PjwvcD48cD5gYGA8L3A+PHA+IyMgbG9nMiBmb2xkIGNoYW5nZSAoTUFQKTogY29uZGl0aW9uIGhv
eGExX2tkIHZzIGNvbnRyb2xfc2lybmEmbmJzcDs8L3A+PHA+IyMgV2FsZCB0ZXN0IHAtdmFsdWU6
IGNvbmRpdGlvbiBob3hhMV9rZCB2cyBjb250cm9sX3Npcm5hJm5ic3A7PC9wPjxwPiMjIERhdGFG
cmFtZSB3aXRoIDEwIHJvd3MgYW5kIDkgY29sdW1uczwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2Jhc2VNZWFuIGxv
ZzJGb2xkQ2hhbmdlICZuYnNwOyAmbmJzcDsgJm5ic3A7bGZjU0UgJm5ic3A7ICZuYnNwOyAmbmJz
cDtzdGF0ICZuYnNwOyAmbmJzcDtwdmFsdWU8L3A+PHA+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbHQ7bnVtZXJpYyZndDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsmbHQ7bnVtZXJpYyZndDsgJm5ic3A7Jmx0O251bWVyaWMmZ3Q7ICZsdDtu
dW1lcmljJmd0OyAmbHQ7bnVtZXJpYyZndDs8L3A+PHA+IyMgRU5TRzAwMDAwMTQ4NzczICZuYnNw
OzE4ODUuMzQ0ICZuYnNwOyAmbmJzcDsgJm5ic3A7LTMuMTcyNTAyIDAuMDc4Njg1NzIgLTQwLjMx
ODY1ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwPC9wPjxwPiMjIEVOU0cwMDAwMDEzODYy
MyAmbmJzcDsyOTM5LjkzNiAmbmJzcDsgJm5ic3A7ICZuYnNwOy0yLjQxODIzOCAwLjA1ODg5MjI5
IC00MS4wNjIwNSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMDwvcD48cD4jIyBFTlNHMDAw
MDAxMDQzNjggMTM2MDEuOTYzICZuYnNwOyAmbmJzcDsgJm5ic3A7IDIuMDE2ODAyIDAuMDUyNDk2
NDMgJm5ic3A7MzguNDE3ODkgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDA8L3A+PHA+IyMg
RU5TRzAwMDAwMTI0NzY2ICZuYnNwOzI2OTIuMjAwICZuYnNwOyAmbmJzcDsgJm5ic3A7IDIuMzc5
NTQ1IDAuMDYxOTM2NTQgJm5ic3A7MzguNDE5MDggJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IDA8L3A+PHA+IyMgRU5TRzAwMDAwMTIyODYxIDM1ODg5LjQxMyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAyLjIyNDc3OSAwLjA1MjU4NjU4ICZuYnNwOzQyLjMwNjk3ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAwPC9wPjxwPiMjIEVOU0cwMDAwMDExNjAxNiAmbmJzcDs0NTU4LjE1NyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOy0xLjg4NTMzOSAwLjA0MjU4NzY2IC00NC4yNjk2MSAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgMDwvcD48cD4jIyBFTlNHMDAwMDAxNjQyNTEgJm5ic3A7MjQwNC4xMDMg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgMy4zMjUxOTYgMC4wNzAyMTIzNiAmbmJzcDs0Ny4zNTkxMiAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMDwvcD48cD4jIyBFTlNHMDAwMDAxMjUyNTcgJm5i
c3A7NjE4Ny4zODYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMS45NDM3NjIgMC4wNDI1OTE4OSAmbmJz
cDs0NS42MzY5MiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMDwvcD48cD4jIyBFTlNHMDAw
MDAxMDQzMjEgJm5ic3A7OTMzNC41NTUgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMy4xODY4NTYgMC4w
NjIyNzUzMCAmbmJzcDs1MS4xNzM2NyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMDwvcD48
cD4jIyBFTlNHMDAwMDAxODM1MDggJm5ic3A7MjExMC4zNDUgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
My4xOTA2MTIgMC4wNzQ4ODMwNSAmbmJzcDs0Mi42MDc5NCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgMDwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7cGFkaiAmbmJzcDsgJm5ic3A7ICZu
YnNwO3N5bWJvbCAmbmJzcDsgJm5ic3A7ICZuYnNwO2VudHJlejwvcD48cD4jIyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZsdDtudW1lcmlj
Jmd0OyAmbHQ7Y2hhcmFjdGVyJmd0OyAmbHQ7Y2hhcmFjdGVyJmd0OzwvcD48cD4jIyBFTlNHMDAw
MDAxNDg3NzMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgTUtJNjcgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NDI4ODwvcD48cD4jIyBFTlNHMDAw
MDAxMzg2MjMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5ic3A7ICZuYnNwOyAmbmJz
cDtTRU1BN0EgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ODQ4MjwvcD48cD4jIyBFTlNHMDAw
MDAxMDQzNjggJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7UExBVCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs1MzI3PC9wPjxwPiMjIEVO
U0cwMDAwMDEyNDc2NiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMCAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDtTT1g0ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzY2NTk8L3A+PHA+
IyMgRU5TRzAwMDAwMTIyODYxICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO1BMQVUgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NTMyODwv
cD48cD4jIyBFTlNHMDAwMDAxMTYwMTYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgRVBBUzEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MjAzNDwv
cD48cD4jIyBFTlNHMDAwMDAxNjQyNTEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgRjJSTDEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MjE1MDwv
cD48cD4jIyBFTlNHMDAwMDAxMjUyNTcgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgQUJDQzQgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTAyNTc8L3A+PHA+
IyMgRU5TRzAwMDAwMTA0MzIxICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwICZuYnNwOyAm
bmJzcDsgJm5ic3A7IFRSUEExICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzg5ODk8L3A+PHA+
IyMgRU5TRzAwMDAwMTgzNTA4ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwICZuYnNwOyAm
bmJzcDsgJm5ic3A7RkFNNDZDICZuYnNwOyAmbmJzcDsgJm5ic3A7IDU0ODU1PC9wPjxwPiMjICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IG5hbWU8L3A+PHA+IyMg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbHQ7Y2hhcmFjdGVyJmd0OzwvcD48cD4jIyBFTlNHMDAw
MDAxNDg3NzMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bWFya2VyIG9mIHByb2xpZmVyYXRpb24gS2ktNjc8
L3A+PHA+IyMgRU5TRzAwMDAwMTM4NjIzIHNlbWFwaG9yaW4gN0EsIEdQSSBtZW1icmFuZSBhbmNo
b3IgKEpvaG4gTWlsdG9uIEhhZ2VuIGJsb29kIGdyb3VwKTwvcD48cD4jIyBFTlNHMDAwMDAxMDQz
NjggJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7cGxhc21pbm9nZW4gYWN0aXZhdG9yLCB0aXNzdWU8L3A+PHA+
IyMgRU5TRzAwMDAwMTI0NzY2ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IFNSWSAoc2V4IGRldGVybWluaW5nIHJlZ2lvbiBZKS1ib3ggNDwvcD48cD4jIyBF
TlNHMDAwMDAxMjI4NjEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyBwbGFzbWlub2dlbiBhY3RpdmF0b3IsIHVyb2tpbmFzZTwvcD48
cD4jIyBFTlNHMDAwMDAxMTYwMTYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBlbmRvdGhlbGlhbCBQQVMgZG9tYWluIHByb3RlaW4g
MTwvcD48cD4jIyBFTlNHMDAwMDAxNjQyNTEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgY29hZ3VsYXRpb24gZmFjdG9yIElJICh0
aHJvbWJpbikgcmVjZXB0b3ItbGlrZSAxPC9wPjxwPiMjIEVOU0cwMDAwMDEyNTI1NyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0FUUC1iaW5kaW5nIGNhc3NldHRlLCBz
dWItZmFtaWx5IEMgKENGVFIvTVJQKSwgbWVtYmVyIDQ8L3A+PHA+IyMgRU5TRzAwMDAwMTA0MzIx
IHRyYW5zaWVudCByZWNlcHRvciBwb3RlbnRpYWwgY2F0aW9uIGNoYW5uZWwsIHN1YmZhbWlseSBB
LCBtZW1iZXIgMTwvcD48cD4jIyBFTlNHMDAwMDAxODM1MDggJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBm
YW1pbHkgd2l0aCBzZXF1ZW5jZSBzaW1pbGFyaXR5IDQ2LCBtZW1iZXIgQzwvcD48cD5gYGA8L3A+
PHA+PGJyPjwvcD48cD4jIyBQYXRod2F5IGFuYWx5c2lzPC9wPjxwPjxicj48L3A+PHA+V2UncmUg
Z29pbmcgdG8gdXNlIHRoZSBbZ2FnZV0oaHR0cDovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMv
cmVsZWFzZS9iaW9jL2h0bWwvZ2FnZS5odG1sKSBwYWNrYWdlIChHZW5lcmFsbHkgQXBwbGljYWJs
ZSBHZW5lLXNldCBFbnJpY2htZW50IGZvciBQYXRod2F5IEFuYWx5c2lzKSBmb3IgcGF0aHdheSBh
bmFseXNpcy4gU2VlIGFsc28gdGhlIFtnYWdlIHBhY2thZ2Ugd29ya2Zsb3cgdmlnbmV0dGUgZm9y
IFJOQS1zZXEgcGF0aHdheSBhbmFseXNpc10oaHR0cDovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2Fn
ZXMvcmVsZWFzZS9iaW9jL3ZpZ25ldHRlcy9nYWdlL2luc3QvZG9jL1JOQS1zZXFXb3JrZmxvdy5w
ZGYpLiBPbmNlIHdlIGhhdmUgYSBsaXN0IG9mIGVucmljaGVkIHBhdGh3YXlzLCB3ZSdyZSBnb2lu
ZyB0byB1c2UgdGhlIFtwYXRodmlld10oaHR0cDovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMv
cmVsZWFzZS9iaW9jL2h0bWwvcGF0aHZpZXcuaHRtbCkgcGFja2FnZSB0byBkcmF3IHBhdGh3YXkg
ZGlhZ3JhbXMsIHNoYWRpbmcgdGhlIG1vbGVjdWxlcyBpbiB0aGUgcGF0aHdheSBieSB0aGVpciBk
ZWdyZWUgb2YgdXAvZG93bi1yZWd1bGF0aW9uLjwvcD48cD48YnI+PC9wPjxwPiMjIyBLRUdHIHBh
dGh3YXlzPC9wPjxwPjxicj48L3A+PHA+VGhlIFtgZ2FnZURhdGFgXShodHRwOi8vYmlvY29uZHVj
dG9yLm9yZy9wYWNrYWdlcy9yZWxlYXNlL2RhdGEvZXhwZXJpbWVudC9odG1sL2dhZ2VEYXRhLmh0
bWwpIHBhY2thZ2UgaGFzIHByZS1jb21waWxlZCBkYXRhYmFzZXMgbWFwcGluZyBnZW5lcyB0byBL
RUdHIHBhdGh3YXlzIGFuZCBHTyB0ZXJtcyBmb3IgY29tbW9uIG9yZ2FuaXNtcy4gYGtlZ2cuc2V0
cy5oc2AgaXMgYSBuYW1lZCBsaXN0IG9mIDIyOSBlbGVtZW50cy4gRWFjaCBlbGVtZW50IGlzIGEg
Y2hhcmFjdGVyIHZlY3RvciBvZiBtZW1iZXIgZ2VuZSBFbnRyZXogSURzIGZvciBhIHNpbmdsZSBL
RUdHIHBhdGh3YXkuIChTZWUgYWxzbyBgZ28uc2V0cy5oc2ApLiBgc2lnbWV0LmlkeC5oc2AgaXMg
YW4gaW5kZXggb2YgbnVtYmVycyBvZiBzaW5hbGluZyBhbmQgbWV0YWJvbGljIHBhdGh3YXlzIGlu
IGBrZWdnLnNldC5nc2AuIEluIG90aGVyIHdvcmRzLCBLRUdHIHBhdGh3YXkgaW5jbHVkZSBvdGhl
ciB0eXBlcyBvZiBwYXRod2F5IGRlZmluaXRpb25zLCBsaWtlICJHbG9iYWwgTWFwIiBhbmQgIkh1
bWFuIERpc2Vhc2VzIiwgd2hpY2ggbWF5IGJlIHVuZGVzaXJhYmxlIGluIHBhdGh3YXkgYW5hbHlz
aXMuIFRoZXJlZm9yZSwgYGtlZ2cuc2V0cy5oc1tzaWdtZXQuaWR4LmhzXWAgZ2l2ZXMgeW91IHRo
ZSAiY2xlYW5lciIgZ2VuZSBzZXRzIG9mIHNpbmFsaW5nIGFuZCBtZXRhYm9saWMgcGF0aHdheXMg
b25seS48L3A+PHA+PGJyPjwvcD48cD48YnI+PC9wPjxwPmBgYHI8L3A+PHA+bGlicmFyeShwYXRo
dmlldyk8L3A+PHA+bGlicmFyeShnYWdlKTwvcD48cD5saWJyYXJ5KGdhZ2VEYXRhKTwvcD48cD5k
YXRhKGtlZ2cuc2V0cy5ocyk8L3A+PHA+ZGF0YShzaWdtZXQuaWR4LmhzKTwvcD48cD5rZWdnLnNl
dHMuaHMgPSBrZWdnLnNldHMuaHNbc2lnbWV0LmlkeC5oc108L3A+PHA+aGVhZChrZWdnLnNldHMu
aHMsIDMpPC9wPjxwPmBgYDwvcD48cD48YnI+PC9wPjxwPmBgYDwvcD48cD4jIyAkYGhzYTAwMjMy
IENhZmZlaW5lIG1ldGFib2xpc21gPC9wPjxwPiMjIFsxXSAiMTAiICZuYnNwOyAiMTU0NCIgIjE1
NDgiICIxNTQ5IiAiMTU1MyIgIjc0OTgiICI5IiAmbmJzcDsmbmJzcDs8L3A+PHA+IyMmbmJzcDs8
L3A+PHA+IyMgJGBoc2EwMDk4MyBEcnVnIG1ldGFib2xpc20gLSBvdGhlciBlbnp5bWVzYDwvcD48
cD4jIyAmbmJzcDtbMV0gIjEwIiAmbmJzcDsgJm5ic3A7ICIxMDY2IiAmbmJzcDsgIjEwNzIwIiAm
bmJzcDsiMTA5NDEiICZuYnNwOyIxNTE1MzEiICIxNTQ4IiAmbmJzcDsgIjE1NDkiICZuYnNwOzwv
cD48cD4jIyAmbmJzcDtbOF0gIjE1NTEiICZuYnNwOyAiMTU1MyIgJm5ic3A7ICIxNTc2IiAmbmJz
cDsgIjE1NzciICZuYnNwOyAiMTgwNiIgJm5ic3A7ICIxODA3IiAmbmJzcDsgIjE4OTAiICZuYnNw
OzwvcD48cD4jIyBbMTVdICIyMjEyMjMiICIyOTkwIiAmbmJzcDsgIjMyNTEiICZuYnNwOyAiMzYx
NCIgJm5ic3A7ICIzNjE1IiAmbmJzcDsgIjM3MDQiICZuYnNwOyAiNTE3MzMiJm5ic3A7PC9wPjxw
PiMjIFsyMl0gIjU0NDkwIiAmbmJzcDsiNTQ1NzUiICZuYnNwOyI1NDU3NiIgJm5ic3A7IjU0NTc3
IiAmbmJzcDsiNTQ1NzgiICZuYnNwOyI1NDU3OSIgJm5ic3A7IjU0NjAwIiZuYnNwOzwvcD48cD4j
IyBbMjldICI1NDY1NyIgJm5ic3A7IjU0NjU4IiAmbmJzcDsiNTQ2NTkiICZuYnNwOyI1NDk2MyIg
Jm5ic3A7IjU3NDUzNyIgIjY0ODE2IiAmbmJzcDsiNzA4MyIgJm5ic3A7PC9wPjxwPiMjIFszNl0g
IjcwODQiICZuYnNwOyAiNzE3MiIgJm5ic3A7ICI3MzYzIiAmbmJzcDsgIjczNjQiICZuYnNwOyAi
NzM2NSIgJm5ic3A7ICI3MzY2IiAmbmJzcDsgIjczNjciICZuYnNwOzwvcD48cD4jIyBbNDNdICI3
MzcxIiAmbmJzcDsgIjczNzIiICZuYnNwOyAiNzM3OCIgJm5ic3A7ICI3NDk4IiAmbmJzcDsgIjc5
Nzk5IiAmbmJzcDsiODM1NDkiICZuYnNwOyI4ODI0IiAmbmJzcDs8L3A+PHA+IyMgWzUwXSAiODgz
MyIgJm5ic3A7ICI5IiAmbmJzcDsgJm5ic3A7ICZuYnNwOyI5NzgiICZuYnNwOyZuYnNwOzwvcD48
cD4jIyZuYnNwOzwvcD48cD4jIyAkYGhzYTAwMjMwIFB1cmluZSBtZXRhYm9saXNtYDwvcD48cD4j
IyAmbmJzcDsgWzFdICIxMDAiICZuYnNwOyAmbmJzcDsiMTAyMDEiICZuYnNwOyIxMDYwNiIgJm5i
c3A7IjEwNjIxIiAmbmJzcDsiMTA2MjIiICZuYnNwOyIxMDYyMyIgJm5ic3A7IjEwNyIgJm5ic3A7
Jm5ic3A7PC9wPjxwPiMjICZuYnNwOyBbOF0gIjEwNzE0IiAmbmJzcDsiMTA4IiAmbmJzcDsgJm5i
c3A7IjEwODQ2IiAmbmJzcDsiMTA5IiAmbmJzcDsgJm5ic3A7IjExMSIgJm5ic3A7ICZuYnNwOyIx
MTEyOCIgJm5ic3A7IjExMTY0IiZuYnNwOzwvcD48cD4jIyAmbmJzcDtbMTVdICIxMTIiICZuYnNw
OyAmbmJzcDsiMTEzIiAmbmJzcDsgJm5ic3A7IjExNCIgJm5ic3A7ICZuYnNwOyIxMTUiICZuYnNw
OyAmbmJzcDsiMTIyNDgxIiAiMTIyNjIyIiAiMTI0NTgzIjwvcD48cD4jIyAmbmJzcDtbMjJdICIx
MzIiICZuYnNwOyAmbmJzcDsiMTU4IiAmbmJzcDsgJm5ic3A7IjE1OSIgJm5ic3A7ICZuYnNwOyIx
NjMzIiAmbmJzcDsgIjE3MTU2OCIgIjE3MTYiICZuYnNwOyAiMTk2ODgzIjwvcD48cD4jIyAmbmJz
cDtbMjldICIyMDMiICZuYnNwOyAmbmJzcDsiMjA0IiAmbmJzcDsgJm5ic3A7IjIwNSIgJm5ic3A7
ICZuYnNwOyIyMjE4MjMiICIyMjcyIiAmbmJzcDsgIjIyOTc4IiAmbmJzcDsiMjM2NDkiJm5ic3A7
PC9wPjxwPiMjICZuYnNwO1szNl0gIjI0NjcyMSIgIjI1ODg1IiAmbmJzcDsiMjYxOCIgJm5ic3A7
ICIyNjI4OSIgJm5ic3A7IjI3MCIgJm5ic3A7ICZuYnNwOyIyNzEiICZuYnNwOyAmbmJzcDsiMjcx
MTUiJm5ic3A7PC9wPjxwPiMjICZuYnNwO1s0M10gIjI3MiIgJm5ic3A7ICZuYnNwOyIyNzY2IiAm
bmJzcDsgIjI5NzciICZuYnNwOyAiMjk4MiIgJm5ic3A7ICIyOTgzIiAmbmJzcDsgIjI5ODQiICZu
YnNwOyAiMjk4NiIgJm5ic3A7PC9wPjxwPiMjICZuYnNwO1s1MF0gIjI5ODciICZuYnNwOyAiMjk5
MjIiICZuYnNwOyIzMDAwIiAmbmJzcDsgIjMwODMzIiAmbmJzcDsiMzA4MzQiICZuYnNwOyIzMTgi
ICZuYnNwOyAmbmJzcDsiMzI1MSIgJm5ic3A7PC9wPjxwPiMjICZuYnNwO1s1N10gIjM1MyIgJm5i
c3A7ICZuYnNwOyIzNjE0IiAmbmJzcDsgIjM2MTUiICZuYnNwOyAiMzcwNCIgJm5ic3A7ICIzNzc4
NDEiICI0NzEiICZuYnNwOyAmbmJzcDsiNDgzMCIgJm5ic3A7PC9wPjxwPiMjICZuYnNwO1s2NF0g
IjQ4MzEiICZuYnNwOyAiNDgzMiIgJm5ic3A7ICI0ODMzIiAmbmJzcDsgIjQ4NjAiICZuYnNwOyAi
NDg4MSIgJm5ic3A7ICI0ODgyIiAmbmJzcDsgIjQ5MDciICZuYnNwOzwvcD48cD4jIyAmbmJzcDtb
NzFdICI1MDQ4NCIgJm5ic3A7IjUwOTQwIiAmbmJzcDsiNTEwODIiICZuYnNwOyI1MTI1MSIgJm5i
c3A7IjUxMjkyIiAmbmJzcDsiNTEzNiIgJm5ic3A7ICI1MTM3IiAmbmJzcDs8L3A+PHA+IyMgJm5i
c3A7Wzc4XSAiNTEzOCIgJm5ic3A7ICI1MTM5IiAmbmJzcDsgIjUxNDAiICZuYnNwOyAiNTE0MSIg
Jm5ic3A7ICI1MTQyIiAmbmJzcDsgIjUxNDMiICZuYnNwOyAiNTE0NCIgJm5ic3A7PC9wPjxwPiMj
ICZuYnNwO1s4NV0gIjUxNDUiICZuYnNwOyAiNTE0NiIgJm5ic3A7ICI1MTQ3IiAmbmJzcDsgIjUx
NDgiICZuYnNwOyAiNTE0OSIgJm5ic3A7ICI1MTUwIiAmbmJzcDsgIjUxNTEiICZuYnNwOzwvcD48
cD4jIyAmbmJzcDtbOTJdICI1MTUyIiAmbmJzcDsgIjUxNTMiICZuYnNwOyAiNTE1OCIgJm5ic3A7
ICI1MTY3IiAmbmJzcDsgIjUxNjkiICZuYnNwOyAiNTE3MjgiICZuYnNwOyI1MTk4IiAmbmJzcDs8
L3A+PHA+IyMgJm5ic3A7Wzk5XSAiNTIzNiIgJm5ic3A7ICI1MzEzIiAmbmJzcDsgIjUzMTUiICZu
YnNwOyAiNTMzNDMiICZuYnNwOyI1NDEwNyIgJm5ic3A7IjU0MjIiICZuYnNwOyAiNTQyNCIgJm5i
c3A7PC9wPjxwPiMjIFsxMDZdICI1NDI1IiAmbmJzcDsgIjU0MjYiICZuYnNwOyAiNTQyNyIgJm5i
c3A7ICI1NDMwIiAmbmJzcDsgIjU0MzEiICZuYnNwOyAiNTQzMiIgJm5ic3A7ICI1NDMzIiAmbmJz
cDs8L3A+PHA+IyMgWzExM10gIjU0MzQiICZuYnNwOyAiNTQzNSIgJm5ic3A7ICI1NDM2IiAmbmJz
cDsgIjU0MzciICZuYnNwOyAiNTQzOCIgJm5ic3A7ICI1NDM5IiAmbmJzcDsgIjU0NDAiICZuYnNw
OzwvcD48cD4jIyBbMTIwXSAiNTQ0MSIgJm5ic3A7ICI1NDcxIiAmbmJzcDsgIjU0ODY0NCIgIjU1
Mjc2IiAmbmJzcDsiNTU1NyIgJm5ic3A7ICI1NTU4IiAmbmJzcDsgIjU1NzAzIiZuYnNwOzwvcD48
cD4jIyBbMTI3XSAiNTU4MTEiICZuYnNwOyI1NTgyMSIgJm5ic3A7IjU2MzEiICZuYnNwOyAiNTYz
NCIgJm5ic3A7ICI1NjY1NSIgJm5ic3A7IjU2OTUzIiAmbmJzcDsiNTY5ODUiJm5ic3A7PC9wPjxw
PiMjIFsxMzRdICI1NzgwNCIgJm5ic3A7IjU4NDk3IiAmbmJzcDsiNjI0MCIgJm5ic3A7ICI2MjQx
IiAmbmJzcDsgIjY0NDI1IiAmbmJzcDsiNjQ2NjI1IiAiNjU0MzY0IjwvcD48cD4jIyBbMTQxXSAi
NjYxIiAmbmJzcDsgJm5ic3A7Ijc0OTgiICZuYnNwOyAiODM4MiIgJm5ic3A7ICI4NDE3MiIgJm5i
c3A7Ijg0MjY1IiAmbmJzcDsiODQyODQiICZuYnNwOyI4NDYxOCImbmJzcDs8L3A+PHA+IyMgWzE0
OF0gIjg2MjIiICZuYnNwOyAiODY1NCIgJm5ic3A7ICI4NzE3OCIgJm5ic3A7Ijg4MzMiICZuYnNw
OyAiOTA2MCIgJm5ic3A7ICI5MDYxIiAmbmJzcDsgIjkzMDM0IiZuYnNwOzwvcD48cD4jIyBbMTU1
XSAiOTUzIiAmbmJzcDsgJm5ic3A7Ijk1MzMiICZuYnNwOyAiOTU0IiAmbmJzcDsgJm5ic3A7Ijk1
NSIgJm5ic3A7ICZuYnNwOyI5NTYiICZuYnNwOyAmbmJzcDsiOTU3IiAmbmJzcDsgJm5ic3A7Ijk1
ODMiICZuYnNwOzwvcD48cD4jIyBbMTYyXSAiOTYxNSI8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+
PHA+VGhlIGBnYWdlKClgIGZ1bmN0aW9uIHJlcXVpcmVzIGEgbmFtZWQgdmVjdG9yIG9mIGZvbGQg
Y2hhbmdlcywgd2hlcmUgdGhlIG5hbWVzIG9mIHRoZSB2YWx1ZXMgYXJlIHRoZSBFbnRyZXogZ2Vu
ZSBJRHMuJm5ic3A7PC9wPjxwPjxicj48L3A+PHA+PGJyPjwvcD48cD5gYGByPC9wPjxwPmZvbGRj
aGFuZ2VzID0gcmVzJGxvZzJGb2xkQ2hhbmdlPC9wPjxwPm5hbWVzKGZvbGRjaGFuZ2VzKSA9IHJl
cyRlbnRyZXo8L3A+PHA+aGVhZChmb2xkY2hhbmdlcyk8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+
PHA+YGBgPC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7NDI4OCAmbmJzcDsgJm5ic3A7ICZu
YnNwOzg0ODIgJm5ic3A7ICZuYnNwOyAmbmJzcDs1MzI3ICZuYnNwOyAmbmJzcDsgJm5ic3A7NjY1
OSAmbmJzcDsgJm5ic3A7ICZuYnNwOzUzMjggJm5ic3A7ICZuYnNwOyAmbmJzcDsyMDM0Jm5ic3A7
PC9wPjxwPiMjIC0zLjE3MjUwMiAtMi40MTgyMzggJm5ic3A7Mi4wMTY4MDIgJm5ic3A7Mi4zNzk1
NDUgJm5ic3A7Mi4yMjQ3NzkgLTEuODg1MzM5PC9wPjxwPmBgYDwvcD48cD48YnI+PC9wPjxwPk5v
dywgbGV0J3MgcnVuIHRoZSBwYXRod2F5IGFuYWx5c2lzLiBTZWUgaGVscCBvbiB0aGUgZ2FnZSBm
dW5jdGlvbiB3aXRoIGA/Z2FnZWAuIFNwZWNpZmljYWxseSwgeW91IG1pZ2h0IHdhbnQgdG8gdHJ5
IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBgc2FtZS5kaXJgLiBUaGlzIHZhbHVlIGRldGVybWlucyB3
aGV0aGVyIHRvIHRlc3QgZm9yIGNoYW5nZXMgaW4gYSBnZW5lIHNldCB0b3dhcmQgYSBzaW5nbGUg
ZGlyZWN0aW9uIChhbGwgZ2VuZXMgdXAgb3IgZG93biByZWd1bGF0ZWQpIG9yIGNoYW5nZXMgdG93
YXJkcyBib3RoIGRpcmVjdGlvbnMgc2ltdWx0YW5lb3VzbHkgKGFueSBnZW5lcyBpbiB0aGUgcGF0
aHdheSBkeXNyZWd1bGF0ZWQpLiZuYnNwOzwvcD48cD48YnI+PC9wPjxwPiZndDsgRm9yIGV4cGVy
aW1lbnRhbGx5IGRlcml2ZWQgZ2VuZSBzZXRzLCBHTyB0ZXJtIGdyb3VwcywgZXRjLCBjb3JlZ3Vs
YXRpb24gaXMgY29tbW9ubHkgdGhlIGNhc2UsIGhlbmNlIGBzYW1lLmRpciA9IFRSVUVgIChkZWZh
dWx0KTsgSW4gS0VHRywgQmlvQ2FydGEgcGF0aHdheXMsIGdlbmVzIGZyZXF1ZW50bHkgYXJlIG5v
dCBjb3JlZ3VsYXRlZCwgaGVuY2UgaXQgY291bGQgYmUgaW5mb3JtYXRpdmUgdG8gbGV0IGBzYW1l
LmRpciA9IEZBTFNFYC4gQWx0aG91Z2ggYHNhbWUuZGlyID0gVFJVRWAgY291bGQgYWxzbyBiZSBp
bnRlcmVzdGluZyBmb3IgcGF0aHdheXMuPC9wPjxwPjxicj48L3A+PHA+SGVyZSwgd2UncmUgdXNp
bmcgYHNhbWUuZGlyID0gVFJVRWAsIHdoaWNoIHdpbGwgZ2l2ZSB1cyBzZXBhcmF0ZSBsaXN0cyBm
b3IgcGF0aHdheXMgdGhhdCBhcmUgdXByZWd1bGF0ZWQgdmVyc3VzIHBhdGh3YXlzIHRoYXQgYXJl
IGRvd25yZWd1bGF0ZWQuIExldCdzIGxvb2sgYXQgdGhlIGZpcnN0IGZldyByZXN1bHRzIGZyb20g
ZWFjaC48L3A+PHA+PGJyPjwvcD48cD48YnI+PC9wPjxwPmBgYHI8L3A+PHA+IyBHZXQgdGhlIHJl
c3VsdHM8L3A+PHA+a2VnZ3JlcyA9IGdhZ2UoZm9sZGNoYW5nZXMsIGdzZXRzPWtlZ2cuc2V0cy5o
cywgc2FtZS5kaXI9VFJVRSk8L3A+PHA+PGJyPjwvcD48cD4jIExvb2sgYXQgYm90aCB1cCAoZ3Jl
YXRlciksIGRvd24gKGxlc3MpLCBhbmQgc3RhdGF0aXN0aWNzLjwvcD48cD5sYXBwbHkoa2VnZ3Jl
cywgaGVhZCk8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPiMjICRncmVhdGVy
PC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7cC5nZW9tZWFuIHN0YXQu
bWVhbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtwLnZhbDwvcD48cD4jIyBoc2EwNDE0MiBM
eXNvc29tZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgMC4wMDAyNjMwNjU3ICZuYnNwOzMuNTE3ODkwIDAuMDAwMjYz
MDY1NzwvcD48cD4jIyBoc2EwNDY0MCBIZW1hdG9wb2lldGljIGNlbGwgbGluZWFnZSAmbmJzcDsg
MC4wMDE3OTE5MzkwICZuYnNwOzIuOTc2NDMyIDAuMDAxNzkxOTM5MDwvcD48cD4jIyBoc2EwNDYz
MCBKYWstU1RBVCBzaWduYWxpbmcgcGF0aHdheSAmbmJzcDsgMC4wMDQ4OTgwOTc3ICZuYnNwOzIu
NjA0MzkwIDAuMDA0ODk4MDk3NzwvcD48cD4jIyBoc2EwMDE0MCBTdGVyb2lkIGhvcm1vbmUgYmlv
c3ludGhlc2lzIDAuMDA1MTExNTQ5MyAmbmJzcDsyLjYzNjIwNiAwLjAwNTExMTU0OTM8L3A+PHA+
IyMgaHNhMDQwNjIgQ2hlbW9raW5lIHNpZ25hbGluZyBwYXRod2F5ICZuYnNwOzAuMDEyNTU4Mjk2
MSAmbmJzcDsyLjI1MDc2NSAwLjAxMjU1ODI5NjE8L3A+PHA+IyMgaHNhMDA1MTEgT3RoZXIgZ2x5
Y2FuIGRlZ3JhZGF0aW9uICZuYnNwOyAmbmJzcDsgMC4wMjIzODE5OTE5ICZuYnNwOzIuMTA0MzEx
IDAuMDIyMzgxOTkxOTwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDtxLnZhbCBzZXQuc2l6ZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZXhwMTwvcD48
cD4jIyBoc2EwNDE0MiBMeXNvc29tZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMC4wNDI2MTY2NCAmbmJzcDsgJm5i
c3A7ICZuYnNwOzExNiAwLjAwMDI2MzA2NTc8L3A+PHA+IyMgaHNhMDQ2NDAgSGVtYXRvcG9pZXRp
YyBjZWxsIGxpbmVhZ2UgJm5ic3A7IDAuMTQ1MTQ3MDYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNjEg
MC4wMDE3OTE5MzkwPC9wPjxwPiMjIGhzYTA0NjMwIEphay1TVEFUIHNpZ25hbGluZyBwYXRod2F5
ICZuYnNwOyAwLjIwNzAxNzc1ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTE5IDAuMDA0ODk4MDk3Nzwv
cD48cD4jIyBoc2EwMDE0MCBTdGVyb2lkIGhvcm1vbmUgYmlvc3ludGhlc2lzIDAuMjA3MDE3NzUg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgMzkgMC4wMDUxMTE1NDkzPC9wPjxwPiMjIGhzYTA0MDYyIENo
ZW1va2luZSBzaWduYWxpbmcgcGF0aHdheSAmbmJzcDswLjQwNjg4ODc5ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MTU2IDAuMDEyNTU4Mjk2MTwvcD48cD4jIyBoc2EwMDUxMSBPdGhlciBnbHljYW4gZGVn
cmFkYXRpb24gJm5ic3A7ICZuYnNwOyAwLjQ5OTU2NTA2ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE1
IDAuMDIyMzgxOTkxOTwvcD48cD4jIyZuYnNwOzwvcD48cD4jIyAkbGVzczwvcD48cD4jIyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDtwLmdlb21lYW4gc3RhdC5tZWFuICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwO3AudmFsPC9wPjxwPiMjIGhzYTA0MTEwIENlbGwgY3ljbGUgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDIuMTY1NzI1ZS0wNiAtNC43MjIzMDEgMi4x
NjU3MjVlLTA2PC9wPjxwPiMjIGhzYTAzMDMwIEROQSByZXBsaWNhdGlvbiAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7My44MDc0NDBlLTA2IC00LjgzNTMzNiAzLjgwNzQ0MGUtMDY8
L3A+PHA+IyMgaHNhMDQxMTQgT29jeXRlIG1laW9zaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAxLjEwOTg2OWUtMDQgLTMuNzY3NTYxIDEuMTA5ODY5ZS0wNDwvcD48cD4jIyBo
c2EwMzAxMyBSTkEgdHJhbnNwb3J0ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MS4xODE3ODdlLTAzIC0zLjA3MTk0NyAxLjE4MTc4N2UtMDM8L3A+PHA+IyMgaHNhMDM0
NDAgSG9tb2xvZ291cyByZWNvbWJpbmF0aW9uIDEuMTk3MTI0ZS0wMyAtMy4xOTA3NDcgMS4xOTcx
MjRlLTAzPC9wPjxwPiMjIGhzYTAwMjQwIFB5cmltaWRpbmUgbWV0YWJvbGlzbSAmbmJzcDsgJm5i
c3A7MS41NzAzMThlLTAzIC0yLjk5MjA1OSAxLjU3MDMxOGUtMDM8L3A+PHA+IyMgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtxLnZhbCBzZXQuc2l6ZSAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgZXhwMTwvcD48cD4jIyBoc2EwNDExMCBDZWxsIGN5Y2xlICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwLjAwMDMwODQwMjcgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxMjEgMi4xNjU3MjVlLTA2PC9wPjxwPiMjIGhzYTAzMDMwIEROQSByZXBsaWNh
dGlvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MC4wMDAzMDg0MDI3ICZuYnNw
OyAmbmJzcDsgJm5ic3A7IDM2IDMuODA3NDQwZS0wNjwvcD48cD4jIyBoc2EwNDExNCBPb2N5dGUg
bWVpb3NpcyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAuMDA1OTkzMjkxNiAm
bmJzcDsgJm5ic3A7ICZuYnNwOzEwMSAxLjEwOTg2OWUtMDQ8L3A+PHA+IyMgaHNhMDMwMTMgUk5B
IHRyYW5zcG9ydCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzAuMDM4
Nzg2ODE5MyAmbmJzcDsgJm5ic3A7ICZuYnNwOzE0NSAxLjE4MTc4N2UtMDM8L3A+PHA+IyMgaHNh
MDM0NDAgSG9tb2xvZ291cyByZWNvbWJpbmF0aW9uIDAuMDM4Nzg2ODE5MyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAyOCAxLjE5NzEyNGUtMDM8L3A+PHA+IyMgaHNhMDAyNDAgUHlyaW1pZGluZSBtZXRh
Ym9saXNtICZuYnNwOyAmbmJzcDswLjA0MjM5ODU3OTYgJm5ic3A7ICZuYnNwOyAmbmJzcDsgOTYg
MS41NzAzMThlLTAzPC9wPjxwPiMjJm5ic3A7PC9wPjxwPiMjICRzdGF0czwvcD48cD4jIyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgc3RhdC5tZWFuICZuYnNwOyAmbmJzcDsgZXhwMTwvcD48cD4jIyBoc2Ew
NDE0MiBMeXNvc29tZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7My41MTc4OTAgMy41MTc4OTA8L3A+PHA+
IyMgaHNhMDQ2NDAgSGVtYXRvcG9pZXRpYyBjZWxsIGxpbmVhZ2UgJm5ic3A7ICZuYnNwOzIuOTc2
NDMyIDIuOTc2NDMyPC9wPjxwPiMjIGhzYTA0NjMwIEphay1TVEFUIHNpZ25hbGluZyBwYXRod2F5
ICZuYnNwOyAmbmJzcDsyLjYwNDM5MCAyLjYwNDM5MDwvcD48cD4jIyBoc2EwMDE0MCBTdGVyb2lk
IGhvcm1vbmUgYmlvc3ludGhlc2lzICZuYnNwOzIuNjM2MjA2IDIuNjM2MjA2PC9wPjxwPiMjIGhz
YTA0MDYyIENoZW1va2luZSBzaWduYWxpbmcgcGF0aHdheSAmbmJzcDsgMi4yNTA3NjUgMi4yNTA3
NjU8L3A+PHA+IyMgaHNhMDA1MTEgT3RoZXIgZ2x5Y2FuIGRlZ3JhZGF0aW9uICZuYnNwOyAmbmJz
cDsgJm5ic3A7Mi4xMDQzMTEgMi4xMDQzMTE8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+Tm93
LCBsZXQncyBwcm9jZXNzIHRoZSByZXN1bHRzIHRvIHB1bGwgb3V0IHRoZSB0b3AgNSB1cHJlZ3Vs
YXRlZCBwYXRod2F5cywgdGhlbiBmdXJ0aGVyIHByb2Nlc3MgdGhhdCBqdXN0IHRvIGdldCB0aGUg
SURzLiBXZSdsbCB1c2UgdGhlc2UgS0VHRyBwYXRod2F5IElEcyBkb3duc3RyZWFtIGZvciBwbG90
dGluZy48L3A+PHA+PGJyPjwvcD48cD48YnI+PC9wPjxwPmBgYHI8L3A+PHA+IyBHZXQgdGhlIHBh
dGh3YXlzPC9wPjxwPmtlZ2dyZXNwYXRod2F5cyA9IGRhdGEuZnJhbWUoaWQ9cm93bmFtZXMoa2Vn
Z3JlcyRncmVhdGVyKSwga2VnZ3JlcyRncmVhdGVyKSAlJmd0OyUmbmJzcDs8L3A+PHA+Jm5ic3A7
IHRibF9kZigpICUmZ3Q7JSZuYnNwOzwvcD48cD4mbmJzcDsgZmlsdGVyKHJvd19udW1iZXIoKSZs
dDs9NSkgJSZndDslJm5ic3A7PC9wPjxwPiZuYnNwOyAuJGlkICUmZ3Q7JSZuYnNwOzwvcD48cD4m
bmJzcDsgYXMuY2hhcmFjdGVyKCk8L3A+PHA+a2VnZ3Jlc3BhdGh3YXlzPC9wPjxwPmBgYDwvcD48
cD48YnI+PC9wPjxwPmBgYDwvcD48cD4jIyBbMV0gImhzYTA0MTQyIEx5c29zb21lIiAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDs8L3A+PHA+IyMgWzJdICJoc2EwNDY0MCBIZW1hdG9wb2lldGljIGNlbGwgbGluZWFnZSIg
Jm5ic3A7PC9wPjxwPiMjIFszXSAiaHNhMDQ2MzAgSmFrLVNUQVQgc2lnbmFsaW5nIHBhdGh3YXki
ICZuYnNwOzwvcD48cD4jIyBbNF0gImhzYTAwMTQwIFN0ZXJvaWQgaG9ybW9uZSBiaW9zeW50aGVz
aXMiPC9wPjxwPiMjIFs1XSAiaHNhMDQwNjIgQ2hlbW9raW5lIHNpZ25hbGluZyBwYXRod2F5Ijwv
cD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5gYGByPC9wPjxwPiMgR2V0IHRoZSBJRHMuPC9wPjxw
PmtlZ2dyZXNpZHMgPSBzdWJzdHIoa2VnZ3Jlc3BhdGh3YXlzLCBzdGFydD0xLCBzdG9wPTgpPC9w
PjxwPmtlZ2dyZXNpZHM8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPiMjIFsx
XSAiaHNhMDQxNDIiICJoc2EwNDY0MCIgImhzYTA0NjMwIiAiaHNhMDAxNDAiICJoc2EwNDA2MiI8
L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+RmluYWxseSwgdGhlIGBwYXRodmlldygpYCBmdW5j
dGlvbiBpbiB0aGUgcGF0aHZpZXcgcGFja2FnZSBtYWtlcyB0aGUgcGxvdHMuIExldCdzIHdyaXRl
IGEgZnVuY3Rpb24gc28gd2UgY2FuIGxvb3AgdGhyb3VnaCBhbmQgZHJhdyBwbG90cyBmb3IgdGhl
IHRvcCA1IHBhdGh3YXlzIHdlIGNyZWF0ZWQgYWJvdmUuPC9wPjxwPjxicj48L3A+PHA+PGJyPjwv
cD48cD5gYGByPC9wPjxwPiMgRGVmaW5lIHBsb3R0aW5nIGZ1bmN0aW9uIGZvciBhcHBseWluZyBs
YXRlcjwvcD48cD5wbG90X3BhdGh3YXkgPSBmdW5jdGlvbihwaWQpIHBhdGh2aWV3KGdlbmUuZGF0
YT1mb2xkY2hhbmdlcywgcGF0aHdheS5pZD1waWQsIHNwZWNpZXM9ImhzYSIsIG5ldy5zaWduYXR1
cmU9RkFMU0UpPC9wPjxwPjxicj48L3A+PHA+IyBwbG90IG11bHRpcGxlIHBhdGh3YXlzIChwbG90
cyBzYXZlZCB0byBkaXNrIGFuZCByZXR1cm5zIGEgdGhyb3dhd2F5IGxpc3Qgb2JqZWN0KTwvcD48
cD50bXAgPSBzYXBwbHkoa2VnZ3Jlc2lkcywgZnVuY3Rpb24ocGlkKSBwYXRodmlldyhnZW5lLmRh
dGE9Zm9sZGNoYW5nZXMsIHBhdGh3YXkuaWQ9cGlkLCBzcGVjaWVzPSJoc2EiKSk8L3A+PHA+YGBg
PC9wPjxwPjxicj48L3A+PHA+SGVyZSBhcmUgdGhlIHBsb3RzOjwvcD48cD48YnI+PC9wPjxwPiFb
XShoc2EwMDE0MC5wYXRodmlldy5wbmcpPC9wPjxwPjxicj48L3A+PHA+IVtdKGhzYTA0MDYyLnBh
dGh2aWV3LnBuZyk8L3A+PHA+PGJyPjwvcD48cD4hW10oaHNhMDQxNDIucGF0aHZpZXcucG5nKTwv
cD48cD48YnI+PC9wPjxwPiFbXShoc2EwNDYzMC5wYXRodmlldy5wbmcpPC9wPjxwPjxicj48L3A+
PHA+IVtdKGhzYTA0NjQwLnBhdGh2aWV3LnBuZyk8L3A+PHA+PGJyPjwvcD48cD4jIyMgR2VuZSBP
bnRvbG9neSAoR08pPC9wPjxwPjxicj48L3A+PHA+V2UgY2FuIGFsc28gZG8gYSBzaW1pbGFyIHBy
b2NlZHVyZSB3aXRoIGdlbmUgb250b2xvZ3kuIFNpbWlsYXIgdG8gYWJvdmUsIGBnby5zZXRzLmhz
YCBoYXMgYWxsIEdPIHRlcm1zLiBgZ28uc3Vicy5oc2AgaXMgYSBuYW1lZCBsaXN0IGNvbnRhaW5p
bmcgaW5kZXhlcyBmb3IgdGhlIEJQLCBDQywgYW5kIE1GIG9udG9sb2dpZXMuIExldCdzIG9ubHkg
ZG8gQmlvbG9naWNhbCBQcm9jZXNzLjwvcD48cD48YnI+PC9wPjxwPjxicj48L3A+PHA+YGBgcjwv
cD48cD5kYXRhKGdvLnNldHMuaHMpPC9wPjxwPmRhdGEoZ28uc3Vicy5ocyk8L3A+PHA+Z29icHNl
dHMgPSBnby5zZXRzLmhzW2dvLnN1YnMuaHMkQlBdPC9wPjxwPjxicj48L3A+PHA+Z29icHJlcyA9
IGdhZ2UoZm9sZGNoYW5nZXMsIGdzZXRzPWdvYnBzZXRzLCBzYW1lLmRpcj1UUlVFKTwvcD48cD48
YnI+PC9wPjxwPmxhcHBseShnb2JwcmVzLCBoZWFkKTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48
cD5gYGA8L3A+PHA+IyMgJGdyZWF0ZXI8L3A+PHA+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgcC5nZW9tZWFuPC9wPjxwPiMjIEdPOjAwMDcxNTYgaG9tb3BoaWxpYyBj
ZWxsIGFkaGVzaW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszLjkxNDU2OGUtMDU8L3A+PHA+IyMgR086
MDAwODI4NSBuZWdhdGl2ZSByZWd1bGF0aW9uIG9mIGNlbGwgcHJvbGlmZXJhdGlvbiAmbmJzcDsg
Jm5ic3A7IDIuOTA3MzMyZS0wNDwvcD48cD4jIyBHTzowMDE2MzM5IGNhbGNpdW0tZGVwZW5kZW50
IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NC4y
MTg3NTNlLTA0PC9wPjxwPiMjIEdPOjAwMTYzMzcgY2VsbC1jZWxsIGFkaGVzaW9uICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs2LjE3MDU1MWUtMDQ8L3A+PHA+IyMgR086
MDA0ODcyOSB0aXNzdWUgbW9ycGhvZ2VuZXNpcyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDs2LjU4MTQ2MGUtMDQ8L3A+PHA+IyMgR086MTkwMTYxNyBvcmdhbmljIGh5ZHJveHkgY29t
cG91bmQgYmlvc3ludGhldGljIHByb2Nlc3MgOC44NzYxNjFlLTA0PC9wPjxwPiMjICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtzdGF0Lm1lYW48L3A+PHA+IyMgR086MDAwNzE1NiBob21v
cGhpbGljIGNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA0LjAxNzIwNzwvcD48cD4j
IyBHTzowMDA4Mjg1IG5lZ2F0aXZlIHJlZ3VsYXRpb24gb2YgY2VsbCBwcm9saWZlcmF0aW9uICZu
YnNwOyAmbmJzcDsgJm5ic3A7My40NTMzNDU8L3A+PHA+IyMgR086MDAxNjMzOSBjYWxjaXVtLWRl
cGVuZGVudCBjZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAzLjU0Mzg5MTwvcD48cD4jIyBHTzowMDE2MzM3IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDMuMjQ0Mjk2PC9wPjxwPiMjIEdP
OjAwNDg3MjkgdGlzc3VlIG1vcnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7IDMuMjIzOTc5PC9wPjxwPiMjIEdPOjE5MDE2MTcgb3JnYW5pYyBoeWRyb3h5IGNvbXBv
dW5kIGJpb3N5bnRoZXRpYyBwcm9jZXNzICZuYnNwOzMuMTU3NDIxPC9wPjxwPiMjICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcC52YWw8L3A+PHA+
IyMgR086MDAwNzE1NiBob21vcGhpbGljIGNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzMuOTE0NTY4ZS0wNTwvcD48cD4jIyBHTzowMDA4Mjg1IG5lZ2F0aXZlIHJlZ3VsYXRpb24gb2Yg
Y2VsbCBwcm9saWZlcmF0aW9uICZuYnNwOyAmbmJzcDsgMi45MDczMzJlLTA0PC9wPjxwPiMjIEdP
OjAwMTYzMzkgY2FsY2l1bS1kZXBlbmRlbnQgY2VsbC1jZWxsIGFkaGVzaW9uICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs0LjIxODc1M2UtMDQ8L3A+PHA+IyMgR086MDAxNjMzNyBj
ZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzYuMTcwNTUxZS0wNDwvcD48cD4jIyBHTzowMDQ4NzI5IHRpc3N1ZSBtb3JwaG9nZW5lc2lzICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzYuNTgxNDYwZS0wNDwvcD48cD4jIyBHTzox
OTAxNjE3IG9yZ2FuaWMgaHlkcm94eSBjb21wb3VuZCBiaW9zeW50aGV0aWMgcHJvY2VzcyA4Ljg3
NjE2MWUtMDQ8L3A+PHA+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7cS52YWw8L3A+PHA+IyMgR086MDAwNzE1NiBob21vcGhpbGljIGNlbGwgYWRoZXNpb24g
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzAuMTYxMzk3NzwvcD48cD4jIyBHTzowMDA4Mjg1IG5lZ2F0aXZl
IHJlZ3VsYXRpb24gb2YgY2VsbCBwcm9saWZlcmF0aW9uICZuYnNwOyAmbmJzcDsgMC40NzIwMzQ5
PC9wPjxwPiMjIEdPOjAwMTYzMzkgY2FsY2l1bS1kZXBlbmRlbnQgY2VsbC1jZWxsIGFkaGVzaW9u
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDswLjQ3MjAzNDk8L3A+PHA+IyMgR086
MDAxNjMzNyBjZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzAuNDcyMDM0OTwvcD48cD4jIyBHTzowMDQ4NzI5IHRpc3N1ZSBtb3JwaG9nZW5l
c2lzICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzAuNDcyMDM0OTwvcD48cD4jIyBH
TzoxOTAxNjE3IG9yZ2FuaWMgaHlkcm94eSBjb21wb3VuZCBiaW9zeW50aGV0aWMgcHJvY2VzcyAw
LjQ3MjAzNDk8L3A+PHA+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3NldC5zaXpl
PC9wPjxwPiMjIEdPOjAwMDcxNTYgaG9tb3BoaWxpYyBjZWxsIGFkaGVzaW9uICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxMjQ8L3A+PHA+IyMgR086MDAwODI4NSBuZWdhdGl2ZSBy
ZWd1bGF0aW9uIG9mIGNlbGwgcHJvbGlmZXJhdGlvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7NDU4PC9wPjxwPiMjIEdPOjAwMTYzMzkgY2FsY2l1bS1kZXBlbmRlbnQgY2VsbC1j
ZWxsIGFkaGVzaW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsyNzwvcD48cD4jIyBHTzowMDE2MzM3IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMzU1PC9w
PjxwPiMjIEdPOjAwNDg3MjkgdGlzc3VlIG1vcnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNDI5PC9wPjxwPiMjIEdPOjE5MDE2MTcgb3Jn
YW5pYyBoeWRyb3h5IGNvbXBvdW5kIGJpb3N5bnRoZXRpYyBwcm9jZXNzICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MTQxPC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZXhwMTwvcD48cD4jIyBHTzowMDA3MTU2IGhvbW9waGlsaWMg
Y2VsbCBhZGhlc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7My45MTQ1NjhlLTA1PC9wPjxwPiMjIEdP
OjAwMDgyODUgbmVnYXRpdmUgcmVndWxhdGlvbiBvZiBjZWxsIHByb2xpZmVyYXRpb24gJm5ic3A7
ICZuYnNwOyAyLjkwNzMzMmUtMDQ8L3A+PHA+IyMgR086MDAxNjMzOSBjYWxjaXVtLWRlcGVuZGVu
dCBjZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQu
MjE4NzUzZS0wNDwvcD48cD4jIyBHTzowMDE2MzM3IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Ni4xNzA1NTFlLTA0PC9wPjxwPiMjIEdP
OjAwNDg3MjkgdGlzc3VlIG1vcnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7Ni41ODE0NjBlLTA0PC9wPjxwPiMjIEdPOjE5MDE2MTcgb3JnYW5pYyBoeWRyb3h5IGNv
bXBvdW5kIGJpb3N5bnRoZXRpYyBwcm9jZXNzIDguODc2MTYxZS0wNDwvcD48cD4jIyZuYnNwOzwv
cD48cD4jIyAkbGVzczwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgcC5nZW9tZWFuIHN0YXQubWVhbjwvcD48cD4jIyBHTzowMDQ4Mjg1IG9yZ2FuZWxsZSBm
aXNzaW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDQuNDExNTQw
ZS0xOCAtOC44NTAwMDQ8L3A+PHA+IyMgR086MDAwMDI4MCBudWNsZWFyIGRpdmlzaW9uICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcuNDU5Njg0ZS0xOCAt
OC44MDU1NjQ8L3A+PHA+IyMgR086MDAwNzA2NyBtaXRvc2lzICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Ny40NTk2ODRlLTE4IC04LjgwNTU2NDwvcD48cD4jIyBHTzowMDAwMDg3IE0gcGhhc2Ugb2YgbWl0
b3RpYyBjZWxsIGN5Y2xlIDIuMjg2NDQ0ZS0xNyAtOC42NTU2NDQ8L3A+PHA+IyMgR086MDAwNzA1
OSBjaHJvbW9zb21lIHNlZ3JlZ2F0aW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuODcy
OTAxZS0xMyAtNy42ODY4ODM8L3A+PHA+IyMgR086MDA1MTMwMSBjZWxsIGRpdmlzaW9uICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNS44NDEz
NzVlLTEyIC02Ljg4Nzc2MzwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBwLnZhbCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtx
LnZhbDwvcD48cD4jIyBHTzowMDQ4Mjg1IG9yZ2FuZWxsZSBmaXNzaW9uICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDQuNDExNTQwZS0xOCAxLjAyNTIwOWUtMTQ8L3A+
PHA+IyMgR086MDAwMDI4MCBudWNsZWFyIGRpdmlzaW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcuNDU5Njg0ZS0xOCAxLjAyNTIwOWUtMTQ8L3A+PHA+
IyMgR086MDAwNzA2NyBtaXRvc2lzICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNy40NTk2ODRlLTE4IDEu
MDI1MjA5ZS0xNDwvcD48cD4jIyBHTzowMDAwMDg3IE0gcGhhc2Ugb2YgbWl0b3RpYyBjZWxsIGN5
Y2xlIDIuMjg2NDQ0ZS0xNyAyLjM1Njc1MmUtMTQ8L3A+PHA+IyMgR086MDAwNzA1OSBjaHJvbW9z
b21lIHNlZ3JlZ2F0aW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuODcyOTAxZS0xMyAx
LjU0NDM5NGUtMTA8L3A+PHA+IyMgR086MDA1MTMwMSBjZWxsIGRpdmlzaW9uICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNS44NDEzNzVlLTEy
IDQuMDEzOTk4ZS0wOTwvcD48cD4jIyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3Nl
dC5zaXplICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBleHAxPC9wPjxwPiMjIEdPOjAwNDgy
ODUgb3JnYW5lbGxlIGZpc3Npb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszNzYgNC40MTE1NDBlLTE4PC9wPjxwPiMjIEdPOjAw
MDAyODAgbnVjbGVhciBkaXZpc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAzNTIgNy40NTk2ODRlLTE4PC9wPjxwPiMjIEdP
OjAwMDcwNjcgbWl0b3NpcyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MzUyIDcuNDU5Njg0ZS0xODwvcD48cD4jIyBHTzowMDAwMDg3IE0gcGhhc2Ugb2YgbWl0b3RpYyBj
ZWxsIGN5Y2xlICZuYnNwOyAmbmJzcDsgJm5ic3A7MzYyIDIuMjg2NDQ0ZS0xNzwvcD48cD4jIyBH
TzowMDA3MDU5IGNocm9tb3NvbWUgc2VncmVnYXRpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgMTQxIDEuODcyOTAxZS0xMzwvcD48cD4jIyBHTzowMDUxMzAxIGNl
bGwgZGl2aXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQ2MiA1Ljg0MTM3NWUtMTI8L3A+PHA+IyMm
bmJzcDs8L3A+PHA+IyMgJHN0YXRzPC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDtzdGF0Lm1lYW48L3A+PHA+IyMgR086MDAwNzE1NiBob21vcGhpbGljIGNlbGwgYWRoZXNp
b24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA0LjAxNzIwNzwvcD48cD4jIyBHTzowMDA4Mjg1IG5lZ2F0
aXZlIHJlZ3VsYXRpb24gb2YgY2VsbCBwcm9saWZlcmF0aW9uICZuYnNwOyAmbmJzcDsgJm5ic3A7
My40NTMzNDU8L3A+PHA+IyMgR086MDAxNjMzOSBjYWxjaXVtLWRlcGVuZGVudCBjZWxsLWNlbGwg
YWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAzLjU0Mzg5MTwvcD48
cD4jIyBHTzowMDE2MzM3IGNlbGwtY2VsbCBhZGhlc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IDMuMjQ0Mjk2PC9wPjxwPiMjIEdPOjAwNDg3MjkgdGlzc3VlIG1v
cnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDMuMjIzOTc5PC9w
PjxwPiMjIEdPOjE5MDE2MTcgb3JnYW5pYyBoeWRyb3h5IGNvbXBvdW5kIGJpb3N5bnRoZXRpYyBw
cm9jZXNzICZuYnNwOzMuMTU3NDIxPC9wPjxwPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO2V4cDE8L3A+PHA+IyMgR086MDAwNzE1NiBob21vcGhpbGljIGNl
bGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQuMDE3MjA3PC9wPjxwPiMjIEdPOjAwMDgy
ODUgbmVnYXRpdmUgcmVndWxhdGlvbiBvZiBjZWxsIHByb2xpZmVyYXRpb24gJm5ic3A7ICZuYnNw
OyAzLjQ1MzM0NTwvcD48cD4jIyBHTzowMDE2MzM5IGNhbGNpdW0tZGVwZW5kZW50IGNlbGwtY2Vs
bCBhZGhlc2lvbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7My41NDM4OTE8L3A+
PHA+IyMgR086MDAxNjMzNyBjZWxsLWNlbGwgYWRoZXNpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzMuMjQ0Mjk2PC9wPjxwPiMjIEdPOjAwNDg3MjkgdGlzc3VlIG1v
cnBob2dlbmVzaXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7My4yMjM5Nzk8L3A+
PHA+IyMgR086MTkwMTYxNyBvcmdhbmljIGh5ZHJveHkgY29tcG91bmQgYmlvc3ludGhldGljIHBy
b2Nlc3MgMy4xNTc0MjE8L3A+PHA+YGBgPC9wPjxkaXY+PGJyPjwvZGl2Pg==">
<br /></div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com17tag:blogger.com,1999:blog-6232819486261696035.post-8700583450587277862015-11-13T09:54:00.000-06:002015-11-13T09:54:31.896-06:00Annotables: R data package for annotating/converting Gene IDs<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=870058345058727786" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
I work with <em>gene lists</em> on a nearly daily basis. Lists of genes near ChIP-seq peaks, lists of genes closest to a GWAS hit, lists of differentially expressed genes or transcripts from an RNA-seq experiment, lists of genes involved in certain pathways, etc. And lots of times I’ll need to convert these gene IDs from one identifier to another. There’s no shortage of tools to do this. <a href="http://www.gettinggeneticsdone.com/2012/03/video-tip-convert-gene-ids-with-biomart.html">I use Ensembl Biomart</a>. But I do this so often that I got tired of hammering Ensembl’s servers whenever I wanted to convert from Ensembl to Entrez gene IDs for pathway mapping, get the chromosomal location for some BEDTools-y kinds of genomic arithmetic, or get the gene symbol and full description for reporting. So I <a href="https://github.com/stephenturner/annotables#how">used Biomart</a> to retrieve the data that <em>I</em> use most often, cleaned up the column names, and saved this data as an R data package called <a href="https://github.com/stephenturner/annotables">annotables</a>. </div>
<div style="margin: 1.2em 0px !important;">
This package has basic annotation information from <a href="http://sep2015.archive.ensembl.org/index.html?redirect=no">Ensembl release 82</a> for:</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;">Human (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">grch38</code>)</li>
<li style="margin: 0.5em 0px;">Mouse (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">grcm38</code>)</li>
<li style="margin: 0.5em 0px;">Rat (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">rnor6</code>)</li>
<li style="margin: 0.5em 0px;">Chicken (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">galgal4</code>)</li>
<li style="margin: 0.5em 0px;">Worm (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">wbcel235</code>)</li>
<li style="margin: 0.5em 0px;">Fly (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">bdgp6</code>)</li>
</ul>
<div style="margin: 1.2em 0px !important;">
Where each table contains:</div>
<ul style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">ensgene</code>: Ensembl gene ID</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">entrez</code>: Entrez gene ID</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">symbol</code>: Gene symbol</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">chr</code>: Chromosome</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">start</code>: Start</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">end</code>: End</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">strand</code>: Strand</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">biotype</code>: Protein coding, pseudogene, mitochondrial tRNA, etc.</li>
<li style="margin: 0.5em 0px;"><code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">description</code>: Full gene name/description.</li>
</ul>
<div style="margin: 1.2em 0px !important;">
Additionally, there are tables for human and mouse (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">grch38_gt</code> and <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">grcm38_gt</code>, respectively) that link ensembl gene IDs to ensembl transcript IDs.</div>
<h3 id="usage" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Usage</h3>
<div style="margin: 1.2em 0px !important;">
The package isn’t on CRAN, so you’ll need devtools to install it. </div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># If you haven't already installed devtools...</span>
install.packages(<span class="hljs-string">"devtools"</span>)
<span class="hljs-comment"># Use devtools to install the package</span>
devtools::install_github(<span class="hljs-string">"stephenturner/annotables"</span>)
</code></pre>
<div style="margin: 1.2em 0px !important;">
It isn’t necessary to load <a href="http://www.gettinggeneticsdone.com/2014/08/do-your-data-janitor-work-like-boss.html">dplyr</a>, but the tables are <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">tbl_df</code> and will print nicely if you have dplyr loaded.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(dplyr)
<span class="hljs-keyword">library</span>(annotables)
</code></pre>
<div style="margin: 1.2em 0px !important;">
Look at the human genes table (note the description column gets cut off because the table becomes too wide to print nicely):</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">grch38
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## Source: local data frame [66,531 x 9]
##
## ensgene entrez symbol chr start end strand biotype
## (chr) (int) (chr) (chr) (int) (int) (int) (chr)
## 1 ENSG00000210049 NA MT-TF MT 577 647 1 Mt_tRNA
## 2 ENSG00000211459 NA MT-RNR1 MT 648 1601 1 Mt_rRNA
## 3 ENSG00000210077 NA MT-TV MT 1602 1670 1 Mt_tRNA
## 4 ENSG00000210082 NA MT-RNR2 MT 1671 3229 1 Mt_rRNA
## 5 ENSG00000209082 NA MT-TL1 MT 3230 3304 1 Mt_tRNA
## 6 ENSG00000198888 4535 MT-ND1 MT 3307 4262 1 protein_coding
## 7 ENSG00000210100 NA MT-TI MT 4263 4331 1 Mt_tRNA
## 8 ENSG00000210107 NA MT-TQ MT 4329 4400 -1 Mt_tRNA
## 9 ENSG00000210112 NA MT-TM MT 4402 4469 1 Mt_tRNA
## 10 ENSG00000198763 4536 MT-ND2 MT 4470 5511 1 protein_coding
## .. ... ... ... ... ... ... ... ...
## Variables not shown: description (chr)
</code></pre>
<div style="margin: 1.2em 0px !important;">
Look at the human genes-to-transcripts table:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">grch38_gt
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## Source: local data frame [216,133 x 2]
##
## ensgene enstxp
## (chr) (chr)
## 1 ENSG00000210049 ENST00000387314
## 2 ENSG00000211459 ENST00000389680
## 3 ENSG00000210077 ENST00000387342
## 4 ENSG00000210082 ENST00000387347
## 5 ENSG00000209082 ENST00000386347
## 6 ENSG00000198888 ENST00000361390
## 7 ENSG00000210100 ENST00000387365
## 8 ENSG00000210107 ENST00000387372
## 9 ENSG00000210112 ENST00000387377
## 10 ENSG00000198763 ENST00000361453
## .. ... ...
</code></pre>
<div style="margin: 1.2em 0px !important;">
Tables are <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">tbl_df</code>, pipe-able with dplyr:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">grch38 %>%
filter(biotype==<span class="hljs-string">"protein_coding"</span> & chr==<span class="hljs-string">"1"</span>) %>%
select(ensgene, symbol, chr, start, end, description) %>%
head %>%
pander::pandoc.table(split.table=<span class="hljs-number">100</span>, justify=<span class="hljs-string">"llllll"</span>, style=<span class="hljs-string">"rmarkdown"</span>)
</code></pre>
<table style="border-collapse: collapse; border-spacing: 0px; border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 1.2em 0px; padding: 0px;">
<thead>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">ensgene</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">symbol</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">chr</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">start</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">end</th>
</tr>
</thead>
<tbody style="border: 0px; margin: 0px; padding: 0px;">
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000158014</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SLC30A2</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">26037252</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">26046133</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000173673</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">HES3</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">6244192</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">6245578</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000243749</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ZMYM6NB</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">34981535</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">34985353</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000189410</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SH2D5</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">20719732</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">20732837</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000116863</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ADPRHL2</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">36088875</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">36093932</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000188643</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">S100A16</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">153606886</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">153613145</td>
</tr>
</tbody>
</table>
<div style="margin: 1.2em 0px !important;">
Table: Table continues below</div>
<table style="border-collapse: collapse; border-spacing: 0px; border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 1.2em 0px; padding: 0px;">
<thead>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">description</th>
</tr>
</thead>
<tbody style="border: 0px; margin: 0px; padding: 0px;">
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">solute carrier family 30 (zinc transporter), member 2 [Source:HGNC Symbol;Acc:HGNC:11013]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">hes family bHLH transcription factor 3 [Source:HGNC Symbol;Acc:HGNC:26226]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ZMYM6 neighbor [Source:HGNC Symbol;Acc:HGNC:40021]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SH2 domain containing 5 [Source:HGNC Symbol;Acc:HGNC:28819]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ADP-ribosylhydrolase like 2 [Source:HGNC Symbol;Acc:HGNC:21304]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">S100 calcium binding protein A16 [Source:HGNC Symbol;Acc:HGNC:20441]</td>
</tr>
</tbody>
</table>
<h3 id="example-with-rna-seq-data" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Example with RNA-seq data</h3>
<div style="margin: 1.2em 0px !important;">
Here’s an example with RNA-seq data. Specifically, DESeq2 results from the <a href="https://bioconductor.org/packages/release/data/experiment/html/airway.html">airway</a> package, made tidy with <a href="http://www.bioconductor.org/packages/devel/bioc/html/biobroom.html">biobroom</a>:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment"># Load libraries (install with Bioconductor if you don't have them)</span>
<span class="hljs-keyword">library</span>(DESeq2)
<span class="hljs-keyword">library</span>(airway)
<span class="hljs-comment"># Load the data and do the RNA-seq data analysis</span>
data(airway)
airway = DESeqDataSet(airway, design = ~cell + dex)
airway = DESeq(airway)
res = results(airway)
<span class="hljs-comment"># tidy results with biobroom</span>
<span class="hljs-keyword">library</span>(biobroom)
res_tidy = tidy.DESeqResults(res)
head(res_tidy)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## Source: local data frame [6 x 7]
##
## gene baseMean estimate stderror statistic
## (chr) (dbl) (dbl) (dbl) (dbl)
## 1 ENSG00000000003 708.6021697 0.37424998 0.09873107 3.7906000
## 2 ENSG00000000005 0.0000000 NA NA NA
## 3 ENSG00000000419 520.2979006 -0.20215550 0.10929899 -1.8495642
## 4 ENSG00000000457 237.1630368 -0.03624826 0.13684258 -0.2648902
## 5 ENSG00000000460 57.9326331 0.08523370 0.24654400 0.3457140
## 6 ENSG00000000938 0.3180984 0.11555962 0.14630523 0.7898530
## Variables not shown: p.value (dbl), p.adjusted (dbl)
</code></pre>
<div style="margin: 1.2em 0px !important;">
Now, make a table with the results (unfortunately, it’ll be split in this display, but you can write this to file to see all the columns in a single row):</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">res_tidy %>%
arrange(p.adjusted) %>%
head(<span class="hljs-number">20</span>) %>%
inner_join(grch38, by=c(<span class="hljs-string">"gene"</span>=<span class="hljs-string">"ensgene"</span>)) %>%
select(gene, estimate, p.adjusted, symbol, description) %>%
pander::pandoc.table(split.table=<span class="hljs-number">100</span>, justify=<span class="hljs-string">"lrrll"</span>, style=<span class="hljs-string">"rmarkdown"</span>)
</code></pre>
<table style="border-collapse: collapse; border-spacing: 0px; border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 1.2em 0px; padding: 0px;">
<thead>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">gene</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">estimate</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">p.adjusted</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">symbol</th>
</tr>
</thead>
<tbody style="border: 0px; margin: 0px; padding: 0px;">
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000152583</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-4.316</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">4.753e-134</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SPARCL1</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000165995</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-3.189</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.44e-133</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">CACNB2</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000101347</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-3.618</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">6.619e-125</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SAMHD1</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000120129</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-2.871</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">6.619e-125</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">DUSP1</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000189221</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-3.231</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">9.468e-119</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">MAOA</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000211445</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-3.553</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">3.94e-107</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">GPX3</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000157214</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-1.949</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">8.74e-102</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">STEAP2</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000162614</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-2.003</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">3.052e-98</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">NEXN</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000125148</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-2.167</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.783e-92</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">MT2A</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000154734</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-2.286</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">4.522e-86</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ADAMTS1</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000139132</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-2.181</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">2.501e-83</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">FGD4</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000162493</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-1.858</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">4.215e-83</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">PDPN</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000162692</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">3.453</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">3.563e-82</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">VCAM1</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000179094</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-3.044</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.199e-81</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">PER1</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000134243</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-2.149</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">2.73e-81</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SORT1</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000163884</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-4.079</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.073e-80</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">KLF15</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000178695</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">2.446</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">6.275e-75</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">KCTD12</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000146250</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">2.64</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.143e-69</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">PRSS35</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000198624</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">-2.784</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.707e-69</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">CCDC69</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000148848</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.783</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.762e-69</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ADAM12</td>
</tr>
</tbody>
</table>
<div style="margin: 1.2em 0px !important;">
Table: Table continues below</div>
<table style="border-collapse: collapse; border-spacing: 0px; border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 1.2em 0px; padding: 0px;">
<thead>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">description</th>
</tr>
</thead>
<tbody style="border: 0px; margin: 0px; padding: 0px;">
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SPARC-like 1 (hevin) [Source:HGNC Symbol;Acc:HGNC:11220]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">calcium channel, voltage-dependent, beta 2 subunit [Source:HGNC Symbol;Acc:HGNC:1402]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SAM domain and HD domain 1 [Source:HGNC Symbol;Acc:HGNC:15925]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">dual specificity phosphatase 1 [Source:HGNC Symbol;Acc:HGNC:3064]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">monoamine oxidase A [Source:HGNC Symbol;Acc:HGNC:6833]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">glutathione peroxidase 3 [Source:HGNC Symbol;Acc:HGNC:4555]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">STEAP family member 2, metalloreductase [Source:HGNC Symbol;Acc:HGNC:17885]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">nexilin (F actin binding protein) [Source:HGNC Symbol;Acc:HGNC:29557]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">metallothionein 2A [Source:HGNC Symbol;Acc:HGNC:7406]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ADAM metallopeptidase with thrombospondin type 1 motif, 1 [Source:HGNC Symbol;Acc:HGNC:217]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">FYVE, RhoGEF and PH domain containing 4 [Source:HGNC Symbol;Acc:HGNC:19125]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">podoplanin [Source:HGNC Symbol;Acc:HGNC:29602]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">vascular cell adhesion molecule 1 [Source:HGNC Symbol;Acc:HGNC:12663]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">period circadian clock 1 [Source:HGNC Symbol;Acc:HGNC:8845]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">sortilin 1 [Source:HGNC Symbol;Acc:HGNC:11186]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Kruppel-like factor 15 [Source:HGNC Symbol;Acc:HGNC:14536]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">potassium channel tetramerization domain containing 12 [Source:HGNC Symbol;Acc:HGNC:14678]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">protease, serine, 35 [Source:HGNC Symbol;Acc:HGNC:21387]</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">coiled-coil domain containing 69 [Source:HGNC Symbol;Acc:HGNC:24487]</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ADAM metallopeptidase domain 12 [Source:HGNC Symbol;Acc:HGNC:190]</td>
</tr>
</tbody>
</table>
<h3 id="explore-" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Explore!</h3>
<div style="margin: 1.2em 0px !important;">
This data can also be used for toying around with <a href="http://www.gettinggeneticsdone.com/2014/08/do-your-data-janitor-work-like-boss.html">dplyr verbs</a> and generally getting a sense of what’s in here. First, tet some help.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">ls(<span class="hljs-string">"package:annotables"</span>)
?grch38
</code></pre>
<div style="margin: 1.2em 0px !important;">
Let’s join the transcript table to the gene table. </div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">gt = grch38_gt %>%
inner_join(grch38, by=<span class="hljs-string">"ensgene"</span>)
</code></pre>
<div style="margin: 1.2em 0px !important;">
Now, let’s <strong>filter</strong> to get only protein-coding genes, <strong>group by</strong> the ensembl gene ID, <strong>summarize</strong> to count how many transcripts are in each gene, <strong>inner join</strong> that result back to the original gene list, so we can <strong>select</strong> out only the gene, number of transcripts, symbol, and description, <strong>mutate</strong> the description column so that it isn’t so wide that it’ll break the display, <strong>arrange</strong> the returned data descending by the number of transcripts per gene, <strong>head</strong> to get the top 10 results, and optionally, pipe that to further utilities to output a nice HTML table.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">gt %>%
filter(biotype==<span class="hljs-string">"protein_coding"</span>) %>%
group_by(ensgene) %>%
summarize(ntxps=n_distinct(enstxp)) %>%
inner_join(grch38, by=<span class="hljs-string">"ensgene"</span>) %>%
select(ensgene, ntxps, symbol, description) %>%
mutate(description=substr(description, <span class="hljs-number">1</span>, <span class="hljs-number">20</span>)) %>%
arrange(desc(ntxps)) %>%
head(<span class="hljs-number">10</span>) %>%
pander::pandoc.table(split.table=<span class="hljs-number">100</span>, justify=<span class="hljs-string">"lrll"</span>, style=<span class="hljs-string">"rmarkdown"</span>)
</code></pre>
<table style="border-collapse: collapse; border-spacing: 0px; border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 1.2em 0px; padding: 0px;">
<thead>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">ensgene</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">ntxps</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">symbol</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;">description</th>
</tr>
</thead>
<tbody style="border: 0px; margin: 0px; padding: 0px;">
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000165795</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">77</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">NDRG2</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">NDRG family member 2</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000205336</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">77</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ADGRG1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">adhesion G protein-c</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000196628</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">75</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">TCF4</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">transcription factor</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000161249</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">68</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">DMKN</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">dermokine [Source:HG</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000154556</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">64</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">SORBS2</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">sorbin and SH3 domai</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000166444</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">62</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ST5</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">suppression of tumor</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000204580</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">58</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">DDR1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">discoidin domain rec</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000087460</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">57</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">GNAS</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">GNAS complex locus [</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000169398</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">57</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">PTK2</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">protein tyrosine kin</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">ENSG00000104529</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">56</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">EEF1D</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">eukaryotic translati</td>
</tr>
</tbody>
</table>
<div style="margin: 1.2em 0px !important;">
Let’s look up DMKN (dermkine) in Ensembl. Search Ensembl for ENSG00000161249, or use <a href="http://www.ensembl.org/Homo_sapiens/Gene/Summary?g=ENSG00000161249">this direct link</a>. You can browse the table or graphic to see the splicing complexity in this gene. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvsdnsMmKGkRyCfHOxIuBg_xgmxUs63zdadI7dNbklaNvNxyvPKcuMGeJcECNCLlBF8phiCIBv03jAJYKFctm9U_LwTe7vqPBD-lplQ3u3itwKpgdP4k-XKabmtaAQYa9OcgLxjSpGx80/s1600/_annotables-ensbrowse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvsdnsMmKGkRyCfHOxIuBg_xgmxUs63zdadI7dNbklaNvNxyvPKcuMGeJcECNCLlBF8phiCIBv03jAJYKFctm9U_LwTe7vqPBD-lplQ3u3itwKpgdP4k-XKabmtaAQYa9OcgLxjSpGx80/s1600/_annotables-ensbrowse.png" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
Or, let’s do something different. Let’s group the data by what type of gene it is (e.g., protein coding, pseudogene, etc), get the number of genes in each category, and plot the top 20. </div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(ggplot2)
grch38 %>%
group_by(biotype) %>%
summarize(n=n_distinct(ensgene)) %>%
arrange(desc(n)) %>%
head(<span class="hljs-number">20</span>) %>%
ggplot(aes(reorder(biotype, n), n)) +
geom_bar(stat=<span class="hljs-string">"identity"</span>) +
xlab(<span class="hljs-string">"Type"</span>) +
theme_bw() +
coord_flip()
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgArmuWh6awRcYUkXhC5KOCRuy1eKuzm65ggXtDHRIhMH6JaM2aJcFniXhEYV-VWeNDNqcK7AZmX7ptKuzw0CkthoxtkcG6LY3Ncc1dqaPiX6Iq6Q7Wu-PixwwQjhJmwbSsdHhXSQFM7NQ/s1600/_annotables-biotypes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgArmuWh6awRcYUkXhC5KOCRuy1eKuzm65ggXtDHRIhMH6JaM2aJcFniXhEYV-VWeNDNqcK7AZmX7ptKuzw0CkthoxtkcG6LY3Ncc1dqaPiX6Iq6Q7Wu-PixwwQjhJmwbSsdHhXSQFM7NQ/s640/_annotables-biotypes.png" width="426" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
<strong><a href="https://github.com/stephenturner/annotables">Annotables: R data package for annotating/converting Gene IDs</a></strong></div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PGRpdiBjbGFzcz0ibWFya2Rvd24taGVyZS13cmFwcGVyIiBkYXRhLW1kLXVybD0iaHR0cHM6Ly93
d3cuYmxvZ2dlci5jb20vYmxvZ2dlci5nP2Jsb2dJRD02MjMyODE5NDg2MjYxNjk2MDM1I2VkaXRv
ci90YXJnZXQ9cG9zdDtwb3N0SUQ9ODcwMDU4MzQ1MDU4NzI3Nzg2IiBzdHlsZT0iIiBtYXJrZG93
bi1oZXJlLXdyYXBwZXItY29udGVudC1tb2RpZmllZD0idHJ1ZSI+PHAgc3R5bGU9Im1hcmdpbi10
b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48
YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90
dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4y
ZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij5JIHdvcmsgd2l0aCBfZ2VuZSBsaXN0c18gb24gYSBuZWFybHkgZGFp
bHkgYmFzaXMuIExpc3RzIG9mIGdlbmVzIG5lYXIgQ2hJUC1zZXEgcGVha3MsIGxpc3RzIG9mIGdl
bmVzIGNsb3Nlc3QgdG8gYSBHV0FTIGhpdCwgbGlzdHMgb2YgZGlmZmVyZW50aWFsbHkgZXhwcmVz
c2VkIGdlbmVzIG9yIHRyYW5zY3JpcHRzIGZyb20gYW4gUk5BLXNlcSBleHBlcmltZW50LCBsaXN0
cyBvZiBnZW5lcyBpbnZvbHZlZCBpbiBjZXJ0YWluIHBhdGh3YXlzLCBldGMuIEFuZCBsb3RzIG9m
IHRpbWVzIEknbGwgbmVlZCB0byBjb252ZXJ0IHRoZXNlIGdlbmUgSURzIGZyb20gb25lIGlkZW50
aWZpZXIgdG8gYW5vdGhlci4gVGhlcmUncyBubyBzaG9ydGFnZSBvZiB0b29scyB0byBkbyB0aGlz
LiBbSSB1c2UgRW5zZW1ibCBCaW9tYXJ0XShodHRwOi8vd3d3LmdldHRpbmdnZW5ldGljc2RvbmUu
Y29tLzIwMTIvMDMvdmlkZW8tdGlwLWNvbnZlcnQtZ2VuZS1pZHMtd2l0aC1iaW9tYXJ0Lmh0bWwp
LiBCdXQgSSBkbyB0aGlzIHNvIG9mdGVuIHRoYXQgSSBnb3QgdGlyZWQgb2YgaGFtbWVyaW5nIEVu
c2VtYmwncyBzZXJ2ZXJzIHdoZW5ldmVyIEkgd2FudGVkIHRvIGNvbnZlcnQgZnJvbSBFbnNlbWJs
IHRvIEVudHJleiBnZW5lIElEcyBmb3IgcGF0aHdheSBtYXBwaW5nLCBnZXQgdGhlIGNocm9tb3Nv
bWFsIGxvY2F0aW9uIGZvciBzb21lIEJFRFRvb2xzLXkga2luZHMgb2YgZ2Vub21pYyBhcml0aG1l
dGljLCBvciBnZXQgdGhlIGdlbmUgc3ltYm9sIGFuZCBmdWxsIGRlc2NyaXB0aW9uIGZvciByZXBv
cnRpbmcuIFNvIEkgW3VzZWQgQmlvbWFydF0oaHR0cHM6Ly9naXRodWIuY29tL3N0ZXBoZW50dXJu
ZXIvYW5ub3RhYmxlcyNob3cpIHRvIHJldHJpZXZlIHRoZSBkYXRhIHRoYXQgX0lfIHVzZSBtb3N0
IG9mdGVuLCBjbGVhbmVkIHVwIHRoZSBjb2x1bW4gbmFtZXMsIGFuZCBzYXZlZCB0aGlzIGRhdGEg
YXMgYW4gUiBkYXRhIHBhY2thZ2UgY2FsbGVkIFthbm5vdGFibGVzXShodHRwczovL2dpdGh1Yi5j
b20vc3RlcGhlbnR1cm5lci9hbm5vdGFibGVzKS4mbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbi10
b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48
YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90
dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+VGhpcyBwYWNrYWdlIGhhcyBiYXNpYyBhbm5vdGF0aW9u
IGluZm9ybWF0aW9uIGZyb20gW0Vuc2VtYmwgcmVsZWFzZSA4Ml0oaHR0cDovL3NlcDIwMTUuYXJj
aGl2ZS5lbnNlbWJsLm9yZy9pbmRleC5odG1sP3JlZGlyZWN0PW5vKSBmb3I6PC9wPjxwIHN0eWxl
PSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1w
b3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPi0gSHVtYW4gKGBncmNoMzhgKTwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPi0gTW91c2UgKGBncmNtMzhgKTwvcD48cCBzdHlsZT0ibWFyZ2luLXRv
cDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPi0g
UmF0IChgcm5vcjZgKTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPi0gQ2hpY2tlbiAoYGdhbGdhbDRgKTwv
cD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTog
MS4yZW0gIWltcG9ydGFudDsiPi0gV29ybSAoYHdiY2VsMjM1YCk8L3A+PHAgc3R5bGU9Im1hcmdp
bi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7
Ij4tIEZseSAoYGJkZ3A2YCk8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRh
bnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJt
YXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0
YW50OyI+V2hlcmUgZWFjaCB0YWJsZSBjb250YWluczo8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6
IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+
PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9t
OiAxLjJlbSAhaW1wb3J0YW50OyI+LSBgZW5zZ2VuZWA6IEVuc2VtYmwgZ2VuZSBJRDwvcD48cCBz
dHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0g
IWltcG9ydGFudDsiPi0gYGVudHJlemA6IEVudHJleiBnZW5lIElEPC9wPjxwIHN0eWxlPSJtYXJn
aW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50
OyI+LSBgc3ltYm9sYDogR2VuZSBzeW1ib2w8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVt
ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4tIGBjaHJgOiBD
aHJvbW9zb21lPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJn
aW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+LSBgc3RhcnRgOiBTdGFydDwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPi0gYGVuZGA6IEVuZDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWlt
cG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPi0gYHN0cmFuZGA6IFN0
cmFuZDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJv
dHRvbTogMS4yZW0gIWltcG9ydGFudDsiPi0gYGJpb3R5cGVgOiBQcm90ZWluIGNvZGluZywgcHNl
dWRvZ2VuZSwgbWl0b2Nob25kcmlhbCB0Uk5BLCBldGMuPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9w
OiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+LSBg
ZGVzY3JpcHRpb25gOiBGdWxsIGdlbmUgbmFtZS9kZXNjcmlwdGlvbi48L3A+PHAgc3R5bGU9Im1h
cmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRh
bnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJn
aW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+QWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgdGFi
bGVzIGZvciBodW1hbiBhbmQgbW91c2UgKGBncmNoMzhfZ3RgIGFuZCBgZ3JjbTM4X2d0YCwgcmVz
cGVjdGl2ZWx5KSB0aGF0IGxpbmsgZW5zZW1ibCBnZW5lIElEcyB0byBlbnNlbWJsIHRyYW5zY3Jp
cHQgSURzLjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2lu
LWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6
IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyMg
VXNhZ2U8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1i
b3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAx
LjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+VGhlIHBh
Y2thZ2UgaXNuJ3Qgb24gQ1JBTiwgc28geW91J2xsIG5lZWQgZGV2dG9vbHMgdG8gaW5zdGFsbCBp
dC4mbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdp
bi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9w
OiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJy
PjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRv
bTogMS4yZW0gIWltcG9ydGFudDsiPmBgYHI8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVt
ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIElmIHlvdSBo
YXZlbid0IGFscmVhZHkgaW5zdGFsbGVkIGRldnRvb2xzLi4uPC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
aW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4y
ZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij4jIFVzZSBkZXZ0b29scyB0byBpbnN0YWxsIHRoZSBwYWNrYWdlPC9w
PjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAx
LjJlbSAhaW1wb3J0YW50OyI+ZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJzdGVwaGVudHVybmVy
L2Fubm90YWJsZXMiKTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPmBgYDwvcD48cCBzdHlsZT0ibWFyZ2lu
LXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsi
Pjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1i
b3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5JdCBpc24ndCBuZWNlc3NhcnkgdG8gbG9hZCBbZHBs
eXJdKGh0dHA6Ly93d3cuZ2V0dGluZ2dlbmV0aWNzZG9uZS5jb20vMjAxNC8wOC9kby15b3VyLWRh
dGEtamFuaXRvci13b3JrLWxpa2UtYm9zcy5odG1sKSwgYnV0IHRoZSB0YWJsZXMgYXJlIGB0Ymxf
ZGZgIGFuZCB3aWxsIHByaW50IG5pY2VseSBpZiB5b3UgaGF2ZSBkcGx5ciBsb2FkZWQuPC9wPjxw
IHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJl
bSAhaW1wb3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9y
dGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9
Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBv
cnRhbnQ7Ij5gYGByPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBt
YXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+bGlicmFyeShkcGx5cik8L3A+PHAgc3R5
bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFp
bXBvcnRhbnQ7Ij5saWJyYXJ5KGFubm90YWJsZXMpPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAx
LjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+YGBgPC9w
PjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAx
LjJlbSAhaW1wb3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWlt
cG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPkxvb2sgYXQgdGhlIGh1
bWFuIGdlbmVzIHRhYmxlIChub3RlIHRoZSBkZXNjcmlwdGlvbiBjb2x1bW4gZ2V0cyBjdXQgb2Zm
IGJlY2F1c2UgdGhlIHRhYmxlIGJlY29tZXMgdG9vIHdpZGUgdG8gcHJpbnQgbmljZWx5KTo8L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1w
b3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJyPjwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPmBgYHI8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7
IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5ncmNoMzg8L3A+PHAgc3R5bGU9Im1h
cmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRh
bnQ7Ij5gYGA8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdp
bi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9w
OiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+YGBg
PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9t
OiAxLjJlbSAhaW1wb3J0YW50OyI+IyMgU291cmNlOiBsb2NhbCBkYXRhIGZyYW1lIFs2Niw1MzEg
eCA5XTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJv
dHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjJm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9w
OiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+IyMg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtlbnNnZW5lIGVudHJleiAm
bmJzcDtzeW1ib2wgJm5ic3A7IGNociBzdGFydCAmbmJzcDsgZW5kIHN0cmFuZCAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDtiaW90eXBlPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAh
aW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+IyMgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KGNocikgJm5ic3A7KGludCkg
Jm5ic3A7IChjaHIpIChjaHIpIChpbnQpIChpbnQpICZuYnNwOyhpbnQpICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsoY2hyKTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0g
IWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDEgJm5ic3A7
RU5TRzAwMDAwMjEwMDQ5ICZuYnNwOyAmbmJzcDsgTkEgJm5ic3A7IE1ULVRGICZuYnNwOyAmbmJz
cDtNVCAmbmJzcDsgNTc3ICZuYnNwOyA2NDcgJm5ic3A7ICZuYnNwOyAmbmJzcDsxICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO010X3RSTkE8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVt
ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyAyICZuYnNw
O0VOU0cwMDAwMDIxMTQ1OSAmbmJzcDsgJm5ic3A7IE5BIE1ULVJOUjEgJm5ic3A7ICZuYnNwO01U
ICZuYnNwOyA2NDggJm5ic3A7MTYwMSAmbmJzcDsgJm5ic3A7ICZuYnNwOzEgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7TXRfclJOQTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWlt
cG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDMgJm5ic3A7RU5T
RzAwMDAwMjEwMDc3ICZuYnNwOyAmbmJzcDsgTkEgJm5ic3A7IE1ULVRWICZuYnNwOyAmbmJzcDtN
VCAmbmJzcDsxNjAyICZuYnNwOzE2NzAgJm5ic3A7ICZuYnNwOyAmbmJzcDsxICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwO010X3RSTkE8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFp
bXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyA0ICZuYnNwO0VO
U0cwMDAwMDIxMDA4MiAmbmJzcDsgJm5ic3A7IE5BIE1ULVJOUjIgJm5ic3A7ICZuYnNwO01UICZu
YnNwOzE2NzEgJm5ic3A7MzIyOSAmbmJzcDsgJm5ic3A7ICZuYnNwOzEgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7TXRfclJOQTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9y
dGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDUgJm5ic3A7RU5TRzAw
MDAwMjA5MDgyICZuYnNwOyAmbmJzcDsgTkEgJm5ic3A7TVQtVEwxICZuYnNwOyAmbmJzcDtNVCAm
bmJzcDszMjMwICZuYnNwOzMzMDQgJm5ic3A7ICZuYnNwOyAmbmJzcDsxICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwO010X3RSTkE8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBv
cnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyA2ICZuYnNwO0VOU0cw
MDAwMDE5ODg4OCAmbmJzcDsgNDUzNSAmbmJzcDtNVC1ORDEgJm5ic3A7ICZuYnNwO01UICZuYnNw
OzMzMDcgJm5ic3A7NDI2MiAmbmJzcDsgJm5ic3A7ICZuYnNwOzEgcHJvdGVpbl9jb2Rpbmc8L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij4jIyA3ICZuYnNwO0VOU0cwMDAwMDIxMDEwMCAmbmJzcDsgJm5ic3A7
IE5BICZuYnNwOyBNVC1USSAmbmJzcDsgJm5ic3A7TVQgJm5ic3A7NDI2MyAmbmJzcDs0MzMxICZu
YnNwOyAmbmJzcDsgJm5ic3A7MSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtNdF90Uk5BPC9w
PjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAx
LjJlbSAhaW1wb3J0YW50OyI+IyMgOCAmbmJzcDtFTlNHMDAwMDAyMTAxMDcgJm5ic3A7ICZuYnNw
OyBOQSAmbmJzcDsgTVQtVFEgJm5ic3A7ICZuYnNwO01UICZuYnNwOzQzMjkgJm5ic3A7NDQwMCAm
bmJzcDsgJm5ic3A7IC0xICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO010X3RSTkE8L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij4jIyA5ICZuYnNwO0VOU0cwMDAwMDIxMDExMiAmbmJzcDsgJm5ic3A7IE5B
ICZuYnNwOyBNVC1UTSAmbmJzcDsgJm5ic3A7TVQgJm5ic3A7NDQwMiAmbmJzcDs0NDY5ICZuYnNw
OyAmbmJzcDsgJm5ic3A7MSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtNdF90Uk5BPC9wPjxw
IHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJl
bSAhaW1wb3J0YW50OyI+IyMgMTAgRU5TRzAwMDAwMTk4NzYzICZuYnNwOyA0NTM2ICZuYnNwO01U
LU5EMiAmbmJzcDsgJm5ic3A7TVQgJm5ic3A7NDQ3MCAmbmJzcDs1NTExICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MSBwcm90ZWluX2NvZGluZzwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWlt
cG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIC4uICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC4uLiAmbmJzcDsgJm5ic3A7Li4uICZu
YnNwOyAmbmJzcDsgLi4uICZuYnNwOyAuLi4gJm5ic3A7IC4uLiAmbmJzcDsgLi4uICZuYnNwOyAm
bmJzcDsuLi4gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsuLi48L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij4jIyBWYXJpYWJsZXMgbm90IHNob3duOiBkZXNjcmlwdGlvbiAoY2hy
KTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRv
bTogMS4yZW0gIWltcG9ydGFudDsiPmBgYDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0g
IWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij5Mb29rIGF0IHRoZSBodW1hbiBnZW5lcy10by10cmFuc2NyaXB0cyB0YWJs
ZTo8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0
b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJl
bSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJyPjwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPmBgYHI8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBv
cnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5ncmNoMzhfZ3Q8L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij5gYGA8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRh
bnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJt
YXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0
YW50OyI+YGBgPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJn
aW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+IyMgU291cmNlOiBsb2NhbCBkYXRhIGZyYW1l
IFsyMTYsMTMzIHggMl08L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7
IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyZuYnNwOzwvcD48cCBzdHlsZT0i
bWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9y
dGFudDsiPiMjICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZW5zZ2Vu
ZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZW5zdHhwPC9wPjxwIHN0eWxlPSJt
YXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0
YW50OyI+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
KGNocikgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAoY2hyKTwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPiMjIDEgJm5ic3A7RU5TRzAwMDAwMjEwMDQ5IEVOU1QwMDAwMDM4NzMxNDwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPiMjIDIgJm5ic3A7RU5TRzAwMDAwMjExNDU5IEVOU1QwMDAwMDM4OTY4
MDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRv
bTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDMgJm5ic3A7RU5TRzAwMDAwMjEwMDc3IEVOU1QwMDAw
MDM4NzM0MjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2lu
LWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDQgJm5ic3A7RU5TRzAwMDAwMjEwMDgyIEVO
U1QwMDAwMDM4NzM0NzwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDUgJm5ic3A7RU5TRzAwMDAwMjA5
MDgyIEVOU1QwMDAwMDM4NjM0NzwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9y
dGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDYgJm5ic3A7RU5TRzAw
MDAwMTk4ODg4IEVOU1QwMDAwMDM2MTM5MDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0g
IWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDcgJm5ic3A7
RU5TRzAwMDAwMjEwMTAwIEVOU1QwMDAwMDM4NzM2NTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDog
MS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDgg
Jm5ic3A7RU5TRzAwMDAwMjEwMTA3IEVOU1QwMDAwMDM4NzM3MjwvcD48cCBzdHlsZT0ibWFyZ2lu
LXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsi
PiMjIDkgJm5ic3A7RU5TRzAwMDAwMjEwMTEyIEVOU1QwMDAwMDM4NzM3NzwvcD48cCBzdHlsZT0i
bWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9y
dGFudDsiPiMjIDEwIEVOU0cwMDAwMDE5ODc2MyBFTlNUMDAwMDAzNjE0NTM8L3A+PHAgc3R5bGU9
Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBv
cnRhbnQ7Ij4jIyAuLiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAu
Li4gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLi4uPC9wPjxwIHN0
eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAh
aW1wb3J0YW50OyI+YGBgPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50
OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFy
Z2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFu
dDsiPlRhYmxlcyBhcmUgYHRibF9kZmAsIHBpcGUtYWJsZSB3aXRoIGRwbHlyOjwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7
IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJn
aW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50
OyI+YGBgcjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2lu
LWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPmdyY2gzOCAlJmd0OyUmbmJzcDs8L3A+PHAgc3R5
bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFp
bXBvcnRhbnQ7Ij4mbmJzcDsgZmlsdGVyKGJpb3R5cGU9PSJwcm90ZWluX2NvZGluZyIgJmFtcDsg
Y2hyPT0iMSIpICUmZ3Q7JSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWlt
cG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiZuYnNwOyBzZWxlY3Qo
ZW5zZ2VuZSwgc3ltYm9sLCBjaHIsIHN0YXJ0LCBlbmQsIGRlc2NyaXB0aW9uKSAlJmd0OyUmbmJz
cDs8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0
b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4mbmJzcDsgaGVhZCAlJmd0OyUmbmJzcDs8L3A+PHAgc3R5
bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFp
bXBvcnRhbnQ7Ij4mbmJzcDsgcGFuZGVyOjpwYW5kb2MudGFibGUoc3BsaXQudGFibGU9MTAwLCBq
dXN0aWZ5PSJsbGxsbGwiLCBzdHlsZT0icm1hcmtkb3duIik8L3A+PHAgc3R5bGU9Im1hcmdpbi10
b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5g
YGA8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0
b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJl
bSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJyPjwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBv
cnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IGVuc2dlbmUgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgc3ltYm9sICZuYnNwOyB8IGNociAmbmJzcDsgfCBzdGFy
dCAmbmJzcDsgJm5ic3A7IHwgZW5kICZuYnNwOyAmbmJzcDsgJm5ic3A7IHw8L3A+PHAgc3R5bGU9
Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBv
cnRhbnQ7Ij58Oi0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLXw6LS0tLS0tfDotLS0tLS0tLS0t
fDotLS0tLS0tLS0tfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgRU5TRzAwMDAwMTU4MDE0IHwgU0xD
MzBBMiAmbmJzcDt8IDEgJm5ic3A7ICZuYnNwOyB8IDI2MDM3MjUyICZuYnNwO3wgMjYwNDYxMzMg
Jm5ic3A7fDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2lu
LWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgRU5TRzAwMDAwMTczNjczIHwgSEVTMyAmbmJz
cDsgJm5ic3A7IHwgMSAmbmJzcDsgJm5ic3A7IHwgNjI0NDE5MiAmbmJzcDsgfCA2MjQ1NTc4ICZu
YnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4t
Ym90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBFTlNHMDAwMDAyNDM3NDkgfCBaTVlNNk5CICZu
YnNwO3wgMSAmbmJzcDsgJm5ic3A7IHwgMzQ5ODE1MzUgJm5ic3A7fCAzNDk4NTM1MyAmbmJzcDt8
PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9t
OiAxLjJlbSAhaW1wb3J0YW50OyI+fCBFTlNHMDAwMDAxODk0MTAgfCBTSDJENSAmbmJzcDsgJm5i
c3A7fCAxICZuYnNwOyAmbmJzcDsgfCAyMDcxOTczMiAmbmJzcDt8IDIwNzMyODM3ICZuYnNwO3w8
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDExNjg2MyB8IEFEUFJITDIgJm5ic3A7fCAx
ICZuYnNwOyAmbmJzcDsgfCAzNjA4ODg3NSAmbmJzcDt8IDM2MDkzOTMyICZuYnNwO3w8L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDE4ODY0MyB8IFMxMDBBMTYgJm5ic3A7fCAxICZuYnNw
OyAmbmJzcDsgfCAxNTM2MDY4ODYgfCAxNTM2MTMxNDUgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRv
cDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxi
cj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0
b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5UYWJsZTogVGFibGUgY29udGludWVzIGJlbG93PC9wPjxw
IHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJl
bSAhaW1wb3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9y
dGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiZuYnNwOzwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7
IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IGRlc2NyaXB0aW9uICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHw8L3A+PHAgc3R5bGU9Im1hcmdp
bi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7
Ij58Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw8L3A+PHAgc3R5bGU9Im1hcmdp
bi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7
Ij58IHNvbHV0ZSBjYXJyaWVyIGZhbWlseSAzMCAoemluYyB0cmFuc3BvcnRlciksIG1lbWJlciAy
IFtTb3VyY2U6SEdOQyBTeW1ib2w7QWNjOkhHTkM6MTEwMTNdIHw8L3A+PHAgc3R5bGU9Im1hcmdp
bi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7
Ij58IGhlcyBmYW1pbHkgYkhMSCB0cmFuc2NyaXB0aW9uIGZhY3RvciAzIFtTb3VyY2U6SEdOQyBT
eW1ib2w7QWNjOkhHTkM6MjYyMjZdICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDt8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1w
b3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBaTVlNNiBuZWlnaGJv
ciBbU291cmNlOkhHTkMgU3ltYm9sO0FjYzpIR05DOjQwMDIxXSAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7fDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2lu
LWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgU0gyIGRvbWFpbiBjb250YWluaW5nIDUgW1Nv
dXJjZTpIR05DIFN5bWJvbDtBY2M6SEdOQzoyODgxOV0gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0g
IWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgQURQLXJpYm9z
eWxoeWRyb2xhc2UgbGlrZSAyIFtTb3VyY2U6SEdOQyBTeW1ib2w7QWNjOkhHTkM6MjEzMDRdICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9w
OiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBT
MTAwIGNhbGNpdW0gYmluZGluZyBwcm90ZWluIEExNiBbU291cmNlOkhHTkMgU3ltYm9sO0FjYzpI
R05DOjIwNDQxXSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7fDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDog
MS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyMgRXhhbXBsZSB3aXRoIFJOQS1zZXEgZGF0YTwvcD48cCBz
dHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0g
IWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRh
bnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5IZXJlJ3MgYW4gZXhhbXBsZSB3
aXRoIFJOQS1zZXEgZGF0YS4gU3BlY2lmaWNhbGx5LCBERVNlcTIgcmVzdWx0cyBmcm9tIHRoZSBb
YWlyd2F5XShodHRwczovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMvcmVsZWFzZS9kYXRhL2V4
cGVyaW1lbnQvaHRtbC9haXJ3YXkuaHRtbCkgcGFja2FnZSwgbWFkZSB0aWR5IHdpdGggW2Jpb2Jy
b29tXShodHRwOi8vd3d3LmJpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMvZGV2ZWwvYmlvYy9odG1s
L2Jpb2Jyb29tLmh0bWwpOjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFu
dDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1h
cmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRh
bnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJn
aW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+YGBgcjwvcD48cCBzdHlsZT0ibWFyZ2luLXRv
cDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMg
TG9hZCBsaWJyYXJpZXMgKGluc3RhbGwgd2l0aCBCaW9jb25kdWN0b3IgaWYgeW91IGRvbid0IGhh
dmUgdGhlbSk8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdp
bi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5saWJyYXJ5KERFU2VxMik8L3A+PHAgc3R5bGU9
Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBv
cnRhbnQ7Ij5saWJyYXJ5KGFpcndheSk8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFp
bXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0
eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAh
aW1wb3J0YW50OyI+IyBMb2FkIHRoZSBkYXRhIGFuZCBkbyB0aGUgUk5BLXNlcSBkYXRhIGFuYWx5
c2lzPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90
dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+ZGF0YShhaXJ3YXkpPC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
YWlyd2F5ID0gREVTZXFEYXRhU2V0KGFpcndheSwgZGVzaWduID0gfmNlbGwgKyBkZXgpPC9wPjxw
IHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJl
bSAhaW1wb3J0YW50OyI+YWlyd2F5ID0gREVTZXEoYWlyd2F5KTwvcD48cCBzdHlsZT0ibWFyZ2lu
LXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsi
PnJlcyA9IHJlc3VsdHMoYWlyd2F5KTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWlt
cG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5
bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFp
bXBvcnRhbnQ7Ij4jIHRpZHkgcmVzdWx0cyB3aXRoIGJpb2Jyb29tPC9wPjxwIHN0eWxlPSJtYXJn
aW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50
OyI+bGlicmFyeShiaW9icm9vbSk8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBv
cnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5yZXNfdGlkeSA9IHRpZHku
REVTZXFSZXN1bHRzKHJlcyk8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRh
bnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5oZWFkKHJlc190aWR5KTwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPmBgYDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9y
dGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9
Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBv
cnRhbnQ7Ij5gYGA8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1h
cmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyBTb3VyY2U6IGxvY2FsIGRhdGEgZnJh
bWUgWzYgeCA3XTwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFy
Z2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjJm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJn
aW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50
OyI+IyMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Z2Vu
ZSAmbmJzcDsgJm5ic3A7YmFzZU1lYW4gJm5ic3A7ICZuYnNwO2VzdGltYXRlICZuYnNwOyBzdGRl
cnJvciAmbmJzcDtzdGF0aXN0aWM8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBv
cnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAoY2hyKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAo
ZGJsKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAoZGJsKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyhkYmwp
ICZuYnNwOyAmbmJzcDsgJm5ic3A7KGRibCk8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVt
ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyAxIEVOU0cw
MDAwMDAwMDAwMyA3MDguNjAyMTY5NyAmbmJzcDswLjM3NDI0OTk4IDAuMDk4NzMxMDcgJm5ic3A7
My43OTA2MDAwPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJn
aW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+IyMgMiBFTlNHMDAwMDAwMDAwMDUgJm5ic3A7
IDAuMDAwMDAwMCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7TkEgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IE5BICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBOQTwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPiMjIDMgRU5TRzAwMDAwMDAwNDE5IDUyMC4yOTc5MDA2IC0wLjIwMjE1
NTUwIDAuMTA5Mjk4OTkgLTEuODQ5NTY0MjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0g
IWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIDQgRU5TRzAw
MDAwMDAwNDU3IDIzNy4xNjMwMzY4IC0wLjAzNjI0ODI2IDAuMTM2ODQyNTggLTAuMjY0ODkwMjwv
cD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTog
MS4yZW0gIWltcG9ydGFudDsiPiMjIDUgRU5TRzAwMDAwMDAwNDYwICZuYnNwOzU3LjkzMjYzMzEg
Jm5ic3A7MC4wODUyMzM3MCAwLjI0NjU0NDAwICZuYnNwOzAuMzQ1NzE0MDwvcD48cCBzdHlsZT0i
bWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9y
dGFudDsiPiMjIDYgRU5TRzAwMDAwMDAwOTM4ICZuYnNwOyAwLjMxODA5ODQgJm5ic3A7MC4xMTU1
NTk2MiAwLjE0NjMwNTIzICZuYnNwOzAuNzg5ODUzMDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDog
MS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiMjIFZh
cmlhYmxlcyBub3Qgc2hvd246IHAudmFsdWUgKGRibCksIHAuYWRqdXN0ZWQgKGRibCk8L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij5gYGA8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRh
bnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJt
YXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0
YW50OyI+Tm93LCBtYWtlIGEgdGFibGUgd2l0aCB0aGUgcmVzdWx0cyAodW5mb3J0dW5hdGVseSwg
aXQnbGwgYmUgc3BsaXQgaW4gdGhpcyBkaXNwbGF5LCBidXQgeW91IGNhbiB3cml0ZSB0aGlzIHRv
IGZpbGUgdG8gc2VlIGFsbCB0aGUgY29sdW1ucyBpbiBhIHNpbmdsZSByb3cpOjwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7
IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJn
aW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50
OyI+YGBgcjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2lu
LWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnJlc190aWR5ICUmZ3Q7JSZuYnNwOzwvcD48cCBz
dHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0g
IWltcG9ydGFudDsiPiZuYnNwOyBhcnJhbmdlKHAuYWRqdXN0ZWQpICUmZ3Q7JSZuYnNwOzwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPiZuYnNwOyBoZWFkKDIwKSAlJmd0OyUmbmJzcDs8L3A+PHAgc3R5bGU9
Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBv
cnRhbnQ7Ij4mbmJzcDsgaW5uZXJfam9pbihncmNoMzgsIGJ5PWMoImdlbmUiPSJlbnNnZW5lIikp
ICUmZ3Q7JSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiZuYnNwOyBzZWxlY3QoZ2VuZSwgZXN0
aW1hdGUsIHAuYWRqdXN0ZWQsIHN5bWJvbCwgZGVzY3JpcHRpb24pICUmZ3Q7JSZuYnNwOzwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPiZuYnNwOyBwYW5kZXI6OnBhbmRvYy50YWJsZShzcGxpdC50YWJsZT0x
MDAsIGp1c3RpZnk9ImxycmxsIiwgc3R5bGU9InJtYXJrZG93biIpPC9wPjxwIHN0eWxlPSJtYXJn
aW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50
OyI+YGBgPC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4t
Ym90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDog
MS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAh
aW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBnZW5lICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgZXN0aW1hdGUgfCAm
bmJzcDsgcC5hZGp1c3RlZCB8IHN5bWJvbCAmbmJzcDsgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRv
cDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnw6
LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLXw8
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDE1MjU4MyB8ICZuYnNwOyAmbmJzcDsgLTQu
MzE2IHwgJm5ic3A7IDQuNzUzZS0xMzQgfCBTUEFSQ0wxICZuYnNwO3w8L3A+PHAgc3R5bGU9Im1h
cmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRh
bnQ7Ij58IEVOU0cwMDAwMDE2NTk5NSB8ICZuYnNwOyAmbmJzcDsgLTMuMTg5IHwgJm5ic3A7ICZu
YnNwOzEuNDRlLTEzMyB8IENBQ05CMiAmbmJzcDsgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDog
MS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgRU5T
RzAwMDAwMTAxMzQ3IHwgJm5ic3A7ICZuYnNwOyAtMy42MTggfCAmbmJzcDsgNi42MTllLTEyNSB8
IFNBTUhEMSAmbmJzcDsgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFu
dDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgRU5TRzAwMDAwMTIwMTI5IHwg
Jm5ic3A7ICZuYnNwOyAtMi44NzEgfCAmbmJzcDsgNi42MTllLTEyNSB8IERVU1AxICZuYnNwOyAm
bmJzcDt8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4t
Ym90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBFTlNHMDAwMDAxODkyMjEgfCAmbmJzcDsgJm5i
c3A7IC0zLjIzMSB8ICZuYnNwOyA5LjQ2OGUtMTE5IHwgTUFPQSAmbmJzcDsgJm5ic3A7IHw8L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDIxMTQ0NSB8ICZuYnNwOyAmbmJzcDsgLTMuNTUz
IHwgJm5ic3A7ICZuYnNwOzMuOTRlLTEwNyB8IEdQWDMgJm5ic3A7ICZuYnNwOyB8PC9wPjxwIHN0
eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAh
aW1wb3J0YW50OyI+fCBFTlNHMDAwMDAxNTcyMTQgfCAmbmJzcDsgJm5ic3A7IC0xLjk0OSB8ICZu
YnNwOyAmbmJzcDs4Ljc0ZS0xMDIgfCBTVEVBUDIgJm5ic3A7IHw8L3A+PHAgc3R5bGU9Im1hcmdp
bi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7
Ij58IEVOU0cwMDAwMDE2MjYxNCB8ICZuYnNwOyAmbmJzcDsgLTIuMDAzIHwgJm5ic3A7ICZuYnNw
OzMuMDUyZS05OCB8IE5FWE4gJm5ic3A7ICZuYnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9w
OiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBF
TlNHMDAwMDAxMjUxNDggfCAmbmJzcDsgJm5ic3A7IC0yLjE2NyB8ICZuYnNwOyAmbmJzcDsxLjc4
M2UtOTIgfCBNVDJBICZuYnNwOyAmbmJzcDsgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4y
ZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgRU5TRzAw
MDAwMTU0NzM0IHwgJm5ic3A7ICZuYnNwOyAtMi4yODYgfCAmbmJzcDsgJm5ic3A7NC41MjJlLTg2
IHwgQURBTVRTMSAmbmJzcDt8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0
YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBFTlNHMDAwMDAxMzkxMzIg
fCAmbmJzcDsgJm5ic3A7IC0yLjE4MSB8ICZuYnNwOyAmbmJzcDsyLjUwMWUtODMgfCBGR0Q0ICZu
YnNwOyAmbmJzcDsgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgRU5TRzAwMDAwMTYyNDkzIHwgJm5i
c3A7ICZuYnNwOyAtMS44NTggfCAmbmJzcDsgJm5ic3A7NC4yMTVlLTgzIHwgUERQTiAmbmJzcDsg
Jm5ic3A7IHw8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdp
bi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDE2MjY5MiB8ICZuYnNwOyAm
bmJzcDsgJm5ic3A7My40NTMgfCAmbmJzcDsgJm5ic3A7My41NjNlLTgyIHwgVkNBTTEgJm5ic3A7
ICZuYnNwO3w8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdp
bi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDE3OTA5NCB8ICZuYnNwOyAm
bmJzcDsgLTMuMDQ0IHwgJm5ic3A7ICZuYnNwOzEuMTk5ZS04MSB8IFBFUjEgJm5ic3A7ICZuYnNw
OyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90
dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBFTlNHMDAwMDAxMzQyNDMgfCAmbmJzcDsgJm5ic3A7
IC0yLjE0OSB8ICZuYnNwOyAmbmJzcDsgMi43M2UtODEgfCBTT1JUMSAmbmJzcDsgJm5ic3A7fDwv
cD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTog
MS4yZW0gIWltcG9ydGFudDsiPnwgRU5TRzAwMDAwMTYzODg0IHwgJm5ic3A7ICZuYnNwOyAtNC4w
NzkgfCAmbmJzcDsgJm5ic3A7MS4wNzNlLTgwIHwgS0xGMTUgJm5ic3A7ICZuYnNwO3w8L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDE3ODY5NSB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7Mi40
NDYgfCAmbmJzcDsgJm5ic3A7Ni4yNzVlLTc1IHwgS0NURDEyICZuYnNwOyB8PC9wPjxwIHN0eWxl
PSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1w
b3J0YW50OyI+fCBFTlNHMDAwMDAxNDYyNTAgfCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAyLjY0IHwg
Jm5ic3A7ICZuYnNwOzEuMTQzZS02OSB8IFBSU1MzNSAmbmJzcDsgfDwvcD48cCBzdHlsZT0ibWFy
Z2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFu
dDsiPnwgRU5TRzAwMDAwMTk4NjI0IHwgJm5ic3A7ICZuYnNwOyAtMi43ODQgfCAmbmJzcDsgJm5i
c3A7MS43MDdlLTY5IHwgQ0NEQzY5ICZuYnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAx
LjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBFTlNH
MDAwMDAxNDg4NDggfCAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuNzgzIHwgJm5ic3A7ICZuYnNwOzEu
NzYyZS02OSB8IEFEQU0xMiAmbmJzcDsgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0g
IWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij5UYWJsZTogVGFibGUgY29udGludWVzIGJlbG93PC9wPjxwIHN0eWxlPSJt
YXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0
YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFy
Z2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2lu
LXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsi
Pjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1i
b3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IGRlc2NyaXB0aW9uICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
fDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw8L3A+PHAgc3R5bGU9Im1hcmdp
bi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7
Ij58IFNQQVJDLWxpa2UgMSAoaGV2aW4pIFtTb3VyY2U6SEdOQyBTeW1ib2w7QWNjOkhHTkM6MTEy
MjBdICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7fDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFu
dDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgY2FsY2l1bSBjaGFubmVsLCB2
b2x0YWdlLWRlcGVuZGVudCwgYmV0YSAyIHN1YnVuaXQgW1NvdXJjZTpIR05DIFN5bWJvbDtBY2M6
SEdOQzoxNDAyXSAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9w
OiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBT
QU0gZG9tYWluIGFuZCBIRCBkb21haW4gMSBbU291cmNlOkhHTkMgU3ltYm9sO0FjYzpIR05DOjE1
OTI1XSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3w8L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij58IGR1YWwgc3BlY2lmaWNpdHkgcGhvc3BoYXRhc2UgMSBbU291cmNl
OkhHTkMgU3ltYm9sO0FjYzpIR05DOjMwNjRdICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4t
Ym90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBtb25vYW1pbmUgb3hpZGFzZSBBIFtTb3VyY2U6
SEdOQyBTeW1ib2w7QWNjOkhHTkM6NjgzM10gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7fDwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPnwgZ2x1dGF0aGlvbmUgcGVyb3hpZGFzZSAzIFtTb3VyY2U6SEdOQyBTeW1ib2w7
QWNjOkhHTkM6NDU1NV0gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IHw8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7
IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IFNURUFQIGZhbWlseSBtZW1iZXIg
MiwgbWV0YWxsb3JlZHVjdGFzZSBbU291cmNlOkhHTkMgU3ltYm9sO0FjYzpIR05DOjE3ODg1XSAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHw8
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij58IG5leGlsaW4gKEYgYWN0aW4gYmluZGluZyBwcm90ZWluKSBb
U291cmNlOkhHTkMgU3ltYm9sO0FjYzpIR05DOjI5NTU3XSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHw8
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij58IG1ldGFsbG90aGlvbmVpbiAyQSBbU291cmNlOkhHTkMgU3lt
Ym9sO0FjYzpIR05DOjc0MDZdICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJn
aW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50
OyI+fCBBREFNIG1ldGFsbG9wZXB0aWRhc2Ugd2l0aCB0aHJvbWJvc3BvbmRpbiB0eXBlIDEgbW90
aWYsIDEgW1NvdXJjZTpIR05DIFN5bWJvbDtBY2M6SEdOQzoyMTddIHw8L3A+PHAgc3R5bGU9Im1h
cmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRh
bnQ7Ij58IEZZVkUsIFJob0dFRiBhbmQgUEggZG9tYWluIGNvbnRhaW5pbmcgNCBbU291cmNlOkhH
TkMgU3ltYm9sO0FjYzpIR05DOjE5MTI1XSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHw8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVt
ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IHBvZG9wbGFu
aW4gW1NvdXJjZTpIR05DIFN5bWJvbDtBY2M6SEdOQzoyOTYwMl0gJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3w8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEu
MmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IHZhc2N1
bGFyIGNlbGwgYWRoZXNpb24gbW9sZWN1bGUgMSBbU291cmNlOkhHTkMgU3ltYm9sO0FjYzpIR05D
OjEyNjYzXSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHw8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEu
MmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IHBlcmlv
ZCBjaXJjYWRpYW4gY2xvY2sgMSBbU291cmNlOkhHTkMgU3ltYm9sO0FjYzpIR05DOjg4NDVdICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8PC9w
PjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAx
LjJlbSAhaW1wb3J0YW50OyI+fCBzb3J0aWxpbiAxIFtTb3VyY2U6SEdOQyBTeW1ib2w7QWNjOkhH
TkM6MTExODZdICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt8
PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9t
OiAxLjJlbSAhaW1wb3J0YW50OyI+fCBLcnVwcGVsLWxpa2UgZmFjdG9yIDE1IFtTb3VyY2U6SEdO
QyBTeW1ib2w7QWNjOkhHTkM6MTQ1MzZdICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAx
LjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBwb3Rh
c3NpdW0gY2hhbm5lbCB0ZXRyYW1lcml6YXRpb24gZG9tYWluIGNvbnRhaW5pbmcgMTIgW1NvdXJj
ZTpIR05DIFN5bWJvbDtBY2M6SEdOQzoxNDY3OF0gJm5ic3A7fDwvcD48cCBzdHlsZT0ibWFyZ2lu
LXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsi
PnwgcHJvdGVhc2UsIHNlcmluZSwgMzUgW1NvdXJjZTpIR05DIFN5bWJvbDtBY2M6SEdOQzoyMTM4
N10gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDt8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50
OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBjb2lsZWQtY29pbCBkb21haW4g
Y29udGFpbmluZyA2OSBbU291cmNlOkhHTkMgU3ltYm9sO0FjYzpIR05DOjI0NDg3XSAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwO3w8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBv
cnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IEFEQU0gbWV0YWxsb3Bl
cHRpZGFzZSBkb21haW4gMTIgW1NvdXJjZTpIR05DIFN5bWJvbDtBY2M6SEdOQzoxOTBdICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAx
LjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJyPjwv
cD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTog
MS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFp
bXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4jIyMgRXhwbG9yZSE8
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAh
aW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+VGhpcyBkYXRhIGNh
biBhbHNvIGJlIHVzZWQgZm9yIHRveWluZyBhcm91bmQgd2l0aCBbZHBseXIgdmVyYnNdKGh0dHA6
Ly93d3cuZ2V0dGluZ2dlbmV0aWNzZG9uZS5jb20vMjAxNC8wOC9kby15b3VyLWRhdGEtamFuaXRv
ci13b3JrLWxpa2UtYm9zcy5odG1sKSBhbmQgZ2VuZXJhbGx5IGdldHRpbmcgYSBzZW5zZSBvZiB3
aGF0J3MgaW4gaGVyZS4gRmlyc3QsIHRldCBzb21lIGhlbHAuPC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJv
dHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEu
MmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5gYGByPC9w
PjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAx
LjJlbSAhaW1wb3J0YW50OyI+bHMoInBhY2thZ2U6YW5ub3RhYmxlcyIpPC9wPjxwIHN0eWxlPSJt
YXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0
YW50OyI+P2dyY2gzODwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPmBgYDwvcD48cCBzdHlsZT0ibWFyZ2lu
LXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsi
Pjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1i
b3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5MZXQncyBqb2luIHRoZSB0cmFuc2NyaXB0IHRhYmxl
IHRvIHRoZSBnZW5lIHRhYmxlLiZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0g
IWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0
YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+YGBgcjwvcD48cCBzdHlsZT0i
bWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9y
dGFudDsiPmd0ID0gZ3JjaDM4X2d0ICUmZ3Q7JSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2luLXRv
cDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiZu
YnNwOyBpbm5lcl9qb2luKGdyY2gzOCwgYnk9ImVuc2dlbmUiKTwvcD48cCBzdHlsZT0ibWFyZ2lu
LXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsi
PmBgYDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJv
dHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEu
MmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5Ob3csIGxl
dCdzICoqZmlsdGVyKiogdG8gZ2V0IG9ubHkgcHJvdGVpbi1jb2RpbmcgZ2VuZXMsICoqZ3JvdXAg
YnkqKiB0aGUgZW5zZW1ibCBnZW5lIElELCAqKnN1bW1hcml6ZSoqIHRvIGNvdW50IGhvdyBtYW55
IHRyYW5zY3JpcHRzIGFyZSBpbiBlYWNoIGdlbmUsICoqaW5uZXIgam9pbioqIHRoYXQgcmVzdWx0
IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGdlbmUgbGlzdCwgc28gd2UgY2FuICoqc2VsZWN0Kiogb3V0
IG9ubHkgdGhlIGdlbmUsIG51bWJlciBvZiB0cmFuc2NyaXB0cywgc3ltYm9sLCBhbmQgZGVzY3Jp
cHRpb24sICoqbXV0YXRlKiogdGhlIGRlc2NyaXB0aW9uIGNvbHVtbiBzbyB0aGF0IGl0IGlzbid0
IHNvIHdpZGUgdGhhdCBpdCdsbCBicmVhayB0aGUgZGlzcGxheSwgKiphcnJhbmdlKiogdGhlIHJl
dHVybmVkIGRhdGEgZGVzY2VuZGluZyBieSB0aGUgbnVtYmVyIG9mIHRyYW5zY3JpcHRzIHBlciBn
ZW5lLCAqKmhlYWQqKiB0byBnZXQgdGhlIHRvcCAxMCByZXN1bHRzLCBhbmQgb3B0aW9uYWxseSwg
cGlwZSB0aGF0IHRvIGZ1cnRoZXIgdXRpbGl0aWVzIHRvIG91dHB1dCBhIG5pY2UgSFRNTCB0YWJs
ZS48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0
b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJl
bSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+PGJyPjwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPmBgYHI8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBv
cnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5ndCAlJmd0OyUmbmJzcDs8
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij4mbmJzcDsgZmlsdGVyKGJpb3R5cGU9PSJwcm90ZWluX2NvZGlu
ZyIpICUmZ3Q7JSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFu
dDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiZuYnNwOyBncm91cF9ieShlbnNn
ZW5lKSAlJmd0OyUmbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRh
bnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4mbmJzcDsgc3VtbWFyaXplKG50
eHBzPW5fZGlzdGluY3QoZW5zdHhwKSkgJSZndDslJm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
Jm5ic3A7IGlubmVyX2pvaW4oZ3JjaDM4LCBieT0iZW5zZ2VuZSIpICUmZ3Q7JSZuYnNwOzwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPiZuYnNwOyBzZWxlY3QoZW5zZ2VuZSwgbnR4cHMsIHN5bWJvbCwgZGVz
Y3JpcHRpb24pICUmZ3Q7JSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWlt
cG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPiZuYnNwOyBtdXRhdGUo
ZGVzY3JpcHRpb249c3Vic3RyKGRlc2NyaXB0aW9uLCAxLCAyMCkpICUmZ3Q7JSZuYnNwOzwvcD48
cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4y
ZW0gIWltcG9ydGFudDsiPiZuYnNwOyBhcnJhbmdlKGRlc2MobnR4cHMpKSAlJmd0OyUmbmJzcDs8
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij4mbmJzcDsgaGVhZCgxMCkgJSZndDslJm5ic3A7PC9wPjxwIHN0
eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAh
aW1wb3J0YW50OyI+Jm5ic3A7IHBhbmRlcjo6cGFuZG9jLnRhYmxlKHNwbGl0LnRhYmxlPTEwMCwg
anVzdGlmeT0ibHJsbCIsIHN0eWxlPSJybWFya2Rvd24iKTwvcD48cCBzdHlsZT0ibWFyZ2luLXRv
cDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPmBg
YDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRv
bTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVt
ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxw
IHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJl
bSAhaW1wb3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9y
dGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgZW5zZ2VuZSAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgfCAmbmJzcDsgbnR4cHMgfCBzeW1ib2wgJm5ic3A7IHwgZGVz
Y3JpcHRpb24gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3w8L3A+PHAgc3R5bGU9
Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBv
cnRhbnQ7Ij58Oi0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS06fDotLS0tLS0tLS18Oi0tLS0tLS0t
LS0tLS0tLS0tLS0tLXw8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7
IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDE2NTc5NSB8ICZu
YnNwOyAmbmJzcDsgJm5ic3A7NzcgfCBORFJHMiAmbmJzcDsgJm5ic3A7fCBORFJHIGZhbWlseSBt
ZW1iZXIgMiB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJn
aW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBFTlNHMDAwMDAyMDUzMzYgfCAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzc3IHwgQURHUkcxICZuYnNwOyB8IGFkaGVzaW9uIEcgcHJvdGVpbi1jIHw8
L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206
IDEuMmVtICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAwMDE5NjYyOCB8ICZuYnNwOyAmbmJzcDsgJm5i
c3A7NzUgfCBUQ0Y0ICZuYnNwOyAmbmJzcDsgfCB0cmFuc2NyaXB0aW9uIGZhY3RvciB8PC9wPjxw
IHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJl
bSAhaW1wb3J0YW50OyI+fCBFTlNHMDAwMDAxNjEyNDkgfCAmbmJzcDsgJm5ic3A7ICZuYnNwOzY4
IHwgRE1LTiAmbmJzcDsgJm5ic3A7IHwgZGVybW9raW5lIFtTb3VyY2U6SEcgfDwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPnwgRU5TRzAwMDAwMTU0NTU2IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDs2NCB8IFNP
UkJTMiAmbmJzcDsgfCBzb3JiaW4gYW5kIFNIMyBkb21haSB8PC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
fCBFTlNHMDAwMDAxNjY0NDQgfCAmbmJzcDsgJm5ic3A7ICZuYnNwOzYyIHwgU1Q1ICZuYnNwOyAm
bmJzcDsgJm5ic3A7fCBzdXBwcmVzc2lvbiBvZiB0dW1vciB8PC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
fCBFTlNHMDAwMDAyMDQ1ODAgfCAmbmJzcDsgJm5ic3A7ICZuYnNwOzU4IHwgRERSMSAmbmJzcDsg
Jm5ic3A7IHwgZGlzY29pZGluIGRvbWFpbiByZWMgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDog
MS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnwgRU5T
RzAwMDAwMDg3NDYwIHwgJm5ic3A7ICZuYnNwOyAmbmJzcDs1NyB8IEdOQVMgJm5ic3A7ICZuYnNw
OyB8IEdOQVMgY29tcGxleCBsb2N1cyBbIHw8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVt
ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij58IEVOU0cwMDAw
MDE2OTM5OCB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7NTcgfCBQVEsyICZuYnNwOyAmbmJzcDsgfCBw
cm90ZWluIHR5cm9zaW5lIGtpbiB8PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1w
b3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+fCBFTlNHMDAwMDAxMDQ1
MjkgfCAmbmJzcDsgJm5ic3A7ICZuYnNwOzU2IHwgRUVGMUQgJm5ic3A7ICZuYnNwO3wgZXVrYXJ5
b3RpYyB0cmFuc2xhdGkgfDwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFu
dDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1h
cmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRh
bnQ7Ij5MZXQncyBsb29rIHVwIERNS04gKGRlcm1raW5lKSBpbiBFbnNlbWJsLiBTZWFyY2ggRW5z
ZW1ibCBmb3IgRU5TRzAwMDAwMTYxMjQ5LCBvciB1c2UgW3RoaXMgZGlyZWN0IGxpbmtdKGh0dHA6
Ly93d3cuZW5zZW1ibC5vcmcvSG9tb19zYXBpZW5zL0dlbmUvU3VtbWFyeT9nPUVOU0cwMDAwMDE2
MTI0OSkuIFlvdSBjYW4gYnJvd3NlIHRoZSB0YWJsZSBvciBncmFwaGljIHRvIHNlZSB0aGUgc3Bs
aWNpbmcgY29tcGxleGl0eSBpbiB0aGlzIGdlbmUuJm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJv
dHRvbTogMS4yZW0gIWltcG9ydGFudDsiPnh4LWJyb3dzZXItcGhvdG8taGVyZTwvcD48cCBzdHls
ZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWlt
cG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7
IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5PciwgbGV0J3MgZG8gc29tZXRoaW5n
IGRpZmZlcmVudC4gTGV0J3MgZ3JvdXAgdGhlIGRhdGEgYnkgd2hhdCB0eXBlIG9mIGdlbmUgaXQg
aXMgKGUuZy4sIHByb3RlaW4gY29kaW5nLCBwc2V1ZG9nZW5lLCBldGMpLCBnZXQgdGhlIG51bWJl
ciBvZiBnZW5lcyBpbiBlYWNoIGNhdGVnb3J5LCBhbmQgcGxvdCB0aGUgdG9wIDIwLiZuYnNwOzwv
cD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTog
MS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFp
bXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0
eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAh
aW1wb3J0YW50OyI+YGBgcjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFu
dDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPmxpYnJhcnkoZ2dwbG90Mik8L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij5ncmNoMzggJSZndDslJm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW4t
dG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+
Jm5ic3A7IGdyb3VwX2J5KGJpb3R5cGUpICUmZ3Q7JSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2lu
LXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsi
PiZuYnNwOyBzdW1tYXJpemUobj1uX2Rpc3RpbmN0KGVuc2dlbmUpKSAlJmd0OyUmbmJzcDs8L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij4mbmJzcDsgYXJyYW5nZShkZXNjKG4pKSAlJmd0OyUmbmJzcDs8L3A+
PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEu
MmVtICFpbXBvcnRhbnQ7Ij4mbmJzcDsgaGVhZCgyMCkgJSZndDslJm5ic3A7PC9wPjxwIHN0eWxl
PSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1w
b3J0YW50OyI+Jm5ic3A7IGdncGxvdChhZXMocmVvcmRlcihiaW90eXBlLCBuKSwgbikpICsmbmJz
cDs8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0
b206IDEuMmVtICFpbXBvcnRhbnQ7Ij4mbmJzcDsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSAr
Jm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4t
Ym90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+Jm5ic3A7IHhsYWIoIlR5cGUiKSArJm5ic3A7PC9w
PjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAx
LjJlbSAhaW1wb3J0YW50OyI+Jm5ic3A7IHRoZW1lX2J3KCkgKyZuYnNwOzwvcD48cCBzdHlsZT0i
bWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9y
dGFudDsiPiZuYnNwOyBjb29yZF9mbGlwKCk8L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDEuMmVt
ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7Ij5gYGA8L3A+PHAg
c3R5bGU9Im1hcmdpbi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVt
ICFpbXBvcnRhbnQ7Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0
YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+IVtdKF9hbm5vdGFibGVzX2Zp
bGVzL2ZpZ3VyZS1odG1sL3VubmFtZWQtY2h1bmstMTEtMS5wbmcpJm5ic3A7PC9wPjxwIHN0eWxl
PSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAxLjJlbSAhaW1w
b3J0YW50OyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMS4yZW0gIWltcG9ydGFudDsg
bWFyZ2luLWJvdHRvbTogMS4yZW0gIWltcG9ydGFudDsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdp
bi10b3A6IDEuMmVtICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDEuMmVtICFpbXBvcnRhbnQ7
Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxLjJlbSAhaW1wb3J0YW50OyBtYXJnaW4t
Ym90dG9tOiAxLjJlbSAhaW1wb3J0YW50OyI+KipbQW5ub3RhYmxlczogUiBkYXRhIHBhY2thZ2Ug
Zm9yIGFubm90YXRpbmcvY29udmVydGluZyBHZW5lIElEc10oaHR0cHM6Ly9naXRodWIuY29tL3N0
ZXBoZW50dXJuZXIvYW5ub3RhYmxlcykqKjwvcD48ZGl2Pjxicj48L2Rpdj48L2Rpdj4=">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com4tag:blogger.com,1999:blog-6232819486261696035.post-17322894976536580922015-11-02T08:50:00.001-06:002015-11-02T15:49:30.858-06:00Software from CSHL Genome Informatics 2015<div>
I just returned from the <a href="https://meetings.cshl.edu/abstracts.aspx?meet=info&year=15" target="_blank">Genome Informatics meeting</a> at Cold Spring Harbor. This was, hands down, the best scientific conference I've been to in years. The quality of the talks and posters was excellent, and it was great meeting in person many of the scientists and developers whose tools and software I use on a daily basis. To get a sense of what the meeting was about, 140 characters at a time, you can access all the Tweets sent <a href="https://twitter.com/search?f=tweets&vertical=default&q=%23gi2015%20since%3A2015-10-28%20until%3A2015-10-31&src=typd" target="_blank">Oct 28-31 2015 tagged #gi2015 at this link</a>.<br />
<br />
Below is a very short list of software that was presented at GI2015. This is only a tiny slice of the tools and methods that were presented at the meeting, and the list is highly biased toward tools that I personally find interesting or useful to my own work (please don't be offended if I omitted your stuff, and feel free to mention it in the comments).<br />
<br /></div>
<div>
<b>Monocle</b>: Software for analyzing single-cell RNA-seq data<br />
<u>Paper</u>: <a href="http://www.nature.com/nbt/journal/v32/n4/full/nbt.2859.html">http://www.nature.com/nbt/journal/v32/n4/full/nbt.2859.html</a><br />
<u>Software</u>: <a href="http://cole-trapnell-lab.github.io/monocle-release/">http://cole-trapnell-lab.github.io/monocle-release/</a><br />
<br />
<b>Kallisto</b>: very fast RNA-seq transcript abundance estimation using pseudoalignment.<br />
<u>Preprint</u>: <a href="http://arxiv.org/abs/1505.02710">http://arxiv.org/abs/1505.02710</a><br />
<u>Software</u>: <a href="http://pachterlab.github.io/kallisto/about.html">http://pachterlab.github.io/kallisto/about.html</a><br />
<br />
<b>Sleuth</b>: R package for analyzing & reporting differential expression analysis from transcript abundances estimated with Kallisto.<br />
<u>Preprint</u>: <i>coming soon?</i><br />
<u>Software</u>: <a href="http://pachterlab.github.io/sleuth/about.html">http://pachterlab.github.io/sleuth/about.html</a><br />
<u>See also</u>: The bear's lair (<a href="http://lair.berkeley.edu/">http://lair.berkeley.edu/</a>): reanalysis of published RNA-seq studies using kallisto+sleuth.<br />
<br /></div>
<div>
<b>QoRTs</b>:<b> </b>Quality of RNA-Seq Toolset. Toolkit for QC, gene/junction counting, and other miscellaneous downstream processing from RNA-seq alignments.</div>
<div>
<u>Software</u>: <a href="https://github.com/hartleys/QoRTs">https://github.com/hartleys/QoRTs</a></div>
<div>
<u>Paper</u>: <a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4506620/">http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4506620/</a></div>
<div>
<br /></div>
<div>
<b>JunctionSeq</b>:<b> </b>R package for testing differential junction usage with RNA-seq data.</div>
<div>
<u>Software</u>: <a href="https://github.com/hartleys/JunctionSeq">https://github.com/hartleys/JunctionSeq</a></div>
<div>
<u>Vignette</u>: <a href="http://hartleys.github.io/JunctionSeq/doc/JunctionSeq.pdf">http://hartleys.github.io/JunctionSeq/doc/JunctionSeq.pdf</a></div>
<div>
<br />
<b>HISAT2</b>: RNA-seq alignment against populations of genomes (aligns DNA also).<br />
<u>Software</u>: <a href="http://ccb.jhu.edu/software/hisat2/index.shtml">http://ccb.jhu.edu/software/hisat2/index.shtml</a><br />
<br />
<b>Rail</b>: software for aligning many-sample RNA-seq data, producing alignments, genome coverage bigWigs, and splice junction BED files.<br />
<u>Software</u>: <a href="http://rail.bio/">http://rail.bio</a><br />
<u>Preprint</u>: <a href="http://biorxiv.org/content/early/2015/08/11/019067">http://biorxiv.org/content/early/2015/08/11/019067</a><br />
<br />
<b>LobSTR</b>: genotype short tandem repeats from NGS data.<br />
<u>Software</u>: <a href="http://melissagymrek.com/lobstr-code/">http://melissagymrek.com/lobstr-code/</a><br />
<u>Paper</u>: <a href="http://www.ncbi.nlm.nih.gov/pubmed/22522390">http://www.ncbi.nlm.nih.gov/pubmed/22522390</a></div>
<div>
<br />
<b>Basset</b>: convolutional neural networks for learning functional/regulatory features of DNA sequence.<br />
<u>Software</u>: <a href="https://github.com/davek44/Basset">https://github.com/davek44/Basset</a><br />
<u>Preprint</u>: <a href="http://biorxiv.org/content/early/2015/10/05/028399">http://biorxiv.org/content/early/2015/10/05/028399</a><br />
<br />
<b>Genotype Query Tools (GQT)</b>: fast/efficient individual-level queries of large-scale variation data.<br />
<u>Software</u>: <a href="https://github.com/ryanlayer/gqt">https://github.com/ryanlayer/gqt</a><br />
<u>Preprint</u>: <a href="http://biorxiv.org/content/early/2015/06/05/018259">http://biorxiv.org/content/early/2015/06/05/018259</a><br />
<br />
<b>Centrifuge</b>: a metagenomics classifier.<br />
<u>Software</u>: <a href="https://github.com/infphilo/centrifuge">https://github.com/infphilo/centrifuge</a><br />
<u>Poster</u>: <a href="http://www.ccb.jhu.edu/people/infphilo/data/Centrifuge-poster.pdf">http://www.ccb.jhu.edu/people/infphilo/data/Centrifuge-poster.pdf</a><br />
<br />
<b>Mash</b>: MinHash-based method for rapidly estimating pairwise distances between genomes or metagenomes.<br />
<u>Software</u>: <a href="https://github.com/marbl/Mash">https://github.com/marbl/Mash</a><br />
<u>Docs</u>: <a href="http://mash.readthedocs.org/en/latest/">http://mash.readthedocs.org/en/latest/</a><br />
<u>Preprint</u>: <a href="http://biorxiv.org/content/early/2015/10/26/029827">http://biorxiv.org/content/early/2015/10/26/029827</a><br />
<br />
<b>VCFanno</b>: ultrafast large-sample VCF annotation<br />
<u>Software</u>: <a href="https://github.com/brentp/vcfanno">https://github.com/brentp/vcfanno</a><br />
<br />
<b>Ginkgo</b>: Interactive analysis and assessment of single-cell copy-number variations<br />
<u>Paper</u>: <a href="http://www.nature.com/nmeth/journal/v12/n11/full/nmeth.3578.html">http://www.nature.com/nmeth/journal/v12/n11/full/nmeth.3578.html</a><br />
<u>Software</u>: <a href="https://github.com/robertaboukhalil/ginkgo">https://github.com/robertaboukhalil/ginkgo</a><br />
<br />
<b>StringTie</b>: RNA-seq transcript assembly+quantification, with or without a reference. See paper for comparison to existing tools.<br />
<u>Software</u>: <a href="http://ccb.jhu.edu/software/stringtie/">http://ccb.jhu.edu/software/stringtie/</a><br />
<u>Source</u>: <a href="https://github.com/gpertea/stringtie">https://github.com/gpertea/stringtie</a><br />
<u>Poster</u>: <a href="http://ccb.jhu.edu/software/stringtie/cshl2015.pdf">http://ccb.jhu.edu/software/stringtie/cshl2015.pdf</a><br />
<u>Paper</u>: <a href="http://www.nature.com/nbt/journal/v33/n3/full/nbt.3122.html">http://www.nature.com/nbt/journal/v33/n3/full/nbt.3122.html</a><br />
<br />
<br />
<br /></div>
<div>
<br /></div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com8tag:blogger.com,1999:blog-6232819486261696035.post-23225682863576810152015-08-06T11:17:00.000-05:002015-08-06T11:17:02.569-05:00Compiling RMarkdown from a Helper R Script<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=2322568286357681015">
<h3 id="the-problem" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
The problem</h3>
<div style="margin: 1.2em 0px !important;">
I was looking for a way to compile an RMarkdown document and have the filename of the resulting PDF or HTML document contain the name of the input data that it processed. That is, if I compiled the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">analysis.Rmd</code> file, where in that file it did some analysis and reporting on <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">data001.txt</code>, I’d want the resulting filename to look something like <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">data001.txt.analysis.html</code>. Or even better, to stick in a timestamp with the date, so if the analysis was compiled today, August 6 2015, the resulting filename would be <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">data001.txt.2015-08-06.html</code>. I also wanted to implement the entire solution in R, not relying on fiddly makefiles or scripts that may behave differently depending on the OS/environment.</div>
<div style="margin: 1.2em 0px !important;">
I found a near-solution as described on <a href="http://stackoverflow.com/a/28785774/654296">this SO post</a> and detailed on <a href="http://biochemistri.es/one-weird-rmd-trick">this follow-up blog post</a>, but neither really addressed my problem.</div>
<h3 id="the-solution" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
The solution</h3>
<div style="margin: 1.2em 0px !important;">
The simplest solution I could come up with involved creating two files:</div>
<ol style="margin: 1.2em 0px; padding-left: 2em;">
<li style="margin: 0.5em 0px;">A .Rmd file that would actually do all the analysis and generate the compiled report.</li>
<li style="margin: 0.5em 0px;">A second .R script to be used as a config file. Here you’d specify the input data (and potentially other analysis parameters).</li>
</ol>
<div style="margin: 1.2em 0px !important;">
By default, when calling <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">rmarkdown::render()</code> from an R script, the environment in which the code chunks are to be evaluated during knitting uses <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">parent.frame()</code> by default, so anything you define in the .R config file will get passed on to the .Rmd that is to be compiled. </div>
<div style="margin: 1.2em 0px !important;">
Here’s what it looks like in practice.</div>
<div style="margin: 1.2em 0px !important;">
First, the <strong>analysis.Rmd</strong> file that actually runs the analysis:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"> ---
title: "Analysis Markdown document"
author: "Stephen Turner"
date: "August 6, 2015"
output: html_document
---
This is the Rmarkdown document that runs the analysis.
Some narrative text goes here.
Maybe we'll do some analysis here. The `infile` variable is passed
in from the config script. You could pass in other variables too.
```{r}
# check that you defined infile from the config and that
# the file actually exists in the current directory
stopifnot(exists("infile"))
stopifnot(file.exists(infile))
# read in the data
x = read.table(infile)
# do some stuff, make a plot, etc.
result = mean(x$value)
hist(x$value)
```
Here is some conclusion narrative text. Maybe show some notes:
- Input file used for this report: `r infile`
- This report was compiled: `r Sys.Date()`
- The mean of the `value` column is: `r result`
Also, never forget to show your...
```{r}
sessionInfo()
```
</code></pre>
<div style="margin: 1.2em 0px !important;">
And the <strong>config.R</strong> helper script:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-comment">#-------- define the input filename --------#</span>
infile = <span class="hljs-string">"data001.txt"</span>
<span class="hljs-comment">#----- Now just hit the source button! -----#</span>
<span class="hljs-comment"># check that the input file actually exists!</span>
stopifnot(file.exists(infile))
<span class="hljs-comment"># create the output filename</span>
outfile = paste(infile, Sys.Date(), <span class="hljs-string">"analysis.html"</span>, sep=<span class="hljs-string">"."</span>)
<span class="hljs-comment"># compile the document</span>
rmarkdown::render(input=<span class="hljs-string">"analysis.Rmd"</span>, output_file=outfile)
</code></pre>
<div style="margin: 1.2em 0px !important;">
All I’d need to now is open up the <strong>config.R</strong> script, edit the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">infile</code> variable, and hit the source button in RStudio. This runs the <strong>analysis.Rmd</strong> as shown above for the input (<strong>data001.txt</strong> in this example) and saves the resulting compiled report as <strong>data001.txt.2015-08-06.analysis.html</strong>.</div>
<div style="margin: 1.2em 0px !important;">
<em>(Crosspost at <a href="http://rpubs.com/turnersd/compile_rmd_from_config_rscript">RPubs</a>).</em></div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:IyMjIFRoZSBwcm9ibGVtPHA+PGJyPjwvcD48cD5JIHdhcyBsb29raW5nIGZvciBhIHdheSB0byBj
b21waWxlIGFuIFJNYXJrZG93biBkb2N1bWVudCBhbmQgaGF2ZSB0aGUgZmlsZW5hbWUgb2YgdGhl
IHJlc3VsdGluZyBQREYgb3IgSFRNTCBkb2N1bWVudCBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBp
bnB1dCBkYXRhIHRoYXQgaXQgcHJvY2Vzc2VkLiBUaGF0IGlzLCBpZiBJIGNvbXBpbGVkIHRoZSBg
YW5hbHlzaXMuUm1kYCBmaWxlLCB3aGVyZSBpbiB0aGF0IGZpbGUgaXQgZGlkIHNvbWUgYW5hbHlz
aXMgYW5kIHJlcG9ydGluZyBvbiBgZGF0YTAwMS50eHRgLCBJJ2Qgd2FudCB0aGUgcmVzdWx0aW5n
IGZpbGVuYW1lIHRvIGxvb2sgc29tZXRoaW5nIGxpa2UgYGRhdGEwMDEudHh0LmFuYWx5c2lzLmh0
bWxgLiBPciBldmVuIGJldHRlciwgdG8gc3RpY2sgaW4gYSB0aW1lc3RhbXAgd2l0aCB0aGUgZGF0
ZSwgc28gaWYgdGhlIGFuYWx5c2lzIHdhcyBjb21waWxlZCB0b2RheSwgQXVndXN0IDYgMjAxNSwg
dGhlIHJlc3VsdGluZyBmaWxlbmFtZSB3b3VsZCBiZSBgZGF0YTAwMS50eHQuMjAxNS0wOC0wNi5o
dG1sYC4gSSBhbHNvIHdhbnRlZCB0byBpbXBsZW1lbnQgdGhlIGVudGlyZSBzb2x1dGlvbiBpbiBS
LCBub3QgcmVseWluZyBvbiBmaWRkbHkgbWFrZWZpbGVzIG9yIHNjcmlwdHMgdGhhdCBtYXkgYmVo
YXZlIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB0aGUgT1MvZW52aXJvbm1lbnQuPC9wPjxwPjxi
cj48L3A+PHA+SSBmb3VuZCBhIG5lYXItc29sdXRpb24gYXMgZGVzY3JpYmVkIG9uIFt0aGlzIFNP
IHBvc3RdKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4Nzg1Nzc0LzY1NDI5NikgYW5kIGRl
dGFpbGVkIG9uIFt0aGlzIGZvbGxvdy11cCBibG9nIHBvc3RdKGh0dHA6Ly9iaW9jaGVtaXN0cmku
ZXMvb25lLXdlaXJkLXJtZC10cmljayksIGJ1dCBuZWl0aGVyIHJlYWxseSBhZGRyZXNzZWQgbXkg
cHJvYmxlbS48L3A+PHA+PGJyPjwvcD48cD4jIyMgVGhlIHNvbHV0aW9uPC9wPjxwPjxicj48L3A+
PHA+VGhlIHNpbXBsZXN0IHNvbHV0aW9uIEkgY291bGQgY29tZSB1cCB3aXRoIGludm9sdmVkIGNy
ZWF0aW5nIHR3byBmaWxlczo8L3A+PHA+PGJyPjwvcD48cD4xLiBBIC5SbWQgZmlsZSB0aGF0IHdv
dWxkIGFjdHVhbGx5IGRvIGFsbCB0aGUgYW5hbHlzaXMgYW5kIGdlbmVyYXRlIHRoZSBjb21waWxl
ZCByZXBvcnQuPC9wPjxwPjIuIEEgc2Vjb25kIC5SIHNjcmlwdCB0byBiZSB1c2VkIGFzIGEgY29u
ZmlnIGZpbGUuIEhlcmUgeW91J2Qgc3BlY2lmeSB0aGUgaW5wdXQgZGF0YSAoYW5kIHBvdGVudGlh
bGx5IG90aGVyIGFuYWx5c2lzIHBhcmFtZXRlcnMpLjwvcD48cD48YnI+PC9wPjxwPkJ5IGRlZmF1
bHQsIHdoZW4gY2FsbGluZyBgcm1hcmtkb3duOjpyZW5kZXIoKWAgZnJvbSBhbiBSIHNjcmlwdCwg
dGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBjb2RlIGNodW5rcyBhcmUgdG8gYmUgZXZhbHVh
dGVkIGR1cmluZyBrbml0dGluZyB1c2VzIGBwYXJlbnQuZnJhbWUoKWAgYnkgZGVmYXVsdCwgc28g
YW55dGhpbmcgeW91IGRlZmluZSBpbiB0aGUgLlIgY29uZmlnIGZpbGUgd2lsbCBnZXQgcGFzc2Vk
IG9uIHRvIHRoZSAuUm1kIHRoYXQgaXMgdG8gYmUgY29tcGlsZWQuJm5ic3A7PC9wPjxwPjxicj48
L3A+PHA+SGVyZSdzIHdoYXQgaXQgbG9va3MgbGlrZSBpbiBwcmFjdGljZS48L3A+PHA+PGJyPjwv
cD48cD5GaXJzdCwgdGhlICoqYW5hbHlzaXMuUm1kKiogZmlsZSB0aGF0IGFjdHVhbGx5IHJ1bnMg
dGhlIGFuYWx5c2lzOjwvcD48cD48YnI+PC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7LS0tPC9w
PjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7dGl0bGU6ICJBbmFseXNpcyBNYXJrZG93biBkb2N1bWVu
dCI8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDthdXRob3I6ICJTdGVwaGVuIFR1cm5lciI8L3A+
PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDtkYXRlOiAiQXVndXN0IDYsIDIwMTUiPC9wPjxwPiZuYnNw
OyAmbmJzcDsgJm5ic3A7b3V0cHV0OiBodG1sX2RvY3VtZW50PC9wPjxwPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7LS0tPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7PC9wPjxwPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7VGhpcyBpcyB0aGUgUm1hcmtkb3duIGRvY3VtZW50IHRoYXQgcnVucyB0aGUgYW5hbHlz
aXMuPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7U29tZSBuYXJyYXRpdmUgdGV4dCBnb2VzIGhl
cmUuJm5ic3A7PC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7TWF5YmUgd2UnbGwgZG8gc29tZSBh
bmFseXNpcyBoZXJlLiBUaGUgYGluZmlsZWAgdmFyaWFibGUgaXMgcGFzc2VkJm5ic3A7PC9wPjxw
PiZuYnNwOyAmbmJzcDsgJm5ic3A7aW4gZnJvbSB0aGUgY29uZmlnIHNjcmlwdC4gWW91IGNvdWxk
IHBhc3MgaW4gb3RoZXIgdmFyaWFibGVzIHRvby48L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDs8
L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDtgYGB7cn08L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsjIGNoZWNrIHRoYXQgeW91IGRlZmluZWQgaW5maWxlIGZyb20gdGhlIGNvbmZpZyBhbmQgdGhh
dCZuYnNwOzwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyMgdGhlIGZpbGUgYWN0dWFsbHkgZXhp
c3RzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeTwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwO3N0
b3BpZm5vdChleGlzdHMoImluZmlsZSIpKTwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOzwvcD48
cD4mbmJzcDsgJm5ic3A7ICZuYnNwO3N0b3BpZm5vdChmaWxlLmV4aXN0cyhpbmZpbGUpKTwvcD48
cD4mbmJzcDsgJm5ic3A7ICZuYnNwOzwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyMgcmVhZCBp
biB0aGUgZGF0YTwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwO3ggPSByZWFkLnRhYmxlKGluZmls
ZSk8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDs8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDsj
IGRvIHNvbWUgc3R1ZmYsIG1ha2UgYSBwbG90LCBldGMuPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5i
c3A7cmVzdWx0ID0gbWVhbih4JHZhbHVlKTwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwO2hpc3Qo
eCR2YWx1ZSk8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDtgYGA8L3A+PHA+Jm5ic3A7ICZuYnNw
OyAmbmJzcDs8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDtIZXJlIGlzIHNvbWUgY29uY2x1c2lv
biBuYXJyYXRpdmUgdGV4dC4gTWF5YmUgc2hvdyBzb21lIG5vdGVzOjwvcD48cD4mbmJzcDsgJm5i
c3A7ICZuYnNwOzwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOy0gSW5wdXQgZmlsZSB1c2VkIGZv
ciB0aGlzIHJlcG9ydDogYHIgaW5maWxlYDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOy0gVGhp
cyByZXBvcnQgd2FzIGNvbXBpbGVkOiBgciBTeXMuRGF0ZSgpYDwvcD48cD4mbmJzcDsgJm5ic3A7
ICZuYnNwOy0gVGhlIG1lYW4gb2YgdGhlIGB2YWx1ZWAgY29sdW1uIGlzOiBgciByZXN1bHRgPC9w
PjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7PC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7QWxzbywg
bmV2ZXIgZm9yZ2V0IHRvIHNob3cgeW91ci4uLjwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOzwv
cD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwO2BgYHtyfTwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNw
O3Nlc3Npb25JbmZvKCk8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDtgYGAmbmJzcDs8L3A+PHA+
PGJyPjwvcD48cD5BbmQgdGhlICoqY29uZmlnLlIqKiBoZWxwZXIgc2NyaXB0OjwvcD48cD48YnI+
PC9wPjxwPjxicj48L3A+PHA+YGBgcjwvcD48cD4jLS0tLS0tLS0gZGVmaW5lIHRoZSBpbnB1dCBm
aWxlbmFtZSAtLS0tLS0tLSM8L3A+PHA+aW5maWxlID0gImRhdGEwMDEudHh0IjwvcD48cD4jLS0t
LS0gTm93IGp1c3QgaGl0IHRoZSBzb3VyY2UgYnV0dG9uISAtLS0tLSM8L3A+PHA+PGJyPjwvcD48
cD48YnI+PC9wPjxwPiMgY2hlY2sgdGhhdCB0aGUgaW5wdXQgZmlsZSBhY3R1YWxseSBleGlzdHMh
PC9wPjxwPnN0b3BpZm5vdChmaWxlLmV4aXN0cyhpbmZpbGUpKTwvcD48cD48YnI+PC9wPjxwPiMg
Y3JlYXRlIHRoZSBvdXRwdXQgZmlsZW5hbWU8L3A+PHA+b3V0ZmlsZSA9IHBhc3RlKGluZmlsZSwg
U3lzLkRhdGUoKSwgImFuYWx5c2lzLmh0bWwiLCBzZXA9Ii4iKTwvcD48cD48YnI+PC9wPjxwPiMg
Y29tcGlsZSB0aGUgZG9jdW1lbnQ8L3A+PHA+cm1hcmtkb3duOjpyZW5kZXIoaW5wdXQ9ImFuYWx5
c2lzLlJtZCIsIG91dHB1dF9maWxlPW91dGZpbGUpPC9wPjxwPmBgYDwvcD48cD48YnI+PC9wPjxw
PkFsbCBJJ2QgbmVlZCB0byBub3cgaXMgb3BlbiB1cCB0aGUgKipjb25maWcuUioqIHNjcmlwdCwg
ZWRpdCB0aGUgYGluZmlsZWAgdmFyaWFibGUsIGFuZCBoaXQgdGhlIHNvdXJjZSBidXR0b24gaW4g
UlN0dWRpby4gVGhpcyBydW5zIHRoZSAqKmFuYWx5c2lzLlJtZCoqIGFzIHNob3duIGFib3ZlIGZv
ciB0aGUgaW5wdXQgKCoqZGF0YTAwMS50eHQqKiBpbiB0aGlzIGV4YW1wbGUpIGFuZCBzYXZlcyB0
aGUgcmVzdWx0aW5nIGNvbXBpbGVkIHJlcG9ydCBhcyAqKmRhdGEwMDEudHh0LjIwMTUtMDgtMDYu
YW5hbHlzaXMuaHRtbCoqLjwvcD48ZGl2Pjxicj48L2Rpdj48ZGl2Pl8oQ3Jvc3Nwb3N0IGF0IFtS
UHVic10oaHR0cDovL3JwdWJzLmNvbS90dXJuZXJzZC9jb21waWxlX3JtZF9mcm9tX2NvbmZpZ19y
c2NyaXB0KSkuXzwvZGl2Pg==">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com4tag:blogger.com,1999:blog-6232819486261696035.post-55446761639962547442015-04-21T08:23:00.000-05:002015-04-21T08:23:59.604-05:00R: single plot with two different y-axes<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/src=sidebar" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
I forgot where I originally found the code to do this, but I recently had to dig it out again to remind myself how to draw two different <em>y</em> axes on the same plot to show the values of two different features of the data. This is somewhat distinct from the typical use case of aesthetic mappings in ggplot2 where I want to have different lines/points/colors/etc. for the <em>same</em> feature across multiple subsets of data. </div>
<div style="margin: 1.2em 0px !important;">
For example, I was recently poking around with some data examining enrichment of a particular set of genes using a hypergeometric test as I was fiddling around with other parameters that included more genes in the selection (i.e., in the classic example, the number of balls drawn from some hypothetical urn). I wanted to show the -log10(p-value) on one axis and some other value (e.g., “n”) on the same plot, using a different axis on the right side of the plot. </div>
<div style="margin: 1.2em 0px !important;">
Here’s how to do it. First, generate some data:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">set.seed(<span class="hljs-number">2015</span>-<span class="hljs-number">04</span>-<span class="hljs-number">13</span>)
d = data.frame(x =seq(<span class="hljs-number">1</span>,<span class="hljs-number">10</span>),
n = c(<span class="hljs-number">0</span>,<span class="hljs-number">0</span>,<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">6</span>,<span class="hljs-number">6</span>),
logp = signif(-log10(runif(<span class="hljs-number">10</span>)), <span class="hljs-number">2</span>))
</code></pre>
<table style="border-collapse: collapse; border-spacing: 0px; border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 1.2em 0px; padding: 0px;">
<thead>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">x</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">n</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">logp</th>
</tr>
</thead>
<tbody style="border: 0px; margin: 0px; padding: 0px;">
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.400</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">2</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.590</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">3</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.200</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">4</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">2</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.500</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">5</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">3</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.028</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">6</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">4</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.380</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">7</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">4</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">2.500</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">8</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">5</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.067</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">9</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">6</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.041</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">10</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">6</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.360</td>
</tr>
</tbody>
</table>
<div style="margin: 1.2em 0px !important;">
The strategy here is to first draw one of the plots, then draw another plot on top of the first one, and manually add in an axis. So let’s draw the first plot, but leave some room on the right hand side to draw an axis later on. I’m drawing a red line plot showing the p-value as it changes over values of <em>x</em>.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">par(mar = c(<span class="hljs-number">5</span>,<span class="hljs-number">5</span>,<span class="hljs-number">2</span>,<span class="hljs-number">5</span>))
with(d, plot(x, logp, type=<span class="hljs-string">"l"</span>, col=<span class="hljs-string">"red3"</span>,
ylab=expression(-log[<span class="hljs-number">10</span>](italic(p))),
ylim=c(<span class="hljs-number">0</span>,<span class="hljs-number">3</span>)))
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYTL4wfi34iOo8lygWIVBbfEUo-AWoZ0noUnlwAtK736JUKYyaYgDjKvEpawRgCJSm2ayIzDh62hjw2SFOxqtSKOKw8j-rfkL7TKFxXVkcNc5PHo3zyxjgCqMo7emcFJdpbBEW5MWdkkM/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYTL4wfi34iOo8lygWIVBbfEUo-AWoZ0noUnlwAtK736JUKYyaYgDjKvEpawRgCJSm2ayIzDh62hjw2SFOxqtSKOKw8j-rfkL7TKFxXVkcNc5PHo3zyxjgCqMo7emcFJdpbBEW5MWdkkM/s1600/1.png" /></a></div>
<div style="margin: 1.2em 0px !important;">
Now, draw the second plot on top of the first using the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">par(new=T)</code> call. Draw the plot, but don’t include an axis yet. Put the axis on the right side (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">axis(...)</code>), and add text to the margin (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">mtext...</code>). Finally, add a legend.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">par(new = <span class="hljs-literal">T</span>)
with(d, plot(x, n, pch=<span class="hljs-number">16</span>, axes=<span class="hljs-literal">F</span>, xlab=<span class="hljs-literal">NA</span>, ylab=<span class="hljs-literal">NA</span>, cex=<span class="hljs-number">1.2</span>))
axis(side = <span class="hljs-number">4</span>)
mtext(side = <span class="hljs-number">4</span>, line = <span class="hljs-number">3</span>, <span class="hljs-string">'Number genes selected'</span>)
legend(<span class="hljs-string">"topleft"</span>,
legend=c(expression(-log[<span class="hljs-number">10</span>](italic(p))), <span class="hljs-string">"N genes"</span>),
lty=c(<span class="hljs-number">1</span>,<span class="hljs-number">0</span>), pch=c(<span class="hljs-literal">NA</span>, <span class="hljs-number">16</span>), col=c(<span class="hljs-string">"red3"</span>, <span class="hljs-string">"black"</span>))
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNkuraSiXaemAlAdVupru-SPnfkxXAtIRmVFol6eBnRbzkn-l3MGHkL7BnigC-pQuxq0v2mwBIJSpv_ajyvkL1TPrQyHv3aU8eoBEDtlHFqGMe3uPPWECjKezgenfi-aBOtmpZW5pV5HI/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNkuraSiXaemAlAdVupru-SPnfkxXAtIRmVFol6eBnRbzkn-l3MGHkL7BnigC-pQuxq0v2mwBIJSpv_ajyvkL1TPrQyHv3aU8eoBEDtlHFqGMe3uPPWECjKezgenfi-aBOtmpZW5pV5HI/s1600/2.png" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com2tag:blogger.com,1999:blog-6232819486261696035.post-19965116403206611422015-04-10T15:47:00.000-05:002015-04-14T15:28:58.551-05:00Translational Bioinformatics Year In ReviewPer tradition, <a href="https://rbaltman.wordpress.com/" target="_blank">Russ Altman</a> gave his "Translational Bioinformatics: The Year in Review" presentation at the close of the <a href="https://www.amia.org/jointsummits2015/schedule-at-a-glance" target="_blank">AMIA Joint Summit on Translational Bioinformatics</a> in San Francisco on March 26th. This year, papers came from six key areas (and a final Odds and Ends category). His full slide deck is available <a href="https://dl.dropboxusercontent.com/u/2734365/amia-tb-review-15.pdf" target="_blank">here</a>.<br />
<br />
I always enjoy this talk because it routinely points me to new collections of data and new software tools that are useful for a variety of analyses; as such, I thought I would highlight these resources from his talk this year.<br />
<br />
<a href="http://www.ncbi.nlm.nih.gov/pubmed/?term=24931982" target="_blank"><b>GRASP: analysis of genotype-phenotype results from1390 genome-wide association studies and corresponding open access database</b></a><br />
Some of you may have accessed the <a href="http://www.ncbi.nlm.nih.gov/pubmed/19161620" target="_blank">Johnson and O'Donnell catalog of GWAS results</a> published in 2009. This data set was a more extensive collection of GWAS findings than the popular NHGRI GWAS catalog, as it did not impose a genome-wide significance threshold for reported associations. The GRASP database is a similar effort, reporting numerous attributes of each study.<br />
<i><b>A zip archive of the full data set (a flat file) is available <a href="http://apps.nhlbi.nih.gov/grasp" target="_blank">here</a>.</b></i><br />
<br />
<br />
<a href="http://www.ncbi.nlm.nih.gov/pubmed/?term=25186178" target="_blank"><b>Effective diagnosis of genetic disease by computational phenotype analysis of the disease associated genome</b></a><br />
This paper tackles the enormously complex task of diagnosing rare genetic diseases using a combination of genetic variants (from a VCF file), a list of phenotype characteristics (fed from the <a href="http://www.human-phenotype-ontology.org/" target="_blank">Human Phenotype Ontology</a>), and a few other aspects of the disease.<br />
<i><b>The online tool called PhenIX is available <a href="http://compbio.charite.de/PhenIX/" target="_blank">here</a>.</b></i><br />
<br />
<br />
<a href="http://www.ncbi.nlm.nih.gov/pubmed/?term=24498199" target="_blank"><b>A network based method for analysis of lncRNA disease associations and prediction of lncRNAs implicated in diseases</b></a><br />
Here, Yang et al. examine relationships between known long non-coding RNAs and disease using graph propagation. Their underlying database, however, was generated using PubMed mining along with some manual curation.<br />
<i><b>Their lncRNA-Disease database is available <a href="http://202.38.126.151/hmdd/html/tools/lncrnadisease.html" target="_blank">here</a>.</b></i><br />
<br />
<br />
<a href="http://www.ncbi.nlm.nih.gov/pubmed/?term=24813542" target="_blank"><b>SNPsea: an algorithm to identify cell types, tissuesand pathways affected by risk loci</b></a><br />
This tool is a type of SNP set enrichment, designed to specifically look at functional enrichment in the context of specific tissues and cell types. The tool is a C++ executable, available for download <a href="http://www.broadinstitute.org/mpg/snpsea/" target="_blank">here</a>.<br />
<i><b>The data sources underlying the SNPsea algorithm are available <a href="http://figshare.com/articles/SNPsea_test_trait_associated_loci_for_enrichment_of_condition_specificity_of_gene_measurements_or_binary_annotations/871430" target="_blank">here</a>.</b></i><br />
<br />
<br />
<a href="http://www.ncbi.nlm.nih.gov/pubmed/?term=24967666" target="_blank"><b>Human symptoms-disease network</b></a><br />
Here Zhou et al. systematically extract symptom-to-disease network by exploting MeSH annotations. They compiled a list of <a href="http://www.nature.com/ncomms/2014/140626/ncomms5212/extref/ncomms5212-s3.txt" target="_blank">322 symptoms</a> and <a href="http://www.nature.com/ncomms/2014/140626/ncomms5212/extref/ncomms5212-s2.txt" target="_blank">4,442 diseases</a> from the MeSH vocabulary, and document their occurrence within PubMed. Using this disease-symptom network, the authors explore the biological underpinnings of certain symptoms by looking at shared genomic elements between diseases with similar symptoms.<br />
<i><b>The full list of ~130,000 edges in their disease-symptom network is available <a href="http://www.nature.com/ncomms/2014/140626/ncomms5212/extref/ncomms5212-s5.txt" target="_blank">here</a>.</b></i><br />
<br />
<br />
<a href="http://www.ncbi.nlm.nih.gov/pubmed/?term=25349387" target="_blank"><b>A circadian gene expression atlas in mammals: implications for biology and medicine</b></a><br />
This fascinating paper explores the temporal impact on gene expression traits from 12 mouse organs. By systematically collecting transcriptome data from these tissues at two hour intervals, the authors construct a temporal atlas of gene expression, and show that 43% of proteins have a circadian expression profile.<br />
<i><b>The accompanying CircaDB database is available online <a href="http://bioinf.itmat.upenn.edu/circa/query" target="_blank">here</a>.</b></i><br />
<br />
<br />
<a href="http://www.ncbi.nlm.nih.gov/pubmed/?term=24725842" target="_blank"><b>dRiskKB: a large-scale disease-disease riskrelationship knowledge base constructed frombiomedical text</b></a><br />
The authors of dRiskKB use text mining across MEDLINE citations using a controlled disease vocabulary, in this case the <a href="http://bioportal.bioontology.org/ontologies/1009" target="_blank">Human Disease Ontology</a>, to generate pairs of diseases that co-occur with specific patterns in abstract text. These pairs are ranked with a scoring algorithm and provide a new resource for disease co-morbidity relationships.<br />
<i><b>The flat file data driving dRiskKB can be found online <a href="http://nlp.case.edu/public/data/dRiskKB/" target="_blank">here</a>.</b></i><br />
<br />
<br />
<a href="http://www.ncbi.nlm.nih.gov/pubmed/?term=25613900" target="_blank"><b>A tissue-based map of the human proteome</b></a><br />
In this major effort, a group of investigators have published the most detailed atlas of human protein expression to date. The transcriptome has been extensively studied across human tissues, but it remains unclear to what extent transcriptional activity reflects translation into protein. But most importantly, the data are searchable via a <a href="http://www.proteinatlas.org/" target="_blank">beautiful website</a>.<br />
<i><b>The underlying data from the Human Protein Atlas is available <a href="http://www.proteinatlas.org/about/download" target="_blank">here</a>.</b></i><br />
<br />
<br />
<br /><div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6232819486261696035.post-21326945858446965602015-04-10T10:01:00.002-05:002015-04-10T10:02:18.157-05:00R User Group Recap: Heatmaps and Using the caret Package<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=2132694585844696560" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
At our most recent R user group meeting we were delighted to have presentations from Mark Lawson and Steve Hoang, both bioinformaticians at <a href="http://www.hemoshear.com/">Hemoshear</a>. All of the code used in both demos is in our Meetup’s <a href="https://github.com/UVa-R-Users-Group/meetup">GitHub repo</a>.</div>
<h3 id="making-heatmaps-in-r" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Making heatmaps in R</h3>
<div style="margin: 1.2em 0px !important;">
Steve started with an <a href="https://github.com/UVa-R-Users-Group/meetup/tree/master/2015-02-19-heat-maps">overview of making heatmaps in R</a>. Using the iris dataset, Steve demonstrated making heatmaps of the continuous iris data using the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">heatmap.2</code> function from the gplots package, the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">aheatmap</code> function from NMF, and the hard way using ggplot2. The “best in class” method used <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">aheatmap</code> to draw an annotated heatmap plotting z-scores of columns and annotated rows instead of raw values, using the Pearson correlation instead of Euclidean distance as the distance metric.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(dplyr)
<span class="hljs-keyword">library</span>(NMF)
<span class="hljs-keyword">library</span>(RColorBrewer)
iris2 = iris <span class="hljs-comment"># prep iris data for plotting</span>
rownames(iris2) = make.names(iris2$Species, unique = <span class="hljs-literal">T</span>)
iris2 = iris2 %>% select(-Species) %>% as.matrix()
aheatmap(iris2, color = <span class="hljs-string">"-RdBu:50"</span>, scale = <span class="hljs-string">"col"</span>, breaks = <span class="hljs-number">0</span>,
annRow = iris[<span class="hljs-string">"Species"</span>], annColors = <span class="hljs-string">"Set2"</span>,
distfun = <span class="hljs-string">"pearson"</span>, treeheight=c(<span class="hljs-number">200</span>, <span class="hljs-number">50</span>),
fontsize=<span class="hljs-number">13</span>, cexCol=<span class="hljs-number">.7</span>,
filename=<span class="hljs-string">"heatmap.png"</span>, width=<span class="hljs-number">8</span>, height=<span class="hljs-number">16</span>)
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLwQoWxJOWWiAXB4G8dBPOe-DbA4R-tfFGMzZw4pr5Wz-9I4Tq4P_XUmGzcNt6uhddwPPMwcLAP05E3_Kj_Ua67fI29gKxluDFyE_PO1kYCN-AK4IKGfWBurIHV7lZWD4mFV3QzpOgoxQ/s1600/heatmap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLwQoWxJOWWiAXB4G8dBPOe-DbA4R-tfFGMzZw4pr5Wz-9I4Tq4P_XUmGzcNt6uhddwPPMwcLAP05E3_Kj_Ua67fI29gKxluDFyE_PO1kYCN-AK4IKGfWBurIHV7lZWD4mFV3QzpOgoxQ/s1600/heatmap.png" height="640" width="320" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<h3 id="classification-and-regression-using-caret" style="font-size: 1.3em; font-weight: bold; margin: 1.3em 0px 1em; padding: 0px;">
Classification and regression using caret</h3>
<div style="margin: 1.2em 0px !important;">
Mark wrapped up with a <a href="https://github.com/UVa-R-Users-Group/meetup/tree/master/2015-02-19-caret">gentle introduction to the caret package</a> for classification and regression training. This demonstration used the caret package to split data into training and testing sets, and run repeated cross-validation to train random forest and penalized logistic regression models for classifying Fisher’s iris data.</div>
<div style="margin: 1.2em 0px !important;">
First, get a look at the data with the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">featurePlot</code> function in the caret package:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="hljs language-r" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="hljs-keyword">library</span>(caret)
set.seed(<span class="hljs-number">42</span>)
data(iris)
featurePlot(x = iris[, <span class="hljs-number">1</span>:<span class="hljs-number">4</span>],
y = iris$Species,
plot = <span class="hljs-string">"pairs"</span>,
auto.key = list(columns = <span class="hljs-number">3</span>))
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGUQJy9ok7vVGpze9Kx8K7Dwjbaj4kGBUd6xehPKxqTjaF2ZgDKnYHVLVR4us-i_vMsfKnsGEaSD_mQvF6WUZL0Fb9SPoJDOjn9AKeWSsH3ZRrhnMddYBMUVq9A2K5hN2kkuRza1nVjBg/s1600/featureplot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGUQJy9ok7vVGpze9Kx8K7Dwjbaj4kGBUd6xehPKxqTjaF2ZgDKnYHVLVR4us-i_vMsfKnsGEaSD_mQvF6WUZL0Fb9SPoJDOjn9AKeWSsH3ZRrhnMddYBMUVq9A2K5hN2kkuRza1nVjBg/s1600/featureplot.png" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
Next, after splitting the data into training and testing sets and using the caret package to automate training and testing both random forest and partial least squares models using repeated 10-fold cross-validation (<a href="https://github.com/UVa-R-Users-Group/meetup/blob/master/2015-02-19-caret/caret_iris.R">see the code</a>), it turns out random forest outperforms PLS in this case, and performs fairly well overall:</div>
<table style="border-collapse: collapse; border-spacing: 0px; border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 1.2em 0px; padding: 0px;">
<thead>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: left;"></th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">setosa</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">versicolor</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: right;">virginica</th>
</tr>
</thead>
<tbody style="border: 0px; margin: 0px; padding: 0px;">
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Sensitivity</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.00</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.00</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.00</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Specificity</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.00</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.50</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.00</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Pos Pred Value</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.00</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.50</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">NaN</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Neg Pred Value</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.00</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.00</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.67</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Prevalence</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.33</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.33</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.33</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Detection Rate</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.33</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.33</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.00</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Detection Prevalence</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.33</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.67</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.00</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: left;">Balanced Accuracy</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">1.00</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.75</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: right;">0.50</td>
</tr>
</tbody>
</table>
<div style="margin: 1.2em 0px !important;">
A big thanks to Mark and Steve at Hemoshear for putting this together!</div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PGRpdj5BdCBvdXIgbW9zdCByZWNlbnQgUiB1c2VyIGdyb3VwIG1lZXRpbmcgd2Ugd2VyZSBkZWxp
Z2h0ZWQgdG8gaGF2ZSBwcmVzZW50YXRpb25zIGZyb20gTWFyayBMYXdzb24gYW5kIFN0ZXZlIEhv
YW5nLCBib3RoIGJpb2luZm9ybWF0aWNpYW5zIGF0IFtIZW1vc2hlYXJdKGh0dHA6Ly93d3cuaGVt
b3NoZWFyLmNvbS8pLiBBbGwgb2YgdGhlIGNvZGUgdXNlZCBpbiBib3RoIGRlbW9zIGlzIGluIG91
ciBNZWV0dXAncyBbR2l0SHViIHJlcG9dKGh0dHBzOi8vZ2l0aHViLmNvbS9VVmEtUi1Vc2Vycy1H
cm91cC9tZWV0dXApLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+IyMjIE1ha2luZyBoZWF0bWFw
cyBpbiBSPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5TdGV2ZSBzdGFydGVkIHdpdGggYW4gW292
ZXJ2aWV3IG9mIG1ha2luZyBoZWF0bWFwcyBpbiBSXShodHRwczovL2dpdGh1Yi5jb20vVVZhLVIt
VXNlcnMtR3JvdXAvbWVldHVwL3RyZWUvbWFzdGVyLzIwMTUtMDItMTktaGVhdC1tYXBzKS4gVXNp
bmcgdGhlIGlyaXMgZGF0YXNldCwgU3RldmUgZGVtb25zdHJhdGVkIG1ha2luZyBoZWF0bWFwcyBv
ZiB0aGUgY29udGludW91cyBpcmlzIGRhdGEgdXNpbmcgdGhlIGBoZWF0bWFwLjJgIGZ1bmN0aW9u
IGZyb20gdGhlIGdwbG90cyBwYWNrYWdlLCB0aGUgYGFoZWF0bWFwYCBmdW5jdGlvbiBmcm9tIE5N
RiwgYW5kIHRoZSBoYXJkIHdheSB1c2luZyBnZ3Bsb3QyLiBUaGUgImJlc3QgaW4gY2xhc3MiIG1l
dGhvZCB1c2VkIGBhaGVhdG1hcGAgdG8gZHJhdyBhbiBhbm5vdGF0ZWQgaGVhdG1hcCBwbG90dGlu
ZyB6LXNjb3JlcyBvZiBjb2x1bW5zIGFuZCBhbm5vdGF0ZWQgcm93cyBpbnN0ZWFkIG9mIHJhdyB2
YWx1ZXMsIHVzaW5nIHRoZSBQZWFyc29uIGNvcnJlbGF0aW9uIGluc3RlYWQgb2YgRXVjbGlkZWFu
IGRpc3RhbmNlIGFzIHRoZSBkaXN0YW5jZSBtZXRyaWMuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp
dj5gYGByPC9kaXY+PGRpdj5saWJyYXJ5KGRwbHlyKTwvZGl2PjxkaXY+bGlicmFyeShOTUYpPC9k
aXY+PGRpdj5saWJyYXJ5KFJDb2xvckJyZXdlcik8L2Rpdj48ZGl2PmlyaXMyID0gaXJpcyAjIHBy
ZXAgaXJpcyBkYXRhIGZvciBwbG90dGluZzwvZGl2PjxkaXY+cm93bmFtZXMoaXJpczIpID0gbWFr
ZS5uYW1lcyhpcmlzMiRTcGVjaWVzLCB1bmlxdWUgPSBUKTwvZGl2PjxkaXY+aXJpczIgPSBpcmlz
MiAlJmd0OyUgc2VsZWN0KC1TcGVjaWVzKSAlJmd0OyUgYXMubWF0cml4KCk8L2Rpdj48ZGl2PmFo
ZWF0bWFwKGlyaXMyLCBjb2xvciA9ICItUmRCdTo1MCIsIHNjYWxlID0gImNvbCIsIGJyZWFrcyA9
IDAsPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7YW5uUm93ID0g
aXJpc1siU3BlY2llcyJdLCBhbm5Db2xvcnMgPSAiU2V0MiIsJm5ic3A7PC9kaXY+PGRpdj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZGlzdGZ1biA9ICJwZWFyc29uIiwgdHJlZWhl
aWdodD1jKDIwMCwgNTApLCZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwO2ZvbnRzaXplPTEzLCBjZXhDb2w9LjcsJm5ic3A7PC9kaXY+PGRpdj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZmlsZW5hbWU9ImhlYXRtYXAucG5nIiwgd2lkdGg9
OCwgaGVpZ2h0PTE2KTwvZGl2PjxkaXY+YGBgPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj54eC1o
ZWF0bWFwPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4jIyMgQ2xhc3NpZmljYXRpb24gYW5kIHJl
Z3Jlc3Npb24gdXNpbmcgY2FyZXQ8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk1hcmsgd3JhcHBl
ZCB1cCB3aXRoIGEgW2dlbnRsZSBpbnRyb2R1Y3Rpb24gdG8gdGhlIGNhcmV0IHBhY2thZ2VdKGh0
dHBzOi8vZ2l0aHViLmNvbS9VVmEtUi1Vc2Vycy1Hcm91cC9tZWV0dXAvdHJlZS9tYXN0ZXIvMjAx
NS0wMi0xOS1jYXJldCkgZm9yIGNsYXNzaWZpY2F0aW9uIGFuZCByZWdyZXNzaW9uIHRyYWluaW5n
LiBUaGlzIGRlbW9uc3RyYXRpb24gdXNlZCB0aGUgY2FyZXQgcGFja2FnZSB0byBzcGxpdCBkYXRh
IGludG8gdHJhaW5pbmcgYW5kIHRlc3Rpbmcgc2V0cywgYW5kIHJ1biByZXBlYXRlZCBjcm9zcy12
YWxpZGF0aW9uIHRvIHRyYWluIHJhbmRvbSBmb3Jlc3QgYW5kIHBlbmFsaXplZCBsb2dpc3RpYyBy
ZWdyZXNzaW9uIG1vZGVscyBmb3IgY2xhc3NpZnlpbmcgRmlzaGVyJ3MgaXJpcyBkYXRhLjwvZGl2
PjxkaXY+PGJyPjwvZGl2PjxkaXY+Rmlyc3QsIGdldCBhIGxvb2sgYXQgdGhlIGRhdGEgd2l0aCB0
aGUgYGZlYXR1cmVQbG90YCBmdW5jdGlvbiBpbiB0aGUgY2FyZXQgcGFja2FnZTo8L2Rpdj48ZGl2
Pjxicj48L2Rpdj48ZGl2PmBgYHI8L2Rpdj48ZGl2PmxpYnJhcnkoY2FyZXQpPC9kaXY+PGRpdj5z
ZXQuc2VlZCg0Mik8L2Rpdj48ZGl2PmRhdGEoaXJpcyk8L2Rpdj48ZGl2PmZlYXR1cmVQbG90KHgg
PSBpcmlzWywgMTo0XSw8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IHkgPSBpcmlzJFNwZWNpZXMsPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBwbG90ID0gInBhaXJzIiw8L2Rpdj48ZGl2PiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGF1dG8ua2V5ID0gbGlzdChjb2x1bW5z
ID0gMykpPC9kaXY+PGRpdj5gYGA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pnh4LWZlYXR1cmVw
bG90PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5OZXh0LCBhZnRlciBzcGxpdHRpbmcgdGhlIGRh
dGEgaW50byB0cmFpbmluZyBhbmQgdGVzdGluZyBzZXRzIGFuZCB1c2luZyB0aGUgY2FyZXQgcGFj
a2FnZSB0byBhdXRvbWF0ZSB0cmFpbmluZyBhbmQgdGVzdGluZyBib3RoIHJhbmRvbSBmb3Jlc3Qg
YW5kIHBhcnRpYWwgbGVhc3Qgc3F1YXJlcyBtb2RlbHMgdXNpbmcgcmVwZWF0ZWQgMTAtZm9sZCBj
cm9zcy12YWxpZGF0aW9uIChbc2VlIHRoZSBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vVVZhLVIt
VXNlcnMtR3JvdXAvbWVldHVwL2Jsb2IvbWFzdGVyLzIwMTUtMDItMTktY2FyZXQvY2FyZXRfaXJp
cy5SKSwgaXQgdHVybnMgb3V0IHJhbmRvbSBmb3Jlc3Qgb3V0cGVyZm9ybXMgUExTIGluIHRoaXMg
Y2FzZSwgYW5kIHBlcmZvcm1zIGZhaXJseSB3ZWxsIG92ZXJhbGw6PC9kaXY+PGRpdj48YnI+PC9k
aXY+PGRpdj58ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3NldG9z
YXwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7dmVyc2ljb2xvcnwgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7dmlyZ2luaWNhfDwvZGl2PjxkaXY+fDotLS0tLS0tLS0tLS0tLS0tLS0tLXwt
LS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLTp8PC9kaXY+
PGRpdj58U2Vuc2l0aXZpdHkgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3wgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuMDB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuMDB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IDAuMDB8PC9kaXY+PGRpdj58U3BlY2lmaWNpdHkgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOzEuMDB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzAuNTB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDEuMDB8PC9k
aXY+PGRpdj58UG9zIFByZWQgVmFsdWUgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfCAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MS4wMHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7MC41MHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7TmFOfDwvZGl2PjxkaXY+fE5lZyBQcmVkIFZhbHVlICZuYnNwOyAm
bmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuMDB8ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEuMDB8ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDAuNjd8PC9kaXY+PGRpdj58UHJl
dmFsZW5jZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzAuMzN8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzAuMzN8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IDAuMzN8PC9kaXY+PGRpdj58RGV0ZWN0aW9uIFJhdGUgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgfCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MC4zM3wgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MC4zM3wgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMC4wMHw8L2Rpdj48ZGl2PnxEZXRlY3Rpb24g
UHJldmFsZW5jZSB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDswLjMzfCAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDswLjY3fCAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwLjAwfDwvZGl2PjxkaXY+fEJhbGFu
Y2VkIEFjY3VyYWN5ICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsxLjAwfCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDswLjc1fCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAwLjUwfDwv
ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QSBiaWcgdGhhbmtzIHRvIE1hcmsgYW5kIFN0ZXZlIGF0
IEhlbW9zaGVhciBmb3IgcHV0dGluZyB0aGlzIHRvZ2V0aGVyITwvZGl2Pg==">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com0tag:blogger.com,1999:blog-6232819486261696035.post-51470754142444255612015-02-26T13:30:00.002-06:002015-02-27T04:14:12.639-06:00Using and Abusing Data Visualization: Anscombe's Quartet and Cheating Bonferroni<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=5147075414244425561" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
<a href="http://en.wikipedia.org/wiki/Anscombe%27s_quartet">Anscombe’s quartet</a> comprises four datasets that have nearly identical simple statistical properties, yet appear very different when graphed. Each dataset consists of eleven (<em>x</em>,<em>y</em>) points. They were <a href="http://www.jstor.org/stable/2682899?seq=1#page_scan_tab_contents">constructed in 1973 by the statistician Francis Anscombe</a> to demonstrate both the importance of graphing data before analyzing it and the effect of outliers on statistical properties.</div>
<div style="margin: 1.2em 0px !important;">
Let’s load and view the data. There’s a built-in dataset, but I munged the data into a <a href="http://www.jstatsoft.org/v59/i10/paper">tidy</a> format and included it in an R package that I wrote primarily for myself.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"># If you don't have Tmisc installed, first install devtools, then install
# from github: install.packages('devtools')
# devtools::install_github('stephenturner/Tmisc')
library(Tmisc)
data(quartet)
str(quartet)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## 'data.frame': 44 obs. of 3 variables:
## $ set: Factor w/ 4 levels "I","II","III",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ x : int 10 8 13 9 11 14 6 4 12 7 ...
## $ y : num 8.04 6.95 7.58 8.81 8.33 ...
</code></pre>
<table style="border-collapse: collapse; border-spacing: 0px; border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 1.2em 0px; padding: 0px;">
<thead>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: center;">set</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: center;">x</th>
<th style="background-color: #f0f0f0; border: 1px solid rgb(204, 204, 204); font-size: 1em; font-weight: bold; margin: 0px; padding: 0.5em 1em; text-align: center;">y</th>
</tr>
</thead>
<tbody style="border: 0px; margin: 0px; padding: 0px;">
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">I</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">10</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8.04</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">I</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">6.95</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">I</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">13</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">7.58</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">II</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">10</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">9.14</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">II</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8.14</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">II</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">13</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8.74</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">III</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">10</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">7.46</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">III</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">6.77</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">III</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">13</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">12.74</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">IV</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">6.58</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">IV</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">5.76</td>
</tr>
<tr style="background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">IV</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">8</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">7.71</td>
</tr>
<tr style="background-color: #f8f8f8; background-color: white; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px; margin: 0px; padding: 0px;">
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
<td style="border: 1px solid rgb(204, 204, 204); font-size: 1em; margin: 0px; padding: 0.5em 1em; text-align: center;">…</td>
</tr>
</tbody>
</table>
<div style="margin: 1.2em 0px !important;">
Now, let’s compute the mean and standard deviation of both x and y, and the correlation coefficient between x and y for each dataset.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(dplyr)
quartet %>%
group_by(set) %>%
summarize(mean(x), sd(x), mean(y), sd(y), cor(x,y))
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## Source: local data frame [4 x 6]
##
## set mean(x) sd(x) mean(y) sd(y) cor(x, y)
## 1 I 9 3.32 7.5 2.03 0.816
## 2 II 9 3.32 7.5 2.03 0.816
## 3 III 9 3.32 7.5 2.03 0.816
## 4 IV 9 3.32 7.5 2.03 0.817
</code></pre>
<div style="margin: 1.2em 0px !important;">
Looks like each dataset has the same mean, median, standard deviation, and correlation coefficient between <em>x</em> and <em>y</em>.</div>
<div style="margin: 1.2em 0px !important;">
Now, let’s plot y versus x for each set with a linear regression trendline displayed on each plot:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(ggplot2)
p = ggplot(quartet, aes(x, y)) + geom_point()
p = p + geom_smooth(method = lm, se = FALSE)
p = p + facet_wrap(~set)
p
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF0IESwGlplJ7qf9k2iAHtemlpsWPD2vwKeRrCd0FqKUpGWIicJXHtVv9bQskQ-bEOVCtlFfeZIn24yS-79ibRH1nTOqSu8xx8jZEkUpYuS3ohfn22Fq6dJO1te7TrFzmXTH8ZPiTkwPg/s1600/fig-anscombe.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF0IESwGlplJ7qf9k2iAHtemlpsWPD2vwKeRrCd0FqKUpGWIicJXHtVv9bQskQ-bEOVCtlFfeZIn24yS-79ibRH1nTOqSu8xx8jZEkUpYuS3ohfn22Fq6dJO1te7TrFzmXTH8ZPiTkwPg/s1600/fig-anscombe.png" height="640" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
This classic example really illustrates the importance of <em>looking at your data</em>, not just the summary statistics and model parameters you compute from it.</div>
<div style="margin: 1.2em 0px !important;">
With that said, you can’t use data visualization to “cheat” your way into statistical significance. I recently had a collaborator who wanted some help automating a data visualization task so that she could decide which correlations to test. <strong>This is a terrible idea, and it’s going to get you in serious type I error trouble</strong>. To see what I mean, consider an experiment where you have a single outcome and lots of potential predictors to test individually. For example, some outcome and a bunch of SNPs or gene expression measurements. You can’t just visually inspect all those relationships then cherry-pick the ones you want to evaluate with a statistical hypothesis test, thinking that you’ve outsmarted your way around a painful multiple-testing correction.</div>
<div style="margin: 1.2em 0px !important;">
Here’s a simple simulation showing why that doesn’t fly. In this example, I’m simulating 100 samples with a single outcome variable <em>y</em> and 64 different predictor variables, <em>x</em>. I might be interested in which <em>x</em> variable is associated with my <em>y</em> (e.g., which of my many gene expression measurement is associated with measured liver toxicity). But in this case, <strong>both <em>x</em> and <em>y</em> are random numbers</strong>. That is, <strong>I know for a fact the null hypothesis is true</strong>, because that’s what I’ve simulated. Now we can make a scatterplot for each predictor variable against our outcome, and look at that plot.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(dplyr)
set.seed(42)
ndset = 64
n = 100
d = data_frame(
set = factor(rep(1:ndset, each = n)),
x = rnorm(n * ndset),
y = rep(rnorm(n), ndset))
d
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## Source: local data frame [6,400 x 3]
##
## set x y
## 1 1 1.3710 1.2546
## 2 1 -0.5647 0.0936
## 3 1 0.3631 -0.0678
## 4 1 0.6329 0.2846
## 5 1 0.4043 1.0350
## 6 1 -0.1061 -2.1364
## 7 1 1.5115 -1.5967
## 8 1 -0.0947 0.7663
## 9 1 2.0184 1.8043
## 10 1 -0.0627 -0.1122
## .. ... ... ...
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">ggplot(d, aes(x, y)) + geom_point() + geom_smooth(method = lm) + facet_wrap(~set)
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2jXtD3693xankyVDCtaOUOlh1BcZYYDy0jEikgbncOuXKy8pPDbxeU8hcJ765FJ0sDAPn_xV4KnefQut7tVpqgMCRe_ixASKfTXF0mV1Mn9dvtHH2xU1_vszA86iYTxSHLLkKqB4Souc/s1600/fig-type1error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2jXtD3693xankyVDCtaOUOlh1BcZYYDy0jEikgbncOuXKy8pPDbxeU8hcJ765FJ0sDAPn_xV4KnefQut7tVpqgMCRe_ixASKfTXF0mV1Mn9dvtHH2xU1_vszA86iYTxSHLLkKqB4Souc/s1600/fig-type1error.png" height="640" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
Now, if I were to go through this data and compute the p-value for the linear regression of each x on y, I’d get a uniform distribution of p-values, my type I error is where it should be, and my FDR and Bonferroni-corrected p-values would almost all be 1. This is what we expect — remember, the null hypothesis <em>is true</em>.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(dplyr)
results = d %>%
group_by(set) %>%
do(mod = lm(y ~ x, data = .)) %>%
summarize(set = set, p = anova(mod)$"Pr(>F)"[1]) %>%
mutate(bon = p.adjust(p, method = "bonferroni")) %>%
mutate(fdr = p.adjust(p, method = "fdr"))
results
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">## Source: local data frame [64 x 4]
##
## set p bon fdr
## 1 1 0.2738 1.000 0.749
## 2 2 0.2125 1.000 0.749
## 3 3 0.7650 1.000 0.900
## 4 4 0.2094 1.000 0.749
## 5 5 0.8073 1.000 0.900
## 6 6 0.0132 0.844 0.749
## 7 7 0.4277 1.000 0.820
## 8 8 0.7323 1.000 0.900
## 9 9 0.9323 1.000 0.932
## 10 10 0.1600 1.000 0.749
## .. ... ... ... ...
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(qqman)
qq(results$p)
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsipYdsWfjyMPy19UG9Kn3K55YKLgklJgl3BSzJJOHtBt4rSCioxxKWaeg8ZjTKGjZ5SZgGMZkgKBzvGt-fZDP_qBV40Uf1CpuugRptTdA2jSqzvSxpNXFaAmC51x6C_2BgxzVQoqwbxo/s1600/qqplot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsipYdsWfjyMPy19UG9Kn3K55YKLgklJgl3BSzJJOHtBt4rSCioxxKWaeg8ZjTKGjZ5SZgGMZkgKBzvGt-fZDP_qBV40Uf1CpuugRptTdA2jSqzvSxpNXFaAmC51x6C_2BgxzVQoqwbxo/s1600/qqplot.png" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
<strong>BUT</strong>, if I were to look at those plots above and cherry-pick out which hypotheses to test based on how strong the correlation looks, <strong>my type I error will skyrocket</strong>. Looking at the plot above, it looks like the <em>x</em> variables 6, 28, 41, and 49 have a particularly strong correlation with my outcome, <em>y</em>. What happens if I try to do the statistical test on only those variables?</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">results %>% filter(set %in% c(6, 28, 41, 49))
</code></pre>
<pre style="margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span style="font-family: Consolas, Inconsolata, Courier, monospace;"><span style="font-size: 1em; line-height: 1.2em;">## Source: local data frame [4 x 4]
##
## set p bon fdr
## 1 6 0.0132 0.844 0.749
## 2 28 0.0338 1.000 0.749
## 3 41 0.0624 1.000 0.749
## 4 49 0.0898 1.000 0.749</span></span><span style="font-family: Times;"><span style="white-space: normal;">
</span></span></code></pre>
<div style="margin: 1.2em 0px !important;">
When I do that, my p-values for those four tests are all below 0.1, with two below 0.05 (and I'll say it again, the null hypothesis is true in this experiment, because I've simulated random data). In other words, my type I error is now completely out of control, with more than 50% false positives at a p<0.05 level. You'll notice that the Bonferroni and FDR-corrected p-values (correcting for all 64 tests) are still not significant.<br />
<br />
<!--0--><!--0-->
The moral of the story here is to always look at your data, but don't "cheat" by basing which statistical tests you perform based solely on that visualization exercise.</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com5tag:blogger.com,1999:blog-6232819486261696035.post-81902814449348102182015-02-04T11:19:00.000-06:002015-02-04T11:19:21.625-06:00Microbial Genomics: the State of the Art in 2015<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=8190281444934810218;onPublishedMenu=posts;onClosedMenu=posts;postNum=0;src=link">
<div style="margin: 1.2em 0px !important;">
<em>Current Opinion in Microbiology</em> recently published a special issue in genomics. In an excellent editorial overview, <a href="http://dx.doi.org/10.1016/j.mib.2014.12.001">“Genomics: The era of genomically-enabled microbiology”</a>, Neil Hall and Jay Hinton give an overview of the state of the field in microbial genomics, summarize recent contributions, and give a great synopsis of each of the reviews in this issue. Hall and Hinton’s editorial overview goes into a little more depth, but here’s a rundown of the reviews in this special issue. There’s a lot of good stuff here!</div>
<div style="margin: 1.2em 0px !important;">
<a href="http://www.sciencedirect.com/science/article/pii/S1369527414001787">Quantitative bacterial transcriptomics with RNA-seq</a> (James Creecy and Tyrrell Conway) discusses RNA-seq in bacteria and how transcriptome analysis adds a wealth of annotation information to the genome.</div>
<div style="margin: 1.2em 0px !important;">
<a href="http://www.sciencedirect.com/science/article/pii/S1369527414001817">One chromosome, one contig: complete microbial genomes from long-read sequencing and assembly</a> (Sergey Koren and Adam Phillippy) describes newer long-read sequencing technologies and their characteristics, discusses how microbial genomes can be easily and automatically finished using these methods for under $1,000, and discusses challenges for microbial and metagenome assembly.</div>
<div style="margin: 1.2em 0px !important;">
<a href="http://www.sciencedirect.com/science/article/pii/S1369527414001842">Using comparative genomics to drive new discoveries in microbiology</a> (Daniel Haft) describes progress using comparative genomics to make new discoveries, and takes the reader on a “bioinformatics journey” to describe a code-breaking exercise in comparative genomics that starts with weak hypotheses and uses genomics to fill in the biological picture.</div>
<div style="margin: 1.2em 0px !important;">
<a href="http://www.sciencedirect.com/science/article/pii/S1369527414001799">Taking the pseudo out of pseudogenes</a> (Ian Goodhead and Alistair Darby) reviews how pseudogenes are surprisingly prevalent, and discusses how problems with genome annotation can be addressed by combining multiple “omics” data.</div>
<div style="margin: 1.2em 0px !important;">
<a href="http://www.sciencedirect.com/science/article/pii/S1369527414001830">Ten years of pan-genome analyses</a> (George Vernikos <em>et al.</em>) describes how pan-genome analyses provide a framework for predicting and modling genomic diversity, where the “core genome” of many bacterial species constitutes only the minority of genes.</div>
<div style="margin: 1.2em 0px !important;">
<a href="http://www.sciencedirect.com/science/article/pii/S1369527414001854">Lateral gene transfers and the origins of the eukaryote proteome: a view from microbial parasites</a> (Robert Hirt <em>et al.</em>) reviews the dynamic nature of lateral gene transfer, its role in microbial diversity, how it contributes to eukaryotic genomes, and how once again integrating different “omics” methodologies is needed to recognize the extent to which LGT affects eukaryotes.</div>
<div style="margin: 1.2em 0px !important;">
<a href="http://www.sciencedirect.com/science/article/pii/S1369527414001635">The application of genomics to tracing bacterial pathogen transmission</a> (Nicholas Croucher and Xavier Didelot) reviews how bacterial whole-genome sequencing gives you the ultimate resolution for investigating direct pathogen transmission, distinguishing transmission chains, and defining outbreaks. If you haven’t kept up with this quickly growing body of literature, this review is a great place to start catching up.</div>
<div style="margin: 1.2em 0px !important;">
<a href="http://www.sciencedirect.com/science/article/pii/S136952741400160X">The impact of genomics on population genetics of parasitic diseases</a> (Daniel Hupalo <em>et al.</em>) describes the influence of genomics on parasite population genetics and how burgeoning genomic data has enabled new types of investigations, and focuses on <em>Plasmodium</em> population genomics as a foundation for studies of neglected parasites.</div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PGRpdj4qQ3VycmVudCBPcGluaW9uIGluIE1pY3JvYmlvbG9neSogcmVjZW50bHkgcHVibGlzaGVk
IGEgc3BlY2lhbCBpc3N1ZSBpbiBnZW5vbWljcy4gSW4gYW4gZXhjZWxsZW50IGVkaXRvcmlhbCBv
dmVydmlldywgWyJHZW5vbWljczogVGhlIGVyYSBvZiBnZW5vbWljYWxseS1lbmFibGVkIG1pY3Jv
YmlvbG9neSJdKCBodHRwOi8vZHguZG9pLm9yZy8xMC4xMDE2L2oubWliLjIwMTQuMTIuMDAxKSwg
TmVpbCBIYWxsIGFuZCBKYXkgSGludG9uIGdpdmUgYW4gb3ZlcnZpZXcgb2YgdGhlIHN0YXRlIG9m
IHRoZSBmaWVsZCBpbiBtaWNyb2JpYWwgZ2Vub21pY3MsIHN1bW1hcml6ZSByZWNlbnQgY29udHJp
YnV0aW9ucywgYW5kIGdpdmUgYSBncmVhdCBzeW5vcHNpcyBvZiBlYWNoIG9mIHRoZSByZXZpZXdz
IGluIHRoaXMgaXNzdWUuIEhhbGwgYW5kIEhpbnRvbidzIGVkaXRvcmlhbCBvdmVydmlldyBnb2Vz
IGludG8gYSBsaXR0bGUgbW9yZSBkZXB0aCwgYnV0IGhlcmUncyBhIHJ1bmRvd24gb2YgdGhlIHJl
dmlld3MgaW4gdGhpcyBzcGVjaWFsIGlzc3VlLiBUaGVyZSdzIGEgbG90IG9mIGdvb2Qgc3R1ZmYg
aGVyZSE8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PltRdWFudGl0YXRpdmUgYmFjdGVyaWFsIHRy
YW5zY3JpcHRvbWljcyB3aXRoIFJOQS1zZXFdKGh0dHA6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20v
c2NpZW5jZS9hcnRpY2xlL3BpaS9TMTM2OTUyNzQxNDAwMTc4NykgKEphbWVzIENyZWVjeSBhbmQg
VHlycmVsbCBDb253YXkpIGRpc2N1c3NlcyBSTkEtc2VxIGluIGJhY3RlcmlhIGFuZCBob3cgdHJh
bnNjcmlwdG9tZSBhbmFseXNpcyBhZGRzIGEgd2VhbHRoIG9mIGFubm90YXRpb24gaW5mb3JtYXRp
b24gdG8gdGhlIGdlbm9tZS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PltPbmUgY2hyb21vc29t
ZSwgb25lIGNvbnRpZzogY29tcGxldGUgbWljcm9iaWFsIGdlbm9tZXMgZnJvbSBsb25nLXJlYWQg
c2VxdWVuY2luZyBhbmQgYXNzZW1ibHldKGh0dHA6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20vc2Np
ZW5jZS9hcnRpY2xlL3BpaS9TMTM2OTUyNzQxNDAwMTgxNykgKFNlcmdleSBLb3JlbiBhbmQgQWRh
bSBQaGlsbGlwcHkpIGRlc2NyaWJlcyBuZXdlciBsb25nLXJlYWQgc2VxdWVuY2luZyB0ZWNobm9s
b2dpZXMgYW5kIHRoZWlyIGNoYXJhY3RlcmlzdGljcywgZGlzY3Vzc2VzIGhvdyBtaWNyb2JpYWwg
Z2Vub21lcyBjYW4gYmUgZWFzaWx5IGFuZCBhdXRvbWF0aWNhbGx5IGZpbmlzaGVkIHVzaW5nIHRo
ZXNlIG1ldGhvZHMgZm9yIHVuZGVyICQxLDAwMCwgYW5kIGRpc2N1c3NlcyBjaGFsbGVuZ2VzIGZv
ciBtaWNyb2JpYWwgYW5kIG1ldGFnZW5vbWUgYXNzZW1ibHkuPC9kaXY+PGRpdj48YnI+PC9kaXY+
PGRpdj5bVXNpbmcgY29tcGFyYXRpdmUgZ2Vub21pY3MgdG8gZHJpdmUgbmV3IGRpc2NvdmVyaWVz
IGluIG1pY3JvYmlvbG9neV0oaHR0cDovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2Fy
dGljbGUvcGlpL1MxMzY5NTI3NDE0MDAxODQyKSAoRGFuaWVsIEhhZnQpIGRlc2NyaWJlcyBwcm9n
cmVzcyB1c2luZyBjb21wYXJhdGl2ZSBnZW5vbWljcyB0byBtYWtlIG5ldyBkaXNjb3Zlcmllcywg
YW5kIHRha2VzIHRoZSByZWFkZXIgb24gYSAiYmlvaW5mb3JtYXRpY3Mgam91cm5leSIgdG8gZGVz
Y3JpYmUgYSBjb2RlLWJyZWFraW5nIGV4ZXJjaXNlIGluIGNvbXBhcmF0aXZlIGdlbm9taWNzIHRo
YXQgc3RhcnRzIHdpdGggd2VhayBoeXBvdGhlc2VzIGFuZCB1c2VzIGdlbm9taWNzIHRvIGZpbGwg
aW4gdGhlIGJpb2xvZ2ljYWwgcGljdHVyZS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PltUYWtp
bmcgdGhlIHBzZXVkbyBvdXQgb2YgcHNldWRvZ2VuZXNdKGh0dHA6Ly93d3cuc2NpZW5jZWRpcmVj
dC5jb20vc2NpZW5jZS9hcnRpY2xlL3BpaS9TMTM2OTUyNzQxNDAwMTc5OSkgKElhbiBHb29kaGVh
ZCBhbmQgQWxpc3RhaXIgRGFyYnkpIHJldmlld3MgaG93IHBzZXVkb2dlbmVzIGFyZSBzdXJwcmlz
aW5nbHkgcHJldmFsZW50LCBhbmQgZGlzY3Vzc2VzIGhvdyBwcm9ibGVtcyB3aXRoIGdlbm9tZSBh
bm5vdGF0aW9uIGNhbiBiZSBhZGRyZXNzZWQgYnkgY29tYmluaW5nIG11bHRpcGxlICJvbWljcyIg
ZGF0YS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PltUZW4geWVhcnMgb2YgcGFuLWdlbm9tZSBh
bmFseXNlc10oaHR0cDovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvcGlp
L1MxMzY5NTI3NDE0MDAxODMwKSAoR2VvcmdlIFZlcm5pa29zICpldCBhbC4qKSBkZXNjcmliZXMg
aG93IHBhbi1nZW5vbWUgYW5hbHlzZXMgcHJvdmlkZSBhIGZyYW1ld29yayBmb3IgcHJlZGljdGlu
ZyBhbmQgbW9kbGluZyBnZW5vbWljIGRpdmVyc2l0eSwgd2hlcmUgdGhlICJjb3JlIGdlbm9tZSIg
b2YgbWFueSBiYWN0ZXJpYWwgc3BlY2llcyBjb25zdGl0dXRlcyBvbmx5IHRoZSBtaW5vcml0eSBv
ZiBnZW5lcy48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PltMYXRlcmFsIGdlbmUgdHJhbnNmZXJz
IGFuZCB0aGUgb3JpZ2lucyBvZiB0aGUgZXVrYXJ5b3RlIHByb3Rlb21lOiBhIHZpZXcgZnJvbSBt
aWNyb2JpYWwgcGFyYXNpdGVzXShodHRwOi8vd3d3LnNjaWVuY2VkaXJlY3QuY29tL3NjaWVuY2Uv
YXJ0aWNsZS9waWkvUzEzNjk1Mjc0MTQwMDE4NTQpIChSb2JlcnQgSGlydCAqZXQgYWwuKikgcmV2
aWV3cyB0aGUgZHluYW1pYyBuYXR1cmUgb2YgbGF0ZXJhbCBnZW5lIHRyYW5zZmVyLCBpdHMgcm9s
ZSBpbiBtaWNyb2JpYWwgZGl2ZXJzaXR5LCBob3cgaXQgY29udHJpYnV0ZXMgdG8gZXVrYXJ5b3Rp
YyBnZW5vbWVzLCBhbmQgaG93IG9uY2UgYWdhaW4gaW50ZWdyYXRpbmcgZGlmZmVyZW50ICJvbWlj
cyIgbWV0aG9kb2xvZ2llcyBpcyBuZWVkZWQgdG8gcmVjb2duaXplIHRoZSBleHRlbnQgdG8gd2hp
Y2ggTEdUIGFmZmVjdHMgZXVrYXJ5b3Rlcy48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PltUaGUg
YXBwbGljYXRpb24gb2YgZ2Vub21pY3MgdG8gdHJhY2luZyBiYWN0ZXJpYWwgcGF0aG9nZW4gdHJh
bnNtaXNzaW9uXShodHRwOi8vd3d3LnNjaWVuY2VkaXJlY3QuY29tL3NjaWVuY2UvYXJ0aWNsZS9w
aWkvUzEzNjk1Mjc0MTQwMDE2MzUpIChOaWNob2xhcyBDcm91Y2hlciBhbmQgWGF2aWVyIERpZGVs
b3QpIHJldmlld3MgaG93IGJhY3RlcmlhbCB3aG9sZS1nZW5vbWUgc2VxdWVuY2luZyBnaXZlcyB5
b3UgdGhlIHVsdGltYXRlIHJlc29sdXRpb24gZm9yIGludmVzdGlnYXRpbmcgZGlyZWN0IHBhdGhv
Z2VuIHRyYW5zbWlzc2lvbiwgZGlzdGluZ3Vpc2hpbmcgdHJhbnNtaXNzaW9uIGNoYWlucywgYW5k
IGRlZmluaW5nIG91dGJyZWFrcy4gSWYgeW91IGhhdmVuJ3Qga2VwdCB1cCB3aXRoIHRoaXMgcXVp
Y2tseSBncm93aW5nIGJvZHkgb2YgbGl0ZXJhdHVyZSwgdGhpcyByZXZpZXcgaXMgYSBncmVhdCBw
bGFjZSB0byBzdGFydCBjYXRjaGluZyB1cC48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PltUaGUg
aW1wYWN0IG9mIGdlbm9taWNzIG9uIHBvcHVsYXRpb24gZ2VuZXRpY3Mgb2YgcGFyYXNpdGljIGRp
c2Vhc2VzXShodHRwOi8vd3d3LnNjaWVuY2VkaXJlY3QuY29tL3NjaWVuY2UvYXJ0aWNsZS9waWkv
UzEzNjk1Mjc0MTQwMDE2MFgpIChEYW5pZWwgSHVwYWxvICpldCBhbC4qKSBkZXNjcmliZXMgdGhl
IGluZmx1ZW5jZSBvZiBnZW5vbWljcyBvbiBwYXJhc2l0ZSBwb3B1bGF0aW9uIGdlbmV0aWNzIGFu
ZCBob3cgYnVyZ2VvbmluZyBnZW5vbWljIGRhdGEgaGFzIGVuYWJsZWQgbmV3IHR5cGVzIG9mIGlu
dmVzdGlnYXRpb25zLCBhbmQgZm9jdXNlcyBvbiAqUGxhc21vZGl1bSogcG9wdWxhdGlvbiBnZW5v
bWljcyBhcyBhIGZvdW5kYXRpb24gZm9yIHN0dWRpZXMgb2YgbmVnbGVjdGVkIHBhcmFzaXRlcy48
L2Rpdj48ZGl2Pjxicj48L2Rpdj4=">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com0tag:blogger.com,1999:blog-6232819486261696035.post-34909256242748301932015-02-03T07:33:00.000-06:002015-02-03T07:33:26.916-06:00R + ggplot2 Graph Catalog<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=3490925624274830193" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
Joanna Zhao’s and Jenny Bryan’s <a href="http://shinyapps.stat.ubc.ca/r-graph-catalog/">R graph catalog</a> is meant to be a complement to the physical book, <a href="http://www.amazon.com/o/ASIN/0985911123/ref=nosim/gettgenedone-20">Creating More Effective Graphs</a>, but it’s a really nice gallery in its own right. The catalog shows a series of different data visualizations, all made with R and ggplot2. Click on any of the plots and you get the R code necessary to generate the data and produce the plot.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQgxevpiE7IaTVsfvox2E6RafTbk9RHmDQG0ALjBXZw31eDImD7VuGvYP0W4jVG6ewkq3PibfaFgiCzBW3FyEE5Odzwg7LlLvgW-sm9UqouvP0IjDuFBTLEJCPC_-XDDz0vAX4iQ-DJU4/s1600/Screen+Shot+2015-02-02+at+7.15.45+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQgxevpiE7IaTVsfvox2E6RafTbk9RHmDQG0ALjBXZw31eDImD7VuGvYP0W4jVG6ewkq3PibfaFgiCzBW3FyEE5Odzwg7LlLvgW-sm9UqouvP0IjDuFBTLEJCPC_-XDDz0vAX4iQ-DJU4/s1600/Screen+Shot+2015-02-02+at+7.15.45+AM.png" height="352" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
You can use the panel on the left to filter by plot type, graphical elements, or the chapter of the book if you’re actually using it. All of the code and data used for this website is open-source, in <a href="https://github.com/jennybc/r-graph-catalog">this GitHub repository</a>. Here's an example for plotting population demographic data by county that uses faceting to create small multiples:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(ggplot2)
library(reshape2)
library(grid)
this_base = "fig08-15_population-data-by-county"
my_data = data.frame(
Race = c("White", "Latino", "Black", "Asian American", "All Others"),
Bronx = c(194000, 645000, 415000, 38000, 40000),
Kings = c(855000, 488000, 845000, 184000, 93000),
New.York = c(703000, 418000, 233000, 143000, 39000),
Queens = c(733000, 556000, 420000, 392000, 128000),
Richmond = c(317000, 54000, 40000, 24000, 9000),
Nassau = c(986000, 133000, 129000, 62000, 24000),
Suffolk = c(1118000, 149000, 92000, 34000, 26000),
Westchester = c(592000, 145000, 123000, 41000, 23000),
Rockland = c(205000, 29000, 30000, 16000, 6000),
Bergen = c(638000, 91000, 43000, 94000, 18000),
Hudson = c(215000, 242000, 73000, 57000, 22000),
Passiac = c(252000, 147000, 60000, 18000, 12000))
my_data_long = melt(my_data, id = "Race",
variable.name = "county", value.name = "population")
my_data_long$county = factor(
my_data_long$county, c("New.York", "Queens", "Kings", "Bronx", "Nassau",
"Suffolk", "Hudson", "Bergen", "Westchester",
"Rockland", "Richmond", "Passiac"))
my_data_long$Race =
factor(my_data_long$Race,
rev(c("White", "Latino", "Black", "Asian American", "All Others")))
p = ggplot(my_data_long, aes(x = population / 1000, y = Race)) +
geom_point() +
facet_wrap(~ county, ncol = 3) +
scale_x_continuous(breaks = seq(0, 1000, 200),
labels = c(0, "", 400, "", 800, "")) +
labs(x = "Population (thousands)", y = NULL) +
ggtitle("Fig 8.15 Population Data by County") +
theme_bw() +
theme(panel.grid.major.y = element_line(colour = "grey60"),
panel.grid.major.x = element_blank(),
panel.grid.minor = element_blank(),
panel.margin = unit(0, "lines"),
plot.title = element_text(size = rel(1.1), face = "bold", vjust = 2),
strip.background = element_rect(fill = "grey80"),
axis.ticks.y = element_blank())
p
ggsave(paste0(this_base, ".png"),
p, width = 6, height = 8)
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKPIxxxeeZeY5n2PQ3sDb1QF9nFdaKaZHTS5gOdZq1GQgiFzarBisv_A7UIjiMklzptM7xPjeOtYv_sW_b6OZoK9FY2uRIdmF-gaN62r6Ob9F58YaoynOIkmSDOOAIe-FCEHeWY0-ZUrE/s1600/fig08-15_population-data-by-county.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKPIxxxeeZeY5n2PQ3sDb1QF9nFdaKaZHTS5gOdZq1GQgiFzarBisv_A7UIjiMklzptM7xPjeOtYv_sW_b6OZoK9FY2uRIdmF-gaN62r6Ob9F58YaoynOIkmSDOOAIe-FCEHeWY0-ZUrE/s1600/fig08-15_population-data-by-county.png" height="640" width="480" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
Keep in mind not all of these visualizations are recommended. You’ll find pie charts, ugly grouped bar charts, and other plots for which I can’t think of any sensible name. Just because you <em>can</em> use the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">add_cat()</code> function from <a href="https://github.com/hilaryparker/cats">Hilary Parker’s cats package</a> to fetch a random cat picture from the internet and create an <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">annotation_raster</code> layer to add to your ggplot2 plot, doesn’t necessarily mean you <em>should</em> do such a thing for a publication-quality figure. But if you ever needed to know how, this R graph catalog can help you out.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(ggplot2)
this_base = "0002_add-background-with-cats-package"
## devtools::install_github("hilaryparker/cats")
library(cats)
## library(help = "cats")
p = ggplot(mpg, aes(cty, hwy)) +
add_cat() +
geom_point()
p
ggsave(paste0(this_base, ".png"), p, width = 6, height = 5)
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9riR4rwC_eOax7GBCntV_MwhwMxFVum0KNTrzSLUYKT8lUsM12uPsxMGoYnynpVElc7GGwyg8sIUlDQDzqofz7qi8PfdsGU4WnNoAxEObIV6J7moSN7gST_T1_JIWxNCroCIDfrhEeoE/s1600/0002_add-background-with-cats-package.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9riR4rwC_eOax7GBCntV_MwhwMxFVum0KNTrzSLUYKT8lUsM12uPsxMGoYnynpVElc7GGwyg8sIUlDQDzqofz7qi8PfdsGU4WnNoAxEObIV6J7moSN7gST_T1_JIWxNCroCIDfrhEeoE/s1600/0002_add-background-with-cats-package.png" height="532" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
<a href="http://shinyapps.stat.ubc.ca/r-graph-catalog/">R graph catalog</a> (via <a href="https://twitter.com/GenomeGal/">Laura Wiley</a>)</div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PHA+Sm9hbm5hIFpoYW8ncyBhbmQgSmVubnkgQnJ5YW4ncyBbUiBncmFwaCBjYXRhbG9nXShodHRw
Oi8vc2hpbnlhcHBzLnN0YXQudWJjLmNhL3ItZ3JhcGgtY2F0YWxvZy8pIGlzIG1lYW50IHRvIGJl
IGEgY29tcGxlbWVudCB0byB0aGUgcGh5c2ljYWwgYm9vaywgW0NyZWF0aW5nIE1vcmUgRWZmZWN0
aXZlIEdyYXBoc10oaHR0cDovL3d3dy5hbWF6b24uY29tL28vQVNJTi8wOTg1OTExMTIzL3JlZj1u
b3NpbS9nZXR0Z2VuZWRvbmUtMjApLCBidXQgaXQncyBhIHJlYWxseSBuaWNlIGdhbGxlcnkgaW4g
aXRzIG93biByaWdodC4gVGhlIGNhdGFsb2cgc2hvd3MgYSBzZXJpZXMgb2YgZGlmZmVyZW50IGRh
dGEgdmlzdWFsaXphdGlvbnMsIGFsbCBtYWRlIHdpdGggUiBhbmQgZ2dwbG90Mi4gQ2xpY2sgb24g
YW55IG9mIHRoZSBwbG90cyBhbmQgeW91IGdldCB0aGUgUiBjb2RlIG5lY2Vzc2FyeSB0byBnZW5l
cmF0ZSB0aGUgZGF0YSBhbmQgcHJvZHVjZSB0aGUgcGxvdC48L3A+PHA+PGJyPjwvcD48cD5TQ1JF
RU5TSE9UPC9wPjxwPjxicj48L3A+PHA+WW91IGNhbiB1c2UgdGhlIHBhbmVsIG9uIHRoZSBsZWZ0
IHRvIGZpbHRlciBieSBwbG90IHR5cGUsIGdyYXBoaWNhbCBlbGVtZW50cywgb3IgdGhlIGNoYXB0
ZXIgb2YgdGhlIGJvb2sgaWYgeW91J3JlIGFjdHVhbGx5IHVzaW5nIGl0LiBBbGwgb2YgdGhlIGNv
ZGUgYW5kIGRhdGEgdXNlZCBmb3IgdGhpcyB3ZWJzaXRlIGlzIG9wZW4tc291cmNlLCBpbiBbdGhp
cyBHaXRIdWIgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL2plbm55YmMvci1ncmFwaC1j
YXRhbG9nKS48L3A+PHA+PGJyPjwvcD48cD5gYGA8L3A+PHA+bGlicmFyeShnZ3Bsb3QyKTwvcD48
cD5saWJyYXJ5KHJlc2hhcGUyKTwvcD48cD5saWJyYXJ5KGdyaWQpPC9wPjxwPjxicj48L3A+PHA+
dGhpc19iYXNlID0gImZpZzA4LTE1X3BvcHVsYXRpb24tZGF0YS1ieS1jb3VudHkiPC9wPjxwPjxi
cj48L3A+PHA+bXlfZGF0YSA9IGRhdGEuZnJhbWUoPC9wPjxwPiZuYnNwOyBSYWNlID0gYygiV2hp
dGUiLCAiTGF0aW5vIiwgIkJsYWNrIiwgIkFzaWFuIEFtZXJpY2FuIiwgIkFsbCBPdGhlcnMiKSw8
L3A+PHA+Jm5ic3A7IEJyb254ID0gYygxOTQwMDAsIDY0NTAwMCwgNDE1MDAwLCAzODAwMCwgNDAw
MDApLDwvcD48cD4mbmJzcDsgS2luZ3MgPSBjKDg1NTAwMCwgNDg4MDAwLCA4NDUwMDAsIDE4NDAw
MCwgOTMwMDApLDwvcD48cD4mbmJzcDsgTmV3LllvcmsgPSBjKDcwMzAwMCwgNDE4MDAwLCAyMzMw
MDAsIDE0MzAwMCwgMzkwMDApLDwvcD48cD4mbmJzcDsgUXVlZW5zID0gYyg3MzMwMDAsIDU1NjAw
MCwgNDIwMDAwLCAzOTIwMDAsIDEyODAwMCksPC9wPjxwPiZuYnNwOyBSaWNobW9uZCA9IGMoMzE3
MDAwLCA1NDAwMCwgNDAwMDAsIDI0MDAwLCA5MDAwKSw8L3A+PHA+Jm5ic3A7IE5hc3NhdSA9IGMo
OTg2MDAwLCAxMzMwMDAsIDEyOTAwMCwgNjIwMDAsIDI0MDAwKSw8L3A+PHA+Jm5ic3A7IFN1ZmZv
bGsgPSBjKDExMTgwMDAsIDE0OTAwMCwgOTIwMDAsIDM0MDAwLCAyNjAwMCksPC9wPjxwPiZuYnNw
OyBXZXN0Y2hlc3RlciA9IGMoNTkyMDAwLCAxNDUwMDAsIDEyMzAwMCwgNDEwMDAsIDIzMDAwKSw8
L3A+PHA+Jm5ic3A7IFJvY2tsYW5kID0gYygyMDUwMDAsIDI5MDAwLCAzMDAwMCwgMTYwMDAsIDYw
MDApLDwvcD48cD4mbmJzcDsgQmVyZ2VuID0gYyg2MzgwMDAsIDkxMDAwLCA0MzAwMCwgOTQwMDAs
IDE4MDAwKSw8L3A+PHA+Jm5ic3A7IEh1ZHNvbiA9IGMoMjE1MDAwLCAyNDIwMDAsIDczMDAwLCA1
NzAwMCwgMjIwMDApLDwvcD48cD4mbmJzcDsgUGFzc2lhYyA9IGMoMjUyMDAwLCAxNDcwMDAsIDYw
MDAwLCAxODAwMCwgMTIwMDApKTwvcD48cD48YnI+PC9wPjxwPm15X2RhdGFfbG9uZyA9IG1lbHQo
bXlfZGF0YSwgaWQgPSAiUmFjZSIsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt2YXJpYWJsZS5u
YW1lID0gImNvdW50eSIsIHZhbHVlLm5hbWUgPSAicG9wdWxhdGlvbiIpPC9wPjxwPjxicj48L3A+
PHA+bXlfZGF0YV9sb25nJGNvdW50eSA9IGZhY3Rvcig8L3A+PHA+Jm5ic3A7IG15X2RhdGFfbG9u
ZyRjb3VudHksIGMoIk5ldy5Zb3JrIiwgIlF1ZWVucyIsICJLaW5ncyIsICJCcm9ueCIsICJOYXNz
YXUiLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsiU3VmZm9sayIsICJI
dWRzb24iLCAiQmVyZ2VuIiwgIldlc3RjaGVzdGVyIiw8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7IlJvY2tsYW5kIiwgIlJpY2htb25kIiwgIlBhc3NpYWMiKSk8L3A+PHA+
PGJyPjwvcD48cD5teV9kYXRhX2xvbmckUmFjZSA9PC9wPjxwPiZuYnNwOyBmYWN0b3IobXlfZGF0
YV9sb25nJFJhY2UsPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtyZXYo
YygiV2hpdGUiLCAiTGF0aW5vIiwgIkJsYWNrIiwgIkFzaWFuIEFtZXJpY2FuIiwgIkFsbCBPdGhl
cnMiKSkpPC9wPjxwPjxicj48L3A+PHA+cCA9IGdncGxvdChteV9kYXRhX2xvbmcsIGFlcyh4ID0g
cG9wdWxhdGlvbiAvIDEwMDAsIHkgPSBSYWNlKSkgKzwvcD48cD4mbmJzcDsgZ2VvbV9wb2ludCgp
ICs8L3A+PHA+Jm5ic3A7IGZhY2V0X3dyYXAofiBjb3VudHksIG5jb2wgPSAzKSArPC9wPjxwPiZu
YnNwOyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEwMDAsIDIwMCksPC9wPjxw
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDtsYWJlbHMgPSBjKDAsICIiLCA0MDAsICIiLCA4MDAsICIiKSkg
KzwvcD48cD4mbmJzcDsgbGFicyh4ID0gIlBvcHVsYXRpb24gKHRob3VzYW5kcykiLCB5ID0gTlVM
TCkgKzwvcD48cD4mbmJzcDsgZ2d0aXRsZSgiRmlnIDguMTUgUG9wdWxhdGlvbiBEYXRhIGJ5IENv
dW50eSIpICs8L3A+PHA+Jm5ic3A7IHRoZW1lX2J3KCkgKzwvcD48cD4mbmJzcDsgdGhlbWUocGFu
ZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJncmV5NjAiKSw8L3A+PHA+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRf
YmxhbmsoKSw8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHBhbmVsLmdyaWQubWlu
b3IgPSBlbGVtZW50X2JsYW5rKCksPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBw
YW5lbC5tYXJnaW4gPSB1bml0KDAsICJsaW5lcyIpLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuMSksIGZhY2Ug
PSAiYm9sZCIsIHZqdXN0ID0gMiksPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBz
dHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiZ3JleTgwIiksPC9wPjxwPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2JsYW5rKCkp
PC9wPjxwPjxicj48L3A+PHA+cDwvcD48cD48YnI+PC9wPjxwPmdnc2F2ZShwYXN0ZTAodGhpc19i
YXNlLCAiLnBuZyIpLDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtwLCB3aWR0aCA9
IDYsIGhlaWdodCA9IDgpPC9wPjxwPmBgYDwvcD48cD48YnI+PC9wPjxwPlhYLUdSQVBIPC9wPjxw
Pjxicj48L3A+PHA+S2VlcCBpbiBtaW5kIG5vdCBhbGwgb2YgdGhlc2UgdmlzdWFsaXphdGlvbnMg
YXJlIHJlY29tbWVuZGVkLiBZb3UnbGwgZmluZCBwaWUgY2hhcnRzLCB1Z2x5IGdyb3VwZWQgYmFy
IGNoYXJ0cywgYW5kIG90aGVyIHBsb3RzIGZvciB3aGljaCBJIGNhbid0IHRoaW5rIG9mIGFueSBz
ZW5zaWJsZSBuYW1lLiBKdXN0IGJlY2F1c2UgeW91IF9jYW5fIHVzZSB0aGUgYGFkZF9jYXQoKWAg
ZnVuY3Rpb24gZnJvbSBbSGlsYXJ5IFBhcmtlcidzIGNhdHMgcGFja2FnZV0oaHR0cHM6Ly9naXRo
dWIuY29tL2hpbGFyeXBhcmtlci9jYXRzKSB0byBmZXRjaCBhIHJhbmRvbSBjYXQgcGljdHVyZSBm
cm9tIHRoZSBpbnRlcm5ldCBhbmQgY3JlYXRlIGFuIGBhbm5vdGF0aW9uX3Jhc3RlcmAgbGF5ZXIg
dG8gYWRkIHRvIHlvdXIgZ2dwbG90MiBwbG90LCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4geW91
IF9zaG91bGRfIGRvIHN1Y2ggYSB0aGluZyBmb3IgYSBwdWJsaWNhdGlvbi1xdWFsaXR5IGZpZ3Vy
ZS4gQnV0IGlmIHlvdSBldmVyIG5lZWRlZCB0byBrbm93IGhvdywgdGhpcyBSIGdyYXBoIGNhdGFs
b2cgY2FuIGhlbHAgeW91IG91dC48L3A+PHA+PGJyPjwvcD48cD5gYGA8L3A+PHA+bGlicmFyeShn
Z3Bsb3QyKTwvcD48cD48YnI+PC9wPjxwPnRoaXNfYmFzZSA9ICIwMDAyX2FkZC1iYWNrZ3JvdW5k
LXdpdGgtY2F0cy1wYWNrYWdlIjwvcD48cD48YnI+PC9wPjxwPiMjIGRldnRvb2xzOjppbnN0YWxs
X2dpdGh1YigiaGlsYXJ5cGFya2VyL2NhdHMiKTwvcD48cD5saWJyYXJ5KGNhdHMpPC9wPjxwPiMj
IGxpYnJhcnkoaGVscCA9ICJjYXRzIik8L3A+PHA+PGJyPjwvcD48cD5wID0gZ2dwbG90KG1wZywg
YWVzKGN0eSwgaHd5KSkgKzwvcD48cD4mbmJzcDsgYWRkX2NhdCgpICs8L3A+PHA+Jm5ic3A7IGdl
b21fcG9pbnQoKTwvcD48cD5wPC9wPjxwPjxicj48L3A+PHA+Z2dzYXZlKHBhc3RlMCh0aGlzX2Jh
c2UsICIucG5nIiksIHAsIHdpZHRoID0gNiwgaGVpZ2h0ID0gNSk8L3A+PHA+YGBgPC9wPjxwPjxi
cj48L3A+PHA+WFgtY2F0PC9wPjxwPjxicj48L3A+PHA+W1IgZ3JhcGggY2F0YWxvZ10oaHR0cDov
L3NoaW55YXBwcy5zdGF0LnViYy5jYS9yLWdyYXBoLWNhdGFsb2cvKSAodmlhIFtMYXVyYSBXaWxl
eV0oaHR0cHM6Ly90d2l0dGVyLmNvbS9HZW5vbWVHYWwvKSk8L3A+">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com0tag:blogger.com,1999:blog-6232819486261696035.post-2350739172312172542015-01-20T14:55:00.000-06:002015-01-20T14:55:31.667-06:00Microbiome Digest BlogI have a <a href="http://gettinggeneticsdone.blogspot.com/search/label/Noteworthy%20blogs" target="_blank">noteworthy blogs</a> tag on this blog that I sort of forgot about, and haven't used in years. But I started reading one recently that's definitely qualified for the distinction.<br />
<br />
The <a href="http://www.microbiomedigest.com/" target="_blank">Microbiome Digest</a> is written by <a href="https://twitter.com/microbiomdigest" target="_blank">Elisabeth Bik</a>, a scientist studying the microbiome at Stanford. It's a near-daily compilation of papers and popular press articles mostly relating to microbiome research, split up into categories like the human microbiome, the non-human microbiome (soil, animal, plants, other environments), metagenomics and bioinformatics methods, reviews, news articles, and other general science or career advice articles.<br />
<br />
I imagine Elisabeth spends hours each week culling the huge onslaught of literature into these highly relevant digests. I wish someone else would do the same for other areas I care about so I don't have to. I subscribe to the RSS feed and the email list so I never miss a post. If you're at all interested in metagenomics or microbiome research, I suggest you do the same!<br />
<br />
<a href="http://www.microbiomedigest.com/" target="_blank">Microbiome Digest</a><div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com1tag:blogger.com,1999:blog-6232819486261696035.post-89100483839234186402015-01-14T07:56:00.001-06:002015-01-14T08:06:27.708-06:00Using the microbenchmark package to compare the execution time of R expressions<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=8910048383923418640" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
I recently learned about the <a href="http://cran.r-project.org/web/packages/microbenchmark/index.html">microbenchmark</a> package while browsing through Hadley’s <a href="http://adv-r.had.co.nz/Performance.html#microbenchmarking">advanced R programming book</a>. I’ve done some quick benchmarking using <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">system.time()</code> in a for loop and taking the average, but the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">microbenchmark</code> function in the microbenchmark package makes this much easier. Hadley gives the example of taking the square root of a vector using the built-in <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">sqrt</code> function versus the mathematical equivalent of raising the vector to the power of 0.5.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(microbenchmark)
x = runif(100)
microbenchmark(
sqrt(x),
x ^ 0.5
)
</code></pre>
<div style="margin: 1.2em 0px !important;">
By default, <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">microbenchmark</code> runs each argument 100 times to get an average look at how long each evaluation takes. Results:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">Unit: nanoseconds
expr min lq mean median uq max neval
sqrt(x) 825 860.5 1212.79 892.5 938.5 12905 100
x^0.5 3015 3059.5 3776.81 3101.5 3208.0 15215 100
</code></pre>
<div style="margin: 1.2em 0px !important;">
On average <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">sqrt(x)</code> takes 1212 nanoseconds, compared to 3776 for <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">x^0.5</code>. That is, the built-in <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">sqrt</code> function is about 3 times faster. (This was surprising to me. Anyone care to comment on why this is the case?)</div>
<div style="margin: 1.2em 0px !important;">
Now, let’s try it on something just a little bigger. This is similar to a real-life application I faced where I wanted to compute summary statistics of some value grouping by levels of some other factor. In the example below we’ll use the <a href="https://github.com/hadley/nycflights13">nycflights13 package</a>, which is a data package that has info on 336,776 outbound flights from NYC in 2013. I’m going to go ahead and load the <a href="https://github.com/hadley/dplyr">dplyr</a> package so things print nicely.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(dplyr)
library(nycflights13)
flights
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">Source: local data frame [336,776 x 16]
year month day dep_time dep_delay arr_time arr_delay carrier tailnum
1 2013 1 1 517 2 830 11 UA N14228
2 2013 1 1 533 4 850 20 UA N24211
3 2013 1 1 542 2 923 33 AA N619AA
4 2013 1 1 544 -1 1004 -18 B6 N804JB
5 2013 1 1 554 -6 812 -25 DL N668DN
6 2013 1 1 554 -4 740 12 UA N39463
7 2013 1 1 555 -5 913 19 B6 N516JB
8 2013 1 1 557 -3 709 -14 EV N829AS
9 2013 1 1 557 -3 838 -8 B6 N593JB
10 2013 1 1 558 -2 753 8 AA N3ALAA
.. ... ... ... ... ... ... ... ... ...
Variables not shown: flight (int), origin (chr), dest (chr), air_time
(dbl), distance (dbl), hour (dbl), minute (dbl)
</code></pre>
<div style="margin: 1.2em 0px !important;">
Let’s say we want to know the average arrival delay (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">arr_delay</code>) broken down by each airline (<code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">carrier</code>). There’s more than one way to do this.</div>
<div style="margin: 1.2em 0px !important;">
Years ago I would have used the built-in <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">aggregate</code> function.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">aggregate(flights$arr_delay, by=list(flights$carrier), mean, na.rm=TRUE)
</code></pre>
<div style="margin: 1.2em 0px !important;">
This gives me the results I’m looking for:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"> Group.1 x
1 9E 7.3796692
2 AA 0.3642909
3 AS -9.9308886
4 B6 9.4579733
5 DL 1.6443409
6 EV 15.7964311
7 F9 21.9207048
8 FL 20.1159055
9 HA -6.9152047
10 MQ 10.7747334
11 OO 11.9310345
12 UA 3.5580111
13 US 2.1295951
14 VX 1.7644644
15 WN 9.6491199
16 YV 15.5569853
</code></pre>
<div style="margin: 1.2em 0px !important;">
Alternatively, you can use the <a href="http://gettinggeneticsdone.blogspot.com/2010/05/use-sql-queries-to-manipulate-data.html">sqldf package</a>, which feels natural if you’re used to writing SQL queries.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(sqldf)
sqldf("SELECT carrier, avg(arr_delay) FROM flights GROUP BY carrier")
</code></pre>
<div style="margin: 1.2em 0px !important;">
Not long ago I learned about the <a href="http://cran.r-project.org/web/packages/data.table/index.html">data.table package</a>, which is good at doing these kinds of operations extremely fast.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(data.table)
flightsDT = data.table(flights)
flightsDT[ , mean(arr_delay, na.rm=TRUE), carrier]
</code></pre>
<div style="margin: 1.2em 0px !important;">
Finally, there’s my new favorite, the <a href="https://github.com/hadley/dplyr">dplyr package</a>, which I <a href="http://gettinggeneticsdone.blogspot.com/2014/08/do-your-data-janitor-work-like-boss.html">covered recently</a>.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(dplyr)
flights %>% group_by(carrier) %>% summarize(mean(arr_delay, na.rm=TRUE))
</code></pre>
<div style="margin: 1.2em 0px !important;">
Each of these will give you the same result, but which one is faster? That’s where the microbenchmark package becomes handy. Here, I’m passing all four evaluations to the <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">microbenchmark</code> function, and I’m naming those “base”, “sqldf”, “datatable”, and “dplyr” so the output is easier to read.</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(microbenchmark)
mbm = microbenchmark(
base = aggregate(flights$arr_delay, by=list(flights$carrier), mean, na.rm=TRUE),
sqldf = sqldf("SELECT carrier, avg(arr_delay) FROM flights GROUP BY carrier"),
datatable = flightsDT[ , mean(arr_delay, na.rm=TRUE), carrier],
dplyr = flights %>% group_by(carrier) %>% summarize(mean(arr_delay, na.rm=TRUE)),
times=50
)
mbm
</code></pre>
<div style="margin: 1.2em 0px !important;">
Here’s the output:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">Unit: milliseconds
expr min lq mean median uq max neval
base 1487.39 1521.12 1544.73 1539.96 1554.55 1676.25 50
sqldf 867.14 880.34 892.24 887.88 897.28 982.91 50
datatable 4.12 4.57 5.29 4.89 5.43 18.69 50
dplyr 14.49 15.53 16.59 15.86 16.58 25.04 50
</code></pre>
<div style="margin: 1.2em 0px !important;">
In this example, data.table was clearly the fastest on average. dplyr took ~3 times longer, sqldf took ~180x longer, and the base <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">aggregate</code> function took over 300 times longer. Let’s visualize those results using ggplot2 (microbenchmark has an autoplot method available, and note the log scale):</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-radius: 3px; border-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">library(ggplot2)
autoplot(mbm)
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpkATAIktwgf4aRoL0pzzDX8mSEw3rSkJ_ZmJux6sRyl_JrTcPX-nOZ6uuxOLiZcv74Swzky9KEc5ZG1tWjHxaBGXpD5Mj-xyHY7I-vadMbKsHMGOTAmbbjJIgmpd37blq7bJmyejzSOA/s1600/microbenchmark.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpkATAIktwgf4aRoL0pzzDX8mSEw3rSkJ_ZmJux6sRyl_JrTcPX-nOZ6uuxOLiZcv74Swzky9KEc5ZG1tWjHxaBGXpD5Mj-xyHY7I-vadMbKsHMGOTAmbbjJIgmpd37blq7bJmyejzSOA/s1600/microbenchmark.png" height="364" width="640" /></a></div>
<div style="margin: 1.2em 0px !important;">
<br /></div>
<div style="margin: 1.2em 0px !important;">
In this example data.table and dplyr were both relatively fast, with data.table being just a few milliseconds faster. Sometimes this will matter, other times it won’t. This is a matter of personal preference, but I personally find the data.table incantation not the least bit intuitive compared to dplyr. The way we pronounce <code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">flights %>% group_by(carrier) %>% summarize(mean(arr_delay, na.rm=TRUE))</code> is: “take flights <em>then</em> group that data by the carrier variable <em>then</em> summarize the data taking the mean of arr_delay.” The dplyr syntax, for me, is much easier to use and extend to much more complex data management and analysis tasks, so I’ll sacrifice those few milliseconds or <em>program run time</em> for the minutes or hours of <em>programmer debugging time</em>. But if you’re planning on running a piece of code on, for instance, millions or more simulations, then those few milliseconds might be important to you. The microbenchmark package makes benchmarking easy for small pieces of code like this.</div>
<div style="margin: 1.2em 0px !important;">
The code used for this analysis is consolidated <a href="https://gist.github.com/stephenturner/44385b81ba767096c04e">here on GitHub</a></div>
<div style="font-size: 0em; height: 0; margin: 0; max-height: 0; max-width: 0; overflow: hidden; padding: 0; width: 0;" title="MDH:PGRpdiBjbGFzcz0ibWFya2Rvd24taGVyZS13cmFwcGVyIiBkYXRhLWJsb2dnZXItZXNjYXBlZC1k
YXRhLW1kLXVybD0iaHR0cHM6Ly93d3cuYmxvZ2dlci5jb20vYmxvZ2dlci5nP2Jsb2dJRD02MjMy
ODE5NDg2MjYxNjk2MDM1I2VkaXRvci90YXJnZXQ9cG9zdDtwb3N0SUQ9ODkxMDA0ODM4MzkyMzQx
ODY0MDtvblB1Ymxpc2hlZE1lbnU9cG9zdHM7b25DbG9zZWRNZW51PXBvc3RzO3Bvc3ROdW09MDtz
cmM9bGluayIgZGF0YS1ibG9nZ2VyLWVzY2FwZWQtbWFya2Rvd24taGVyZS13cmFwcGVyLWNvbnRl
bnQtbW9kaWZpZWQ9InRydWUiPjxkaXYgZGF0YS1ibG9nZ2VyLWVzY2FwZWQtc3R5bGU9Im1hcmdp
bjogMS4yZW0gMHB4ICFpbXBvcnRhbnQ7Ij48cD5JIHJlY2VudGx5IGxlYXJuZWQgYWJvdXQgdGhl
IFttaWNyb2JlbmNobWFya10oaHR0cDovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMv
bWljcm9iZW5jaG1hcmsvaW5kZXguaHRtbCkgcGFja2FnZSB3aGlsZSBicm93c2luZyB0aHJvdWdo
IEhhZGxleSdzIFthZHZhbmNlZCBSIHByb2dyYW1taW5nIGJvb2tdKGh0dHA6Ly9hZHYtci5oYWQu
Y28ubnovUGVyZm9ybWFuY2UuaHRtbCNtaWNyb2JlbmNobWFya2luZykuIEkndmUgZG9uZSBzb21l
IHF1aWNrIGJlbmNobWFya2luZyB1c2luZyBgc3lzdGVtLnRpbWUoKWAgaW4gYSBmb3IgbG9vcCBh
bmQgdGFraW5nIHRoZSBhdmVyYWdlLCBidXQgdGhlIGBtaWNyb2JlbmNobWFya2AgZnVuY3Rpb24g
aW4gdGhlIG1pY3JvYmVuY2htYXJrIHBhY2thZ2UgbWFrZXMgdGhpcyBtdWNoIGVhc2llci4gSGFk
bGV5IGdpdmVzIHRoZSBleGFtcGxlIG9mIHRha2luZyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSB2ZWN0
b3IgdXNpbmcgdGhlIGJ1aWx0LWluIGBzcXJ0YCBmdW5jdGlvbiB2ZXJzdXMgdGhlIG1hdGhlbWF0
aWNhbCBlcXVpdmFsZW50IG9mIHJhaXNpbmcgdGhlIHZlY3RvciB0byB0aGUgcG93ZXIgb2YgMC41
LjwvcD48cD48YnI+PC9wPjxwPmBgYDwvcD48cD5saWJyYXJ5KG1pY3JvYmVuY2htYXJrKTwvcD48
cD54ID0gcnVuaWYoMTAwKTwvcD48cD5taWNyb2JlbmNobWFyayg8L3A+PHA+Jm5ic3A7IHNxcnQo
eCksPC9wPjxwPiZuYnNwOyB4IF4gMC41PC9wPjxwPik8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+
PHA+QnkgZGVmYXVsdCwgYG1pY3JvYmVuY2htYXJrYCBydW5zIGVhY2ggYXJndW1lbnQgMTAwIHRp
bWVzIHRvIGdldCBhbiBhdmVyYWdlIGxvb2sgYXQgaG93IGxvbmcgZWFjaCBldmFsdWF0aW9uIHRh
a2VzLiBSZXN1bHRzOjwvcD48cD48YnI+PC9wPjxwPmBgYDwvcD48cD5Vbml0OiBuYW5vc2Vjb25k
czwvcD48cD4mbmJzcDsgJm5ic3A7IGV4cHIgJm5ic3A7bWluICZuYnNwOyAmbmJzcDsgbHEgJm5i
c3A7ICZuYnNwO21lYW4gbWVkaWFuICZuYnNwOyAmbmJzcDsgdXEgJm5ic3A7IG1heCBuZXZhbDwv
cD48cD4mbmJzcDtzcXJ0KHgpICZuYnNwOzgyNSAmbmJzcDs4NjAuNSAxMjEyLjc5ICZuYnNwOzg5
Mi41ICZuYnNwOzkzOC41IDEyOTA1ICZuYnNwOyAxMDA8L3A+PHA+Jm5ic3A7ICZuYnNwO3heMC41
IDMwMTUgMzA1OS41IDM3NzYuODEgMzEwMS41IDMyMDguMCAxNTIxNSAmbmJzcDsgMTAwPC9wPjxw
PmBgYDwvcD48cD48YnI+PC9wPjxwPk9uIGF2ZXJhZ2UgYHNxcnQoeClgIHRha2VzIDEyMTIgbmFu
b3NlY29uZHMsIGNvbXBhcmVkIHRvIDM3NzYgZm9yIGB4XjAuNWAuIFRoYXQgaXMsIHRoZSBidWls
dC1pbiBgc3FydGAgZnVuY3Rpb24gaXMgYWJvdXQgMyB0aW1lcyBmYXN0ZXIuIChUaGlzIHdhcyBz
dXJwcmlzaW5nIHRvIG1lLiBBbnlvbmUgY2FyZSB0byBjb21tZW50IG9uIHdoeSB0aGlzIGlzIHRo
ZSBjYXNlPyk8L3A+PHA+PGJyPjwvcD48cD5Ob3csIGxldCdzIHRyeSBpdCBvbiBzb21ldGhpbmcg
anVzdCBhIGxpdHRsZSBiaWdnZXIuIFRoaXMgaXMgc2ltaWxhciB0byBhIHJlYWwtbGlmZSBhcHBs
aWNhdGlvbiBJIGZhY2VkIHdoZXJlIEkgd2FudGVkIHRvIGNvbXB1dGUgc3VtbWFyeSBzdGF0aXN0
aWNzIG9mIHNvbWUgdmFsdWUgZ3JvdXBpbmcgYnkgbGV2ZWxzIG9mIHNvbWUgb3RoZXIgZmFjdG9y
LiBJbiB0aGUgZXhhbXBsZSBiZWxvdyB3ZSdsbCB1c2UgdGhlIFtueWNmbGlnaHRzMTMgcGFja2Fn
ZV0oaHR0cHM6Ly9naXRodWIuY29tL2hhZGxleS9ueWNmbGlnaHRzMTMpLCB3aGljaCBpcyBhIGRh
dGEgcGFja2FnZSB0aGF0IGhhcyBpbmZvIG9uIDMzNiw3NzYgb3V0Ym91bmQgZmxpZ2h0cyBmcm9t
IE5ZQyBpbiAyMDEzLiBJJ20gZ29pbmcgdG8gZ28gYWhlYWQgYW5kIGxvYWQgdGhlIFtkcGx5cl0o
aHR0cHM6Ly9naXRodWIuY29tL2hhZGxleS9kcGx5cikgcGFja2FnZSBzbyB0aGluZ3MgcHJpbnQg
bmljZWx5LjwvcD48cD48YnI+PC9wPjxwPmBgYDwvcD48cD5saWJyYXJ5KGRwbHlyKTwvcD48cD5s
aWJyYXJ5KG55Y2ZsaWdodHMxMyk8L3A+PHA+ZmxpZ2h0czwvcD48cD5gYGA8L3A+PHA+PGJyPjwv
cD48cD5gYGA8L3A+PHA+U291cmNlOiBsb2NhbCBkYXRhIGZyYW1lIFszMzYsNzc2IHggMTZdPC9w
PjxwPjxicj48L3A+PHA+eWVhciBtb250aCBkYXkgZGVwX3RpbWUgZGVwX2RlbGF5IGFycl90aW1l
IGFycl9kZWxheSBjYXJyaWVyIHRhaWxudW08L3A+PHA+MSAmbmJzcDsyMDEzICZuYnNwOyAmbmJz
cDsgMSAmbmJzcDsgMSAmbmJzcDsgJm5ic3A7ICZuYnNwOzUxNyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgMiAmbmJzcDsgJm5ic3A7ICZuYnNwOzgzMCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsxMSAmbmJzcDsgJm5ic3A7ICZuYnNwO1VBICZuYnNwO04xNDIyODwvcD48cD4yICZuYnNw
OzIwMTMgJm5ic3A7ICZuYnNwOyAxICZuYnNwOyAxICZuYnNwOyAmbmJzcDsgJm5ic3A7NTMzICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA0ICZuYnNwOyAmbmJzcDsgJm5ic3A7ODUwICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzIwICZuYnNwOyAmbmJzcDsgJm5ic3A7VUEgJm5ic3A7TjI0
MjExPC9wPjxwPjMgJm5ic3A7MjAxMyAmbmJzcDsgJm5ic3A7IDEgJm5ic3A7IDEgJm5ic3A7ICZu
YnNwOyAmbmJzcDs1NDIgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDIgJm5ic3A7ICZuYnNw
OyAmbmJzcDs5MjMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MzMgJm5ic3A7ICZuYnNwOyAm
bmJzcDtBQSAmbmJzcDtONjE5QUE8L3A+PHA+NCAmbmJzcDsyMDEzICZuYnNwOyAmbmJzcDsgMSAm
bmJzcDsgMSAmbmJzcDsgJm5ic3A7ICZuYnNwOzU0NCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDstMSAmbmJzcDsgJm5ic3A7IDEwMDQgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLTE4ICZuYnNwOyAm
bmJzcDsgJm5ic3A7QjYgJm5ic3A7TjgwNEpCPC9wPjxwPjUgJm5ic3A7MjAxMyAmbmJzcDsgJm5i
c3A7IDEgJm5ic3A7IDEgJm5ic3A7ICZuYnNwOyAmbmJzcDs1NTQgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LTYgJm5ic3A7ICZuYnNwOyAmbmJzcDs4MTIgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
LTI1ICZuYnNwOyAmbmJzcDsgJm5ic3A7REwgJm5ic3A7TjY2OEROPC9wPjxwPjYgJm5ic3A7MjAx
MyAmbmJzcDsgJm5ic3A7IDEgJm5ic3A7IDEgJm5ic3A7ICZuYnNwOyAmbmJzcDs1NTQgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7LTQgJm5ic3A7ICZuYnNwOyAmbmJzcDs3NDAgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7MTIgJm5ic3A7ICZuYnNwOyAmbmJzcDtVQSAmbmJzcDtOMzk0NjM8
L3A+PHA+NyAmbmJzcDsyMDEzICZuYnNwOyAmbmJzcDsgMSAmbmJzcDsgMSAmbmJzcDsgJm5ic3A7
ICZuYnNwOzU1NSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstNSAmbmJzcDsgJm5ic3A7ICZu
YnNwOzkxMyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxOSAmbmJzcDsgJm5ic3A7ICZuYnNw
O0I2ICZuYnNwO041MTZKQjwvcD48cD44ICZuYnNwOzIwMTMgJm5ic3A7ICZuYnNwOyAxICZuYnNw
OyAxICZuYnNwOyAmbmJzcDsgJm5ic3A7NTU3ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0z
ICZuYnNwOyAmbmJzcDsgJm5ic3A7NzA5ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0xNCAmbmJzcDsg
Jm5ic3A7ICZuYnNwO0VWICZuYnNwO044MjlBUzwvcD48cD45ICZuYnNwOzIwMTMgJm5ic3A7ICZu
YnNwOyAxICZuYnNwOyAxICZuYnNwOyAmbmJzcDsgJm5ic3A7NTU3ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOy0zICZuYnNwOyAmbmJzcDsgJm5ic3A7ODM4ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOy04ICZuYnNwOyAmbmJzcDsgJm5ic3A7QjYgJm5ic3A7TjU5M0pCPC9wPjxwPjEwIDIw
MTMgJm5ic3A7ICZuYnNwOyAxICZuYnNwOyAxICZuYnNwOyAmbmJzcDsgJm5ic3A7NTU4ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0yICZuYnNwOyAmbmJzcDsgJm5ic3A7NzUzICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyA4ICZuYnNwOyAmbmJzcDsgJm5ic3A7QUEgJm5ic3A7TjNBTEFB
PC9wPjxwPi4uICZuYnNwOy4uLiAmbmJzcDsgLi4uIC4uLiAmbmJzcDsgJm5ic3A7ICZuYnNwOy4u
LiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAuLi4gJm5ic3A7ICZuYnNwOyAmbmJzcDsuLi4gJm5ic3A7
ICZuYnNwOyAmbmJzcDsgLi4uICZuYnNwOyAmbmJzcDsgLi4uICZuYnNwOyAmbmJzcDsgLi4uPC9w
PjxwPlZhcmlhYmxlcyBub3Qgc2hvd246IGZsaWdodCAoaW50KSwgb3JpZ2luIChjaHIpLCBkZXN0
IChjaHIpLCBhaXJfdGltZTwvcD48cD4oZGJsKSwgZGlzdGFuY2UgKGRibCksIGhvdXIgKGRibCks
IG1pbnV0ZSAoZGJsKTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5MZXQncyBzYXkgd2Ugd2Fu
dCB0byBrbm93IHRoZSBhdmVyYWdlIGFycml2YWwgZGVsYXkgKGBhcnJfZGVsYXlgKSBicm9rZW4g
ZG93biBieSBlYWNoIGFpcmxpbmUgKGBjYXJyaWVyYCkuIFRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB3
YXkgdG8gZG8gdGhpcy48L3A+PHA+PGJyPjwvcD48cD5ZZWFycyBhZ28gSSB3b3VsZCBoYXZlIHVz
ZWQgdGhlIGJ1aWx0LWluIGBhZ2dyZWdhdGVgIGZ1bmN0aW9uLjwvcD48cD48YnI+PC9wPjxwPmBg
YDwvcD48cD5hZ2dyZWdhdGUoZmxpZ2h0cyRhcnJfZGVsYXksIGJ5PWxpc3QoZmxpZ2h0cyRjYXJy
aWVyKSwgbWVhbiwgbmEucm09VFJVRSk8L3A+PHA+YGBgPC9wPjxwPjxicj48L3A+PHA+VGhpcyBn
aXZlcyBtZSB0aGUgcmVzdWx0cyBJJ20gbG9va2luZyBmb3I6PC9wPjxwPjxicj48L3A+PHA+YGBg
PC9wPjxwPiZuYnNwOyAmbmJzcDtHcm91cC4xICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDt4PC9wPjxwPjEgJm5ic3A7ICZuYnNwOyAmbmJzcDsgOUUgJm5ic3A7Ny4zNzk2NjkyPC9w
PjxwPjIgJm5ic3A7ICZuYnNwOyAmbmJzcDsgQUEgJm5ic3A7MC4zNjQyOTA5PC9wPjxwPjMgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgQVMgLTkuOTMwODg4NjwvcD48cD40ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IEI2ICZuYnNwOzkuNDU3OTczMzwvcD48cD41ICZuYnNwOyAmbmJzcDsgJm5ic3A7IERMICZu
YnNwOzEuNjQ0MzQwOTwvcD48cD42ICZuYnNwOyAmbmJzcDsgJm5ic3A7IEVWIDE1Ljc5NjQzMTE8
L3A+PHA+NyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBGOSAyMS45MjA3MDQ4PC9wPjxwPjggJm5ic3A7
ICZuYnNwOyAmbmJzcDsgRkwgMjAuMTE1OTA1NTwvcD48cD45ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IEhBIC02LjkxNTIwNDc8L3A+PHA+MTAgJm5ic3A7ICZuYnNwOyAmbmJzcDtNUSAxMC43NzQ3MzM0
PC9wPjxwPjExICZuYnNwOyAmbmJzcDsgJm5ic3A7T08gMTEuOTMxMDM0NTwvcD48cD4xMiAmbmJz
cDsgJm5ic3A7ICZuYnNwO1VBICZuYnNwOzMuNTU4MDExMTwvcD48cD4xMyAmbmJzcDsgJm5ic3A7
ICZuYnNwO1VTICZuYnNwOzIuMTI5NTk1MTwvcD48cD4xNCAmbmJzcDsgJm5ic3A7ICZuYnNwO1ZY
ICZuYnNwOzEuNzY0NDY0NDwvcD48cD4xNSAmbmJzcDsgJm5ic3A7ICZuYnNwO1dOICZuYnNwOzku
NjQ5MTE5OTwvcD48cD4xNiAmbmJzcDsgJm5ic3A7ICZuYnNwO1lWIDE1LjU1Njk4NTM8L3A+PHA+
YGBgPC9wPjxwPjxicj48L3A+PHA+QWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIFtzcWxk
ZiBwYWNrYWdlXShodHRwOi8vZ2V0dGluZ2dlbmV0aWNzZG9uZS5ibG9nc3BvdC5jb20vMjAxMC8w
NS91c2Utc3FsLXF1ZXJpZXMtdG8tbWFuaXB1bGF0ZS1kYXRhLmh0bWwpLCB3aGljaCBmZWVscyBu
YXR1cmFsIGlmIHlvdSdyZSB1c2VkIHRvIHdyaXRpbmcgU1FMIHF1ZXJpZXMuPC9wPjxwPjxicj48
L3A+PHA+YGBgPC9wPjxwPmxpYnJhcnkoc3FsZGYpPC9wPjxwPnNxbGRmKCJTRUxFQ1QgY2Fycmll
ciwgYXZnKGFycl9kZWxheSkgRlJPTSBmbGlnaHRzIEdST1VQIEJZIGNhcnJpZXIiKTwvcD48cD5g
YGA8L3A+PHA+PGJyPjwvcD48cD5Ob3QgbG9uZyBhZ28gSSBsZWFybmVkIGFib3V0IHRoZSBbZGF0
YS50YWJsZSBwYWNrYWdlXShodHRwOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9k
YXRhLnRhYmxlL2luZGV4Lmh0bWwpLCB3aGljaCBpcyBnb29kIGF0IGRvaW5nIHRoZXNlIGtpbmRz
IG9mIG9wZXJhdGlvbnMgZXh0cmVtZWx5IGZhc3QuPC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxw
PmxpYnJhcnkoZGF0YS50YWJsZSk8L3A+PHA+ZmxpZ2h0c0RUID0gZGF0YS50YWJsZShmbGlnaHRz
KTwvcD48cD5mbGlnaHRzRFRbICwgbWVhbihhcnJfZGVsYXksIG5hLnJtPVRSVUUpLCBjYXJyaWVy
XTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5GaW5hbGx5LCB0aGVyZSdzIG15IG5ldyBmYXZv
cml0ZSwgdGhlIFtkcGx5ciBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vaGFkbGV5L2RwbHly
KSwgd2hpY2ggSSBbY292ZXJlZCByZWNlbnRseV0oaHR0cDovL2dldHRpbmdnZW5ldGljc2RvbmUu
YmxvZ3Nwb3QuY29tLzIwMTQvMDgvZG8teW91ci1kYXRhLWphbml0b3Itd29yay1saWtlLWJvc3Mu
aHRtbCkuPC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPmxpYnJhcnkoZHBseXIpPC9wPjxwPmZs
aWdodHMgJSZndDslIGdyb3VwX2J5KGNhcnJpZXIpICUmZ3Q7JSBzdW1tYXJpemUobWVhbihhcnJf
ZGVsYXksIG5hLnJtPVRSVUUpKTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5FYWNoIG9mIHRo
ZXNlIHdpbGwgZ2l2ZSB5b3UgdGhlIHNhbWUgcmVzdWx0LCBidXQgd2hpY2ggb25lIGlzIGZhc3Rl
cj8gVGhhdCdzIHdoZXJlIHRoZSBtaWNyb2JlbmNobWFyayBwYWNrYWdlIGJlY29tZXMgaGFuZHku
IEhlcmUsIEknbSBwYXNzaW5nIGFsbCBmb3VyIGV2YWx1YXRpb25zIHRvIHRoZSBgbWljcm9iZW5j
aG1hcmtgIGZ1bmN0aW9uLCBhbmQgSSdtIG5hbWluZyB0aG9zZSAiYmFzZSIsICJzcWxkZiIsICJk
YXRhdGFibGUiLCBhbmQgImRwbHlyIiBzbyB0aGUgb3V0cHV0IGlzIGVhc2llciB0byByZWFkLjwv
cD48cD48YnI+PC9wPjxwPmBgYDwvcD48cD5saWJyYXJ5KG1pY3JvYmVuY2htYXJrKTwvcD48cD5t
Ym0gPSBtaWNyb2JlbmNobWFyayg8L3A+PHA+Jm5ic3A7IGJhc2UgPSBhZ2dyZWdhdGUoZmxpZ2h0
cyRhcnJfZGVsYXksIGJ5PWxpc3QoZmxpZ2h0cyRjYXJyaWVyKSwgbWVhbiwgbmEucm09VFJVRSks
PC9wPjxwPiZuYnNwOyBzcWxkZiA9IHNxbGRmKCJTRUxFQ1QgY2FycmllciwgYXZnKGFycl9kZWxh
eSkgRlJPTSBmbGlnaHRzIEdST1VQIEJZIGNhcnJpZXIiKSw8L3A+PHA+Jm5ic3A7IGRhdGF0YWJs
ZSA9IGZsaWdodHNEVFsgLCBtZWFuKGFycl9kZWxheSwgbmEucm09VFJVRSksIGNhcnJpZXJdLDwv
cD48cD4mbmJzcDsgZHBseXIgPSBmbGlnaHRzICUmZ3Q7JSBncm91cF9ieShjYXJyaWVyKSAlJmd0
OyUgc3VtbWFyaXplKG1lYW4oYXJyX2RlbGF5LCBuYS5ybT1UUlVFKSksPC9wPjxwPiZuYnNwOyB0
aW1lcz01MDwvcD48cD4pPC9wPjxwPm1ibTwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5IZXJl
J3MgdGhlIG91dHB1dDo8L3A+PHA+PGJyPjwvcD48cD5gYGA8L3A+PHA+VW5pdDogbWlsbGlzZWNv
bmRzPC9wPjxwPiZuYnNwOyAmbmJzcDsgJm5ic3A7IGV4cHIgJm5ic3A7ICZuYnNwOyBtaW4gJm5i
c3A7ICZuYnNwOyAmbmJzcDtscSAmbmJzcDsgJm5ic3A7bWVhbiAmbmJzcDttZWRpYW4gJm5ic3A7
ICZuYnNwOyAmbmJzcDt1cSAmbmJzcDsgJm5ic3A7IG1heCBuZXZhbDwvcD48cD4mbmJzcDsgJm5i
c3A7ICZuYnNwOyBiYXNlIDE0ODcuMzkgMTUyMS4xMiAxNTQ0LjczIDE1MzkuOTYgMTU1NC41NSAx
Njc2LjI1ICZuYnNwOyAmbmJzcDs1MDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwO3NxbGRmICZu
YnNwOzg2Ny4xNCAmbmJzcDs4ODAuMzQgJm5ic3A7ODkyLjI0ICZuYnNwOzg4Ny44OCAmbmJzcDs4
OTcuMjggJm5ic3A7OTgyLjkxICZuYnNwOyAmbmJzcDs1MDwvcD48cD4mbmJzcDtkYXRhdGFibGUg
Jm5ic3A7ICZuYnNwOzQuMTIgJm5ic3A7ICZuYnNwOzQuNTcgJm5ic3A7ICZuYnNwOzUuMjkgJm5i
c3A7ICZuYnNwOzQuODkgJm5ic3A7ICZuYnNwOzUuNDMgJm5ic3A7IDE4LjY5ICZuYnNwOyAmbmJz
cDs1MDwvcD48cD4mbmJzcDsgJm5ic3A7ICZuYnNwO2RwbHlyICZuYnNwOyAxNC40OSAmbmJzcDsg
MTUuNTMgJm5ic3A7IDE2LjU5ICZuYnNwOyAxNS44NiAmbmJzcDsgMTYuNTggJm5ic3A7IDI1LjA0
ICZuYnNwOyAmbmJzcDs1MDwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5JbiB0aGlzIGV4YW1w
bGUsIGRhdGEudGFibGUgd2FzIGNsZWFybHkgdGhlIGZhc3Rlc3Qgb24gYXZlcmFnZS4gZHBseXIg
dG9vayB+MyB0aW1lcyBsb25nZXIsIHNxbGRmIHRvb2sgfjE4MHggbG9uZ2VyLCBhbmQgdGhlIGJh
c2UgYGFnZ3JlZ2F0ZWAgZnVuY3Rpb24gdG9vayBvdmVyIDMwMCB0aW1lcyBsb25nZXIuIExldCdz
IHZpc3VhbGl6ZSB0aG9zZSByZXN1bHRzIHVzaW5nIGdncGxvdDIgKG1pY3JvYmVuY2htYXJrIGhh
cyBhbiBhdXRvcGxvdCBtZXRob2QgYXZhaWxhYmxlKTo8L3A+PHA+PGJyPjwvcD48cD5gYGA8L3A+
PHA+bGlicmFyeShnZ3Bsb3QyKTwvcD48cD5hdXRvcGxvdChtYm0pPC9wPjxwPmBgYDwvcD48cD48
YnI+PC9wPjxwPklNQUdFPC9wPjxwPjxicj48L3A+PHA+SW4gdGhpcyBleGFtcGxlIGRhdGEudGFi
bGUgYW5kIGRwbHlyIHdlcmUgYm90aCBwcmV0dHkgZmFzdCwgd2l0aCBkYXRhLnRhYmxlIGJlaW5n
IGp1c3QgYSBmZXcgbWlsbGlzZWNvbmRzIGZhc3Rlci4gU29tZXRpbWVzIHRoaXMgd2lsbCBtYXR0
ZXIsIG90aGVyIHRpbWVzIGl0IHdvbid0LiBUaGlzIGlzIGEgbWF0dGVyIG9mIHBlcnNvbmFsIHBy
ZWZlcmVuY2UsIGJ1dCBJIHBlcnNvbmFsbHkgZmluZCB0aGUgZGF0YS50YWJsZSBpbmNhbnRhdGlv
biBub3QgdGhlIGxlYXN0IGJpdCBpbnR1aXRpdmUgY29tcGFyZWQgdG8gZHBseXIuIFRoZSB3YXkg
d2UgcHJvbm91bmNlIGBmbGlnaHRzICUmZ3Q7JSBncm91cF9ieShjYXJyaWVyKSAlJmd0OyUgc3Vt
bWFyaXplKG1lYW4oYXJyX2RlbGF5LCBuYS5ybT1UUlVFKSlgIGlzOiAidGFrZSBmbGlnaHRzICp0
aGVuKiBncm91cCB0aGF0IGRhdGEgYnkgdGhlIGNhcnJpZXIgdmFyaWFibGUgKnRoZW4qIHN1bW1h
cml6ZSB0aGUgZGF0YSB0YWtpbmcgdGhlIG1lYW4gb2YgYXJyX2RlbGF5LiIgVGhlIGRwbHlyIHN5
bnRheCwgZm9yIG1lLCBpcyBtdWNoIGVhc2llciB0byB1c2UgYW5kIGV4dGVuZCB0byBtdWNoIG1v
cmUgY29tcGxleCBkYXRhIG1hbmFnZW1lbnQgYW5kIGFuYWx5c2lzIHRhc2tzLCBzbyBJJ2xsIHNh
Y3JpZmljZSB0aG9zZSBmZXcgbWlsbGlzZWNvbmRzIG9yICpwcm9ncmFtIHJ1biB0aW1lKiBmb3Ig
dGhlIG1pbnV0ZXMgb3IgaG91cnMgb2YgKnByb2dyYW1tZXIgZGVidWdnaW5nIHRpbWUqLiBCdXQg
aWYgeW91J3JlIHBsYW5uaW5nIG9uIHJ1bm5pbmcgYSBwaWVjZSBvZiBjb2RlIG9uLCBmb3IgaW5z
dGFuY2UsIG1pbGxpb25zIG9mIHNpbXVsYXRpb25zLCB0aGVuIHRob3NlIGZldyBtaWxsaXNlY29u
ZHMgbWlnaHQgYmUgaW1wb3J0YW50IHRvIHlvdS4gVGhlIG1pY3JvYmVuY2htYXJrIHBhY2thZ2Ug
bWFrZXMgdGhpcyBlYXN5IGZvciBzbWFsbCBwaWVjZXMgb2YgY29kZSBsaWtlIHRoaXMuPC9wPjxw
Pjxicj48L3A+PHA+VGhlIGNvZGUgdXNlZCBmb3IgdGhpcyBhbmFseXNpcyBpcyBjb25zb2xpZGF0
ZWQgW2hlcmUgb24gR2l0SHViXShodHRwczovL2dpc3QuZ2l0aHViLmNvbS9zdGVwaGVudHVybmVy
LzQ0Mzg1YjgxYmE3NjcwOTZjMDRlKTwvcD48ZGl2Pjxicj48L2Rpdj48L2Rpdj48L2Rpdj4=">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com2tag:blogger.com,1999:blog-6232819486261696035.post-50340056883048016212014-12-08T11:39:00.001-06:002014-12-08T11:39:15.261-06:00Importing Illumina BeadArray data into RA colleague needed some help getting Illumina BeadArray gene expression data loaded into R for data analysis with <a href="http://www.bioconductor.org/packages/release/bioc/html/limma.html" target="_blank">limma</a>. Hopefully whoever ran your arrays can export the data as text files formatted as described in the code below. If so, you can import those text files directly using the <a href="http://www.bioconductor.org/packages/release/bioc/html/beadarray.html" target="_blank">beadarray</a> package. This way you avoid getting bogged down with GenomeStudio, which requires a license (ugh) and only runs on Windows (ughhh). Here's how I do it.<br />
<br />
<script src="https://gist.github.com/stephenturner/99be4b7b67a532c583f9.js"></script><div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com0tag:blogger.com,1999:blog-6232819486261696035.post-69549533781140582512014-11-20T16:08:00.001-06:002014-11-20T16:12:50.442-06:00RNA-seq Data Analysis Course Materials Last week I ran a one-day workshop on RNA-seq data analysis in the UVA Health Sciences Library. I set up an AWS public EC2 image with all the necessary software installed. Participants logged into AWS, launched the image, and we kicked off the morning session with an introduction to the Unix shell (taught by Jessica Bonnie, a biostatistician here in our genomics group, and a fellow Software Carpentry instructor). I followed with a walkthrough of using FastQC for quality assessment, FASTX toolkit for trimming, TopHat for alignment, and featureCounts to summarize gene expression read counts at the gene level. I started the afternoon session started with an introduction to R, followed by a tutorial on analyzing the count data we generated in the first part using DESeq2 in R.<br />
<br />
All of the rendered <a href="http://bioconnector.github.io/workshops/lessons/rnaseq-1day/" target="_blank">course material is available here</a>. The source code used to generate this material is all on <a href="https://github.com/bioconnector/workshops" target="_blank">available on GitHub</a> (go read my <a href="http://gettinggeneticsdone.blogspot.com/2014/06/collaborative-lesson-development-git-github.html" target="_blank">post on collaborative lesson development</a>, if you haven't already). Much of the introductory Unix lesson material was adapted from the <a href="http://software-carpentry.org/" target="_blank">Software Carpentry</a> and <a href="http://datacarpentry.org/" target="_blank">Data Carpentry</a> projects.<br />
<br />
I wrote a more thorough blog post about how the course went <a href="http://software-carpentry.org/blog/2014/11/virginia-workshop.html" target="_blank">here on the Software Carpentry blog</a>.<br />
<br />
I also compiled a PDF of all the course materials, available on Figshare: <a href="http://dx.doi.org/10.6084/m9.figshare.1247658" target="_blank">http://dx.doi.org/10.6084/m9.figshare.1247658</a>.<br />
<br />
<iframe frameborder="0" height="700" src="http://wl.figshare.com/articles/1247658/embed?show_title=1" width="568"></iframe><div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com0tag:blogger.com,1999:blog-6232819486261696035.post-82131346136284980012014-10-14T13:22:00.001-05:002014-10-14T13:22:16.798-05:00Operate on the body of a file but not the header<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=8213134613628498001;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=0;src=link" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
Sometimes you need to run some UNIX command on a file but only want to operate on the body of the file, not the header. Create a file called <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">body</code> somewhere in your <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">$PATH</code>, make it executable, and add this to it:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="language-bash" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"><span class="shebang" style="color: #999999; font-weight: bold;">#!/bin/bash</span>
IFS= <span class="built_in" style="color: #0086b3;">read</span> -r header
<span class="built_in" style="color: #0086b3;">printf</span> <span class="string" style="color: #dd1144;">'%s\n'</span> <span class="string" style="color: #dd1144;">"<span class="variable" style="color: teal;">$header</span>"</span>
<span class="built_in" style="color: #0086b3;">eval</span> <span class="variable" style="color: teal;">$@</span>
</code></pre>
<div style="margin: 1.2em 0px !important;">
Now, when you need to run something but ignore the header, use the <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">body</code> command first. For example, we can create a simple data set with a header row and some numbers:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="language-bash" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">$ <span class="built_in" style="color: #0086b3;">echo</span> <span class="operator">-e</span> <span class="string" style="color: #dd1144;">"header\n1\n5\n4\n7\n3"</span>
header
<span class="number" style="color: #009999;">1</span>
<span class="number" style="color: #009999;">5</span>
<span class="number" style="color: #009999;">4</span>
<span class="number" style="color: #009999;">7</span>
<span class="number" style="color: #009999;">3</span>
</code></pre>
<div style="margin: 1.2em 0px !important;">
We can pipe the whole thing to <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">sort</code>:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="language-bash" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">$ <span class="built_in" style="color: #0086b3;">echo</span> <span class="operator">-e</span> <span class="string" style="color: #dd1144;">"header\n1\n5\n4\n7\n3"</span> | sort
<span class="number" style="color: #009999;">1</span>
<span class="number" style="color: #009999;">3</span>
<span class="number" style="color: #009999;">4</span>
<span class="number" style="color: #009999;">5</span>
<span class="number" style="color: #009999;">7</span>
header
</code></pre>
<div style="margin: 1.2em 0px !important;">
Oops, we don’t want the header to be included in the sort. Let’s use the <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">body</code> command to operate only on the body, skipping the header:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code class="language-bash" style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">$ <span class="built_in" style="color: #0086b3;">echo</span> <span class="operator">-e</span> <span class="string" style="color: #dd1144;">"header\n1\n5\n4\n7\n3"</span> | body sort
header
<span class="number" style="color: #009999;">1</span>
<span class="number" style="color: #009999;">3</span>
<span class="number" style="color: #009999;">4</span>
<span class="number" style="color: #009999;">5</span>
<span class="number" style="color: #009999;">7</span>
</code></pre>
<div style="margin: 1.2em 0px !important;">
Sure, there are other ways to solve the problem with <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">sort</code>, but <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">body</code> will solve many more problems. If you have multiple header rows, just call <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">body</code> multiple times. </div>
<div style="margin: 1.2em 0px !important;">
Inspired by <a href="http://unix.stackexchange.com/a/11859" target="_blank">this post</a> on Stack Exchange.</div>
<div style="font-size: 0em; height: 0; margin: 0; padding: 0;" title="MDH:U29tZXRpbWVzIHlvdSBuZWVkIHRvIHJ1biBzb21lIFVOSVggY29tbWFuZCBvbiBhIGZpbGUgYnV0
IG9ubHkgd2FudCB0byBvcGVyYXRlIG9uIHRoZSBib2R5IG9mIHRoZSBmaWxlLCBub3QgdGhlIGhl
YWRlci4gQ3JlYXRlIGEgZmlsZSBjYWxsZWQgYGJvZHlgIHNvbWV3aGVyZSBpbiB5b3VyIGAkUEFU
SGAsIGFuZCBhZGQgdGhpcyB0byBpdDo8ZGl2Pjxicj48L2Rpdj48ZGl2PmBgYGJhc2g8L2Rpdj48
ZGl2PjxkaXY+IyEvYmluL2Jhc2g8L2Rpdj48ZGl2PklGUz0gcmVhZCAtciBoZWFkZXI8L2Rpdj48
ZGl2PnByaW50ZiAnJXNcbicgIiRoZWFkZXIiPC9kaXY+PGRpdj5ldmFsICRAPC9kaXY+PC9kaXY+
PGRpdj5gYGA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk5vdywgd2hlbiB5b3UgbmVlZCB0byBy
dW4gc29tZXRoaW5nIGJ1dCBpZ25vcmUgdGhlIGhlYWRlciwgdXNlIHRoZSBgYm9keWAgY29tbWFu
ZCBmaXJzdC4gRm9yIGV4YW1wbGUsIHdlIGNhbiBjcmVhdGUgYSBzaW1wbGUgZGF0YSBzZXQgd2l0
aCBhIGhlYWRlciByb3cgYW5kIHNvbWUgbnVtYmVyczo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2
PmBgYGJhc2g8L2Rpdj48ZGl2PjxkaXY+JCBlY2hvIC1lICJoZWFkZXJcbjFcbjVcbjRcbjdcbjMi
PC9kaXY+PGRpdj5oZWFkZXI8L2Rpdj48ZGl2PjE8L2Rpdj48ZGl2PjU8L2Rpdj48ZGl2PjQ8L2Rp
dj48ZGl2Pjc8L2Rpdj48ZGl2PjM8L2Rpdj48L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+PGJyPjwv
ZGl2PjxkaXY+V2UgY2FuIHBpcGUgdGhlIHdob2xlIHRoaW5nIHRvIGBzb3J0YDo8L2Rpdj48ZGl2
Pjxicj48L2Rpdj48ZGl2PmBgYGJhc2g8L2Rpdj48ZGl2PjxkaXY+JCBlY2hvIC1lICJoZWFkZXJc
bjFcbjVcbjRcbjdcbjMiIHwgc29ydDwvZGl2PjxkaXY+MTwvZGl2PjxkaXY+MzwvZGl2PjxkaXY+
NDwvZGl2PjxkaXY+NTwvZGl2PjxkaXY+NzwvZGl2PjxkaXY+aGVhZGVyPC9kaXY+PC9kaXY+PGRp
dj5gYGA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk9vcHMsIHdlIGRvbid0IHdhbnQgdGhlIGhl
YWRlciB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc29ydC4gTGV0J3MgdXNlIHRoZSBgYm9keWAgY29t
bWFuZCB0byBvcGVyYXRlIG9ubHkgb24gdGhlIGJvZHksIHNraXBwaW5nIHRoZSBoZWFkZXI6PC9k
aXY+PGRpdj48YnI+PC9kaXY+PGRpdj5gYGBiYXNoPC9kaXY+PGRpdj48ZGl2PiQgZWNobyAtZSAi
aGVhZGVyXG4xXG41XG40XG43XG4zIiB8IGJvZHkgc29ydDwvZGl2PjxkaXY+aGVhZGVyPC9kaXY+
PGRpdj4xPC9kaXY+PGRpdj4zPC9kaXY+PGRpdj40PC9kaXY+PGRpdj41PC9kaXY+PGRpdj43PC9k
aXY+PC9kaXY+PGRpdj5gYGA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlN1cmUsIHRoZXJlIGFy
ZSBvdGhlciB3YXlzIHRvIHNvbHZlIHRoZSBwcm9ibGVtIHdpdGggYHNvcnRgLCBidXQgYGJvZHlg
IHdpbGwgc29sdmUgbWFueSBtb3JlIHByb2JsZW1zLiBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBoZWFk
ZXIgcm93cywganVzdCBjYWxsIGBib2R5YCBtdWx0aXBsZSB0aW1lcy4mbmJzcDs8L2Rpdj48ZGl2
Pjxicj48L2Rpdj48ZGl2Pkluc3BpcmVkIGJ5IFt0aGlzIHBvc3RdKGh0dHA6Ly91bml4LnN0YWNr
ZXhjaGFuZ2UuY29tL2EvMTE4NTkpLjwvZGl2Pg==">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com2tag:blogger.com,1999:blog-6232819486261696035.post-46491449397919647472014-09-16T10:23:00.000-05:002014-09-16T10:23:29.215-05:00R package to convert statistical analysis objects to tidy data frames<div class="markdown-here-wrapper" data-md-url="https://www.blogger.com/blogger.g?blogID=6232819486261696035#editor/target=post;postID=4649144939791964747" markdown-here-wrapper-content-modified="true">
<div style="margin: 1.2em 0px !important;">
I talked a little bit about tidy data my recent <a href="http://gettinggeneticsdone.blogspot.com/2014/08/do-your-data-janitor-work-like-boss.html">post about dplyr</a>, but you should really go check out <a href="http://vita.had.co.nz/papers/tidy-data.pdf">Hadley’s paper on the subject</a>.</div>
<div style="margin: 1.2em 0px !important;">
R expects inputs to data analysis procedures to be in a tidy format, but the model output objects that you get back aren’t always tidy. The reshape2, tidyr, and dplyr are meant to take data frames, munge them around, and return a data frame. David Robinson's <a href="https://github.com/dgrtwo/broom">broom package</a> bridges this gap by taking un-tidy output from model objects, which are not data frames, and returning them in a tidy data frame format. </div>
<div style="margin: 1.2em 0px !important;">
(From the <a href="https://github.com/dgrtwo/broom/blob/master/README.mkd" target="_blank">documentation</a>): if you performed a linear model on the built-in <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">mtcars</code> dataset and view the object directly, this is what you’d see:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">lmfit = lm(mpg ~ wt, mtcars)
lmfit
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">Call:
lm(formula = mpg ~ wt, data = mtcars)
Coefficients:
(Intercept) wt
37.285 -5.344
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">summary(lmfit)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">Call:
lm(formula = mpg ~ wt, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-4.543 -2.365 -0.125 1.410 6.873
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.285 1.878 19.86 < 2e-16 ***
wt -5.344 0.559 -9.56 1.3e-10 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.05 on 30 degrees of freedom
Multiple R-squared: 0.753, Adjusted R-squared: 0.745
F-statistic: 91.4 on 1 and 30 DF, p-value: 1.29e-10
</code></pre>
<div style="margin: 1.2em 0px !important;">
If you’re just trying to read it this is good enough, but if you’re doing other follow-up analysis or visualization, you end up hacking around with <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">str()</code> and pulling out coefficients using indices, and everything gets ugly quick.</div>
<div style="margin: 1.2em 0px !important;">
But the <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">tidy</code> function in the broom package run on the fit object probably gives you what you were looking for in a tidy data frame:</div>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;">tidy(lmfit)
</code></pre>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; font-size: 1em; line-height: 1.2em; margin: 1.2em 0px;"><code style="background-color: #f8f8f8; background: rgb(248, 248, 255); border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); border: 1px solid rgb(234, 234, 234); color: #333333; display: block !important; display: block; display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; overflow: auto; padding: 0.5em 0.7em; padding: 0.5em; padding: 0px 0.3em; white-space: pre-wrap; white-space: pre;"> term estimate stderror statistic p.value
1 (Intercept) 37.285 1.8776 19.858 8.242e-19
2 wt -5.344 0.5591 -9.559 1.294e-10
</code></pre>
<div style="margin: 1.2em 0px !important;">
The <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">tidy()</code> function also works on other types of model objects, like those produced by <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">glm()</code> and <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">nls()</code>, as well as popular built-in hypothesis testing tools like <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">t.test()</code>, <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">cor.test()</code>, or <code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); display: inline; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 0.85em; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap;">wilcox.test()</code>.</div>
<div style="margin: 1.2em 0px !important;">
View the README on the <a href="https://github.com/dgrtwo/broom">GitHub page</a>, or install the package and run the vignette to see more examples and conventions.</div>
<div style="margin: 1.2em 0px !important;">
<a href="https://github.com/dgrtwo/broom">broom: Convert statistical analysis objects from R into tidy format</a></div>
<div style="font-size: 0em; height: 0; margin: 0; padding: 0;" title="MDH:PHA+SSB0YWxrZWQgYSBsaXR0bGUgYml0IGFib3V0IDxpPnRpZHkgZGF0YTwvaT4mbmJzcDtteSBy
ZWNlbnQgPGEgaHJlZj0iaHR0cDovL2dldHRpbmdnZW5ldGljc2RvbmUuYmxvZ3Nwb3QuY29tLzIw
MTQvMDgvZG8teW91ci1kYXRhLWphbml0b3Itd29yay1saWtlLWJvc3MuaHRtbCIgdGFyZ2V0PSJf
YmxhbmsiPnBvc3QgYWJvdXQgZHBseXI8L2E+LCBidXQgeW91IHNob3VsZCByZWFsbHkgZ28gY2hl
Y2sgb3V0IDxhIGhyZWY9Imh0dHA6Ly92aXRhLmhhZC5jby5uei9wYXBlcnMvdGlkeS1kYXRhLnBk
ZiIgdGFyZ2V0PSJfYmxhbmsiPkhhZGxleSdzIHBhcGVyIG9uIHRoZSBzdWJqZWN0PC9hPi48L3A+
PHA+PGJyPjwvcD48cD5SIGV4cGVjdHMgaW5wdXRzIHRvIGRhdGEgYW5hbHlzaXMgcHJvY2VkdXJl
cyB0byBiZSBpbiBhIHRpZHkgZm9ybWF0LCBidXQgdGhlIG1vZGVsIG91dHB1dCBvYmplY3RzIHRo
YXQgeW91IGdldCBiYWNrIGFyZW4ndCBhbHdheXMgdGlkeS4gVGhlIHJlc2hhcGUyLCB0aWR5ciwg
YW5kIGRwbHlyIGFyZSBtZWFudCB0byB0YWtlIGRhdGEgZnJhbWVzLCBtdW5nZSB0aGVtIGFyb3Vu
ZCwgYW5kIHJldHVybiBhIGRhdGEgZnJhbWUuIFRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5j
b20vZGdydHdvL2Jyb29tIiB0YXJnZXQ9Il9ibGFuayI+YnJvb20gcGFja2FnZTwvYT4mbmJzcDti
cmlkZ2VzIHRoaXMgZ2FwIGJ5IHRha2luZyB1bi10aWR5IG91dHB1dCZuYnNwO2Zyb20gbW9kZWwg
b2JqZWN0cywgd2hpY2ggYXJlIDxpPm5vdCA8L2k+ZGF0YSBmcmFtZXMsJm5ic3A7YW5kIHJldHVy
bmluZyB0aGVtIGluIGEgdGlkeSBkYXRhIGZyYW1lIGZvcm1hdC4mbmJzcDs8L3A+PHA+PGJyPjwv
cD48cD4oRnJvbSB0aGUgdmlnbmV0dGUpOiBpZiB5b3UgcGVyZm9ybWVkIGEgbGluZWFyIG1vZGVs
IG9uIHRoZSBidWlsdC1pbiBgbXRjYXJzYCBkYXRhc2V0IGFuZCB2aWV3IHRoZSBvYmplY3QgZGly
ZWN0bHksIHRoaXMgaXMgd2hhdCB5b3UnZCBzZWU6PC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxw
PmxtZml0ID0gbG0obXBnIH4gd3QsIG10Y2Fycyk8L3A+PHA+bG1maXQ8L3A+PHA+YGBgPC9wPjxw
PmBgYDwvcD48cD5DYWxsOjwvcD48cD5sbShmb3JtdWxhID0gbXBnIH4gd3QsIGRhdGEgPSBtdGNh
cnMpPC9wPjxwPjxicj48L3A+PHA+Q29lZmZpY2llbnRzOjwvcD48cD4oSW50ZXJjZXB0KSAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHd0ICZuYnNwOzwvcD48cD4mbmJzcDsgJm5i
c3A7ICZuYnNwOzM3LjI4NSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtNS4zNDQgJm5ic3A7PC9wPjxw
PmBgYDwvcD48cD5gYGA8L3A+PHA+c3VtbWFyeShsbWZpdCk8L3A+PHA+YGBgPC9wPjxwPmBgYDwv
cD48cD5DYWxsOjwvcD48cD5sbShmb3JtdWxhID0gbXBnIH4gd3QsIGRhdGEgPSBtdGNhcnMpPC9w
PjxwPjxicj48L3A+PHA+UmVzaWR1YWxzOjwvcD48cD4mbmJzcDsgJm5ic3A7TWluICZuYnNwOyAm
bmJzcDsgMVEgTWVkaWFuICZuYnNwOyAmbmJzcDsgM1EgJm5ic3A7ICZuYnNwO01heCZuYnNwOzwv
cD48cD4tNC41NDMgLTIuMzY1IC0wLjEyNSAmbmJzcDsxLjQxMCAmbmJzcDs2Ljg3MyZuYnNwOzwv
cD48cD48YnI+PC9wPjxwPkNvZWZmaWNpZW50czo8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgRXN0aW1hdGUgU3RkLiBFcnJvciB0IHZhbHVlIFByKCZndDt8
dHwpICZuYnNwOyAmbmJzcDs8L3A+PHA+KEludGVyY2VwdCkgJm5ic3A7IDM3LjI4NSAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEuODc4ICZuYnNwOyAxOS44NiAmbmJzcDsmbHQ7IDJlLTE2ICoqKjwvcD48
cD53dCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy01LjM0NCAmbmJz
cDsgJm5ic3A7ICZuYnNwOzAuNTU5ICZuYnNwOyAtOS41NiAmbmJzcDsxLjNlLTEwICoqKjwvcD48
cD4tLS08L3A+PHA+U2lnbmlmLiBjb2RlczogJm5ic3A7MCAnKioqJyAwLjAwMSAnKionIDAuMDEg
JyonIDAuMDUgJy4nIDAuMSAnICcgMTwvcD48cD48YnI+PC9wPjxwPlJlc2lkdWFsIHN0YW5kYXJk
IGVycm9yOiAzLjA1IG9uIDMwIGRlZ3JlZXMgb2YgZnJlZWRvbTwvcD48cD5NdWx0aXBsZSBSLXNx
dWFyZWQ6ICZuYnNwOzAuNzUzLCAmbmJzcDtBZGp1c3RlZCBSLXNxdWFyZWQ6ICZuYnNwOzAuNzQ1
Jm5ic3A7PC9wPjxwPkYtc3RhdGlzdGljOiA5MS40IG9uIDEgYW5kIDMwIERGLCAmbmJzcDtwLXZh
bHVlOiAxLjI5ZS0xMDwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5JZiB5b3UncmUganVzdCB0
cnlpbmcgdG8gcmVhZCBpdCB0aGlzIGlzIGdvb2QgZW5vdWdoLCBidXQgaWYgeW91J3JlIGRvaW5n
IG90aGVyIGZvbGxvdy11cCBhbmFseXNpcyBvciB2aXN1YWxpemF0aW9uLCB5b3UgZW5kIHVwIGhh
Y2tpbmcgYXJvdW5kIHdpdGggYHN0cigpYCBhbmQgcHVsbGluZyBvdXQgY29lZmZpY2llbnRzIHVz
aW5nIGluZGljZXMsIGFuZCBldmVyeXRoaW5nIGdldHMgdWdseSBxdWljay48L3A+PHA+PGJyPjwv
cD48cD5CdXQgdGhlIGB0aWR5YCBmdW5jdGlvbiBpbiB0aGUgYnJvb20gcGFja2FnZSBydW4gb24g
dGhlIGZpdCBvYmplY3QgcHJvYmFibHkgZ2l2ZXMgeW91IHdoYXQgeW91IHdlcmUgbG9va2luZyBm
b3IgaW4gYSB0aWR5IGRhdGEgZnJhbWU6PC9wPjxwPjxicj48L3A+PHA+YGBgPC9wPjxwPnRpZHko
bG1maXQpPC9wPjxwPmBgYDwvcD48cD5gYGA8L3A+PHA+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwO3Rlcm0gZXN0aW1hdGUgc3RkZXJyb3Igc3RhdGlzdGljICZuYnNwOyBwLnZhbHVl
PC9wPjxwPjEgKEludGVyY2VwdCkgJm5ic3A7IDM3LjI4NSAmbmJzcDsgMS44Nzc2ICZuYnNwOyAm
bmJzcDsxOS44NTggOC4yNDJlLTE5PC9wPjxwPjIgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwO3d0ICZuYnNwOyAtNS4zNDQgJm5ic3A7IDAuNTU5MSAmbmJzcDsgJm5ic3A7LTkuNTU5
IDEuMjk0ZS0xMDwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5UaGUgYHRpZHkoKWAgZnVuY3Rp
b24gYWxzbyB3b3JrcyBvbiBvdGhlciB0eXBlcyBvZiBtb2RlbCBvYmplY3RzLCBsaWtlIHRob3Nl
IHByb2R1Y2VkIGJ5IGBnbG0oKWAgYW5kIGBubHMoKWAsIGFzIHdlbGwgYXMgcG9wdWxhciBidWls
dC1pbiBoeXBvdGhlc2lzIHRlc3RpbmcgdG9vbHMgbGlrZSBgdC50ZXN0KClgLCBgY29yLnRlc3Qo
KWAsIG9yIGB3aWxjb3gudGVzdCgpYC48L3A+PHA+PGJyPjwvcD48cD5WaWV3IHRoZSBSRUFETUUg
b24gdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kZ3J0d28vYnJvb20iIHRhcmdldD0i
X2JsYW5rIj5HaXRIdWIgcGFnZTwvYT4sIG9yIGluc3RhbGwgdGhlIHBhY2thZ2UgYW5kIHJ1biB0
aGUgdmlnbmV0dGUgdG8gc2VlIG1vcmUgZXhhbXBsZXMgYW5kIGNvbnZlbnRpb25zLjwvcD48cD48
YnI+PC9wPjxwPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kZ3J0d28vYnJvb20iIHRhcmdl
dD0iX2JsYW5rIj5icm9vbTombmJzcDtDb252ZXJ0IHN0YXRpc3RpY2FsIGFuYWx5c2lzIG9iamVj
dHMgZnJvbSBSIGludG8gdGlkeSBmb3JtYXQ8L2E+PC9wPg==">
</div>
</div>
<div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com3tag:blogger.com,1999:blog-6232819486261696035.post-41613946250283959542014-09-11T14:55:00.000-05:002014-09-11T14:55:09.359-05:00UVA / Charlottesville R MeetupTL;DR? We started an R Users group, awesome community, huge turnout at first meeting, lots of potential.<br />
<br />
---<br />
<br />
I've sat through many hours of meetings where faculty lament the fact that their trainees (and the faculty themselves!) are woefully ill-prepared for our brave new world of computing- and data-intensive science. We've started to address this by running annual Software Carpentry bootcamps (<a href="http://gettinggeneticsdone.blogspot.com/2013/03/software-carpentry-bootcamp-at.html" target="_blank">March 2013</a>, and <a href="http://gettinggeneticsdone.blogspot.com/2014/03/software-carpentry-at-uva-redux.html" target="_blank">March 2014</a>). To make things more sustainable, we're running our own Software Carpentry instructor training here later this month, where we'll train scientists how to teach other scientists basic computing skills like using UNIX, programming in Python or R, version control, automation, and testing. I went through this training course online a few months ago, and it was an excellent introduction to pedagogy and the psychology of learning (let's face it, most research professors were never taught how to teach; it's a skill you learn, not one you inherit with the initials behind your name).<br />
<br />
Something that constantly comes up in these conversations is how to promote continued learning and practice after the short bootcamp is over. Students get a whirlwind tour of scientific computing skills over two days, but there's generally very little follow-up that's necessary to encourage continued practice and learning.<br />
<br />
At the same time we've got a wide variety of scientists spanning all disciplines including social sciences, humanities, medicine, physics, chemistry, math, and engineering that are doing scientific computing and data analysis on a daily basis who could really benefit from learning from one another.<br />
<br />
These things motivated us to start a <a href="http://www.meetup.com/UVa-R-Users-Group/" target="_blank">local R Users Group</a>. So far we have 118 people registered on Meetup.com, and this week we had an excellent turnout at our <a href="http://www.meetup.com/UVa-R-Users-Group/events/199401492/" target="_blank">first meeting</a>, with over 70 people who RSVP'd.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbvQ_9GTwKOfxla2SzNBm74ie3P8prLCyB6uIfnfl7u3zS-Xe-gg-Ee_bUbiuoOZB2UjJFDuWcxqLyQm3w-Bzmd97heFMdPbgbsLkqtjY621lD_CvdNlk4gWXaaL0brk2UsX6CHdFwk-Q/s1600/R-meetup.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbvQ_9GTwKOfxla2SzNBm74ie3P8prLCyB6uIfnfl7u3zS-Xe-gg-Ee_bUbiuoOZB2UjJFDuWcxqLyQm3w-Bzmd97heFMdPbgbsLkqtjY621lD_CvdNlk4gWXaaL0brk2UsX6CHdFwk-Q/s1600/R-meetup.jpeg" height="360" width="640" /></a></div>
<br />
At this first meetup we kicked things off with an introduction to the group, why we started it, and our goals. I then launched into a quick demo of some of the finer features in the dplyr package for effortless advanced data manipulation and analysis. The meetup group has a <a href="https://github.com/UVa-R-Users-Group/meetup" target="_blank">GitHub repository where all the code from our meetups will be stored</a>. Finally, we concluded with a discussion of topics the group would like to see presented in the future: ggplot2, R package creation, reproducible research, dynamic documentation, and web scraping were a few of the things mentioned. We collectively decided that either talks could be either research talks highlighting how these things were used in an actual research project, or they could be demo/tutorial in nature, like the dplyr talk I gave.<br />
<br />
The rich discussion we had at the end of this session really highlighted the potential this community has. In addition to the diversity and relative gender-balance we saw in our first meetup's participants, we had participants from all over UVA as well as representation from local <a href="http://www.hemoshear.com/" target="_blank">industry</a> and <a href="http://centerforopenscience.org/" target="_blank">non-profit</a> organizations.<br />
<br />
I, for one, am tremendously excited about this new community, and will post the occasional update from the group here on this blog. <br />
<br />
<br /><div class="blogger-post-footer">Getting Genetics Done by Stephen Turner is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.</div>Stephen Turnerhttp://www.blogger.com/profile/06656711316726116187noreply@blogger.com0