![]() |
VOOZH | about |
Linting is important for code review: screen included
Today I was reviewing a pull request for some Python code when I saw a semicolon in the diff.
Are insecure code completions a vulnerability?
Three months ago I saw that PyCharm shipped with a “Full Line Completion” plugin that “uses a local deep learning model to suggest entire lines of code”. These suggestions manifest as whole-line suggestions after you start typing and can be accepted with
Tab. Essentially auto-complete for entire lines.I decide to test this functionality. I started by writing
import urllib3, created a new line, and then typeduand received a suggested completion for the line marked below with a dashed border. I was not impressed by the result:
Is the Super Smash Bros. Brawl donut from Mister Donut?
Happy Donut Day (and #FediDonutFriday) to those who celebrate! 🍩 Present and Correct shared a link to the Mister Donut museum on Bluesky and upon clicking through I was greeted with a familiar face: a chocolate ring donut.
Strangely, I've seen this chocolate ring donut before: from the hours staring at sprite-sheets from the Super Smash Bros. and Kirby Air Riders franchises. That donut looked just like the one from Super Smash Bros. Brawl.
How much “Super Mario” per year?
What if we tried quantifying art in a different and slightly more reductive way? This blog post introduces and calculates a new unit: “Super Mario per year”. If you enjoy this franchise like I do then this unit is of particular importance to you.
Using Epilogue Retrace app with iPhone 13 Pro and Ubuntu
When Epilogue announced the Retrace app for iOS and Android I was over the moon excited. In theory this meant I could archive ROMs from the GB Operator directly to my iPhone where I play the games with the Delta emulator. This meant I wouldn't need to ferry ROMs between the GB Operator to my laptop to my phone. Unfortunately I ran into two hurdles with my plan, if you were able to get Retrace to work with a pre-USB-C iPhone let me know.
Library dependency version specifiers aren't for fixing vulnerabilities
Let's say you are the maintainer of a Python library that depends on another Python library like “urllib3”. Because you want to make sure users receive a compatible version of urllib3 you add a version specifier that restricts the version to the current “major” version so users know that older versions aren't compatible. This is what your
pyproject.tomlmight look like:[project] name="example-library" dependencies=[ "urllib3>=2", ]
The Frog for Whom the Bell Tolls
Kaeru no Tame ni Kane wa Naru (カエルの為に鐘は鳴る) is a Japanese-only Game Boy title published in 1992 by Nintendo and developed by Intelligent Systems. The title’s official English translation is “The Frog for Whom the Bell Tolls”. For brevity, I’ll be using the title “Frog Game” in this article.
After I finished Link’s Awakening, the Frog Game started popping up everywhere in my digital life. The first occurrence was without my knowledge: some of the characters in Link’s Awakening, Prince Richard and his frogs, are originally from the Frog Game and use the same sprites and music.
pip v26.1 adds support for relative dependency cooldowns
I published a blog post two months ago about how to hack relative dependency cooldowns into pip v26.0 with crontab. Now with pip v26.1 available, this hack is no longer required! Time to upgrade my pip and delete that cron job...
Now in pip v26.1 you can use
uploaded-prior-toin your~/.config/pip/pip.conffile or--uploaded-prior-to=as a CLI option with relative RFC 3339 duration values. pip supports setting days using “PND” whereNis the number of days.
More thoughts on Nintendo Switch 2 storage prices
Since my last post about Nintendo Switch 2 storage and prices three major things have happened affecting Switch 2 game prices:
- Nintendo published a new digital game pricing strategy where digital first-party games would be priced $10 USD less than physical games. This puts the American game market in line with the rest of the world. We'll see below why this change makes sense.
- microSD Express cards have increased drastically in price. The Lexar 1TB microSDXC card cost $200 USD in July 2025 and today is being sold for $335 USD from the same retailer. This means that “price-per-GB” has increased ~$0.13 for the highest capacity cards.
- Nintendo appears to be manufacturing Switch 2 game cartridges with smaller than the typical 64GB capacity. released on a physical cartridge with a $30 price tag. This will hopefully mean fewer games being published to “Game Key cards”, especially smaller or indie games.
Add Animal Crossing events to your digital calendar
Animal Forest (“Dōbutsu no Mori” or “どうぶつの森”) was released in Japan for the Nintendo 64 on April 14th, 2001: exactly 25 years ago today! To celebrate this beloved franchise I have created calendars for each of the “first-generation” Animal Crossing games that you can load into calendar apps like Google Calendar or Apple Calendars to see events from your town.
LAN Party Calculator (Mario Kart, Kirby Air Riders, F-Zero)
Nintendo has multiple popular racing franchises, including Mario Kart, Kirby Air Ride, and F-Zero. Each of these franchises spans multiple titles and consoles and have ways to play with more than one console in a single shared “game lobby”. This feature makes these games interesting for LAN parties, where you have many players, consoles, and games in one area.
What does it mean to be the most “LAN-party-able” Nintendo racing game? There are three metrics I found interesting for this question: most-players, price-per-player, and “real-estate”-per-player (aka: TVs/consoles). There is a different “best” game according to each of these metrics. I've compiled the data and created a small calculator to compare:
Getting started with the GameSir “Pocket Taco” with iPhone and Delta emulator
GameSir shipped the pre-orders for the “Pocket Taco” mobile controller on March 15th and I received mine today. This controller uses Bluetooth and a padded grip mechanism to add physical buttons to the bottom half of your mobile phone for use with mobile emulators like Delta emulator.
Python library “Requests” needs you to test type hints
Requests maintainer Nate Prewitt is planning to add support for type hints to Requests in the next three months. Right now the feature is available as a development branch but will later be published to PyPI as a pre-release version. The goal is to find and fix issues before rolling the change out to users to avoid unnecessary breakage.
I’ve added human.json to my website
Evan Hahn recently blogged about adding support for the “
human.jsonprotocol” to his website. I read the specification and thought this seemed like a straightforward protocol to implement. I've followed along, and added a/human.jsonfile to my website andrel="human-json"in a<link> element to the<head>section of my HTML. Easy!
Relative “Dependency Cooldowns” in pip v26.0 with crontab
pip v26.0 added support for the
--uploaded-prior-tooption. This new option enables implementing “dependency cooldowns”, a technique described by William Woodruff, that provides simple but effective protections for the relatively short attack-window time of malware published to public software repositories. This brings the reaction time to malware back within the realm of humans, who sometimes need to execute manual triage processes to take down malware from PyPI.
“The Legend of Zelda: Link’s Awakening” respects your time
I don't play a lot of Legend of Zelda games. Before Link’s Awakening, I've only completed Wind Waker, Four Swords Adventures, and Phantom Hourglass. My hesitation to many Zelda games is that they are large and expansive, which would require perhaps too much diligence to complete given my schedule. According to “How Long to Beat”, the main story for Breath of the Wild is ~50 hours. Given my current “pace of play” I would be playing just one game for the entire year.
Deprecate confusing APIs like “os.path.commonprefix()”
The
os.path.commonprefix()function has been an API in the Python standard library for at least 35 years (since February 1991) and in that time has been confusing users and creating security issues, even in programs explicitly trying to mitigate vulnerabilities. This was caused directly by the API's placement in theos.pathmodule and further perpetuated by backwards compatibility.
Respecting maintainer time should be in security policies
Generative AI tools becoming more common means that vulnerability reports these days are loooong. If you're an open source maintainer, you unfortunately know what I'm talking about. Markdown-formatted, more than five headings, similar in length to a blog post, and characterized as a vulnerability worthy of its own domain name.
This makes triaging vulnerabilities by often under-resourced maintainer more difficult, time-consuming, and stressful. Whether a report is a genuine vulnerability or not, it now requires more time from maintainers to make a determination than is necessary. I've heard from multiple maintainers how specifically report length weighs negatively on maintainer time, whether these are “slop vulnerability reports” or just overly-thorough reporters.
Automated public shaming of open source maintainers
Matplotlib, the unfortunate target of this new type of harassment, publishes a clear generative AI use policy. That boundary was not respected by generative AI users and a pull request was opened by an OpenClaw agent.
If the website the agent's GitHub comment links to is any indication, within 4 days of deployment this agent generated a “take-down blog post” intended to publicly shame an open source maintainer (who has published their own thoughts on the incident) for closing a GitHub pull request per the project's own policy on generative AI use. In this particular case, the issue was a “Good First Issue”, which are intentionally left unimplemented by maintainers as a potential on-ramp for new contributors to the project.
Cooler Analytics
You don't need analytics on your blog, but maybe you need analytics for your cooler?
Dumping Nintendo e‑Reader Card “ROMs”
The Nintendo e‑Reader was a peripheral released for the Game Boy Advance in 2001. The Nintendo e‑Reader allowed scanning to access extra content within games or to play mini-games. Today I'll show you how to use the GB Operator, a Game Boy ROM dumping tool, in order to access the ROM encoded onto e‑Reader card dotcodes.
Use “\A...\z”, not “^...$” with Python regular expressions
Two years ago I discovered a potential foot-gun with the Python standard library “
re” module. this behavior, and turns out that I wasn't only one who didn't know this: The article was #1 on HackerNews and the most-read article on my blog in 2024. In short the unexpected behavior is that the pattern “^Hello$” matches both “Hello” and “Hello\n”, and sometimes you don't intend to match a trailing newline.
mGBA → Dolphin not working? You need a GBA BIOS
The GBA emulator “mGBA” supports emulating the Game Boy Advance Link Cable (not to be confused with the Game Boy Advance /Game/ Link Cable) and connecting to a running Dolphin emulator instance. I am interested in this functionality for Legend of Zelda: Four Swords Adventures, specifically the “Navi Trackers” game mode that was announced for all regions but was only released in Japan and Korea. In the future I want to explore the English language patches.
“urllib3 in 2025” available on Illia Volochii’s new blog
2025 was a big year for urllib3 and I want you to read about it! In case you missed it, this year I passed the baton of “lead maintainer” to Illia Volochii who has a new website and blog. Quentin Pradet and I continue to be maintainers to the project.
“Food JPEGs” in Super Smash Bros & Kirby Air Riders
Have you ever noticed that the food graphics in Super Smash Bros. and Kirby Air Riders are flat “billboarded” stock images of food?
This artistic decision from director Masahiro Sakurai has persisted through 8 games over nearly 25 years. I've seen a few folks online remarking about the “JPEG” or “PNG”-like quality of the images in the most recent release: .
While researching every game with this art style and all 150+ unique food images I ended up fixing wikis, reviewing a seasonal KitKat flavor, and preserving an uncatalogued image of tempura soba.
New ROM dumping tool for SNES & Super Famicom from Epilogue
Just heard the news from the WULFF Den Podcast that Epilogue has released pre-orders for the next ROM backup tool in their “Operator” series for the Super NES (SNES) and Super Famicom called the “SN Operator”. The SN Operator pre-order costs $60 USD plus shipping.
This is great news for collectors and people interested in owning and playing SNES and Super Famicom games without a subscription service and for cheaper than purchasing a console, currently hovering around $120 USD on eBay. If there's only one or two games you're interested in playing and ownership isn't a huge deal for you: Nintendo Switch Online offers a substantial SNES and Super Famicom library for $20/year.
Cutting spritesheets like cookies with Python & Pillow 🍪
Happy new year! 🎉 For an upcoming project on the blog requiring many video-game sprites I've created a small tool (“sugarcookie”) using the always-lovely Python image-processing library Pillow. This tool takes a spritesheet and a list of mask colors, a minimum size, and then cuts the spritesheet into its component sprites.
I'm sure this could be implemented more efficiently, or with a friendly command line interface, but for more own purposes (~10 spritesheets) this worked just fine. Feel free to use, share, and improve. The script is available as a GitHub gist, but also included below.
Nintendo GameCube and Switch “Wrapped” 2025 🎮🎁
One of my goals for 2025 was to play more games! I've been collecting play activity for my Nintendo Switch, Switch 2, and my Nintendo GameCube. I've published a combined SQLite database with this data for 2025 with games, play sessions, and more. Feel free to dig into this data yourself, I've included some queries and my own thoughts, too.
Getting started with Playdate on Ubuntu 🟨
Trina got me a Playdate for Christmas this year! I've always been intrigued by this console, as it is highly constrained in terms of pixel and color-depth (400x240, 2 colors), but also provides many helpful resources for game development such as a software development kit (SDK) and a simulator to quickly test games during development.
I first discovered software programming as an amateur game developer using BYOND, so “returning to my roots” and doing some game development feels like a fun and fulfilling diversion from the current direction software is taking. Plus, I now have a reason to learn a new programming language: Lua!
Blind Carbon Copy (BCC) for SMS
Have you ever wanted the power of email Blind Carbon Copy (BCC), but for SMS? I've wanted this functionality myself for parties and organizing, specifically without needing to use a third-party service. This script automates the difficult parts of drafting and sending a text message to many recipients with SMS URLs and QR codes.
Draft your message, choose your recipients, and then scan-and-send all the QR codes until you're done. Save your command for later to follow-up in different groups.
PEP 770 Software Bill-of-Materials (SBOM) data from PyPI, Fedora, and Red Hat
This year I authored PEP 770 which proposed a new standardized location for Software Bill-of-Materials (SBOM) data within Python wheel archives. SBOM data can now be stored in
.dist-info/sboms/. You can see the canonical specification on packaging.python.org.
Delta emulator adds support for SEGA Genesis games
The Delta emulator which I've used for mobile retro-gaming in the past has added beta support for SEGA Genesis and Master System games! Riley and Shane made the announcement through the Delta emulator Patreon and also on Mastodon.
You can install the emulator on iOS through the “TestFlight” application to get access right away. I've done so and tested many of my favorite games including the Sonic the Hedgehog and the Streets of Rage trilogies and found that the emulator handled these games flawlessly.
Extracting Nintendo Switch “Play Activity” with OCR
Despite considering myself a “gamer”, I realized I had only played ~5 hours of video-games in the whole year 2022 and ~6 hours in 2021. Honestly, these numbers made me a bit sad to see... You can't “improve” what you don't measure, so I started looking for low-effort ways to measure the amount of play time while getting back into actually playing video-games.
Deprecations via warnings don’t work for Python libraries
Last week urllib3 v2.6.0 was released which contained removals for several APIs that we've known were problematic since 2019 and have been deprecated since 2022. The deprecations were marked in the documentation, changelog, and what I incorrectly believed would be the most meaningful signal to users: with a
DeprecationWarningbeing emitted for each use for the API.
One weird trick for cheaper physical Switch 2 games?
Maybe sell your boxes? I happened to be browsing PriceCharting and saw that only the box for Kirby Air Riders was selling for $20 on average. I couldn't believe my eyes! But I looked and there were at least two boxes sold on eBay.
WebKit browsers see telephone numbers everywhere
Just like Excel seeing everything as a date, WebKit mobile browsers automatically interpret many numbers as telephone numbers. When detected, mobile browsers replace the text in the HTML with a clickable
<a href="tel:...">value that when selected will call the number denoted. This can be helpful sometimes, but frustrating other times as random numbers in your HTML suddenly become useless hyperlinks.
BrotliCFFI has two new maintainers
Quick post announcing that the Python package brotlicffi has two new maintainers: Nathan Goldbaum and Christian Clauss. Thank you both for stepping up to help me with this package.
Blogrolls are the Best(rolls)
Happy 6-year blogiversary to me! 🎉 To celebrate I want to talk about other peoples’ blogs, more specifically the magic of “blogrolls”. Blogrolls are “lists of other sites that you read, are a follower of, or recommend”. Any blog can host a blogroll, or sometimes websites can be one big blogroll.
Ice Pikmin and difficulty of Pikmin Bloom event decor sets
I play Pikmin Bloom regularly with a group of friends. The game can be best described as “Pokémon Go, but walking”. One of the main goals of the game is to collect “decor Pikmin” which can come from the environment, landmarks, and businesses that you walk by. Recently there's been a change to the game that makes completing sets of decor Pikmin significantly more difficult, this post explores the new difficulty increase.
GameCube Nintendo Classics and storage size
If you're into GameCube collecting and archiving you may already know that GameCube ISOs or "ROMs" are around ~1.3 GB in size, regardless of the game that is contained within the
.isofile. This is because GameCube ROMs are all copies of the same disk format: the GameCube Game disc (DOL-6).The GameCube Game disc is a 8cm miniDVD-based disc with a static storage capacity of 1.5 GB. Compare this to cartridges which using memory-mapping controllers (MMC) can encase different amounts of storage ROM depending on the size of the game data itself.
RSS feed for new Nintendo Classics games
It's November! Many folks use this month to write more, whether it's a novel or generating text. I'm going to be trying to write and share more often, too.
So here's something I created for mostly me, but maybe you too. I've created a small RSS feed for new games being added to the Nintendo Classics collection over time. Nintendo uses this collection as the drippiest-of-drip-feeds, so there's typically only a few new games per month. So instead of checking frequently I can follow this feed in my feed reader and be notified on new releases.
Easily create co-authored commits with GitHub handles
It's come to my attention that Hynek Schlawack has written about the same topic back in 2022 and came to a similar solution!
You can add co-authors to a GitHub commit using the
Co-authored-byfield in the git commit message. But what if your co-author doesn't have a public email address listed on GitHub?No problem, you can use this handy script to automatically discover a users' display name and per-account "noreply" email address that'll mark their account as a co-author without a public email address.
Drawing an ASCII TIE fighter for post-quantum cryptography
This is a funny short story about contributing to internet standards. The real heroes of the story are Filippo Valsorda and all the other contributors to post-quantum cryptography standards (PQC). Without their efforts internet communications would be less secure, so thank you :)
Re(blog, tweet, toot, skoot, skeеt, post)
Have you noticed the similar terms used for sharing someone else's content with attribution from your own account? Reblogging was the original term for “blogging” another user's content, first developed by project “reBlog” and popularized by Tumblr. Remember that “blog” is a truncation of “weblog” (... should it have been ’blog to capture the shortening?)
Is the "Nintendo Classics" collection a good value?
Nintendo Classics is a collection of hundreds of retro video games from Nintendo (and Sega) consoles from the NES to the GameCube. Nintendo Classics is included with the (NSO) subscription, which starts at $20/year (~$1.66/month) for individual users.
Looking at the prices of retro games these days, this seems like an incredible value for players that want to play these games. This post is sharing a dataset that I've curated about games and mapping their value to actual physical prices of the same games, with some interesting queries.
Winning a bet about “six”, the Python 2 compatibility shim
Exactly five years ago today Andrey Petrov and I made a bet about whether “
six”, the compatibility shim for Python 2 and 3 APIs, would still be in the top 20 daily downloads on PyPI. I said it would, Andrey took the side against.Well, today I can say that I've won the bet. When the bet was placed,
sixwas #2 in terms of daily downloads and todaysixis #14.
GZipped files and streams may contain names
It's just another day, you're sending a bunch of files to a friend. For no particular reason you decide to name the archive with your controversial movie opinions:
$tar-cfi-did-not-care-for-the-godfather.tar*.txt $gzipi-did-not-care-for-the-godfather.tar
SCREAM CIPHER (“ǠĂȦẶAẦ ĂǍÄẴẶȦ”)
You've probably heard of stream ciphers, but what about a scream cipher 😱? Today I learned there are more “Latin capital letter A” Unicode characters than there are letters in the English alphabet. You know what that means, it's time to scream:
Infinite Precision CVSS Calculator
CVSS is a scoring system for the severity of a software vulnerability. The scores range from 0 to 10, but that doesn't mean it's a “10-point system”. A single value after a decimal (“8.7”) is allowed too, meaning there are 100 potential CVSS scores. But what if we need more precision?
Extracting NES & N64 ROMs from Zelda Collector's Edition
Gaming as a hobby is about to become much more expensive in the United States due to tariffs. I cannot recall a time in the past where a console's price has increased during its generation, and yet the , the , and most recently the have had price hikes.
So here's another entry in my mini-series (#1, #2) of extracting ROMs from GameCube games, this time the which contains 2 NES and 2 N64 Zelda titles.
Draft SMS and iMessage from any computer keyboard
If you're like me, you don't love the ergonomics of writing long text messages on your mobile phone keyboard. We own an “Arteck HB066” Bluetooth keyboard for this use-case which works great and costs $45. But I'm not interested in spending money today.
What if I could write text messages, both SMS or iMessage, using any computer keyboard?
The vulnerability might be in the proof-of-concept
I'm on the security team for multiple open source projects with ~medium levels of report volume. Over the years, you see patterns in how reporters try to have a report accepted as a vulnerability in the project.
One pattern that I see frequently is submitting proof-of-concept code that itself contains the vulnerability. However, the project code is also used, so the reporters try to convince you that the vulnerability is in the project code.
SMS URLs
Did you know there is a URL scheme for sending an “SMS” or text message, similar to
mailto:? SMS URLs are defined in RFC 5724 and are formatted like so:
sms:<recipient(s)>?body=<body>
Extracting Genesis & Game Gear ROMs from SEGA GameCube collections
The GameCube library had multiple SEGA game collections: Sonic Mega Collection, Sonic Adventure DX, and Sonic Gems Collection which all contain ROM files for the Genesis and Game Gear (among others).
We'll extract the ROMs from each collection and then compare these GameCube collections to modern SEGA game collections like Sonic Origins Plus and the Genesis collection for Nintendo Switch Online.
How many RSS subscribers do I have?
RSS is super rad way to consume internet content (“like a newspaper”). This blog gets syndicated via RSS and an email newsletter. Unlike with my newsletter, it's not clear how many people are reading my blog using RSS compared to my newsletter. That's a good thing, privacy is important and I don't need to know who you are to enjoy my blog :)
But what if I was interested in a rough number of subscribers to the RSS feed?
What first-party GameCube titles are available on Nintendo Switch Online?
Nintendo just announced that the GameCube game “Chibi Robo!” would be coming in exactly one week to Nintendo Switch Online + Expansion Pack (NSO+). Chibi Robo is known for being a hidden gem in the GameCube library, and thus quite expensive to obtain a physical copy. This made me think about what other games Nintendo had announced for , and I noticed an interesting trend...
Many of the most expensive first-party GameCube titles are either planned or already available on NSO+.
Transferring “UTF8.XYZ”
I'm transferring the UTF8.XYZ domain and service to Trey Hunner, a friend and beloved member of the Python community. Trey and I have talked about making this transfer many times at across the years, and now it's finally happening!
Extracting 20+ NES & Famicom ROMs from Animal Crossing
Animal Crossing for the GameCube was a game far ahead of its time and one of my personal favorites growing up. One of the most beloved features was the addition of playable NES games as rare collectible furniture items.
This feature was implemented by including NES and Famicom Disk System emulators and the actual game ROMs on the Animal Crossing disk. The NES emulator included with Animal Crossing is frequently referenced as being one of the most accurate NES emulators available, but comes with the requirement of playing or emulating a GameCube to access the feature.
Nintendo Switch 2 physical game price differences
Last week I was able to purchase a Nintendo Switch 2. The console was due to arrive on Monday, so I also picked up a physical copy of Mario Kart World for $80 USD (compared to $70 USD for digital). This is the first time I can remember that Nintendo had a different price for an identical game, just based on the medium. At first glance this seems like a $10 USD difference, but there's a detail that gets obscured by comparing sticker price alone: who is paying storage costs.
Email has algorithmic curation, too
Communication technologies should optimally be reliable, especially when both parties have opted-in to consistent reliable delivery. I don't want someone else to decide whether I receive a text message or email from a friend.
I associate "algorithmic curation" with social media platforms like TikTok, YouTube, Twitter, or Instagram. I don't typically think about email as a communication technology that contains algorithmic curation. Maybe that thinking should change?
Setting Discord status from physical GameCube console
Have you ever seen one of your friends playing a game or listening to music in their Discord “status”? That feature is called “Rich Presence”.
What if you want to show your Discord friends that you're playing your GameCube? and I don't mean an emulator like Dolphin, I'm talking about a physical console from 2001.
Open Source Security work isn't “Special”
To understand why security is special, we have to take a look at why open source is an amazing thing. For many components of open source, users that have the time, desire, and expertise are able to contribute meaningfully to projects. As a maintainer of an open source project, this is awesome!
Hand-drawn QR codes
I really like QR codes. Recently I purchased a new sticky-note-like pad from a new local stationery store in Minneapolis. The sheets have a 10x10 grid and 2x10 grid.
UN Open Source Week 2025: Security for the Long-Haul
This page was used during the United Nations Open Source Week "Maintain-a-thon" hosted by the Sovereign Tech Agency and Alpha Omega. Thanks to both the Sovereign Tech Agency and Alpha Omega for supporting my attendance at this event and Alpha Omega for supporting security in the Python ecosystem.
Pikmin 2 International Treasure Hoard
Pikmin 2 is a game about collecting "treasure" from Earth in the form of mostly human-made products and items. One of the distinguishing features of the game is that the treasures sometimes model real-life brands like Duracell and Dr. Pepper.
Pikmin 2 has three distinct regional treasure hoards, each with unique treasures: US, JP, and PAL.