René's URL Explorer Experiment


Title: nvbug-6193808: Work around mojibake in nvml.system_get_process_name on WSL by mdboom · Pull Request #2118 · NVIDIA/cuda-python · GitHub

Open Graph Title: nvbug-6193808: Work around mojibake in nvml.system_get_process_name on WSL by mdboom · Pull Request #2118 · NVIDIA/cuda-python

X Title: nvbug-6193808: Work around mojibake in nvml.system_get_process_name on WSL by mdboom · Pull Request #2118 · NVIDIA/cuda-python

Description: Summary cuda.core.system.get_process_name(pid) raises UnicodeDecodeError under WSL whenever the calling process has a non-C locale (which is the default state for any CPython process, since the interpreter calls setlocale(LC_ALL, "") at startup). This is reproducible by running the cuda_core test suite with any seed that schedules tests/system/test_system_device.py::test_compute_running_processes before tests/system/test_system_system.py::test_get_process_name. The underlying defect is in NVML's WSL implementation (see Root cause below). This PR adds a scoped, defensive workaround in cuda_core so the public API returns a correct value on WSL. It also fixes a latent issue where get_process_name was effectively unusable from a fresh process because it never primed NVML's per-PID name cache. Root cause: the WSL mojibake NVML's nvmlSystemGetProcessName on WSL takes a different code path depending on the process's current locale. With the default "C" locale, the function returns the basename portion of /proc//exe correctly. With any other locale (including the typical en_US.UTF-8), it instead walks an internal UTF-16LE buffer holding the executable path but uses a 4-byte stride (as if the buffer were UTF-32LE). Each "code point" it pulls is therefore two adjacent ASCII bytes packed into the low and next-higher bytes of a single 24-bit value. That value is then emitted as an extended 5-byte UTF-8 sequence (the 0xF8-prefixed encoding used to represent code points beyond U+10FFFF). The net result for, say, a Python process whose /proc//exe resolves to: /home/mdboom/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/bin/python3.14 is that the returned buffer looks like ~180 bytes of f8 … chunks followed by the correctly-encoded trailing basename, e.g.: f8 9a 80 80 af f8 9b 90 81 af f8 8b b0 81 a5 f8 99 80 81 ad … /python3.14\0 Decoding the first chunk illustrates the pattern: bytes f8 9a 80 80 af decode as the extended-UTF-8 code point 0x68002F that 24-bit value packs 'h' (0x68) in the high byte and '/' (0x2F) in the low byte — i.e. the source ASCII bytes /h read as a little-endian 32-bit value padded with zeros Every chunk has this structure; together they spell out the prefix /home/mdboom/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/bin/ two characters at a time. The trailing /python3.14 is unaffected because of where the buggy stride leaves the cursor. Why the workaround needs to "re-prime" nvmlSystemGetProcessName is cache-driven: the per-PID name is populated the first time NVML enumerates compute processes that include the PID (typically via nvmlDeviceGetComputeRunningProcesses_v3). Critically: The mojibake is produced during the prime call, not during the read. Once a buggy entry is in NVML's cache, switching to the "C" locale and re-reading does not unscramble it — the cache survives the locale flip. Re-running the prime call under the "C" locale overwrites the cached entry with the correct UTF-8 string. Subsequent reads (in any locale) then return correctly. So the workaround must do prime + read together under "C". Behaviour after this PR Native Linux / Windows: behaviour is identical to before, except that get_process_name now primes the NVML cache automatically. This makes it usable from a fresh process (previously a caller had to have manually queried device.compute_running_processes first or accept NotFoundError). WSL: the locale flip is applied around the prime + read sequence, so the returned name is the correct UTF-8 string regardless of the caller's locale. Discussion Should we instead try to fix this at the cuda_bindings layer and fix it for all cuda_bindings users? In that case I guess cuda_core should raise an exception from get_process_name if on WSL and the cuda_bindings installed is too old? I do plan to file the underlying bug with NVML. Locale-sensitive APIs should generally be avoided.

Open Graph Description: Summary cuda.core.system.get_process_name(pid) raises UnicodeDecodeError under WSL whenever the calling process has a non-C locale (which is the default state for any CPython process, since the int...

X Description: Summary cuda.core.system.get_process_name(pid) raises UnicodeDecodeError under WSL whenever the calling process has a non-C locale (which is the default state for any CPython process, since the int...

Opengraph URL: https://github.com/NVIDIA/cuda-python/pull/2118

X: @github

direct link

Domain: github.com

react-profiling0
react-import-mapreact,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf
route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:63e34e5e-742b-215e-982c-7fdbbd5e8ad2
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id997E:23EE1:5B5B6F:780252:6AF83786
html-safe-nonce6ab53ebc438a74369e0960935ded63276fad2ebc1b6f0b414b67ee30c284e65b
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5OTdFOjIzRUUxOjVCNUI2Rjo3ODAyNTI6NkFGODM3ODYiLCJ2aXNpdG9yX2lkIjoiMjk4OTMxODAyMzE1NzM5NzM4MiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac7d10df7ad0c8a50c061330ba8155adecca0df5cbd689805fcacc74b86e6791fe
hovercard-subject-tagpull_request:3718978673
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/NVIDIA/cuda-python/pull/2118/files
twitter:imagehttps://avatars.githubusercontent.com/u/38294?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/38294?s=400&v=4
og:image:altSummary cuda.core.system.get_process_name(pid) raises UnicodeDecodeError under WSL whenever the calling process has a non-C locale (which is the default state for any CPython process, since the int...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None5713ecd83001b2f55c3509fb7a292bf7d66d0f167c7ae87a9f7eaec5a52bf8db
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/NVIDIA/cuda-python git https://github.com/NVIDIA/cuda-python.git
octolytics-dimension-user_id1728152
octolytics-dimension-user_loginNVIDIA
octolytics-dimension-repository_id381173759
octolytics-dimension-repository_nwoNVIDIA/cuda-python
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id381173759
octolytics-dimension-repository_network_root_nwoNVIDIA/cuda-python
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release653be32ff5c755082a4db662491bfbbcfc9112c1
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/NVIDIA/cuda-python/pull/2118/changes#start-of-content
https://github.com/
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FNVIDIA%2Fcuda-python%2Fpull%2F2118%2Ffiles
GitHubRepository hosting, code review, and collaborationhttps://github.com/platform
CopilotAI coding agent for tasks, projects, and automated workhttps://github.com/features/copilot
ActionsCI/CD and automationhttps://github.com/features/actions
Code QualityQuality analysis, fixes, and enforcementhttps://github.com/features/code-quality
CodespacesCloud development environmentshttps://github.com/features/codespaces
Code SecurityVulnerability detection and remediationhttps://github.com/security/advanced-security/code-security
Secret ProtectionSecret scanning and leak preventionhttps://github.com/security/advanced-security/secret-protection
All Featureshttps://github.com/features
Documentationhttps://docs.github.com/en
Traininghttps://learn.github.com/skills
Certificationshttps://learn.github.com/credentials
Build with Copilothttps://github.com/features/ai
Customize Copilothttps://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview
Integrationshttps://github.com/marketplace
Trending reposhttps://github.com/trending
GitHub Sponsorshttps://github.com/open-source/sponsors
Developer articleshttps://github.com/resources/articles
ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place.https://github.blog/changelog/
Enterpriseshttps://github.com/enterprise
Teamhttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
See all industrieshttps://github.com/solutions/industry
Why GitHubhttps://github.com/why-github
Customer Storieshttps://github.com/customer-stories
Business insightshttps://github.com/solutions/executive-insights
Trust Centerhttps://github.com/trust-center
GitHub Advanced SecurityEnterprise-grade code securityhttps://github.com/security/advanced-security
Copilot for businessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Documentationhttps://docs.github.com/en
Resource centerhttps://github.com/resources
Bloghttps://github.blog/
Events & webinarshttps://github.com/resources/events
Community Forumhttps://github.com/orgs/community/discussions
Customer Storieshttps://github.com/customer-stories
Integrationshttps://github.com/marketplace
Customer supporthttps://help.github.com/
Traininghttps://learn.github.com/skills
GitHub Statushttps://www.githubstatus.com/
Abouthttps://github.com/about
Partnershttps://github.com/partners
Changeloghttps://github.blog/changelog/
GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub.https://githubuniverse.com/
Pricinghttps://github.com/pricing
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FNVIDIA%2Fcuda-python%2Fpull%2F2118%2Ffiles
Sign uphttps://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=NVIDIA%2Fcuda-python
Reloadhttps://github.com/NVIDIA/cuda-python/pull/2118/changes
Reloadhttps://github.com/NVIDIA/cuda-python/pull/2118/changes
Reloadhttps://github.com/NVIDIA/cuda-python/pull/2118/changes
NVIDIAhttps://github.com/NVIDIA
cuda-pythonhttps://github.com/NVIDIA/cuda-python
Codehttps://github.com/NVIDIA/cuda-python
Issues219 (219)https://github.com/NVIDIA/cuda-python/issues
Pull requests92 (92)https://github.com/NVIDIA/cuda-python/pulls
Discussionshttps://github.com/NVIDIA/cuda-python/discussions
Actionshttps://github.com/NVIDIA/cuda-python/actions
Projectshttps://github.com/NVIDIA/cuda-python/projects
Wikihttps://github.com/NVIDIA/cuda-python/wiki
Security and qualityhttps://github.com/NVIDIA/cuda-python/security
Insightshttps://github.com/NVIDIA/cuda-python/pulse
Sign up for GitHub https://github.com/signup?return_to=%2FNVIDIA%2Fcuda-python%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2FNVIDIA%2Fcuda-python%2Fissues%2Fnew%2Fchoose
rwgkhttps://github.com/rwgk
NVIDIA:mainhttps://github.com/NVIDIA/cuda-python/tree/main
mdboom:fix-get-process-name-on-wslhttps://github.com/mdboom/cuda-python/tree/fix-get-process-name-on-wsl
Conversation 18 https://github.com/NVIDIA/cuda-python/pull/2118
Commits 6 https://github.com/NVIDIA/cuda-python/pull/2118/commits
Checks 97 https://github.com/NVIDIA/cuda-python/pull/2118/checks
Files changed https://github.com/NVIDIA/cuda-python/pull/2118/files
Please reload this pagehttps://github.com/NVIDIA/cuda-python/pull/2118/changes
nvbug-6193808: Work around mojibake in nvml.system_get_process_name on WSL https://github.com/NVIDIA/cuda-python/pull/2118/changes#top
Show all changes 6 commits https://github.com/NVIDIA/cuda-python/pull/2118/files
06a2bc8 nvbug-6193808: Work around mojibake in nvml.system_get_process_name o… mdboom May 20, 2026 https://github.com/NVIDIA/cuda-python/pull/2118/commits/06a2bc8a8d277b6f96089ac4d8ab1253420d7bc6
aa31400 Merge remote-tracking branch 'upstream/main' into fix-get-process-nam… mdboom May 20, 2026 https://github.com/NVIDIA/cuda-python/pull/2118/commits/aa314001429a5018d1791ac0fd0421749273148f
bfb518e Re-enable test mdboom May 20, 2026 https://github.com/NVIDIA/cuda-python/pull/2118/commits/bfb518e9d809045bd94daaa022dbc899e973b5e7
22fd00c Move POSIX-only functionality to a separate module mdboom May 20, 2026 https://github.com/NVIDIA/cuda-python/pull/2118/commits/22fd00c5973bb9595ee4f8a1d45de5c443830632
960659c Address comments in the PR mdboom May 20, 2026 https://github.com/NVIDIA/cuda-python/pull/2118/commits/960659cb5f9c1e6a101860ad8d98e0086a46415a
7fd04fe Merge branch 'main' into fix-get-process-name-on-wsl rwgk May 21, 2026 https://github.com/NVIDIA/cuda-python/pull/2118/commits/7fd04febe7887b1734fcbcf7e6f50dc170cbcb87
Clear filters https://github.com/NVIDIA/cuda-python/pull/2118/files
Please reload this pagehttps://github.com/NVIDIA/cuda-python/pull/2118/changes
Please reload this pagehttps://github.com/NVIDIA/cuda-python/pull/2118/changes
13.2.0-notes.rst https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-a7695d09b7d941d20ab0d756f9381cc5bfb877fd35d8e1de84a45a45ad39bda9
13.3.0-notes.rst https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-7596ffd18c06e3c472d0dec298b80e97cd2167070f0a5dd6472b679c7ed5c945
build_hooks.py https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-f548f2eb738fc5eb41d25700e66f4c87c32cd6da393a2aae3120eb45a9279ab4
_wsl_locale.pyx https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-26dbcf1975cc685468a4f291693327f7815c5eae0d6da96ebf844b2c09ec051e
_system.pyx https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-c7d0c7ab7eac4aafd90cee274a718ef0b53b1c1fbb7fe5b55c6a25f4dc8737c2
1.1.0-notes.rst https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-d0a284b0424dcb0f647a2d3c0f52124962c7521da25c6f000c277cc526892313
test_system_system.py https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-8b5081f61e935f0f8dff042d08e2a96a2f0ad15c403863d1252c17f759596a1d
cuda_bindings/docs/source/release/13.2.0-notes.rsthttps://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-a7695d09b7d941d20ab0d756f9381cc5bfb877fd35d8e1de84a45a45ad39bda9
View file https://github.com/mdboom/cuda-python/blob/7fd04febe7887b1734fcbcf7e6f50dc170cbcb87/cuda_bindings/docs/source/release/13.2.0-notes.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/NVIDIA/cuda-python/pull/2118/{{ revealButtonHref }}
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-a7695d09b7d941d20ab0d756f9381cc5bfb877fd35d8e1de84a45a45ad39bda9
kkraus14https://github.com/kkraus14
May 21, 2026https://github.com/NVIDIA/cuda-python/pull/2118/changes#r3278332578
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/NVIDIA/cuda-python/pull/2118/changes
rwgkhttps://github.com/rwgk
May 21, 2026https://github.com/NVIDIA/cuda-python/pull/2118/changes#r3278477313
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/NVIDIA/cuda-python/pull/2118/changes
mdboomhttps://github.com/mdboom
May 21, 2026https://github.com/NVIDIA/cuda-python/pull/2118/changes#r3280897165
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/NVIDIA/cuda-python/pull/2118/changes
cuda_bindings/docs/source/release/13.3.0-notes.rsthttps://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-7596ffd18c06e3c472d0dec298b80e97cd2167070f0a5dd6472b679c7ed5c945
View file https://github.com/mdboom/cuda-python/blob/7fd04febe7887b1734fcbcf7e6f50dc170cbcb87/cuda_bindings/docs/source/release/13.3.0-notes.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/NVIDIA/cuda-python/pull/2118/{{ revealButtonHref }}
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-7596ffd18c06e3c472d0dec298b80e97cd2167070f0a5dd6472b679c7ed5c945
cuda_core/build_hooks.pyhttps://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-f548f2eb738fc5eb41d25700e66f4c87c32cd6da393a2aae3120eb45a9279ab4
View file https://github.com/mdboom/cuda-python/blob/7fd04febe7887b1734fcbcf7e6f50dc170cbcb87/cuda_core/build_hooks.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/NVIDIA/cuda-python/pull/2118/{{ revealButtonHref }}
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-f548f2eb738fc5eb41d25700e66f4c87c32cd6da393a2aae3120eb45a9279ab4
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-f548f2eb738fc5eb41d25700e66f4c87c32cd6da393a2aae3120eb45a9279ab4
cuda_core/cuda/core/_utils/_wsl_locale.pyxhttps://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-26dbcf1975cc685468a4f291693327f7815c5eae0d6da96ebf844b2c09ec051e
View file https://github.com/mdboom/cuda-python/blob/7fd04febe7887b1734fcbcf7e6f50dc170cbcb87/cuda_core/cuda/core/_utils/_wsl_locale.pyx
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/NVIDIA/cuda-python/pull/2118/{{ revealButtonHref }}
cuda_core/cuda/core/system/_system.pyxhttps://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-c7d0c7ab7eac4aafd90cee274a718ef0b53b1c1fbb7fe5b55c6a25f4dc8737c2
View file https://github.com/mdboom/cuda-python/blob/7fd04febe7887b1734fcbcf7e6f50dc170cbcb87/cuda_core/cuda/core/system/_system.pyx
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/NVIDIA/cuda-python/pull/2118/{{ revealButtonHref }}
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-c7d0c7ab7eac4aafd90cee274a718ef0b53b1c1fbb7fe5b55c6a25f4dc8737c2
Please reload this pagehttps://github.com/NVIDIA/cuda-python/pull/2118/changes
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-c7d0c7ab7eac4aafd90cee274a718ef0b53b1c1fbb7fe5b55c6a25f4dc8737c2
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-c7d0c7ab7eac4aafd90cee274a718ef0b53b1c1fbb7fe5b55c6a25f4dc8737c2
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-c7d0c7ab7eac4aafd90cee274a718ef0b53b1c1fbb7fe5b55c6a25f4dc8737c2
cuda_core/docs/source/release/1.1.0-notes.rsthttps://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-d0a284b0424dcb0f647a2d3c0f52124962c7521da25c6f000c277cc526892313
View file https://github.com/mdboom/cuda-python/blob/7fd04febe7887b1734fcbcf7e6f50dc170cbcb87/cuda_core/docs/source/release/1.1.0-notes.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/NVIDIA/cuda-python/pull/2118/{{ revealButtonHref }}
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-d0a284b0424dcb0f647a2d3c0f52124962c7521da25c6f000c277cc526892313
cuda_core/tests/system/test_system_system.pyhttps://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-8b5081f61e935f0f8dff042d08e2a96a2f0ad15c403863d1252c17f759596a1d
View file https://github.com/mdboom/cuda-python/blob/7fd04febe7887b1734fcbcf7e6f50dc170cbcb87/cuda_core/tests/system/test_system_system.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/NVIDIA/cuda-python/pull/2118/{{ revealButtonHref }}
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-8b5081f61e935f0f8dff042d08e2a96a2f0ad15c403863d1252c17f759596a1d
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-8b5081f61e935f0f8dff042d08e2a96a2f0ad15c403863d1252c17f759596a1d
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-8b5081f61e935f0f8dff042d08e2a96a2f0ad15c403863d1252c17f759596a1d
https://github.com/NVIDIA/cuda-python/pull/2118/changes#diff-8b5081f61e935f0f8dff042d08e2a96a2f0ad15c403863d1252c17f759596a1d
Please reload this pagehttps://github.com/NVIDIA/cuda-python/pull/2118/changes
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.