public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/riscv:master commit in: www-client/firefox/files/icon/, www-client/firefox/files/, www-client/firefox/
@ 2021-12-20  2:14 Yixun Lan
  0 siblings, 0 replies; 2+ messages in thread
From: Yixun Lan @ 2021-12-20  2:14 UTC (permalink / raw
  To: gentoo-commits

commit:     9d64f3c41c9f8892016ac9ed34a21cbb41358d76
Author:     Yixun Lan <dlan <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 15 08:18:33 2021 +0000
Commit:     Yixun Lan <dlan <AT> gentoo <DOT> org>
CommitDate: Wed Dec 15 08:18:37 2021 +0000
URL:        https://gitweb.gentoo.org/proj/riscv.git/commit/?id=9d64f3c4

www-client/firefox: initial import 95.0-r1

from commit: 3376e95a2bce8c371c7cd00367eada6552cf2842

Signed-off-by: Yixun Lan <dlan <AT> gentoo.org>

 www-client/firefox/Manifest                        |  198 ++++
 .../firefox/files/disable-auto-update.policy.json  |    5 +
 www-client/firefox/files/distribution.ini          |   42 +
 www-client/firefox/files/firefox-r1.sh             |  116 ++
 www-client/firefox/files/firefox-wayland.sh        |    7 +
 www-client/firefox/files/firefox-x11.sh            |    7 +
 www-client/firefox/files/firefox.sh                |  128 ++
 www-client/firefox/files/gentoo-default-prefs.js   |   12 +
 www-client/firefox/files/gentoo-hwaccel-prefs.js   |    3 +
 www-client/firefox/files/icon/firefox-r2.desktop   |  236 ++++
 www-client/firefox/files/icon/firefox-r3.desktop   |  236 ++++
 www-client/firefox/files/icon/firefox-symbolic.svg |   64 +
 www-client/firefox/firefox-91.4.0-r1.ebuild        | 1235 +++++++++++++++++++
 www-client/firefox/firefox-95.0-r1.ebuild          | 1237 ++++++++++++++++++++
 www-client/firefox/metadata.xml                    |   40 +
 15 files changed, 3566 insertions(+)

diff --git a/www-client/firefox/Manifest b/www-client/firefox/Manifest
new file mode 100644
index 0000000..4e5b6a4
--- /dev/null
+++ b/www-client/firefox/Manifest
@@ -0,0 +1,198 @@
+DIST firefox-91.4.0esr-ach.xpi 451228 BLAKE2B 525aac7e80d504b87a565f045f6ffefb5b8743d9f0606564d6c10dd2ba6ede526d451bd08bdf9ff4abea578f55cbf7dde1c0542ff8ac3640c3c8bda920d146fb SHA512 42be3bdc43b561b2148fcc08be8c4645c6ec15ebc1d689489f922c31234df2a88fa1dd481b7d8122c822b8487e2d1cd4e7a546909000603cc1d056afa83ff5e5
+DIST firefox-91.4.0esr-af.xpi 425096 BLAKE2B 8af222eee5d909eeaa76168a1601e59abf870e1d351b49495074c27eb12e1fe1160293aaa972633002a9e9bdae02a555e395f962de8fd9283ce86556ac73d6de SHA512 1a82f635d36a646973b0f08b1746bd476283f6e807ac31ef9fef48e59130367c7e138ba92038f7f2778c8f4455f9d6726871bbb9d563495b68b0e3f72cf1bd02
+DIST firefox-91.4.0esr-an.xpi 497865 BLAKE2B c4903662ae08d04a5193f4355ab273d09b71fefe3ed69f93ee80b577ea76ca0ff1921f31c8d4de852569a41d6eef54ae039d6557437761fce42d5c7babc632b9 SHA512 35da11f247f7180e2c5e720a1989d57bf575c7c8844b231c38b598c0df166891b9fbc86360fe7865908eee7f4119c037664f74002093a056e601fc65634361cb
+DIST firefox-91.4.0esr-ar.xpi 557243 BLAKE2B e1f4dd28e26227ef345673ac6b69eccbb3083d619fe0ad691586f2c132912589552e3a2d463efae30ac109d3bcef7a2b94aba78b0dd89b4a1ddec9537adb2e14 SHA512 cc5e9e60cc65314fef7c6b001a773f8ae7763342ba2979606dc4ef3efeab2af5cfe0443c953dd0796a2cc4f5bcd4671a6223fb921559d455794ac3c2606751fd
+DIST firefox-91.4.0esr-ast.xpi 496964 BLAKE2B 6cd56181f48260dc85982220d32599c5d99fc7607ee17cf607976d945b8fc04217e9bb5ed150db6e8b0d691c6d219f9adbe9e26fc52af8af106b1b635caec105 SHA512 619f8f5d96d325a068cd27589de9cf230be74b613d8cb983e4833cfc59641b5e716a3d7f1ea69027e1baea4ab5a34f21f836141e5bfc4d8257c8d81077c29804
+DIST firefox-91.4.0esr-az.xpi 487259 BLAKE2B 533a12abce11c5d39eb21291aae74efe0ca1a77a2169ce5be11cc64864b1cda5b28f04153c1f0c1c368b5183b248aca9596fc0c8e19466a5dc433ea5a54cdd54 SHA512 ea239697a214b6756e091655608514f3746a6ac0661cabe0241004d90854baf7d0f3191de361216dec70db00534bdd432495fc45531c1ba1162bf61d35ad4e5f
+DIST firefox-91.4.0esr-be.xpi 617852 BLAKE2B 0e9fa980b3bc459e3b9bb7f3e63c6c3b21a2ae30995412b62dd55d2865c5e8144d5bb236a884680839a227e2e5456b107cb4c39ef1220b6186ab8ed8649eb170 SHA512 848d39d99f72bdc0b470c9e0a9a347edc3a661a43342e68085c33974bbac0d7085548fadb391fa4eec12aa24d4e577e670899d503a70bcbd02d83032b4d6c8b3
+DIST firefox-91.4.0esr-bg.xpi 566071 BLAKE2B ce4def1ff088bba14618de255e33dcafe2c0e1116f5d58166361f1f8a27a7c608e5ebead3270766111598c2d43ce5a9b413798c4aa722960bcbd7da07386538f SHA512 e964a9ca742de974334b5f9a54dc3a0e6d7488a181ae7696a6130e2307d85cf1d39307ee4442bc663dab7a9a4d1850117a5eaac22e670852cedde4a18d2e0c46
+DIST firefox-91.4.0esr-bn.xpi 554437 BLAKE2B f0b7e820e5a06f9ba829fe61b903d8d363eb4793f8ba7463096ea9acd68abab500465c52ca9d577fda0b9f36eefcbdf62a4811be15abe9e2ed3af752853c5980 SHA512 95bed68b2e1c2954a8447cf5d782c9e650bd06e522163341890aa7e751ebd906404dfa8fa68e66749c0a69e5a1a17fabec827ecc0fac2bcd3db5ed4cb423346f
+DIST firefox-91.4.0esr-br.xpi 522501 BLAKE2B b2b2e43d3d6a0dce53b8fa6329951bb3ae14513a53f42078545c1bac0b42ed3854e367bfa9ddeeabea995c6f0c2709150dfeae474b6c9d22465057ae2c6cfbd1 SHA512 f4a4a21ccb7b7609dd7050f5fac57834b3806916ae2fe5a8d46dfea43715a80387ae776edc84cd151b2913ba0b3250896b2e0667dbcde5501873512a9897db26
+DIST firefox-91.4.0esr-bs.xpi 461651 BLAKE2B 173ae71acf7d349526871b71a17742723d5ec4ca8a4e4786c7e60611579aa1dc2d7d3aa98db263a0d6e3e9246b45fb1f923662691df5c0e7b9bf4119abb3bc5a SHA512 98227011b4167c3635507c1d3984854e049bc12f7d9ac27678bcc8c3db2c00df461d1b937c30e0ccade7fb90cff10ca354be84050f63730b05e6261bedc18c5e
+DIST firefox-91.4.0esr-ca-valencia.xpi 527261 BLAKE2B 08da181d15b6859851f294a97548685797e6de5a954615990bae0fb0de0f8a8af4267516397e7773e6d239734c12dfeb5c3597ed66e917cdd35b7ee929a27522 SHA512 e91197cff0a966fa294f9e7027eff1134b196489ff5ccf943f3c91a0deccc60a9b4acd02e932074196e5fcaf3702453058aca1f5efe57766d44cd21a7ea35082
+DIST firefox-91.4.0esr-ca.xpi 527631 BLAKE2B d759ba35fe9940a21ac969b9386f236ada30b5ea4ccfa702714de5aa2310a150db48a2dc5e2c46087e4d0d2abb51e60672eba9b9e8e941d3c33d2529328c13eb SHA512 2abef3037ba8d26669d64c710acb681136794e9d51c47f25dcc8d668e8cae65b708b072569379d6c272a54ba6027212696ac31777d79421eca3acd0fcbc75b91
+DIST firefox-91.4.0esr-cak.xpi 550924 BLAKE2B d41287e5d63273e97ba55748d6f94462db7fd0508be4bff7d59c7e79504f7f173826b891e52355545edc9110619755ab5b8bc635e65d2019d012df7185fba24c SHA512 86b021881ebc4bb1855cfc52509b16f864314947d7122da415ce057dc7daf7a3d4aa9621ed668152302f9eda1250c7426a8df9a717d92f7d1591097c4aea6c55
+DIST firefox-91.4.0esr-cs.xpi 559274 BLAKE2B a8e0f05e08b85020a70ba313ec16a4cdbe2e1815070449485bde0436750e42ca39bb1d2b530cf4c69928ac96a37f24868ad5dd09182c627ba8916cfb1eece052 SHA512 2a706df50f8245863b9d66265055c83ebe2fd8e19e2ec7f203aff4036025411a7c9163cf60b6f37e042d3f11cb5b4b3de920de2b26db9559525339261212201b
+DIST firefox-91.4.0esr-cy.xpi 538234 BLAKE2B dbc2747859d76eb542c30719364963b112e0643592ea6ebab75167eaa5db5f5c62427d601c3bd2106001965e988b098191b2c53b7be1a8237dbe3375aeb56e91 SHA512 3a4fa4f2a52bf028ba8b2bf370eea3ae0a0a50fe98e42eae8eed8aa0d5c828aabbf72b21a70dc99ccef3b6ce59956e01a0970b44bc9cd82cf3f7d30f48f9a898
+DIST firefox-91.4.0esr-da.xpi 530228 BLAKE2B ad7891974d63bef156efea37a634a53548fc924590c7caddc4df1aad12541f2052123aff1656064e38743764a6c5933b968ae750831dc5b7686f42cdc64cb7d2 SHA512 1feafd2c5af269318109e11f47bd1dc30c28027b02deeb2910c21e84ca988c0ef6e5b85adead7aa73581bcdc861445899996e61b370a039355bf15d63ea3309f
+DIST firefox-91.4.0esr-de.xpi 549363 BLAKE2B 8660c7d0d22382487bf45d573f93424706b07b4275e553e00faab26debaa156309918983b18ba60710b5694da7628c8bad89a92709f67303f63fb4974cf32143 SHA512 badfc5b13084cb6938a08e403fafbe128fe62f3eb799754b89037204f72a254601073d46b10d614f120ee9ae834cbac63ef6d2b2e632a1dbd29d8ba466f6a00e
+DIST firefox-91.4.0esr-dsb.xpi 562054 BLAKE2B 03ceae4f7c0b21a4a73ede81da1d87f28b36691ecfade984e0150367faec8397ebad2a53b5709105afd437fbc84da1673259993cf9c95c415a962db827a96a9e SHA512 bf46da14c7539d4e69a2a4ae9e11949b9013798587ed99d15831ba8e654d1d623dcbd26150668839b06196e24999b7ff6cc8f31c0c664b6d338e8423b813a26b
+DIST firefox-91.4.0esr-el.xpi 634551 BLAKE2B 4d6d237e1657db12df1d13887d45c636e0fbadc79feb9c27a16243bd6157c5b7f7d0c1b1cf29e05d58709c228929c0a4d2c4732d4c1d0f844f11606c50243494 SHA512 433003408c24815a5e05e0595a21fb6b5f1710cd672b343f9a708299e8c61f621d0b01cd9895610fd87214b6108ccbe9efbf8053a687b669d60864f69c45b2df
+DIST firefox-91.4.0esr-en-CA.xpi 506461 BLAKE2B 499bccc90ee2ccaf44fd82292ef193223b8ce0a8ee8714694d668fc52a1e550dcd90d75455810a3f167d50060decd5d491660f4958847872f30211477fc53329 SHA512 79db782768da33dbdf707d8e67d0fa361fd7651576b7fce5ba55fcea9d5b36b20961eb5564ca9f54dbf5dd8d21f8b106d1b7fcbe7b6e6c4704d54f9c0190e579
+DIST firefox-91.4.0esr-en-GB.xpi 507019 BLAKE2B e1143c3c00e0ec03be030b12b9988b7ad088fe2c833524b796ad4ad4e0a2e10d1754b217dc8e2bf280b1dd92a4a8f9cee9fb55875b6540847591827a0f687e99 SHA512 53cf821d5413f60c13e50cdaf9244b80c4f4783cd6bfe7c7c340b99c0d4f1f479950affcabca33db1d28da3302e30b157e78e972384b1d56eba06043c06d6d64
+DIST firefox-91.4.0esr-eo.xpi 528486 BLAKE2B e5c361e4c4fdee20d33ece92d5130f182a5af860d916040463e8292f14799bda0ced5da3cdd09844a85799e5991d9f25721e60c4a8e9b0321028d2f25a26085c SHA512 4c93457f3276f66d442321454d9ee020ab24966552ceafa980212638379a15da213f9bd08dfacab104803ab1258f3e3fa92c6f4a81548c7ee973871151900175
+DIST firefox-91.4.0esr-es-AR.xpi 542781 BLAKE2B 661c003673dddce5ca3cbddaf6a7166f65ddbd62eccfda55fd6e110ce2ee416d48a2be1522bd298e64c54aba72c8e0b55c233a5da46551970b1553c78911142a SHA512 cd7d4c39b4b010dd8c17497450297b7c3f8ccbbad1bc5b598700b88e4432c8c6a4c07652fe4f818b6c58028fa243bbfd987436ea9749303fe6e33da5756c68d6
+DIST firefox-91.4.0esr-es-CL.xpi 542423 BLAKE2B f620a3f923167105b6222f4f814bd16a3d39c791e91a034c10c4e2a74e82231ef11f967d4d10b74a51de965825b3d95213c0a4044d500e0825c22c74def52b7f SHA512 1df5c356c657bf009c0702d178c0a97ca6425350aefe46246d585bc914f9e957d45be2b8f098c79aeb6802c715879faa3c9ebda96ce1a1855151d0f031ff9c27
+DIST firefox-91.4.0esr-es-ES.xpi 533117 BLAKE2B 645808f4c09423f43cd323eaf5190259702fcabc29aa816a3eb64e63394b5571e0c4e23a87a5feb9e79145fc3d2dc6c4e48d12fa2f0df199690f8245aae877fb SHA512 4920c49813d2b996ca832f452d51226365bb39a44ac62645e3418749fbdd08e8e5ec8091eb9108e9039206d434091be570aa71cbb9732516752cf616b4465dc5
+DIST firefox-91.4.0esr-es-MX.xpi 541516 BLAKE2B 457044739b4f864c7c5647056c4b31eacb32d79296488668429683a33f7a4438b13a8832763f9e7628ae6094d8b7dd1ac72944d931e96a0e4a1a6883d5cd8878 SHA512 79b184125aae7311195d268af0d97aa274c9d26d8fd1d8b557db9860dd8e5cb17a5307a39a22be150fec18adc69649dae5e76922e9c46fe29cb32a6bfef8b46b
+DIST firefox-91.4.0esr-et.xpi 480346 BLAKE2B 5ac5375095f433be0d2d474c7ea808f826c2123b82ebdbd541bd03914972b4546c940f1334711ff16c75b9d07ef179bdecef8aba80b02c0350c4696d86655530 SHA512 d86bee23f2a22a09b8cd331a3f1ba3a17a3509c1941af64111d604895e8ae48c0ed36daaa72610037aacd039d2e1ae80a08182014163cb054a57bb4bd3c99029
+DIST firefox-91.4.0esr-eu.xpi 532520 BLAKE2B 88fce18bde87ac875adfb43fa5741ba2ff568f0ce8c1260c474d3f3a7af879ef4af699ee8a6b24d99aa6228dacca67b7897e9588f2b4c30679fe37bfcd511693 SHA512 c1cbafc7a7f2c462d7c2f43b830397dd02f9b6e12c01e45be154105b36cb62e56d18f662086dbe4127d91927dd5980157dc90dd4a8bbae8a663beb42dacc7a47
+DIST firefox-91.4.0esr-fa.xpi 553970 BLAKE2B 568cf1029ad7150c72f06adbdc80ce16235f6905fdd7545ab9aa8b5923b5f585f2e2d889260b5ee3cb30f6a0dfcbc24afc5b2e7307055dc4bfb02e735e40d640 SHA512 6c0d5114943d27b4d8b50a99235d6e85e6674a810e95c1999cd2061cdb9a7f1f63444857fe69d893a864a3f083ecd86fc4641d59edb9b15ec6f1287feb2a13ff
+DIST firefox-91.4.0esr-ff.xpi 469973 BLAKE2B 6dcbacee6086dec58fc2b619004cd505eecfb20ac914b2592c6e18864b4c016b535949241f1e8e806ef7609a3534c272b0339a701ca07fe92aa5e0fa2c7bf8e9 SHA512 3250d9e7c14370ad5379b081dfc4831ec5c4db6361cee3014f1c31d0b963d82da8cc5895ee8793d383fc508e0d78fb289f592f8dc1f75e1e70b61ffb6218111e
+DIST firefox-91.4.0esr-fi.xpi 526622 BLAKE2B b77cbdf5370e3535a3352cb956eac60f2f3facaa6f9934d6bd75d8570b0bac801a9f56cb44044974b9669595c54dbed95e48568759cfaf0f853f8fd89fc3b91b SHA512 38d6d9d1243ff26fc588b984114f8669136ac7e78e421d1dec0ea6bd12116ae49d85de5f3b559f21b0510c01a203cb8acc19f625047e13fd5d79238832a2af94
+DIST firefox-91.4.0esr-fr.xpi 553503 BLAKE2B 393c700caec3ccee3ca5e679f63b8463461750872c54090d5f619501ae4dadf0a475ca47da1dd7efd80335854b094d52f08df7ec4939a3978b7130ef8875c840 SHA512 fef38c360e58008da3ecfb261fc8cfc904fb4512159d4367e7e3d08173c1e675d2fd9a5ee0db5cf440f2eae18314998515a0fa1e78c855ec2b45cc95f70376fb
+DIST firefox-91.4.0esr-fy-NL.xpi 539366 BLAKE2B 618c96d6156799c5744d311368d7b29edb79887c6997260bdf74bc3ba6b6452ce7fa76265965e78732bd746dc19bf1512e7ddd9edd43dda9faa6166417cf6274 SHA512 062d45aa56fda9e7e77d0badde5a519190fdc804dee5d648d9d2ea75174ec6412395784992b50ac58e79d821492b248e6757f2c99c63a5649bd5bc52de74973a
+DIST firefox-91.4.0esr-ga-IE.xpi 457892 BLAKE2B f3f5c1ea1c1e122a896bf88774f8b76b8dfe48183c8896f5c64c705dc1ff0283a2f17b534301f4dbe2b621b5f6f6251d2085b28476ff21aeadc1cd15d9a14378 SHA512 e5aeb011f6e6b5adea4c04b01f994a6d4e3b4d368fd8a1efefd48fb631fca757463a71f2c3b519af7216ef42d540367fae3423e6e2dea038e51075c10b4c7b33
+DIST firefox-91.4.0esr-gd.xpi 529204 BLAKE2B 2d61fd5f3c221dc9ccf9a72948d28a9615c6d920989ede46ff888bd0f63754eef7db995d3744be398249db8aa7bec0d37f61c58ea1de016d4ccbb62b471ac58c SHA512 62222ade8a1ab7a60168040c25929155f5e9a6a769d40885b7f6471bfdd523457e09cd4810227dee5dc97092fe2862a66af62843a18a17be8cd0cb4d09116e6b
+DIST firefox-91.4.0esr-gl.xpi 537265 BLAKE2B f3913d321f6abea828a18f774e475da4d9d91bebe3e596a77719216ffbef7602a10c4501d0fa6c1ca1404c1121773a9cc2b4d8b1c02e20d971ea1516a05fec3f SHA512 1f3177618c182cec06c9c9d69efb016dd09ca80dcd1a809a5308c32e32737a3c18170de3f9f88b04f71a42b2090051c6c62f8578ad55488c5322e9667a0b1301
+DIST firefox-91.4.0esr-gn.xpi 554090 BLAKE2B 216907423db0a9ea6af0003cda1fa12b6b44fbfbaca7b71d241e9e05365e07ac99b2b2d8654937a840b4747a2916228edb9e66a56203e3b19e8fc4fc41daef6b SHA512 306e3474f30cd22e52e17a7f338f1ce28b2aa03cc8129eda8b24cf379d686068bc93cfe9c3cbbddf4e60fcb278a5c0c9cfa443fd4f34bd4b6bff3f924a6cee1c
+DIST firefox-91.4.0esr-gu-IN.xpi 527245 BLAKE2B 2dc7bff6a9a8117907aa0534100cda919926191793171b0e35dda3e3e0c66d7768ad77b24266de265b5a3dfca206d6c3f968870b2184badb71d99c1b0ab9e650 SHA512 ff631f7094c1d3d496a18bfc9279424f8165f2d3c0e9eb40a723e1f586e32602d9cd387cc4eadd6bb0e7a80996b94e5e9a774e4f2b010427cd26efcacd4fa947
+DIST firefox-91.4.0esr-he.xpi 553037 BLAKE2B 3700b0298b76cceef7a2363e1e99c9ca16d3e778def977f1f7ce93f3f6059e4f7dd136773a3e77dcca18511920f078a1f763d111a616e198bbcbecf9ab155584 SHA512 70e5125db74d1427d70cbb5e68c34520a960874897299eb35ef2846123ab82b737fd71d32adc92e7d04f632e4ee8b64a154aa0f8357a9ece277ab7669df717be
+DIST firefox-91.4.0esr-hi-IN.xpi 554560 BLAKE2B 2551147898282dc511a36400e392b3c4e19b4dd935ded68c61211afcad796cef7a22061768d6ce486e81e958fcb49f9a4c1f303fb847d0e9fc8c4066281d7fb6 SHA512 315fd73b64538eaa6c83bd32afe47a64eb16c3cac4c8710b79cbeb38b8e6de1d6e14b678e4d078b8a39735694a21add2695720f7bdcd96f7b5f41438b66bd6c4
+DIST firefox-91.4.0esr-hr.xpi 528149 BLAKE2B 307d94c1a9efc507f931e69c34ca89d13b0327176a8b022f497ec33d8e1698daee5f1cd3d61eb21892db2647654d155cef12b8fcd14b61394d3e80129217fdea SHA512 d25661ee98fe4dd552a98d5cf9d2a315551a6ef80e4a36418486967e0a85e7f09c26e3d01d4d692e57c12f10336898d854f57ed6d8b4576a7cd43da641b1817a
+DIST firefox-91.4.0esr-hsb.xpi 558158 BLAKE2B 429e76be5ec37826ef7a41b32fd966e4bd8bc62719732a9b2e0f52665dc3ccd91abe83857c687384610f28c5c887952a9c9662d7394071a49482600b21e01bf0 SHA512 d79e612ab8b21ead195298493b6e97cc38a648b66da8653032483c7cb4b481efb08bcd4aee6197a69c5d8692fcb1c85dff88a3e28b327e85855598ddb7d5207a
+DIST firefox-91.4.0esr-hu.xpi 561985 BLAKE2B d30551d2c287d19ffafcb034eeb3a1c645784307f545cd489a1bed92f445edfbd04794918e9a06c608c25b917f22f7c69be76b8b05f053ab83157895b76c5c3a SHA512 05fbbc80885d2fe40d4e2dc8b8b95ad3495a979c9b69a223cf38b67a3cb55dfae636bd63e051cbcea777085173797a075b8c37ca626984b7bf5165267e9c8485
+DIST firefox-91.4.0esr-hy-AM.xpi 576131 BLAKE2B adaa4291a56a0b7fb202e890d0f8a05b7dcf56d9b6ee38015895c145050d5d4022f5150770eca71403229423945f6692dea4c4ab43e9301403d6a5dcb54ef93f SHA512 1f233daad38800c7adce495053bc76ed5a101893b1d0187b73062bd45e96b3cebe83eb435c44da7b374ea0a76e00bfa78e3d816b050492497c1e254f25ab7708
+DIST firefox-91.4.0esr-ia.xpi 528328 BLAKE2B 71c39e655836fcb82004fe6a7d6308ab337d41b89312c57bc8c8081a05accf3a75cbf2dd443da4b3e99f35fe47e091219a27c94c8a971e3a5ce1fa9ad3ea6a50 SHA512 e345f378dd823b2e11a6efc4e9d9301d8eb5368e32d1a3b8e27ed9379c2c311214e67099f3ea6ef19c86eb40cf80f46eee0333e5e1d787f2c1c529a79797f323
+DIST firefox-91.4.0esr-id.xpi 517718 BLAKE2B 6ae152e686f9b55c067d9e3758f71e7690b8421352bcc562a375daa47ed1a7a811ab1f62f61c6a9ba9351952bb90bb208893787f4eae63943202d36545184f1e SHA512 a2974e9ecd45c4615164eaf55cebc7f01737f5dfdaf3547add722f33d215b013f4fe18546259dfb2943e08707ac196c74a5c5ecb6d2e931142b2874220b97e72
+DIST firefox-91.4.0esr-is.xpi 467919 BLAKE2B 3abc9ab10dd2eaee9bd335b715300bca43a03c63a7a2a292d45d2ac9f43b216848d498a02493e77ff5be9855f77290d23ae8c635aef29566702c55bde158a465 SHA512 293295d4dc560beb034fe565ecb828f80a1bac7486e297b315c0aa452ecf5ba759017e61f9a3edcebd8bdf2a6a02b5c7c8a3ea4db119d19cce76ca8df5eed197
+DIST firefox-91.4.0esr-it.xpi 455746 BLAKE2B dbaaed50f0d19596bd2eb7fe1584fa14296041e04eb987a845d21883ac14df80c33fe5fce6a5b66d8a062d5ce147242a31860d1d250038c0a6f56b738477f774 SHA512 6b517797d0df3d163fec14137184ae112c948c3146c271806546d9288e424797cbc8d664346d02e3eb702c1c920ee67d084015815da45457ff317bd4d4c060b9
+DIST firefox-91.4.0esr-ja.xpi 584266 BLAKE2B 8fd1614855bca5054cdab88daf77681fd9b8ec8487e62dafa6cf415322bb5992dcb57b4337c2afa7d9fcb863e4c26d608ec44af887f4faeb99c9322dd15cf8ed SHA512 d82eeb7df6274d12e53b48a6a5c5687dfaf963b9a41173eac1d7dbd1cb0d620f33f3551682f4e07343dc97ac9bb3d5993ee5c26978798522a8972b655426f908
+DIST firefox-91.4.0esr-ka.xpi 582191 BLAKE2B 50fbd0919e98d1fbec2f88506a412246590308c76ac541c9728236007e2c4a4e9d7e2c85eccb2c52fa376bd1453557f6a17ce688ed93e72994fb44cf21e0e1f8 SHA512 e867e77a3817c23104dde4f989cd0590d78cdf278d0b8ceffd5189e6b7bf37e86394fa246b444b86f1a8e79a627f02c316aa1a891c6caf33d791021004a3c890
+DIST firefox-91.4.0esr-kab.xpi 541441 BLAKE2B 4960041931a5e4ed22aae97f6a6ed72d2b181042a67ba85c9c96a44740ce2ed1644a14759c4704f6faa36e6395e600d1977447e98b38d6b6da415c974dc62260 SHA512 b114aa5f922a831e3fea8f2ad25ae54dbfb0840fb3979a55d72ce2b3ca59644e14075ef0da57c6b465603d51edf4ae81cdfd926f9ac0e428b09523d9e47a09ed
+DIST firefox-91.4.0esr-kk.xpi 602422 BLAKE2B b635982be599b6adbac1593e844f65e49987ea649abc6a41e0d5c112f1e2973c703025c834efc1f3161415e93e9e2dbcd3b76c03a845b380fc4641c14f004ac0 SHA512 81d163e25d069de9fd14440219f96ac5dde744458bea87bb906b2bdad21dcdf749b1639c6e3bae54e9cf50ff13f4425d07cd861c2890bb5c1b4cf902ec3c3aed
+DIST firefox-91.4.0esr-km.xpi 531026 BLAKE2B 694d6ffbf2e5155dbd5e6aad9cfc161309a9b4056b2e41bc4506700a69e1f5bc4ab458892bd6987ec9e67ab454c43fe9bbe4e3d2eb38dfc8681e2f4e29695f5d SHA512 d7e5e2b75885c03631154de1dba4bce1e605805751a2d34a2beaa50232e4af51a7c7069454be077ce65555903fabc5009195bb37978bb0fbc8d7ac976e5b52d1
+DIST firefox-91.4.0esr-kn.xpi 496518 BLAKE2B c0e0d5d8ef46e3cc3e013ee3eed5b5ccf71ad9b9331fe1c56ad451b9e5c70f04561ec29159f5d82e6007ac97d407535ff923be297500fcd5990e1d0d917d2360 SHA512 6185590550c9d78444c96f0f66fe6a7ef2ef46cc0220e485ddc8a9fedcaff2d779e2096dcced729c5d19732b7bb7408ea2550d87c66f5f94afddcedacb4eaaad
+DIST firefox-91.4.0esr-ko.xpi 574828 BLAKE2B 22ab4c2598fab7105f4fab62f7d37390a2c3ff5ff1334309ec7cc60406d1c4bbeab617c5511a0fbd0ea74ac7dceffab416aec2aeb6b2b307fd0c2a7b115a5952 SHA512 40ccea4f669d3d559837b0196fc1688d75e02aa39162e02913cb0d9c19a1d57d4705ba789d53c38f4cd2afcc888eb153e2ef79a0c618e04460b90f3ea95f329a
+DIST firefox-91.4.0esr-lij.xpi 468276 BLAKE2B b53d636db515a94135faa29e5951ef9f9628603bc6fb6d8e288c7e713294babcef48aabc70d53a1a2e5c5141551e2d5f3e941579f0cf40e553c3c8e8a98e8306 SHA512 c1e27148d9e18eaf972ab2e12ef6474afdce88f0eda7e81d20326bcc5f815b78fa60cf79c9bbb5483902141d8b46c048c94e06230ce5d13526f1aa56985f6885
+DIST firefox-91.4.0esr-lt.xpi 556483 BLAKE2B 76b7dec6dbbb222e8763b18563e33a74666aa1f566b31671eb44cc3908ec8cbccf73a496840be41ddbc7619c02bb8a2663af72417e4cef2f3cd48690606acfc5 SHA512 99dc34d152d48d544059f5e2c5e070dba68f6278de804a82b82919058a3308858fa00556f306fa67ec9e2dbf73b8bad7ad6eb29c415b34cca191271d7d3b4bd1
+DIST firefox-91.4.0esr-lv.xpi 460155 BLAKE2B 1f0de8813c7c05d4c8208adc0377637a1df9bdf0f5639c2bf2d5b440bc5c0772e60499acb1630e65f8912a253d7cd449b9afdad0b45a77d6b15c82ee3cb51bd0 SHA512 8f2506be64284e762b90f5c4771730f627110aac5377281ea17647d1bcf61e2911d0ec3d7664a7f6d3d7799e0a18f72422117d9cee36d8b18188da729bcffbcb
+DIST firefox-91.4.0esr-mk.xpi 463732 BLAKE2B 215c755574ce9204e1facb159b99b88730fa920b2029cdbe78a7e6815df30e4187e8b726f6893dca78a6bd71814524f742fc939f84198b81c6dd8590d3ab9ff5 SHA512 8fdc6e67a9ddf65281ca2e90942a3eff163eaddb694abf01672f1f2e5e7845d49543079e396ccc8a2403a2189143dda32f9053873c5e1927c3b09b7b7fc0cef9
+DIST firefox-91.4.0esr-mr.xpi 529969 BLAKE2B f9bd79323f907b67bb845f91138837d4ae30ff2f74366258a95f4104ea07c3840daec921a516fb929a59fda61df69a5f3ac0a18bb4bc73b26f9296f81286cd3a SHA512 0f489e4036ab4ccf7e07262f9253882505c0bba20f1e07f57e0fbedfc6e98c430e847e1d95285999fbde16be0d0757127447ed20c83fbecb0500df1f1b1c529b
+DIST firefox-91.4.0esr-ms.xpi 445085 BLAKE2B d8771fe6917e27c3052ea72b416dba33126bb7fb7bc6c29040df431385f04f2aa44ed80ec63f507ade28e6f64d6d02a63ced4349a6f2b7a899bab709a994fbb0 SHA512 8b0b4c4050cb7343b1bf13495c712352f244dd746f126fc4ffa620ce29cbf4bddfd3f02d822626e01c7a200f025073ccc918c7a759133bc772c2158edfe52bf3
+DIST firefox-91.4.0esr-my.xpi 514591 BLAKE2B 35db61858c48264ebadf7ee856861ef29c7da74f98816c72ca230eecd7051e960fb3206571b31fb1c4a13c2e02e1f4ee7922b0194f78e2751f99c57e1f08003f SHA512 5906da191e64af4273b077d49eb518d00ed96d13e54839e9b5f2a283f548b825d1c1331076644ca7791dc4cf3beec0e43b59331c741ef0a760281430a10d93a8
+DIST firefox-91.4.0esr-nb-NO.xpi 525627 BLAKE2B e96be9c59aaca41b37df77fc20be03fc011a20e121a35166dce6e2e69fd9f9245d373656e5122d876baab34e28a1360e9f7e1ef00c4b97ad409421bcc2fa595b SHA512 900267d676c41c0f83ba866139851a193f0267fbd531d0524f0e21b356763dc898f5777081870f6f3e4c69fc64653a93631c085bf4b6a420895b23e0032b0630
+DIST firefox-91.4.0esr-ne-NP.xpi 474185 BLAKE2B c3e041da59a92cf37e5b3a69debdce9392d2a95cfd513a3ded00c583ba424292ce54b8a7b7f9cb34b20d731803d0b5766e943132f868db1ef9fcb81a9e271a83 SHA512 3412c5be0a63dcc86831a9c85cd744528fc4d009c01295984e9b1fb9f8498abc17bab6dcd2a6dd5770d390bb6fcb9b934c2c367d71270f272fac222924bc01fc
+DIST firefox-91.4.0esr-nl.xpi 533414 BLAKE2B fe2537d5846d6d62fbab558cf4e5083c187237a364a6b80da8d17edebd1e973599d8cd6895d55991c20196cadfc45c06bfeae616a8542355b82bcadaef2ad4cd SHA512 6a156e7ee152273bfdd49d5af28d26b3733bbbd7c8b4d448d0413cd1dce0d086dbff1246c7464ca7925a502a71bcdb85b7346ff25888f3bd891fa76a59c94d30
+DIST firefox-91.4.0esr-nn-NO.xpi 527058 BLAKE2B 64e769dda2316320d75bc24b28827feb92cfe788dd349ff69c0f708f7f5578c565e85789a39fce97aa37a7e3f7647fa702209446cfa4bc3b391b606c2584bb57 SHA512 bf95f24d1d226fed9e75fc027166a6cfda3e691748fd06b132953d56c31e42ad8ed261264d5e225b7de32c138876873e40a8e67b564f507a50f80851d44f2784
+DIST firefox-91.4.0esr-oc.xpi 548919 BLAKE2B 0ace64b36a718a54d6b33d1d93107ee9485324c7b1b4137dc9fe84dcf70b85bf0f4ae75aedb67686972b493049bad11e7362bbd462d04f2a18ec78c942f0eb00 SHA512 27a72e76cb3b51589dc460b6995ee57fcfcf4f8e579a95edba87e0ab18ae857d289061933127968bde3aa29df3ed4f2772bc44105068019c0c74e453e7473e56
+DIST firefox-91.4.0esr-pa-IN.xpi 589463 BLAKE2B 7379cba877a4d5837fc597b9f18ef300b1093a66349dcc4c8d2d25b85074c8d45e1647ae22db909e3825f5dc3da0b606d6cb5d6723014943f6a292e61b3c2078 SHA512 da19812759622e3e76d02ea54c7431aea15293af2029817ef3005aa58421c7da1a144fe93905eb078653ccfce0436cc107039ccbed15d562ef5ce091d98f6d6a
+DIST firefox-91.4.0esr-pl.xpi 552660 BLAKE2B ce354c26bb6f8564f9fd776f1befa924c9e139d0d4b09684f1df0866717829551c260da38f3f819e39f2ad98dbd1e047b9458ae1f7f10f1f2df36df6942920e2 SHA512 8bc536bb7f45f6571cc625cae8178db182382846f49bb14d3c840f21c3fe778c396b1ad5ffa05bcaa53aca017cd8b9e3a1fc921024a88f67ddd497f76fc19bbf
+DIST firefox-91.4.0esr-pt-BR.xpi 538494 BLAKE2B 064f775abe3f0e7f692cf8ee7ec8de788f0099fd8a41d0f0c64d13fe309dd7596005a2b7af2f869a3e994879be2d94cd9fcd99ba25b3bf388a8ad08bd802c088 SHA512 c04526f15cad1e32371d3e1d95fe8975614cf3295f3a80299a7a0b921c2746ce4c4df0392d7e3e24926516aa5eaec0f48460601d3154ad2abe230b7b20502a84
+DIST firefox-91.4.0esr-pt-PT.xpi 542430 BLAKE2B 51460fd6d910c847d1e7ff7d918990dd41d0e875c1d76d36a6c7e56192058c76594f561eabc394e08ef635b9be4cc6344c758733de83baeb71410b663122c55c SHA512 cb5741451651dcd8720f79297c632b410ff22b9a4fcecc6c12359fd03e06ed414b87a07ddaafad5b49da4582068ad268b0bade8cd51ddd2bcdca3fca007cf3f9
+DIST firefox-91.4.0esr-rm.xpi 533244 BLAKE2B 0844973f8a88e55f1e60c41ebfd6e73051f0f1b7ecffa64343efcbe52cf1f9783379975b6a258b80e18352c384ccea76cdeecb9dd153bcbeedd3932a257d266e SHA512 1e6fd16b476a6440af3754411071ed0c5d3b483ea1b3dd1bab921175042f4ab7d894a308839e3d1cf67efa78884249f1589bab85892f46520196badc8c5dd928
+DIST firefox-91.4.0esr-ro.xpi 526985 BLAKE2B e8ce39ccb62069614e4a811061865cbac81a712ce5a8bcf1f56b9962367e69dbafa4f591ff695ae086ad95bf018c45158763835487b0ab388cb3424df3e5224f SHA512 a8f003cb9d935bf5528291e9b9175183036e069cd8f71b0d8aa13a2d387b9446c743b958f212141c956e4b52074c3d49b7839e6b1c7708c9d9d66bfa68504763
+DIST firefox-91.4.0esr-ru.xpi 622479 BLAKE2B 5c546e993726cfe05930d6663e55a9254e94808d91e8964bd6253b5a66b3f7fe0aa17fb95c6fe2211b40f1eb3205a142ab31ce0fca63a351402d1bd9e5be6e05 SHA512 c8dbcec0fdd628d5ee2aa7bd35df9d000ae4639d767125f9e60bb706718acc3f3c827c2da8bda592847ec180208c4f4a01499d92414b10e9a101cdfe5540d137
+DIST firefox-91.4.0esr-sco.xpi 503271 BLAKE2B 8085da172a519cf273a33e70dcd1f70f9423308186a09b2fc7775822e33a65ea3f0c751a8b04c812761259cff4fb604c5055dd34561581075c2bc71e7578c4db SHA512 bee9ec974bb56b86f243cafa3810462e1ded2ed1b356a80179323404a6ebc8076e71088b35eb1948f825d0dbd70fcb4617aad068eadd26537f5e2f2b5bd68976
+DIST firefox-91.4.0esr-si.xpi 485754 BLAKE2B 7898bc88ef5f480800efe25273b39345d5ecbf0f52fdd37db4f8c01b5f7aadf39def6ad1fcd8422fa2cc13542c73ac1ca4294ad01934895b857e5393df57b9b2 SHA512 3c0696368d4fe4963ff6ee4f4fa7ca15e4464eee567801e0ca10781095ca4d8a4128b0e393a1de6748492a001a941b3c9a072f07d3f4d020699f13dccbd36125
+DIST firefox-91.4.0esr-sk.xpi 562099 BLAKE2B c0c1e770acafcbb0c70a82235818b31d53f0b21447230fd88de12430585067ad418c59790f34ad45276b63e1f3cc6f07c3994d718bded1511f682445e83ec3b7 SHA512 dc3a49b3845ac78e6317a1651b072ea24c0c4e7aa68e2b61f0365d188e42cd6785cbdb1ae201b179d3a01fc3ef97f524b5fde1fd6649a3a86337a4db28a33c0d
+DIST firefox-91.4.0esr-sl.xpi 529903 BLAKE2B 69b9dbd60e92aebd07b31d5b52e7b7bd3973a05281dcc5801010ab0ca2221a661232d054ee4b544b1f0458b3b73cfa14e28871162fa639e83908a046b5317ba7 SHA512 f1d61aa23c06a165c93c15455f11e27a9fc77629fdf6615297f258999c4e7a1fd6ff6ea89efc6694252acb3215e6c752d2fb1d2b1ccc1e1a4dea9f1c61f064c3
+DIST firefox-91.4.0esr-son.xpi 424145 BLAKE2B 13973029336e622ae43522501fa715096db3bef7a2ab5b13e4ecc9bf45dda6083e5aef7b9daf078192f1ac2f846a29db58cfa7045915db01cd6f42721ce16614 SHA512 d397eab0f3e5ea3d9a7637f64bc1464f67adf76700a775524859d7e0833d1d4f7f9e1168e41a9e8283f8529c071128c5555ec4d270041dae1ce7113909d5b7d5
+DIST firefox-91.4.0esr-sq.xpi 544586 BLAKE2B 4ac371a525dd2df44cf6997a0e1c866980d4d861a8e80ea1d496e7f81016c814e654e4d6b4ac797c2d3e702bc0adff7a129c41ed3907133d0d2d952b8a61fef3 SHA512 23a606954e4d205aed77efef69eb509e5fe95326398932e0a8af36bde2fc3cf67b08b9a967be1f1b2d9901c7969aa0d1872f6f631df5642ff56c689fba743db7
+DIST firefox-91.4.0esr-sr.xpi 583086 BLAKE2B 46994159fc1ff22b78a6162c54e9dd93506fe604750a70c4a0fd395566403a46b95748c922696458a263307ed50472c4c9caeedb8959b65c002a18526795a0d3 SHA512 e8a9173c91738364e0ef4e9e8a42a5d9b75995ad10be60261407948404df0f31824c5dd93fb92e34b3f0a68ca7e41b51883b2e5eb45894d164ae8ea55d80dc20
+DIST firefox-91.4.0esr-sv-SE.xpi 536058 BLAKE2B 11ca31308f043605fa59a2856c8210715990c4e014925fc4fc07dc90c1400d622fcbdbc283bf622206e8ee6a4dd706e1aaa20e12d252f61bbc30dc6708e710ce SHA512 0be654894191d685a4ba9b4659d85b6ecdc1891687c10bfb89412f15ab8da4df07a1a9f64283efca4895b9c11413b9955283aa2bf3e088171e0e8f6ab5d5efb4
+DIST firefox-91.4.0esr-szl.xpi 508146 BLAKE2B 347121bdaaafcf3f91726c7ec6daa5b45d56470c39ecce3d27f00f5d7c4fe52478f1c7b8390480c58896addab012aa74ff0b41bbac57e82f3c18567be9444a6a SHA512 0564a38bc2c2eb65011d9e0a7d2ae923808739d5a29f8be54c2476ae11a607cec9fe9b2b3a28d35da9373dccfa803a19dd7084f0b85ba051e8bd7542ac52e7ce
+DIST firefox-91.4.0esr-ta.xpi 510667 BLAKE2B b4fc8de02fd9b4888158a4c10be33259bf60457f5ff210e595a1b93f723cce0d2abb260ea00d6138f0876cbb05cfa337b4eeb1aef6f008859fe968ed1c7cf0e3 SHA512 7492d64b776f6c187d186eb7479a2362da725be88c7ea6bf1d8b4914acd4f8130bbe9bc7b192770982645d2484ee0fcdb9b05356a5cdb416af208df583f6e590
+DIST firefox-91.4.0esr-te.xpi 547906 BLAKE2B 2002d8dceeb2b0a61577cb334402b68cff1c2f613542d87985d2739740fdb577a38501d37df6708bb158685f2eccb7fba75467b25394ae9fee6acd1afc64c1f9 SHA512 8b85b5d1beecac77167ad9abced138a2f0e8cc3b68b2188fb80dfe1852fc299705d32e150c1f8e250929c7af10d787fb2477d1e731683d954ac48a6e9995d075
+DIST firefox-91.4.0esr-th.xpi 597694 BLAKE2B e34e0be0d0b93015c4ee577f70f796ff9fdf02e3bab0f25f3e51489ef05b831d06ab3bb7f52aa29b72dd1a0824d0b4aa69d6cc69635810caa8f73b89c8897947 SHA512 e3665e291f71f2b4d11c974c255eeb9e7fb079b705e1f70451e45ce3aa206ecd0ec5b28207b57cf56a84cd5175bb8a8b0735fc23825fb1dbf93635574ea40f4c
+DIST firefox-91.4.0esr-tl.xpi 513310 BLAKE2B b549526e3d1db282210c81c68960dcfb95d67eb554a0931869b1390ff6ad81796b2e0768bde840827b2b56cd74b064096330c3aaaeb9245026fe503a2dc3c8d1 SHA512 336cbe0837696ac1f2153edc21481dc658afc35b0c61ea0c87b996036647fa220c447f3e7a8f0413e219336845cc9eb049dedf16840066533bb02f8dc41e1f54
+DIST firefox-91.4.0esr-tr.xpi 548362 BLAKE2B c878ba25cc461624cd86a6a8789cda55dd018e66113a50dc280fd62d2f9c5ca79eb3c7c471ebe511fa451cc72a28f38d3f6538895ad8b5df81db45e68d74a408 SHA512 70fd852fa95f8adadb8a1c7feb3d67700598b720cc49a01e133c16213a92f9afd8238816150f79b2f15f24168f7839dc7e00ea9afb7b2453e446e0f375995260
+DIST firefox-91.4.0esr-trs.xpi 488758 BLAKE2B 220d3383d3064b092c1eaaa19de4981f7edec0edbe1dacf06d866af846fc338120c64711f160a7a0ee04624528686b554c701e013042ebc907b439443754d8b6 SHA512 337d236b29d1cfc103052cd1c651e6140217c0afb9092be37feb81a964d8cebd6e26c8366457fe65ec4eb79379400f86c3635111f6ad17d11a86c304d395bca6
+DIST firefox-91.4.0esr-uk.xpi 615983 BLAKE2B f78f5dd87d49792374225e1ede6311f4c8ffe451b0427bd77f554487c255c94149e207183d79ad79c6eef5d96a3e4f8abfb6743d031bc7afb8ed93db5d9572ed SHA512 ad06e287b5c96bb990621b410d9c45db92bc3bfd9c5c204acfbea22c4f4aa09ee9e0b4366ce1c5bf174fc38c7ee664c5cfbeac3fe38ac874007499b3553931cc
+DIST firefox-91.4.0esr-ur.xpi 554113 BLAKE2B 5b7447e25f05d3211920051bc9e6fb807bf569dcb99f5a8ca383058a2fbcbe50aae5203f94f1242ae8e389a1ecf9a1602730a2445dfc5ca01afe96a551f7594e SHA512 00bb497a1729a74a67a83b0a7512822c4415bdc71bf940f9731785cc87869d98514b9c8fb12e8167ed0eef80aae4cea0b30f0410fed43924108ba49f8d0bf841
+DIST firefox-91.4.0esr-uz.xpi 465013 BLAKE2B 989f3dda30973403ca5c1eb8a129278105ef645889d4c6f32144c2970e54b13472860a815762f7b2c2bcc1646f227f0d63be5c284aa18a72b10a1d9366627234 SHA512 d38a60af12c379c3b4d0d24b478b3a964dc31afad481d3303a7cbf39555c29ef7fa33465203b632f88c586a4afac97da6d74a3ad1fe431d919133206c11ba439
+DIST firefox-91.4.0esr-vi.xpi 569116 BLAKE2B 983c10b007eaa88f324a16cafb90924e1a1d14c118616d1c526d4dbbf3ed6db339978d2de49f53afb53555f5bfaa63f4a02fc4469035a102332bc305c16ee533 SHA512 e33542cba623880b69ff11551380e893f6e6485c13855a9c4121bc88c1037c22510ab12efdc47737e3b389f6bbe278957c8fdc9ff8ad2f3c7e831db9de328ce8
+DIST firefox-91.4.0esr-xh.xpi 426318 BLAKE2B caa90a68a11059bab6d54800936f247c692b7eb8aae30178934d2486e635bb86b540601610062f32c6496399cb6f446741cacc559b7abd280eaa5392a894322f SHA512 08ef35e0bd42451280acf8b6d4c2c27b1c0b32fc070dd289d6405122f423e55b6eceb0b1235f865b5f95a0f257afb037f6cee48407014f7b435f712d7cd30867
+DIST firefox-91.4.0esr-zh-CN.xpi 571363 BLAKE2B 353648ce0c0b12a1e922e4169e4ed31e0dab3337a2e5fa53879e38aa454933cf4e76191da186053d888f755a1bca176e7e23d856f5b7aa9ca088e12a59791b0d SHA512 db04703780fe73b23025a984511f3e55189de663b563ed1c9dfb95de98e648842a623e5deac341fac9afd568b33f48ae574af8f5a49cbf808158551448deeaa8
+DIST firefox-91.4.0esr-zh-TW.xpi 572071 BLAKE2B df9f18fa4cbede2324aaff48c503b58cbe97f07394a2ddc00c7bb2a8e9e8f2ef0608374d726274bcd3890a97bcabbcbd25b56fe14db67c8cbe15948b612d5ba3 SHA512 e279a726a6014b6c473c275c8c3a786714757ca63d6311637f42787f2c5bc2778b36bf46302b932ee1a9cf478ac6a8e29382a389d84c29621d62642365b07360
+DIST firefox-91.4.0esr.source.tar.xz 379759164 BLAKE2B 073ad017a7a5569713bfea850d5572c6cc0e7c46dc3c89878a6405b024ee9a46453c8588b78d547f838b9d55a93a509a293f578a3ffac35b952e2bce84e931a7 SHA512 781bf62a0e1215cad7d90de7c822978997bfeaf71bde4e7124a732921d130762c6654417c708a299726039d1603ff5e0796106118ad4b2ddef4e9dac84887765
+DIST firefox-91esr-patches-03.tar.xz 17204 BLAKE2B 6ef1aa70708f9e5a5926f712d449bb40c86d449389a5d4c1730ada065d4af252b08cd17eafaee7cc01ea0c50c53b272c38a047760d3cf94ba34375ff77af534c SHA512 2c02a6ba36934f796a7b2d3ded0b68689ce4b21f21396004e829102bcc56e302c89357d18c4f353c62f45865dccde27230cdb016d99c42b3ae12b4e5a6a02e6d
+DIST firefox-95-patches-02.tar.xz 17220 BLAKE2B cf2c3e72c37800506252f31057cb719af7e5b8f8bc8257e1ff0a93164367dd90e7fc51f7290ca4870bad7b0d13c0dd3554fd44000f85989e275233842233138f SHA512 43f8092579ab30c2b2ae43269264713742e54ff6c4207583bcd97efb57936ddb407174e75d524e1a872dde834b1e0d3b985b31b66d858db277b135926d1442b1
+DIST firefox-95.0-ach.xpi 450515 BLAKE2B 3fe20f62740464379328642cbacebc9166be39553e0f7158fd5d3c805874701917daa10f215e296b98ee8ad111e3ee66e069a65321bfe2da364ea57fd2c4d37e SHA512 551fb9f5c03d9a1e05e02b19fd36cbdf91e02a196f7bec80672efbcf30a109adc8331dbc49cb4e2a0d085c896f713af6c6469d8350f477f47a27b2aff922c7bf
+DIST firefox-95.0-af.xpi 421588 BLAKE2B 8e61208a72754a6f76458284baa5147c7a06df3ff7d4f876d9b888c7525f584907311e2997db5d11fe0c2d68309c065d27cea2e5e22d2f04566a89c36dd0fc4e SHA512 346ae3a1436e6f277a86a0238b166d002cfb9be361d6f59d06c595c4ff48db41c90d6adef4486682d7850522b48abd00e0380461af12727b2d5bc2fb8eb4f637
+DIST firefox-95.0-an.xpi 497839 BLAKE2B 6aeeefc0fe2bb28d851e1694ec0449a4408f1989268f2436f20dfd00386a7f5e21b07a941a27165b3b8c09c1cae8c7875a16a48dd0a44ae953d85569e06ab981 SHA512 acae1e417303fcb28c70fff9e8c3d86efcb41b3417d3624a49020bf1310ae5a9900054eda57e4413c8424c193a2b8ab86ebe0d45046c19933a39421a6d37c881
+DIST firefox-95.0-ar.xpi 556957 BLAKE2B 9388f44e38fab99427b5d81f0d4eb4918e4b81198d4b60e916b2004c1086362bcd0eae964d436c8fa1d787ecf3609f0499b0d1d754e453321999158cdcd22e2b SHA512 1b15787e4690dff02aa49494e018501c95ba3f5b0c68362a9735682c84ccb8a0b0fc94d919b0b0a15fd8333ead5b13028303c879e972d7d2d3af21c97b64e369
+DIST firefox-95.0-ast.xpi 495632 BLAKE2B d3684061045a422989e76853dc0d7de1d3deeb20b789aacc36f459620de7c9c472fb58c3cc06421c236e603345792efac61f9292ead66dc8999e1c4275ec1e13 SHA512 76bfcfc87f92e04aba40af0955425ab261227642e6d3e8cd97f2ab4cc04ec751ba5425ba3facb0d9ce4eda74041058d055bca068bc258f7167a37cc362ad7bd0
+DIST firefox-95.0-az.xpi 486489 BLAKE2B c41b7060af5c641499768d1553468cfbb068e3eab2e3549e29a190a4ea27025c91bda839cb1aa717aedc46a725f4e1d0df61dc1e04e73a43d339ef5c6301b03a SHA512 727af196fb12673d3a9f59fc34e82fa99a2ed49b92da1023dae2048f0dbe50498261d17243288ff84f3f64470109920d106b1a959476ca5413b5a1efdb768dc9
+DIST firefox-95.0-be.xpi 617804 BLAKE2B e14e9064c73c1247c77f74737ac8409342000e155768113bc9bcec2ce0362333b3131355bc66f81a97ab3d1df497b76d117191f2823f70bf46414d7dece53495 SHA512 ebb28844d8f70aeec72ab4262fc8bb53497f4293b97ae2e58c9a950644f4e145316064214e65af85e5f7f17de42bb1fb1de175677437ee7006e6b468a506272c
+DIST firefox-95.0-bg.xpi 564532 BLAKE2B 70a722b8772f10056efa951598d33e04e36f213b1c049d500cb8afc76883a3495805e1cb2ff6ae4bb5140032029bb018d85903085cd55551d947185c44020eb4 SHA512 186ec20af2bf495200d48e8f367a7cfd01a9da3ecc7019675b9f66bf071e660b9d79e98bec59ee02074168676fb303546723231c29b44e4f2bfd9892abeb8406
+DIST firefox-95.0-bn.xpi 553373 BLAKE2B e1a221ec3317ac111a4ce439df152e764886b5c9b9a1a9a71c44dcf32f243d9bd6d79356f9faab438f22cce2c7f04fa7933cc6732d82819720eb76451a0fa5e1 SHA512 e56695513a63c2884f11b555da6c4622dad2c8710927310ef2e1e78bb028fb57c1f7ff07580aad01dcc7dbdbfdd1fb876fc09b155a755b640cc94fa76f6d5e41
+DIST firefox-95.0-br.xpi 524087 BLAKE2B 2070ec3ade3c8c2765b6c130699a3e5297fb231f291b0379318bb54339bf5d18dba8e3a3627b8c50a80016e5e6b1a9eb4ddbd9f91c428d32b5c251c781643e97 SHA512 e6e2c9dacab74359eff56da967548c936f28bbfdbae3f246e45042e4ba1fc650c942b4b41ef08979a5ced64f2a99cee57c443a69d447918587423b496e537b74
+DIST firefox-95.0-bs.xpi 460948 BLAKE2B 1b9eedc34291de5876c3443d15a39bc8dd59e69bb07789c9c34b7df9cac39cbfe15a21182ec7c23c24a0068d0f6df944ad8b5378d156e24b5fdda55c90e7a6d4 SHA512 892218d00a0f3b08cb540dbc8bf248f93008c0edd190d292153a32c8a4542ad664839fdcb7f371391278eee289815f16949502ab4f1283ea3c7821663b707243
+DIST firefox-95.0-ca-valencia.xpi 526570 BLAKE2B fe44ca5bbbdff9a095507013da118c4db227c8b53441ead8097aa4ecc2c131a2b929897cad64be9172c732b7be64ba545d963758b4dde02e18e4682a2620e3a3 SHA512 87840b38a07db17f82adf31e37b9527819c27a62453304885772617548dfcb90ef0ce411ed2dc4d3189298e9bf4f8ede0ae7d85d6bdd2f74129d5001a4e21d5c
+DIST firefox-95.0-ca.xpi 529728 BLAKE2B 6dcf7a991153111792a79258cbbd8a6b916c2eab19b5eaeb358a5ecdbfb71bb8ab1e2a47e387e77b65c566eacddd5c6518df6b24c51ee128d9e1fb81c6801cc4 SHA512 9676d4af6f7484092d459b726a69e15b29563f5de26406ecbb0458b99a8fcf997607845f6349e26230c292fef0cdd739bda1bc06e674b9e382450afd603789cf
+DIST firefox-95.0-cak.xpi 550291 BLAKE2B 25d588295feb5b063696b92538ae59c477fe60d036e18d668841a1cdfa9a100b6203dc83f494f2c1f840944858ddb61e704f6f74a28a428f03afe611577e4e13 SHA512 23d01a09ce27cf835b1a08df86304139227f017ac2946be97f203a8074894445792e9c06ccf53ed95842cc9e80a86fc954b718f651609c666b979806908dfa54
+DIST firefox-95.0-cs.xpi 560520 BLAKE2B 9e4b836d02cc00fe2bca57326245a82bae2430475f7f9e9b98498fa61241c2bd75faa5f3babdd808e6f2b61d3ea36c42942f56563327003e3b7d0093192bb580 SHA512 46a7736f29465650b19fc7fdfa9ae7ba49ad6212530ff42fb21a04fcc1773bbcabd02da2ab06b87fddcfada57808244666932eb596c978add1ec8da8bec2cf1a
+DIST firefox-95.0-cy.xpi 538502 BLAKE2B 33953d710b38f333387a0382d39e657665c0a3fd79cf20fc70adbaff0460d71e3dba092f30845d1b98afd213dded01743ac10cd1d9bc4b2bab9e866de3d6ddf8 SHA512 87610b36a440aa73106ff3d198484ff644b82d3d23be56f51ef178ec88e9dd163bde390c87799020b10e803caeb3a5426e2eb51cc8ac27847e988b1ce8bc7f12
+DIST firefox-95.0-da.xpi 530402 BLAKE2B 1eb31b2569616314b1d7831ccc1a6f07f6b2c6a4102af056e41010a70f4d7914c2cde8f0da65589e6013b738ba2be38fa9ca0600e0eecaa441ddcf9e1bde019f SHA512 32814bb82715ded6204afb409a6ca0a790ee8931e6e10c4697468235dd843660e1899b17e24efe22fa6a5b3274a24df1769453ca0b40c48130e06b9d0a3375db
+DIST firefox-95.0-de.xpi 549565 BLAKE2B 30293bb4e923721df296defbb314921942597f9b4d5d4ef5fa19e388e729235730eadda3baafee31bf4cf21a4069193ed1a11277af8f3f32282b33bb40d70f2b SHA512 2e60f80e7bc3594bc14648cd8ca2d6db143bddfb58ffdd425007e278af014fff3c87eeccdd7dc3e2be12ae9e3b3176a10dffce453bb4ff7f85d91ee7d3ad93f4
+DIST firefox-95.0-dsb.xpi 562325 BLAKE2B 64529835e0eb45a75079ec18c45e9af952933cb9a98d5e0c901ea0ade4b77315584fa2cb17ac43b130f5aa6f495d55308be88655e096926368f86b968203ebcc SHA512 06bafe2c5775bd4e3ffaaaac0670ad0e26c96ab1c111bc6e5edfd839ef4cb203924aac1a295152f59a61765b2d63ac5564a35497de7ee1a105ada242d7ef42ba
+DIST firefox-95.0-el.xpi 634235 BLAKE2B ac8a59203731c49daa2340c714f896e3ac3b256ad3c46bae9954a4aa1b757dbf88afc31606fd0195b8b7093d0544b52520a5c7ac411033df0a10c8d9659ade7d SHA512 79926906f8f965424a1bc169869c835d386bbc5b09008bda013e1e0a0e9019b81fa265422d5a6f667e2a5cfaf6dc9aab6304a799bd852cd3f5fa16e5cb9c055b
+DIST firefox-95.0-en-CA.xpi 506099 BLAKE2B ea570c851e6f50b5446fea06df857eb3bcaba0ce1ef35a849089c5bd5b55f25bf503d107b68860e7ee368c4cd36e3fb12e0a44baea48f3c10b6a11507e018a02 SHA512 279bd4845fe0112c1408a1684c17788d0c10ecd933189009e0a5d7e78557415d9e6ce73136e9d2c08aeba60a3cffdd79799c869b12bf2bb60d29f6fa51981704
+DIST firefox-95.0-en-GB.xpi 507069 BLAKE2B e53f9632b22fc3357f6195960b619dd17d685d793c178b0cbb03beffca2982db758a97067f14a9d070bf1adb4716cb0e9baca570bc0f588b04948bdf981cf1de SHA512 ce05b73d2170b6323a1d3b1fbe1e2b29a898cbac8c304886e1f620a2ac3a473bfd20247e76261e674e1a36b392fd1f52ef409acf1fab3adb4ad1751552b79297
+DIST firefox-95.0-eo.xpi 531427 BLAKE2B 931e48677238a5b8a7f9b94cb9f5cc47b4b72512092b14bc196dde71172fd0049104a6233eb7bffc42bbf0bcc0cd01d502eebe7148b7c0225a9eb729aa20ba84 SHA512 8e47dbd945329c19d471cf896314066f4e6d3561eb4774027a5f0633b56b0c5f7bf3d4342086d58c61b75ce850b6b5147c5492699283a112330371b68e932533
+DIST firefox-95.0-es-AR.xpi 542817 BLAKE2B 577ba91822539f5ef062a6af801b212764b6d13d1ac537759ab8ebff50c56a083f626b7f818dd8a6499dc3d8abfd34987c5a2a80e09ed993e5c034bc5b17ae51 SHA512 20e6c6463df0738ba0c99abe8e0ba8f50207153dff69caa58addd5e705408f2d5e70173cdd7044cf098fddbd614686b980bc39f96c5ebe39396e820176a0c364
+DIST firefox-95.0-es-CL.xpi 542407 BLAKE2B 1d5f9f81599bb0c6af67e68d7ee3a09759a047aa9bdc9badda27973aa54eb6e34e2c060fa3503df9f6dab6fd86b684d8288d24bc6e9b456a323efdcd411b6001 SHA512 4c358e45f859d8c4c0f2a4852e6545cc2fd0d01bf2ca629db643202fd5958efbccc48c4b9ff28f37a5052257e45c28761028898c306b9a81e98d7a88dde85fc0
+DIST firefox-95.0-es-ES.xpi 533165 BLAKE2B f0a3361ff395c85efd8fff3fb68f9fe791c53d6542a992feba96590ee44078381e4769629765a1f626cb428fed34c7ef616a00919c224dae9d4feebb97a63f15 SHA512 68f6090a698cc290f2cbe45d5346d706902ae41ce839ce2e1e73db5b2705fb3f70ab1384b0529e2ab2bd20aa2aac425ac40284028bde4e9b535559427deb3b8b
+DIST firefox-95.0-es-MX.xpi 545980 BLAKE2B 6502c56441b0244677bcfba298a533f617954a51cefff2845e265666f9a8496e11ebc1e38cb0ef4499c729b4e9de1ae0bc3c8b73e2000557986ea720ed2acc82 SHA512 3283b0c15b22c31d3558c15c6448bc0fac3df2ed7d5085e31b86a682becee3f636b3f45665e1f55cb3ad569bd6b5c7ba47fc7010e5ca639a5c721b98689a5e1e
+DIST firefox-95.0-et.xpi 503978 BLAKE2B 58455a3a78bf9f5a85fa4deebaa624e38ddef24f4132ecec02d5c3048f7f549c06ba9684024f4d5c04e90a1dd9382f04a824e59f1c92feb57351216a0098450b SHA512 688637b0aa911a5cfd4054659449ecb24cfecd1ac7b2bb4e99d49c2c1077b473419cf4d44fcd532f6d8dad6b69fd18e8cf7ce69aa14fa90a0d60e99c76e60c8e
+DIST firefox-95.0-eu.xpi 532585 BLAKE2B e5cf65694bb88c9b043daaa43eca78cc18f4a555936259cd1049cf93c16048939c9636886b1368c26c9e1cf756105ee3a16e9c3ef8a12a4a708f87f3a8be15c4 SHA512 1198626f7686359794907dec80c1772a8b1755bc46e84d953e835c35ba41fb3f66ea4bc85b92ad07e364583e8d3b290c60afeb80128e8a9421a879f6a826bd63
+DIST firefox-95.0-fa.xpi 556251 BLAKE2B 6fda62ee7317ff5015dbe1aebc06ff0932a48f02829606529b0ca3227d82a4940f665a8b0ee5bfd7087481d90494ae0a7722da3c2013dd7dbecf90b653b6ac92 SHA512 aeb404627ce3169e3e24ab3ffc15682c3524b39f0132d1249e84abf305d6c488c709c2425c2409d3aec19c42d9ea3f48b9f74b8ca51eddbebd6ed701c39e5bba
+DIST firefox-95.0-ff.xpi 468414 BLAKE2B 32567ec18d5508228aa7f6ed47d366ed89d1bcd6d555ba09c1df813893472a07efc2b920aea7eb0cb91dff5c2957337da81089723ba7dddfac08aa5654b8f400 SHA512 b3ad7c506b9fb1a34bf1fd7d48982bbfbe6a5a0002fca3c7218ea55ca24b11aa5f75940d1f8f9490460b1266f5cd28901ef6d3be07f8c8cbbd65e3e6b3804b7e
+DIST firefox-95.0-fi.xpi 527602 BLAKE2B f98e194dbfc087e0afc11f0b8cd8083179dc046b9ea413c4bd4371b45c50da5bcc899ac247ca28fd999f94c60a98eed0accb3a0fdaf94ea319d1353c5bd56add SHA512 a6a48e1d5bae2d41ee73587e7e79b98415d61167c2c119079e5c6803c4619965445c5913139f420554ca537f2675d6eaf34669a9e1a58e61e5dc9907d8ab42b9
+DIST firefox-95.0-fr.xpi 553723 BLAKE2B 915a6cb4bcbd6eeeac431859fb2e568e92fa802e4ffa12262acb17c53d99ce63cd54c10a47eda458d10a90ca2c7c34978a67ae7998477c775ecaa5285b9f4ca9 SHA512 c3fe187f56ea1390c4dcd0f0776c7dc8f5d0463621af185401b3ef3912f78d6ae7ee1b227093b2c68cdd304bdae9bd944017f00a429ec59d3ee591d55d82d7c9
+DIST firefox-95.0-fy-NL.xpi 539299 BLAKE2B 3793ba6e07eb8bbd9dccfd6c8388019ab38798bae947e45033d5f557d1a4c49144108cccbd6dc8d7a995fff0179b05ed8e27ef34e091edfbfcf9cece618fefab SHA512 d42354fadace36cb3eb40f18f1fc44cf8ffbdde3d69dbfd215b0dec0b4eb3e809a0eda212575c649d5d052c23b7145dc8b37f09103122f928b6be77a58922105
+DIST firefox-95.0-ga-IE.xpi 456359 BLAKE2B ee362381323e1ab0d9452379bc6274807a3331cf35a5a9841e2f3fb436343fcc1c6a302190225dd7b7df9e061450cc40a0874fa4582b08029e293ee6e83eb574 SHA512 159ef08e8b271c18d237d50157c3626e6fda291f355fc015f16baa407e11ff664b7e9b52a4e26ba8e0cba68ee2a1fc2832ebf7d43506bae4457ea8064a8be3e2
+DIST firefox-95.0-gd.xpi 528510 BLAKE2B 2f03ddf60f3a0780ba921406115ccbc0d5985bfd552193d481c57ce7e7cf8c3625d2a33e89c2cd009fd3facd174fa20d9cc3d8b95b6f1fcb7f5105779529f956 SHA512 b4d447b813cff0b394a1f93a4f8c17cc2a1369872e506ae868b5131264e0c51f262da2c48eff76b6a3e591a4248efdcadbae53e6d5043bf077e1e5194c2a767b
+DIST firefox-95.0-gl.xpi 537648 BLAKE2B dad92ffd75438dbc8593d7e86057b3e179b4d5118b5f1e952a724ba5fda37a6acdd4034957ab00f16c645728d07d6bcf200fd1604e1a10ec0f57a96760261412 SHA512 65377280d2da2647585ee254b4f60a7eb06794f09060fa7eaaa0f4eb1df86409c338f6c8b000a5d9472b355701efa4df2edf3358b5ef146f928098f5a8f8e3ab
+DIST firefox-95.0-gn.xpi 553613 BLAKE2B 2096a50dfd019f2ece3218d7948bfdd63939f4da5d3634f161d21661657f4b1020ba27844a36d841577d8db2d8a49222ad05dfb0b5564597ce585ac23ecf633b SHA512 bdd7e22210fda6ba1aaac0bc2eb93f137bbc99fcb3c6ac18e822f25956b0eff1acdc407181d7e0e077c59cdedb912e8280d6ceb546553a5bebfff291a24d7fa2
+DIST firefox-95.0-gu-IN.xpi 525936 BLAKE2B 8ba13c0d070ea669601bff1389d5a0aa8cc6af6fdf0a7221e3171fe5615abba5bb1a26baf5f12aef1199548bd823ea40edc79e045cd45db0e1effbd310be49f2 SHA512 317d7f8028be22805708623047e2fe3d7e95ff82c6e02dbe9f3b5a57d12fb5bb91af0aa9af9f82ba64bca737a7fdcfc6022438b15fabcd1d5b1d860661ac0946
+DIST firefox-95.0-he.xpi 553664 BLAKE2B c66bf40ae133d60485b0965d4a20d84d7bc5c60ccc12809e374e4d641455c7b360fe1d4eba28f2107e590c76e22276540aa18b458b6ece18332182f6d9d37c06 SHA512 918900356296c9a62d6e9b9bdd38dce19b88571f23917879af49a8eea60bf5b836aee3b81a3e629d7b4471a75e2e7c97db67cddf9ceab90d7bfa6465fd2a6391
+DIST firefox-95.0-hi-IN.xpi 557072 BLAKE2B 467778dd8b16dbd9afd11347892c7c62f63991381cb3639e5857c7a4433c7572e4b815577aa89014a40514263e1cb82e3ff8f190c956b3f607da99e234eff20e SHA512 39b605fe5c6e91d1c5e0768acccc05fb22fbe340fd235822fbe25be04dbdc0d6bb0e3915ef7983d3b079baed88a527de3ea307f9fc1de5a0b7ed6d7f68110b5f
+DIST firefox-95.0-hr.xpi 527718 BLAKE2B ac46ac1454118daecba9bcca0ea7ca939b5fb01eccafbdf99ac4800a266ac501c15a31975ab914ce37faae66cbf1ab591608f215673042c14fc786cf2c084f6a SHA512 77389343ae828186e7dc4ec4e34738ee2e09920ad5e3090fdb94f57639d3b35d21e587102fbb74c5dc05805c7b69785292d298cf102c3e7b581c229387777cf6
+DIST firefox-95.0-hsb.xpi 558439 BLAKE2B 7e7606d884e77ddbe006d3f5909a797f3649845196323d5ddc3832c97b388c7eb5995e2a8aa42b94ea6bbde96d9dbd3c940db3cd3ccccc9899bd2f93385f62a4 SHA512 dc99c334cd3808c96be797c732507884592881defeee75012254a934616c564f1a77f306fd3bbc5852c71a5f2e6244212353e7c3d62cd0bdbbd7ee4102e87fd7
+DIST firefox-95.0-hu.xpi 561838 BLAKE2B 27d99323b98cd46f1a2de46edd451f19acdc780564f99d63c0a4b2f345cec9959123d5a68fd06f3034abfe511116c2c302cc8daa0493ac1eee2a1639a072605c SHA512 149c14be3a22be6b18fb352336f11af2213ea5f3ca84c8dff2a9bf902c03364ca013a510de9841ca16486e2de2b007209ab34a9163ff1a5ee203d694015aa752
+DIST firefox-95.0-hy-AM.xpi 576865 BLAKE2B 02afc0c5b116e384eb73eaba9b51d53edc38584d32063d97c7ee7745c15801d4c2fc0227468d667a9bd114ad46c9d215ba57010732e81022eae1a9b0d8ea32a2 SHA512 8518abc97346f90b75978cb3a48522f3b072a79f5d589ff5566b9836f3918bf834390f7ae30a881533167dc139f26ac3723e128968b93bbae4f34ef93e2684fa
+DIST firefox-95.0-ia.xpi 528438 BLAKE2B 39b4ce0a650a4f4587bfdbde2fa7095c2bc81db72d4a785b8597cd5dbdc9826575fe613c9d5c1372f8ca6a1ba732364fb10f6998741db4bceed44ba39efb04be SHA512 492b7617951d24acd00b1ab28453f35f2cf88722dd97105fc09d1287566cd27a1822eb4d3bfb953e5d1285cdc7bd7cde9c74e58deb0206db3e9c107308de66a2
+DIST firefox-95.0-id.xpi 518116 BLAKE2B 80f9f3fb82c47a3cd23660dc6745da3ccdce80fe996c6c530bdbd9190379692ca571949c5ddcf886e89aa232c25a49d1b6c44d167dc3f8b1ea23932a1b19b41c SHA512 83f72af2c7457f0555cd9a06212e44846867698c813daf72c190bd8bd311cee4565c254e981a848cb5359fc945f0e730bd5168cf8fc763a430521e47102ef538
+DIST firefox-95.0-is.xpi 467522 BLAKE2B 7294b6dabbe6054a8e81abb9e07baa0de9812d413ad6765374332e5f110db262fdd9386109d2fa237fba387de7529dc4466fcba39f38fcafdda693fa9c3ccbf6 SHA512 d6301e73b43e01584dea2250a45fa10a2b131fdaaa82988a43a070763c347647e7d4649afc54390c517c879a652a77394910057ae569aad62a9133859a5b060c
+DIST firefox-95.0-it.xpi 456459 BLAKE2B 50426f0831287966e74f20e6af143fc6d43740ba3d5c3d69d7a11ca9773fd87a5ae2b7056ca17c1570666cb8b5cf415c1fdbbf0a042ff35cfdfc2bca6c032c79 SHA512 5c81581b251f8772f39dd9084798e4ee260fc2145224a16afbb4f2568a7482ee3cdc46779db3436e1345ba39bc4fe63aa6705994f2f0cdb0dd633b88594722b3
+DIST firefox-95.0-ja.xpi 583404 BLAKE2B 045f27584721c8c0d0a04d28f6956588ed013bdcfcd6f8505d5e69168df86189f8120c5f0f55c56c5803dc58258b7cd524bd3a81c1943612221af7f417394444 SHA512 7daca5ec67a72d3ea71cf234feba68f1d8abfd849b252d0fdee4e8782884f78ba6d4fb31fd0039ae05720be1e56e92b6012447afe991cdebb113078340d78d18
+DIST firefox-95.0-ka.xpi 587672 BLAKE2B 34de6399c51aabe30c28919cf5aa5306fc75d18a2131ee9fff94f19b264a9c2316e145ddd347a2f9e7fc204a249f338a7c08254747ac3c41fbf6e76636ad33c3 SHA512 3a43d89333a34a346a94e65faafd296e18266d6a3617ad8b7e1f4599886d1f053855e0995f19ccf8965afc88c22898cd8a7da02017b6059904a23a9ae2773c4b
+DIST firefox-95.0-kab.xpi 543119 BLAKE2B 47130c805f67c2436a5269ea4b5d35d11ca3780f2ee1a3fb7a34b16849dd838e24e8418f94df8ce33f8754cd37347a141fc445d908e0d11001a056ae52da5ca1 SHA512 8f9bcfc33aeda142674fcc6bdcbda9ddc5d8f6978f75ba2abd0f5501c25f79c67044ace25ce4eb2bf438d72f5f243af1994e1cc33fd4eef2843f9be204cb9c5a
+DIST firefox-95.0-kk.xpi 601962 BLAKE2B c842658d861010559c64b3944d389adbac21036f0781f96677b6a0ee4511e5d1bfef91a94adb22df65d978e9072c504d05e4708c5b1f740372eb694433432a62 SHA512 cd73493d0a15186192e5ff433f6a007fdb49529791bff044facbe9e5344116c496de5f0da74be661614a068964a967784eb786e4d59f49dd6e0490efffe36557
+DIST firefox-95.0-km.xpi 528933 BLAKE2B 1e459b9b8826a509b3cb9f1e400c6f07c95e2351987562097b580263571ad6db2c02a599f80ca8b96c2608900e962626d37b070aff516b0cdf7f59a6d5b959d6 SHA512 efdfaa7b197015cdce00c6837eedc776ed53120ef8fc95547aee6118a7bd4a2131fe8e0383fe0940f653241c50a307f5abaefba7b11335ad62dae0c0aed6f780
+DIST firefox-95.0-kn.xpi 494304 BLAKE2B 45cf6be539ecda4fa17d3f88c726384266f8a9866abe8356df193a5296018907284a49c9d3bc4bf4d9ac7f07238e592bf49a73180431b5930c816f8e743a5c1d SHA512 e62728ac977a598486e181b936a0bad4c61f6a842e06fa07e615015ded640035e92dedd8dd4e8ad0f141b60e4b61263747d6d657b987e11f7eee6948007b1b92
+DIST firefox-95.0-ko.xpi 574782 BLAKE2B d11ee747bdc13e7b0f9202397068cb58100849480921b7a93bb791025856fa6e7e714d716c05327f8ccca2c104f273c4c229e7a7a3242bb7482b515938f07e86 SHA512 58621fa4487d76dda0335ddf76eaa98c2fc61b5c37f3445d83472acd0623bc1370efca5a13d26ad18ea1aba5f437aa623977804ee5bb1d41c76957411fa64d4a
+DIST firefox-95.0-lij.xpi 467379 BLAKE2B e038e7d3cbdd75d4410e7938db17dbe18980ff66441dd014a9904fa683f2e2672ac57774ef462e55630197801e99c43965d2f9025bfdc16cbcecbb701e73ee7d SHA512 0ad2699fa1d96833b8d20428a420a95cb1ba096d195562dd351be74eb6ef1bb37e8b3b1838e38a6f6e4b19e3a1f0af427e1fbc31d8e83974243fc6e40e692845
+DIST firefox-95.0-lt.xpi 556126 BLAKE2B d57e3a4da3173169337963d84c18fc01a212124422e2deb3aff177a36d3968beb1407c51268c30db5d4b2056303d10f9097fdfc291f741c0c9ab5fad715b78d9 SHA512 513abc915c526048f4cbcdd9e33f7c10636ecb52a38660f994c5f1d5bc4f8b759304711fdcbb26325f7853f83e75be147bfbb27608b96b3437e6761132f488a3
+DIST firefox-95.0-lv.xpi 459576 BLAKE2B 2c46cb32b99d4fd6f9903c0933b70c6bcedce52b78f3f2f5414e04cef209f06af135aea03d63fa005ace1ee85cb5ed9343fe36cac05a5f70952ad94a36cb16cd SHA512 c1101737b19b663d08c64544a50c5f75b2e134f287fc1cf53df29401847c61cbd2951c321a1d3e81b724dc594575a1351bf3c1571cdf86aa894cf58a5cd1b16e
+DIST firefox-95.0-mk.xpi 460717 BLAKE2B 591b55228c7e572552a21f07d4eaac87548055442aa41ca2fe63e658c64e4db70e314ec4c259b43ccf0302c81f44c058b9d065d8d21950ed716b18679b56d21a SHA512 7e1151e19ee75b81cac6c36f00278981c0f4dd12322b5c8d465811d0931b89d9d6bf012fb43b4943e4b67db0015fa3fa5ac84e792c3a4934efba3c2bf389fbc7
+DIST firefox-95.0-mr.xpi 528738 BLAKE2B e4bac04d0f10d638e2bc02228e2127c56a7196433cdb2116528ca50c423f7064be9adf4c8fd8537c4deded872c7caf187a812b14b37720ba7b0e4a29e1e0c919 SHA512 4ab9e64a1fba744a55b5ac7ec3a614bb6271af4693d806ef2f57724c561423e3f8e6ff0ba162e2c5deacc3d65a58d806dffdeeb8a29aca6f391309c3a5233771
+DIST firefox-95.0-ms.xpi 444663 BLAKE2B 545a6479eb3cda354449669050832c539b75692d35d2e373bc02fffe2bfd19f95c8241ffe1fa1f56c37e0de359c1ff035408c9ce5d81c40e27260f34e34dd783 SHA512 6273fe3f2b686aa80b88d5dc64e07617eb28b1e0a2de962c4eb77ab730cce0ae49af97f33520bbfeaece34afd7163f7d7b6891159360af66829f27aa3aa37981
+DIST firefox-95.0-my.xpi 512526 BLAKE2B 8766581eb05049ee7a430a67c9ae7b962085c4588f35046ac2a10e50df5bbff6947f681e1fdef756f8210908f97cccdd41496fe3b96f0959b3f19cf0bd967d81 SHA512 fdffe4140d38237789c7cdd43e39aaa0e1e411a62d398f792a19724874ee5ccb56de0401b804ce07fc15e9b502d0ad6d3e8b77f1f63ca6daab9cc2399586b94d
+DIST firefox-95.0-nb-NO.xpi 525747 BLAKE2B f48881217157c037451c9d685258ede8ba0f10ae890a6a01700deccfdf2e7d3a410bca9f8002cf313127098a040638719cc2c1dfef73f32d1d3e31311c1621cb SHA512 a199a137a39d56563e5284548fd9012abcc57234570d3eca5fbd648bbccf352cfbbb6671d6c0b16b23b655a26cbbb366318e9b370f6a9b5348630183ee7f1b04
+DIST firefox-95.0-ne-NP.xpi 481248 BLAKE2B 003af761306299f0a3b9633d675298427fc97df0cfad50334621b52eaa4e25de12669478481693f999fa7ba8fe17950bcd644cb8b1d67dc825b44f27ca44fefa SHA512 8ab172cce511c74edc101880825d447c7f86ec2e8b076c0206e91c6a3d6ec7ec8438cacd5da94dd572df61f6da51b9619b053727157319b1afcf85547d4017be
+DIST firefox-95.0-nl.xpi 533457 BLAKE2B 47079b02637c9a3eeb6a22abb09bb48e0d606d23d4aa9b62b05f03049463704665d6d885380bb4560ab55d16d06b6b163869b2843e8ff127827e4cebd73ec03a SHA512 2e52326799609e7c1a17f43829b2ffcaff0888b88ed1182c173e32433abb471da7c2bbba1fc237ca2eea73138d954fd38f0614cf055885e175612dc53bcb492f
+DIST firefox-95.0-nn-NO.xpi 527937 BLAKE2B 172afccfd416591b06f0236e79a99d5c54d96535b37305ceefdb6d4b08f632b6f4abd49a00e4c69ca602ad17bb71edd8f49ff3924680c01fef6c6b31fd59582d SHA512 b97f19e24126047cb51797c2882b2bfb728595206924f9c53ae37bd3ff0cd30e27a88669e4d24f4bd788523358ea650cc792e65a26d6bf8913f5364379fe4332
+DIST firefox-95.0-oc.xpi 549080 BLAKE2B ca7a523ff465b8750458ecff217db8b33866816a704565f4c7646e885d6c1861966b1e6f0d75013da454b1e249f5ced8b8dcecaa36d3c5a579c8c26f444d8a11 SHA512 5d7f2a4440b9697c5b2d9fd2f3c079085420cb2bf1f76e9bac80b8d17f1adfad8b8ab99152c5287efceb22ac26ccccc96ae8f000baf9af7f2f56574f95b8854e
+DIST firefox-95.0-pa-IN.xpi 592184 BLAKE2B 5a03318fd405de07a7874ed2fef380ae103b98590177c9da0f84a92da6599fd48d09bf0e10c60564ab287cb36e386bfe5637d809d02f2aa60fe426f68643d392 SHA512 f04772e873dd0bcab39e3641fd14928b230b315f0bb01471fa403a866e4eb222da024fbdb69e85f8655e7ce6c6f41a88a5616d4935527391a95b6665f76000b6
+DIST firefox-95.0-pl.xpi 551775 BLAKE2B b0fda1de615693a07f81e327f2343eb9e0836d6c80978e6b702ee6edcd48530bcbf7c1538aae146973d3438b3cc89ffd6a4daeb27fc9c3af9b3048d2509871b9 SHA512 b7c144af35ac65315c9d709e047f5dfb64650eec9ec3ac967e031506f93ef9312ff4c590d474b1aa1e3f0c49e7b18e31c857477f316b5960354d5b5179388c91
+DIST firefox-95.0-pt-BR.xpi 538817 BLAKE2B c69a5aac089154418ad3be52dd819c582c5ef04ab277299a843948ed20d5a1df52b7ef275a43888c2c2b11e8ee16112db27c960ed1bd0c500697287d23338491 SHA512 881335de74fd0cf83bda0ee7538f68d7f63bf28a7fabcff6ae84ec7d68e0fb428ccb3c7959866776eba6889816e72be3dd00f7516e4bf8447452b96cd4bf58c4
+DIST firefox-95.0-pt-PT.xpi 542297 BLAKE2B d215211af7b2c0e6aa7d4f40b22f8889d8b242790f38bc913ce5268219280c2b4ab5dddaf55ebb1f90d087c8c6c115292e02486a6a100c0eeeb2ab170c1fe530 SHA512 e861aa28696d03231b68ef7820f3b2beb71d8a441e62d6fcb35dffcd05b25f0f20d56206a3de71717029d9f8654a31dd75bb286606dde20ca91a52524a0141bd
+DIST firefox-95.0-rm.xpi 533362 BLAKE2B 9e9fe73ab0f8d072dfc88b5a5bab11ff27a3683ec9e867ea0a3d478a656b9aebb229f9b3a3f101183cb9481be80297e0e527a71e46b33a495639822064baab99 SHA512 e99367f50ff1bfc5a24d114990b619097922375e86ce706fc1390dfa19ebd9c70617d3b61fdf8fc1441a5aee759b2b4b0d1ed976fd9f1bc8971c39d7acc6cced
+DIST firefox-95.0-ro.xpi 526935 BLAKE2B 289d63649ba197ccaea3002fa0b165dda0cda9858dafe90a4aac838033dfc400b5f0fe17830626e48aab9a0e4184620ef2ab8297d827375b1579ef59548c0534 SHA512 d87bb24c58f5624cf33cd00c4e35a247a2093159243aa3ae2a77e74bd1b2d773a36894d705665ad5ba14ea014cfda5f068a775a76b9b631909533b5ecdf5dcb6
+DIST firefox-95.0-ru.xpi 622429 BLAKE2B 88c622874abb3c2a102edaa1ebf1ea080dde5baae4a2148d79baebcdc9b494aeb4f768264c6f0a1f53b695657921b59a039e2ec8cae47955cdee9be9b93e515f SHA512 048bbba2b8506838f6aff171fb1474e2e41c60519fce8096a43740b11081a17230963c558704ecf4476292b2d7cc770ce659ee6a23cd9c78f8302b37093c88b7
+DIST firefox-95.0-sco.xpi 502276 BLAKE2B 74ccf3d089973529bdbb5a140c4bf1ac91e9cd6435eb837aa7df477ba281df89b107647eb3a41f0980ab49676fcc06a0d4462172b4715e7c28a88fdc716cd5c9 SHA512 86cda28ea4596f07530a8f6d6a2bb3da8ce36f47f5b222eb65cf09a1436fa2de2ad58466b589f734925d5d79d0fb14e23ef2583985e8625d78ae9c3ee05d60ab
+DIST firefox-95.0-si.xpi 484211 BLAKE2B 6aabb660f7bc8e57edfd22dddb92f82594ea8f307679ea32f8d376bb2ce1c0d24cbb81b53bc0c4f492775cbafbd98abec364e5b634f7cdd990079a97298a1953 SHA512 5a40505ed8bfc9bbeeefef8cca36f911a7e830a8e386100fcbb72db5c79f9f898f899002d8059f1480df279a26565429304540b33750db3253614a205550c995
+DIST firefox-95.0-sk.xpi 562407 BLAKE2B 3a01a8bf40cd0bae4d7b24e41b551cb21c8f850daece989727a88a04711f7f1a1b9091efcc7cf9a4bdc059c00e60d61270617c08a2d59859c73a5b8a807228c1 SHA512 ec4f21d61906c70c96ba530d463ba0a2d6d2e893ac68c818152bb695c28d85a5b70a603279ac3b37107bfae85000d664956eadbab472f52297a90986ac00031f
+DIST firefox-95.0-sl.xpi 534345 BLAKE2B 58eda7c2f9405cf644843ef9f5a2b7ebd23a051a78dc28779e77b99b8c9c52605508c26133e294ca109f7d87fc470498955e7c8d41b4bbbd81ece0b6fdabad8a SHA512 e4623d8373a853d45b7b0fb3b81129099f38532ac8a6048a7202990e59432f769b035ace16be4b228db2a31eca095acb1205627e41a40652feb33456a55be0a0
+DIST firefox-95.0-son.xpi 420603 BLAKE2B d08a1a531523dca9cd8268c7205edb08f2f16a9fdcfe708ef03319d61274c52384ad7b2c9c39fddf85026f021d6f411c9c5e80b21535965a6832beb93f56ba1d SHA512 03f2a58a408bb33c05c8da67508c3244a528dfd4c1763ac8d6f9251e029c79f98075b191ab7937c3bc3f329c7a089d10c64e4361f9028a6d6eab7e47d69da0ba
+DIST firefox-95.0-sq.xpi 552427 BLAKE2B 7a6cb3fa1d5c2ce397c54adcfbb85b83aa9001bf355d838bbb54a1eeee681a1dcbde7d9fd8266bdfb080188cc1091d935fef39ed39d6fc36392405b0ecd5a993 SHA512 0e67147bd01929ef9c0bc00893166332cc2043bb9a1e53bc4437625102cc376b4bd9da91373b480198e3f8c8c9eb05a8aa6774657a18946590d240a148de788c
+DIST firefox-95.0-sr.xpi 582868 BLAKE2B db8768ceae1a9c3a705212ccb77537296e24aaa14199e755a1d32da318d14bd2ef1bc960bd491eb3b88904ac3a4c5d37f3cb683614db3076d30202379da9d724 SHA512 68343edaaaf9ce66267d32545b077affa9eeab5a220bed1f3b08da3db239be8420709006eba56bc1e4e4bf326c08c7ee8f521b6cc6cb4147d11c54a9ec904042
+DIST firefox-95.0-sv-SE.xpi 536153 BLAKE2B 7f1a33176fe5e4e41c4797e5d801278989d58a2e77db8f553adca85e32c86169020540f9d974c17f3d7a977fca2972ee9244f7d2caa997be9b73dca1036f36f0 SHA512 f631df62d197c75ccc645b86e5131c1a3171e755e9009b3b8826fd3e7af90f8d43b974e7079ba6beb5e92c0243773237c16aac17bb559cdf3c4e34929fa68603
+DIST firefox-95.0-szl.xpi 507025 BLAKE2B 3998bafc5c46ea7158523e6ee4722d5e1d97b96b0e8f06eb0129283d7070c7238833037aa13e9148a11f9bdd50e0ef37fc9d1cb7ee907cc60cdc1b7dab70cb1a SHA512 664e90e66615d2cea2528d7f3d90d883ad76219ba12147ce0931382e70f85d2f590b31c9bab9f035e1ba279f750e8f165909fa6400fc0d76a713ffa60166ab9f
+DIST firefox-95.0-ta.xpi 509400 BLAKE2B 04961b9383bea30627e053b512476179f3fe04a3605b8b5813bb09617082deb48a7a971052fc7edd79f162bbbbaf6201c85400f96ceb0d27e806a5dfa7add122 SHA512 8da011875792d71cf80107e96f91dcc1a5f4e7725a2e71e1654fea905345b8023566b2eaa896e160e002790164b13bab989c75b7e2407f590e05fbab74a72df5
+DIST firefox-95.0-te.xpi 546760 BLAKE2B 7bb8a94a2311fdcd126f6d8c7d76c016d42c88ed063f5a16e8dcc633f6a653aed1b3ea2cc850dba4c29abe488433fd1611fb5c20609101c30c1233b2fa3a6b95 SHA512 b955574375fa45a20b55898eebbb1eacf3dee43c55cc3862343b3e21ac9acda9544d9ed116b515e3f0ee8a57c45b553b97f7c68d02ae59794e90df503800130e
+DIST firefox-95.0-th.xpi 602687 BLAKE2B f2af676483ee8918a76c5bb90b1f4f753d9912879f72b0f3cf370242f2d9258c03dd76fa136d039d802336a67ea59e004658527955d708bcfe8a1c3678a6edc3 SHA512 b7987b4e2e6ac604c6c69539e543ba2050342e087363aa1650837adcefb97455bb5cc92fefa0553d7152e8b2e03b6c0c22499ddea1c6fcc9e8e7d58f74ebd33e
+DIST firefox-95.0-tl.xpi 514073 BLAKE2B 04fde0285700502bf278fb6af49d01f95839f34348855867fae9d8ce50bb1e75b2f371b9770f7d9f0d191012cdcd9fbdb2d87df887d450cf7025136c34266281 SHA512 752c4d3faa0bbd1d189acbd265bee5700825c4c006d5bf5343e3aa96747a4eb50aa3cc714eb0e96206e0a81619189a3a0c877c03d8a7598533711e706fe8066c
+DIST firefox-95.0-tr.xpi 549761 BLAKE2B 5bbc39f2a80c896ef7bc16871c4034f3c7ad7ec5ead98b8a5c22b573a34c46e7059879687a39b2223c0058ccb19f3243f1eff1b7484f316fafc905859f3d4b2f SHA512 5a3192201ec54196f1af306339987631d6bb55b5392f8b3641facbac544d1906bff9d5312bc0b005c259dd2cccccce453a2a910e4a93afd321266e08b929d0d8
+DIST firefox-95.0-trs.xpi 487959 BLAKE2B d86920e62b0dd0338964d5bdecedc55f4d43781cdaa57080d7b2314837d52872a101dae4b02a7fcba447e4aa48eec243e986b55b38a37e1c228a7cfb8817ad91 SHA512 de92ac2cfc8c9f2ae90506ea22720b3914a3bb63822b1f6daaf544130eea9055e3d6d498b02ae25c3fddc1e06512c95d5aad0206419582bc8d976c5e058b3d5c
+DIST firefox-95.0-uk.xpi 615803 BLAKE2B df477a4f9badab9e8c9c90a634e7a3937da53584ce1dd4d6c08f6934de93ef4b62d806cbaf9ef50c22c528269dd3b352607c1826c96ce93708c002cadaf38ef4 SHA512 1650c9cc066303ce1c40277f47c06d05e372e0df9dd6c6944549fa3741339ec3c4c4e6ba5b64162997605878d897e518d6d201c2611fa1a9e7152eaf77ff116d
+DIST firefox-95.0-ur.xpi 554230 BLAKE2B 9ebf28b6630c7ac86c1d86617f118dc55160d8b979aed4d5041340b025e3b2d2db8ebb3a15af579f3410d8ebf7ec4b18fb6a3e98758d14eca7f1016736f10279 SHA512 32299a4dbc0a7109f6e520a4cc0d3b69e97737fadc6ca8313fd23b9524971f1f78b5c214a4eb05b2a3705277e4b14a538cc1394b65e00bb5479f9b233cd966c9
+DIST firefox-95.0-uz.xpi 463752 BLAKE2B 8ddfa67828ca4865a6be32024492d23ccd5212bbffc1cb0533d99849eb1fca7356e355cb3b980dd0767232c3d78a71bbd7d90fde5e5318d7be05c118a3023781 SHA512 d5cc2d8ca356a30af0362659352d76e4b4bc666a03533f371a3637f158cfb28c6aafef76f9fa0b238d5875d00219e5029abe13fad56fd189876ea04f2c204868
+DIST firefox-95.0-vi.xpi 569408 BLAKE2B ea2d973c250c3a46621567bde9d6e9805dc2231569c8431ae28a3eef4ee1705ed1e48a4cbb1e1d47b31b5899fd4767b1e7e11c989c17a006dcf8629d95870e9f SHA512 304fd402b2be4174a954545c247269f66f716722eae6c3e299dcc8299f0da9b1daa2f637fd3bf2dc0c04218f493a91952f0f3f67d010acca28e969ffbc4cd102
+DIST firefox-95.0-xh.xpi 424123 BLAKE2B 35ebded6af47343021066ff726501b1c5a36bf96c2d2805883ea7f0c27820807a7745a59c9e5a0ae7d0697935501ebcdd4ab26d4bc4ec27900d02562215331c7 SHA512 9335a43b2bcd62a8521c04c1698ef021b839b124a20c00ff8a8c3a4b641273fcbab5938b8f207fbc94e26c03a05e4a213f2a43e64814da1114178951068d2c66
+DIST firefox-95.0-zh-CN.xpi 571142 BLAKE2B ef68a507ae28c7fc9fdae15a3b2f760ed50889245dd3a3c463f170642deb14383feb0bd1a7dcd2806b6c88aca14101b0253879ddc85773a355667e98f8fc7b47 SHA512 006518e8c34db43fc96f371970737751df6a36b95a89172d2934f776c3eda3372cc4fcf674fd81b8a9f4471fe2be7a212a725ea9772dbd0d82b9a1fc56ba75e1
+DIST firefox-95.0-zh-TW.xpi 571955 BLAKE2B a41c01347771a0fe5609ebb61b2046695d9354c35f61e238db116401da8b8b50c31b07ee8455347f6f2714a2ad3fba5dacdaa8cc4b0794e90db16c8ec30741d1 SHA512 68395d78cb17ad8c9ce7b70e23b5f019bfda25e6aebaaaa615babfafdb715dc3c83cff049ae8b9d6c3520919a8fc46cc606b136276af1e86dfb5e82ba3978e7b
+DIST firefox-95.0.source.tar.xz 382853940 BLAKE2B 64ff056f2e8a21731a920a5bc4580d3bc8805b40ac1c0ab3d6cf3811cc1e058ee9363f85a9c8bb086b1bc87462b7feaae565c459edf37417b44cba6e0727dd94 SHA512 350672a2cd99195c67dafc0e71c6eaf1e23e85a5fe92775697119a054f17c34a736035e23d7f2bb404b544f0f144efef3843cfc293596a6e61d1ea36efc3a724

diff --git a/www-client/firefox/files/disable-auto-update.policy.json b/www-client/firefox/files/disable-auto-update.policy.json
new file mode 100644
index 0000000..f366220
--- /dev/null
+++ b/www-client/firefox/files/disable-auto-update.policy.json
@@ -0,0 +1,5 @@
+{
+  "policies": {
+    "DisableAppUpdate": true
+  }
+}

diff --git a/www-client/firefox/files/distribution.ini b/www-client/firefox/files/distribution.ini
new file mode 100644
index 0000000..680512e
--- /dev/null
+++ b/www-client/firefox/files/distribution.ini
@@ -0,0 +1,42 @@
+[Global]
+id=gentoo
+version=1.0
+about=Mozilla Firefox for Gentoo
+about.de=Mozilla Firefox für Gentoo
+
+[Preferences]
+app.distributor="gentoo"
+app.distributor.channel="gentoo"
+startup.homepage_welcome_url="https://www.gentoo.org/"
+
+[BookmarksToolbar]
+item.1.type=default
+item.2.title=Gentoo's Bugzilla
+item.2.link=https://bugs.gentoo.org/
+item.3.title=Gentoo Forums
+item.3.link=https://forums.gentoo.org/
+item.4.title=Gentoo Packages
+item.4.link=https://packages.gentoo.org/
+item.5.title=Planet Gentoo
+item.5.link=https://planet.gentoo.org/
+item.6.title=Gentoo Wiki
+item.6.link=https://wiki.gentoo.org/
+
+[BookmarksMenu]
+item.1.title=Gentoo
+item.1.type=folder
+item.1.folderId=1
+
+[BookmarksFolder-1]
+item.1.title=Gentoo Linux
+item.1.link=https://www.gentoo.org/
+item.2.title=Gentoo's Bugzilla
+item.2.link=https://bugs.gentoo.org/
+item.3.title=Gentoo Forums
+item.3.link=https://forums.gentoo.org/
+item.4.title=Gentoo Packages
+item.4.link=https://packages.gentoo.org/
+item.5.title=Planet Gentoo
+item.5.link=https://planet.gentoo.org/
+item.6.title=Gentoo Wiki
+item.6.link=https://wiki.gentoo.org/

diff --git a/www-client/firefox/files/firefox-r1.sh b/www-client/firefox/files/firefox-r1.sh
new file mode 100644
index 0000000..853a4ef
--- /dev/null
+++ b/www-client/firefox/files/firefox-r1.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+##
+## Usage:
+##
+## $ firefox
+##
+## This script is meant to run Mozilla Firefox in Gentoo.
+
+cmdname=$(basename "$0")
+
+##
+## Variables
+##
+MOZ_ARCH=$(uname -m)
+case ${MOZ_ARCH} in
+	x86_64|s390x|sparc64)
+		MOZ_LIB_DIR="@PREFIX@/lib64"
+		SECONDARY_LIB_DIR="@PREFIX@/lib"
+		;;
+	*)
+		MOZ_LIB_DIR="@PREFIX@/lib"
+		SECONDARY_LIB_DIR="@PREFIX@/lib64"
+		;;
+esac
+
+MOZ_FIREFOX_FILE="firefox"
+
+if [[ ! -r ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then
+	if [[ ! -r ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then
+		echo "Error: ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2
+		if [[ -d ${SECONDARY_LIB_DIR} ]]; then
+			echo "       ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2
+		fi
+		exit 1
+	fi
+	MOZ_LIB_DIR="${SECONDARY_LIB_DIR}"
+fi
+MOZILLA_FIVE_HOME="${MOZ_LIB_DIR}/firefox"
+MOZ_EXTENSIONS_PROFILE_DIR="${HOME}/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
+MOZ_PROGRAM="${MOZILLA_FIVE_HOME}/${MOZ_FIREFOX_FILE}"
+
+##
+## Enable Wayland backend?
+##
+if @DEFAULT_WAYLAND@ && [[ -z ${MOZ_DISABLE_WAYLAND} ]]; then
+	if [[ -n "${WAYLAND_DISPLAY}" ]]; then
+		export MOZ_ENABLE_WAYLAND=1
+	fi
+fi
+
+##
+## Use D-Bus remote exclusively when there's Wayland display.
+##
+if [[ -n "${WAYLAND_DISPLAY}" ]]; then
+	export MOZ_DBUS_REMOTE=1
+fi
+
+##
+## Make sure that we set the plugin path
+##
+MOZ_PLUGIN_DIR="plugins"
+
+if [[ -n "${MOZ_PLUGIN_PATH}" ]]; then
+	MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+else
+	MOZ_PLUGIN_PATH=${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+fi
+
+if [[ -d "${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}" ]]; then
+	MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+fi
+
+export MOZ_PLUGIN_PATH
+
+##
+## Set MOZ_APP_LAUNCHER for gnome-session
+##
+export MOZ_APP_LAUNCHER="@PREFIX@/bin/${cmdname}"
+
+##
+## Disable the GNOME crash dialog, Mozilla has its own
+##
+if [[ "${XDG_CURRENT_DESKTOP}" == "GNOME" ]]; then
+	GNOME_DISABLE_CRASH_DIALOG=1
+	export GNOME_DISABLE_CRASH_DIALOG
+fi
+
+##
+## Enable Xinput2 (#617344)
+##
+
+# respect user settings
+MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2:-auto}
+
+if [[ ${MOZ_USE_XINPUT2} == auto && -n ${WAYLAND_DISPLAY} ]]; then
+	# enabling XINPUT2 should be safe for all wayland users
+	MOZ_USE_XINPUT2=1
+elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == KDE ]]; then
+	# XINPUT2 is known to cause problems for KWin users
+	MOZ_USE_XINPUT2=0
+elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == LXQT ]]; then
+	# LXQt uses KWin
+	MOZ_USE_XINPUT2=0
+elif [[ ${MOZ_USE_XINPUT2} == auto ]]; then
+	# should work on Mate, Xfce, FluxBox, OpenBox and all the others ...
+	MOZ_USE_XINPUT2=1
+fi
+
+[[ ${MOZ_USE_XINPUT2} != 0 ]] && export MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2}
+
+# Don't throw "old profile" dialog box.
+export MOZ_ALLOW_DOWNGRADE=1
+
+# Run the browser
+exec ${MOZ_PROGRAM} "${@}"

diff --git a/www-client/firefox/files/firefox-wayland.sh b/www-client/firefox/files/firefox-wayland.sh
new file mode 100644
index 0000000..4428025
--- /dev/null
+++ b/www-client/firefox/files/firefox-wayland.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+#
+# Run Mozilla Firefox under Wayland
+#
+export MOZ_ENABLE_WAYLAND=1
+exec @PREFIX@/bin/firefox "$@"

diff --git a/www-client/firefox/files/firefox-x11.sh b/www-client/firefox/files/firefox-x11.sh
new file mode 100644
index 0000000..7565566
--- /dev/null
+++ b/www-client/firefox/files/firefox-x11.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+#
+# Run Mozilla Firefox on X11
+#
+export MOZ_DISABLE_WAYLAND=1
+exec @PREFIX@/bin/firefox "$@"

diff --git a/www-client/firefox/files/firefox.sh b/www-client/firefox/files/firefox.sh
new file mode 100644
index 0000000..c08d555
--- /dev/null
+++ b/www-client/firefox/files/firefox.sh
@@ -0,0 +1,128 @@
+#!/bin/bash
+
+##
+## Usage:
+##
+## $ firefox
+##
+## This script is meant to run Mozilla Firefox in Gentoo.
+
+cmdname=$(basename "$0")
+
+##
+## Variables
+##
+MOZ_ARCH=$(uname -m)
+case ${MOZ_ARCH} in
+	x86_64|s390x|sparc64)
+		MOZ_LIB_DIR="@PREFIX@/lib64"
+		SECONDARY_LIB_DIR="@PREFIX@/lib"
+		;;
+	*)
+		MOZ_LIB_DIR="@PREFIX@/lib"
+		SECONDARY_LIB_DIR="@PREFIX@/lib64"
+		;;
+esac
+
+MOZ_FIREFOX_FILE="firefox"
+
+if [[ ! -r ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then
+	if [[ ! -r ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then
+		echo "Error: ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2
+		if [[ -d $SECONDARY_LIB_DIR ]]; then
+			echo "       ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2
+		fi
+		exit 1
+	fi
+	MOZ_LIB_DIR="$SECONDARY_LIB_DIR"
+fi
+MOZILLA_FIVE_HOME="${MOZ_LIB_DIR}/firefox"
+MOZ_EXTENSIONS_PROFILE_DIR="${HOME}/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
+MOZ_PROGRAM="${MOZILLA_FIVE_HOME}/${MOZ_FIREFOX_FILE}"
+DESKTOP_FILE="firefox"
+
+##
+## Enable Wayland backend?
+##
+if @DEFAULT_WAYLAND@ && [[ -z ${MOZ_DISABLE_WAYLAND} ]]; then
+	if [[ -n "$WAYLAND_DISPLAY" ]]; then
+		DESKTOP_FILE="firefox-wayland"
+		export MOZ_ENABLE_WAYLAND=1
+	fi
+elif [[ -n ${MOZ_DISABLE_WAYLAND} ]]; then
+	DESKTOP_FILE="firefox-x11"
+fi
+
+##
+## Use D-Bus remote exclusively when there's Wayland display.
+##
+if [[ -n "${WAYLAND_DISPLAY}" ]]; then
+	export MOZ_DBUS_REMOTE=1
+fi
+
+##
+## Make sure that we set the plugin path
+##
+MOZ_PLUGIN_DIR="plugins"
+
+if [[ -n "${MOZ_PLUGIN_PATH}" ]]; then
+	MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+else
+	MOZ_PLUGIN_PATH=${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+fi
+
+if [[ -d "${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}" ]]; then
+	MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+fi
+
+export MOZ_PLUGIN_PATH
+
+##
+## Set MOZ_APP_LAUNCHER for gnome-session
+##
+export MOZ_APP_LAUNCHER="@PREFIX@/bin/${cmdname}"
+
+##
+## Disable the GNOME crash dialog, Moz has it's own
+##
+if [[ "$XDG_CURRENT_DESKTOP" == "GNOME" ]]; then
+	GNOME_DISABLE_CRASH_DIALOG=1
+	export GNOME_DISABLE_CRASH_DIALOG
+fi
+
+##
+## Enable Xinput2 (#617344)
+##
+
+# respect user settings
+MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2:-auto}
+
+if [[ ${MOZ_USE_XINPUT2} == auto && -n ${WAYLAND_DISPLAY} ]]; then
+	# enabling XINPUT2 should be safe for all wayland users
+	MOZ_USE_XINPUT2=1
+elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == KDE ]]; then
+	# XINPUT2 is known to cause problems for KWin users
+	MOZ_USE_XINPUT2=0
+elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == LXQT ]]; then
+	# LXQt uses KWin
+	MOZ_USE_XINPUT2=0
+elif [[ ${MOZ_USE_XINPUT2} == auto ]]; then
+	# should work on Mate, Xfce, FluxBox, OpenBox and all the others ...
+	MOZ_USE_XINPUT2=1
+fi
+
+[[ ${MOZ_USE_XINPUT2} != 0 ]] && export MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2}
+
+# Don't throw "old profile" dialog box.
+export MOZ_ALLOW_DOWNGRADE=1
+
+##
+## Route to the correct .desktop file to get proper
+## name and actions
+##
+if [[ $@ != *"--name "* ]]; then
+	set -- --name "${DESKTOP_FILE}" "$@"
+fi
+
+# Run the browser
+exec ${MOZ_PROGRAM} "$@"

diff --git a/www-client/firefox/files/gentoo-default-prefs.js b/www-client/firefox/files/gentoo-default-prefs.js
new file mode 100644
index 0000000..0407f5d
--- /dev/null
+++ b/www-client/firefox/files/gentoo-default-prefs.js
@@ -0,0 +1,12 @@
+pref("general.smoothScroll",               true);
+pref("general.autoScroll",                 false);
+pref("browser.urlbar.hideGoButton",        true);
+pref("accessibility.typeaheadfind",        true);
+pref("browser.shell.checkDefaultBrowser",  false);
+pref("browser.EULA.override",              true);
+pref("general.useragent.locale",           "chrome://global/locale/intl.properties");
+pref("intl.locale.requested",              "");
+/* Disable DoH by default */
+pref("network.trr.mode",                   5);
+/* Disable use of Mozilla Normandy service by default */
+pref("app.normandy.enabled",               false);

diff --git a/www-client/firefox/files/gentoo-hwaccel-prefs.js b/www-client/firefox/files/gentoo-hwaccel-prefs.js
new file mode 100644
index 0000000..a00144a
--- /dev/null
+++ b/www-client/firefox/files/gentoo-hwaccel-prefs.js
@@ -0,0 +1,3 @@
+/* Force hardware accelerated rendering due to USE=hwaccel */
+pref("layers.acceleration.force-enabled",  true);
+pref("webgl.force-enabled",                true);

diff --git a/www-client/firefox/files/icon/firefox-r2.desktop b/www-client/firefox/files/icon/firefox-r2.desktop
new file mode 100644
index 0000000..45d5f11
--- /dev/null
+++ b/www-client/firefox/files/icon/firefox-r2.desktop
@@ -0,0 +1,236 @@
+[Desktop Entry]
+Version=1.0
+Name=@NAME@
+GenericName=Web Browser
+Comment=Browse the Web
+Exec=@EXEC@ %u
+Icon=@ICON@
+Terminal=false
+Type=Application
+MimeType=application/pdf;application/vnd.mozilla.xul+xml;application/xhtml+xml;text/html;text/mml;text/xml;x-scheme-handler/ftp;x-scheme-handler/http;x-scheme-handler/https;
+StartupNotify=true
+Categories=Network;WebBrowser;
+Keywords=web;browser;internet;
+Actions=new-window;new-private-window;profile-manager-window;
+
+[Desktop Action new-window]
+Name=Open a New Window
+Name[ach]=Dirica manyen
+Name[af]=Nuwe venster
+Name[an]=Nueva finestra
+Name[ar]=نافذة جديدة
+Name[as]=নতুন উইন্ডো
+Name[ast]=Ventana nueva
+Name[az]=Yeni Pəncərə
+Name[be]=Новае акно
+Name[bg]=Нов прозорец
+Name[bn_BD]=নতুন উইন্ডো (N)
+Name[bn_IN]=নতুন উইন্ডো
+Name[br]=Prenestr nevez
+Name[brx]=गोदान उइन्ड'(N)
+Name[bs]=Novi prozor
+Name[ca]=Finestra nova
+Name[cak]=K'ak'a' tzuwäch
+Name[cs]=Nové okno
+Name[cy]=Ffenestr Newydd
+Name[da]=Nyt vindue
+Name[de]=Neues Fenster
+Name[dsb]=Nowe wokno
+Name[el]=Νέο παράθυρο
+Name[en_GB]=New Window
+Name[en_US]=New Window
+Name[en_ZA]=New Window
+Name[eo]=Nova fenestro
+Name[es_AR]=Nueva ventana
+Name[es_CL]=Nueva ventana
+Name[es_ES]=Nueva ventana
+Name[es_MX]=Nueva ventana
+Name[et]=Uus aken
+Name[eu]=Leiho berria
+Name[fa]=پنجره جدید‌
+Name[ff]=Henorde Hesere
+Name[fi]=Uusi ikkuna
+Name[fr]=Nouvelle fenêtre
+Name[fy_NL]=Nij finster
+Name[ga_IE]=Fuinneog Nua
+Name[gd]=Uinneag ùr
+Name[gl]=Nova xanela
+Name[gn]=Ovetã pyahu
+Name[gu_IN]=નવી વિન્ડો
+Name[he]=חלון חדש
+Name[hi_IN]=नया विंडो
+Name[hr]=Novi prozor
+Name[hsb]=Nowe wokno
+Name[hu]=Új ablak
+Name[hy_AM]=Նոր Պատուհան
+Name[id]=Jendela Baru
+Name[is]=Nýr gluggi
+Name[it]=Nuova finestra
+Name[ja]=新しいウィンドウ
+Name[ja_JP-mac]=新規ウインドウ
+Name[ka]=ახალი ფანჯარა
+Name[kk]=Жаңа терезе
+Name[km]=បង្អួច​​​ថ្មី
+Name[kn]=ಹೊಸ ಕಿಟಕಿ
+Name[ko]=새 창
+Name[kok]=नवें जनेल
+Name[ks]=نئئ وِنڈو
+Name[lij]=Neuvo barcon
+Name[lo]=ຫນ້າຕ່າງໃຫມ່
+Name[lt]=Naujas langas
+Name[ltg]=Jauns lūgs
+Name[lv]=Jauns logs
+Name[mai]=नव विंडो
+Name[mk]=Нов прозорец
+Name[ml]=പുതിയ ജാലകം
+Name[mr]=नवीन पटल
+Name[ms]=Tetingkap Baru
+Name[my]=ဝင်းဒိုးအသစ်
+Name[nb_NO]=Nytt vindu
+Name[ne_NP]=नयाँ सञ्झ्याल
+Name[nl]=Nieuw venster
+Name[nn_NO]=Nytt vindauge
+Name[or]=ନୂତନ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
+Name[pl]=Nowe okno
+Name[pt_BR]=Nova janela
+Name[pt_PT]=Nova janela
+Name[rm]=Nova fanestra
+Name[ro]=Fereastră nouă
+Name[ru]=Новое окно
+Name[sat]=नावा विंडो (N)
+Name[si]=නව කවුළුවක්
+Name[sk]=Nové okno
+Name[sl]=Novo okno
+Name[son]=Zanfun taaga
+Name[sq]=Dritare e Re
+Name[sr]=Нови прозор
+Name[sv_SE]=Nytt fönster
+Name[ta]=புதிய சாளரம்
+Name[te]=కొత్త విండో
+Name[th]=หน้าต่างใหม่
+Name[tr]=Yeni pencere
+Name[tsz]=Eraatarakua jimpani
+Name[uk]=Нове вікно
+Name[ur]=نیا دریچہ
+Name[uz]=Yangi oyna
+Name[vi]=Cửa sổ mới
+Name[wo]=Palanteer bu bees
+Name[xh]=Ifestile entsha
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開新視窗
+Exec=@EXEC@ --new-window %u
+
+[Desktop Action new-private-window]
+Name=Open a New Private Window
+Name[ach]=Dirica manyen me mung
+Name[af]=Nuwe privaatvenster
+Name[an]=Nueva finestra privada
+Name[ar]=نافذة خاصة جديدة
+Name[as]=নতুন ব্যক্তিগত উইন্ডো
+Name[ast]=Ventana privada nueva
+Name[az]=Yeni Məxfi Pəncərə
+Name[be]=Новае акно адасаблення
+Name[bg]=Нов прозорец за поверително сърфиране
+Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
+Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
+Name[br]=Prenestr merdeiñ prevez nevez
+Name[brx]=गोदान प्राइभेट उइन्ड'
+Name[bs]=Novi privatni prozor
+Name[ca]=Finestra privada nova
+Name[cak]=K'ak'a' ichinan tzuwäch
+Name[cs]=Nové anonymní okno
+Name[cy]=Ffenestr Breifat Newydd
+Name[da]=Nyt privat vindue
+Name[de]=Neues privates Fenster
+Name[dsb]=Nowe priwatne wokno
+Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
+Name[en_GB]=New Private Window
+Name[en_US]=New Private Window
+Name[en_ZA]=New Private Window
+Name[eo]=Nova privata fenestro
+Name[es_AR]=Nueva ventana privada
+Name[es_CL]=Nueva ventana privada
+Name[es_ES]=Nueva ventana privada
+Name[es_MX]=Nueva ventana privada
+Name[et]=Uus privaatne aken
+Name[eu]=Leiho pribatu berria
+Name[fa]=پنجره ناشناس جدید
+Name[ff]=Henorde Suturo Hesere
+Name[fi]=Uusi yksityinen ikkuna
+Name[fr]=Nouvelle fenêtre de navigation privée
+Name[fy_NL]=Nij priveefinster
+Name[ga_IE]=Fuinneog Nua Phríobháideach
+Name[gd]=Uinneag phrìobhaideach ùr
+Name[gl]=Nova xanela privada
+Name[gn]=Ovetã ñemi pyahu
+Name[gu_IN]=નવી ખાનગી વિન્ડો
+Name[he]=חלון פרטי חדש
+Name[hi_IN]=नयी निजी विंडो
+Name[hr]=Novi privatni prozor
+Name[hsb]=Nowe priwatne wokno
+Name[hu]=Új privát ablak
+Name[hy_AM]=Սկսել Գաղտնի դիտարկում
+Name[id]=Jendela Mode Pribadi Baru
+Name[is]=Nýr huliðsgluggi
+Name[it]=Nuova finestra anonima
+Name[ja]=新しいプライベートウィンドウ
+Name[ja_JP-mac]=新規プライベートウインドウ
+Name[ka]=ახალი პირადი ფანჯარა
+Name[kk]=Жаңа жекелік терезе
+Name[km]=បង្អួច​ឯកជន​ថ្មី
+Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
+Name[ko]=새 사생활 보호 모드
+Name[kok]=नवो खाजगी विंडो
+Name[ks]=نْو پرایوٹ وینڈو&amp;
+Name[lij]=Neuvo barcon privou
+Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
+Name[lt]=Naujas privataus naršymo langas
+Name[ltg]=Jauns privatais lūgs
+Name[lv]=Jauns privātais logs
+Name[mai]=नया निज विंडो (W)
+Name[mk]=Нов приватен прозорец
+Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
+Name[mr]=नवीन वैयक्तिक पटल
+Name[ms]=Tetingkap Persendirian Baharu
+Name[my]=New Private Window
+Name[nb_NO]=Nytt privat vindu
+Name[ne_NP]=नयाँ निजी सञ्झ्याल
+Name[nl]=Nieuw privévenster
+Name[nn_NO]=Nytt privat vindauge
+Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
+Name[pl]=Nowe okno prywatne
+Name[pt_BR]=Nova janela privativa
+Name[pt_PT]=Nova janela privada
+Name[rm]=Nova fanestra privata
+Name[ro]=Fereastră privată nouă
+Name[ru]=Новое приватное окно
+Name[sat]=नावा निजेराक् विंडो (W )
+Name[si]=නව පුද්ගලික කවුළුව (W)
+Name[sk]=Nové okno v režime Súkromné prehliadanie
+Name[sl]=Novo zasebno okno
+Name[son]=Sutura zanfun taaga
+Name[sq]=Dritare e Re Private
+Name[sr]=Нови приватан прозор
+Name[sv_SE]=Nytt privat fönster
+Name[ta]=புதிய தனிப்பட்ட சாளரம்
+Name[te]=కొత్త ఆంతరంగిక విండో
+Name[th]=หน้าต่างส่วนตัวใหม่
+Name[tr]=Yeni gizli pencere
+Name[tsz]=Juchiiti eraatarakua jimpani
+Name[uk]=Приватне вікно
+Name[ur]=نیا نجی دریچہ
+Name[uz]=Yangi maxfiy oyna
+Name[vi]=Cửa sổ riêng tư mới
+Name[wo]=Panlanteeru biir bu bees
+Name[xh]=Ifestile yangasese entsha
+Name[zh_CN]=新建隐私浏览窗口
+Name[zh_TW]=新增隱私視窗
+Exec=@EXEC@ --private-window %u
+
+[Desktop Action profile-manager-window]
+Name=Open the Profile Manager
+Name[de]=Profilverwaltung öffnen
+Name[cs]=Správa profilů
+Exec=@EXEC@ --ProfileManager

diff --git a/www-client/firefox/files/icon/firefox-r3.desktop b/www-client/firefox/files/icon/firefox-r3.desktop
new file mode 100644
index 0000000..8219e93
--- /dev/null
+++ b/www-client/firefox/files/icon/firefox-r3.desktop
@@ -0,0 +1,236 @@
+[Desktop Entry]
+Version=1.0
+Name=@NAME@
+GenericName=Web Browser
+Comment=Browse the Web
+Exec=@EXEC@ %u
+Icon=@ICON@
+Terminal=false
+Type=Application
+MimeType=application/pdf;application/vnd.mozilla.xul+xml;application/xhtml+xml;text/html;text/mml;text/xml;x-scheme-handler/http;x-scheme-handler/https;
+StartupNotify=true
+Categories=Network;WebBrowser;
+Keywords=web;browser;internet;
+Actions=new-window;new-private-window;profile-manager-window;
+
+[Desktop Action new-window]
+Name=Open a New Window
+Name[ach]=Dirica manyen
+Name[af]=Nuwe venster
+Name[an]=Nueva finestra
+Name[ar]=نافذة جديدة
+Name[as]=নতুন উইন্ডো
+Name[ast]=Ventana nueva
+Name[az]=Yeni Pəncərə
+Name[be]=Новае акно
+Name[bg]=Нов прозорец
+Name[bn_BD]=নতুন উইন্ডো (N)
+Name[bn_IN]=নতুন উইন্ডো
+Name[br]=Prenestr nevez
+Name[brx]=गोदान उइन्ड'(N)
+Name[bs]=Novi prozor
+Name[ca]=Finestra nova
+Name[cak]=K'ak'a' tzuwäch
+Name[cs]=Nové okno
+Name[cy]=Ffenestr Newydd
+Name[da]=Nyt vindue
+Name[de]=Neues Fenster
+Name[dsb]=Nowe wokno
+Name[el]=Νέο παράθυρο
+Name[en_GB]=New Window
+Name[en_US]=New Window
+Name[en_ZA]=New Window
+Name[eo]=Nova fenestro
+Name[es_AR]=Nueva ventana
+Name[es_CL]=Nueva ventana
+Name[es_ES]=Nueva ventana
+Name[es_MX]=Nueva ventana
+Name[et]=Uus aken
+Name[eu]=Leiho berria
+Name[fa]=پنجره جدید‌
+Name[ff]=Henorde Hesere
+Name[fi]=Uusi ikkuna
+Name[fr]=Nouvelle fenêtre
+Name[fy_NL]=Nij finster
+Name[ga_IE]=Fuinneog Nua
+Name[gd]=Uinneag ùr
+Name[gl]=Nova xanela
+Name[gn]=Ovetã pyahu
+Name[gu_IN]=નવી વિન્ડો
+Name[he]=חלון חדש
+Name[hi_IN]=नया विंडो
+Name[hr]=Novi prozor
+Name[hsb]=Nowe wokno
+Name[hu]=Új ablak
+Name[hy_AM]=Նոր Պատուհան
+Name[id]=Jendela Baru
+Name[is]=Nýr gluggi
+Name[it]=Nuova finestra
+Name[ja]=新しいウィンドウ
+Name[ja_JP-mac]=新規ウインドウ
+Name[ka]=ახალი ფანჯარა
+Name[kk]=Жаңа терезе
+Name[km]=បង្អួច​​​ថ្មី
+Name[kn]=ಹೊಸ ಕಿಟಕಿ
+Name[ko]=새 창
+Name[kok]=नवें जनेल
+Name[ks]=نئئ وِنڈو
+Name[lij]=Neuvo barcon
+Name[lo]=ຫນ້າຕ່າງໃຫມ່
+Name[lt]=Naujas langas
+Name[ltg]=Jauns lūgs
+Name[lv]=Jauns logs
+Name[mai]=नव विंडो
+Name[mk]=Нов прозорец
+Name[ml]=പുതിയ ജാലകം
+Name[mr]=नवीन पटल
+Name[ms]=Tetingkap Baru
+Name[my]=ဝင်းဒိုးအသစ်
+Name[nb_NO]=Nytt vindu
+Name[ne_NP]=नयाँ सञ्झ्याल
+Name[nl]=Nieuw venster
+Name[nn_NO]=Nytt vindauge
+Name[or]=ନୂତନ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
+Name[pl]=Nowe okno
+Name[pt_BR]=Nova janela
+Name[pt_PT]=Nova janela
+Name[rm]=Nova fanestra
+Name[ro]=Fereastră nouă
+Name[ru]=Новое окно
+Name[sat]=नावा विंडो (N)
+Name[si]=නව කවුළුවක්
+Name[sk]=Nové okno
+Name[sl]=Novo okno
+Name[son]=Zanfun taaga
+Name[sq]=Dritare e Re
+Name[sr]=Нови прозор
+Name[sv_SE]=Nytt fönster
+Name[ta]=புதிய சாளரம்
+Name[te]=కొత్త విండో
+Name[th]=หน้าต่างใหม่
+Name[tr]=Yeni pencere
+Name[tsz]=Eraatarakua jimpani
+Name[uk]=Нове вікно
+Name[ur]=نیا دریچہ
+Name[uz]=Yangi oyna
+Name[vi]=Cửa sổ mới
+Name[wo]=Palanteer bu bees
+Name[xh]=Ifestile entsha
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開新視窗
+Exec=@EXEC@ --new-window %u
+
+[Desktop Action new-private-window]
+Name=Open a New Private Window
+Name[ach]=Dirica manyen me mung
+Name[af]=Nuwe privaatvenster
+Name[an]=Nueva finestra privada
+Name[ar]=نافذة خاصة جديدة
+Name[as]=নতুন ব্যক্তিগত উইন্ডো
+Name[ast]=Ventana privada nueva
+Name[az]=Yeni Məxfi Pəncərə
+Name[be]=Новае акно адасаблення
+Name[bg]=Нов прозорец за поверително сърфиране
+Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
+Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
+Name[br]=Prenestr merdeiñ prevez nevez
+Name[brx]=गोदान प्राइभेट उइन्ड'
+Name[bs]=Novi privatni prozor
+Name[ca]=Finestra privada nova
+Name[cak]=K'ak'a' ichinan tzuwäch
+Name[cs]=Nové anonymní okno
+Name[cy]=Ffenestr Breifat Newydd
+Name[da]=Nyt privat vindue
+Name[de]=Neues privates Fenster
+Name[dsb]=Nowe priwatne wokno
+Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
+Name[en_GB]=New Private Window
+Name[en_US]=New Private Window
+Name[en_ZA]=New Private Window
+Name[eo]=Nova privata fenestro
+Name[es_AR]=Nueva ventana privada
+Name[es_CL]=Nueva ventana privada
+Name[es_ES]=Nueva ventana privada
+Name[es_MX]=Nueva ventana privada
+Name[et]=Uus privaatne aken
+Name[eu]=Leiho pribatu berria
+Name[fa]=پنجره ناشناس جدید
+Name[ff]=Henorde Suturo Hesere
+Name[fi]=Uusi yksityinen ikkuna
+Name[fr]=Nouvelle fenêtre de navigation privée
+Name[fy_NL]=Nij priveefinster
+Name[ga_IE]=Fuinneog Nua Phríobháideach
+Name[gd]=Uinneag phrìobhaideach ùr
+Name[gl]=Nova xanela privada
+Name[gn]=Ovetã ñemi pyahu
+Name[gu_IN]=નવી ખાનગી વિન્ડો
+Name[he]=חלון פרטי חדש
+Name[hi_IN]=नयी निजी विंडो
+Name[hr]=Novi privatni prozor
+Name[hsb]=Nowe priwatne wokno
+Name[hu]=Új privát ablak
+Name[hy_AM]=Սկսել Գաղտնի դիտարկում
+Name[id]=Jendela Mode Pribadi Baru
+Name[is]=Nýr huliðsgluggi
+Name[it]=Nuova finestra anonima
+Name[ja]=新しいプライベートウィンドウ
+Name[ja_JP-mac]=新規プライベートウインドウ
+Name[ka]=ახალი პირადი ფანჯარა
+Name[kk]=Жаңа жекелік терезе
+Name[km]=បង្អួច​ឯកជន​ថ្មី
+Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
+Name[ko]=새 사생활 보호 모드
+Name[kok]=नवो खाजगी विंडो
+Name[ks]=نْو پرایوٹ وینڈو&amp;
+Name[lij]=Neuvo barcon privou
+Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
+Name[lt]=Naujas privataus naršymo langas
+Name[ltg]=Jauns privatais lūgs
+Name[lv]=Jauns privātais logs
+Name[mai]=नया निज विंडो (W)
+Name[mk]=Нов приватен прозорец
+Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
+Name[mr]=नवीन वैयक्तिक पटल
+Name[ms]=Tetingkap Persendirian Baharu
+Name[my]=New Private Window
+Name[nb_NO]=Nytt privat vindu
+Name[ne_NP]=नयाँ निजी सञ्झ्याल
+Name[nl]=Nieuw privévenster
+Name[nn_NO]=Nytt privat vindauge
+Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
+Name[pl]=Nowe okno prywatne
+Name[pt_BR]=Nova janela privativa
+Name[pt_PT]=Nova janela privada
+Name[rm]=Nova fanestra privata
+Name[ro]=Fereastră privată nouă
+Name[ru]=Новое приватное окно
+Name[sat]=नावा निजेराक् विंडो (W )
+Name[si]=නව පුද්ගලික කවුළුව (W)
+Name[sk]=Nové okno v režime Súkromné prehliadanie
+Name[sl]=Novo zasebno okno
+Name[son]=Sutura zanfun taaga
+Name[sq]=Dritare e Re Private
+Name[sr]=Нови приватан прозор
+Name[sv_SE]=Nytt privat fönster
+Name[ta]=புதிய தனிப்பட்ட சாளரம்
+Name[te]=కొత్త ఆంతరంగిక విండో
+Name[th]=หน้าต่างส่วนตัวใหม่
+Name[tr]=Yeni gizli pencere
+Name[tsz]=Juchiiti eraatarakua jimpani
+Name[uk]=Приватне вікно
+Name[ur]=نیا نجی دریچہ
+Name[uz]=Yangi maxfiy oyna
+Name[vi]=Cửa sổ riêng tư mới
+Name[wo]=Panlanteeru biir bu bees
+Name[xh]=Ifestile yangasese entsha
+Name[zh_CN]=新建隐私浏览窗口
+Name[zh_TW]=新增隱私視窗
+Exec=@EXEC@ --private-window %u
+
+[Desktop Action profile-manager-window]
+Name=Open the Profile Manager
+Name[de]=Profilverwaltung öffnen
+Name[cs]=Správa profilů
+Exec=@EXEC@ --ProfileManager

diff --git a/www-client/firefox/files/icon/firefox-symbolic.svg b/www-client/firefox/files/icon/firefox-symbolic.svg
new file mode 100644
index 0000000..2078eea
--- /dev/null
+++ b/www-client/firefox/files/icon/firefox-symbolic.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   viewBox="0 0 16 16"
+   version="1.1"
+   id="svg3758"
+   sodipodi:docname="firefox-symbolic-quantum.svg"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06">
+  <metadata
+     id="metadata3764">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>Gnome Symbolic Icon Theme</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs3762" />
+  <sodipodi:namedview
+     pagecolor="#555753"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1591"
+     inkscape:window-height="909"
+     id="namedview3760"
+     showgrid="false"
+     showborder="false"
+     inkscape:snap-global="false"
+     inkscape:zoom="1"
+     inkscape:cx="3.8851213"
+     inkscape:cy="12.517918"
+     inkscape:window-x="143"
+     inkscape:window-y="60"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg3758">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3768" />
+  </sodipodi:namedview>
+  <title
+     id="title3754">Gnome Symbolic Icon Theme</title>
+  <path
+     d="m 15.054715,6.9884649 v 0 c -0.02034,-0.133652 -0.04071,-0.2122775 -0.04071,-0.2122775 0,0 -0.05225,0.060583 -0.138743,0.1748124 A 4.9808937,4.9808937 0 0 0 14.703694,6.0103229 6.4034781,6.4034781 0 0 0 14.270352,4.895288 4.6469845,4.6469845 0 0 0 13.87447,4.2163686 Q 13.793063,4.0947376 13.708437,3.9805045 C 13.444828,3.5499376 13.142365,3.2867867 12.792269,2.7891599 A 3.6101075,3.6101075 0 0 1 12.333953,1.5474054 5.0151173,5.0151173 0 0 0 12.113814,2.3599798 C 11.754468,1.997397 11.441832,1.7397963 11.253142,1.5640539 10.322171,0.69459485 10.430396,0.24367816 10.430396,0.24367816 v 0 c 0,0 -1.7389294,1.94102274 -0.9855522,3.96297904 a 3.8848199,3.8848199 0 0 0 1.2949452,1.726432 c 0.728868,0.6012222 1.513693,1.0743371 1.927612,2.2832561 A 3.8741829,3.8741829 0 0 0 11.21337,6.6823034 3.5023502,3.5023502 0 0 1 11.490854,8.0697401 3.2946971,3.2946971 0 0 1 7.4621982,11.27934 3.0343219,3.0343219 0 0 1 6.6459244,11.001852 3.3219834,3.3219834 0 0 1 5.667782,10.09771 l -0.00463,-
 0.0078 0.058274,0.02125 a 3.0061106,3.0061106 0 0 0 0.4162344,0.111409 2.6028293,2.6028293 0 0 0 1.6570605,-0.195631 C 8.3154732,9.7379218 8.6308831,9.5237932 8.8866339,9.6084266 h 0.0046 c 0.24974,0.079514 0.446755,-0.1628244 0.2682391,-0.4162632 A 1.3596868,1.3596868 0 0 0 7.8423564,8.6778985 C 7.3211426,8.7537416 6.8434027,9.1241907 6.1603222,8.7653097 a 1.4470953,1.4470953 0 0 1 -0.128107,-0.075371 c -0.04625,-0.026369 0.146605,0.040234 0.1017455,0.010233 A 3.3899676,3.3899676 0 0 1 5.7047808,8.4439577 c -0.010172,-0.00822 0.103133,0.032367 0.092497,0.024039 A 1.6561356,1.6561356 0 0 1 5.3495968,8.015168 0.80517516,0.80517516 0 0 1 5.3190728,7.2964766 0.63405807,0.63405807 0 0 1 5.5965603,7.0356384 c 0.088333,0.043485 0.1429059,0.076305 0.1429059,0.076305 0,0 -0.040235,-0.073997 -0.061972,-0.1128365 0.00786,-0.0027 0.014794,0 0.022662,-0.00513 0.077233,0.033293 0.248351,0.1202544 0.3385341,0.1734358 A 0.46987818,0.46987818 0 0 1 6.19362,7.3061637 c 0,0 0.030994,-0.015351 0.0079,
 -0.079998 A 0.41623066,0.41623066 0 0 0 6.0414753,7.0300927 h 0.0074 a 1.3596868,1.3596868 0 0 1 0.1970213,0.1225561 0.96149289,0.96149289 0 0 0 0.078625,-0.416232 0.54479973,0.54479973 0 0 0 -0.031914,-0.2312396 c -0.024511,-0.046254 0.013876,-0.064746 0.056885,-0.016135 A 0.45137905,0.45137905 0 0 0 6.3129456,6.378979 v -0.00372 0 c 0,0 0.024511,-0.031916 0.035615,-0.043486 A 0.66134433,0.66134433 0 0 1 6.4484481,6.2503678 4.6122987,4.6122987 0 0 1 7.1259793,5.9048971 C 7.3174429,5.8211545 7.4760733,5.7573477 7.5084475,5.7388339 a 1.0637007,1.0637007 0 0 0 0.1355052,-0.1040612 0.91015778,0.91015778 0 0 0 0.3052354,-0.5272274 0.73996569,0.73996569 0 0 0 0.0079,-0.082324 v -0.023118 -0.013967 0 -0.00552 0 -0.00611 0 C 7.9293085,4.872475 7.749868,4.7943251 6.8119611,4.7064478 A 0.81997449,0.81997449 0 0 1 6.1413599,4.0776254 v 0.0042 c -0.013416,0.034225 -0.025431,0.068909 -0.037456,0.1040572 0.012025,-0.034685 0.024051,-0.069373 0.037456,-0.1040572 v -0.00742 A 2.3762148,2.3762148 0
  0 1 7.0598423,2.9339361 c 0.024051,-0.019416 -0.096192,0.00512 -0.072152,-0.014798 A 2.3845397,2.3845397 0 0 1 7.2328039,2.8155414 C 7.2748921,2.7979724 7.0524371,2.7128704 6.8558842,2.7336774 a 1.0174527,1.0174527 0 0 0 -0.3496338,0.082324 c 0.046253,-0.039773 0.1849968,-0.092498 0.1521605,-0.092498 a 2.2499581,2.2499581 0 0 0 -0.713142,0.2696255 0.14521828,0.14521828 0 0 1 0.01387,-0.064747 1.1099484,1.1099484 0 0 0 -0.4458297,0.3440843 0.58966016,0.58966016 0 0 0 0.00462,-0.080469 1.3300881,1.3300881 0 0 0 -0.2187525,0.2053404 l -0.00417,0.00321 A 2.9066776,2.9066776 0 0 0 3.6684873,3.2618132 l -0.00463,-0.0042 h 0.00554 A 1.3610743,1.3610743 0 0 1 3.3803631,2.9339159 l -0.0074,0.0018 -0.00877,-0.010174 C 3.3285694,2.8728322 3.2920343,2.813172 3.2545731,2.7465739 3.2277502,2.7003291 3.2004619,2.646216 3.1731756,2.5902563 c 0,-0.00372 -0.00416,-0.00513 -0.006,-0.00552 -0.0111,0 -0.01896,0.05133 -0.028212,0.037927 v -0.0028 A 1.9923577,1.9923577 0 0 1 3.0080744,1.8396896 l -0.0074
 ,0.00372 A 0.87130958,0.87130958 0 0 0 2.6704677,2.2753541 c -0.028212,0.063362 -0.046248,0.098047 -0.064746,0.1327329 0,0.0028 0,-0.00461 0,-0.016194 0.00416,-0.031916 0.018037,-0.097585 0.014799,-0.092497 -0.00323,0.00513 -0.00553,0.00882 -0.00877,0.013415 A 0.80147532,0.80147532 0 0 0 2.4956586,2.4848515 1.0891367,1.0891367 0 0 0 2.4262868,2.661518 c -0.00276,0.00973 0,-0.00832 0,-0.029599 0,-0.02127 0.00416,-0.059199 0,-0.051331 L 2.4161148,2.600475 A 4.3935464,4.3935464 0 0 0 2.0461275,4.0040946 1.3976101,1.3976101 0 0 0 2.031791,4.252909 v 0.00742 A 3.0653076,3.0653076 0 0 0 1.6539417,4.7690529 7.2174403,7.2174403 0 0 0 0.85524217,6.725337 4.7871157,4.7871157 0 0 1 1.2830334,5.9756593 6.9371784,6.9371784 0 0 0 0.79974461,8.5192901 6.582457,6.582457 0 0 1 1.0078598,7.7659142 6.3854411,6.3854411 0 0 0 1.585032,10.755373 6.9542899,6.9542899 0 0 0 4.3372422,13.87618 v 0 a 6.0196208,6.0196208 0 0 0 1.6038754,0.768639 c 0.07492,0.02728 0.1507676,0.0541 0.2284646,0.08 -0.024511,-0.00
 96 -0.04625,-0.02034 -0.070761,-0.03098 A 7.2609132,7.2609132 0 0 0 8.179966,15 c 2.494615,0 3.318287,-0.949928 3.394136,-1.044738 v 0 A 1.2625664,1.2625664 0 0 0 11.8687,13.559386 v 0 q 0.07216,-0.02958 0.145679,-0.06335 l 0.03097,-0.01397 0.05597,-0.02635 a 5.2315572,5.2315572 0 0 0 1.053064,-0.659489 2.5436321,2.5436321 0 0 0 0.98184,-1.433687 v 0 a 0.89628343,0.89628343 0 0 0 0.01343,-0.660421 q 0.03838,-0.0606 0.0791,-0.129501 A 5.8762526,5.8762526 0 0 0 15.1107,7.7140393 v -0.0027 c 0,-0.027291 0,-0.054583 0,-0.081863 A 3.5754215,3.5754215 0 0 0 15.05473,6.9884887 Z"
+     id="path3756"
+     inkscape:connector-curvature="0"
+     style="fill:#bebebe;fill-opacity:1;stroke-width:0.46247858" />
+</svg>

diff --git a/www-client/firefox/firefox-91.4.0-r1.ebuild b/www-client/firefox/firefox-91.4.0-r1.ebuild
new file mode 100644
index 0000000..274e6fd
--- /dev/null
+++ b/www-client/firefox/firefox-91.4.0-r1.ebuild
@@ -0,0 +1,1235 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+FIREFOX_PATCHSET="firefox-91esr-patches-03.tar.xz"
+
+LLVM_MAX_SLOT=13
+
+PYTHON_COMPAT=( python3_{7..10} )
+PYTHON_REQ_USE="ncurses,sqlite,ssl"
+
+WANT_AUTOCONF="2.1"
+
+VIRTUALX_REQUIRED="pgo"
+
+MOZ_ESR=yes
+
+MOZ_PV=${PV}
+MOZ_PV_SUFFIX=
+if [[ ${PV} =~ (_(alpha|beta|rc).*)$ ]] ; then
+	MOZ_PV_SUFFIX=${BASH_REMATCH[1]}
+
+	# Convert the ebuild version to the upstream Mozilla version
+	MOZ_PV="${MOZ_PV/_alpha/a}" # Handle alpha for SRC_URI
+	MOZ_PV="${MOZ_PV/_beta/b}"  # Handle beta for SRC_URI
+	MOZ_PV="${MOZ_PV%%_rc*}"    # Handle rc for SRC_URI
+fi
+
+if [[ -n ${MOZ_ESR} ]] ; then
+	# ESR releases have slightly different version numbers
+	MOZ_PV="${MOZ_PV}esr"
+fi
+
+MOZ_PN="${PN%-bin}"
+MOZ_P="${MOZ_PN}-${MOZ_PV}"
+MOZ_PV_DISTFILES="${MOZ_PV}${MOZ_PV_SUFFIX}"
+MOZ_P_DISTFILES="${MOZ_PN}-${MOZ_PV_DISTFILES}"
+
+inherit autotools check-reqs desktop flag-o-matic gnome2-utils linux-info \
+	llvm multiprocessing pax-utils python-any-r1 toolchain-funcs \
+	virtualx xdg
+
+MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}"
+
+if [[ ${PV} == *_rc* ]] ; then
+	MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/candidates/${MOZ_PV}-candidates/build${PV##*_rc}"
+fi
+
+PATCH_URIS=(
+	https://dev.gentoo.org/~{polynomial-c,whissi}/mozilla/patchsets/${FIREFOX_PATCHSET}
+)
+
+SRC_URI="${MOZ_SRC_BASE_URI}/source/${MOZ_P}.source.tar.xz -> ${MOZ_P_DISTFILES}.source.tar.xz
+	${PATCH_URIS[@]}"
+
+DESCRIPTION="Firefox Web Browser"
+HOMEPAGE="https://www.mozilla.com/firefox"
+
+KEYWORDS="amd64 arm64 ~ppc64 x86"
+
+SLOT="0/esr$(ver_cut 1)"
+LICENSE="MPL-2.0 GPL-2 LGPL-2.1"
+
+IUSE="+clang cpu_flags_arm_neon dbus debug eme-free hardened hwaccel"
+IUSE+=" jack lto +openh264 pgo pulseaudio sndio selinux"
+IUSE+=" +system-av1 +system-harfbuzz +system-icu +system-jpeg +system-libevent +system-libvpx system-png +system-webp"
+IUSE+=" wayland wifi"
+
+# Firefox-only IUSE
+IUSE+=" geckodriver"
+IUSE+=" +gmp-autoupdate"
+IUSE+=" screencast"
+
+REQUIRED_USE="debug? ( !system-av1 )
+	pgo? ( lto )
+	wifi? ( dbus )"
+
+# Firefox-only REQUIRED_USE flags
+REQUIRED_USE+=" screencast? ( wayland )"
+
+BDEPEND="${PYTHON_DEPS}
+	app-arch/unzip
+	app-arch/zip
+	>=dev-util/cbindgen-0.19.0
+	>=net-libs/nodejs-10.23.1
+	virtual/pkgconfig
+	>=virtual/rust-1.51.0
+	|| (
+		(
+			sys-devel/clang:13
+			sys-devel/llvm:13
+			clang? (
+				=sys-devel/lld-13*
+				pgo? ( =sys-libs/compiler-rt-sanitizers-13*[profile] )
+			)
+		)
+		(
+			sys-devel/clang:12
+			sys-devel/llvm:12
+			clang? (
+				=sys-devel/lld-12*
+				pgo? ( =sys-libs/compiler-rt-sanitizers-12*[profile] )
+			)
+		)
+		(
+			sys-devel/clang:11
+			sys-devel/llvm:11
+			clang? (
+				=sys-devel/lld-11*
+				pgo? ( =sys-libs/compiler-rt-sanitizers-11*[profile] )
+			)
+		)
+	)
+	amd64? ( >=dev-lang/nasm-2.13 )
+	x86? ( >=dev-lang/nasm-2.13 )"
+
+CDEPEND="
+	>=dev-libs/nss-3.68
+	>=dev-libs/nspr-4.32
+	dev-libs/atk
+	dev-libs/expat
+	>=x11-libs/cairo-1.10[X]
+	>=x11-libs/gtk+-3.4.0:3[X]
+	x11-libs/gdk-pixbuf
+	>=x11-libs/pango-1.22.0
+	>=media-libs/mesa-10.2:*
+	media-libs/fontconfig
+	>=media-libs/freetype-2.4.10
+	kernel_linux? ( !pulseaudio? ( media-libs/alsa-lib ) )
+	virtual/freedesktop-icon-theme
+	>=x11-libs/pixman-0.19.2
+	>=dev-libs/glib-2.26:2
+	>=sys-libs/zlib-1.2.3
+	>=dev-libs/libffi-3.0.10:=
+	media-video/ffmpeg
+	x11-libs/libX11
+	x11-libs/libxcb
+	x11-libs/libXcomposite
+	x11-libs/libXdamage
+	x11-libs/libXext
+	x11-libs/libXfixes
+	x11-libs/libXrender
+	x11-libs/libXt
+	dbus? (
+		sys-apps/dbus
+		dev-libs/dbus-glib
+	)
+	screencast? ( media-video/pipewire:0/0.3 )
+	system-av1? (
+		>=media-libs/dav1d-0.8.1:=
+		>=media-libs/libaom-1.0.0:=
+	)
+	system-harfbuzz? (
+		>=media-libs/harfbuzz-2.8.1:0=
+		>=media-gfx/graphite2-1.3.13
+	)
+	system-icu? ( >=dev-libs/icu-69.1:= )
+	system-jpeg? ( >=media-libs/libjpeg-turbo-1.2.1 )
+	system-libevent? ( >=dev-libs/libevent-2.0:0=[threads] )
+	system-libvpx? ( >=media-libs/libvpx-1.8.2:0=[postproc] )
+	system-png? ( >=media-libs/libpng-1.6.35:0=[apng] )
+	system-webp? ( >=media-libs/libwebp-1.1.0:0= )
+	wifi? (
+		kernel_linux? (
+			sys-apps/dbus
+			dev-libs/dbus-glib
+			net-misc/networkmanager
+		)
+	)
+	jack? ( virtual/jack )
+	selinux? ( sec-policy/selinux-mozilla )
+	sndio? ( media-sound/sndio )"
+
+RDEPEND="${CDEPEND}
+	jack? ( virtual/jack )
+	openh264? ( media-libs/openh264:*[plugin] )
+	pulseaudio? (
+		|| (
+			media-sound/pulseaudio
+			>=media-sound/apulse-0.1.12-r4
+		)
+	)
+	selinux? ( sec-policy/selinux-mozilla )"
+
+DEPEND="${CDEPEND}
+	x11-libs/libICE
+	x11-libs/libSM
+	pulseaudio? (
+		|| (
+			media-sound/pulseaudio
+			>=media-sound/apulse-0.1.12-r4[sdk]
+		)
+	)
+	wayland? ( >=x11-libs/gtk+-3.11:3[wayland] )
+	amd64? ( virtual/opengl )
+	x86? ( virtual/opengl )"
+
+S="${WORKDIR}/${PN}-${PV%_*}"
+
+# Allow MOZ_GMP_PLUGIN_LIST to be set in an eclass or
+# overridden in the enviromnent (advanced hackers only)
+if [[ -z "${MOZ_GMP_PLUGIN_LIST+set}" ]] ; then
+	MOZ_GMP_PLUGIN_LIST=( gmp-gmpopenh264 gmp-widevinecdm )
+fi
+
+llvm_check_deps() {
+	if ! has_version -b "sys-devel/clang:${LLVM_SLOT}" ; then
+		einfo "sys-devel/clang:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
+		return 1
+	fi
+
+	if use clang ; then
+		if ! has_version -b "=sys-devel/lld-${LLVM_SLOT}*" ; then
+			einfo "=sys-devel/lld-${LLVM_SLOT}* is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
+			return 1
+		fi
+
+		if use pgo ; then
+			if ! has_version -b "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}*" ; then
+				einfo "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}* is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
+				return 1
+			fi
+		fi
+	fi
+
+	einfo "Using LLVM slot ${LLVM_SLOT} to build" >&2
+}
+
+MOZ_LANGS=(
+	af ar ast be bg br ca cak cs cy da de dsb
+	el en-CA en-GB en-US es-AR es-ES et eu
+	fi fr fy-NL ga-IE gd gl he hr hsb hu
+	id is it ja ka kab kk ko lt lv ms nb-NO nl nn-NO
+	pa-IN pl pt-BR pt-PT rm ro ru
+	sk sl sq sr sv-SE th tr uk uz vi zh-CN zh-TW
+)
+
+# Firefox-only LANGS
+MOZ_LANGS+=( ach )
+MOZ_LANGS+=( an )
+MOZ_LANGS+=( az )
+MOZ_LANGS+=( bn )
+MOZ_LANGS+=( bs )
+MOZ_LANGS+=( ca-valencia )
+MOZ_LANGS+=( eo )
+MOZ_LANGS+=( es-CL )
+MOZ_LANGS+=( es-MX )
+MOZ_LANGS+=( fa )
+MOZ_LANGS+=( ff )
+MOZ_LANGS+=( gn )
+MOZ_LANGS+=( gu-IN )
+MOZ_LANGS+=( hi-IN )
+MOZ_LANGS+=( hy-AM )
+MOZ_LANGS+=( ia )
+MOZ_LANGS+=( km )
+MOZ_LANGS+=( kn )
+MOZ_LANGS+=( lij )
+MOZ_LANGS+=( mk )
+MOZ_LANGS+=( mr )
+MOZ_LANGS+=( my )
+MOZ_LANGS+=( ne-NP )
+MOZ_LANGS+=( oc )
+MOZ_LANGS+=( sco )
+MOZ_LANGS+=( si )
+MOZ_LANGS+=( son )
+MOZ_LANGS+=( szl )
+MOZ_LANGS+=( ta )
+MOZ_LANGS+=( te )
+MOZ_LANGS+=( tl )
+MOZ_LANGS+=( trs )
+MOZ_LANGS+=( ur )
+MOZ_LANGS+=( xh )
+
+mozilla_set_globals() {
+	# https://bugs.gentoo.org/587334
+	local MOZ_TOO_REGIONALIZED_FOR_L10N=(
+		fy-NL ga-IE gu-IN hi-IN hy-AM nb-NO ne-NP nn-NO pa-IN sv-SE
+	)
+
+	local lang xflag
+	for lang in "${MOZ_LANGS[@]}" ; do
+		# en and en_US are handled internally
+		if [[ ${lang} == en ]] || [[ ${lang} == en-US ]] ; then
+			continue
+		fi
+
+		# strip region subtag if $lang is in the list
+		if has ${lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then
+			xflag=${lang%%-*}
+		else
+			xflag=${lang}
+		fi
+
+		SRC_URI+=" l10n_${xflag/[_@]/-}? ("
+		SRC_URI+=" ${MOZ_SRC_BASE_URI}/linux-x86_64/xpi/${lang}.xpi -> ${MOZ_P_DISTFILES}-${lang}.xpi"
+		SRC_URI+=" )"
+		IUSE+=" l10n_${xflag/[_@]/-}"
+	done
+}
+mozilla_set_globals
+
+moz_clear_vendor_checksums() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -ne 1 ]] ; then
+		die "${FUNCNAME} requires exact one argument"
+	fi
+
+	einfo "Clearing cargo checksums for ${1} ..."
+
+	sed -i \
+		-e 's/\("files":{\)[^}]*/\1/' \
+		"${S}"/third_party/rust/${1}/.cargo-checksum.json \
+		|| die
+}
+
+moz_install_xpi() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 2 ]] ; then
+		die "${FUNCNAME} requires at least two arguments"
+	fi
+
+	local DESTDIR=${1}
+	shift
+
+	insinto "${DESTDIR}"
+
+	local emid xpi_file xpi_tmp_dir
+	for xpi_file in "${@}" ; do
+		emid=
+		xpi_tmp_dir=$(mktemp -d --tmpdir="${T}")
+
+		# Unpack XPI
+		unzip -qq "${xpi_file}" -d "${xpi_tmp_dir}" || die
+
+		# Determine extension ID
+		if [[ -f "${xpi_tmp_dir}/install.rdf" ]] ; then
+			emid=$(sed -n -e '/install-manifest/,$ { /em:id/!d; s/.*[\">]\([^\"<>]*\)[\"<].*/\1/; p; q }' "${xpi_tmp_dir}/install.rdf")
+			[[ -z "${emid}" ]] && die "failed to determine extension id from install.rdf"
+		elif [[ -f "${xpi_tmp_dir}/manifest.json" ]] ; then
+			emid=$(sed -n -e 's/.*"id": "\([^"]*\)".*/\1/p' "${xpi_tmp_dir}/manifest.json")
+			[[ -z "${emid}" ]] && die "failed to determine extension id from manifest.json"
+		else
+			die "failed to determine extension id"
+		fi
+
+		einfo "Installing ${emid}.xpi into ${ED}${DESTDIR} ..."
+		newins "${xpi_file}" "${emid}.xpi"
+	done
+}
+
+mozconfig_add_options_ac() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 2 ]] ; then
+		die "${FUNCNAME} requires at least two arguments"
+	fi
+
+	local reason=${1}
+	shift
+
+	local option
+	for option in ${@} ; do
+		echo "ac_add_options ${option} # ${reason}" >>${MOZCONFIG}
+	done
+}
+
+mozconfig_add_options_mk() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 2 ]] ; then
+		die "${FUNCNAME} requires at least two arguments"
+	fi
+
+	local reason=${1}
+	shift
+
+	local option
+	for option in ${@} ; do
+		echo "mk_add_options ${option} # ${reason}" >>${MOZCONFIG}
+	done
+}
+
+mozconfig_use_enable() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 1 ]] ; then
+		die "${FUNCNAME} requires at least one arguments"
+	fi
+
+	local flag=$(use_enable "${@}")
+	mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}"
+}
+
+mozconfig_use_with() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 1 ]] ; then
+		die "${FUNCNAME} requires at least one arguments"
+	fi
+
+	local flag=$(use_with "${@}")
+	mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}"
+}
+
+pkg_pretend() {
+	if [[ ${MERGE_TYPE} != binary ]] ; then
+		if use pgo ; then
+			if ! has usersandbox $FEATURES ; then
+				die "You must enable usersandbox as X server can not run as root!"
+			fi
+		fi
+
+		# Ensure we have enough disk space to compile
+		if use pgo || use lto || use debug ; then
+			CHECKREQS_DISK_BUILD="13500M"
+		else
+			CHECKREQS_DISK_BUILD="6400M"
+		fi
+
+		check-reqs_pkg_pretend
+	fi
+}
+
+pkg_setup() {
+	if [[ ${MERGE_TYPE} != binary ]] ; then
+		if use pgo ; then
+			if ! has userpriv ${FEATURES} ; then
+				eerror "Building ${PN} with USE=pgo and FEATURES=-userpriv is not supported!"
+			fi
+		fi
+
+		# Ensure we have enough disk space to compile
+		if use pgo || use lto || use debug ; then
+			CHECKREQS_DISK_BUILD="13500M"
+		else
+			CHECKREQS_DISK_BUILD="6400M"
+		fi
+
+		check-reqs_pkg_setup
+
+		llvm_pkg_setup
+
+		if use clang && use lto ; then
+			local version_lld=$(ld.lld --version 2>/dev/null | awk '{ print $2 }')
+			[[ -n ${version_lld} ]] && version_lld=$(ver_cut 1 "${version_lld}")
+			[[ -z ${version_lld} ]] && die "Failed to read ld.lld version!"
+
+			# temp fix for https://bugs.gentoo.org/768543
+			# we can assume that rust 1.{49,50}.0 always uses llvm 11
+			local version_rust=$(rustc -Vv 2>/dev/null | grep -F -- 'release:' | awk '{ print $2 }')
+			[[ -n ${version_rust} ]] && version_rust=$(ver_cut 1-2 "${version_rust}")
+			[[ -z ${version_rust} ]] && die "Failed to read version from rustc!"
+
+			if ver_test "${version_rust}" -ge "1.49" && ver_test "${version_rust}" -le "1.50" ; then
+				local version_llvm_rust="11"
+			else
+				local version_llvm_rust=$(rustc -Vv 2>/dev/null | grep -F -- 'LLVM version:' | awk '{ print $3 }')
+				[[ -n ${version_llvm_rust} ]] && version_llvm_rust=$(ver_cut 1 "${version_llvm_rust}")
+				[[ -z ${version_llvm_rust} ]] && die "Failed to read used LLVM version from rustc!"
+			fi
+
+			if ver_test "${version_lld}" -ne "${version_llvm_rust}" ; then
+				eerror "Rust is using LLVM version ${version_llvm_rust} but ld.lld version belongs to LLVM version ${version_lld}."
+				eerror "You will be unable to link ${CATEGORY}/${PN}. To proceed you have the following options:"
+				eerror "  - Manually switch rust version using 'eselect rust' to match used LLVM version"
+				eerror "  - Switch to dev-lang/rust[system-llvm] which will guarantee matching version"
+				eerror "  - Build ${CATEGORY}/${PN} without USE=lto"
+				die "LLVM version used by Rust (${version_llvm_rust}) does not match with ld.lld version (${version_lld})!"
+			fi
+		fi
+
+		if ! use clang && [[ $(gcc-major-version) -eq 11 ]] \
+			&& ! has_version -b ">sys-devel/gcc-11.1.0:11" ; then
+			# bug 792705
+			eerror "Using GCC 11 to compile firefox is currently known to be broken (see bug #792705)."
+			die "Set USE=clang or select <gcc-11 to build ${CATEGORY}/${P}."
+		fi
+
+		python-any-r1_pkg_setup
+
+		# Avoid PGO profiling problems due to enviroment leakage
+		# These should *always* be cleaned up anyway
+		unset \
+			DBUS_SESSION_BUS_ADDRESS \
+			DISPLAY \
+			ORBIT_SOCKETDIR \
+			SESSION_MANAGER \
+			XAUTHORITY \
+			XDG_CACHE_HOME \
+			XDG_SESSION_COOKIE
+
+		# Build system is using /proc/self/oom_score_adj, bug #604394
+		addpredict /proc/self/oom_score_adj
+
+		if use pgo ; then
+			# Allow access to GPU during PGO run
+			local ati_cards mesa_cards nvidia_cards render_cards
+			shopt -s nullglob
+
+			ati_cards=$(echo -n /dev/ati/card* | sed 's/ /:/g')
+			if [[ -n "${ati_cards}" ]] ; then
+				addpredict "${ati_cards}"
+			fi
+
+			mesa_cards=$(echo -n /dev/dri/card* | sed 's/ /:/g')
+			if [[ -n "${mesa_cards}" ]] ; then
+				addpredict "${mesa_cards}"
+			fi
+
+			nvidia_cards=$(echo -n /dev/nvidia* | sed 's/ /:/g')
+			if [[ -n "${nvidia_cards}" ]] ; then
+				addpredict "${nvidia_cards}"
+			fi
+
+			render_cards=$(echo -n /dev/dri/renderD128* | sed 's/ /:/g')
+			if [[ -n "${render_cards}" ]] ; then
+				addpredict "${render_cards}"
+			fi
+
+			shopt -u nullglob
+		fi
+
+		if ! mountpoint -q /dev/shm ; then
+			# If /dev/shm is not available, configure is known to fail with
+			# a traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py
+			ewarn "/dev/shm is not mounted -- expect build failures!"
+		fi
+
+		# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
+		# Note: These are for Gentoo Linux use ONLY. For your own distribution, please
+		# get your own set of keys.
+		if [[ -z "${MOZ_API_KEY_GOOGLE+set}" ]] ; then
+			MOZ_API_KEY_GOOGLE="AIzaSyDEAOvatFogGaPi0eTgsV_ZlEzx0ObmepsMzfAc"
+		fi
+
+		if [[ -z "${MOZ_API_KEY_LOCATION+set}" ]] ; then
+			MOZ_API_KEY_LOCATION="AIzaSyB2h2OuRgGaPicUgy5N-5hsZqiPW6sH3n_rptiQ"
+		fi
+
+		# Mozilla API keys (see https://location.services.mozilla.com/api)
+		# Note: These are for Gentoo Linux use ONLY. For your own distribution, please
+		# get your own set of keys.
+		if [[ -z "${MOZ_API_KEY_MOZILLA+set}" ]] ; then
+			MOZ_API_KEY_MOZILLA="edb3d487-3a84-46m0ap1e3-9dfd-92b5efaaa005"
+		fi
+
+		# Ensure we use C locale when building, bug #746215
+		export LC_ALL=C
+	fi
+
+	CONFIG_CHECK="~SECCOMP"
+	WARNING_SECCOMP="CONFIG_SECCOMP not set! This system will be unable to play DRM-protected content."
+	linux-info_pkg_setup
+}
+
+src_unpack() {
+	local _lp_dir="${WORKDIR}/language_packs"
+	local _src_file
+
+	if [[ ! -d "${_lp_dir}" ]] ; then
+		mkdir "${_lp_dir}" || die
+	fi
+
+	for _src_file in ${A} ; do
+		if [[ ${_src_file} == *.xpi ]]; then
+			cp "${DISTDIR}/${_src_file}" "${_lp_dir}" || die "Failed to copy '${_src_file}' to '${_lp_dir}'!"
+		else
+			unpack ${_src_file}
+		fi
+	done
+}
+
+src_prepare() {
+	use lto && rm -v "${WORKDIR}"/firefox-patches/*-LTO-Only-enable-LTO-*.patch
+	eapply "${WORKDIR}/firefox-patches"
+
+	# Allow user to apply any additional patches without modifing ebuild
+	eapply_user
+
+	# Make LTO respect MAKEOPTS
+	sed -i \
+		-e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
+		"${S}"/build/moz.configure/lto-pgo.configure \
+		|| die "sed failed to set num_cores"
+
+	# Make ICU respect MAKEOPTS
+	sed -i \
+		-e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
+		"${S}"/intl/icu_sources_data.py \
+		|| die "sed failed to set num_cores"
+
+	# sed-in toolchain prefix
+	sed -i \
+		-e "s/objdump/${CHOST}-objdump/" \
+		"${S}"/python/mozbuild/mozbuild/configure/check_debug_ranges.py \
+		|| die "sed failed to set toolchain prefix"
+
+	sed -i \
+		-e 's/ccache_stats = None/return None/' \
+		"${S}"/python/mozbuild/mozbuild/controller/building.py \
+		|| die "sed failed to disable ccache stats call"
+
+	einfo "Removing pre-built binaries ..."
+	find "${S}"/third_party -type f \( -name '*.so' -o -name '*.o' \) -print -delete || die
+
+	# Clearing checksums where we have applied patches
+	moz_clear_vendor_checksums target-lexicon-0.9.0
+
+	# Create build dir
+	BUILD_DIR="${WORKDIR}/${PN}_build"
+	mkdir -p "${BUILD_DIR}" || die
+
+	# Write API keys to disk
+	echo -n "${MOZ_API_KEY_GOOGLE//gGaPi/}" > "${S}"/api-google.key || die
+	echo -n "${MOZ_API_KEY_LOCATION//gGaPi/}" > "${S}"/api-location.key || die
+	echo -n "${MOZ_API_KEY_MOZILLA//m0ap1/}" > "${S}"/api-mozilla.key || die
+
+	xdg_src_prepare
+}
+
+src_configure() {
+	# Show flags set at the beginning
+	einfo "Current BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
+	einfo "Current CFLAGS:\t\t${CFLAGS:-no value set}"
+	einfo "Current CXXFLAGS:\t\t${CXXFLAGS:-no value set}"
+	einfo "Current LDFLAGS:\t\t${LDFLAGS:-no value set}"
+	einfo "Current RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}"
+
+	local have_switched_compiler=
+	if use clang && ! tc-is-clang ; then
+		# Force clang
+		einfo "Enforcing the use of clang due to USE=clang ..."
+		have_switched_compiler=yes
+		AR=llvm-ar
+		CC=${CHOST}-clang
+		CXX=${CHOST}-clang++
+		NM=llvm-nm
+		RANLIB=llvm-ranlib
+	elif ! use clang && ! tc-is-gcc ; then
+		# Force gcc
+		have_switched_compiler=yes
+		einfo "Enforcing the use of gcc due to USE=-clang ..."
+		AR=gcc-ar
+		CC=${CHOST}-gcc
+		CXX=${CHOST}-g++
+		NM=gcc-nm
+		RANLIB=gcc-ranlib
+	fi
+
+	if [[ -n "${have_switched_compiler}" ]] ; then
+		# Because we switched active compiler we have to ensure
+		# that no unsupported flags are set
+		strip-unsupported-flags
+	fi
+
+	# Ensure we use correct toolchain
+	export HOST_CC="$(tc-getBUILD_CC)"
+	export HOST_CXX="$(tc-getBUILD_CXX)"
+	tc-export CC CXX LD AR NM OBJDUMP RANLIB PKG_CONFIG
+
+	# Pass the correct toolchain paths through cbindgen
+	if tc-is-cross-compiler ; then
+		export BINDGEN_CFLAGS="${SYSROOT:+--sysroot=${ESYSROOT}} --target=${CHOST} ${BINDGEN_CFLAGS-}"
+	fi
+
+	# Set MOZILLA_FIVE_HOME
+	export MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${PN}"
+
+	# python/mach/mach/mixin/process.py fails to detect SHELL
+	export SHELL="${EPREFIX}/bin/bash"
+
+	# Set state path
+	export MOZBUILD_STATE_PATH="${BUILD_DIR}"
+
+	# Set MOZCONFIG
+	export MOZCONFIG="${S}/.mozconfig"
+
+	# Initialize MOZCONFIG
+	mozconfig_add_options_ac '' --enable-application=browser
+
+	# Set Gentoo defaults
+	export MOZILLA_OFFICIAL=1
+
+	mozconfig_add_options_ac 'Gentoo default' \
+		--allow-addon-sideload \
+		--disable-cargo-incremental \
+		--disable-crashreporter \
+		--disable-install-strip \
+		--disable-strip \
+		--disable-updater \
+		--enable-official-branding \
+		--enable-release \
+		--enable-system-ffi \
+		--enable-system-pixman \
+		--host="${CBUILD:-${CHOST}}" \
+		--libdir="${EPREFIX}/usr/$(get_libdir)" \
+		--prefix="${EPREFIX}/usr" \
+		--target="${CHOST}" \
+		--without-ccache \
+		--with-intl-api \
+		--with-libclang-path="$(llvm-config --libdir)" \
+		--with-system-nspr \
+		--with-system-nss \
+		--with-system-zlib \
+		--with-toolchain-prefix="${CHOST}-" \
+		--with-unsigned-addon-scopes=app,system \
+		--x-includes="${SYSROOT}${EPREFIX}/usr/include" \
+		--x-libraries="${SYSROOT}${EPREFIX}/usr/$(get_libdir)"
+
+	# Set update channel
+	local update_channel=release
+	[[ -n ${MOZ_ESR} ]] && update_channel=esr
+	mozconfig_add_options_ac '' --update-channel=${update_channel}
+
+	if ! use x86 && [[ ${CHOST} != armv*h* ]] ; then
+		mozconfig_add_options_ac '' --enable-rust-simd
+	fi
+
+	if [[ -s "${S}/api-google.key" ]] ; then
+		local key_origin="Gentoo default"
+		if [[ $(cat "${S}/api-google.key" | md5sum | awk '{ print $1 }') != 709560c02f94b41f9ad2c49207be6c54 ]] ; then
+			key_origin="User value"
+		fi
+
+		mozconfig_add_options_ac "${key_origin}" \
+			--with-google-safebrowsing-api-keyfile="${S}/api-google.key"
+	else
+		einfo "Building without Google API key ..."
+	fi
+
+	if [[ -s "${S}/api-location.key" ]] ; then
+		local key_origin="Gentoo default"
+		if [[ $(cat "${S}/api-location.key" | md5sum | awk '{ print $1 }') != ffb7895e35dedf832eb1c5d420ac7420 ]] ; then
+			key_origin="User value"
+		fi
+
+		mozconfig_add_options_ac "${key_origin}" \
+			--with-google-location-service-api-keyfile="${S}/api-location.key"
+	else
+		einfo "Building without Location API key ..."
+	fi
+
+	if [[ -s "${S}/api-mozilla.key" ]] ; then
+		local key_origin="Gentoo default"
+		if [[ $(cat "${S}/api-mozilla.key" | md5sum | awk '{ print $1 }') != 3927726e9442a8e8fa0e46ccc39caa27 ]] ; then
+			key_origin="User value"
+		fi
+
+		mozconfig_add_options_ac "${key_origin}" \
+			--with-mozilla-api-keyfile="${S}/api-mozilla.key"
+	else
+		einfo "Building without Mozilla API key ..."
+	fi
+
+	mozconfig_use_with system-av1
+	mozconfig_use_with system-harfbuzz
+	mozconfig_use_with system-harfbuzz system-graphite2
+	mozconfig_use_with system-icu
+	mozconfig_use_with system-jpeg
+	mozconfig_use_with system-libevent system-libevent "${SYSROOT}${EPREFIX}/usr"
+	mozconfig_use_with system-libvpx
+	mozconfig_use_with system-png
+	mozconfig_use_with system-webp
+
+	mozconfig_use_enable dbus
+
+	use eme-free && mozconfig_add_options_ac '+eme-free' --disable-eme
+
+	mozconfig_use_enable geckodriver
+
+	if use hardened ; then
+		mozconfig_add_options_ac "+hardened" --enable-hardening
+		append-ldflags "-Wl,-z,relro -Wl,-z,now"
+	fi
+
+	mozconfig_use_enable jack
+
+	mozconfig_use_enable pulseaudio
+	# force the deprecated alsa sound code if pulseaudio is disabled
+	if use kernel_linux && ! use pulseaudio ; then
+		mozconfig_add_options_ac '-pulseaudio' --enable-alsa
+	fi
+
+	mozconfig_use_enable sndio
+
+	mozconfig_use_enable wifi necko-wifi
+
+	if use wayland ; then
+		mozconfig_add_options_ac '+wayland' --enable-default-toolkit=cairo-gtk3-wayland
+	else
+		mozconfig_add_options_ac '' --enable-default-toolkit=cairo-gtk3
+	fi
+
+	if use lto ; then
+		if use clang ; then
+			# Upstream only supports lld when using clang
+			mozconfig_add_options_ac "forcing ld=lld due to USE=clang and USE=lto" --enable-linker=lld
+
+			mozconfig_add_options_ac '+lto' --enable-lto=cross
+		else
+			# ld.gold is known to fail:
+			# /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/../../../../x86_64-pc-linux-gnu/bin/ld.gold: internal error in set_xindex, at /var/tmp/portage/sys-devel/binutils-2.37_p1-r1/work/binutils-2.37/gold/object.h:1050
+
+			# ThinLTO is currently broken, see bmo#1644409
+			mozconfig_add_options_ac '+lto' --enable-lto=full
+			mozconfig_add_options_ac "linker is set to bfd" --enable-linker=bfd
+		fi
+
+		if use pgo ; then
+			mozconfig_add_options_ac '+pgo' MOZ_PGO=1
+
+			if use clang ; then
+				# Used in build/pgo/profileserver.py
+				export LLVM_PROFDATA="llvm-profdata"
+			fi
+		fi
+	else
+		# Avoid auto-magic on linker
+		if use clang ; then
+			# This is upstream's default
+			mozconfig_add_options_ac "forcing ld=lld due to USE=clang" --enable-linker=lld
+		else
+			mozconfig_add_options_ac "linker is set to bfd" --enable-linker=bfd
+		fi
+	fi
+
+	# LTO flag was handled via configure
+	filter-flags '-flto*'
+
+	mozconfig_use_enable debug
+	if use debug ; then
+		mozconfig_add_options_ac '+debug' --disable-optimize
+	else
+		if is-flag '-g*' ; then
+			if use clang ; then
+				mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols=$(get-flag '-g*')
+			else
+				mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols
+			fi
+		else
+			mozconfig_add_options_ac 'Gentoo default' --disable-debug-symbols
+		fi
+
+		if is-flag '-O0' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O0
+		elif is-flag '-O4' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O4
+		elif is-flag '-O3' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O3
+		elif is-flag '-O1' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O1
+		elif is-flag '-Os' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-Os
+		else
+			mozconfig_add_options_ac "Gentoo default" --enable-optimize=-O2
+		fi
+	fi
+
+	# Debug flag was handled via configure
+	filter-flags '-g*'
+
+	# Optimization flag was handled via configure
+	filter-flags '-O*'
+
+	# Modifications to better support ARM, bug #553364
+	if use cpu_flags_arm_neon ; then
+		mozconfig_add_options_ac '+cpu_flags_arm_neon' --with-fpu=neon
+
+		if ! tc-is-clang ; then
+			# thumb options aren't supported when using clang, bug 666966
+			mozconfig_add_options_ac '+cpu_flags_arm_neon' \
+				--with-thumb=yes \
+				--with-thumb-interwork=no
+		fi
+	fi
+
+	if [[ ${CHOST} == armv*h* ]] ; then
+		mozconfig_add_options_ac 'CHOST=armv*h*' --with-float-abi=hard
+
+		if ! use system-libvpx ; then
+			sed -i \
+				-e "s|softfp|hard|" \
+				"${S}"/media/libvpx/moz.build \
+				|| die
+		fi
+	fi
+
+	if use clang ; then
+		# https://bugzilla.mozilla.org/show_bug.cgi?id=1482204
+		# https://bugzilla.mozilla.org/show_bug.cgi?id=1483822
+		# toolkit/moz.configure Elfhack section: target.cpu in ('arm', 'x86', 'x86_64')
+		local disable_elf_hack=
+		if use amd64 ; then
+			disable_elf_hack=yes
+		elif use x86 ; then
+			disable_elf_hack=yes
+		elif use arm ; then
+			disable_elf_hack=yes
+		fi
+
+		if [[ -n ${disable_elf_hack} ]] ; then
+			mozconfig_add_options_ac 'elf-hack is broken when using Clang' --disable-elf-hack
+		fi
+	elif tc-is-gcc ; then
+		if ver_test $(gcc-fullversion) -ge 10 ; then
+			einfo "Forcing -fno-tree-loop-vectorize to workaround GCC bug, see bug 758446 ..."
+			append-cxxflags -fno-tree-loop-vectorize
+		fi
+	fi
+
+	# Additional ARCH support
+	case "${ARCH}" in
+		arm)
+			# Reduce the memory requirements for linking
+			if use clang ; then
+				# Nothing to do
+				:;
+			elif tc-ld-is-gold || use lto ; then
+				append-ldflags -Wl,--no-keep-memory
+			else
+				append-ldflags -Wl,--no-keep-memory -Wl,--reduce-memory-overheads
+			fi
+			;;
+	esac
+
+	if ! use elibc_glibc ; then
+		mozconfig_add_options_ac '!elibc_glibc' --disable-jemalloc
+	fi
+
+	# Allow elfhack to work in combination with unstripped binaries
+	# when they would normally be larger than 2GiB.
+	append-ldflags "-Wl,--compress-debug-sections=zlib"
+
+	# Make revdep-rebuild.sh happy; Also required for musl
+	append-ldflags -Wl,-rpath="${MOZILLA_FIVE_HOME}",--enable-new-dtags
+
+	# Pass $MAKEOPTS to build system
+	export MOZ_MAKE_FLAGS="${MAKEOPTS}"
+
+	# Use system's Python environment
+	export MACH_USE_SYSTEM_PYTHON=1
+	export PIP_NO_CACHE_DIR=off
+
+	# Disable notification when build system has finished
+	export MOZ_NOSPAM=1
+
+	# Portage sets XARGS environment variable to "xargs -r" by default which
+	# breaks build system's check_prog() function which doesn't support arguments
+	mozconfig_add_options_ac 'Gentoo default' "XARGS=${EPREFIX}/usr/bin/xargs"
+
+	# Set build dir
+	mozconfig_add_options_mk 'Gentoo default' "MOZ_OBJDIR=${BUILD_DIR}"
+
+	# Show flags we will use
+	einfo "Build BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
+	einfo "Build CFLAGS:\t\t${CFLAGS:-no value set}"
+	einfo "Build CXXFLAGS:\t\t${CXXFLAGS:-no value set}"
+	einfo "Build LDFLAGS:\t\t${LDFLAGS:-no value set}"
+	einfo "Build RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}"
+
+	# Handle EXTRA_CONF and show summary
+	local ac opt hash reason
+
+	# Apply EXTRA_ECONF entries to $MOZCONFIG
+	if [[ -n ${EXTRA_ECONF} ]] ; then
+		IFS=\! read -a ac <<<${EXTRA_ECONF// --/\!}
+		for opt in "${ac[@]}"; do
+			mozconfig_add_options_ac "EXTRA_ECONF" --${opt#--}
+		done
+	fi
+
+	echo
+	echo "=========================================================="
+	echo "Building ${PF} with the following configuration"
+	grep ^ac_add_options "${MOZCONFIG}" | while read ac opt hash reason; do
+		[[ -z ${hash} || ${hash} == \# ]] \
+			|| die "error reading mozconfig: ${ac} ${opt} ${hash} ${reason}"
+		printf "    %-30s  %s\n" "${opt}" "${reason:-mozilla.org default}"
+	done
+	echo "=========================================================="
+	echo
+
+	./mach configure || die
+}
+
+src_compile() {
+	local virtx_cmd=
+
+	if use pgo ; then
+		virtx_cmd=virtx
+
+		# Reset and cleanup environment variables used by GNOME/XDG
+		gnome2_environment_reset
+
+		addpredict /root
+	fi
+
+	local -x GDK_BACKEND=x11
+
+	${virtx_cmd} ./mach build --verbose \
+		|| die
+}
+
+src_install() {
+	# xpcshell is getting called during install
+	pax-mark m \
+		"${BUILD_DIR}"/dist/bin/xpcshell \
+		"${BUILD_DIR}"/dist/bin/${PN} \
+		"${BUILD_DIR}"/dist/bin/plugin-container
+
+	DESTDIR="${D}" ./mach install || die
+
+	# Upstream cannot ship symlink but we can (bmo#658850)
+	rm "${ED}${MOZILLA_FIVE_HOME}/${PN}-bin" || die
+	dosym ${PN} ${MOZILLA_FIVE_HOME}/${PN}-bin
+
+	# Don't install llvm-symbolizer from sys-devel/llvm package
+	if [[ -f "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" ]] ; then
+		rm -v "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" || die
+	fi
+
+	# Install policy (currently only used to disable application updates)
+	insinto "${MOZILLA_FIVE_HOME}/distribution"
+	newins "${FILESDIR}"/distribution.ini distribution.ini
+	newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
+
+	# Install system-wide preferences
+	local PREFS_DIR="${MOZILLA_FIVE_HOME}/browser/defaults/preferences"
+	insinto "${PREFS_DIR}"
+	newins "${FILESDIR}"/gentoo-default-prefs.js gentoo-prefs.js
+
+	local GENTOO_PREFS="${ED}${PREFS_DIR}/gentoo-prefs.js"
+
+	# Set dictionary path to use system hunspell
+	cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set spellchecker.dictionary_path pref"
+	pref("spellchecker.dictionary_path",       "${EPREFIX}/usr/share/myspell");
+	EOF
+
+	# Force hwaccel prefs if USE=hwaccel is enabled
+	if use hwaccel ; then
+		cat "${FILESDIR}"/gentoo-hwaccel-prefs.js \
+		>>"${GENTOO_PREFS}" \
+		|| die "failed to add prefs to force hardware-accelerated rendering to all-gentoo.js"
+	fi
+
+	if ! use gmp-autoupdate ; then
+		local plugin
+		for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do
+			einfo "Disabling auto-update for ${plugin} plugin ..."
+			cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to disable autoupdate for ${plugin} media plugin"
+			pref("media.${plugin}.autoupdate",   false);
+			EOF
+		done
+	fi
+
+	# Force the graphite pref if USE=system-harfbuzz is enabled, since the pref cannot disable it
+	if use system-harfbuzz ; then
+		cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set gfx.font_rendering.graphite.enabled pref"
+		sticky_pref("gfx.font_rendering.graphite.enabled", true);
+		EOF
+	fi
+
+	# Install language packs
+	local langpacks=( $(find "${WORKDIR}/language_packs" -type f -name '*.xpi') )
+	if [[ -n "${langpacks}" ]] ; then
+		moz_install_xpi "${MOZILLA_FIVE_HOME}/distribution/extensions" "${langpacks[@]}"
+	fi
+
+	# Install geckodriver
+	if use geckodriver ; then
+		einfo "Installing geckodriver into ${ED}${MOZILLA_FIVE_HOME} ..."
+		pax-mark m "${BUILD_DIR}"/dist/bin/geckodriver
+		exeinto "${MOZILLA_FIVE_HOME}"
+		doexe "${BUILD_DIR}"/dist/bin/geckodriver
+
+		dosym ${MOZILLA_FIVE_HOME}/geckodriver /usr/bin/geckodriver
+	fi
+
+	# Install icons
+	local icon_srcdir="${S}/browser/branding/official"
+	local icon_symbolic_file="${FILESDIR}/icon/firefox-symbolic.svg"
+
+	insinto /usr/share/icons/hicolor/symbolic/apps
+	newins "${icon_symbolic_file}" ${PN}-symbolic.svg
+
+	local icon size
+	for icon in "${icon_srcdir}"/default*.png ; do
+		size=${icon%.png}
+		size=${size##*/default}
+
+		if [[ ${size} -eq 48 ]] ; then
+			newicon "${icon}" ${PN}.png
+		fi
+
+		newicon -s ${size} "${icon}" ${PN}.png
+	done
+
+	# Install menu
+	local app_name="Mozilla ${MOZ_PN^}"
+	local desktop_file="${FILESDIR}/icon/${PN}-r3.desktop"
+	local desktop_filename="${PN}.desktop"
+	local exec_command="${PN}"
+	local icon="${PN}"
+	local use_wayland="false"
+
+	if use wayland ; then
+		use_wayland="true"
+	fi
+
+	cp "${desktop_file}" "${WORKDIR}/${PN}.desktop-template" || die
+
+	sed -i \
+		-e "s:@NAME@:${app_name}:" \
+		-e "s:@EXEC@:${exec_command}:" \
+		-e "s:@ICON@:${icon}:" \
+		"${WORKDIR}/${PN}.desktop-template" \
+		|| die
+
+	newmenu "${WORKDIR}/${PN}.desktop-template" "${desktop_filename}"
+
+	rm "${WORKDIR}/${PN}.desktop-template" || die
+
+	# Install wrapper script
+	[[ -f "${ED}/usr/bin/${PN}" ]] && rm "${ED}/usr/bin/${PN}"
+	newbin "${FILESDIR}/${PN}-r1.sh" ${PN}
+
+	# Update wrapper
+	sed -i \
+		-e "s:@PREFIX@:${EPREFIX}/usr:" \
+		-e "s:@MOZ_FIVE_HOME@:${MOZILLA_FIVE_HOME}:" \
+		-e "s:@APULSELIB_DIR@:${apulselib}:" \
+		-e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \
+		"${ED}/usr/bin/${PN}" \
+		|| die
+}
+
+pkg_preinst() {
+	xdg_pkg_preinst
+
+	# If the apulse libs are available in MOZILLA_FIVE_HOME then apulse
+	# does not need to be forced into the LD_LIBRARY_PATH
+	if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then
+		einfo "APULSE found; Generating library symlinks for sound support ..."
+		local lib
+		pushd "${ED}${MOZILLA_FIVE_HOME}" &>/dev/null || die
+		for lib in ../apulse/libpulse{.so{,.0},-simple.so{,.0}} ; do
+			# A quickpkg rolled by hand will grab symlinks as part of the package,
+			# so we need to avoid creating them if they already exist.
+			if [[ ! -L ${lib##*/} ]] ; then
+				ln -s "${lib}" ${lib##*/} || die
+			fi
+		done
+		popd &>/dev/null || die
+	fi
+}
+
+pkg_postinst() {
+	xdg_pkg_postinst
+
+	if ! use gmp-autoupdate ; then
+		elog "USE='-gmp-autoupdate' has disabled the following plugins from updating or"
+		elog "installing into new profiles:"
+		local plugin
+		for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do
+			elog "\t ${plugin}"
+		done
+		elog
+	fi
+
+	if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then
+		elog "Apulse was detected at merge time on this system and so it will always be"
+		elog "used for sound.  If you wish to use pulseaudio instead please unmerge"
+		elog "media-sound/apulse."
+		elog
+	fi
+
+	local show_doh_information
+	local show_normandy_information
+	local show_shortcut_information
+
+	if [[ -z "${REPLACING_VERSIONS}" ]] ; then
+		# New install; Tell user that DoH is disabled by default
+		show_doh_information=yes
+		show_normandy_information=yes
+		show_shortcut_information=no
+	else
+		local replacing_version
+		for replacing_version in ${REPLACING_VERSIONS} ; do
+			if ver_test "${replacing_version}" -lt 91.0 ; then
+				# Tell user that we no longer install a shortcut
+				# per supported display protocol
+				show_shortcut_information=yes
+			fi
+		done
+	fi
+
+	if [[ -n "${show_doh_information}" ]] ; then
+		elog
+		elog "Note regarding Trusted Recursive Resolver aka DNS-over-HTTPS (DoH):"
+		elog "Due to privacy concerns (encrypting DNS might be a good thing, sending all"
+		elog "DNS traffic to Cloudflare by default is not a good idea and applications"
+		elog "should respect OS configured settings), \"network.trr.mode\" was set to 5"
+		elog "(\"Off by choice\") by default."
+		elog "You can enable DNS-over-HTTPS in ${PN^}'s preferences."
+	fi
+
+	# bug 713782
+	if [[ -n "${show_normandy_information}" ]] ; then
+		elog
+		elog "Upstream operates a service named Normandy which allows Mozilla to"
+		elog "push changes for default settings or even install new add-ons remotely."
+		elog "While this can be useful to address problems like 'Armagadd-on 2.0' or"
+		elog "revert previous decisions to disable TLS 1.0/1.1, privacy and security"
+		elog "concerns prevail, which is why we have switched off the use of this"
+		elog "service by default."
+		elog
+		elog "To re-enable this service set"
+		elog
+		elog "    app.normandy.enabled=true"
+		elog
+		elog "in about:config."
+	fi
+
+	if [[ -n "${show_shortcut_information}" ]] ; then
+		elog
+		elog "Since ${PN}-91.0 we no longer install multiple shortcuts for"
+		elog "each supported display protocol.  Instead we will only install"
+		elog "one generic Mozilla ${PN^} shortcut."
+		elog "If you still want to be able to select between running Mozilla ${PN^}"
+		elog "on X11 or Wayland, you have to re-create these shortcuts on your own."
+	fi
+}

diff --git a/www-client/firefox/firefox-95.0-r1.ebuild b/www-client/firefox/firefox-95.0-r1.ebuild
new file mode 100644
index 0000000..e63a3ee
--- /dev/null
+++ b/www-client/firefox/firefox-95.0-r1.ebuild
@@ -0,0 +1,1237 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+FIREFOX_PATCHSET="firefox-95-patches-02.tar.xz"
+
+LLVM_MAX_SLOT=13
+
+PYTHON_COMPAT=( python3_{7..10} )
+PYTHON_REQ_USE="ncurses,sqlite,ssl"
+
+WANT_AUTOCONF="2.1"
+
+VIRTUALX_REQUIRED="pgo"
+
+MOZ_ESR=
+
+MOZ_PV=${PV}
+MOZ_PV_SUFFIX=
+if [[ ${PV} =~ (_(alpha|beta|rc).*)$ ]] ; then
+	MOZ_PV_SUFFIX=${BASH_REMATCH[1]}
+
+	# Convert the ebuild version to the upstream Mozilla version
+	MOZ_PV="${MOZ_PV/_alpha/a}" # Handle alpha for SRC_URI
+	MOZ_PV="${MOZ_PV/_beta/b}"  # Handle beta for SRC_URI
+	MOZ_PV="${MOZ_PV%%_rc*}"    # Handle rc for SRC_URI
+fi
+
+if [[ -n ${MOZ_ESR} ]] ; then
+	# ESR releases have slightly different version numbers
+	MOZ_PV="${MOZ_PV}esr"
+fi
+
+MOZ_PN="${PN%-bin}"
+MOZ_P="${MOZ_PN}-${MOZ_PV}"
+MOZ_PV_DISTFILES="${MOZ_PV}${MOZ_PV_SUFFIX}"
+MOZ_P_DISTFILES="${MOZ_PN}-${MOZ_PV_DISTFILES}"
+
+inherit autotools check-reqs desktop flag-o-matic gnome2-utils linux-info \
+	llvm multiprocessing pax-utils python-any-r1 toolchain-funcs \
+	virtualx xdg
+
+MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}"
+
+if [[ ${PV} == *_rc* ]] ; then
+	MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/candidates/${MOZ_PV}-candidates/build${PV##*_rc}"
+fi
+
+PATCH_URIS=(
+	https://dev.gentoo.org/~{polynomial-c,whissi}/mozilla/patchsets/${FIREFOX_PATCHSET}
+)
+
+SRC_URI="${MOZ_SRC_BASE_URI}/source/${MOZ_P}.source.tar.xz -> ${MOZ_P_DISTFILES}.source.tar.xz
+	${PATCH_URIS[@]}"
+
+DESCRIPTION="Firefox Web Browser"
+HOMEPAGE="https://www.mozilla.com/firefox"
+
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+
+SLOT="0/$(ver_cut 1)"
+LICENSE="MPL-2.0 GPL-2 LGPL-2.1"
+
+IUSE="+clang cpu_flags_arm_neon dbus debug eme-free hardened hwaccel"
+IUSE+=" jack lto +openh264 pgo pulseaudio sndio selinux"
+IUSE+=" +system-av1 +system-harfbuzz +system-icu +system-jpeg +system-libevent +system-libvpx system-png +system-webp"
+IUSE+=" wayland wifi"
+
+# Firefox-only IUSE
+IUSE+=" geckodriver"
+IUSE+=" +gmp-autoupdate"
+IUSE+=" screencast"
+
+REQUIRED_USE="debug? ( !system-av1 )
+	pgo? ( lto )
+	wayland? ( dbus )
+	wifi? ( dbus )"
+
+# Firefox-only REQUIRED_USE flags
+REQUIRED_USE+=" screencast? ( wayland )"
+
+BDEPEND="${PYTHON_DEPS}
+	app-arch/unzip
+	app-arch/zip
+	>=dev-util/cbindgen-0.19.0
+	>=net-libs/nodejs-10.23.1
+	virtual/pkgconfig
+	>=virtual/rust-1.53.0
+	|| (
+		(
+			sys-devel/clang:13
+			sys-devel/llvm:13
+			clang? (
+				=sys-devel/lld-13*
+				pgo? ( =sys-libs/compiler-rt-sanitizers-13*[profile] )
+			)
+		)
+		(
+			sys-devel/clang:12
+			sys-devel/llvm:12
+			clang? (
+				=sys-devel/lld-12*
+				pgo? ( =sys-libs/compiler-rt-sanitizers-12*[profile] )
+			)
+		)
+		(
+			sys-devel/clang:11
+			sys-devel/llvm:11
+			clang? (
+				=sys-devel/lld-11*
+				pgo? ( =sys-libs/compiler-rt-sanitizers-11*[profile] )
+			)
+		)
+	)
+	amd64? ( >=dev-lang/nasm-2.13 )
+	x86? ( >=dev-lang/nasm-2.13 )"
+
+CDEPEND="
+	>=dev-libs/nss-3.72
+	>=dev-libs/nspr-4.32
+	dev-libs/atk
+	dev-libs/expat
+	>=x11-libs/cairo-1.10[X]
+	>=x11-libs/gtk+-3.4.0:3[X]
+	x11-libs/gdk-pixbuf
+	>=x11-libs/pango-1.22.0
+	>=media-libs/mesa-10.2:*
+	media-libs/fontconfig
+	>=media-libs/freetype-2.4.10
+	kernel_linux? ( !pulseaudio? ( media-libs/alsa-lib ) )
+	virtual/freedesktop-icon-theme
+	>=x11-libs/pixman-0.19.2
+	>=dev-libs/glib-2.26:2
+	>=sys-libs/zlib-1.2.3
+	>=dev-libs/libffi-3.0.10:=
+	media-video/ffmpeg
+	x11-libs/libX11
+	x11-libs/libxcb
+	x11-libs/libXcomposite
+	x11-libs/libXdamage
+	x11-libs/libXext
+	x11-libs/libXfixes
+	x11-libs/libXrandr
+	x11-libs/libXrender
+	dbus? (
+		sys-apps/dbus
+		dev-libs/dbus-glib
+	)
+	screencast? ( media-video/pipewire:0/0.3 )
+	system-av1? (
+		>=media-libs/dav1d-0.9.3:=
+		>=media-libs/libaom-1.0.0:=
+	)
+	system-harfbuzz? (
+		>=media-libs/harfbuzz-2.8.1:0=
+		>=media-gfx/graphite2-1.3.13
+	)
+	system-icu? ( >=dev-libs/icu-69.1:= )
+	system-jpeg? ( >=media-libs/libjpeg-turbo-1.2.1 )
+	system-libevent? ( >=dev-libs/libevent-2.0:0=[threads] )
+	system-libvpx? ( >=media-libs/libvpx-1.8.2:0=[postproc] )
+	system-png? ( >=media-libs/libpng-1.6.35:0=[apng] )
+	system-webp? ( >=media-libs/libwebp-1.1.0:0= )
+	wifi? (
+		kernel_linux? (
+			sys-apps/dbus
+			dev-libs/dbus-glib
+			net-misc/networkmanager
+		)
+	)
+	jack? ( virtual/jack )
+	selinux? ( sec-policy/selinux-mozilla )
+	sndio? ( media-sound/sndio )"
+
+RDEPEND="${CDEPEND}
+	jack? ( virtual/jack )
+	openh264? ( media-libs/openh264:*[plugin] )
+	pulseaudio? (
+		|| (
+			media-sound/pulseaudio
+			>=media-sound/apulse-0.1.12-r4
+		)
+	)
+	selinux? ( sec-policy/selinux-mozilla )"
+
+DEPEND="${CDEPEND}
+	x11-libs/libICE
+	x11-libs/libSM
+	pulseaudio? (
+		|| (
+			media-sound/pulseaudio
+			>=media-sound/apulse-0.1.12-r4[sdk]
+		)
+	)
+	wayland? ( >=x11-libs/gtk+-3.11:3[wayland] )
+	amd64? ( virtual/opengl )
+	x86? ( virtual/opengl )"
+
+S="${WORKDIR}/${PN}-${PV%_*}"
+
+# Allow MOZ_GMP_PLUGIN_LIST to be set in an eclass or
+# overridden in the enviromnent (advanced hackers only)
+if [[ -z "${MOZ_GMP_PLUGIN_LIST+set}" ]] ; then
+	MOZ_GMP_PLUGIN_LIST=( gmp-gmpopenh264 gmp-widevinecdm )
+fi
+
+llvm_check_deps() {
+	if ! has_version -b "sys-devel/clang:${LLVM_SLOT}" ; then
+		einfo "sys-devel/clang:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
+		return 1
+	fi
+
+	if use clang ; then
+		if ! has_version -b "=sys-devel/lld-${LLVM_SLOT}*" ; then
+			einfo "=sys-devel/lld-${LLVM_SLOT}* is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
+			return 1
+		fi
+
+		if use pgo ; then
+			if ! has_version -b "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}*" ; then
+				einfo "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}* is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
+				return 1
+			fi
+		fi
+	fi
+
+	einfo "Using LLVM slot ${LLVM_SLOT} to build" >&2
+}
+
+MOZ_LANGS=(
+	af ar ast be bg br ca cak cs cy da de dsb
+	el en-CA en-GB en-US es-AR es-ES et eu
+	fi fr fy-NL ga-IE gd gl he hr hsb hu
+	id is it ja ka kab kk ko lt lv ms nb-NO nl nn-NO
+	pa-IN pl pt-BR pt-PT rm ro ru
+	sk sl sq sr sv-SE th tr uk uz vi zh-CN zh-TW
+)
+
+# Firefox-only LANGS
+MOZ_LANGS+=( ach )
+MOZ_LANGS+=( an )
+MOZ_LANGS+=( az )
+MOZ_LANGS+=( bn )
+MOZ_LANGS+=( bs )
+MOZ_LANGS+=( ca-valencia )
+MOZ_LANGS+=( eo )
+MOZ_LANGS+=( es-CL )
+MOZ_LANGS+=( es-MX )
+MOZ_LANGS+=( fa )
+MOZ_LANGS+=( ff )
+MOZ_LANGS+=( gn )
+MOZ_LANGS+=( gu-IN )
+MOZ_LANGS+=( hi-IN )
+MOZ_LANGS+=( hy-AM )
+MOZ_LANGS+=( ia )
+MOZ_LANGS+=( km )
+MOZ_LANGS+=( kn )
+MOZ_LANGS+=( lij )
+MOZ_LANGS+=( mk )
+MOZ_LANGS+=( mr )
+MOZ_LANGS+=( my )
+MOZ_LANGS+=( ne-NP )
+MOZ_LANGS+=( oc )
+MOZ_LANGS+=( sco )
+MOZ_LANGS+=( si )
+MOZ_LANGS+=( son )
+MOZ_LANGS+=( szl )
+MOZ_LANGS+=( ta )
+MOZ_LANGS+=( te )
+MOZ_LANGS+=( tl )
+MOZ_LANGS+=( trs )
+MOZ_LANGS+=( ur )
+MOZ_LANGS+=( xh )
+
+mozilla_set_globals() {
+	# https://bugs.gentoo.org/587334
+	local MOZ_TOO_REGIONALIZED_FOR_L10N=(
+		fy-NL ga-IE gu-IN hi-IN hy-AM nb-NO ne-NP nn-NO pa-IN sv-SE
+	)
+
+	local lang xflag
+	for lang in "${MOZ_LANGS[@]}" ; do
+		# en and en_US are handled internally
+		if [[ ${lang} == en ]] || [[ ${lang} == en-US ]] ; then
+			continue
+		fi
+
+		# strip region subtag if $lang is in the list
+		if has ${lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then
+			xflag=${lang%%-*}
+		else
+			xflag=${lang}
+		fi
+
+		SRC_URI+=" l10n_${xflag/[_@]/-}? ("
+		SRC_URI+=" ${MOZ_SRC_BASE_URI}/linux-x86_64/xpi/${lang}.xpi -> ${MOZ_P_DISTFILES}-${lang}.xpi"
+		SRC_URI+=" )"
+		IUSE+=" l10n_${xflag/[_@]/-}"
+	done
+}
+mozilla_set_globals
+
+moz_clear_vendor_checksums() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -ne 1 ]] ; then
+		die "${FUNCNAME} requires exact one argument"
+	fi
+
+	einfo "Clearing cargo checksums for ${1} ..."
+
+	sed -i \
+		-e 's/\("files":{\)[^}]*/\1/' \
+		"${S}"/third_party/rust/${1}/.cargo-checksum.json \
+		|| die
+}
+
+moz_install_xpi() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 2 ]] ; then
+		die "${FUNCNAME} requires at least two arguments"
+	fi
+
+	local DESTDIR=${1}
+	shift
+
+	insinto "${DESTDIR}"
+
+	local emid xpi_file xpi_tmp_dir
+	for xpi_file in "${@}" ; do
+		emid=
+		xpi_tmp_dir=$(mktemp -d --tmpdir="${T}")
+
+		# Unpack XPI
+		unzip -qq "${xpi_file}" -d "${xpi_tmp_dir}" || die
+
+		# Determine extension ID
+		if [[ -f "${xpi_tmp_dir}/install.rdf" ]] ; then
+			emid=$(sed -n -e '/install-manifest/,$ { /em:id/!d; s/.*[\">]\([^\"<>]*\)[\"<].*/\1/; p; q }' "${xpi_tmp_dir}/install.rdf")
+			[[ -z "${emid}" ]] && die "failed to determine extension id from install.rdf"
+		elif [[ -f "${xpi_tmp_dir}/manifest.json" ]] ; then
+			emid=$(sed -n -e 's/.*"id": "\([^"]*\)".*/\1/p' "${xpi_tmp_dir}/manifest.json")
+			[[ -z "${emid}" ]] && die "failed to determine extension id from manifest.json"
+		else
+			die "failed to determine extension id"
+		fi
+
+		einfo "Installing ${emid}.xpi into ${ED}${DESTDIR} ..."
+		newins "${xpi_file}" "${emid}.xpi"
+	done
+}
+
+mozconfig_add_options_ac() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 2 ]] ; then
+		die "${FUNCNAME} requires at least two arguments"
+	fi
+
+	local reason=${1}
+	shift
+
+	local option
+	for option in ${@} ; do
+		echo "ac_add_options ${option} # ${reason}" >>${MOZCONFIG}
+	done
+}
+
+mozconfig_add_options_mk() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 2 ]] ; then
+		die "${FUNCNAME} requires at least two arguments"
+	fi
+
+	local reason=${1}
+	shift
+
+	local option
+	for option in ${@} ; do
+		echo "mk_add_options ${option} # ${reason}" >>${MOZCONFIG}
+	done
+}
+
+mozconfig_use_enable() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 1 ]] ; then
+		die "${FUNCNAME} requires at least one arguments"
+	fi
+
+	local flag=$(use_enable "${@}")
+	mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}"
+}
+
+mozconfig_use_with() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${#} -lt 1 ]] ; then
+		die "${FUNCNAME} requires at least one arguments"
+	fi
+
+	local flag=$(use_with "${@}")
+	mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}"
+}
+
+pkg_pretend() {
+	if [[ ${MERGE_TYPE} != binary ]] ; then
+		if use pgo ; then
+			if ! has usersandbox $FEATURES ; then
+				die "You must enable usersandbox as X server can not run as root!"
+			fi
+		fi
+
+		# Ensure we have enough disk space to compile
+		if use pgo || use lto || use debug ; then
+			CHECKREQS_DISK_BUILD="13500M"
+		else
+			CHECKREQS_DISK_BUILD="6400M"
+		fi
+
+		check-reqs_pkg_pretend
+	fi
+}
+
+pkg_setup() {
+	if [[ ${MERGE_TYPE} != binary ]] ; then
+		if use pgo ; then
+			if ! has userpriv ${FEATURES} ; then
+				eerror "Building ${PN} with USE=pgo and FEATURES=-userpriv is not supported!"
+			fi
+		fi
+
+		# Ensure we have enough disk space to compile
+		if use pgo || use lto || use debug ; then
+			CHECKREQS_DISK_BUILD="13500M"
+		else
+			CHECKREQS_DISK_BUILD="6400M"
+		fi
+
+		check-reqs_pkg_setup
+
+		llvm_pkg_setup
+
+		if use clang && use lto ; then
+			local version_lld=$(ld.lld --version 2>/dev/null | awk '{ print $2 }')
+			[[ -n ${version_lld} ]] && version_lld=$(ver_cut 1 "${version_lld}")
+			[[ -z ${version_lld} ]] && die "Failed to read ld.lld version!"
+
+			# temp fix for https://bugs.gentoo.org/768543
+			# we can assume that rust 1.{49,50}.0 always uses llvm 11
+			local version_rust=$(rustc -Vv 2>/dev/null | grep -F -- 'release:' | awk '{ print $2 }')
+			[[ -n ${version_rust} ]] && version_rust=$(ver_cut 1-2 "${version_rust}")
+			[[ -z ${version_rust} ]] && die "Failed to read version from rustc!"
+
+			if ver_test "${version_rust}" -ge "1.49" && ver_test "${version_rust}" -le "1.50" ; then
+				local version_llvm_rust="11"
+			else
+				local version_llvm_rust=$(rustc -Vv 2>/dev/null | grep -F -- 'LLVM version:' | awk '{ print $3 }')
+				[[ -n ${version_llvm_rust} ]] && version_llvm_rust=$(ver_cut 1 "${version_llvm_rust}")
+				[[ -z ${version_llvm_rust} ]] && die "Failed to read used LLVM version from rustc!"
+			fi
+
+			if ver_test "${version_lld}" -ne "${version_llvm_rust}" ; then
+				eerror "Rust is using LLVM version ${version_llvm_rust} but ld.lld version belongs to LLVM version ${version_lld}."
+				eerror "You will be unable to link ${CATEGORY}/${PN}. To proceed you have the following options:"
+				eerror "  - Manually switch rust version using 'eselect rust' to match used LLVM version"
+				eerror "  - Switch to dev-lang/rust[system-llvm] which will guarantee matching version"
+				eerror "  - Build ${CATEGORY}/${PN} without USE=lto"
+				die "LLVM version used by Rust (${version_llvm_rust}) does not match with ld.lld version (${version_lld})!"
+			fi
+		fi
+
+		if ! use clang && [[ $(gcc-major-version) -eq 11 ]] \
+			&& ! has_version -b ">sys-devel/gcc-11.1.0:11" ; then
+			# bug 792705
+			eerror "Using GCC 11 to compile firefox is currently known to be broken (see bug #792705)."
+			die "Set USE=clang or select <gcc-11 to build ${CATEGORY}/${P}."
+		fi
+
+		python-any-r1_pkg_setup
+
+		# Avoid PGO profiling problems due to enviroment leakage
+		# These should *always* be cleaned up anyway
+		unset \
+			DBUS_SESSION_BUS_ADDRESS \
+			DISPLAY \
+			ORBIT_SOCKETDIR \
+			SESSION_MANAGER \
+			XAUTHORITY \
+			XDG_CACHE_HOME \
+			XDG_SESSION_COOKIE
+
+		# Build system is using /proc/self/oom_score_adj, bug #604394
+		addpredict /proc/self/oom_score_adj
+
+		if use pgo ; then
+			# Allow access to GPU during PGO run
+			local ati_cards mesa_cards nvidia_cards render_cards
+			shopt -s nullglob
+
+			ati_cards=$(echo -n /dev/ati/card* | sed 's/ /:/g')
+			if [[ -n "${ati_cards}" ]] ; then
+				addpredict "${ati_cards}"
+			fi
+
+			mesa_cards=$(echo -n /dev/dri/card* | sed 's/ /:/g')
+			if [[ -n "${mesa_cards}" ]] ; then
+				addpredict "${mesa_cards}"
+			fi
+
+			nvidia_cards=$(echo -n /dev/nvidia* | sed 's/ /:/g')
+			if [[ -n "${nvidia_cards}" ]] ; then
+				addpredict "${nvidia_cards}"
+			fi
+
+			render_cards=$(echo -n /dev/dri/renderD128* | sed 's/ /:/g')
+			if [[ -n "${render_cards}" ]] ; then
+				addpredict "${render_cards}"
+			fi
+
+			shopt -u nullglob
+		fi
+
+		if ! mountpoint -q /dev/shm ; then
+			# If /dev/shm is not available, configure is known to fail with
+			# a traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py
+			ewarn "/dev/shm is not mounted -- expect build failures!"
+		fi
+
+		# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
+		# Note: These are for Gentoo Linux use ONLY. For your own distribution, please
+		# get your own set of keys.
+		if [[ -z "${MOZ_API_KEY_GOOGLE+set}" ]] ; then
+			MOZ_API_KEY_GOOGLE="AIzaSyDEAOvatFogGaPi0eTgsV_ZlEzx0ObmepsMzfAc"
+		fi
+
+		if [[ -z "${MOZ_API_KEY_LOCATION+set}" ]] ; then
+			MOZ_API_KEY_LOCATION="AIzaSyB2h2OuRgGaPicUgy5N-5hsZqiPW6sH3n_rptiQ"
+		fi
+
+		# Mozilla API keys (see https://location.services.mozilla.com/api)
+		# Note: These are for Gentoo Linux use ONLY. For your own distribution, please
+		# get your own set of keys.
+		if [[ -z "${MOZ_API_KEY_MOZILLA+set}" ]] ; then
+			MOZ_API_KEY_MOZILLA="edb3d487-3a84-46m0ap1e3-9dfd-92b5efaaa005"
+		fi
+
+		# Ensure we use C locale when building, bug #746215
+		export LC_ALL=C
+	fi
+
+	CONFIG_CHECK="~SECCOMP"
+	WARNING_SECCOMP="CONFIG_SECCOMP not set! This system will be unable to play DRM-protected content."
+	linux-info_pkg_setup
+}
+
+src_unpack() {
+	local _lp_dir="${WORKDIR}/language_packs"
+	local _src_file
+
+	if [[ ! -d "${_lp_dir}" ]] ; then
+		mkdir "${_lp_dir}" || die
+	fi
+
+	for _src_file in ${A} ; do
+		if [[ ${_src_file} == *.xpi ]]; then
+			cp "${DISTDIR}/${_src_file}" "${_lp_dir}" || die "Failed to copy '${_src_file}' to '${_lp_dir}'!"
+		else
+			unpack ${_src_file}
+		fi
+	done
+}
+
+src_prepare() {
+	use lto && rm -v "${WORKDIR}"/firefox-patches/*-LTO-Only-enable-LTO-*.patch
+	eapply "${WORKDIR}/firefox-patches"
+
+	# Allow user to apply any additional patches without modifing ebuild
+	eapply_user
+
+	# Make LTO respect MAKEOPTS
+	sed -i \
+		-e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
+		"${S}"/build/moz.configure/lto-pgo.configure \
+		|| die "sed failed to set num_cores"
+
+	# Make ICU respect MAKEOPTS
+	sed -i \
+		-e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
+		"${S}"/intl/icu_sources_data.py \
+		|| die "sed failed to set num_cores"
+
+	# sed-in toolchain prefix
+	sed -i \
+		-e "s/objdump/${CHOST}-objdump/" \
+		"${S}"/python/mozbuild/mozbuild/configure/check_debug_ranges.py \
+		|| die "sed failed to set toolchain prefix"
+
+	sed -i \
+		-e 's/ccache_stats = None/return None/' \
+		"${S}"/python/mozbuild/mozbuild/controller/building.py \
+		|| die "sed failed to disable ccache stats call"
+
+	einfo "Removing pre-built binaries ..."
+	find "${S}"/third_party -type f \( -name '*.so' -o -name '*.o' \) -print -delete || die
+
+	# Clearing checksums where we have applied patches
+	moz_clear_vendor_checksums target-lexicon-0.9.0
+
+	# Create build dir
+	BUILD_DIR="${WORKDIR}/${PN}_build"
+	mkdir -p "${BUILD_DIR}" || die
+
+	# Write API keys to disk
+	echo -n "${MOZ_API_KEY_GOOGLE//gGaPi/}" > "${S}"/api-google.key || die
+	echo -n "${MOZ_API_KEY_LOCATION//gGaPi/}" > "${S}"/api-location.key || die
+	echo -n "${MOZ_API_KEY_MOZILLA//m0ap1/}" > "${S}"/api-mozilla.key || die
+
+	xdg_src_prepare
+}
+
+src_configure() {
+	# Show flags set at the beginning
+	einfo "Current BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
+	einfo "Current CFLAGS:\t\t${CFLAGS:-no value set}"
+	einfo "Current CXXFLAGS:\t\t${CXXFLAGS:-no value set}"
+	einfo "Current LDFLAGS:\t\t${LDFLAGS:-no value set}"
+	einfo "Current RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}"
+
+	local have_switched_compiler=
+	if use clang && ! tc-is-clang ; then
+		# Force clang
+		einfo "Enforcing the use of clang due to USE=clang ..."
+		have_switched_compiler=yes
+		AR=llvm-ar
+		CC=${CHOST}-clang
+		CXX=${CHOST}-clang++
+		NM=llvm-nm
+		RANLIB=llvm-ranlib
+	elif ! use clang && ! tc-is-gcc ; then
+		# Force gcc
+		have_switched_compiler=yes
+		einfo "Enforcing the use of gcc due to USE=-clang ..."
+		AR=gcc-ar
+		CC=${CHOST}-gcc
+		CXX=${CHOST}-g++
+		NM=gcc-nm
+		RANLIB=gcc-ranlib
+	fi
+
+	if [[ -n "${have_switched_compiler}" ]] ; then
+		# Because we switched active compiler we have to ensure
+		# that no unsupported flags are set
+		strip-unsupported-flags
+	fi
+
+	# Ensure we use correct toolchain
+	export HOST_CC="$(tc-getBUILD_CC)"
+	export HOST_CXX="$(tc-getBUILD_CXX)"
+	tc-export CC CXX LD AR NM OBJDUMP RANLIB PKG_CONFIG
+
+	# Pass the correct toolchain paths through cbindgen
+	if tc-is-cross-compiler ; then
+		export BINDGEN_CFLAGS="${SYSROOT:+--sysroot=${ESYSROOT}} --target=${CHOST} ${BINDGEN_CFLAGS-}"
+	fi
+
+	# Set MOZILLA_FIVE_HOME
+	export MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${PN}"
+
+	# python/mach/mach/mixin/process.py fails to detect SHELL
+	export SHELL="${EPREFIX}/bin/bash"
+
+	# Set state path
+	export MOZBUILD_STATE_PATH="${BUILD_DIR}"
+
+	# Set MOZCONFIG
+	export MOZCONFIG="${S}/.mozconfig"
+
+	# Initialize MOZCONFIG
+	mozconfig_add_options_ac '' --enable-application=browser
+
+	# Set Gentoo defaults
+	export MOZILLA_OFFICIAL=1
+
+	mozconfig_add_options_ac 'Gentoo default' \
+		--allow-addon-sideload \
+		--disable-cargo-incremental \
+		--disable-crashreporter \
+		--disable-install-strip \
+		--disable-strip \
+		--disable-updater \
+		--enable-official-branding \
+		--enable-release \
+		--enable-system-ffi \
+		--enable-system-pixman \
+		--host="${CBUILD:-${CHOST}}" \
+		--libdir="${EPREFIX}/usr/$(get_libdir)" \
+		--prefix="${EPREFIX}/usr" \
+		--target="${CHOST}" \
+		--without-ccache \
+		--without-wasm-sandboxed-libraries \
+		--with-intl-api \
+		--with-libclang-path="$(llvm-config --libdir)" \
+		--with-system-nspr \
+		--with-system-nss \
+		--with-system-zlib \
+		--with-toolchain-prefix="${CHOST}-" \
+		--with-unsigned-addon-scopes=app,system \
+		--x-includes="${SYSROOT}${EPREFIX}/usr/include" \
+		--x-libraries="${SYSROOT}${EPREFIX}/usr/$(get_libdir)"
+
+	# Set update channel
+	local update_channel=release
+	[[ -n ${MOZ_ESR} ]] && update_channel=esr
+	mozconfig_add_options_ac '' --update-channel=${update_channel}
+
+	if ! use x86 && [[ ${CHOST} != armv*h* ]] ; then
+		mozconfig_add_options_ac '' --enable-rust-simd
+	fi
+
+	if [[ -s "${S}/api-google.key" ]] ; then
+		local key_origin="Gentoo default"
+		if [[ $(cat "${S}/api-google.key" | md5sum | awk '{ print $1 }') != 709560c02f94b41f9ad2c49207be6c54 ]] ; then
+			key_origin="User value"
+		fi
+
+		mozconfig_add_options_ac "${key_origin}" \
+			--with-google-safebrowsing-api-keyfile="${S}/api-google.key"
+	else
+		einfo "Building without Google API key ..."
+	fi
+
+	if [[ -s "${S}/api-location.key" ]] ; then
+		local key_origin="Gentoo default"
+		if [[ $(cat "${S}/api-location.key" | md5sum | awk '{ print $1 }') != ffb7895e35dedf832eb1c5d420ac7420 ]] ; then
+			key_origin="User value"
+		fi
+
+		mozconfig_add_options_ac "${key_origin}" \
+			--with-google-location-service-api-keyfile="${S}/api-location.key"
+	else
+		einfo "Building without Location API key ..."
+	fi
+
+	if [[ -s "${S}/api-mozilla.key" ]] ; then
+		local key_origin="Gentoo default"
+		if [[ $(cat "${S}/api-mozilla.key" | md5sum | awk '{ print $1 }') != 3927726e9442a8e8fa0e46ccc39caa27 ]] ; then
+			key_origin="User value"
+		fi
+
+		mozconfig_add_options_ac "${key_origin}" \
+			--with-mozilla-api-keyfile="${S}/api-mozilla.key"
+	else
+		einfo "Building without Mozilla API key ..."
+	fi
+
+	mozconfig_use_with system-av1
+	mozconfig_use_with system-harfbuzz
+	mozconfig_use_with system-harfbuzz system-graphite2
+	mozconfig_use_with system-icu
+	mozconfig_use_with system-jpeg
+	mozconfig_use_with system-libevent system-libevent "${SYSROOT}${EPREFIX}/usr"
+	mozconfig_use_with system-libvpx
+	mozconfig_use_with system-png
+	mozconfig_use_with system-webp
+
+	mozconfig_use_enable dbus
+
+	use eme-free && mozconfig_add_options_ac '+eme-free' --disable-eme
+
+	mozconfig_use_enable geckodriver
+
+	if use hardened ; then
+		mozconfig_add_options_ac "+hardened" --enable-hardening
+		append-ldflags "-Wl,-z,relro -Wl,-z,now"
+	fi
+
+	mozconfig_use_enable jack
+
+	mozconfig_use_enable pulseaudio
+	# force the deprecated alsa sound code if pulseaudio is disabled
+	if use kernel_linux && ! use pulseaudio ; then
+		mozconfig_add_options_ac '-pulseaudio' --enable-alsa
+	fi
+
+	mozconfig_use_enable sndio
+
+	mozconfig_use_enable wifi necko-wifi
+
+	if use wayland ; then
+		mozconfig_add_options_ac '+wayland' --enable-default-toolkit=cairo-gtk3-wayland
+	else
+		mozconfig_add_options_ac '' --enable-default-toolkit=cairo-gtk3
+	fi
+
+	if use lto ; then
+		if use clang ; then
+			# Upstream only supports lld when using clang
+			mozconfig_add_options_ac "forcing ld=lld due to USE=clang and USE=lto" --enable-linker=lld
+
+			mozconfig_add_options_ac '+lto' --enable-lto=cross
+		else
+			# ld.gold is known to fail:
+			# /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/../../../../x86_64-pc-linux-gnu/bin/ld.gold: internal error in set_xindex, at /var/tmp/portage/sys-devel/binutils-2.37_p1-r1/work/binutils-2.37/gold/object.h:1050
+
+			# ThinLTO is currently broken, see bmo#1644409
+			mozconfig_add_options_ac '+lto' --enable-lto=full
+			mozconfig_add_options_ac "linker is set to bfd" --enable-linker=bfd
+		fi
+
+		if use pgo ; then
+			mozconfig_add_options_ac '+pgo' MOZ_PGO=1
+
+			if use clang ; then
+				# Used in build/pgo/profileserver.py
+				export LLVM_PROFDATA="llvm-profdata"
+			fi
+		fi
+	else
+		# Avoid auto-magic on linker
+		if use clang ; then
+			# This is upstream's default
+			mozconfig_add_options_ac "forcing ld=lld due to USE=clang" --enable-linker=lld
+		else
+			mozconfig_add_options_ac "linker is set to bfd" --enable-linker=bfd
+		fi
+	fi
+
+	# LTO flag was handled via configure
+	filter-flags '-flto*'
+
+	mozconfig_use_enable debug
+	if use debug ; then
+		mozconfig_add_options_ac '+debug' --disable-optimize
+	else
+		if is-flag '-g*' ; then
+			if use clang ; then
+				mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols=$(get-flag '-g*')
+			else
+				mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols
+			fi
+		else
+			mozconfig_add_options_ac 'Gentoo default' --disable-debug-symbols
+		fi
+
+		if is-flag '-O0' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O0
+		elif is-flag '-O4' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O4
+		elif is-flag '-O3' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O3
+		elif is-flag '-O1' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O1
+		elif is-flag '-Os' ; then
+			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-Os
+		else
+			mozconfig_add_options_ac "Gentoo default" --enable-optimize=-O2
+		fi
+	fi
+
+	# Debug flag was handled via configure
+	filter-flags '-g*'
+
+	# Optimization flag was handled via configure
+	filter-flags '-O*'
+
+	# Modifications to better support ARM, bug #553364
+	if use cpu_flags_arm_neon ; then
+		mozconfig_add_options_ac '+cpu_flags_arm_neon' --with-fpu=neon
+
+		if ! tc-is-clang ; then
+			# thumb options aren't supported when using clang, bug 666966
+			mozconfig_add_options_ac '+cpu_flags_arm_neon' \
+				--with-thumb=yes \
+				--with-thumb-interwork=no
+		fi
+	fi
+
+	if [[ ${CHOST} == armv*h* ]] ; then
+		mozconfig_add_options_ac 'CHOST=armv*h*' --with-float-abi=hard
+
+		if ! use system-libvpx ; then
+			sed -i \
+				-e "s|softfp|hard|" \
+				"${S}"/media/libvpx/moz.build \
+				|| die
+		fi
+	fi
+
+	if use clang ; then
+		# https://bugzilla.mozilla.org/show_bug.cgi?id=1482204
+		# https://bugzilla.mozilla.org/show_bug.cgi?id=1483822
+		# toolkit/moz.configure Elfhack section: target.cpu in ('arm', 'x86', 'x86_64')
+		local disable_elf_hack=
+		if use amd64 ; then
+			disable_elf_hack=yes
+		elif use x86 ; then
+			disable_elf_hack=yes
+		elif use arm ; then
+			disable_elf_hack=yes
+		fi
+
+		if [[ -n ${disable_elf_hack} ]] ; then
+			mozconfig_add_options_ac 'elf-hack is broken when using Clang' --disable-elf-hack
+		fi
+	elif tc-is-gcc ; then
+		if ver_test $(gcc-fullversion) -ge 10 ; then
+			einfo "Forcing -fno-tree-loop-vectorize to workaround GCC bug, see bug 758446 ..."
+			append-cxxflags -fno-tree-loop-vectorize
+		fi
+	fi
+
+	# Additional ARCH support
+	case "${ARCH}" in
+		arm)
+			# Reduce the memory requirements for linking
+			if use clang ; then
+				# Nothing to do
+				:;
+			elif tc-ld-is-gold || use lto ; then
+				append-ldflags -Wl,--no-keep-memory
+			else
+				append-ldflags -Wl,--no-keep-memory -Wl,--reduce-memory-overheads
+			fi
+			;;
+	esac
+
+	if ! use elibc_glibc ; then
+		mozconfig_add_options_ac '!elibc_glibc' --disable-jemalloc
+	fi
+
+	# Allow elfhack to work in combination with unstripped binaries
+	# when they would normally be larger than 2GiB.
+	append-ldflags "-Wl,--compress-debug-sections=zlib"
+
+	# Make revdep-rebuild.sh happy; Also required for musl
+	append-ldflags -Wl,-rpath="${MOZILLA_FIVE_HOME}",--enable-new-dtags
+
+	# Pass $MAKEOPTS to build system
+	export MOZ_MAKE_FLAGS="${MAKEOPTS}"
+
+	# Use system's Python environment
+	export MACH_USE_SYSTEM_PYTHON=1
+	export PIP_NO_CACHE_DIR=off
+
+	# Disable notification when build system has finished
+	export MOZ_NOSPAM=1
+
+	# Portage sets XARGS environment variable to "xargs -r" by default which
+	# breaks build system's check_prog() function which doesn't support arguments
+	mozconfig_add_options_ac 'Gentoo default' "XARGS=${EPREFIX}/usr/bin/xargs"
+
+	# Set build dir
+	mozconfig_add_options_mk 'Gentoo default' "MOZ_OBJDIR=${BUILD_DIR}"
+
+	# Show flags we will use
+	einfo "Build BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
+	einfo "Build CFLAGS:\t\t${CFLAGS:-no value set}"
+	einfo "Build CXXFLAGS:\t\t${CXXFLAGS:-no value set}"
+	einfo "Build LDFLAGS:\t\t${LDFLAGS:-no value set}"
+	einfo "Build RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}"
+
+	# Handle EXTRA_CONF and show summary
+	local ac opt hash reason
+
+	# Apply EXTRA_ECONF entries to $MOZCONFIG
+	if [[ -n ${EXTRA_ECONF} ]] ; then
+		IFS=\! read -a ac <<<${EXTRA_ECONF// --/\!}
+		for opt in "${ac[@]}"; do
+			mozconfig_add_options_ac "EXTRA_ECONF" --${opt#--}
+		done
+	fi
+
+	echo
+	echo "=========================================================="
+	echo "Building ${PF} with the following configuration"
+	grep ^ac_add_options "${MOZCONFIG}" | while read ac opt hash reason; do
+		[[ -z ${hash} || ${hash} == \# ]] \
+			|| die "error reading mozconfig: ${ac} ${opt} ${hash} ${reason}"
+		printf "    %-30s  %s\n" "${opt}" "${reason:-mozilla.org default}"
+	done
+	echo "=========================================================="
+	echo
+
+	./mach configure || die
+}
+
+src_compile() {
+	local virtx_cmd=
+
+	if use pgo ; then
+		virtx_cmd=virtx
+
+		# Reset and cleanup environment variables used by GNOME/XDG
+		gnome2_environment_reset
+
+		addpredict /root
+	fi
+
+	local -x GDK_BACKEND=x11
+
+	${virtx_cmd} ./mach build --verbose \
+		|| die
+}
+
+src_install() {
+	# xpcshell is getting called during install
+	pax-mark m \
+		"${BUILD_DIR}"/dist/bin/xpcshell \
+		"${BUILD_DIR}"/dist/bin/${PN} \
+		"${BUILD_DIR}"/dist/bin/plugin-container
+
+	DESTDIR="${D}" ./mach install || die
+
+	# Upstream cannot ship symlink but we can (bmo#658850)
+	rm "${ED}${MOZILLA_FIVE_HOME}/${PN}-bin" || die
+	dosym ${PN} ${MOZILLA_FIVE_HOME}/${PN}-bin
+
+	# Don't install llvm-symbolizer from sys-devel/llvm package
+	if [[ -f "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" ]] ; then
+		rm -v "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" || die
+	fi
+
+	# Install policy (currently only used to disable application updates)
+	insinto "${MOZILLA_FIVE_HOME}/distribution"
+	newins "${FILESDIR}"/distribution.ini distribution.ini
+	newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
+
+	# Install system-wide preferences
+	local PREFS_DIR="${MOZILLA_FIVE_HOME}/browser/defaults/preferences"
+	insinto "${PREFS_DIR}"
+	newins "${FILESDIR}"/gentoo-default-prefs.js gentoo-prefs.js
+
+	local GENTOO_PREFS="${ED}${PREFS_DIR}/gentoo-prefs.js"
+
+	# Set dictionary path to use system hunspell
+	cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set spellchecker.dictionary_path pref"
+	pref("spellchecker.dictionary_path",       "${EPREFIX}/usr/share/myspell");
+	EOF
+
+	# Force hwaccel prefs if USE=hwaccel is enabled
+	if use hwaccel ; then
+		cat "${FILESDIR}"/gentoo-hwaccel-prefs.js \
+		>>"${GENTOO_PREFS}" \
+		|| die "failed to add prefs to force hardware-accelerated rendering to all-gentoo.js"
+	fi
+
+	if ! use gmp-autoupdate ; then
+		local plugin
+		for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do
+			einfo "Disabling auto-update for ${plugin} plugin ..."
+			cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to disable autoupdate for ${plugin} media plugin"
+			pref("media.${plugin}.autoupdate",   false);
+			EOF
+		done
+	fi
+
+	# Force the graphite pref if USE=system-harfbuzz is enabled, since the pref cannot disable it
+	if use system-harfbuzz ; then
+		cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set gfx.font_rendering.graphite.enabled pref"
+		sticky_pref("gfx.font_rendering.graphite.enabled", true);
+		EOF
+	fi
+
+	# Install language packs
+	local langpacks=( $(find "${WORKDIR}/language_packs" -type f -name '*.xpi') )
+	if [[ -n "${langpacks}" ]] ; then
+		moz_install_xpi "${MOZILLA_FIVE_HOME}/distribution/extensions" "${langpacks[@]}"
+	fi
+
+	# Install geckodriver
+	if use geckodriver ; then
+		einfo "Installing geckodriver into ${ED}${MOZILLA_FIVE_HOME} ..."
+		pax-mark m "${BUILD_DIR}"/dist/bin/geckodriver
+		exeinto "${MOZILLA_FIVE_HOME}"
+		doexe "${BUILD_DIR}"/dist/bin/geckodriver
+
+		dosym ${MOZILLA_FIVE_HOME}/geckodriver /usr/bin/geckodriver
+	fi
+
+	# Install icons
+	local icon_srcdir="${S}/browser/branding/official"
+	local icon_symbolic_file="${FILESDIR}/icon/firefox-symbolic.svg"
+
+	insinto /usr/share/icons/hicolor/symbolic/apps
+	newins "${icon_symbolic_file}" ${PN}-symbolic.svg
+
+	local icon size
+	for icon in "${icon_srcdir}"/default*.png ; do
+		size=${icon%.png}
+		size=${size##*/default}
+
+		if [[ ${size} -eq 48 ]] ; then
+			newicon "${icon}" ${PN}.png
+		fi
+
+		newicon -s ${size} "${icon}" ${PN}.png
+	done
+
+	# Install menu
+	local app_name="Mozilla ${MOZ_PN^}"
+	local desktop_file="${FILESDIR}/icon/${PN}-r3.desktop"
+	local desktop_filename="${PN}.desktop"
+	local exec_command="${PN}"
+	local icon="${PN}"
+	local use_wayland="false"
+
+	if use wayland ; then
+		use_wayland="true"
+	fi
+
+	cp "${desktop_file}" "${WORKDIR}/${PN}.desktop-template" || die
+
+	sed -i \
+		-e "s:@NAME@:${app_name}:" \
+		-e "s:@EXEC@:${exec_command}:" \
+		-e "s:@ICON@:${icon}:" \
+		"${WORKDIR}/${PN}.desktop-template" \
+		|| die
+
+	newmenu "${WORKDIR}/${PN}.desktop-template" "${desktop_filename}"
+
+	rm "${WORKDIR}/${PN}.desktop-template" || die
+
+	# Install wrapper script
+	[[ -f "${ED}/usr/bin/${PN}" ]] && rm "${ED}/usr/bin/${PN}"
+	newbin "${FILESDIR}/${PN}-r1.sh" ${PN}
+
+	# Update wrapper
+	sed -i \
+		-e "s:@PREFIX@:${EPREFIX}/usr:" \
+		-e "s:@MOZ_FIVE_HOME@:${MOZILLA_FIVE_HOME}:" \
+		-e "s:@APULSELIB_DIR@:${apulselib}:" \
+		-e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \
+		"${ED}/usr/bin/${PN}" \
+		|| die
+}
+
+pkg_preinst() {
+	xdg_pkg_preinst
+
+	# If the apulse libs are available in MOZILLA_FIVE_HOME then apulse
+	# does not need to be forced into the LD_LIBRARY_PATH
+	if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then
+		einfo "APULSE found; Generating library symlinks for sound support ..."
+		local lib
+		pushd "${ED}${MOZILLA_FIVE_HOME}" &>/dev/null || die
+		for lib in ../apulse/libpulse{.so{,.0},-simple.so{,.0}} ; do
+			# A quickpkg rolled by hand will grab symlinks as part of the package,
+			# so we need to avoid creating them if they already exist.
+			if [[ ! -L ${lib##*/} ]] ; then
+				ln -s "${lib}" ${lib##*/} || die
+			fi
+		done
+		popd &>/dev/null || die
+	fi
+}
+
+pkg_postinst() {
+	xdg_pkg_postinst
+
+	if ! use gmp-autoupdate ; then
+		elog "USE='-gmp-autoupdate' has disabled the following plugins from updating or"
+		elog "installing into new profiles:"
+		local plugin
+		for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do
+			elog "\t ${plugin}"
+		done
+		elog
+	fi
+
+	if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then
+		elog "Apulse was detected at merge time on this system and so it will always be"
+		elog "used for sound.  If you wish to use pulseaudio instead please unmerge"
+		elog "media-sound/apulse."
+		elog
+	fi
+
+	local show_doh_information
+	local show_normandy_information
+	local show_shortcut_information
+
+	if [[ -z "${REPLACING_VERSIONS}" ]] ; then
+		# New install; Tell user that DoH is disabled by default
+		show_doh_information=yes
+		show_normandy_information=yes
+		show_shortcut_information=no
+	else
+		local replacing_version
+		for replacing_version in ${REPLACING_VERSIONS} ; do
+			if ver_test "${replacing_version}" -lt 91.0 ; then
+				# Tell user that we no longer install a shortcut
+				# per supported display protocol
+				show_shortcut_information=yes
+			fi
+		done
+	fi
+
+	if [[ -n "${show_doh_information}" ]] ; then
+		elog
+		elog "Note regarding Trusted Recursive Resolver aka DNS-over-HTTPS (DoH):"
+		elog "Due to privacy concerns (encrypting DNS might be a good thing, sending all"
+		elog "DNS traffic to Cloudflare by default is not a good idea and applications"
+		elog "should respect OS configured settings), \"network.trr.mode\" was set to 5"
+		elog "(\"Off by choice\") by default."
+		elog "You can enable DNS-over-HTTPS in ${PN^}'s preferences."
+	fi
+
+	# bug 713782
+	if [[ -n "${show_normandy_information}" ]] ; then
+		elog
+		elog "Upstream operates a service named Normandy which allows Mozilla to"
+		elog "push changes for default settings or even install new add-ons remotely."
+		elog "While this can be useful to address problems like 'Armagadd-on 2.0' or"
+		elog "revert previous decisions to disable TLS 1.0/1.1, privacy and security"
+		elog "concerns prevail, which is why we have switched off the use of this"
+		elog "service by default."
+		elog
+		elog "To re-enable this service set"
+		elog
+		elog "    app.normandy.enabled=true"
+		elog
+		elog "in about:config."
+	fi
+
+	if [[ -n "${show_shortcut_information}" ]] ; then
+		elog
+		elog "Since ${PN}-91.0 we no longer install multiple shortcuts for"
+		elog "each supported display protocol.  Instead we will only install"
+		elog "one generic Mozilla ${PN^} shortcut."
+		elog "If you still want to be able to select between running Mozilla ${PN^}"
+		elog "on X11 or Wayland, you have to re-create these shortcuts on your own."
+	fi
+}

diff --git a/www-client/firefox/metadata.xml b/www-client/firefox/metadata.xml
new file mode 100644
index 0000000..ac687a3
--- /dev/null
+++ b/www-client/firefox/metadata.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer type="project">
+	<email>mozilla@gentoo.org</email>
+	<name>Gentoo Mozilla Team</name>
+</maintainer>
+<use>
+	<flag name="clang">Use Clang compiler instead of GCC</flag>
+	<flag name="eme-free">Disable EME (DRM plugin) cabability at build time</flag>
+	<flag name="geckodriver">Enable WebDriver support</flag>
+	<flag name="gmp-autoupdate">Allow Gecko Media Plugins (binary blobs) to be automatically
+		downloaded and kept up-to-date in user profiles</flag>
+	<flag name="hwaccel">Force-enable hardware-accelerated rendering (Mozilla bug 594876)</flag>
+	<flag name="lto">Enable Link Time Optimization (LTO). Requires Gold linker when using GCC
+		or LDD linker when using Clang</flag>
+	<flag name="openh264">Use <pkg>media-libs/openh264</pkg> for H.264 support
+		instead of downloading binary blob from Mozilla at runtime</flag>
+	<flag name="pgo">Add support for profile-guided optimization using gcc-4.5,
+		for faster binaries. This option will double the compile time.</flag>
+	<flag name="screencast">Enable support for remote desktop and screen cast using <pkg>media-video/pipewire</pkg></flag>
+	<flag name="sndio">Enable support for the <pkg>media-sound/sndio</pkg> backend</flag>
+	<flag name="system-av1">Use the system-wide <pkg>media-libs/dav1d</pkg>
+		and <pkg>media-libs/libaom</pkg> library instead of bundled.</flag>
+	<flag name="system-harfbuzz">Use the system-wide <pkg>media-libs/harfbuzz</pkg>
+		and <pkg>media-gfx/graphite2</pkg> instead of bundled.</flag>
+	<flag name="system-icu">Use the system-wide <pkg>dev-libs/icu</pkg>
+		instead of bundled.</flag>
+	<flag name="system-jpeg">Use the system-wide <pkg>media-libs/libjpeg-turbo</pkg>
+		instead of bundled.</flag>
+	<flag name="system-libevent">Use the system-wide <pkg>dev-libs/libevent</pkg>
+		instead of bundled.</flag>
+	<flag name="system-libvpx">Use the system-wide <pkg>media-libs/libvpx</pkg>
+		instead of bundled.</flag>
+	<flag name="system-png">Use the system-wide <pkg>media-libs/libpng</pkg>
+		instead of bundled (requires APNG patches).</flag>
+	<flag name="system-webp">Use the system-wide <pkg>media-libs/libwebp</pkg>
+		instead of bundled.</flag>
+</use>
+</pkgmetadata>


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] proj/riscv:master commit in: www-client/firefox/files/icon/, www-client/firefox/files/, www-client/firefox/
@ 2023-04-08 21:16 Yixun Lan
  0 siblings, 0 replies; 2+ messages in thread
From: Yixun Lan @ 2023-04-08 21:16 UTC (permalink / raw
  To: gentoo-commits

commit:     3a343ba4c4c05e9f1e9721480c4542f64a6e9ace
Author:     Yixun Lan <dlan <AT> gentoo <DOT> org>
AuthorDate: Sat Apr  8 21:15:29 2023 +0000
Commit:     Yixun Lan <dlan <AT> gentoo <DOT> org>
CommitDate: Sat Apr  8 21:15:29 2023 +0000
URL:        https://gitweb.gentoo.org/proj/riscv.git/commit/?id=3a343ba4

www-client/firefox: drop it, as already pushed to official portage

Signed-off-by: Yixun Lan <dlan <AT> gentoo.org>

 www-client/firefox/Manifest                        |   99 -
 .../firefox/files/disable-auto-update.policy.json  |    5 -
 www-client/firefox/files/distribution.ini          |   42 -
 www-client/firefox/files/firefox-r1.sh             |  116 -
 .../firefox/files/firefox-riscv64-hack.patch       |  102 -
 .../firefox/files/firefox-riscv64-support.patch    | 3283 --------------------
 www-client/firefox/files/gentoo-default-prefs.js   |   12 -
 www-client/firefox/files/gentoo-hwaccel-prefs.js   |    3 -
 .../firefox/files/gentoo-hwaccel-prefs.js-r2       |    5 -
 www-client/firefox/files/icon/firefox-r2.desktop   |  236 --
 www-client/firefox/files/icon/firefox-r3.desktop   |  236 --
 www-client/firefox/files/icon/firefox-symbolic.svg |   64 -
 www-client/firefox/firefox-103.0.1.ebuild          | 1301 --------
 www-client/firefox/metadata.xml                    |   40 -
 14 files changed, 5544 deletions(-)

diff --git a/www-client/firefox/Manifest b/www-client/firefox/Manifest
deleted file mode 100644
index c8e20c7..0000000
--- a/www-client/firefox/Manifest
+++ /dev/null
@@ -1,99 +0,0 @@
-DIST firefox-103-patches-03j.tar.xz 19152 BLAKE2B dc4080f058bccfe3e092834501ee6210f44a02291d177b3aba5ebf6909d612411c622c794f30437136a8826c2bfe94f568dabdf05360f9a8f14dbe742404d195 SHA512 6edbfa089a0dd97a987065d63c4c2cba417cacdd45e9a6081193e87cae60c38e6327b0cdef0c1f272e082e985289d9bb6807caf262c272165362e696ca974010
-DIST firefox-103.0.1-ach.xpi 454180 BLAKE2B 350e8fba5485ed23db305f149e517964a89c058f61144cdfad78c83afac291d6f3214fe480fca7b54cd66434494a79f20d4b57e8e96782973528a65759f8d680 SHA512 36efc86cab0ad0232c25645f94968c6aada5c96e693cf93ca3d244da99942bae6791b8ca8b9a689ffb7e8bac5afa0466178455215350eb3140bd2ca63d764fd5
-DIST firefox-103.0.1-af.xpi 419567 BLAKE2B 7d1d7769906e262cc135bf760fa0bdc34b5ccc3e821082be68a00770253e04f30633f61855558d13158a29c9280c6cb95bdf44488b7da79e0d00b3f0b6bba154 SHA512 e204446bc2fca06d536bce01d9d920f8c6aad2a78ea1cdd4e149582616bde6d1155e5a0aab91119e7b02052368cfe5662bf6636d5fe18c9ab147a357b35a54f5
-DIST firefox-103.0.1-an.xpi 498031 BLAKE2B e7440682fbaef6cda8d5e6f0069d8385fcc112b22613c6221cbc31f7b5ec683479458f42164275ff695ec3b765588db38dfb83a2f26afa1b1c896aad4dc3577d SHA512 35540a4ce39efc8c65282bf5e5934f3b1d932db295976a889f3086437454d0bd0987af17feb6d935154dea41476f59a32910d1196099fdeacb12507a4d067e77
-DIST firefox-103.0.1-ar.xpi 561680 BLAKE2B 606e04a5f6bd8f5b79b9d80b8cf180d21a181a4a5b15d1556879fe8fdbba80c7fc24e6055a5cc4ebf1a9c9069100f61fb670bc32ac3cac7af9c7539cfd611ef9 SHA512 156c635d58dc4283cda6ea951886732747e724228933a3aebf8c7ff1629660a529f5c2052613240dd8c9c85186b754edd26462108dbc3cb6c3951d2bceaedeab
-DIST firefox-103.0.1-ast.xpi 494288 BLAKE2B c443bda216ea18aad76cabf5649977e8b1023012fbc46e986a2cdd08e6bf67b7c8f471025b1c591173749223f975ff71eef3b9bc4c5053728e76d55d22a279c2 SHA512 e8e8b71dde722dfad3360c8b578bd3ba1ea40efcb9214cc5a25e82f90c0d4fcaca16a070e346493b81237bf4265d81523c198d02ea3225eae83622b96062be59
-DIST firefox-103.0.1-az.xpi 485448 BLAKE2B d8095924cc95dee7d2aa16761d79dc6e5bb9070c25562b56c49e3415bb81bfaf773d15554f3128a8da011f860d5ccfed010f32039831b52ed701c24580d26f1a SHA512 2abcef585eaef03f6cce10bb39e9c8de05a324620762f0bdaddbe15550afe65dcc35d71d564c84c2bc263c4d1c1a0aa2119e5a1265b2a3247aa0247222e9b311
-DIST firefox-103.0.1-be.xpi 625934 BLAKE2B 85b364e2f6232afbe0e1d8a1f1837e61dd63443746f14f4129b2249de073b8834028f19a0cc2b09d7b99d01a697f157d0d9769bec919406e4f183f48138cc8a1 SHA512 c887055d8369cabaca43a401011cd4c706f0546ba6ed4648980b0824e75edf73f91673354ccda1355967efe70b289d8f8bb9f581cdc37b05ac41ed8231357e06
-DIST firefox-103.0.1-bg.xpi 574190 BLAKE2B a45d5acddc70f08999e657e5eb3055fcab55ab1b21b29e4c9f9ab67db4b96d8472859367683caa0f26069727d675f90b32e9918fcbbc0d237550fdf2e2f2dea2 SHA512 e0e0e67921bc67ef16cb40fdb6543b39c935d20940a2ed18416f70662d9504a0743a1dab841214bb087ed6472b30d944beb8479eac3986c4287ce1df758630e4
-DIST firefox-103.0.1-bn.xpi 576223 BLAKE2B bf5cdae17920b8946d641aaf78b5a1d7d8bb0c8b3a64cc56458f0c75d2063712fd28ca6955c500c5ad5aab400a2e1f9c3d66ac5dd074bc79271e06304b9e9557 SHA512 1739c3125eeb6826b016ea4d28844e71d45e0bad2f4d422b8c7677dad34b03660840ebafbaedc1fe27c7f66b9a9ed42d0a57c32bbfcc59a7c53493a0ec9e7d9d
-DIST firefox-103.0.1-br.xpi 532123 BLAKE2B 38ce46e4f98ec47190aab10156d37a0589bac61cce0945734a043bfe2fd761da0596fc807592f87dab4c2c9d02ab30d9db2bcc5cf01434be2d7f89d7bad97d40 SHA512 025ea89eba79d5db4d1fe3e277aa9a1e511b8ed7dc2e613059e131575f0abb09715b04de451db552040499e2f6b29421384f315e0fbeccd7f9fecb892b44a52b
-DIST firefox-103.0.1-bs.xpi 462892 BLAKE2B 97222965a6f465b797d208cdb19a7a7c3d2c5a340c5661600ad8bd5d5c10b06b8ce2837ee1af69d75c62cfac0d596f930671778bc831a2a9d013096ece9e6b9a SHA512 bb23a6361e21c2a46d1800d5628e96164db29ba2b8121ba1ca7c590920d3239bf9b5d3d09595a303a2053c9123467bfb0eaceb9dcdec7618c4e2d5fbc91bdee8
-DIST firefox-103.0.1-ca-valencia.xpi 537351 BLAKE2B f39260718b26764535ee9816f45f2fffcd22c0e13043b8243fd285b9c132a90e9e59cd30bfbf3730e29c6d96716534b4a14eb36067abe178ad7971b4a5957ae8 SHA512 dca2e423d4c6390a53eb6caa50aaf093150beb97a3f7a39a937e36235a69e1d4d0fff66629ecc60f63ca35bca3559d5e21d9b4fcd4ced40403c23317cabe543d
-DIST firefox-103.0.1-ca.xpi 534088 BLAKE2B 63835ab296d47859ba2ea60fab1d8c6a1352cf48522e0587bf893291fa4e13411236ca9931a011d4f7c4a0f5e853c144faaacd87442164de236222f618691e0d SHA512 763dcaeed9adc56df75eb4632b6a9184b59b22f5518a223910d20934ade76467b5b2732148fc2f5342ba0371d9682ddf354ccd4b8a3823caedf3b918e44a4e0a
-DIST firefox-103.0.1-cak.xpi 550806 BLAKE2B f01eb8c0bced05784340040546b88c089f0808e1f9b060714ef2ad0fe1ecfb5577f545133c3bf1e5090f6a9efc16dc5faa41f4a997fb3025f44021b2573e8660 SHA512 470917b8df6592f14386a502706c0da6ea787be0599b6b9bc455a4c7532d3b03fad2765fa2c100f62a9a552dab4180c23b3ca992dbda90685e6c4f62f3100851
-DIST firefox-103.0.1-cs.xpi 567609 BLAKE2B 065e5ace8afe256c5439a5661366213f488554b73a5c92b8fa2b0d57120010e5a463d67cb05f624bc7afde81c8afe4018c5517c9337c750022369cf2275b08f0 SHA512 8b60e4284e6c4bae9fa3cd67d58dee9b0ef76f8669585a6eaf8756aa0bbf1452e2c456cd377e70702a2c3407b74198aa086c94b1ea51a2ce919df938ba244ded
-DIST firefox-103.0.1-cy.xpi 545481 BLAKE2B bf45c050be5435c55071e00d1bd0e88c782c75e2e939a63b962bd305a2a1ae75a955783e218c5b495d11d1bee428531c176dc66db04430150639f62286fdffe6 SHA512 a9e91cb710400b9004ac614c74398a30a2d0c811b7f5f2e470192255162a7a5b13e71c8b247ae2a19a7e5397486fbda516b33742ef4a599b57a36e5f390890b9
-DIST firefox-103.0.1-da.xpi 535886 BLAKE2B 12d78d808f512600a1514dbe01ae5dc77e92341e7157f86782a1d2ef913f1dffd9ed34ab14202de6e51fbeb89bc9f43ac0c5a47c93e5baea1a70399a2feaed25 SHA512 c54e5c9d28b709554408c762d9976bc18d2288cbee10e08b7a4ca215ed50be9033ea2f9b2c1a35e12df80fc0939a5b945dcf5cb693884fd05b9e2ac457527a15
-DIST firefox-103.0.1-de.xpi 555988 BLAKE2B 303a0be5291c9173c1d20c9b1a8cf20e77530d394bf80e071007802234577553bdce636cb791bf880924d85ce82cfb993063e9272d8e8db96ca1566c4d19c4d2 SHA512 4cce07a305c17a1516aef2eff0b525a62b37e4f0a03cba62dd54db4a53a4205fe8f908284aaf7dbeddc51f0c3b7cf4b7196fca0a058a76e402039cc790febcbc
-DIST firefox-103.0.1-dsb.xpi 569472 BLAKE2B 06b0345fb26895a0f99791310ac9782244b86d059561f3dfe1273f95a3bd42312ed73ca1720822048f582931699a9c3149d85556f4508ffa0769ac5c750910a0 SHA512 6ffece90e31be81a1352fc8b3b8b25df7d7cabe4788d7398b767ddcdb49822658e0dc0de1bff74078362465ec26c8bcd1e5e35b213281ee9503ca4ace270dfed
-DIST firefox-103.0.1-el.xpi 640805 BLAKE2B 044d238602aff05a75cc31446ee718e681fc93d7681f9e785020f9c774f1a2b980931e03a99942f615fcb1c7874803459b1112a2c29e180e3654b42573ecdf47 SHA512 294d31c28806632fe879350b42cb3e3fa999904c275da304aa9190a797bf5fbe479441180938cf728429e59a5e75b0be2bb59d6ba4454ba6f875ed7f9539acad
-DIST firefox-103.0.1-en-CA.xpi 513842 BLAKE2B 9bffcb48c629e6031ebb67ec4a7cd2204c5426bc06dad92e975acbdbaeb17a8cd8b208bfe42a1c1373b8658a165d84c644229e7827c6ffa0274b17f159600f92 SHA512 bc786ed24bc241d226636e8154cc1750321370326d5e67eb4fa9181b6498e8cff783b2af257ef702bf29b44798ca22852589538860ae3351482e9d886b61d28f
-DIST firefox-103.0.1-en-GB.xpi 514045 BLAKE2B ee925bd08b5e9d4e202337e85351129ae6983e1d83c6a7dcd2f5ac455768a356ca83eb9e9dbe286a887c23dfb1dbf9d29546b06f2ded3dd98e47b0cf1bcb1ead SHA512 54b778e963875b7063deb20d34bcf65f2a4b60050946f63ecc1c2c1119176694e453e60bc2944f8bf91e4d399e765be5d37277db249e576cb0f237ab0b1876c0
-DIST firefox-103.0.1-eo.xpi 540165 BLAKE2B 4a6540f04e0f1b247fb3fb9b0e9332ef5fd4d25fcf33d845e7a60dc46d25201151cb1601a868deec0810c0c001890e5105dda97cf6819687e8c03251d4e13568 SHA512 87bf652f5a8c14b5f029d6d229a951e5d1e513bc5a89b605d32046ae950f7fcf9cad36dcb7531b9ba6ea364161d0b5d0116b39e15c58f000cf66a17c6979a909
-DIST firefox-103.0.1-es-AR.xpi 550477 BLAKE2B 674e6f2779d0a5da638441f5cad8bcddfc095cbbe2dfccf8610e85b405dad60999f0db352aeb0bb298c0748449186f95a03b388d11ec3a331ef456cd1971d071 SHA512 5e7eda59a7ab6aaf8274d21f30863192aac640e0060b3c3874a58190483ce7db359d41115196d8dc5691c9f331e8243b6eb3c570b1c9dc4160a0b7f38a24c023
-DIST firefox-103.0.1-es-CL.xpi 549855 BLAKE2B 520a1bdada5b63de8af347520f78dfe1c30941510b9f2ab4cee215766c13f1318f938b610f06b88d346e2742eff400b847a1675a10a4c08d4604377e9394820e SHA512 b664a17962cc7341da4e2c4623b5a3869e8c028cbe1972d13ca02dcf1c3ff3da1f4426aa24e017b506eacc018c4b05b1d0f25325e2ca36a6b3175431aafa8b89
-DIST firefox-103.0.1-es-ES.xpi 541257 BLAKE2B ee8032d66e174309a8ec8457c9929ae05a3860ccd6d08b4ba5088eb2f385e6b406335a0a8b797b28db42e4bf9a4ac3f989a0740419d36194c38bdb7711b58ef6 SHA512 57eb8cd2376208cc3daf5adbcfb2c577857a8a1d6ca1c38a0d862024c1677e6b667cc18d6c99003acdc13fe56c04bc02aa425af0ff22476a0ae03128315e87e6
-DIST firefox-103.0.1-es-MX.xpi 553698 BLAKE2B 8a1c7c690915485e233de7c517688eb906c1cae737fb9be424f3809b51b0a394c656a5d3f09db975802c9c16f5b5d67e8ad3cf3a70a1ac046ad8f08fc10ff2d2 SHA512 bb7110e8370dfdc3a5386c710373fe4d38b795ef1d42896dc255609797a3009d9b94b25a45e9e600efed32c2f8b0d34e923738712026fee69a09c955f5dfe4b2
-DIST firefox-103.0.1-et.xpi 530732 BLAKE2B af9867d87c191d7f4d3bc47d3b3a8cc4fcdec651e7bc4704bbcd12c6ee5a9cef081b83ca16c9b4a31e45599bf8e749a4a9cc8bb1b90da40a618267e7a968b005 SHA512 9e848eda97cc0733a87d909bad8634c6ce2c4f993209be354b5f35d22e3a1157963d0d25fea8ebbfd6c1cc84974f5b0236cc29bcdeeaba40b8187a2eed9f3e4f
-DIST firefox-103.0.1-eu.xpi 540016 BLAKE2B 23cc04352ed44180903f0873afca91740dac6855aafef6592801c32fe10df33a85b059e79cbe81cd750701a7da79023c1a477a330627c085198e25172f0a66bf SHA512 a4ff6ac7c33166a14b2cd32b8f2f0204c9278f6fd633af42868c944862064847dc13efe1080ea9ffe72fa0477a63ec980b1124960f16cc03485595953f9092c7
-DIST firefox-103.0.1-fa.xpi 561835 BLAKE2B 57a0e1881388a6d8c28eeb848783ff72946a83b3a214e9635f4c9feb03c2e6f6cc2ede18971275b66be52ef27df44f5da5ed06572ff1b1be77b7be62fb70371b SHA512 00f567229df51a5c33a55c08475ead09f1eb85029f414b6206de47d892ebfd7d4cbb303fc761cec289625f1641179305d467fb2400426c4bd31b0d4b2888847e
-DIST firefox-103.0.1-ff.xpi 472339 BLAKE2B d0756543217ce5a001546de3e7c2229864aed307eb0edb1800ae598d4267a8a695cc68b24d0430052db94afa8a1ff69c7bd365f87cb218a11eae5c6b06f28867 SHA512 b42180bb24e5fee6f4ef2ad6a8404945855faf20b8bd9b552903c2a38dd0c23ba0868a8449209ae82b551288a471f5350b4f1dbb15097f0beff10f7f5e396169
-DIST firefox-103.0.1-fi.xpi 534455 BLAKE2B b901dcc37911b268a9c04279885d1fa58b706bc06e4cc6be44c1d44c553ee2cc73024cbcce43112c23c669da455cc8732b4794e845d3327b188ebffa00a7b4f7 SHA512 53951a57c1becfb18db6ad601780b49fd4d4b3b2eda24040b5cf508d465aec23abe61d9fa086d91b99debfcc2755524f488ef5a6776701d08dc7dc500cdb9f2c
-DIST firefox-103.0.1-fr.xpi 561669 BLAKE2B c1609a28d03aa599805968794814747b8825845de3be33ea12e77b0f32c8a8325288e072b78879a54c644bb0631f878b4a21a92c9b1086a6ace1125367432f21 SHA512 261867c89c5f4331faec401b5ad0f9e166760e032924646bc8b6d0d77ddb82b4d150112baee565d5f7a47c195f90eba6a55656bb2f79a556c470603407cca312
-DIST firefox-103.0.1-fy-NL.xpi 546731 BLAKE2B d0aa5d376cca3f97df44af1d9f7987c169e76e07ae732ad79e0198a135c95288915bab75161da3f2205a29c99d82feffd051d07b2527ca5a1930a66b8fa5ca41 SHA512 6519b9d52a9f3ed650076c991fc6cf24713a2f203b047938e6abc642e2ba343e124ff39d8476ae58bfcca93cc99f11213d78d1710c5946ae4b62947a421492b6
-DIST firefox-103.0.1-ga-IE.xpi 471799 BLAKE2B bdd5c5d5d55b0a19b195d81081c285d66688a75291ac23fa0666c74b94a6e92c194923118ea348f4e59140d1f3ebbe4999ef5c3eeed41cdf9ca11436ccf0bace SHA512 2a0ee31afabe79e4f00f8f385953dd7cdb5f80273a4027b776396e2dd26709c0f28c48214f1a62858fd73ea8cbab7ce829f69f78781d283458af47f2a1152b4a
-DIST firefox-103.0.1-gd.xpi 533648 BLAKE2B b97b0f198d86a6968220af72f0915c8c1d41bdfe950349430ebccac97cb403cf127f82978648d043f3699e1c3f6b640fad96ab8d2061953aae5e531ec0b4750b SHA512 56cb374044b5e7a5a924029dc6397601b6e87cf943af8d2f79c9e38df8c97a052d0c992f6e44158e6a23fb3b002e4d85a1592251f7d3c2e60b0f91f9f46cd600
-DIST firefox-103.0.1-gl.xpi 540057 BLAKE2B 0ec6b40c7a9175f127f96e52b79becd9882fe5623f3cf00561ce7c41c4cc73579a1e6fd6e3a9040ee3f6231778034390a86bc479d4389f57fd8f1500f57853c6 SHA512 60116df1014606b97935f36984140b4ff96fbc16e23d749965a94aadabfb43fd098aef9a650763ad30bf3c25ef394a84443e2666075a6e05bea2280955b02ec8
-DIST firefox-103.0.1-gn.xpi 561564 BLAKE2B e1a29760ebb3384d86a83acd8ec196810f57b985ba5d6e5e4dd1fd0be4bf9a265d4604c08b35b4e26b21d703a2694a21a8e41a89032ab6a40bbf68084ab742d5 SHA512 1a044632779a9d7e7040b9ab2cc1da0ab124fef35a6fb70f9fa161fe818d9d6eb9ca0063d6bc8a2d1690e52ecc4aea5226ae3f8f0ab0531df5316d6e6f14da4b
-DIST firefox-103.0.1-gu-IN.xpi 526869 BLAKE2B a891065c702f8eb2137e024b2268f6a03726469575ac695d1c087716a4093f9290fa72b33b195dc708f47f55fcd2fa3fbe411da499fb73dd63e84cada772e4c4 SHA512 2177171610d3466d1c4a26932ae32728bc1363b631f6964f4bcd36cd643230f5fbbaa14ab204a493725a574cbc8a4bec8115f6bd35a17616055209c89ca1c6aa
-DIST firefox-103.0.1-he.xpi 559706 BLAKE2B ce8031d8149a6270fd286012116c25d681b09d6e805623274f7fb53d7ac82117333eaf018971ab3640385a7e76d3988a3799f5e88d2e96e34bb1a16798b926f6 SHA512 2c938099d464c66d6c7e8aa5eca9fb073cc3e0728018c494bf4a01effe7cfd6e78752b2afa9a2d81024a1b7a2e738d1621d1e1690578d455719948b264af9c27
-DIST firefox-103.0.1-hi-IN.xpi 556926 BLAKE2B d2b8a700a52cf366622851ac3013b59ce9072eb7ad1f176465ffc00c101cae0dc904ed32550214e8198d0f3c6a9e5cfe29700999dca39139a63707fae3a05819 SHA512 54f76de0b86f66f0a298df11b260e7fa5c2a5c8809231a98750b9ccddb29d7be1faafe36430d1e06490a95b4b8208f830a50d75c052d298d18637f19debbc607
-DIST firefox-103.0.1-hr.xpi 530620 BLAKE2B c4523bb1337705cb7731908d130db988fad5cba3e823636abcb5dd0e968197156e8e21f38421a128fee7c749a350445980424e243521ad03c8265f25705a58be SHA512 526869c5cea7d7ad06419ad56aafbc56d397534924896510e3304ace4b023346cd4ef3ee69219b39250f6af6d826ce956cfbd0a53694b6837adeb08e9f0cdbc0
-DIST firefox-103.0.1-hsb.xpi 565694 BLAKE2B 930b452e972dc88923d3e41328e15d6d103b5d454ce7634dd4aa7a001685b336746f0b86f50581cdbd1189c4730aca92b48eed99616644003e81a7f20e5602c4 SHA512 99f2943f5502a60cbd14ed1ab9e12d3a88b134a2bfe3bebecc6564e37e1aba0ce5ef17fc535aa1f3e7834d6b85f2ef74c3b70fbd2d261d45e93bd1e6b8c39143
-DIST firefox-103.0.1-hu.xpi 568992 BLAKE2B 22c6ec23da10490925aa16b5b70c5e019dd0802e7bdfe23d231f07105c011ed5789b76a9e57116993ce533b95035d0b75990efb6628a2c6fbf7615bdf26288ab SHA512 2d8b5f6395ee51222e23f81978451b1e00aaeb8be04d053c06abd279da083ea2adedb08da6e544f0e1d7369a5b1cab8ac36c4e6113681254106d6d0b89ea371f
-DIST firefox-103.0.1-hy-AM.xpi 581567 BLAKE2B 43e413889c6bf59148a7e6a1955031720a6d8ececd19bd43aefbf9588fa21a8c284255a99d90289e2170a9cfd1edc9c3d9daba9ba4f1dba83046d09b3bbb6412 SHA512 5c3576ee1ae33af189a1c694ea2be90cdd98d6fc54df583f4f27ad974ddeef55702ab1fbd370b095a5be53f6b4f94bea8358d507a01cc7abfb767d29863f0e6e
-DIST firefox-103.0.1-ia.xpi 535624 BLAKE2B 443464e9cd9044abdd0db41203365a9f4836175d196392d9ea64824c63fdff00ca8a3f7e6b6dca1c83a409366dc2d3f02c7a8550196f36b841ec5e19fc4799c2 SHA512 33b67985658185065dba0e6d09df7de75d7488524158b1ee0f232a9e69ba61ec57b1dffe871ac5b316338abf292092c59b0a336e2abd6d5c7f0d0010f49a135a
-DIST firefox-103.0.1-id.xpi 532811 BLAKE2B 94d704daa9d8e28bdd7e65fc2a9a6feab5f3be0c188dbd8a134727699b7ffca69a66cca0b8c613cbb30b8984c7cf81bfae08c5437c272f4f098c00e18d70b215 SHA512 172a556b4c01db3fa2907a6e874aeb1f4b448e0d747c7d6a27758b7ecc1194fe36f7b52744189b842a6204d8a1dec56dde71889519006bebf7477e3de27e4baa
-DIST firefox-103.0.1-is.xpi 540847 BLAKE2B e35aa14a437a6f257b749302d1b1a1c57b5499f1c3259cd5605a72dbfdf610058878a62d01037c855ef112e61ae1cda27d6daf31ae7aa1b2d1c8541983faba8a SHA512 f88f03651e8e2d3a2787614f523e28527cdbdbd40ffda0bc1c5c43b3de0ce5755d1cc9a38e3f2d52557d14e774a42c7c967303db35cd49d48620f3857ed64504
-DIST firefox-103.0.1-it.xpi 454439 BLAKE2B 61e5148e9df3fe6797b7b6484a3936c6da29803cbeae75fe768cdbe38937fe2b98b8aaa16be8e098c36c16f8fbc28f4ec06a98474c17f1f7ba2ad3d62542e3d6 SHA512 3e96c8b7a644fa1fe8e1589a97f1100a7b400b14d1a996fc045900752af3ab4c92bdefa5b0ce9052b70fc303749fde3aabdeadf1e7b147c7640aa1a0e7731c7b
-DIST firefox-103.0.1-ja.xpi 574517 BLAKE2B 6002448d6fe2946645c2fb3ebd8ee3468504a1b20b61695a80c9d203c73bb7e93d135b5dce08433b3310f47f164dae29bafccebd7b0cb07222c5928c32531dd0 SHA512 e48a75c02ecd3f3675321da8c14312ad55cb78ef3da8082a038960ec32594b2d41a0571111e579110d3cdb0083246281224a35675a04680c947371ee96927968
-DIST firefox-103.0.1-ka.xpi 594023 BLAKE2B 347e9b25912db37490b8c3b50728ffeb9795805e0f0926ab24a7bda220420ee27f5c465085eb137c8cfa5d9cd6dc2cee319fa14aff48fc82d448f802673b3d4d SHA512 99f8b45937b4693f8129b8e2678913c9766f2abe1fd8c263d6bc1f8ef273eec2a8045d6423af5dd360bd4dcc3bdd1bbcb82a2f37ba5839a1b87700b0d22aafa1
-DIST firefox-103.0.1-kab.xpi 554265 BLAKE2B 5c4a589e71bce3dae8c5e2a51f71656b1ceb7bd78cc11e557eba0b449de88d8d49ca26d9a93ece68519fd74d48df532edd1a20ef3513a822de1b8167cfe99285 SHA512 7a50ae25949c456a39d5923a07a104462029cb80418fa9db127301ad1ee524afafb005d9d709dfd9a1e2aabc681666bce5342fa3ce307b812c1ffca36089773b
-DIST firefox-103.0.1-kk.xpi 616956 BLAKE2B a48871662163b31df30c3cd77a34d2529736fd3ea3875f7e71b78821b91928069fd718633c948509a5820305c0ba0ec4096c779db3dc2277d0c35efacd78132c SHA512 08f98b9a0cd0b0f02b1b42be669200706bf7aebe353cb63f1f6ee86cd8ba7436656709c587492d58f0f53b55e93e03555b588d8c872a1a236bb1fbaaf4fa286d
-DIST firefox-103.0.1-km.xpi 531396 BLAKE2B ead91b703e41f62323d7b00918f6a0620f10cd6f64a2202c8abd2bca2dfedcff23516bf239d472f619027329cff82b982c6863f088d0d092a61c29058b43d79f SHA512 31f7b421c3ca5adb5bbbcc0b5fdaf5a777d2f2a1c625e02cefe3511a389d36dbf1209234e52e62cc0343b63a8ee9a506f463eba6382d43fe4ca178b5f5012547
-DIST firefox-103.0.1-kn.xpi 497493 BLAKE2B 4e022946652c166c3719e56c9a9aa710c881534e5d3eec8c593b383bba1d85503ce677a23f1607e29ead0316ef8d80152a59be4c87125b74b035fe6fca723899 SHA512 dbc5a9e2462ba7f92e86785b30fba0cd83ec409eeceda152f34870abc3ae9e38223d6192cdd47f045c5f5e85584b4353b09f7fe6933255abf45c3ad5df752f37
-DIST firefox-103.0.1-ko.xpi 581110 BLAKE2B 1ea3bf3f19cd0f6a93420466bb2d52e5f41b7787574e36b66adb84ed1dabbcff0062836d0a11eb8134cbeed56e1af2345e0a8b926e1974eeca4c6d546002b61a SHA512 87f4f1119647019ab7763bdafc6910013db0227f4fb248ba2c01d616aa5fb1613bbedfe9adfed0369e450f94f56d24029f36b775e2379029af81b6d08b97a4a4
-DIST firefox-103.0.1-lij.xpi 470256 BLAKE2B c73ec59d5babb7033807dad9b43653ca84c294da07cf7eb0b4eaddaa1db6061bedae8e7b0982b0dd34f7c237a56f15b2afad2a3c69b478f4393f7a8ef0aae492 SHA512 035d19c40a4fd22328a067a297c4e0d05277b6f671d342b3be49ff89f5224a3bea6e9abc3a639aaa2a9f895ba522a03f8f590fcd1fd7e6ce1f6e0d7cc8ff8c00
-DIST firefox-103.0.1-lt.xpi 562006 BLAKE2B 2ac04541539edc8274c5965472b3e617b963551c67a0fedc50b6911c30fc5b972ce8ba596420d957911b9e8990f3da4133787a408cae6514a31732935ccfaf33 SHA512 d71a2e9ca6084aa927b87628ec976a799045ff3cb708e01d5018b62a8e9536b7b16360b6c85c9994afa6b510ffa93b6666a771f6dcbf9558c1dd29706316325d
-DIST firefox-103.0.1-lv.xpi 463409 BLAKE2B 4b74e079fa44b8693ab8a6ffd6f4d1726cac2772483129fd55c74ac137a64eb4c4f1022c5289ca04f459e92492b60054fd906a57d6e842606a0c43701f579b4a SHA512 556be9bd482cabb55edb7433b8822a7a7da1e9b16b066df131d6455e0ce04ddb72f69ce33691bb47c32ce02beb4e7d3c8e5a3035a0da10a7cb3d8cc44de35537
-DIST firefox-103.0.1-mk.xpi 474765 BLAKE2B 9c7488301b958d360077005deb5fdf677420cc8b26882e6236f03e28ac42da8ddaf8ed172678e8eb53ff0f913c507fc92d2b6749eeeab1110d582de107cbb8de SHA512 00b1e0759035e70bc47d372220b0c1985ba364808a28720f9b0f1589bf476a405c31a416dcb1fa759f4b7693629fb9f82c8e833ca5142c0e3cd47ea0b23c3f46
-DIST firefox-103.0.1-mr.xpi 530635 BLAKE2B 9d4d17c5b90de850a40abaff901d48c644cffa2dca81c8b7f57234844ce0db171cc6f03bc7beeddbd3431f44d01cf6dcd8f7d8cdfeb2776726dd6e19341a26a4 SHA512 5c2edd61b35c3689232961d22d1aa0badc3cd477a521c75a290ffc25aa2ae23788defdc56745a68727b9676163f34c4511c513aa7e87aa565eb0793bca93c89a
-DIST firefox-103.0.1-ms.xpi 448400 BLAKE2B 53f287df3feefb0dc2db7e0a25caedd60d8530db36ef1bcc969a76e747581bcd8cee3e46d20147c6644263148cb5c608faf491f446632b0327912ffe7a8b67af SHA512 88d5f96298d3fd3a3774d029e150e5769bc1a6fe3fcb3201cd88517ce08184c2f470832350474249e7c14bfab6a6c635117fef5bf49849b27e4c123dc49214b1
-DIST firefox-103.0.1-my.xpi 510289 BLAKE2B 94b395d795863d28b099de316cb1e5b9bc512fbdaeb77ab98414ce8a22ca85ac949d9102129d2f4966ccde4586b217e2d4607e5da9da0dc1beec9968f00316c4 SHA512 19ff692f044f144856ff2bc1f31166e9e7fa299b5f9270a0ab533bfdc9c49ccba6ec503dc47923d3942fcc108832d29eb45bb781104332d12cbdf9156b553f8a
-DIST firefox-103.0.1-nb-NO.xpi 533227 BLAKE2B 0533a374f699e295960bb7dde3b42f78c6c3182b12f4f0ec70dacded8e6bf8836ecf183168ae09c7ba43d65e9bd55a355e20b48740a444934968ef769dad49b4 SHA512 1ca36127aa29cec45a55f8de6f39d8a854d811924849d79790ff92b26f6dbd2e5eb54083e1ace22d645b7abb562b7f2a937bef9d2a0388586c2ae2644ae27d7b
-DIST firefox-103.0.1-ne-NP.xpi 489027 BLAKE2B 40795a9d47f59502a3899c8a5c4611aaf963bd7b69d94127fd7b6a6bb9f45552460670a64cc4d2ec393d1baa28b4925e8b804e6d2293f025ba814c2ae72f666e SHA512 6b66658263e0128aa2c16ad1b00ef9a7353823ab420602e25133d8ef6920e0c1d8d3257a154f962e05193e1e73595e864a10eb68a524d781a5433493b0ee1908
-DIST firefox-103.0.1-nl.xpi 541036 BLAKE2B 0d38e3f8c8c06fd60d8f1655ccde9197961fddb1bd923874cead2db07e29354459195c04bcf35b6d27c73e63ad0b5cc46f2538bb16d65c4b1f1ed4d31e4a1fcf SHA512 38fe6dbb0510842cabcf100cc7ed1181a8c72066e5dd92bda3654ceeb27c563ab2132d9692ba8aa76936035f8016c6ead5981dc22ec6b0097c237fc7dd069980
-DIST firefox-103.0.1-nn-NO.xpi 535172 BLAKE2B 9b9e4e31cf95d93c610c7e223af94adcb037bf7ba8d8cee766aefc7404549b6377e4f2e48df33948a99eb08a90fe05dfd1a6a548854957167f58097008773636 SHA512 fbb1ab6977d8981472534c32ab7eba9c5b6a1aeb204a0bff21120498e47682bc446f2f867dce9eb1a85b48e3ae0e59347c76031615d47551ce083eb5895042e6
-DIST firefox-103.0.1-oc.xpi 556233 BLAKE2B 23e403faff4f44e2056a64eccf16cc338c4f19687ab6a57cb10fb1246a9aab82df2d86c61131174c22bfdf195cd36cd3087f25898d81d28bd3895c8dc12d4989 SHA512 0187396d7b42c369ad23127cc366e20756ecb459036659fe505c72ebab0818105b083f09d40ada144fd3b7b6c28f935590542047fb52df34d8cb6116b3a5eb9a
-DIST firefox-103.0.1-pa-IN.xpi 599787 BLAKE2B 0210a219cf461e172265bee51f073669e69efdd7c8ebf2c0f94d9503d5130d0a81f209c4a5d973d8f33b5036783cc5eae34af95eaea3cda1fc0ed5f39d2ccab5 SHA512 b1cb03ff31eb0d9a19734840900c835508553e56204fdd4b29065f164a2ab26926c996f719bb5d55a9a159df6533e3ac13fbc0af294a47f408a57360e89ac712
-DIST firefox-103.0.1-pl.xpi 560477 BLAKE2B 93c37423eceeba464589cfdd0cd33829df9a0ff2668a75436954342207e3a82ee761046600675b9a1a867fa0a07d746c9840a344f9213f63cf0f05f40e48f220 SHA512 ec78a340d37dc33376dd27c818ce78200c39f32965d35cbdd52372a17b2537735a24e5284035aa5ef7e08c7f3c9f9632224620337482bd357f0ee443c75e9da7
-DIST firefox-103.0.1-pt-BR.xpi 545988 BLAKE2B 099124f7e1c5a001b850f0ce3c1bb25a80b30ffce1657e513c90e944f9476db2c25b9c15890d7f7ef7c5871ef3f56ebe50306c447ec855f0838caf0b3cee53ae SHA512 5f641fe0801cad00f62a635e5997cbcaacc4cc2388e2ace71a9b95af10649d6dbe1d0540bcc6a6e8397805a0be4ff909efbfc95fde282b4e585ac0a76d00abb6
-DIST firefox-103.0.1-pt-PT.xpi 550410 BLAKE2B d70f65d982c6ed3e266b792bd078a9b8ff5dc70e7bb569e740a68f419bda0e4a88edff937d8cc46cc090b9fb11ffc1868e293939bae76175d0f02585eabbb3c6 SHA512 8c7be713ad2e7da4f9eaa82c159d908628973f00f060849dc4523a24c6ea03a9bfe00ed452a48dfc26e4030f6b27061e61027908d10748c4134b1f293ce213d5
-DIST firefox-103.0.1-rm.xpi 539556 BLAKE2B 9644909af76bc6bc8c54449918e9c326ce6bd59f1b317c88faf1419565b872f3bb0d5a8045c8bf8d0692a370f50b7f891eda566863324883a407f1347c692864 SHA512 55eff37fa0f7b7dee136a144e9f6488325130b38189108fd8e1f9c2a03b2f3d4ca4553f0e5dedaba455df5d25e0acdd6cac94eb9c96e1f17c0aa1e23ea919170
-DIST firefox-103.0.1-ro.xpi 528561 BLAKE2B d25d05bd1374db69adabfce1d09438120981a09d96aeb87d9dade9392aef849ca6e7f16df356fe087579065c90b1f35e4d6992e9e195b98ab6e62787b3b42df7 SHA512 27d70d17cbb82dd0a176e8db6c1506d6d051cf3a8032a2f5dfbd0cfce31071d9d91e7f064c81c75deaf3e213de93314ab57b03559e3f45f1cf47562cf4800642
-DIST firefox-103.0.1-ru.xpi 630089 BLAKE2B 6529952c641360de1509055320587f87b945e232661409ac75cf4288ceabf083f9f028f23a66776e4f2866582df55ea6b682722e2ba827f7c85c73d6cc1d66f5 SHA512 bcf51f22b7fe4fff9c120dfb0e5d24a9692b12c2b047fd7c30c9ae516bab0475bb03e6bd8c22c126eadd4aa107b0a3e1b08a4c8ec2eb7265a491fb4d257110c4
-DIST firefox-103.0.1-sco.xpi 496685 BLAKE2B e79bc99927e87c54e5cc45c9108a9066fc324aee9da8720cc9dd7da1af4f151c66bd6c1e04a50272d7db8ebc8a1ae764183a9342428d61402004624783c9702a SHA512 9d432671efafa3b79bb325f535c382b419f143b4c8a5db38a8a672b314268ebf0de808e079fdf4b8e76759979e7bede1c8b7f61d70935079b8642b27f274509d
-DIST firefox-103.0.1-si.xpi 485248 BLAKE2B 2ea6638a4ab598f61f5f089d7525ac9c4a2d543f20624f62b9dd561eaecac8e9552222e7eae1cb66fa4ad83adc87443dc85a014053a1acd7bed4cffef3cf136d SHA512 538194b27afae35733efa98cb650db34af2e21592b3e42cabe81117f95a8214cd65754b51c18420f1244d29c4c22ea32bbdeed571d8355d69c3d627035221a96
-DIST firefox-103.0.1-sk.xpi 569080 BLAKE2B 73a06a8cf41b713e6488610b8ffc8b4d1f2c6f01969e2cde8647e6afe1c1f5f227ca56774d36e3e8f51ebc45e12a6a872849e08876bbd56c55dd31b524d71dce SHA512 6626065cd619502a5decf9584f43a024198d2a842ae8aaafed01950ac51d7dfc2d658652eb619d84f0ab3651692856df1c2b8c35f97fee9b0c7da9cc379183ee
-DIST firefox-103.0.1-sl.xpi 542272 BLAKE2B b05fc307336f56f1a0ceb6cf41bf95ecf38654be0477bb37e0dcdf9d1fdc7dc55db8a55d1e1c97b0b40afef2a408b85fa1547c5146dbb7ff68929bfc23042caa SHA512 d38973c1668641efb8589f3f4a668c6cb7da5d521a21b323dae438ebae6efdcf80e1baeb665ecbe39343b8165c5357a9e567df6fead89b4145f489471bad0117
-DIST firefox-103.0.1-son.xpi 426230 BLAKE2B 135d33247a6512e9e9c35c22c7156ea81e6152c545333c37676f0610480f359fec260633c7d5f3219c764f2f7ab14057c5efe4bbc611d39ac468707733168038 SHA512 272c4a0c46c43cf98298610359ed6ac8a6d66a24b50a7806bf31bc5b69060ac4334ee1db0a104fb8aaf679baa7e7d756046288eb7fe2cc36fb5ba94f149afd87
-DIST firefox-103.0.1-sq.xpi 557264 BLAKE2B e547d43e98e0c1a55031a01514a8f872907193fc6d2d9acba2e07d0de2393abba4861febf9947c367fe4bc90474e664c2d5d96e7f212f74af429eccbfabbef4a SHA512 9269d60e3e42de08ab6d6fc5fd95592eebb61b99b0fa472f714812402b277d550b858cb23ea3866c0c18676a62ad60fa4c4a70a88a5a0daca55650c4dec5262f
-DIST firefox-103.0.1-sr.xpi 582540 BLAKE2B 13f792db4918ef1e143d4caa1bd6d775d6bd431385d04daa2c59ccd9bb9081edd2c872b05de4b0c065641082ad02e7c8b2d4c13b906063615ab1000738c58483 SHA512 77ecd2c9f2a2ee617c88a51391f038e868a50ad6307487cb48113717b671ab40bec11f1b53ef3587d96ba96d52caccf9c4fb5f68b28f74077a25c42e928f7242
-DIST firefox-103.0.1-sv-SE.xpi 542862 BLAKE2B 560d2f411c2ab548af5e10b88f90c0cb6c87b92c89cabdabce62fc060db91515c513664e7d34825c5313a58583ed1844da461ead91a71fa0a01635d4be53e1e5 SHA512 d361caa3f2135a9c4f4927dc5d4ebe6c0f3cc375d5b4147b6a59c9901821143a5097eb39be6c6cd01627a29e7f847c8fd72360a72a101e4d6f2347ba2b8f50f9
-DIST firefox-103.0.1-szl.xpi 508458 BLAKE2B dcd0949e26bf9112015b1e89c42340c5e45d479b4efc610b6bce3a6b9017262fce38601fa22ad53868974f0424d69ada90b3bf892e3481460c2d2bc88371b09e SHA512 75ab9ab58a8f6329ac703e157a8dc526e9b9853948016beaa086725c3deecc8593dc6fec7c7666c626f81677a8fdbe05fff61c8b4b41f8a851abf93c1090fe32
-DIST firefox-103.0.1-ta.xpi 510671 BLAKE2B 3da228200c470a5aaeeb1ad5075f671c84261c8c77eba4db862652ff6b7c5774a5522a0ce6b21a1f50fe8cb0d913d74c9e317ce7c9e13db481b8287cc6dd9774 SHA512 68ef9bf4f52b791ec36a845858f9873c80c2a66b52636d2c06b69820a097e65a3aba0aea401c5562767a8d793a40f0116cc76bb8bcc346c86949acc49e81739c
-DIST firefox-103.0.1-te.xpi 551778 BLAKE2B 1566182a148aa4be855e260edab9fb79fa2623264164f49974360cc9c1adb1872dcd3a74a7b234b3633dde57bd33611ba7f61f26ca861407fe79360f810cb757 SHA512 67628764f316ae9b776885bd2a17948b4a9f1d764b484715422ee8741f1407c2db18de64c90aa4014789e074b94b6eaa585376baa5650d8711f7ed3e81d5dcc7
-DIST firefox-103.0.1-th.xpi 610646 BLAKE2B 3b9ac255f84b34b9ed1f0987e7bce8a5c95822bb302992e47cf6a02c1d5d672329aa15a899b1d4392faa691dc23a742f3b87e594e1f4633e47bfffab7272e85b SHA512 26254ef9a4f2be9b8115623867bf350c6e9023213320a8c21e6177b2d5cdeb47c8a25a34ce1dd0ff36118776aa95a663c3e93c5933e0b24dbf0da5d61e099d76
-DIST firefox-103.0.1-tl.xpi 518725 BLAKE2B 8513a21152b618393e872b3330f1ad82547a1c826ffb4cd32bcc05b8e811cc22e1117ee25299c667f4bbfc3af17f4ee974c9fb917b7191906bb72c5e97664126 SHA512 f86f3ea84f95016eba5eaa99b2d5376055d525a31d6d08b9270d7916c335abf4becdab695236497a04feb7d698f72f9e9a3f27d347e707008b21dc6f9c23c750
-DIST firefox-103.0.1-tr.xpi 555677 BLAKE2B b8a2f8b6ad0cc9cfe18ea5bd23a18eab8b73fb66ac517226d9d66506ed50095db37a45ada84fc3c7e47b12fa0a70df69435ee31e5841e5193995d83e7ff0ca37 SHA512 95f46570d96a81ab44f5ace88f64896e9dfd86acd4d98c91cb63ceaf42731dbc8e7b328b1b764eaeee4eeab4f6fbe7c57bffef5357325391ad71c698fb7ac5a6
-DIST firefox-103.0.1-trs.xpi 488885 BLAKE2B 77e2df1c47c1fffb248e865f105c27d2a09f9537355f0c7a848f33dadcac331a8b2922aa9b2f3787616c93274b61ec05df7bbbc7c9f803aaca34f29c92eab9ff SHA512 5b3bfae7765934189af3837b1591969ceaa483fd06d130ab296552511863b2be972e5a509053cff94e65c6dc176d07c6f6676579a64b30aa150423b1a73e9a9f
-DIST firefox-103.0.1-uk.xpi 623498 BLAKE2B 78d0e757ad2a74d36985ef990a2f06db8d77d603dfa381d465690b46a3bcf429186bf8579dec7ce5f49eef09dc1f40d390dd459e71633d94b2c14dd1b11a1f2c SHA512 452ac5845c7c5968cf8b8450fdb716e719d110f1f29656637850883815e7e3b83983b10b1fb5c15eea65400c3648388f8ba7f4bf96d49824c83d99f08f25c46e
-DIST firefox-103.0.1-ur.xpi 558770 BLAKE2B 1e37442c843df8a96cbadee34fe16ab2e11559e5d87f2d1859eb3e85f78096bc2396a801ac86a9eb7207a8ee49fccabd2376f3e8a8fab4943c4212eaa5cc3b68 SHA512 d8f693b33cde0433f1f358c49f3f1cec98725df47c852c284e0995177589c4e1efbd6279aabb020bfbedca8fd5e0a3eb53da4977d21e80f45b185ecd79eb0a7a
-DIST firefox-103.0.1-uz.xpi 478410 BLAKE2B f594e6a0341f35bc737afbe614245663012e9d07a260921d7cc50cc4041d810927e37cacf74f760b201f01029bce7c92b75a1a6a25e3e9809b54efeb50754a35 SHA512 151638d3e42e41a41ea60ae2689f70a0cdcc99d505cef209ed806134a4bd8f7f586b3bbebd2b28412f49515d7619791e6c644b9de8edf3fd583c9690b9f4caca
-DIST firefox-103.0.1-vi.xpi 576267 BLAKE2B d9c88a6862eedc2a6b1691e869608c7254c7999bb581f19cd5956fae0f165bc77da92ce21201bf9dfb64f8032f5bbd42989f905250f94dcb115bf9ae6c3bf1ab SHA512 9d2b180fc3561656fcf39ead2c12fd272c2cb8e5920a1b54cca534f989c93bc20d3f93e52d2fdbcd2d8c68fc6cafa89f2cf9caf2a9230cc142f663097f1726e2
-DIST firefox-103.0.1-xh.xpi 429247 BLAKE2B 299883a21a176cada6900fd778fe170cd0911fb40b6ac03e9462e83899cf47e0c092889e43690bfbb1ff2a634671f4e65289f71547df2572c41d1bb97acab6d0 SHA512 f02711153bc337bb3bbcbaf2fbe7b54f696fdb43cc4e12559c344387876293ca6826a42c229a65a7f888a86dd4b6723abade6015d32dbd845f33f2ad5164d3a1
-DIST firefox-103.0.1-zh-CN.xpi 577425 BLAKE2B da82d2b3d75a385eebcdedd769f111de4ad05bd7ea2835d4e0c1096a5774af40584d8fe5d29a768455613be03ee3de5aa8d1713cc804195517eed31a590955b4 SHA512 14f5324508a8820bdd8a248a4e989444c444a183aad99f96ef841d98804d1941189e49143ae9c96b63ac0427d277c7a29357752234b9ce0be543c491e9c03b7d
-DIST firefox-103.0.1-zh-TW.xpi 578007 BLAKE2B 4cd77a1ad9046f2799a0da55831533d989b5ff7680988a96b2e9d184ff82edaaa5717830782760e3d2b3ad7a4a4efc75133e9787f5f32969bc3cc57b3674a249 SHA512 4c054aae826b5e54e5f3c5c4c2baf10b63c307684625c3f0d48f3de4ee18bc7923f0e03eff89fe74699b30fd971b80cb5fafe033d1ab2a68949a466c0be3e48c
-DIST firefox-103.0.1.source.tar.xz 480380068 BLAKE2B eb9a4212e44ed835b62674e6bfba63aab0cfa76ac40010cc8da195835f3f3f8733d1de2710a1c2ed9db1b4275ad23b2022988c0592f0579f455e50756c220ef9 SHA512 cb487e1d5d602e6b07093b5e722c4e70b9bf39f42c13c25642f263f90f9d3940d02e6fdbab9e8f41b66a50f81d70300acf81c222f08a26eed3ae55777fdc6303

diff --git a/www-client/firefox/files/disable-auto-update.policy.json b/www-client/firefox/files/disable-auto-update.policy.json
deleted file mode 100644
index f366220..0000000
--- a/www-client/firefox/files/disable-auto-update.policy.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "policies": {
-    "DisableAppUpdate": true
-  }
-}

diff --git a/www-client/firefox/files/distribution.ini b/www-client/firefox/files/distribution.ini
deleted file mode 100644
index 680512e..0000000
--- a/www-client/firefox/files/distribution.ini
+++ /dev/null
@@ -1,42 +0,0 @@
-[Global]
-id=gentoo
-version=1.0
-about=Mozilla Firefox for Gentoo
-about.de=Mozilla Firefox für Gentoo
-
-[Preferences]
-app.distributor="gentoo"
-app.distributor.channel="gentoo"
-startup.homepage_welcome_url="https://www.gentoo.org/"
-
-[BookmarksToolbar]
-item.1.type=default
-item.2.title=Gentoo's Bugzilla
-item.2.link=https://bugs.gentoo.org/
-item.3.title=Gentoo Forums
-item.3.link=https://forums.gentoo.org/
-item.4.title=Gentoo Packages
-item.4.link=https://packages.gentoo.org/
-item.5.title=Planet Gentoo
-item.5.link=https://planet.gentoo.org/
-item.6.title=Gentoo Wiki
-item.6.link=https://wiki.gentoo.org/
-
-[BookmarksMenu]
-item.1.title=Gentoo
-item.1.type=folder
-item.1.folderId=1
-
-[BookmarksFolder-1]
-item.1.title=Gentoo Linux
-item.1.link=https://www.gentoo.org/
-item.2.title=Gentoo's Bugzilla
-item.2.link=https://bugs.gentoo.org/
-item.3.title=Gentoo Forums
-item.3.link=https://forums.gentoo.org/
-item.4.title=Gentoo Packages
-item.4.link=https://packages.gentoo.org/
-item.5.title=Planet Gentoo
-item.5.link=https://planet.gentoo.org/
-item.6.title=Gentoo Wiki
-item.6.link=https://wiki.gentoo.org/

diff --git a/www-client/firefox/files/firefox-r1.sh b/www-client/firefox/files/firefox-r1.sh
deleted file mode 100644
index 853a4ef..0000000
--- a/www-client/firefox/files/firefox-r1.sh
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/bin/bash
-
-##
-## Usage:
-##
-## $ firefox
-##
-## This script is meant to run Mozilla Firefox in Gentoo.
-
-cmdname=$(basename "$0")
-
-##
-## Variables
-##
-MOZ_ARCH=$(uname -m)
-case ${MOZ_ARCH} in
-	x86_64|s390x|sparc64)
-		MOZ_LIB_DIR="@PREFIX@/lib64"
-		SECONDARY_LIB_DIR="@PREFIX@/lib"
-		;;
-	*)
-		MOZ_LIB_DIR="@PREFIX@/lib"
-		SECONDARY_LIB_DIR="@PREFIX@/lib64"
-		;;
-esac
-
-MOZ_FIREFOX_FILE="firefox"
-
-if [[ ! -r ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then
-	if [[ ! -r ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then
-		echo "Error: ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2
-		if [[ -d ${SECONDARY_LIB_DIR} ]]; then
-			echo "       ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2
-		fi
-		exit 1
-	fi
-	MOZ_LIB_DIR="${SECONDARY_LIB_DIR}"
-fi
-MOZILLA_FIVE_HOME="${MOZ_LIB_DIR}/firefox"
-MOZ_EXTENSIONS_PROFILE_DIR="${HOME}/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
-MOZ_PROGRAM="${MOZILLA_FIVE_HOME}/${MOZ_FIREFOX_FILE}"
-
-##
-## Enable Wayland backend?
-##
-if @DEFAULT_WAYLAND@ && [[ -z ${MOZ_DISABLE_WAYLAND} ]]; then
-	if [[ -n "${WAYLAND_DISPLAY}" ]]; then
-		export MOZ_ENABLE_WAYLAND=1
-	fi
-fi
-
-##
-## Use D-Bus remote exclusively when there's Wayland display.
-##
-if [[ -n "${WAYLAND_DISPLAY}" ]]; then
-	export MOZ_DBUS_REMOTE=1
-fi
-
-##
-## Make sure that we set the plugin path
-##
-MOZ_PLUGIN_DIR="plugins"
-
-if [[ -n "${MOZ_PLUGIN_PATH}" ]]; then
-	MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
-else
-	MOZ_PLUGIN_PATH=${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
-fi
-
-if [[ -d "${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}" ]]; then
-	MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
-fi
-
-export MOZ_PLUGIN_PATH
-
-##
-## Set MOZ_APP_LAUNCHER for gnome-session
-##
-export MOZ_APP_LAUNCHER="@PREFIX@/bin/${cmdname}"
-
-##
-## Disable the GNOME crash dialog, Mozilla has its own
-##
-if [[ "${XDG_CURRENT_DESKTOP}" == "GNOME" ]]; then
-	GNOME_DISABLE_CRASH_DIALOG=1
-	export GNOME_DISABLE_CRASH_DIALOG
-fi
-
-##
-## Enable Xinput2 (#617344)
-##
-
-# respect user settings
-MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2:-auto}
-
-if [[ ${MOZ_USE_XINPUT2} == auto && -n ${WAYLAND_DISPLAY} ]]; then
-	# enabling XINPUT2 should be safe for all wayland users
-	MOZ_USE_XINPUT2=1
-elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == KDE ]]; then
-	# XINPUT2 is known to cause problems for KWin users
-	MOZ_USE_XINPUT2=0
-elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == LXQT ]]; then
-	# LXQt uses KWin
-	MOZ_USE_XINPUT2=0
-elif [[ ${MOZ_USE_XINPUT2} == auto ]]; then
-	# should work on Mate, Xfce, FluxBox, OpenBox and all the others ...
-	MOZ_USE_XINPUT2=1
-fi
-
-[[ ${MOZ_USE_XINPUT2} != 0 ]] && export MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2}
-
-# Don't throw "old profile" dialog box.
-export MOZ_ALLOW_DOWNGRADE=1
-
-# Run the browser
-exec ${MOZ_PROGRAM} "${@}"

diff --git a/www-client/firefox/files/firefox-riscv64-hack.patch b/www-client/firefox/files/firefox-riscv64-hack.patch
deleted file mode 100644
index b4fca4d..0000000
--- a/www-client/firefox/files/firefox-riscv64-hack.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-Temporary hack to allow us to directly apply diff of matoko's branch.  Disable
-rust-vet to skip auditing third party libs in order to download/vendor rust
-deps on non-git firefox src.  Skip some style checks, as
-macroassembler support in js/src/jit/ is not complete yet
-
-diff --git a/python/mozbuild/mozbuild/vendor/vendor_rust.py b/python/mozbuild/mozbuild/vendor/vendor_rust.py
-index 7394ccaf40..491bd7fbdb 100644
---- a/python/mozbuild/mozbuild/vendor/vendor_rust.py
-+++ b/python/mozbuild/mozbuild/vendor/vendor_rust.py
-@@ -740,38 +740,40 @@ license file's hash.
-                     failed = True
- 
-         # Only emit warnings for cargo-vet for now.
--        env = os.environ.copy()
--        env["PATH"] = os.pathsep.join(
--            (
--                str(Path(cargo).parent),
--                os.environ["PATH"],
--            )
--        )
--        flags = ["--output-format=json"]
--        if "MOZ_AUTOMATION" in os.environ:
--            flags.append("--locked")
--            flags.append("--frozen")
--        res = cargo_vet(
--            self,
--            flags,
--            stdout=subprocess.PIPE,
--            env=env,
--        )
--        if res.returncode:
--            vet = json.loads(res.stdout)
--            for failure in vet.get("failures", []):
--                failure["crate"] = failure.pop("name")
--                self.log(
--                    logging.ERROR,
--                    "cargo_vet_failed",
--                    failure,
--                    "Missing audit for {crate}:{version} (requires {missing_criteria})."
--                    " Run `./mach cargo vet` for more information.",
--                )
--                failed = True
--
--        if failed:
--            return False
-+        #env = os.environ.copy()
-+        #env["PATH"] = os.pathsep.join(
-+        #    (
-+        #        str(Path(cargo).parent),
-+        #        os.environ["PATH"],
-+        #    )
-+        #)
-+        #print(env["PATH"])
-+        #print(self.topsrcdir)
-+        #flags = ["--output-format=json"]
-+        #if "MOZ_AUTOMATION" in os.environ:
-+        #    flags.append("--locked")
-+        #    flags.append("--frozen")
-+        #res = cargo_vet(
-+        #    self,
-+        #    flags,
-+        #    stdout=subprocess.PIPE,
-+        #    env=env,
-+        #)
-+        #if res.returncode:
-+        #    vet = json.loads(res.stdout)
-+        #    for failure in vet.get("failures", []):
-+        #        failure["crate"] = failure.pop("name")
-+        #        self.log(
-+        #            logging.ERROR,
-+        #            "cargo_vet_failed",
-+        #            failure,
-+        #            "Missing audit for {crate}:{version} (requires {missing_criteria})."
-+        #            " Run `./mach cargo vet` for more information.",
-+        #        )
-+        #        failed = True
-+
-+        #if failed:
-+        #    return False
- 
-         res = subprocess.run(
-             [cargo, "vendor", vendor_dir], cwd=self.topsrcdir, stdout=subprocess.PIPE
-@@ -848,6 +848,7 @@ license file's hash.
-                     directory=replace["directory"],
-                 )
-             )
-+        return True
- 
-         if not self._check_licenses(vendor_dir):
-             self.log(
-diff --git a/js/src/build/moz.build b/js/src/build/moz.build
-index 4c48a5c4ff..e68d79447e 100644
---- a/js/src/build/moz.build
-+++ b/js/src/build/moz.build
-@@ -101,7 +101,5 @@ GeneratedFile(
-     inputs=[
-         "!%sjs_static.%s" % (CONFIG["LIB_PREFIX"], CONFIG["LIB_SUFFIX"]),
--        "/config/check_spidermonkey_style.py",
--        "/config/check_macroassembler_style.py",
-         "/config/check_js_opcode.py",
-     ],
- )

diff --git a/www-client/firefox/files/firefox-riscv64-support.patch b/www-client/firefox/files/firefox-riscv64-support.patch
deleted file mode 100644
index 7e9abfc..0000000
--- a/www-client/firefox/files/firefox-riscv64-support.patch
+++ /dev/null
@@ -1,3283 +0,0 @@
-patch generated directly from https://github.com/makotokato/gecko-dev by
-
-    git diff master..riscv64 -- . :^third_party
-
-:^third_party is a git feature to exclude third_party/ from diff
-
-diff --git a/.cargo/config.in b/.cargo/config.in
-index 20b8c3fad8..34c5f9a1f4 100644
---- a/.cargo/config.in
-+++ b/.cargo/config.in
-@@ -22,11 +22,6 @@ git = "https://github.com/mozilla/mp4parse-rust"
- replace-with = "vendored-sources"
- rev = "3bfc47d9a571d0842676043ba60716318e946c06"
- 
--[source."https://github.com/mozilla/midir.git"]
--git = "https://github.com/mozilla/midir.git"
--replace-with = "vendored-sources"
--rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f"
--
- [source."https://github.com/mozilla/cubeb-pulse-rs"]
- git = "https://github.com/mozilla/cubeb-pulse-rs"
- replace-with = "vendored-sources"
-@@ -37,6 +32,11 @@ git = "https://github.com/mozilla/cubeb-coreaudio-rs"
- replace-with = "vendored-sources"
- rev = "44eca95823bb57e964cf7b6d9791ed2ccb4b2108"
- 
-+[source."https://github.com/mozilla/authenticator-rs"]
-+git = "https://github.com/mozilla/authenticator-rs"
-+replace-with = "vendored-sources"
-+rev = "b85bccf0527e42c877573029e8d35ff13ef06f9d"
-+
- [source."https://github.com/mozilla/audioipc"]
- git = "https://github.com/mozilla/audioipc"
- replace-with = "vendored-sources"
-diff --git a/Cargo.lock b/Cargo.lock
-index 85a143565c..b4924869cb 100644
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -30,14 +30,14 @@ dependencies = [
- 
- [[package]]
- name = "alsa"
--version = "0.4.3"
-+version = "0.6.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "eb213f6b3e4b1480a60931ca2035794aa67b73103d254715b1db7b70dcb3c934"
-+checksum = "5915f52fe2cf65e83924d037b6c5290b7cee097c6b5c8700746e6168a343fd6b"
- dependencies = [
-  "alsa-sys",
-  "bitflags",
-  "libc",
-- "nix",
-+ "nix 0.23.1",
- ]
- 
- [[package]]
-@@ -359,9 +359,8 @@ dependencies = [
- 
- [[package]]
- name = "authenticator"
--version = "0.3.1"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "08cee7a0952628fde958e149507c2bb321ab4fccfafd225da0b20adc956ef88a"
-+version = "0.3.2"
-+source = "git+https://github.com/mozilla/authenticator-rs?rev=b85bccf0527e42c877573029e8d35ff13ef06f9d#b85bccf0527e42c877573029e8d35ff13ef06f9d"
- dependencies = [
-  "bitflags",
-  "core-foundation",
-@@ -369,7 +368,7 @@ dependencies = [
-  "libc",
-  "libudev",
-  "log",
-- "rand 0.7.999",
-+ "rand 0.8.5",
-  "runloop",
-  "winapi",
- ]
-@@ -2204,6 +2203,7 @@ dependencies = [
-  "log",
-  "mapped_hyph",
-  "mdns_service",
-+ "midir",
-  "midir_impl",
-  "mio 0.8.0",
-  "moz_asserts",
-@@ -3274,8 +3274,9 @@ dependencies = [
- 
- [[package]]
- name = "midir"
--version = "0.7.0"
--source = "git+https://github.com/mozilla/midir.git?rev=4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f#4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f"
-+version = "0.8.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "2c1c68e2b589cce71b14a10d7d1599a845673f9decde80fa9e8500fdccd50dca"
- dependencies = [
-  "alsa",
-  "bitflags",
-@@ -3283,10 +3284,9 @@ dependencies = [
-  "js-sys",
-  "libc",
-  "memalloc",
-- "nix",
-  "wasm-bindgen",
-  "web-sys",
-- "winapi",
-+ "windows",
- ]
- 
- [[package]]
-@@ -3325,7 +3325,7 @@ dependencies = [
-  "libc",
-  "memmap2 0.2.999",
-  "memoffset 0.5.6",
-- "nix",
-+ "nix 0.15.0",
-  "tempfile",
-  "thiserror",
- ]
-@@ -3735,6 +3735,19 @@ dependencies = [
-  "void",
- ]
- 
-+[[package]]
-+name = "nix"
-+version = "0.23.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
-+dependencies = [
-+ "bitflags",
-+ "cc",
-+ "cfg-if 1.0.0",
-+ "libc",
-+ "memoffset 0.6.5",
-+]
-+
- [[package]]
- name = "nom"
- version = "5.999.999"
-@@ -6218,6 +6231,49 @@ version = "0.4.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
- 
-+[[package]]
-+name = "windows"
-+version = "0.32.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "fbedf6db9096bc2364adce0ae0aa636dcd89f3c3f2cd67947062aaf0ca2a10ec"
-+dependencies = [
-+ "windows_aarch64_msvc",
-+ "windows_i686_gnu",
-+ "windows_i686_msvc",
-+ "windows_x86_64_gnu",
-+ "windows_x86_64_msvc",
-+]
-+
-+[[package]]
-+name = "windows_aarch64_msvc"
-+version = "0.32.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
-+
-+[[package]]
-+name = "windows_i686_gnu"
-+version = "0.32.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
-+
-+[[package]]
-+name = "windows_i686_msvc"
-+version = "0.32.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
-+
-+[[package]]
-+name = "windows_x86_64_gnu"
-+version = "0.32.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
-+
-+[[package]]
-+name = "windows_x86_64_msvc"
-+version = "0.32.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
-+
- [[package]]
- name = "wineventlog"
- version = "0.1.0"
-diff --git a/Cargo.toml b/Cargo.toml
-index 2b499a0841..dcf1e401d7 100644
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -153,7 +153,6 @@ coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b544
- fog = { path = "toolkit/components/glean/api" }
- libudev-sys = { path = "dom/webauthn/libudev-sys" }
- packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="c149d0a519bf878567c7630096737669ec2ff15f" }
--midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" }
- minidump_writer_linux = { git = "https://github.com/rust-minidump/minidump-writer.git", rev = "75ada456c92a429704691a85e1cb42fef8cafc0d" }
- 
- # application-services overrides to make updating them all simpler.
-diff --git a/README.riscv64.md b/README.riscv64.md
-new file mode 100644
-index 0000000000..705099a3db
---- /dev/null
-+++ b/README.riscv64.md
-@@ -0,0 +1,69 @@
-+## Cross building
-+I recommend you should use docker environment
-+
-+#### Dockerfile
-+```dockerfile
-+FROM ubuntu:21.04
-+MAINTAINER Makoto Kato <m_kato@ga2.so-net.ne.jp>
-+
-+ADD sources.list /etc/apt/
-+ENV DEBIAN_FRONTEND=noninteractive
-+RUN dpkg --add-architecture riscv64 && \
-+    apt-get update && \
-+    apt-get install -y clang g++ mercurial g++-riscv64-linux-gnu curl gyp ninja-build make python-is-python3 libssl-dev zlib1g-dev nodejs build-essential libpython3-dev m4 unzip zip uuid git python3-pip && \
-+    apt-get install -y zlib1g-dev:riscv64 libssl-dev:riscv64 libffi-dev:riscv64 libasound2-dev:riscv64 libcurl4-openssl-dev:riscv64 libdbus-1-dev:riscv64 libdbus-glib-1-dev:riscv64 libdrm-dev:riscv64 libgtk-3-dev:riscv64 libpulse-dev:riscv64 libx11-xcb-dev:riscv64 libxt-dev:riscv64 xvfb:riscv64 libstdc++-10-dev:riscv64 && \
-+    apt-get clean
-+WORKDIR /root
-+ENV PATH="/root/.cargo/bin:${PATH}"
-+RUN curl https://sh.rustup.rs -s -o install.sh && sh install.sh -y && rm install.sh && rustup target add riscv64gc-unknown-linux-gnu
-+RUN cargo install cbindgen
-+```
-+
-+#### sources.list
-+```
-+deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ hirsute main restricted
-+deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ hirsute-updates main restricted
-+deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ hirsute universe
-+deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ hirsute-updates universe
-+deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ hirsute multiverse
-+deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ hirsute-updates multiverse
-+deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ hirsute-backports main restricted universe multiverse
-+deb [arch=amd64] http://security.ubuntu.com/ubuntu/ hirsute-security main restricted
-+deb [arch=amd64] http://security.ubuntu.com/ubuntu/ hirsute-security universe
-+deb [arch=amd64] http://security.ubuntu.com/ubuntu/ hirsute-security multiverse
-+
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute main restricted
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute-updates main restricted
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute universe
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute-updates universe
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute multiverse
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute-updates multiverse
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute-backports main restricted universe multiverse
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute-security main restricted
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute-security universe
-+deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports hirsute-security multiverse
-+```
-+
-+## mozconfig
-+```
-+mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir
-+mk_add_options AUTOCLOBBER=1
-+
-+ac_add_options --disable-debug
-+ac_add_options --enable-optimize
-+
-+ac_add_options --target=riscv64
-+export CC=riscv64-linux-gnu-gcc
-+export CXX=riscv64-linux-gnu-g++
-+export HOST_CC=gcc
-+export HOST_CXX=g++
-+ac_add_options --disable-bootstrap
-+ac_add_options --without-wasm-sandboxed-libraries
-+ac_add_options --enable-webrtc
-+ac_add_options --disable-crashreporter
-+ac_add_options --disable-jit
-+```
-+
-+## How to build
-+1. `./mach build`
-+2. `./mach package`
-diff --git a/dom/bindings/moz.build b/dom/bindings/moz.build
-index cf3a8d5017..5e1388cfe5 100644
---- a/dom/bindings/moz.build
-+++ b/dom/bindings/moz.build
-@@ -96,12 +96,16 @@ LOCAL_INCLUDES += [
-     "/layout/xul/tree",
-     "/media/webrtc/",
-     "/netwerk/base/",
--    "/third_party/libwebrtc",
--    "/third_party/libwebrtc/third_party/abseil-cpp",
- ]
- 
- LOCAL_INCLUDES += ["/third_party/msgpack/include"]
- 
-+if CONFIG["MOZ_WEBRTC"]:
-+    LOCAL_INCLUDES += [
-+        "/third_party/libwebrtc",
-+        "/third_party/libwebrtc/third_party/abseil-cpp",
-+    ]
-+
- DEFINES["GOOGLE_PROTOBUF_NO_RTTI"] = True
- DEFINES["GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER"] = True
- 
-diff --git a/dom/media/gtest/moz.build b/dom/media/gtest/moz.build
-index 05803392cb..d689c7bd77 100644
---- a/dom/media/gtest/moz.build
-+++ b/dom/media/gtest/moz.build
-@@ -13,10 +13,14 @@ LOCAL_INCLUDES += [
-     "/dom/media/systemservices",
-     "/dom/media/webrtc",
-     "/dom/media/webrtc/common",
--    "/third_party/libwebrtc",
--    "/third_party/libwebrtc/third_party/abseil-cpp",
- ]
- 
-+if CONFIG["MOZ_WEBRTC"]:
-+    LOCAL_INCLUDES += [
-+        "/third_party/libwebrtc",
-+        "/third_party/libwebrtc/third_party/abseil-cpp",
-+    ]
-+
- UNIFIED_SOURCES += [
-     "MockCubeb.cpp",
-     "MockMediaResource.cpp",
-diff --git a/dom/midi/midir_impl/Cargo.toml b/dom/midi/midir_impl/Cargo.toml
-index 7628fb4a68..a918ff2227 100644
---- a/dom/midi/midir_impl/Cargo.toml
-+++ b/dom/midi/midir_impl/Cargo.toml
-@@ -7,7 +7,7 @@ edition = "2018"
- # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
- 
- [dependencies]
--midir = "0.7.0"
-+midir = "0.8.0"
- nsstring = { path = "../../../xpcom/rust/nsstring/" }
- uuid = { version = "0.8", features = ["v4"] }
- thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
-diff --git a/ipc/glue/moz.build b/ipc/glue/moz.build
-index c4b7c1d69e..775f553d05 100644
---- a/ipc/glue/moz.build
-+++ b/ipc/glue/moz.build
-@@ -220,6 +220,12 @@ LOCAL_INCLUDES += [
-     "/xpcom/build",
- ]
- 
-+if CONFIG["MOZ_WEBRTC"]:
-+    LOCAL_INCLUDES += [
-+        "/third_party/libwebrtc",
-+        "/third_party/libwebrtc/third_party/abseil-cpp",
-+    ]
-+
- PREPROCESSED_IPDL_SOURCES = [
-     "PUtilityProcess.ipdl",
- ]
-diff --git a/js/moz.configure b/js/moz.configure
-index 4f9bb8992f..d53c672aa0 100644
---- a/js/moz.configure
-+++ b/js/moz.configure
-@@ -184,7 +184,7 @@ def report_deprecated(value):
- # =======================================================
- option(
-     "--enable-simulator",
--    choices=("arm", "arm64", "mips32", "mips64", "loong64"),
-+    choices=("arm", "arm64", "mips32", "mips64", "loong64", "riscv64"),
-     nargs=1,
-     help="Enable a JIT code simulator for the specified architecture",
- )
-@@ -201,7 +201,7 @@ def simulator(jit_enabled, simulator_enabled, target):
-         if target.cpu != "x86":
-             die("The %s simulator only works on x86." % sim_cpu)
- 
--    if sim_cpu in ("arm64", "mips64", "loong64"):
-+    if sim_cpu in ("arm64", "mips64", "loong64", "riscv64"):
-         if target.cpu != "x86_64" and target.cpu != "aarch64":
-             die("The %s simulator only works on x86-64 or arm64." % sim_cpu)
- 
-@@ -214,12 +214,14 @@ set_config("JS_SIMULATOR_ARM64", simulator.arm64)
- set_config("JS_SIMULATOR_MIPS32", simulator.mips32)
- set_config("JS_SIMULATOR_MIPS64", simulator.mips64)
- set_config("JS_SIMULATOR_LOONG64", simulator.loong64)
-+set_config("JS_SIMULATOR_RISCV64", simulator.riscv64)
- set_define("JS_SIMULATOR", depends_if(simulator)(lambda x: True))
- set_define("JS_SIMULATOR_ARM", simulator.arm)
- set_define("JS_SIMULATOR_ARM64", simulator.arm64)
- set_define("JS_SIMULATOR_MIPS32", simulator.mips32)
- set_define("JS_SIMULATOR_MIPS64", simulator.mips64)
- set_define("JS_SIMULATOR_LOONG64", simulator.loong64)
-+set_define("JS_SIMULATOR_RISCV64", simulator.riscv64)
- 
- 
- @depends("--enable-jit", simulator, target)
-@@ -244,6 +246,7 @@ set_config("JS_CODEGEN_ARM64", jit_codegen.arm64)
- set_config("JS_CODEGEN_MIPS32", jit_codegen.mips32)
- set_config("JS_CODEGEN_MIPS64", jit_codegen.mips64)
- set_config("JS_CODEGEN_LOONG64", jit_codegen.loong64)
-+set_config("JS_CODEGEN_RISCV64", jit_codegen.riscv64)
- set_config("JS_CODEGEN_X86", jit_codegen.x86)
- set_config("JS_CODEGEN_X64", jit_codegen.x64)
- set_define("JS_CODEGEN_NONE", jit_codegen.none)
-@@ -252,6 +255,7 @@ set_define("JS_CODEGEN_ARM64", jit_codegen.arm64)
- set_define("JS_CODEGEN_MIPS32", jit_codegen.mips32)
- set_define("JS_CODEGEN_MIPS64", jit_codegen.mips64)
- set_define("JS_CODEGEN_LOONG64", jit_codegen.loong64)
-+set_define("JS_CODEGEN_RISCV64", jit_codegen.riscv64)
- set_define("JS_CODEGEN_X86", jit_codegen.x86)
- set_define("JS_CODEGEN_X64", jit_codegen.x64)
- 
-diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
-index 2b8de6284f..1b9b4b62c7 100644
---- a/js/src/builtin/TestingFunctions.cpp
-+++ b/js/src/builtin/TestingFunctions.cpp
-@@ -426,6 +426,24 @@ static bool GetBuildConfiguration(JSContext* cx, unsigned argc, Value* vp) {
-     return false;
-   }
- 
-+#ifdef JS_CODEGEN_RISCV64
-+  value = BooleanValue(true);
-+#else
-+  value = BooleanValue(false);
-+#endif
-+  if (!JS_SetProperty(cx, info, "riscv64", value)) {
-+    return false;
-+  }
-+
-+#ifdef JS_SIMULATOR_RISCV64
-+  value = BooleanValue(true);
-+#else
-+  value = BooleanValue(false);
-+#endif
-+  if (!JS_SetProperty(cx, info, "riscv64-simulator", value)) {
-+    return false;
-+  }
-+
- #ifdef JS_SIMULATOR
-   value = BooleanValue(true);
- #else
-diff --git a/js/src/jit/Assembler.h b/js/src/jit/Assembler.h
-index 04dcdc647e..2081f254b0 100644
---- a/js/src/jit/Assembler.h
-+++ b/js/src/jit/Assembler.h
-@@ -19,6 +19,8 @@
- #  include "jit/mips32/Assembler-mips32.h"
- #elif defined(JS_CODEGEN_MIPS64)
- #  include "jit/mips64/Assembler-mips64.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/Assembler-riscv64.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/Assembler-loong64.h"
- #elif defined(JS_CODEGEN_NONE)
-diff --git a/js/src/jit/CodeGenerator.h b/js/src/jit/CodeGenerator.h
-index 67453d3cd3..82e58d2a16 100644
---- a/js/src/jit/CodeGenerator.h
-+++ b/js/src/jit/CodeGenerator.h
-@@ -26,6 +26,8 @@
- #  include "jit/mips64/CodeGenerator-mips64.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/CodeGenerator-loong64.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/CodeGenerator-riscv64.h"
- #elif defined(JS_CODEGEN_NONE)
- #  include "jit/none/CodeGenerator-none.h"
- #else
-diff --git a/js/src/jit/FlushICache.h b/js/src/jit/FlushICache.h
-index 42b1fb045c..feeae3c793 100644
---- a/js/src/jit/FlushICache.h
-+++ b/js/src/jit/FlushICache.h
-@@ -25,7 +25,7 @@ inline void FlushICache(void* code, size_t size,
- 
- #elif (defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64)) ||   \
-     (defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)) || \
--    defined(JS_CODEGEN_LOONG64)
-+    defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISCV64)
- 
- extern void FlushICache(void* code, size_t size, bool codeIsThreadLocal = true);
- 
-diff --git a/js/src/jit/LIR.h b/js/src/jit/LIR.h
-index 66c665b5ba..016c8246f7 100644
---- a/js/src/jit/LIR.h
-+++ b/js/src/jit/LIR.h
-@@ -1933,6 +1933,8 @@ AnyRegister LAllocation::toRegister() const {
- #    include "jit/mips64/LIR-mips64.h"
- #  endif
- #  include "jit/mips-shared/LIR-mips-shared.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/LIR-riscv64.h"
- #elif defined(JS_CODEGEN_NONE)
- #  include "jit/none/LIR-none.h"
- #else
-diff --git a/js/src/jit/Lowering.h b/js/src/jit/Lowering.h
-index a04d09c446..21094a616e 100644
---- a/js/src/jit/Lowering.h
-+++ b/js/src/jit/Lowering.h
-@@ -23,6 +23,8 @@
- #  include "jit/mips32/Lowering-mips32.h"
- #elif defined(JS_CODEGEN_MIPS64)
- #  include "jit/mips64/Lowering-mips64.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/Lowering-riscv64.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/Lowering-loong64.h"
- #elif defined(JS_CODEGEN_NONE)
-diff --git a/js/src/jit/MacroAssembler-inl.h b/js/src/jit/MacroAssembler-inl.h
-index 5ed4ac7458..1c208e676d 100644
---- a/js/src/jit/MacroAssembler-inl.h
-+++ b/js/src/jit/MacroAssembler-inl.h
-@@ -39,6 +39,8 @@
- #  include "jit/mips64/MacroAssembler-mips64-inl.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/MacroAssembler-loong64-inl.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/MacroAssembler-riscv64-inl.h"
- #elif !defined(JS_CODEGEN_NONE)
- #  error "Unknown architecture!"
- #endif
-diff --git a/js/src/jit/MacroAssembler.cpp b/js/src/jit/MacroAssembler.cpp
-index 3abc601bec..0665601509 100644
---- a/js/src/jit/MacroAssembler.cpp
-+++ b/js/src/jit/MacroAssembler.cpp
-@@ -4145,6 +4145,8 @@ void MacroAssembler::emitPreBarrierFastPath(JSRuntime* rt, MIRType type,
-   ma_dsll(temp1, temp1, temp3);
- #elif JS_CODEGEN_LOONG64
-   as_sll_d(temp1, temp1, temp3);
-+#elif JS_CODEGEN_RISCV64
-+  MOZ_CRASH();
- #elif JS_CODEGEN_NONE
-   MOZ_CRASH();
- #else
-diff --git a/js/src/jit/MacroAssembler.h b/js/src/jit/MacroAssembler.h
-index 5fa8f40bd1..3395a139d3 100644
---- a/js/src/jit/MacroAssembler.h
-+++ b/js/src/jit/MacroAssembler.h
-@@ -25,6 +25,8 @@
- #  include "jit/mips32/MacroAssembler-mips32.h"
- #elif defined(JS_CODEGEN_MIPS64)
- #  include "jit/mips64/MacroAssembler-mips64.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/MacroAssembler-riscv64.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/MacroAssembler-loong64.h"
- #elif defined(JS_CODEGEN_NONE)
-@@ -94,8 +96,8 @@
- //   }
- //   ////}}} check_macroassembler_style
- 
--#define ALL_ARCH mips32, mips64, arm, arm64, x86, x64, loong64
--#define ALL_SHARED_ARCH arm, arm64, loong64, x86_shared, mips_shared
-+#define ALL_ARCH mips32, mips64, arm, arm64, x86, x64, loong64, riscv64
-+#define ALL_SHARED_ARCH arm, arm64, loong64, riscv64, x86_shared, mips_shared
- 
- // * How this macro works:
- //
-@@ -142,6 +144,7 @@
- #define DEFINED_ON_mips64
- #define DEFINED_ON_mips_shared
- #define DEFINED_ON_loong64
-+#define DEFINED_ON_riscv64
- #define DEFINED_ON_none
- 
- // Specialize for each architecture.
-@@ -174,6 +177,9 @@
- #elif defined(JS_CODEGEN_LOONG64)
- #  undef DEFINED_ON_loong64
- #  define DEFINED_ON_loong64 define
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  undef DEFINED_ON_riscv64
-+#  define DEFINED_ON_riscv64 define
- #elif defined(JS_CODEGEN_NONE)
- #  undef DEFINED_ON_none
- #  define DEFINED_ON_none crash
-@@ -491,10 +497,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   // The size of the area used by PushRegsInMask.
-   size_t PushRegsInMaskSizeInBytes(LiveRegisterSet set)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   void PushRegsInMask(LiveRegisterSet set)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
-   void PushRegsInMask(LiveGeneralRegisterSet set);
- 
-   // Like PushRegsInMask, but instead of pushing the registers, store them to
-@@ -505,12 +511,12 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // must point to either the lowest address in the save area, or some address
-   // below that.
-   void storeRegsInMask(LiveRegisterSet set, Address dest, Register scratch)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   void PopRegsInMask(LiveRegisterSet set);
-   void PopRegsInMask(LiveGeneralRegisterSet set);
-   void PopRegsInMaskIgnore(LiveRegisterSet set, LiveRegisterSet ignore)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   // ===============================================================
-   // Stack manipulation functions -- single registers/values.
-@@ -543,7 +549,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   void Pop(FloatRegister t) PER_SHARED_ARCH;
-   void Pop(const ValueOperand& val) PER_SHARED_ARCH;
-   void PopFlags() DEFINED_ON(x86_shared);
--  void PopStackPtr() DEFINED_ON(arm, mips_shared, x86_shared, loong64);
-+  void PopStackPtr() DEFINED_ON(arm, mips_shared, x86_shared, loong64, riscv64);
-   void popRooted(VMFunctionData::RootType rootType, Register cellReg,
-                  const ValueOperand& valueReg);
- 
-@@ -601,8 +607,9 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   void callAndPushReturnAddress(Label* label) DEFINED_ON(x86_shared);
- 
-   // These do not adjust framePushed().
--  void pushReturnAddress() DEFINED_ON(mips_shared, arm, arm64, loong64);
--  void popReturnAddress() DEFINED_ON(mips_shared, arm, arm64, loong64);
-+  void pushReturnAddress()
-+      DEFINED_ON(mips_shared, arm, arm64, loong64, riscv64);
-+  void popReturnAddress() DEFINED_ON(mips_shared, arm, arm64, loong64, riscv64);
- 
-   // Useful for dealing with two-valued returns.
-   void moveRegPair(Register src0, Register src1, Register dst0, Register dst1,
-@@ -633,10 +640,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // Note: "Near" applies to ARM64 where the target must be within 1 MB (this is
-   // release-asserted).
-   CodeOffset moveNearAddressWithPatch(Register dest)
--      DEFINED_ON(x86, x64, arm, arm64, loong64, mips_shared);
-+      DEFINED_ON(x86, x64, arm, arm64, loong64, mips_shared, riscv64);
-   static void patchNearAddressMove(CodeLocationLabel loc,
-                                    CodeLocationLabel target)
--      DEFINED_ON(x86, x64, arm, arm64, loong64, mips_shared);
-+      DEFINED_ON(x86, x64, arm, arm64, loong64, mips_shared, riscv64);
- 
-  public:
-   // ===============================================================
-@@ -1045,17 +1052,17 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   inline void addPtr(ImmWord imm, Register dest) PER_ARCH;
-   inline void addPtr(ImmPtr imm, Register dest);
-   inline void addPtr(Imm32 imm, const Address& dest)
--      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64, riscv64);
-   inline void addPtr(Imm32 imm, const AbsoluteAddress& dest)
-       DEFINED_ON(x86, x64);
-   inline void addPtr(const Address& src, Register dest)
--      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64, riscv64);
- 
-   inline void add64(Register64 src, Register64 dest) PER_ARCH;
-   inline void add64(Imm32 imm, Register64 dest) PER_ARCH;
-   inline void add64(Imm64 imm, Register64 dest) PER_ARCH;
-   inline void add64(const Operand& src, Register64 dest)
--      DEFINED_ON(x64, mips64, loong64);
-+      DEFINED_ON(x64, mips64, loong64, riscv64);
- 
-   inline void addFloat32(FloatRegister src, FloatRegister dest) PER_SHARED_ARCH;
- 
-@@ -1074,16 +1081,16 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void subPtr(Register src, Register dest) PER_ARCH;
-   inline void subPtr(Register src, const Address& dest)
--      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64, riscv64);
-   inline void subPtr(Imm32 imm, Register dest) PER_ARCH;
-   inline void subPtr(ImmWord imm, Register dest) DEFINED_ON(x64);
-   inline void subPtr(const Address& addr, Register dest)
--      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64, riscv64);
- 
-   inline void sub64(Register64 src, Register64 dest) PER_ARCH;
-   inline void sub64(Imm64 imm, Register64 dest) PER_ARCH;
-   inline void sub64(const Operand& src, Register64 dest)
--      DEFINED_ON(x64, mips64, loong64);
-+      DEFINED_ON(x64, mips64, loong64, riscv64);
- 
-   inline void subFloat32(FloatRegister src, FloatRegister dest) PER_SHARED_ARCH;
- 
-@@ -1099,10 +1106,11 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void mul64(const Operand& src, const Register64& dest) DEFINED_ON(x64);
-   inline void mul64(const Operand& src, const Register64& dest,
--                    const Register temp) DEFINED_ON(x64, mips64, loong64);
-+                    const Register temp)
-+      DEFINED_ON(x64, mips64, loong64, riscv64);
-   inline void mul64(Imm64 imm, const Register64& dest) PER_ARCH;
-   inline void mul64(Imm64 imm, const Register64& dest, const Register temp)
--      DEFINED_ON(x86, x64, arm, mips32, mips64, loong64);
-+      DEFINED_ON(x86, x64, arm, mips32, mips64, loong64, riscv64);
-   inline void mul64(const Register64& src, const Register64& dest,
-                     const Register temp) PER_ARCH;
-   inline void mul64(const Register64& src1, const Register64& src2,
-@@ -1116,14 +1124,14 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   inline void mulDouble(FloatRegister src, FloatRegister dest) PER_SHARED_ARCH;
- 
-   inline void mulDoublePtr(ImmPtr imm, Register temp, FloatRegister dest)
--      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, x86, x64, loong64, riscv64);
- 
-   // Perform an integer division, returning the integer part rounded toward
-   // zero. rhs must not be zero, and the division must not overflow.
-   //
-   // On ARM, the chip must have hardware division instructions.
-   inline void quotient32(Register rhs, Register srcDest, bool isUnsigned)
--      DEFINED_ON(mips_shared, arm, arm64, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, loong64, riscv64);
- 
-   // As above, but srcDest must be eax and tempEdx must be edx.
-   inline void quotient32(Register rhs, Register srcDest, Register tempEdx,
-@@ -1134,7 +1142,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   //
-   // On ARM, the chip must have hardware division instructions.
-   inline void remainder32(Register rhs, Register srcDest, bool isUnsigned)
--      DEFINED_ON(mips_shared, arm, arm64, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, loong64, riscv64);
- 
-   // As above, but srcDest must be eax and tempEdx must be edx.
-   inline void remainder32(Register rhs, Register srcDest, Register tempEdx,
-@@ -1149,7 +1157,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // rhs is preserved, srdDest is clobbered.
-   void flexibleRemainder32(Register rhs, Register srcDest, bool isUnsigned,
-                            const LiveRegisterSet& volatileLiveRegs)
--      DEFINED_ON(mips_shared, arm, arm64, x86_shared, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, x86_shared, loong64, riscv64);
- 
-   // Perform an integer division, returning the integer part rounded toward
-   // zero. rhs must not be zero, and the division must not overflow.
-@@ -1160,7 +1168,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // rhs is preserved, srdDest is clobbered.
-   void flexibleQuotient32(Register rhs, Register srcDest, bool isUnsigned,
-                           const LiveRegisterSet& volatileLiveRegs)
--      DEFINED_ON(mips_shared, arm, arm64, x86_shared, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, x86_shared, loong64, riscv64);
- 
-   // Perform an integer division, returning the integer part rounded toward
-   // zero. rhs must not be zero, and the division must not overflow. The
-@@ -1173,7 +1181,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   void flexibleDivMod32(Register rhs, Register srcDest, Register remOutput,
-                         bool isUnsigned,
-                         const LiveRegisterSet& volatileLiveRegs)
--      DEFINED_ON(mips_shared, arm, arm64, x86_shared, loong64);
-+      DEFINED_ON(mips_shared, arm, arm64, x86_shared, loong64, riscv64);
- 
-   inline void divFloat32(FloatRegister src, FloatRegister dest) PER_SHARED_ARCH;
-   inline void divDouble(FloatRegister src, FloatRegister dest) PER_SHARED_ARCH;
-@@ -1380,7 +1388,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   template <typename T1, typename T2>
-   inline void cmp32Set(Condition cond, T1 lhs, T2 rhs, Register dest)
--      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64);
-+      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64, riscv64);
- 
-   // Only the NotEqual and Equal conditions are allowed.
-   inline void cmp64Set(Condition cond, Address lhs, Imm64 rhs,
-@@ -1415,10 +1423,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void branch32(Condition cond, const AbsoluteAddress& lhs, Register rhs,
-                        Label* label)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
-   inline void branch32(Condition cond, const AbsoluteAddress& lhs, Imm32 rhs,
-                        Label* label)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   inline void branch32(Condition cond, const BaseIndex& lhs, Register rhs,
-                        Label* label) DEFINED_ON(arm, x86_shared);
-@@ -1432,7 +1440,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void branch32(Condition cond, wasm::SymbolicAddress lhs, Imm32 rhs,
-                        Label* label)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   // The supported condition are Equal, NotEqual, LessThan(orEqual),
-   // GreaterThan(orEqual), Below(orEqual) and Above(orEqual). When a fail label
-@@ -1483,14 +1491,14 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void branchPtr(Condition cond, const AbsoluteAddress& lhs,
-                         Register rhs, Label* label)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
-   inline void branchPtr(Condition cond, const AbsoluteAddress& lhs, ImmWord rhs,
-                         Label* label)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   inline void branchPtr(Condition cond, wasm::SymbolicAddress lhs, Register rhs,
-                         Label* label)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   // Given a pointer to a GC Cell, retrieve the StoreBuffer pointer from its
-   // chunk header, or nullptr if it is in the tenured heap.
-@@ -1498,7 +1506,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   void branchPtrInNurseryChunk(Condition cond, Register ptr, Register temp,
-                                Label* label)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
-   void branchPtrInNurseryChunk(Condition cond, const Address& address,
-                                Register temp, Label* label) DEFINED_ON(x86);
-   void branchValueIsNurseryCell(Condition cond, const Address& address,
-@@ -1520,10 +1528,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // x64 variants will do this only in the int64_t range.
-   inline void branchTruncateFloat32MaybeModUint32(FloatRegister src,
-                                                   Register dest, Label* fail)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
-   inline void branchTruncateDoubleMaybeModUint32(FloatRegister src,
-                                                  Register dest, Label* fail)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   // Truncate a double/float32 to intptr and when it doesn't fit jump to the
-   // failure label.
-@@ -1536,10 +1544,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // failure label.
-   inline void branchTruncateFloat32ToInt32(FloatRegister src, Register dest,
-                                            Label* fail)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
-   inline void branchTruncateDoubleToInt32(FloatRegister src, Register dest,
-                                           Label* fail)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   inline void branchDouble(DoubleCondition cond, FloatRegister lhs,
-                            FloatRegister rhs, Label* label) PER_SHARED_ARCH;
-@@ -1596,7 +1604,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                            Label* label) PER_SHARED_ARCH;
-   inline void branchTest32(Condition cond, const AbsoluteAddress& lhs,
-                            Imm32 rhs, Label* label)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   template <class L>
-   inline void branchTestPtr(Condition cond, Register lhs, Register rhs,
-@@ -1757,7 +1765,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   inline void branchTestInt32(Condition cond, Register tag,
-                               Label* label) PER_SHARED_ARCH;
-   inline void branchTestDouble(Condition cond, Register tag, Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
-   inline void branchTestNumber(Condition cond, Register tag,
-                                Label* label) PER_SHARED_ARCH;
-   inline void branchTestBoolean(Condition cond, Register tag,
-@@ -1789,7 +1797,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                                   Label* label) PER_SHARED_ARCH;
-   inline void branchTestUndefined(Condition cond, const ValueOperand& value,
-                                   Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestInt32(Condition cond, const Address& address,
-                               Label* label) PER_SHARED_ARCH;
-@@ -1797,7 +1805,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                               Label* label) PER_SHARED_ARCH;
-   inline void branchTestInt32(Condition cond, const ValueOperand& value,
-                               Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestDouble(Condition cond, const Address& address,
-                                Label* label) PER_SHARED_ARCH;
-@@ -1805,11 +1813,11 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                                Label* label) PER_SHARED_ARCH;
-   inline void branchTestDouble(Condition cond, const ValueOperand& value,
-                                Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestNumber(Condition cond, const ValueOperand& value,
-                                Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestBoolean(Condition cond, const Address& address,
-                                 Label* label) PER_SHARED_ARCH;
-@@ -1817,7 +1825,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                                 Label* label) PER_SHARED_ARCH;
-   inline void branchTestBoolean(Condition cond, const ValueOperand& value,
-                                 Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestString(Condition cond, const Address& address,
-                                Label* label) PER_SHARED_ARCH;
-@@ -1825,7 +1833,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                                Label* label) PER_SHARED_ARCH;
-   inline void branchTestString(Condition cond, const ValueOperand& value,
-                                Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestSymbol(Condition cond, const Address& address,
-                                Label* label) PER_SHARED_ARCH;
-@@ -1833,7 +1841,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                                Label* label) PER_SHARED_ARCH;
-   inline void branchTestSymbol(Condition cond, const ValueOperand& value,
-                                Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestBigInt(Condition cond, const Address& address,
-                                Label* label) PER_SHARED_ARCH;
-@@ -1841,7 +1849,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                                Label* label) PER_SHARED_ARCH;
-   inline void branchTestBigInt(Condition cond, const ValueOperand& value,
-                                Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestNull(Condition cond, const Address& address,
-                              Label* label) PER_SHARED_ARCH;
-@@ -1849,7 +1857,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                              Label* label) PER_SHARED_ARCH;
-   inline void branchTestNull(Condition cond, const ValueOperand& value,
-                              Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   // Clobbers the ScratchReg on x64.
-   inline void branchTestObject(Condition cond, const Address& address,
-@@ -1858,7 +1866,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-                                Label* label) PER_SHARED_ARCH;
-   inline void branchTestObject(Condition cond, const ValueOperand& value,
-                                Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestGCThing(Condition cond, const Address& address,
-                                 Label* label) PER_SHARED_ARCH;
-@@ -1869,7 +1877,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void branchTestPrimitive(Condition cond, const ValueOperand& value,
-                                   Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestMagic(Condition cond, const Address& address,
-                               Label* label) PER_SHARED_ARCH;
-@@ -1878,7 +1886,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   template <class L>
-   inline void branchTestMagic(Condition cond, const ValueOperand& value,
-                               L label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   inline void branchTestMagic(Condition cond, const Address& valaddr,
-                               JSWhyMagic why, Label* label) PER_ARCH;
-@@ -1896,17 +1904,17 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // The type of the value should match the type of the method.
-   inline void branchTestInt32Truthy(bool truthy, const ValueOperand& value,
-                                     Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
-   inline void branchTestDoubleTruthy(bool truthy, FloatRegister reg,
-                                      Label* label) PER_SHARED_ARCH;
-   inline void branchTestBooleanTruthy(bool truthy, const ValueOperand& value,
-                                       Label* label) PER_ARCH;
-   inline void branchTestStringTruthy(bool truthy, const ValueOperand& value,
-                                      Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
-   inline void branchTestBigIntTruthy(bool truthy, const ValueOperand& value,
-                                      Label* label)
--      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared);
-+      DEFINED_ON(arm, arm64, mips32, mips64, loong64, x86_shared, riscv64);
- 
-   // Create an unconditional branch to the address given as argument.
-   inline void branchToComputedAddress(const BaseIndex& address) PER_ARCH;
-@@ -2008,11 +2016,11 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void cmp32Move32(Condition cond, Register lhs, Register rhs,
-                           Register src, Register dest)
--      DEFINED_ON(arm, arm64, loong64, mips_shared, x86_shared);
-+      DEFINED_ON(arm, arm64, loong64, mips_shared, x86_shared, riscv64);
- 
-   inline void cmp32Move32(Condition cond, Register lhs, const Address& rhs,
-                           Register src, Register dest)
--      DEFINED_ON(arm, arm64, loong64, mips_shared, x86_shared);
-+      DEFINED_ON(arm, arm64, loong64, mips_shared, x86_shared, riscv64);
- 
-   inline void cmpPtrMovePtr(Condition cond, Register lhs, Register rhs,
-                             Register src, Register dest) PER_ARCH;
-@@ -2022,36 +2030,36 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void cmp32Load32(Condition cond, Register lhs, const Address& rhs,
-                           const Address& src, Register dest)
--      DEFINED_ON(arm, arm64, loong64, mips_shared, x86_shared);
-+      DEFINED_ON(arm, arm64, loong64, mips_shared, x86_shared, riscv64);
- 
-   inline void cmp32Load32(Condition cond, Register lhs, Register rhs,
-                           const Address& src, Register dest)
--      DEFINED_ON(arm, arm64, loong64, mips_shared, x86_shared);
-+      DEFINED_ON(arm, arm64, loong64, mips_shared, x86_shared, riscv64);
- 
-   inline void cmp32LoadPtr(Condition cond, const Address& lhs, Imm32 rhs,
-                            const Address& src, Register dest)
--      DEFINED_ON(arm, arm64, loong64, mips_shared, x86, x64);
-+      DEFINED_ON(arm, arm64, loong64, mips_shared, x86, x64, riscv64);
- 
-   inline void cmp32MovePtr(Condition cond, Register lhs, Imm32 rhs,
-                            Register src, Register dest)
--      DEFINED_ON(arm, arm64, loong64, mips_shared, x86, x64);
-+      DEFINED_ON(arm, arm64, loong64, mips_shared, x86, x64, riscv64);
- 
-   inline void test32LoadPtr(Condition cond, const Address& addr, Imm32 mask,
-                             const Address& src, Register dest)
--      DEFINED_ON(arm, arm64, loong64, mips_shared, x86, x64);
-+      DEFINED_ON(arm, arm64, loong64, mips_shared, x86, x64, riscv64);
- 
-   inline void test32MovePtr(Condition cond, const Address& addr, Imm32 mask,
-                             Register src, Register dest)
--      DEFINED_ON(arm, arm64, loong64, mips_shared, x86, x64);
-+      DEFINED_ON(arm, arm64, loong64, mips_shared, x86, x64, riscv64);
- 
-   // Conditional move for Spectre mitigations.
-   inline void spectreMovePtr(Condition cond, Register src, Register dest)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   // Zeroes dest if the condition is true.
-   inline void spectreZeroRegister(Condition cond, Register scratch,
-                                   Register dest)
--      DEFINED_ON(arm, arm64, mips_shared, x86_shared, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86_shared, loong64, riscv64);
- 
-   // Performs a bounds check and zeroes the index register if out-of-bounds
-   // (to mitigate Spectre).
-@@ -2063,17 +2071,17 @@ class MacroAssembler : public MacroAssemblerSpecific {
-  public:
-   inline void spectreBoundsCheck32(Register index, Register length,
-                                    Register maybeScratch, Label* failure)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
-   inline void spectreBoundsCheck32(Register index, const Address& length,
-                                    Register maybeScratch, Label* failure)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   inline void spectreBoundsCheckPtr(Register index, Register length,
-                                     Register maybeScratch, Label* failure)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
-   inline void spectreBoundsCheckPtr(Register index, const Address& length,
-                                     Register maybeScratch, Label* failure)
--      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64);
-+      DEFINED_ON(arm, arm64, mips_shared, x86, x64, loong64, riscv64);
- 
-   // ========================================================================
-   // Canonicalization primitives.
-@@ -2087,10 +2095,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // ========================================================================
-   // Memory access primitives.
-   inline void storeUncanonicalizedDouble(FloatRegister src, const Address& dest)
--      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64);
-+      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64, riscv64);
-   inline void storeUncanonicalizedDouble(FloatRegister src,
-                                          const BaseIndex& dest)
--      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64);
-+      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64, riscv64);
-   inline void storeUncanonicalizedDouble(FloatRegister src, const Operand& dest)
-       DEFINED_ON(x86_shared);
- 
-@@ -2104,10 +2112,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   inline void storeUncanonicalizedFloat32(FloatRegister src,
-                                           const Address& dest)
--      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64);
-+      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64, riscv64);
-   inline void storeUncanonicalizedFloat32(FloatRegister src,
-                                           const BaseIndex& dest)
--      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64);
-+      DEFINED_ON(x86_shared, arm, arm64, mips32, mips64, loong64, riscv64);
-   inline void storeUncanonicalizedFloat32(FloatRegister src,
-                                           const Operand& dest)
-       DEFINED_ON(x86_shared);
-@@ -3508,10 +3516,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   // temp required on x86 and x64; must be undefined on mips64 and loong64.
-   void convertUInt64ToFloat32(Register64 src, FloatRegister dest, Register temp)
--      DEFINED_ON(arm64, mips64, loong64, x64, x86);
-+      DEFINED_ON(arm64, mips64, loong64, x64, x86, riscv64);
- 
-   void convertInt64ToFloat32(Register64 src, FloatRegister dest)
--      DEFINED_ON(arm64, mips64, loong64, x64, x86);
-+      DEFINED_ON(arm64, mips64, loong64, x64, x86, riscv64);
- 
-   bool convertUInt64ToDoubleNeedsTemp() PER_ARCH;
- 
-@@ -3563,19 +3571,19 @@ class MacroAssembler : public MacroAssemblerSpecific {
- 
-   void wasmBoundsCheck32(Condition cond, Register index,
-                          Register boundsCheckLimit, Label* ok)
--      DEFINED_ON(arm, arm64, mips32, mips64, x86_shared, loong64);
-+      DEFINED_ON(arm, arm64, mips32, mips64, x86_shared, loong64, riscv64);
- 
-   void wasmBoundsCheck32(Condition cond, Register index,
-                          Address boundsCheckLimit, Label* ok)
--      DEFINED_ON(arm, arm64, mips32, mips64, x86_shared, loong64);
-+      DEFINED_ON(arm, arm64, mips32, mips64, x86_shared, loong64, riscv64);
- 
-   void wasmBoundsCheck64(Condition cond, Register64 index,
-                          Register64 boundsCheckLimit, Label* ok)
--      DEFINED_ON(arm64, mips64, x64, x86, arm, loong64);
-+      DEFINED_ON(arm64, mips64, x64, x86, arm, loong64, riscv64);
- 
-   void wasmBoundsCheck64(Condition cond, Register64 index,
-                          Address boundsCheckLimit, Label* ok)
--      DEFINED_ON(arm64, mips64, x64, x86, arm, loong64);
-+      DEFINED_ON(arm64, mips64, x64, x86, arm, loong64, riscv64);
- 
-   // Each wasm load/store instruction appends its own wasm::Trap::OutOfBounds.
-   void wasmLoad(const wasm::MemoryAccessDesc& access, Operand srcAddr,
-@@ -3668,7 +3676,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   void oolWasmTruncateCheckF64ToI32(FloatRegister input, Register output,
-                                     TruncFlags flags, wasm::BytecodeOffset off,
-                                     Label* rejoin)
--      DEFINED_ON(arm, arm64, x86_shared, mips_shared, loong64);
-+      DEFINED_ON(arm, arm64, x86_shared, mips_shared, loong64, riscv64);
- 
-   void wasmTruncateFloat32ToUInt32(FloatRegister input, Register output,
-                                    bool isSaturating, Label* oolEntry) PER_ARCH;
-@@ -3678,35 +3686,35 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   void oolWasmTruncateCheckF32ToI32(FloatRegister input, Register output,
-                                     TruncFlags flags, wasm::BytecodeOffset off,
-                                     Label* rejoin)
--      DEFINED_ON(arm, arm64, x86_shared, mips_shared, loong64);
-+      DEFINED_ON(arm, arm64, x86_shared, mips_shared, loong64, riscv64);
- 
-   // The truncate-to-int64 methods will always bind the `oolRejoin` label
-   // after the last emitted instruction.
-   void wasmTruncateDoubleToInt64(FloatRegister input, Register64 output,
-                                  bool isSaturating, Label* oolEntry,
-                                  Label* oolRejoin, FloatRegister tempDouble)
--      DEFINED_ON(arm64, x86, x64, mips64, loong64);
-+      DEFINED_ON(arm64, x86, x64, mips64, loong64, riscv64);
-   void wasmTruncateDoubleToUInt64(FloatRegister input, Register64 output,
-                                   bool isSaturating, Label* oolEntry,
-                                   Label* oolRejoin, FloatRegister tempDouble)
--      DEFINED_ON(arm64, x86, x64, mips64, loong64);
-+      DEFINED_ON(arm64, x86, x64, mips64, loong64, riscv64);
-   void oolWasmTruncateCheckF64ToI64(FloatRegister input, Register64 output,
-                                     TruncFlags flags, wasm::BytecodeOffset off,
-                                     Label* rejoin)
--      DEFINED_ON(arm, arm64, x86_shared, mips_shared, loong64);
-+      DEFINED_ON(arm, arm64, x86_shared, mips_shared, loong64, riscv64);
- 
-   void wasmTruncateFloat32ToInt64(FloatRegister input, Register64 output,
-                                   bool isSaturating, Label* oolEntry,
-                                   Label* oolRejoin, FloatRegister tempDouble)
--      DEFINED_ON(arm64, x86, x64, mips64, loong64);
-+      DEFINED_ON(arm64, x86, x64, mips64, loong64, riscv64);
-   void wasmTruncateFloat32ToUInt64(FloatRegister input, Register64 output,
-                                    bool isSaturating, Label* oolEntry,
-                                    Label* oolRejoin, FloatRegister tempDouble)
--      DEFINED_ON(arm64, x86, x64, mips64, loong64);
-+      DEFINED_ON(arm64, x86, x64, mips64, loong64, riscv64);
-   void oolWasmTruncateCheckF32ToI64(FloatRegister input, Register64 output,
-                                     TruncFlags flags, wasm::BytecodeOffset off,
-                                     Label* rejoin)
--      DEFINED_ON(arm, arm64, x86_shared, mips_shared, loong64);
-+      DEFINED_ON(arm, arm64, x86_shared, mips_shared, loong64, riscv64);
- 
-   void loadWasmGlobalPtr(uint32_t globalDataOffset, Register dest);
- 
-@@ -3764,7 +3772,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   // convention, which requires predictable high bits.  In practice, this means
-   // that the 32-bit value will be zero-extended or sign-extended to 64 bits as
-   // appropriate for the platform.
--  void widenInt32(Register r) DEFINED_ON(arm64, x64, mips64, loong64);
-+  void widenInt32(Register r) DEFINED_ON(arm64, x64, mips64, loong64, riscv64);
- 
-   // As enterFakeExitFrame(), but using register conventions appropriate for
-   // wasm stubs.
-@@ -5006,7 +5014,7 @@ class MacroAssembler : public MacroAssemblerSpecific {
-   inline void addStackPtrTo(T t);
- 
-   void subFromStackPtr(Imm32 imm32)
--      DEFINED_ON(mips32, mips64, loong64, arm, x86, x64);
-+      DEFINED_ON(mips32, mips64, loong64, arm, x86, x64, riscv64);
-   void subFromStackPtr(Register reg);
- 
-   template <typename T>
-diff --git a/js/src/jit/MoveEmitter.h b/js/src/jit/MoveEmitter.h
-index a51cbc100a..ea4d92bedc 100644
---- a/js/src/jit/MoveEmitter.h
-+++ b/js/src/jit/MoveEmitter.h
-@@ -17,6 +17,8 @@
- #  include "jit/mips32/MoveEmitter-mips32.h"
- #elif defined(JS_CODEGEN_MIPS64)
- #  include "jit/mips64/MoveEmitter-mips64.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/MoveEmitter-riscv64.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/MoveEmitter-loong64.h"
- #elif defined(JS_CODEGEN_NONE)
-diff --git a/js/src/jit/Registers.h b/js/src/jit/Registers.h
-index 2c1cec0771..baf0630e07 100644
---- a/js/src/jit/Registers.h
-+++ b/js/src/jit/Registers.h
-@@ -20,6 +20,8 @@
- #  include "jit/mips32/Architecture-mips32.h"
- #elif defined(JS_CODEGEN_MIPS64)
- #  include "jit/mips64/Architecture-mips64.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/Architecture-riscv64.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/Architecture-loong64.h"
- #elif defined(JS_CODEGEN_NONE)
-diff --git a/js/src/jit/SharedICHelpers-inl.h b/js/src/jit/SharedICHelpers-inl.h
-index 60a77956f0..242f5d3f27 100644
---- a/js/src/jit/SharedICHelpers-inl.h
-+++ b/js/src/jit/SharedICHelpers-inl.h
-@@ -17,6 +17,8 @@
- #  include "jit/arm64/SharedICHelpers-arm64-inl.h"
- #elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)
- #  include "jit/mips-shared/SharedICHelpers-mips-shared-inl.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/SharedICHelpers-riscv64-inl.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/SharedICHelpers-loong64-inl.h"
- #elif defined(JS_CODEGEN_NONE)
-diff --git a/js/src/jit/SharedICHelpers.h b/js/src/jit/SharedICHelpers.h
-index da8378ebae..bfe4a1b672 100644
---- a/js/src/jit/SharedICHelpers.h
-+++ b/js/src/jit/SharedICHelpers.h
-@@ -17,6 +17,8 @@
- #  include "jit/arm64/SharedICHelpers-arm64.h"
- #elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)
- #  include "jit/mips-shared/SharedICHelpers-mips-shared.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/SharedICHelpers-riscv64.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/SharedICHelpers-loong64.h"
- #elif defined(JS_CODEGEN_NONE)
-diff --git a/js/src/jit/SharedICRegisters.h b/js/src/jit/SharedICRegisters.h
-index e29f21c28d..4091d9f595 100644
---- a/js/src/jit/SharedICRegisters.h
-+++ b/js/src/jit/SharedICRegisters.h
-@@ -19,6 +19,8 @@
- #  include "jit/mips32/SharedICRegisters-mips32.h"
- #elif defined(JS_CODEGEN_MIPS64)
- #  include "jit/mips64/SharedICRegisters-mips64.h"
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  include "jit/riscv64/SharedICRegisters-riscv64.h"
- #elif defined(JS_CODEGEN_LOONG64)
- #  include "jit/loong64/SharedICRegisters-loong64.h"
- #elif defined(JS_CODEGEN_NONE)
-diff --git a/js/src/jit/moz.build b/js/src/jit/moz.build
-index 967146e32f..1519351bbb 100644
---- a/js/src/jit/moz.build
-+++ b/js/src/jit/moz.build
-@@ -212,6 +212,13 @@ elif CONFIG["JS_CODEGEN_MIPS32"] or CONFIG["JS_CODEGEN_MIPS64"]:
-         ]
-         if CONFIG["JS_SIMULATOR_MIPS64"]:
-             UNIFIED_SOURCES += ["mips64/Simulator-mips64.cpp"]
-+elif CONFIG["JS_CODEGEN_RISCV64"]:
-+    UNIFIED_SOURCES += [
-+        "riscv64/Assembler-riscv64.cpp",
-+        "riscv64/Trampoline-riscv64.cpp",
-+    ]
-+    if CONFIG["JS_SIMULATOR_RISC64"]:
-+        UNIFIED_SOURCES += ["riscv64/Simulator-riscv64.cpp"]
- elif CONFIG["JS_CODEGEN_LOONG64"]:
-     UNIFIED_SOURCES += [
-         "loong64/Architecture-loong64.cpp",
-@@ -225,7 +232,6 @@ elif CONFIG["JS_CODEGEN_LOONG64"]:
-     if CONFIG["JS_SIMULATOR_LOONG64"]:
-         UNIFIED_SOURCES += ["loong64/Simulator-loong64.cpp"]
- 
--
- # Generate jit/MIROpsGenerated.h from jit/MIROps.yaml
- GeneratedFile(
-     "MIROpsGenerated.h",
-diff --git a/js/src/jit/riscv64/Architecture-riscv64.h b/js/src/jit/riscv64/Architecture-riscv64.h
-new file mode 100644
-index 0000000000..a676dc142e
---- /dev/null
-+++ b/js/src/jit/riscv64/Architecture-riscv64.h
-@@ -0,0 +1,404 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_Architecture_riscv64_h
-+#define jit_riscv64_Architecture_riscv64_h
-+
-+// JitSpewer.h is included through MacroAssembler implementations for other
-+// platforms, so include it here to avoid inadvertent build bustage.
-+#include "jit/JitSpewer.h"
-+
-+#include "jit/shared/Architecture-shared.h"
-+
-+namespace js {
-+namespace jit {
-+
-+static const uint32_t SimdMemoryAlignment =
-+    4;  // Make it 4 to avoid a bunch of div-by-zero warnings
-+static const uint32_t WasmStackAlignment = 8;
-+static const uint32_t WasmTrapInstructionLength = 0;
-+
-+// See comments in wasm::GenerateFunctionPrologue.
-+static constexpr uint32_t WasmCheckedCallEntryOffset = 0u;
-+static constexpr uint32_t WasmCheckedTailEntryOffset = 1u;
-+
-+class Registers {
-+ public:
-+  enum RegisterID {
-+    x0 = 0,
-+    zero = 0,
-+    x1 = 1,
-+    ra = 1,
-+    x2 = 2,
-+    sp = 2,
-+    x3 = 3,
-+    gp = 3,
-+    x4 = 4,
-+    tp = 4,
-+    x5 = 5,
-+    t0 = 5,
-+    x6 = 6,
-+    t1 = 6,
-+    x7 = 7,
-+    t2 = 7,
-+    x8 = 8,
-+    fp = 8,
-+    s0 = 8,
-+    x9 = 9,
-+    s1 = 9,
-+    x10 = 10,
-+    a0 = 10,
-+    x11 = 11,
-+    a1 = 11,
-+    x12 = 12,
-+    a2 = 12,
-+    x13 = 13,
-+    a3 = 13,
-+    x14 = 14,
-+    a4 = 14,
-+    x15 = 15,
-+    a5 = 15,
-+    x16 = 16,
-+    a6 = 16,
-+    x17 = 17,
-+    a7 = 17,
-+    x18 = 18,
-+    s2 = 18,
-+    x19 = 19,
-+    s3 = 19,
-+    x20 = 20,
-+    s4 = 20,
-+    x21 = 21,
-+    s5 = 21,
-+    x22 = 22,
-+    s6 = 22,
-+    x23 = 23,
-+    s7 = 23,
-+    x24 = 24,
-+    s8 = 24,
-+    x25 = 25,
-+    s9 = 25,
-+    x26 = 26,
-+    s10 = 26,
-+    x27 = 27,
-+    s11 = 27,
-+    x28 = 28,
-+    t3 = 28,
-+    x29 = 29,
-+    t4 = 29,
-+    x30 = 30,
-+    t5 = 30,
-+    x31 = 31,
-+    t6 = 31,
-+    invalid_reg
-+  };
-+  typedef uint8_t Code;
-+  typedef RegisterID Encoding;
-+  union RegisterContent {
-+    uintptr_t r;
-+  };
-+
-+  typedef uint32_t SetType;
-+
-+  static uint32_t SetSize(SetType x) {
-+    static_assert(sizeof(SetType) == 4, "SetType must be 32 bits");
-+    return mozilla::CountPopulation32(x);
-+  }
-+  static uint32_t FirstBit(SetType x) {
-+    return mozilla::CountTrailingZeroes32(x);
-+  }
-+  static uint32_t LastBit(SetType x) {
-+    return 31 - mozilla::CountLeadingZeroes32(x);
-+  }
-+
-+  static const char* GetName(uint32_t code) {
-+    // clang-format off
-+    static const char* const Names[] = {
-+        "zero", "ra", "sp",  "gp",  "tp", "t0", "t1", "t2",
-+        "fp",   "s1", "a0",  "a1",  "a2", "a3", "a4", "a5",
-+        "a6",   "a7", "s2",  "s3",  "s4", "s5", "s6", "s7",
-+        "s8",   "s9", "s10", "s11", "t3", "t4", "t5", "t6"};
-+    // clang-format on
-+    static_assert(Total == sizeof(Names) / sizeof(Names[0]),
-+                  "Table is the correct size");
-+    if (code >= Total) {
-+      return "invalid";
-+    }
-+    return Names[code];
-+  }
-+
-+  static Code FromName(const char* name) {
-+    for (size_t i = 0; i < Total; i++) {
-+      if (strcmp(GetName(Code(i)), name) == 0) {
-+        return Code(i);
-+      }
-+    }
-+    return Invalid;
-+  }
-+
-+  static const Encoding StackPointer = sp;
-+  static const Encoding Invalid = invalid_reg;
-+  static const uint32_t Total = 32;
-+  static const uint32_t TotalPhys = 32;
-+  static const uint32_t Allocatable = 28;
-+  static const SetType AllMask = 0xffffffff;
-+  static const SetType ArgRegMask =
-+      (1 << Registers::a0) | (1 << Registers::a1) | (1 << Registers::a2) |
-+      (1 << Registers::a3) | (1 << Registers::a4) | (1 << Registers::a5) |
-+      (1 << Registers::a6) | (1 << Registers::a7);
-+  static const SetType VolatileMask =
-+      (1 << Registers::a0) | (1 << Registers::a1) | (1 << Registers::a2) |
-+      (1 << Registers::a3) | (1 << Registers::a4) | (1 << Registers::a5) |
-+      (1 << Registers::a6) | (1 << Registers::a7) | (1 << Registers::t0) |
-+      (1 << Registers::t1) | (1 << Registers::t2) | (1 << Registers::t3) |
-+      (1 << Registers::t4) | (1 << Registers::t5) | (1 << Registers::t6);
-+  static const SetType NonVolatileMask =
-+      (1 << Registers::s0) | (1 << Registers::s1) | (1 << Registers::s2) |
-+      (1 << Registers::s3) | (1 << Registers::s4) | (1 << Registers::s5) |
-+      (1 << Registers::s6) | (1 << Registers::s7) | (1 << Registers::s8) |
-+      (1 << Registers::s9) | (1 << Registers::s10) | (1 << Registers::s11);
-+  static const SetType NonAllocatableMask =
-+      (1 << Registers::zero) | (1 << Registers::sp) | (1 << Registers::tp) |
-+      (1 << Registers::gp);
-+  static const SetType AllocatableMask = AllMask & ~NonAllocatableMask;
-+  static const SetType JSCallMask = 0;
-+  static const SetType CallMask = 0;
-+};
-+
-+typedef uint8_t PackedRegisterMask;
-+
-+class FloatRegisters {
-+ public:
-+  enum FPRegisterID {
-+    f0 = 0,
-+    ft0 = 0,
-+    f1 = 1,
-+    ft1 = 1,
-+    f2 = 2,
-+    ft2 = 2,
-+    f3 = 3,
-+    ft3 = 3,
-+    f4 = 4,
-+    ft4 = 4,
-+    f5 = 5,
-+    ft5 = 5,
-+    f6 = 6,
-+    ft6 = 6,
-+    f7 = 7,
-+    ft7 = 7,
-+    f8 = 8,
-+    fs0 = 8,
-+    f9 = 9,
-+    fs1 = 9,
-+    f10 = 10,
-+    fa0 = 10,
-+    f11 = 11,
-+    fa1 = 11,
-+    f12 = 12,
-+    fa2 = 12,
-+    f13 = 13,
-+    fa3 = 13,
-+    f14 = 14,
-+    fa4 = 14,
-+    f15 = 15,
-+    fa5 = 15,
-+    f16 = 16,
-+    fa6 = 16,
-+    f17 = 17,
-+    fa7 = 17,
-+    f18 = 18,
-+    fs2 = 18,
-+    f19 = 19,
-+    fs3 = 19,
-+    f20 = 20,
-+    fs4 = 20,
-+    f21 = 21,
-+    fs5 = 21,
-+    f22 = 22,
-+    fs6 = 22,
-+    f23 = 23,
-+    fs7 = 23,
-+    f24 = 24,
-+    fs8 = 24,
-+    f25 = 25,
-+    fs9 = 25,
-+    f26 = 26,
-+    fs10 = 26,
-+    f27 = 27,
-+    fs11 = 27,
-+    f28 = 28,
-+    ft8 = 28,
-+    f29 = 29,
-+    ft9 = 29,
-+    f30 = 30,
-+    ft10 = 30,
-+    f31 = 31,
-+    ft11 = 31,
-+    invalid_reg
-+  };
-+
-+  typedef uint8_t Code;
-+  typedef FPRegisterID Encoding;
-+  typedef uint32_t SetType;
-+
-+  enum Kind : uint8_t { Double, Single };
-+
-+  union RegisterContent {
-+    float s;
-+    double d;
-+  };
-+
-+  static const char* GetName(uint32_t code) {
-+    // clang-format off
-+    static const char* const Names[] = {
-+        "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7",
-+        "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5",
-+        "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7",
-+        "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11",
-+    };
-+    // clang-format on
-+    static_assert(Total == sizeof(Names) / sizeof(Names[0]),
-+                  "Table is the correct size");
-+    if (code >= Total) {
-+      return "invalid";
-+    }
-+    return Names[code];
-+  }
-+  static Code FromName(const char* name) {
-+    for (size_t i = 0; i < Total; i++) {
-+      if (strcmp(GetName(i), name) == 0) {
-+        return Code(i);
-+      }
-+    }
-+
-+    return Invalid;
-+  }
-+
-+  static constexpr Encoding encoding(Code c) { return Encoding(c & 31); }
-+
-+  static const Encoding Invalid = invalid_reg;
-+  static const uint32_t Total = 32;
-+  static const uint32_t TotalPhys = 32;
-+  static const uint32_t Allocatable = 32;
-+  static const SetType AllMask = 0xffffffff;
-+  static const SetType AllDoubleMask = 0;
-+  static const SetType AllSingleMask = 0;
-+  static const SetType VolatileMask =
-+      (1 << FloatRegisters::ft0) | (1 << FloatRegisters::ft1) |
-+      (1 << FloatRegisters::ft2) | (1 << FloatRegisters::ft3) |
-+      (1 << FloatRegisters::ft4) | (1 << FloatRegisters::ft5) |
-+      (1 << FloatRegisters::ft6) | (1 << FloatRegisters::ft7) |
-+      (1 << FloatRegisters::ft8) | (1 << FloatRegisters::ft9) |
-+      (1 << FloatRegisters::ft10) | (1 << FloatRegisters::ft11) |
-+      (1 << FloatRegisters::fa0) | (1 << FloatRegisters::fa1) |
-+      (1 << FloatRegisters::fa2) | (1 << FloatRegisters::fa3) |
-+      (1 << FloatRegisters::fa4) | (1 << FloatRegisters::fa5) |
-+      (1 << FloatRegisters::fa6) | (1 << FloatRegisters::fa7);
-+  static const SetType NonVolatileMask =
-+      (1 << FloatRegisters::fs0) | (1 << FloatRegisters::fs1) |
-+      (1 << FloatRegisters::fs2) | (1 << FloatRegisters::fs3) |
-+      (1 << FloatRegisters::fs4) | (1 << FloatRegisters::fs5) |
-+      (1 << FloatRegisters::fs6) | (1 << FloatRegisters::fs7) |
-+      (1 << FloatRegisters::fs8) | (1 << FloatRegisters::fs9) |
-+      (1 << FloatRegisters::fs10) | (1 << FloatRegisters::fs11);
-+  static const SetType NonAllocatableMask = 0;
-+  static const SetType AllocatableMask = AllMask & ~NonAllocatableMask;
-+};
-+
-+template <typename T>
-+class TypedRegisterSet;
-+
-+struct FloatRegister {
-+  typedef FloatRegisters Codes;
-+  typedef size_t Code;
-+  typedef Codes::Encoding Encoding;
-+  typedef Codes::SetType SetType;
-+  typedef Codes::Kind Kind;
-+
-+ private:
-+  uint8_t encoding_;
-+  uint8_t kind_;
-+  bool invalid_;
-+
-+ public:
-+  constexpr FloatRegister(Encoding encoding)
-+      : encoding_(encoding), kind_(FloatRegisters::Double), invalid_(false) {}
-+  constexpr FloatRegister(Encoding encoding, Kind kind)
-+      : encoding_(encoding), kind_(kind), invalid_(false) {}
-+  constexpr FloatRegister()
-+      : encoding_(0), kind_(FloatRegisters::Double), invalid_(true) {}
-+
-+  static uint32_t FirstBit(SetType) { MOZ_CRASH(); }
-+  static uint32_t LastBit(SetType) { MOZ_CRASH(); }
-+  static FloatRegister FromCode(uint32_t i) {
-+    return FloatRegister(FloatRegisters::encoding(i), FloatRegisters::Double);
-+  }
-+  bool isSingle() const { return kind_ == FloatRegisters::Single; }
-+  bool isDouble() const { return kind_ == FloatRegisters::Double; }
-+  bool isSimd128() const { return false; }
-+  bool isInvalid() const { return invalid_; }
-+  FloatRegister asSingle() const { MOZ_CRASH(); }
-+  FloatRegister asDouble() const { MOZ_CRASH(); }
-+  FloatRegister asSimd128() const { MOZ_CRASH(); }
-+  Code code() const { MOZ_CRASH(); }
-+  Encoding encoding() const { return Encoding(encoding_); }
-+  const char* name() const { return FloatRegisters::GetName(code()); }
-+  bool volatile_() const { MOZ_CRASH(); }
-+  bool operator!=(FloatRegister) const { MOZ_CRASH(); }
-+  bool operator==(FloatRegister) const { MOZ_CRASH(); }
-+  bool aliases(FloatRegister) const { MOZ_CRASH(); }
-+  uint32_t numAliased() const { MOZ_CRASH(); }
-+  FloatRegister aliased(uint32_t) { MOZ_CRASH(); }
-+  bool equiv(FloatRegister) const { MOZ_CRASH(); }
-+  uint32_t size() const { MOZ_CRASH(); }
-+  uint32_t numAlignedAliased() const { MOZ_CRASH(); }
-+  FloatRegister alignedAliased(uint32_t) { MOZ_CRASH(); }
-+  SetType alignedOrDominatedAliasedSet() const { MOZ_CRASH(); }
-+
-+  static constexpr RegTypeName DefaultType = RegTypeName::Float64;
-+
-+  template <RegTypeName = DefaultType>
-+  static SetType LiveAsIndexableSet(SetType s) {
-+    return SetType(0);
-+  }
-+
-+  template <RegTypeName Name = DefaultType>
-+  static SetType AllocatableAsIndexableSet(SetType s) {
-+    static_assert(Name != RegTypeName::Any, "Allocatable set are not iterable");
-+    return SetType(0);
-+  }
-+
-+  template <typename T>
-+  static T ReduceSetForPush(T) {
-+    MOZ_CRASH();
-+  }
-+  uint32_t getRegisterDumpOffsetInBytes() {
-+    MOZ_CRASH();
-+    return 0;
-+  }
-+  static uint32_t SetSize(SetType x) {
-+    MOZ_CRASH();
-+    return 0;
-+  }
-+  static Code FromName(const char* name) { return 0; }
-+
-+  // This is used in static initializers, so produce a bogus value instead of
-+  // crashing.
-+  static uint32_t GetPushSizeInBytes(const TypedRegisterSet<FloatRegister>&) {
-+    return 0;
-+  }
-+};
-+
-+inline bool hasUnaliasedDouble() { MOZ_CRASH(); }
-+inline bool hasMultiAlias() { MOZ_CRASH(); }
-+
-+static const uint32_t ShadowStackSpace = 0;
-+static const uint32_t JumpImmediateRange = INT32_MAX;
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_Architecture_riscv64_h */
-diff --git a/js/src/jit/riscv64/Assembler-riscv64.cpp b/js/src/jit/riscv64/Assembler-riscv64.cpp
-new file mode 100644
-index 0000000000..90fa6d87a8
---- /dev/null
-+++ b/js/src/jit/riscv64/Assembler-riscv64.cpp
-@@ -0,0 +1,47 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "jit/riscv64/Assembler-riscv64.h"
-+
-+using namespace js;
-+using namespace js::jit;
-+
-+ABIArg ABIArgGenerator::next(MIRType type) {
-+  switch (type) {
-+    case MIRType::Int32:
-+    case MIRType::Int64:
-+    case MIRType::Pointer:
-+    case MIRType::RefOrNull:
-+    case MIRType::StackResults:
-+      if (intRegIndex_ == NumIntArgRegs) {
-+        current_ = ABIArg(stackOffset_);
-+        stackOffset_ += sizeof(uintptr_t);
-+        break;
-+      }
-+      current_ = ABIArg(Register::FromCode(intRegIndex_));
-+      intRegIndex_++;
-+      break;
-+
-+    case MIRType::Float32:
-+    case MIRType::Double:
-+      if (floatRegIndex_ == NumFloatArgRegs) {
-+        current_ = ABIArg(stackOffset_);
-+        stackOffset_ += sizeof(double);
-+        break;
-+      }
-+      current_ = ABIArg(FloatRegister(FloatRegisters::Encoding(floatRegIndex_),
-+                                      type == MIRType::Double
-+                                          ? FloatRegisters::Double
-+                                          : FloatRegisters::Single));
-+      floatRegIndex_++;
-+      break;
-+
-+    case MIRType::Simd128:
-+    default:
-+      MOZ_CRASH("Unexpected argument type");
-+  }
-+  return current_;
-+}
-diff --git a/js/src/jit/riscv64/Assembler-riscv64.h b/js/src/jit/riscv64/Assembler-riscv64.h
-new file mode 100644
-index 0000000000..a58e6c4aff
---- /dev/null
-+++ b/js/src/jit/riscv64/Assembler-riscv64.h
-@@ -0,0 +1,303 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_Assembler_riscv64_h
-+#define jit_riscv64_Assembler_riscv64_h
-+
-+#include "mozilla/Sprintf.h"
-+#include <iterator>
-+
-+#include "jit/CompactBuffer.h"
-+#include "jit/JitCode.h"
-+#include "jit/JitSpewer.h"
-+#include "jit/riscv64/Architecture-riscv64.h"
-+#include "jit/shared/Assembler-shared.h"
-+#include "jit/shared/Disassembler-shared.h"
-+#include "jit/shared/IonAssemblerBuffer.h"
-+#include "wasm/WasmTypeDecls.h"
-+
-+namespace js {
-+namespace jit {
-+
-+class MacroAssembler;
-+
-+static constexpr Register t0{Registers::t0};
-+static constexpr Register t1{Registers::t1};
-+static constexpr Register t2{Registers::t2};
-+static constexpr Register t3{Registers::t3};
-+static constexpr Register t4{Registers::t4};
-+static constexpr Register t5{Registers::t5};
-+static constexpr Register t6{Registers::t6};
-+static constexpr Register s0{Registers::s0};
-+static constexpr Register s4{Registers::s4};
-+
-+static constexpr Register StackPointer{Registers::sp};
-+static constexpr Register FramePointer{Registers::fp};
-+static constexpr Register ReturnReg{Registers::a0};
-+static constexpr FloatRegister InvalidFloatReg;
-+static constexpr FloatRegister ReturnFloat32Reg{FloatRegisters::fa0,
-+                                                FloatRegisters::Single};
-+static constexpr FloatRegister ReturnDoubleReg{FloatRegisters::fa0,
-+                                               FloatRegisters::Double};
-+static constexpr FloatRegister ReturnSimd128Reg = InvalidFloatReg;
-+static constexpr FloatRegister ScratchSimd128Reg = InvalidFloatReg;
-+static constexpr FloatRegister ScratchFloat32Reg_ = InvalidFloatReg;
-+static constexpr FloatRegister ScratchDoubleReg_ = InvalidFloatReg;
-+
-+static constexpr Register ScratchRegister = t6;
-+
-+// Helper class for ScratchRegister usage. Asserts that only one piece
-+// of code thinks it has exclusive ownership of the scratch register.
-+struct ScratchRegisterScope : public AutoRegisterScope {
-+  explicit ScratchRegisterScope(MacroAssembler& masm)
-+      : AutoRegisterScope(masm, ScratchRegister) {}
-+};
-+
-+struct SecondScratchRegisterScope : public AutoRegisterScope {
-+  explicit SecondScratchRegisterScope(MacroAssembler& masm);
-+};
-+
-+struct ScratchFloat32Scope : AutoFloatRegisterScope {
-+  explicit ScratchFloat32Scope(MacroAssembler& masm)
-+      : AutoFloatRegisterScope(masm, ScratchFloat32Reg_) {}
-+};
-+
-+struct ScratchDoubleScope : AutoFloatRegisterScope {
-+  explicit ScratchDoubleScope(MacroAssembler& masm)
-+      : AutoFloatRegisterScope(masm, ScratchDoubleReg_) {}
-+};
-+
-+static constexpr Register OsrFrameReg{Registers::invalid_reg};
-+static constexpr Register PreBarrierReg{Registers::invalid_reg};
-+static constexpr Register InterpreterPCReg{Registers::invalid_reg};
-+static constexpr Register CallTempReg0 = t0;
-+static constexpr Register CallTempReg1 = t1;
-+static constexpr Register CallTempReg2 = t2;
-+static constexpr Register CallTempReg3 = t3;
-+static constexpr Register CallTempReg4 = t4;
-+static constexpr Register CallTempReg5 = t5;
-+static constexpr Register InvalidReg{Registers::invalid_reg};
-+static constexpr Register CallTempNonArgRegs[] = {t0, t1, t2, t3, t4, t5, t6};
-+static const uint32_t NumCallTempNonArgRegs = std::size(CallTempNonArgRegs);
-+
-+static constexpr Register IntArgReg0{Registers::a0};
-+static constexpr Register IntArgReg1{Registers::a1};
-+static constexpr Register IntArgReg2{Registers::a2};
-+static constexpr Register IntArgReg3{Registers::a3};
-+static constexpr Register IntArgReg4{Registers::a4};
-+static constexpr Register IntArgReg5{Registers::a5};
-+static constexpr Register IntArgReg6{Registers::a6};
-+static constexpr Register IntArgReg7{Registers::a7};
-+static constexpr Register HeapReg{Registers::invalid_reg};
-+
-+// Registerd used in RegExpTester instruction (do not use ReturnReg).
-+static constexpr Register RegExpTesterRegExpReg = CallTempReg0;
-+static constexpr Register RegExpTesterStringReg = CallTempReg1;
-+static constexpr Register RegExpTesterLastIndexReg = CallTempReg2;
-+
-+// Registerd used in RegExpMatcher instruction (do not use JSReturnOperand).
-+static constexpr Register RegExpMatcherRegExpReg = CallTempReg0;
-+static constexpr Register RegExpMatcherStringReg = CallTempReg1;
-+static constexpr Register RegExpMatcherLastIndexReg = CallTempReg2;
-+
-+static constexpr Register JSReturnReg_Type{Registers::a3};
-+static constexpr Register JSReturnReg_Data{Registers::a2};
-+static constexpr Register JSReturnReg{Registers::a2};
-+
-+static constexpr Register64 ReturnReg64(ReturnReg);
-+
-+static constexpr Register ABINonArgReg0{Registers::s0};
-+static constexpr Register ABINonArgReg1{Registers::s1};
-+static constexpr Register ABINonArgReg2{Registers::s2};
-+static constexpr Register ABINonArgReg3{Registers::s3};
-+static constexpr Register ABINonArgReturnReg0{Registers::s0};
-+static constexpr Register ABINonArgReturnReg1{Registers::s1};
-+static constexpr Register ABINonVolatileReg{Registers::fp};
-+static constexpr Register ABINonArgReturnVolatileReg{Registers::ra};
-+
-+static constexpr FloatRegister ABINonArgDoubleReg = InvalidFloatReg;
-+
-+// Instance pointer argument register for WebAssembly functions. This must not
-+// alias any other register used for passing function arguments or return
-+// values. Preserved by WebAssembly functions.
-+static constexpr Register InstanceReg = s4;
-+
-+static constexpr Register WasmTableCallScratchReg0{Registers::invalid_reg};
-+static constexpr Register WasmTableCallScratchReg1{Registers::invalid_reg};
-+static constexpr Register WasmTableCallSigReg{Registers::invalid_reg};
-+static constexpr Register WasmTableCallIndexReg{Registers::invalid_reg};
-+static constexpr Register WasmTlsReg{Registers::invalid_reg};
-+static constexpr Register WasmJitEntryReturnScratch{Registers::invalid_reg};
-+
-+static constexpr uint32_t ABIStackAlignment = 16;
-+static constexpr uint32_t CodeAlignment = 16;
-+static constexpr uint32_t JitStackAlignment = 8;
-+static constexpr uint32_t JitStackValueAlignment =
-+    JitStackAlignment / sizeof(Value);
-+
-+static const Scale ScalePointer = TimesOne;
-+
-+class Instruction;
-+typedef js::jit::AssemblerBuffer<1024, Instruction> RISCVBuffer;
-+
-+class Assembler : public AssemblerShared {
-+ public:
-+  enum RISCVCondition : uint32_t {
-+    EQ = 0b000,
-+    NE = 0b001,
-+    LT = 0b100,
-+    GE = 0b101,
-+    LTU = 0b110,
-+    GEU = 0b111,
-+  };
-+
-+  enum Condition {
-+    Equal,
-+    NotEqual,
-+    Above,
-+    AboveOrEqual,
-+    Below,
-+    BelowOrEqual,
-+    GreaterThan,
-+    GreaterThanOrEqual,
-+    LessThan,
-+    LessThanOrEqual,
-+    Overflow,
-+    CarrySet,
-+    CarryClear,
-+    Signed,
-+    NotSigned,
-+    Zero,
-+    NonZero,
-+    Always,
-+  };
-+
-+  enum DoubleCondition {
-+    DoubleOrdered,
-+    DoubleEqual,
-+    DoubleNotEqual,
-+    DoubleGreaterThan,
-+    DoubleGreaterThanOrEqual,
-+    DoubleLessThan,
-+    DoubleLessThanOrEqual,
-+    DoubleUnordered,
-+    DoubleEqualOrUnordered,
-+    DoubleNotEqualOrUnordered,
-+    DoubleGreaterThanOrUnordered,
-+    DoubleGreaterThanOrEqualOrUnordered,
-+    DoubleLessThanOrUnordered,
-+    DoubleLessThanOrEqualOrUnordered
-+  };
-+
-+  RISCVBuffer m_buffer;
-+
-+  BufferOffset nextOffset() { return m_buffer.nextOffset(); }
-+
-+  static Condition InvertCondition(Condition) { MOZ_CRASH(); }
-+
-+  static DoubleCondition InvertCondition(DoubleCondition) { MOZ_CRASH(); }
-+
-+  static void TraceJumpRelocations(JSTracer* trc, JitCode* code,
-+                                   CompactBufferReader& reader);
-+  static void TraceDataRelocations(JSTracer* trc, JitCode* code,
-+                                   CompactBufferReader& reader);
-+
-+  template <typename T, typename S>
-+  static void PatchDataWithValueCheck(CodeLocationLabel, T, S) {
-+    MOZ_CRASH();
-+  }
-+  static void PatchWrite_Imm32(CodeLocationLabel, Imm32) { MOZ_CRASH(); }
-+
-+  static void PatchWrite_NearCall(CodeLocationLabel, CodeLocationLabel) {
-+    MOZ_CRASH();
-+  }
-+  static uint32_t PatchWrite_NearCallSize() { MOZ_CRASH(); }
-+
-+  static void ToggleToJmp(CodeLocationLabel) { MOZ_CRASH(); }
-+  static void ToggleToCmp(CodeLocationLabel) { MOZ_CRASH(); }
-+  static void ToggleCall(CodeLocationLabel, bool) { MOZ_CRASH(); }
-+
-+  static void Bind(uint8_t* rawCode, const CodeLabel& label) { MOZ_CRASH(); }
-+
-+  static uintptr_t GetPointer(uint8_t*) { MOZ_CRASH(); }
-+
-+  static bool HasRoundInstruction(RoundingMode) { return false; }
-+
-+  void verifyHeapAccessDisassembly(uint32_t begin, uint32_t end,
-+                                   const Disassembler::HeapAccess& heapAccess) {
-+    MOZ_CRASH();
-+  }
-+
-+  void setUnlimitedBuffer() { MOZ_CRASH(); }
-+
-+  MOZ_ALWAYS_INLINE BufferOffset writeInst(uint32_t x) {
-+    MOZ_ASSERT(hasCreator());
-+    return m_buffer.putInt(x);
-+  }
-+};
-+
-+class Instruction {
-+ protected:
-+  uint32_t data;
-+
-+  // Standard constructor
-+  Instruction(uint32_t data_) : data(data_) {}
-+
-+ public:
-+  uint32_t encode() const { return data; }
-+
-+  void setData(uint32_t data) { this->data = data; }
-+  Instruction* next();
-+  const uint32_t* raw() const { return &data; }
-+  uint32_t size() const { return sizeof(data); }
-+};
-+
-+class Operand {
-+ public:
-+  enum Kind { REG };
-+
-+ private:
-+  Kind kind_ : 4;
-+  uint32_t reg_ : 5;
-+  int32_t offset_;
-+
-+ public:
-+  explicit Operand(const Register reg)
-+      : kind_(REG), reg_(reg.code()), offset_(0) {}
-+  explicit Operand(const FloatRegister) { MOZ_CRASH(); }
-+  explicit Operand(const Address& adress) { MOZ_CRASH(); }
-+  explicit Operand(Register reg, Imm32 offset)
-+      : kind_(REG), reg_(reg.code()), offset_(offset.value) {}
-+  explicit Operand(Register reg, int32_t offset)
-+      : kind_(REG), reg_(reg.code()), offset_(offset) {}
-+
-+  Kind kind() const { return kind_; }
-+};
-+
-+static const uint32_t NumIntArgRegs = 8;
-+static const uint32_t NumFloatArgRegs = 8;
-+
-+class ABIArgGenerator {
-+ public:
-+  ABIArgGenerator()
-+      : intRegIndex_(0), floatRegIndex_(0), stackOffset_(0), current_() {}
-+
-+  ABIArg next(MIRType);
-+  ABIArg& current() { return current_; }
-+  uint32_t stackBytesConsumedSoFar() const { return stackOffset_; }
-+  void increaseStackOffset(uint32_t bytes) { stackOffset_ += bytes; }
-+
-+ private:
-+  unsigned intRegIndex_;
-+  unsigned floatRegIndex_;
-+  uint32_t stackOffset_;
-+  ABIArg current_;
-+};
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_Assembler_riscv64_h */
-diff --git a/js/src/jit/riscv64/CodeGenerator-riscv64.h b/js/src/jit/riscv64/CodeGenerator-riscv64.h
-new file mode 100644
-index 0000000000..db30b32283
---- /dev/null
-+++ b/js/src/jit/riscv64/CodeGenerator-riscv64.h
-@@ -0,0 +1,78 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_CodeGenerator_riscv64_h
-+#define jit_riscv64_CodeGenerator_riscv64_h
-+
-+#include "jit/shared/CodeGenerator-shared.h"
-+
-+namespace js {
-+namespace jit {
-+
-+class CodeGeneratorRiscv64 : public CodeGeneratorShared {
-+ protected:
-+  CodeGeneratorRiscv64(MIRGenerator* gen, LIRGraph* graph, MacroAssembler* masm)
-+      : CodeGeneratorShared(gen, graph, masm) {
-+    MOZ_CRASH();
-+  }
-+
-+  MoveOperand toMoveOperand(LAllocation) const { MOZ_CRASH(); }
-+  template <typename T1, typename T2>
-+  void bailoutCmp32(Assembler::Condition, T1, T2, LSnapshot*) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T1, typename T2>
-+  void bailoutTest32(Assembler::Condition, T1, T2, LSnapshot*) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T1, typename T2>
-+  void bailoutCmpPtr(Assembler::Condition, T1, T2, LSnapshot*) {
-+    MOZ_CRASH();
-+  }
-+  void bailoutTestPtr(Assembler::Condition, Register, Register, LSnapshot*) {
-+    MOZ_CRASH();
-+  }
-+  void bailoutIfFalseBool(Register, LSnapshot*) { MOZ_CRASH(); }
-+  void bailoutFrom(Label*, LSnapshot*) { MOZ_CRASH(); }
-+  void bailout(LSnapshot*) { MOZ_CRASH(); }
-+  void bailoutIf(Assembler::Condition, LSnapshot*) { MOZ_CRASH(); }
-+  bool generateOutOfLineCode() { MOZ_CRASH(); }
-+  void testNullEmitBranch(Assembler::Condition, ValueOperand, MBasicBlock*,
-+                          MBasicBlock*) {
-+    MOZ_CRASH();
-+  }
-+  void testUndefinedEmitBranch(Assembler::Condition, ValueOperand, MBasicBlock*,
-+                               MBasicBlock*) {
-+    MOZ_CRASH();
-+  }
-+  void testObjectEmitBranch(Assembler::Condition, ValueOperand, MBasicBlock*,
-+                            MBasicBlock*) {
-+    MOZ_CRASH();
-+  }
-+  void testZeroEmitBranch(Assembler::Condition, Register, MBasicBlock*,
-+                          MBasicBlock*) {
-+    MOZ_CRASH();
-+  }
-+  void emitTableSwitchDispatch(MTableSwitch*, Register, Register) {
-+    MOZ_CRASH();
-+  }
-+  void emitBigIntDiv(LBigIntDiv*, Register, Register, Register, Label*) {
-+    MOZ_CRASH();
-+  }
-+  void emitBigIntMod(LBigIntMod*, Register, Register, Register, Label*) {
-+    MOZ_CRASH();
-+  }
-+  ValueOperand ToValue(LInstruction*, size_t) { MOZ_CRASH(); }
-+  ValueOperand ToTempValue(LInstruction*, size_t) { MOZ_CRASH(); }
-+  void generateInvalidateEpilogue() { MOZ_CRASH(); }
-+};
-+
-+typedef CodeGeneratorRiscv64 CodeGeneratorSpecific;
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_CodeGenerator_riscv64_h */
-diff --git a/js/src/jit/riscv64/LIR-riscv64.h b/js/src/jit/riscv64/LIR-riscv64.h
-new file mode 100644
-index 0000000000..59d42c6c75
---- /dev/null
-+++ b/js/src/jit/riscv64/LIR-riscv64.h
-@@ -0,0 +1,111 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_LIR_riscv64_h
-+#define jit_riscv64_LIR_riscv64_h
-+
-+namespace js {
-+namespace jit {
-+
-+class LUnboxFloatingPoint : public LInstruction {
-+ public:
-+  LIR_HEADER(UnboxFloatingPoint)
-+  static const size_t Input = 0;
-+
-+  MUnbox* mir() const { MOZ_CRASH(); }
-+
-+  const LDefinition* output() const { MOZ_CRASH(); }
-+  MIRType type() const { MOZ_CRASH(); }
-+};
-+
-+class LTableSwitch : public LInstruction {
-+ public:
-+  LIR_HEADER(TableSwitch)
-+  MTableSwitch* mir() { MOZ_CRASH(); }
-+
-+  const LAllocation* index() { MOZ_CRASH(); }
-+  const LDefinition* tempInt() { MOZ_CRASH(); }
-+  const LDefinition* tempPointer() { MOZ_CRASH(); }
-+};
-+
-+class LTableSwitchV : public LInstruction {
-+ public:
-+  LIR_HEADER(TableSwitchV)
-+  MTableSwitch* mir() { MOZ_CRASH(); }
-+
-+  const LDefinition* tempInt() { MOZ_CRASH(); }
-+  const LDefinition* tempFloat() { MOZ_CRASH(); }
-+  const LDefinition* tempPointer() { MOZ_CRASH(); }
-+
-+  static const size_t InputValue = 0;
-+};
-+
-+class LWasmUint32ToFloat32 : public LInstructionHelper<1, 1, 0> {
-+ public:
-+  explicit LWasmUint32ToFloat32(const LAllocation&)
-+      : LInstructionHelper(Opcode::Invalid) {
-+    MOZ_CRASH();
-+  }
-+};
-+
-+class LUnbox : public LInstructionHelper<1, 2, 0> {
-+ public:
-+  MUnbox* mir() const { MOZ_CRASH(); }
-+  const LAllocation* payload() { MOZ_CRASH(); }
-+  const LAllocation* type() { MOZ_CRASH(); }
-+  const char* extraName() const { MOZ_CRASH(); }
-+};
-+class LDivI : public LBinaryMath<1> {
-+ public:
-+  LDivI(const LAllocation&, const LAllocation&, const LDefinition&)
-+      : LBinaryMath(Opcode::Invalid) {
-+    MOZ_CRASH();
-+  }
-+  MDiv* mir() const { MOZ_CRASH(); }
-+};
-+class LDivPowTwoI : public LInstructionHelper<1, 1, 0> {
-+ public:
-+  LDivPowTwoI(const LAllocation&, int32_t)
-+      : LInstructionHelper(Opcode::Invalid) {
-+    MOZ_CRASH();
-+  }
-+  const LAllocation* numerator() { MOZ_CRASH(); }
-+  int32_t shift() { MOZ_CRASH(); }
-+  MDiv* mir() const { MOZ_CRASH(); }
-+};
-+class LModI : public LBinaryMath<1> {
-+ public:
-+  LModI(const LAllocation&, const LAllocation&, const LDefinition&)
-+      : LBinaryMath(Opcode::Invalid) {
-+    MOZ_CRASH();
-+  }
-+
-+  const LDefinition* callTemp() { MOZ_CRASH(); }
-+  MMod* mir() const { MOZ_CRASH(); }
-+};
-+class LWasmUint32ToDouble : public LInstructionHelper<1, 1, 0> {
-+ public:
-+  explicit LWasmUint32ToDouble(const LAllocation&)
-+      : LInstructionHelper(Opcode::Invalid) {
-+    MOZ_CRASH();
-+  }
-+};
-+class LModPowTwoI : public LInstructionHelper<1, 1, 0> {
-+ public:
-+  int32_t shift() { MOZ_CRASH(); }
-+  LModPowTwoI(const LAllocation& lhs, int32_t shift)
-+      : LInstructionHelper(Opcode::Invalid) {
-+    MOZ_CRASH();
-+  }
-+  MMod* mir() const { MOZ_CRASH(); }
-+};
-+
-+class LMulI : public LInstruction {};
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_LIR_riscv64_h */
-diff --git a/js/src/jit/riscv64/Lowering-riscv64.h b/js/src/jit/riscv64/Lowering-riscv64.h
-new file mode 100644
-index 0000000000..a68e52b872
---- /dev/null
-+++ b/js/src/jit/riscv64/Lowering-riscv64.h
-@@ -0,0 +1,130 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_Lowering_riscv64_h
-+#define jit_riscv64_Lowering_riscv64_h
-+
-+#include "jit/shared/Lowering-shared.h"
-+
-+namespace js {
-+namespace jit {
-+
-+class LIRGeneratorRiscv64 : public LIRGeneratorShared {
-+ protected:
-+  LIRGeneratorRiscv64(MIRGenerator* gen, MIRGraph& graph, LIRGraph& lirGraph)
-+      : LIRGeneratorShared(gen, graph, lirGraph) {
-+    MOZ_CRASH();
-+  }
-+
-+  LBoxAllocation useBoxFixed(MDefinition*, Register, Register,
-+                             bool useAtStart = false) {
-+    MOZ_CRASH();
-+  }
-+
-+  LAllocation useByteOpRegister(MDefinition*) { MOZ_CRASH(); }
-+  LAllocation useByteOpRegisterAtStart(MDefinition*) { MOZ_CRASH(); }
-+  LAllocation useByteOpRegisterOrNonDoubleConstant(MDefinition*) {
-+    MOZ_CRASH();
-+  }
-+  LDefinition tempByteOpRegister() { MOZ_CRASH(); }
-+  LDefinition tempToUnbox() { MOZ_CRASH(); }
-+  bool needTempForPostBarrier() { MOZ_CRASH(); }
-+  void lowerUntypedPhiInput(MPhi*, uint32_t, LBlock*, size_t) { MOZ_CRASH(); }
-+  void lowerInt64PhiInput(MPhi*, uint32_t, LBlock*, size_t) { MOZ_CRASH(); }
-+  void defineInt64Phi(MPhi*, size_t) { MOZ_CRASH(); }
-+  void lowerForShift(LInstructionHelper<1, 2, 0>*, MDefinition*, MDefinition*,
-+                     MDefinition*) {
-+    MOZ_CRASH();
-+  }
-+  void lowerUrshD(MUrsh*) { MOZ_CRASH(); }
-+  void lowerPowOfTwoI(MPow*) { MOZ_CRASH(); }
-+  template <typename T>
-+  void lowerForALU(T, MDefinition*, MDefinition*, MDefinition* v = nullptr) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void lowerForFPU(T, MDefinition*, MDefinition*, MDefinition* v = nullptr) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void lowerForALUInt64(T, MDefinition*, MDefinition*,
-+                        MDefinition* v = nullptr) {
-+    MOZ_CRASH();
-+  }
-+  void lowerForMulInt64(LMulI64*, MMul*, MDefinition*,
-+                        MDefinition* v = nullptr) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void lowerForShiftInt64(T, MDefinition*, MDefinition*,
-+                          MDefinition* v = nullptr) {
-+    MOZ_CRASH();
-+  }
-+  void lowerForBitAndAndBranch(LBitAndAndBranch*, MInstruction*, MDefinition*,
-+                               MDefinition*) {
-+    MOZ_CRASH();
-+  }
-+  void lowerForCompareI64AndBranch(MTest*, MCompare*, JSOp, MDefinition*,
-+                                   MDefinition*, MBasicBlock*, MBasicBlock*) {
-+    MOZ_CRASH();
-+  }
-+
-+  void lowerConstantDouble(double, MInstruction*) { MOZ_CRASH(); }
-+  void lowerConstantFloat32(float, MInstruction*) { MOZ_CRASH(); }
-+  void lowerTruncateDToInt32(MTruncateToInt32*) { MOZ_CRASH(); }
-+  void lowerTruncateFToInt32(MTruncateToInt32*) { MOZ_CRASH(); }
-+  void lowerBuiltinInt64ToFloatingPoint(MBuiltinInt64ToFloatingPoint* ins) {
-+    MOZ_CRASH();
-+  }
-+  void lowerWasmBuiltinTruncateToInt64(MWasmBuiltinTruncateToInt64* ins) {
-+    MOZ_CRASH();
-+  }
-+  void lowerWasmBuiltinTruncateToInt32(MWasmBuiltinTruncateToInt32* ins) {
-+    MOZ_CRASH();
-+  }
-+  void lowerDivI(MDiv*) { MOZ_CRASH(); }
-+  void lowerModI(MMod*) { MOZ_CRASH(); }
-+  void lowerDivI64(MDiv*) { MOZ_CRASH(); }
-+  void lowerWasmBuiltinDivI64(MWasmBuiltinDivI64* div) { MOZ_CRASH(); }
-+  void lowerModI64(MMod*) { MOZ_CRASH(); }
-+  void lowerWasmBuiltinModI64(MWasmBuiltinModI64* mod) { MOZ_CRASH(); }
-+  void lowerNegI(MInstruction*, MDefinition*) { MOZ_CRASH(); }
-+  void lowerNegI64(MInstruction*, MDefinition*) { MOZ_CRASH(); }
-+  void lowerMulI(MMul*, MDefinition*, MDefinition*) { MOZ_CRASH(); }
-+  void lowerUDiv(MDiv*) { MOZ_CRASH(); }
-+  void lowerUMod(MMod*) { MOZ_CRASH(); }
-+  void lowerWasmSelectI(MWasmSelect* select) { MOZ_CRASH(); }
-+  void lowerWasmSelectI64(MWasmSelect* select) { MOZ_CRASH(); }
-+  void lowerWasmCompareAndSelect(MWasmSelect* ins, MDefinition* lhs,
-+                                 MDefinition* rhs, MCompare::CompareType compTy,
-+                                 JSOp jsop) {
-+    MOZ_CRASH();
-+  }
-+  bool canSpecializeWasmCompareAndSelect(MCompare::CompareType compTy,
-+                                         MIRType insTy) {
-+    MOZ_CRASH();
-+  }
-+
-+  void lowerBigIntLsh(MBigIntLsh*) { MOZ_CRASH(); }
-+  void lowerBigIntRsh(MBigIntRsh*) { MOZ_CRASH(); }
-+  void lowerBigIntDiv(MBigIntDiv*) { MOZ_CRASH(); }
-+  void lowerBigIntMod(MBigIntMod*) { MOZ_CRASH(); }
-+
-+  void lowerAtomicLoad64(MLoadUnboxedScalar*) { MOZ_CRASH(); }
-+  void lowerAtomicStore64(MStoreUnboxedScalar*) { MOZ_CRASH(); }
-+
-+  LTableSwitch* newLTableSwitch(LAllocation, LDefinition, MTableSwitch*) {
-+    MOZ_CRASH();
-+  }
-+  LTableSwitchV* newLTableSwitchV(MTableSwitch*) { MOZ_CRASH(); }
-+};
-+
-+typedef LIRGeneratorRiscv64 LIRGeneratorSpecific;
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_Lowering_riscv64_h */
-diff --git a/js/src/jit/riscv64/MacroAssembler-riscv64-inl.h b/js/src/jit/riscv64/MacroAssembler-riscv64-inl.h
-new file mode 100644
-index 0000000000..3dd6273d0f
---- /dev/null
-+++ b/js/src/jit/riscv64/MacroAssembler-riscv64-inl.h
-@@ -0,0 +1,18 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_MacroAssembler_riscv64_inl_h
-+#define jit_riscv64_MacroAssembler_riscv64_inl_h
-+
-+#include "jit/riscv64/MacroAssembler-riscv64.h"
-+
-+namespace js {
-+namespace jit {
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif
-diff --git a/js/src/jit/riscv64/MacroAssembler-riscv64.h b/js/src/jit/riscv64/MacroAssembler-riscv64.h
-new file mode 100644
-index 0000000000..30ca17d359
---- /dev/null
-+++ b/js/src/jit/riscv64/MacroAssembler-riscv64.h
-@@ -0,0 +1,458 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_MacroAssembler_riscv64_h
-+#define jit_riscv64_MacroAssembler_riscv64_h
-+
-+#include "jit/riscv64/Assembler-riscv64.h"
-+#include "jit/MoveResolver.h"
-+#include "wasm/WasmBuiltins.h"
-+
-+namespace js {
-+namespace jit {
-+
-+static constexpr ValueOperand JSReturnOperand{JSReturnReg};
-+
-+class ScratchTagScope : public SecondScratchRegisterScope {
-+ public:
-+  ScratchTagScope(MacroAssembler& masm, const js::jit::ValueOperand&)
-+      : SecondScratchRegisterScope(masm) {}
-+};
-+
-+class ScratchTagScopeRelease {
-+  ScratchTagScope* ts_;
-+
-+ public:
-+  explicit ScratchTagScopeRelease(ScratchTagScope* ts) : ts_(ts) {
-+    ts_->release();
-+  }
-+
-+  ~ScratchTagScopeRelease() { ts_->reacquire(); }
-+};
-+
-+class MacroAssemblerRiscv64 : public Assembler {
-+ protected:
-+  // Perform a downcast. Should be removed by Bug 996602.
-+  MacroAssembler& asMasm();
-+  const MacroAssembler& asMasm() const;
-+
-+ public:
-+  MacroAssemblerRiscv64() { MOZ_CRASH(); }
-+
-+  MoveResolver moveResolver_;
-+
-+  size_t size() const { MOZ_CRASH(); }
-+  size_t bytesNeeded() const { MOZ_CRASH(); }
-+  size_t jumpRelocationTableBytes() const { MOZ_CRASH(); }
-+  size_t dataRelocationTableBytes() const { MOZ_CRASH(); }
-+  size_t preBarrierTableBytes() const { MOZ_CRASH(); }
-+
-+  size_t numCodeLabels() const { MOZ_CRASH(); }
-+  CodeLabel codeLabel(size_t) { MOZ_CRASH(); }
-+
-+  bool reserve(size_t size) { MOZ_CRASH(); }
-+  bool appendRawCode(const uint8_t* code, size_t numBytes) { MOZ_CRASH(); }
-+  bool swapBuffer(wasm::Bytes& bytes) { MOZ_CRASH(); }
-+
-+  void assertNoGCThings() const { MOZ_CRASH(); }
-+
-+  static bool SupportsFloatingPoint() { return false; }
-+  static bool SupportsUnalignedAccesses() { return false; }
-+  static bool SupportsFastUnalignedFPAccesses() { return false; }
-+
-+  void executableCopy(void*, bool = true) { MOZ_CRASH(); }
-+  void copyJumpRelocationTable(uint8_t*) { MOZ_CRASH(); }
-+  void copyDataRelocationTable(uint8_t*) { MOZ_CRASH(); }
-+  void copyPreBarrierTable(uint8_t*) { MOZ_CRASH(); }
-+  void processCodeLabels(uint8_t*) { MOZ_CRASH(); }
-+
-+  void flushBuffer() {}
-+
-+  template <typename T>
-+  void bind(T) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void j(Condition, T) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void jump(T) {
-+    MOZ_CRASH();
-+  }
-+  void writeCodePointer(CodeLabel* label) {
-+    MOZ_CRASH();
-+  }
-+  void haltingAlign(size_t) { MOZ_CRASH(); }
-+  void nopAlign(size_t) { MOZ_CRASH(); }
-+  void checkStackAlignment() { MOZ_CRASH(); }
-+  uint32_t currentOffset() { return nextOffset().getOffset(); }
-+
-+  void nop() { MOZ_CRASH(); }
-+  void breakpoint() { MOZ_CRASH(); }
-+  void abiret() { MOZ_CRASH(); }
-+  void ret() { MOZ_CRASH(); }
-+
-+  CodeOffset toggledJump(Label*) { MOZ_CRASH(); }
-+  CodeOffset toggledCall(JitCode*, bool) { MOZ_CRASH(); }
-+  static size_t ToggledCallSize(uint8_t*) { MOZ_CRASH(); }
-+
-+  void finish() { MOZ_CRASH(); }
-+
-+  template <typename T, typename S>
-+  void moveValue(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S, typename U>
-+  void moveValue(T, S, U) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void storeValue(const T&, const S&) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S, typename U>
-+  void storeValue(T, S, U) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void storePrivateValue(const T&, const S&) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void loadValue(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void loadUnalignedValue(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void pushValue(const T&) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void pushValue(T, S) {
-+    MOZ_CRASH();
-+  }
-+  void popValue(ValueOperand) { MOZ_CRASH(); }
-+  void tagValue(JSValueType, Register, ValueOperand) { MOZ_CRASH(); }
-+  void retn(Imm32 n) { MOZ_CRASH(); }
-+  template <typename T>
-+  void push(const T&) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void Push(T) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void pop(T) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void Pop(T) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  CodeOffset pushWithPatch(T) {
-+    MOZ_CRASH();
-+  }
-+
-+  void testNullSet(Condition, ValueOperand, Register) { MOZ_CRASH(); }
-+  void testObjectSet(Condition, ValueOperand, Register) { MOZ_CRASH(); }
-+  void testUndefinedSet(Condition, ValueOperand, Register) { MOZ_CRASH(); }
-+
-+  template <typename T, typename S>
-+  void cmpPtrSet(Condition, T, S, Register) {
-+    MOZ_CRASH();
-+  }
-+  void cmp8Set(Condition, Address, Imm32, Register) { MOZ_CRASH(); }
-+  void cmp16Set(Condition, Address, Imm32, Register) { MOZ_CRASH(); }
-+  template <typename T, typename S>
-+  void cmp32Set(Condition, T, S, Register) {
-+    MOZ_CRASH();
-+  }
-+  void cmp64Set(Condition, Address, Imm64, Register) { MOZ_CRASH(); }
-+
-+  template <typename T>
-+  void mov(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void movePtr(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void move32(const T&, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void movq(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void moveFloat32(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void moveDouble(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void move64(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  CodeOffset movWithPatch(T, Register) {
-+    MOZ_CRASH();
-+  }
-+
-+  template <typename T>
-+  void loadPtr(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load32(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load32Unaligned(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void loadFloat32(T, FloatRegister) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void loadDouble(T, FloatRegister) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void loadPrivate(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load8SignExtend(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load8ZeroExtend(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load16SignExtend(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load16UnalignedSignExtend(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load16ZeroExtend(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load16UnalignedZeroExtend(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load64(T, Register64) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void load64Unaligned(T, Register64) {
-+    MOZ_CRASH();
-+  }
-+
-+  template <typename T, typename S>
-+  void storePtr(const T&, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void store32(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void store32_NoSecondScratch(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void store32Unaligned(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void storeFloat32(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void storeDouble(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void store8(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void store16(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void store16Unaligned(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void store64(T, S) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T, typename S>
-+  void store64Unaligned(T, S) {
-+    MOZ_CRASH();
-+  }
-+
-+  template <typename T>
-+  void computeEffectiveAddress(T, Register) {
-+    MOZ_CRASH();
-+  }
-+
-+  void splitTagForTest(ValueOperand, ScratchTagScope&) { MOZ_CRASH(); }
-+
-+  void boxDouble(FloatRegister, ValueOperand, FloatRegister) { MOZ_CRASH(); }
-+  void boxNonDouble(JSValueType, Register, ValueOperand) { MOZ_CRASH(); }
-+  template <typename T>
-+  void boxDouble(FloatRegister src, const T& dest) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void unboxInt32(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void unboxBoolean(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void unboxString(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void unboxSymbol(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void unboxBigInt(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void unboxObject(T, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void unboxDouble(T, FloatRegister) {
-+    MOZ_CRASH();
-+  }
-+  void unboxValue(const ValueOperand&, AnyRegister, JSValueType) {
-+    MOZ_CRASH();
-+  }
-+  void unboxNonDouble(const ValueOperand&, Register, JSValueType) {
-+    MOZ_CRASH();
-+  }
-+  void unboxNonDouble(const Address&, Register, JSValueType) { MOZ_CRASH(); }
-+  template <typename T>
-+  void unboxGCThingForGCBarrier(const T&, Register) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void unboxObjectOrNull(const T& src, Register dest) {
-+    MOZ_CRASH();
-+  }
-+  void notBoolean(ValueOperand) { MOZ_CRASH(); }
-+  [[nodiscard]] Register extractObject(Address, Register) { MOZ_CRASH(); }
-+  [[nodiscard]] Register extractObject(ValueOperand, Register) { MOZ_CRASH(); }
-+  [[nodiscard]] Register extractSymbol(ValueOperand, Register) { MOZ_CRASH(); }
-+  [[nodiscard]] Register extractInt32(ValueOperand, Register) { MOZ_CRASH(); }
-+  [[nodiscard]] Register extractBoolean(ValueOperand, Register) { MOZ_CRASH(); }
-+  template <typename T>
-+  [[nodiscard]] Register extractTag(T, Register) {
-+    MOZ_CRASH();
-+  }
-+
-+  void convertFloat32ToInt32(FloatRegister, Register, Label*, bool v = true) {
-+    MOZ_CRASH();
-+  }
-+  void convertDoubleToInt32(FloatRegister, Register, Label*, bool v = true) {
-+    MOZ_CRASH();
-+  }
-+  void convertDoubleToPtr(FloatRegister, Register, Label*, bool v = true) {
-+    MOZ_CRASH();
-+  }
-+  void convertBoolToInt32(Register, Register) { MOZ_CRASH(); }
-+
-+  void convertDoubleToFloat32(FloatRegister, FloatRegister) { MOZ_CRASH(); }
-+  void convertInt32ToFloat32(Register, FloatRegister) { MOZ_CRASH(); }
-+
-+  template <typename T>
-+  void convertInt32ToDouble(T, FloatRegister) {
-+    MOZ_CRASH();
-+  }
-+  void convertFloat32ToDouble(FloatRegister, FloatRegister) { MOZ_CRASH(); }
-+
-+  void boolValueToDouble(ValueOperand, FloatRegister) { MOZ_CRASH(); }
-+  void boolValueToFloat32(ValueOperand, FloatRegister) { MOZ_CRASH(); }
-+  void int32ValueToDouble(ValueOperand, FloatRegister) { MOZ_CRASH(); }
-+  void int32ValueToFloat32(ValueOperand, FloatRegister) { MOZ_CRASH(); }
-+
-+  void loadConstantDouble(double, FloatRegister) { MOZ_CRASH(); }
-+  void loadConstantFloat32(float, FloatRegister) { MOZ_CRASH(); }
-+  Condition testInt32Truthy(bool, ValueOperand) { MOZ_CRASH(); }
-+  Condition testStringTruthy(bool, ValueOperand) { MOZ_CRASH(); }
-+  Condition testBigIntTruthy(bool, ValueOperand) { MOZ_CRASH(); }
-+
-+  template <typename T>
-+  void loadUnboxedValue(T, MIRType, AnyRegister) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void storeUnboxedValue(const ConstantOrRegister&, MIRType, T, MIRType) {
-+    MOZ_CRASH();
-+  }
-+  template <typename T>
-+  void storeUnboxedPayload(ValueOperand value, T, size_t, JSValueType) {
-+    MOZ_CRASH();
-+  }
-+
-+  void convertUInt32ToDouble(Register, FloatRegister) { MOZ_CRASH(); }
-+  void convertUInt32ToFloat32(Register, FloatRegister) { MOZ_CRASH(); }
-+  void incrementInt32Value(Address) { MOZ_CRASH(); }
-+  void ensureDouble(ValueOperand, FloatRegister, Label*) { MOZ_CRASH(); }
-+
-+  void buildFakeExitFrame(Register, uint32_t*) { MOZ_CRASH(); }
-+  bool buildOOLFakeExitFrame(void*) { MOZ_CRASH(); }
-+
-+  void setPrinter(Sprinter*) { MOZ_CRASH(); }
-+  Operand ToPayload(Operand base) { MOZ_CRASH(); }
-+  Address ToPayload(Address) { MOZ_CRASH(); }
-+
-+  Register getStackPointer() const { MOZ_CRASH(); }
-+
-+  void handleFailureWithHandlerTail(Label* profilerExitTail,
-+                                    Label* bailoutTail) { MOZ_CRASH(); }
-+
-+  // Instrumentation for entering and leaving the profiler.
-+  void profilerEnterFrame(Register, Register) { MOZ_CRASH(); }
-+  void profilerExitFrame() { MOZ_CRASH(); }
-+};
-+
-+typedef MacroAssemblerRiscv64 MacroAssemblerSpecific;
-+
-+static inline bool GetTempRegForIntArg(uint32_t, uint32_t, Register*) {
-+  MOZ_CRASH();
-+}
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_MacroAssembler_riscv64_h */
-diff --git a/js/src/jit/riscv64/MoveEmitter-riscv64.h b/js/src/jit/riscv64/MoveEmitter-riscv64.h
-new file mode 100644
-index 0000000000..24ca3aebb2
---- /dev/null
-+++ b/js/src/jit/riscv64/MoveEmitter-riscv64.h
-@@ -0,0 +1,32 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_MoveEmitter_riscv64_h
-+#define jit_riscv64_MoveEmitter_riscv64_h
-+
-+#include "mozilla/Assertions.h"
-+
-+namespace js {
-+namespace jit {
-+
-+class MacroAssemblerRiscv64;
-+class MoveResolver;
-+struct Register;
-+
-+class MoveEmitterRiscv64 {
-+ public:
-+  explicit MoveEmitterRiscv64(MacroAssemblerRiscv64&) { MOZ_CRASH(); }
-+  void emit(const MoveResolver&) { MOZ_CRASH(); }
-+  void finish() { MOZ_CRASH(); }
-+  void setScratchRegister(Register) { MOZ_CRASH(); }
-+};
-+
-+typedef MoveEmitterRiscv64 MoveEmitter;
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_MoveEmitter_riscv64_h */
-diff --git a/js/src/jit/riscv64/SharedICHelpers-riscv64-inl.h b/js/src/jit/riscv64/SharedICHelpers-riscv64-inl.h
-new file mode 100644
-index 0000000000..7c6f7b7c20
---- /dev/null
-+++ b/js/src/jit/riscv64/SharedICHelpers-riscv64-inl.h
-@@ -0,0 +1,34 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_SharedICHelpers_riscv64_inl_h
-+#define jit_riscv64_SharedICHelpers_riscv64_inl_h
-+
-+#include "jit/SharedICHelpers.h"
-+
-+namespace js {
-+namespace jit {
-+
-+inline void EmitBaselineTailCallVM(TrampolinePtr, MacroAssembler&, uint32_t) {
-+  MOZ_CRASH();
-+}
-+inline void EmitBaselineCreateStubFrameDescriptor(MacroAssembler&, Register,
-+                                                  uint32_t) {
-+  MOZ_CRASH();
-+}
-+inline void EmitBaselineCallVM(TrampolinePtr, MacroAssembler&) { MOZ_CRASH(); }
-+
-+static const uint32_t STUB_FRAME_SIZE = 0;
-+static const uint32_t STUB_FRAME_SAVED_STUB_OFFSET = 0;
-+
-+inline void EmitBaselineEnterStubFrame(MacroAssembler&, Register) {
-+  MOZ_CRASH();
-+}
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_SharedICHelpers_riscv64_inl_h */
-diff --git a/js/src/jit/riscv64/SharedICHelpers-riscv64.h b/js/src/jit/riscv64/SharedICHelpers-riscv64.h
-new file mode 100644
-index 0000000000..205b6615da
---- /dev/null
-+++ b/js/src/jit/riscv64/SharedICHelpers-riscv64.h
-@@ -0,0 +1,35 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_SharedICHelpers_riscv64_h
-+#define jit_riscv64_SharedICHelpers_riscv64_h
-+
-+#include "jit/MacroAssembler.h"
-+#include "jit/SharedICRegisters.h"
-+
-+namespace js {
-+namespace jit {
-+
-+static const size_t ICStackValueOffset = 0;
-+
-+inline void EmitRestoreTailCallReg(MacroAssembler&) { MOZ_CRASH(); }
-+inline void EmitRepushTailCallReg(MacroAssembler&) { MOZ_CRASH(); }
-+inline void EmitCallIC(MacroAssembler&, CodeOffset*) { MOZ_CRASH(); }
-+inline void EmitReturnFromIC(MacroAssembler&) { MOZ_CRASH(); }
-+inline void EmitBaselineLeaveStubFrame(MacroAssembler&, bool v = false) {
-+  MOZ_CRASH();
-+}
-+inline void EmitStubGuardFailure(MacroAssembler&) { MOZ_CRASH(); }
-+
-+template <typename T>
-+inline void EmitPreBarrier(MacroAssembler&, T, MIRType) {
-+  MOZ_CRASH();
-+}
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_SharedICHelpers_riscv64_h */
-diff --git a/js/src/jit/riscv64/SharedICRegisters-riscv64.h b/js/src/jit/riscv64/SharedICRegisters-riscv64.h
-new file mode 100644
-index 0000000000..f1d5f165d8
---- /dev/null
-+++ b/js/src/jit/riscv64/SharedICRegisters-riscv64.h
-@@ -0,0 +1,38 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef jit_riscv64_SharedICRegisters_riscv64_h
-+#define jit_riscv64_SharedICRegisters_riscv64_h
-+
-+#include "jit/riscv64/Assembler-riscv64.h"
-+#include "jit/Registers.h"
-+#include "jit/RegisterSets.h"
-+
-+namespace js {
-+namespace jit {
-+
-+static constexpr Register BaselineFrameReg{Registers::invalid_reg};
-+static constexpr Register BaselineStackReg{Registers::invalid_reg};
-+
-+static constexpr ValueOperand R0 = JSReturnOperand;
-+static constexpr ValueOperand R1 = JSReturnOperand;
-+static constexpr ValueOperand R2 = JSReturnOperand;
-+
-+static constexpr Register ICTailCallReg{Registers::invalid_reg};
-+static constexpr Register ICStubReg{Registers::invalid_reg};
-+
-+static constexpr Register ExtractTemp0{Registers::invalid_reg};
-+static constexpr Register ExtractTemp1{Registers::invalid_reg};
-+
-+static constexpr FloatRegister FloatReg0;
-+static constexpr FloatRegister FloatReg1;
-+static constexpr FloatRegister FloatReg2;
-+static constexpr FloatRegister FloatReg3;
-+
-+}  // namespace jit
-+}  // namespace js
-+
-+#endif /* jit_riscv64_SharedICRegisters_riscv64_h */
-diff --git a/js/src/jit/riscv64/Trampoline-riscv64.cpp b/js/src/jit/riscv64/Trampoline-riscv64.cpp
-new file mode 100644
-index 0000000000..0774254cf4
---- /dev/null
-+++ b/js/src/jit/riscv64/Trampoline-riscv64.cpp
-@@ -0,0 +1,67 @@
-+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ * vim: set ts=8 sts=2 et sw=2 tw=80:
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "jit/Bailouts.h"
-+#include "jit/BaselineIC.h"
-+#include "jit/JitRuntime.h"
-+#include "vm/Realm.h"
-+
-+using namespace js;
-+using namespace js::jit;
-+
-+// This file includes stubs for generating the JIT trampolines when there is no
-+// JIT backend, and also includes implementations for assorted random things
-+// which can't be implemented in headers.
-+
-+void JitRuntime::generateEnterJIT(JSContext*, MacroAssembler&) { MOZ_CRASH(); }
-+// static
-+mozilla::Maybe<::JS::ProfilingFrameIterator::RegisterState>
-+JitRuntime::getCppEntryRegisters(JitFrameLayout* frameStackAddress) {
-+  return mozilla::Nothing{};
-+}
-+void JitRuntime::generateInvalidator(MacroAssembler&, Label*) { MOZ_CRASH(); }
-+void JitRuntime::generateArgumentsRectifier(MacroAssembler&,
-+                                            ArgumentsRectifierKind kind) {
-+  MOZ_CRASH();
-+}
-+JitRuntime::BailoutTable JitRuntime::generateBailoutTable(MacroAssembler&,
-+                                                          Label*, uint32_t) {
-+  MOZ_CRASH();
-+}
-+void JitRuntime::generateBailoutHandler(MacroAssembler&, Label*) {
-+  MOZ_CRASH();
-+}
-+uint32_t JitRuntime::generatePreBarrier(JSContext*, MacroAssembler&, MIRType) {
-+  MOZ_CRASH();
-+}
-+void JitRuntime::generateExceptionTailStub(MacroAssembler&, Label*) {
-+  MOZ_CRASH();
-+}
-+void JitRuntime::generateBailoutTailStub(MacroAssembler&, Label*) {
-+  MOZ_CRASH();
-+}
-+void JitRuntime::generateProfilerExitFrameTailStub(MacroAssembler&, Label*) {
-+  MOZ_CRASH();
-+}
-+
-+bool JitRuntime::generateVMWrapper(JSContext*, MacroAssembler&,
-+                                   const VMFunctionData&, DynFn, uint32_t*) {
-+  MOZ_CRASH();
-+}
-+
-+FrameSizeClass FrameSizeClass::FromDepth(uint32_t) { MOZ_CRASH(); }
-+FrameSizeClass FrameSizeClass::ClassLimit() { MOZ_CRASH(); }
-+uint32_t FrameSizeClass::frameSize() const { MOZ_CRASH(); }
-+
-+BailoutFrameInfo::BailoutFrameInfo(const JitActivationIterator& iter,
-+                                   BailoutStack* bailout) {
-+  MOZ_CRASH();
-+}
-+
-+BailoutFrameInfo::BailoutFrameInfo(const JitActivationIterator& iter,
-+                                   InvalidationBailoutStack* bailout) {
-+  MOZ_CRASH();
-+}
-diff --git a/js/src/jit/shared/Assembler-shared.h b/js/src/jit/shared/Assembler-shared.h
-index fcabddd98b..19cf397df1 100644
---- a/js/src/jit/shared/Assembler-shared.h
-+++ b/js/src/jit/shared/Assembler-shared.h
-@@ -26,13 +26,14 @@
- 
- #if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) ||     \
-     defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \
--    defined(JS_CODEGEN_LOONG64)
-+    defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISCV64)
- // Push return addresses callee-side.
- #  define JS_USE_LINK_REGISTER
- #endif
- 
- #if defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \
--    defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_LOONG64)
-+    defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_LOONG64) || \
-+    defined(JS_CODEGEN_RISCV64)
- // JS_CODELABEL_LINKMODE gives labels additional metadata
- // describing how Bind() should patch them.
- #  define JS_CODELABEL_LINKMODE
-diff --git a/js/src/util/Poison.h b/js/src/util/Poison.h
-index cb8e1abc64..a6a2d2f12b 100644
---- a/js/src/util/Poison.h
-+++ b/js/src/util/Poison.h
-@@ -95,6 +95,8 @@ const uint8_t JS_SCOPE_DATA_TRAILING_NAMES_PATTERN = 0xCC;
- #  define JS_SWEPT_CODE_PATTERN 0x01  // undefined instruction
- #elif defined(JS_CODEGEN_LOONG64)
- #  define JS_SWEPT_CODE_PATTERN 0x01  // undefined instruction
-+#elif defined(JS_CODEGEN_RISCV64)
-+#  define JS_SWEPT_CODE_PATTERN 0x01  // undefined instruction
- #else
- #  error "JS_SWEPT_CODE_PATTERN not defined for this platform"
- #endif
-diff --git a/js/src/wasm/WasmBCMemory.cpp b/js/src/wasm/WasmBCMemory.cpp
-index 94e739090b..2c226dadd5 100644
---- a/js/src/wasm/WasmBCMemory.cpp
-+++ b/js/src/wasm/WasmBCMemory.cpp
-@@ -1214,6 +1214,22 @@ static void Deallocate(BaseCompiler* bc, RegI32 rv, const Temps& temps) {
-   bc->maybeFree(temps.t2);
- }
- 
-+#elif defined(JS_CODEGEN_RISCV64)
-+
-+struct Temps {
-+  RegI32 t0;
-+};
-+
-+static void PopAndAllocate(BaseCompiler* bc, ValType type,
-+                           Scalar::Type viewType, AtomicOp op, RegI32* rd,
-+                           RegI32* rv, Temps* temps) {}
-+
-+static void Perform(BaseCompiler* bc, const MemoryAccessDesc& access,
-+                    BaseIndex srcAddr, AtomicOp op, RegI32 rv, RegI32 rd,
-+                    const Temps& temps) {}
-+
-+static void Deallocate(BaseCompiler*, RegI32, const Temps&) {}
-+
- #elif defined(JS_CODEGEN_NONE)
- 
- using Temps = Nothing;
-@@ -1375,6 +1391,17 @@ static void Deallocate(BaseCompiler* bc, AtomicOp op, RegI64 rv, RegI64 temp) {
-   bc->freeI64(temp);
- }
- 
-+#elif defined(JS_CODEGEN_RISCV64)
-+
-+static void PopAndAllocate(BaseCompiler* bc, AtomicOp op, RegI64* rd,
-+                           RegI64* rv, RegI64* temp) {}
-+
-+static void Perform(BaseCompiler* bc, const MemoryAccessDesc& access,
-+                    BaseIndex srcAddr, AtomicOp op, RegI64 rv, RegI64 temp,
-+                    RegI64 rd) {}
-+
-+static void Deallocate(BaseCompiler* bc, AtomicOp op, RegI64 rv, RegI64 temp) {}
-+
- #elif defined(JS_CODEGEN_NONE)
- 
- static void PopAndAllocate(BaseCompiler*, AtomicOp, RegI64*, RegI64*, RegI64*) {
-diff --git a/js/src/wasm/WasmCompile.cpp b/js/src/wasm/WasmCompile.cpp
-index 26534bca4e..403e26414b 100644
---- a/js/src/wasm/WasmCompile.cpp
-+++ b/js/src/wasm/WasmCompile.cpp
-@@ -74,6 +74,8 @@ uint32_t wasm::ObservedCPUFeatures() {
- #elif defined(JS_CODEGEN_LOONG64)
-   MOZ_ASSERT(jit::GetLOONG64Flags() <= (UINT32_MAX >> ARCH_BITS));
-   return LOONG64 | (jit::GetLOONG64Flags() << ARCH_BITS);
-+#elif defined(JS_CODEGEN_RISCV64)
-+  return 0;
- #elif defined(JS_CODEGEN_NONE)
-   return 0;
- #else
-diff --git a/js/src/wasm/WasmFrameIter.cpp b/js/src/wasm/WasmFrameIter.cpp
-index e612e05704..0ce3453287 100644
---- a/js/src/wasm/WasmFrameIter.cpp
-+++ b/js/src/wasm/WasmFrameIter.cpp
-@@ -384,6 +384,12 @@ static const unsigned PushedFP = 16;
- static const unsigned SetFP = 20;
- static const unsigned PoppedFP = 4;
- static const unsigned PoppedFPJitEntry = 0;
-+#elif defined(JS_CODEGEN_RISCV64)
-+static const unsigned PushedRetAddr = 0;
-+static const unsigned PushedFP = 1;
-+static const unsigned SetFP = 2;
-+static const unsigned PoppedFP = 3;
-+static const unsigned PoppedFPJitEntry = 4;
- #elif defined(JS_CODEGEN_NONE)
- // Synthetic values to satisfy asserts and avoid compiler warnings.
- static const unsigned PushedRetAddr = 0;
-diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp
-index f74368b954..9521441f02 100644
---- a/js/src/wasm/WasmSignalHandlers.cpp
-+++ b/js/src/wasm/WasmSignalHandlers.cpp
-@@ -157,6 +157,11 @@ using mozilla::DebugOnly;
- #      define R01_sig(p) ((p)->uc_mcontext.gp_regs[1])
- #      define R32_sig(p) ((p)->uc_mcontext.gp_regs[32])
- #    endif
-+#    if defined(__linux__) && defined(__riscv) && __riscv_xlen == 64
-+#      define EPC_sig(p) ((p)->uc_mcontext.__gregs[0])
-+#      define X02_sig(p) ((p)->uc_mcontext.__gregs[2])
-+#      define X08_sig(p) ((p)->uc_mcontext.__gregs[8])
-+#    endif
- #    if defined(__linux__) && defined(__loongarch__)
- #      define EPC_sig(p) ((p)->uc_mcontext.pc)
- #      define RRA_sig(p) ((p)->uc_mcontext.gregs[1])
-@@ -405,6 +410,10 @@ struct macos_aarch64_context {
- #    define FP_sig(p) RFP_sig(p)
- #    define SP_sig(p) RSP_sig(p)
- #    define LR_sig(p) RRA_sig(p)
-+#  elif defined(__riscv) && __riscv_xlen == 64
-+#    define PC_sig(p) EPC_sig(p)
-+#    define SP_sig(p) X02_sig(p)
-+#    define FP_sig(p) X08_sig(p)
- #  endif
- 
- static void SetContextPC(CONTEXT* context, uint8_t* pc) {
-diff --git a/python/mozbuild/mozbuild/vendor/vendor_rust.py b/python/mozbuild/mozbuild/vendor/vendor_rust.py
-index 31baea4290..7394ccaf40 100644
---- a/python/mozbuild/mozbuild/vendor/vendor_rust.py
-+++ b/python/mozbuild/mozbuild/vendor/vendor_rust.py
-@@ -98,6 +98,7 @@ TOLERATED_DUPES = {
-     "libloading": 2,
-     "memoffset": 2,
-     "mio": 2,
-+    "nix": 2,
-     # Transition from time 0.1 to 0.3 underway, but chrono is stuck on 0.1
-     # and hasn't been updated in 1.5 years (an hypothetical update is
-     # expected to remove the dependency on time altogether).
-diff --git a/supply-chain/config.toml b/supply-chain/config.toml
-index bb3dd733e8..371cbca809 100644
---- a/supply-chain/config.toml
-+++ b/supply-chain/config.toml
-@@ -1,6 +1,10 @@
- 
- # cargo-vet config file
- 
-+[policy.viaduct]
-+audit-as-crates-io = true
-+notes = "I don't know, do as what rust-vet tells me to do"
-+
- [policy.async-task]
- audit-as-crates-io = true
- notes = "This is the upstream code plus an extra fix that hasn't been released yet, see bug 1746533."
-diff --git a/toolkit/library/rust/shared/Cargo.toml b/toolkit/library/rust/shared/Cargo.toml
-index dbd7770326..ffbadcb14c 100644
---- a/toolkit/library/rust/shared/Cargo.toml
-+++ b/toolkit/library/rust/shared/Cargo.toml
-@@ -38,7 +38,7 @@ tokio-reactor = { version = "=0.1.3", optional = true }
- # audioipc2-client and audioipc2-server.
- tokio-threadpool = { version = "=0.1.17", optional = true }
- encoding_glue = { path = "../../../../intl/encoding_glue" }
--authenticator = "0.3.1"
-+authenticator = { git = "https://github.com/mozilla/authenticator-rs", rev = "b85bccf0527e42c877573029e8d35ff13ef06f9d" }
- gkrust_utils = { path = "../../../../xpcom/rust/gkrust_utils" }
- gecko_logger = { path = "../../../../xpcom/rust/gecko_logger" }
- rsdparsa_capi = { path = "../../../../dom/media/webrtc/sdp/rsdparsa_capi" }
-@@ -72,6 +72,7 @@ midir_impl = { path = "../../../../dom/midi/midir_impl", optional = true }
- dom = { path = "../../../../dom/base/rust" }
- origin-trials-ffi = { path = "../../../../dom/origin-trials/ffi" }
- jog = { path = "../../../components/glean/bindings/jog" }
-+midir = { version = "0.8.0" }
- 
- # Note: `modern_sqlite` means rusqlite's bindings file be for a sqlite with
- # version less than or equal to what we link to. This isn't a problem because we

diff --git a/www-client/firefox/files/gentoo-default-prefs.js b/www-client/firefox/files/gentoo-default-prefs.js
deleted file mode 100644
index 0407f5d..0000000
--- a/www-client/firefox/files/gentoo-default-prefs.js
+++ /dev/null
@@ -1,12 +0,0 @@
-pref("general.smoothScroll",               true);
-pref("general.autoScroll",                 false);
-pref("browser.urlbar.hideGoButton",        true);
-pref("accessibility.typeaheadfind",        true);
-pref("browser.shell.checkDefaultBrowser",  false);
-pref("browser.EULA.override",              true);
-pref("general.useragent.locale",           "chrome://global/locale/intl.properties");
-pref("intl.locale.requested",              "");
-/* Disable DoH by default */
-pref("network.trr.mode",                   5);
-/* Disable use of Mozilla Normandy service by default */
-pref("app.normandy.enabled",               false);

diff --git a/www-client/firefox/files/gentoo-hwaccel-prefs.js b/www-client/firefox/files/gentoo-hwaccel-prefs.js
deleted file mode 100644
index a00144a..0000000
--- a/www-client/firefox/files/gentoo-hwaccel-prefs.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Force hardware accelerated rendering due to USE=hwaccel */
-pref("layers.acceleration.force-enabled",  true);
-pref("webgl.force-enabled",                true);

diff --git a/www-client/firefox/files/gentoo-hwaccel-prefs.js-r2 b/www-client/firefox/files/gentoo-hwaccel-prefs.js-r2
deleted file mode 100644
index 48025ca..0000000
--- a/www-client/firefox/files/gentoo-hwaccel-prefs.js-r2
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Force hardware accelerated rendering due to USE=hwaccel */
-pref("gfx.webrender.all",                  true);
-pref("layers.acceleration.force-enabled",  true);
-pref("media.hardware-video-decoding.enabled", true);
-pref("webgl.force-enabled",                true);

diff --git a/www-client/firefox/files/icon/firefox-r2.desktop b/www-client/firefox/files/icon/firefox-r2.desktop
deleted file mode 100644
index 45d5f11..0000000
--- a/www-client/firefox/files/icon/firefox-r2.desktop
+++ /dev/null
@@ -1,236 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=@NAME@
-GenericName=Web Browser
-Comment=Browse the Web
-Exec=@EXEC@ %u
-Icon=@ICON@
-Terminal=false
-Type=Application
-MimeType=application/pdf;application/vnd.mozilla.xul+xml;application/xhtml+xml;text/html;text/mml;text/xml;x-scheme-handler/ftp;x-scheme-handler/http;x-scheme-handler/https;
-StartupNotify=true
-Categories=Network;WebBrowser;
-Keywords=web;browser;internet;
-Actions=new-window;new-private-window;profile-manager-window;
-
-[Desktop Action new-window]
-Name=Open a New Window
-Name[ach]=Dirica manyen
-Name[af]=Nuwe venster
-Name[an]=Nueva finestra
-Name[ar]=نافذة جديدة
-Name[as]=নতুন উইন্ডো
-Name[ast]=Ventana nueva
-Name[az]=Yeni Pəncərə
-Name[be]=Новае акно
-Name[bg]=Нов прозорец
-Name[bn_BD]=নতুন উইন্ডো (N)
-Name[bn_IN]=নতুন উইন্ডো
-Name[br]=Prenestr nevez
-Name[brx]=गोदान उइन्ड'(N)
-Name[bs]=Novi prozor
-Name[ca]=Finestra nova
-Name[cak]=K'ak'a' tzuwäch
-Name[cs]=Nové okno
-Name[cy]=Ffenestr Newydd
-Name[da]=Nyt vindue
-Name[de]=Neues Fenster
-Name[dsb]=Nowe wokno
-Name[el]=Νέο παράθυρο
-Name[en_GB]=New Window
-Name[en_US]=New Window
-Name[en_ZA]=New Window
-Name[eo]=Nova fenestro
-Name[es_AR]=Nueva ventana
-Name[es_CL]=Nueva ventana
-Name[es_ES]=Nueva ventana
-Name[es_MX]=Nueva ventana
-Name[et]=Uus aken
-Name[eu]=Leiho berria
-Name[fa]=پنجره جدید‌
-Name[ff]=Henorde Hesere
-Name[fi]=Uusi ikkuna
-Name[fr]=Nouvelle fenêtre
-Name[fy_NL]=Nij finster
-Name[ga_IE]=Fuinneog Nua
-Name[gd]=Uinneag ùr
-Name[gl]=Nova xanela
-Name[gn]=Ovetã pyahu
-Name[gu_IN]=નવી વિન્ડો
-Name[he]=חלון חדש
-Name[hi_IN]=नया विंडो
-Name[hr]=Novi prozor
-Name[hsb]=Nowe wokno
-Name[hu]=Új ablak
-Name[hy_AM]=Նոր Պատուհան
-Name[id]=Jendela Baru
-Name[is]=Nýr gluggi
-Name[it]=Nuova finestra
-Name[ja]=新しいウィンドウ
-Name[ja_JP-mac]=新規ウインドウ
-Name[ka]=ახალი ფანჯარა
-Name[kk]=Жаңа терезе
-Name[km]=បង្អួច​​​ថ្មី
-Name[kn]=ಹೊಸ ಕಿಟಕಿ
-Name[ko]=새 창
-Name[kok]=नवें जनेल
-Name[ks]=نئئ وِنڈو
-Name[lij]=Neuvo barcon
-Name[lo]=ຫນ້າຕ່າງໃຫມ່
-Name[lt]=Naujas langas
-Name[ltg]=Jauns lūgs
-Name[lv]=Jauns logs
-Name[mai]=नव विंडो
-Name[mk]=Нов прозорец
-Name[ml]=പുതിയ ജാലകം
-Name[mr]=नवीन पटल
-Name[ms]=Tetingkap Baru
-Name[my]=ဝင်းဒိုးအသစ်
-Name[nb_NO]=Nytt vindu
-Name[ne_NP]=नयाँ सञ्झ्याल
-Name[nl]=Nieuw venster
-Name[nn_NO]=Nytt vindauge
-Name[or]=ନୂତନ ୱିଣ୍ଡୋ
-Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
-Name[pl]=Nowe okno
-Name[pt_BR]=Nova janela
-Name[pt_PT]=Nova janela
-Name[rm]=Nova fanestra
-Name[ro]=Fereastră nouă
-Name[ru]=Новое окно
-Name[sat]=नावा विंडो (N)
-Name[si]=නව කවුළුවක්
-Name[sk]=Nové okno
-Name[sl]=Novo okno
-Name[son]=Zanfun taaga
-Name[sq]=Dritare e Re
-Name[sr]=Нови прозор
-Name[sv_SE]=Nytt fönster
-Name[ta]=புதிய சாளரம்
-Name[te]=కొత్త విండో
-Name[th]=หน้าต่างใหม่
-Name[tr]=Yeni pencere
-Name[tsz]=Eraatarakua jimpani
-Name[uk]=Нове вікно
-Name[ur]=نیا دریچہ
-Name[uz]=Yangi oyna
-Name[vi]=Cửa sổ mới
-Name[wo]=Palanteer bu bees
-Name[xh]=Ifestile entsha
-Name[zh_CN]=新建窗口
-Name[zh_TW]=開新視窗
-Exec=@EXEC@ --new-window %u
-
-[Desktop Action new-private-window]
-Name=Open a New Private Window
-Name[ach]=Dirica manyen me mung
-Name[af]=Nuwe privaatvenster
-Name[an]=Nueva finestra privada
-Name[ar]=نافذة خاصة جديدة
-Name[as]=নতুন ব্যক্তিগত উইন্ডো
-Name[ast]=Ventana privada nueva
-Name[az]=Yeni Məxfi Pəncərə
-Name[be]=Новае акно адасаблення
-Name[bg]=Нов прозорец за поверително сърфиране
-Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
-Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
-Name[br]=Prenestr merdeiñ prevez nevez
-Name[brx]=गोदान प्राइभेट उइन्ड'
-Name[bs]=Novi privatni prozor
-Name[ca]=Finestra privada nova
-Name[cak]=K'ak'a' ichinan tzuwäch
-Name[cs]=Nové anonymní okno
-Name[cy]=Ffenestr Breifat Newydd
-Name[da]=Nyt privat vindue
-Name[de]=Neues privates Fenster
-Name[dsb]=Nowe priwatne wokno
-Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
-Name[en_GB]=New Private Window
-Name[en_US]=New Private Window
-Name[en_ZA]=New Private Window
-Name[eo]=Nova privata fenestro
-Name[es_AR]=Nueva ventana privada
-Name[es_CL]=Nueva ventana privada
-Name[es_ES]=Nueva ventana privada
-Name[es_MX]=Nueva ventana privada
-Name[et]=Uus privaatne aken
-Name[eu]=Leiho pribatu berria
-Name[fa]=پنجره ناشناس جدید
-Name[ff]=Henorde Suturo Hesere
-Name[fi]=Uusi yksityinen ikkuna
-Name[fr]=Nouvelle fenêtre de navigation privée
-Name[fy_NL]=Nij priveefinster
-Name[ga_IE]=Fuinneog Nua Phríobháideach
-Name[gd]=Uinneag phrìobhaideach ùr
-Name[gl]=Nova xanela privada
-Name[gn]=Ovetã ñemi pyahu
-Name[gu_IN]=નવી ખાનગી વિન્ડો
-Name[he]=חלון פרטי חדש
-Name[hi_IN]=नयी निजी विंडो
-Name[hr]=Novi privatni prozor
-Name[hsb]=Nowe priwatne wokno
-Name[hu]=Új privát ablak
-Name[hy_AM]=Սկսել Գաղտնի դիտարկում
-Name[id]=Jendela Mode Pribadi Baru
-Name[is]=Nýr huliðsgluggi
-Name[it]=Nuova finestra anonima
-Name[ja]=新しいプライベートウィンドウ
-Name[ja_JP-mac]=新規プライベートウインドウ
-Name[ka]=ახალი პირადი ფანჯარა
-Name[kk]=Жаңа жекелік терезе
-Name[km]=បង្អួច​ឯកជន​ថ្មី
-Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
-Name[ko]=새 사생활 보호 모드
-Name[kok]=नवो खाजगी विंडो
-Name[ks]=نْو پرایوٹ وینڈو&amp;
-Name[lij]=Neuvo barcon privou
-Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
-Name[lt]=Naujas privataus naršymo langas
-Name[ltg]=Jauns privatais lūgs
-Name[lv]=Jauns privātais logs
-Name[mai]=नया निज विंडो (W)
-Name[mk]=Нов приватен прозорец
-Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
-Name[mr]=नवीन वैयक्तिक पटल
-Name[ms]=Tetingkap Persendirian Baharu
-Name[my]=New Private Window
-Name[nb_NO]=Nytt privat vindu
-Name[ne_NP]=नयाँ निजी सञ्झ्याल
-Name[nl]=Nieuw privévenster
-Name[nn_NO]=Nytt privat vindauge
-Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
-Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
-Name[pl]=Nowe okno prywatne
-Name[pt_BR]=Nova janela privativa
-Name[pt_PT]=Nova janela privada
-Name[rm]=Nova fanestra privata
-Name[ro]=Fereastră privată nouă
-Name[ru]=Новое приватное окно
-Name[sat]=नावा निजेराक् विंडो (W )
-Name[si]=නව පුද්ගලික කවුළුව (W)
-Name[sk]=Nové okno v režime Súkromné prehliadanie
-Name[sl]=Novo zasebno okno
-Name[son]=Sutura zanfun taaga
-Name[sq]=Dritare e Re Private
-Name[sr]=Нови приватан прозор
-Name[sv_SE]=Nytt privat fönster
-Name[ta]=புதிய தனிப்பட்ட சாளரம்
-Name[te]=కొత్త ఆంతరంగిక విండో
-Name[th]=หน้าต่างส่วนตัวใหม่
-Name[tr]=Yeni gizli pencere
-Name[tsz]=Juchiiti eraatarakua jimpani
-Name[uk]=Приватне вікно
-Name[ur]=نیا نجی دریچہ
-Name[uz]=Yangi maxfiy oyna
-Name[vi]=Cửa sổ riêng tư mới
-Name[wo]=Panlanteeru biir bu bees
-Name[xh]=Ifestile yangasese entsha
-Name[zh_CN]=新建隐私浏览窗口
-Name[zh_TW]=新增隱私視窗
-Exec=@EXEC@ --private-window %u
-
-[Desktop Action profile-manager-window]
-Name=Open the Profile Manager
-Name[de]=Profilverwaltung öffnen
-Name[cs]=Správa profilů
-Exec=@EXEC@ --ProfileManager

diff --git a/www-client/firefox/files/icon/firefox-r3.desktop b/www-client/firefox/files/icon/firefox-r3.desktop
deleted file mode 100644
index 8219e93..0000000
--- a/www-client/firefox/files/icon/firefox-r3.desktop
+++ /dev/null
@@ -1,236 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=@NAME@
-GenericName=Web Browser
-Comment=Browse the Web
-Exec=@EXEC@ %u
-Icon=@ICON@
-Terminal=false
-Type=Application
-MimeType=application/pdf;application/vnd.mozilla.xul+xml;application/xhtml+xml;text/html;text/mml;text/xml;x-scheme-handler/http;x-scheme-handler/https;
-StartupNotify=true
-Categories=Network;WebBrowser;
-Keywords=web;browser;internet;
-Actions=new-window;new-private-window;profile-manager-window;
-
-[Desktop Action new-window]
-Name=Open a New Window
-Name[ach]=Dirica manyen
-Name[af]=Nuwe venster
-Name[an]=Nueva finestra
-Name[ar]=نافذة جديدة
-Name[as]=নতুন উইন্ডো
-Name[ast]=Ventana nueva
-Name[az]=Yeni Pəncərə
-Name[be]=Новае акно
-Name[bg]=Нов прозорец
-Name[bn_BD]=নতুন উইন্ডো (N)
-Name[bn_IN]=নতুন উইন্ডো
-Name[br]=Prenestr nevez
-Name[brx]=गोदान उइन्ड'(N)
-Name[bs]=Novi prozor
-Name[ca]=Finestra nova
-Name[cak]=K'ak'a' tzuwäch
-Name[cs]=Nové okno
-Name[cy]=Ffenestr Newydd
-Name[da]=Nyt vindue
-Name[de]=Neues Fenster
-Name[dsb]=Nowe wokno
-Name[el]=Νέο παράθυρο
-Name[en_GB]=New Window
-Name[en_US]=New Window
-Name[en_ZA]=New Window
-Name[eo]=Nova fenestro
-Name[es_AR]=Nueva ventana
-Name[es_CL]=Nueva ventana
-Name[es_ES]=Nueva ventana
-Name[es_MX]=Nueva ventana
-Name[et]=Uus aken
-Name[eu]=Leiho berria
-Name[fa]=پنجره جدید‌
-Name[ff]=Henorde Hesere
-Name[fi]=Uusi ikkuna
-Name[fr]=Nouvelle fenêtre
-Name[fy_NL]=Nij finster
-Name[ga_IE]=Fuinneog Nua
-Name[gd]=Uinneag ùr
-Name[gl]=Nova xanela
-Name[gn]=Ovetã pyahu
-Name[gu_IN]=નવી વિન્ડો
-Name[he]=חלון חדש
-Name[hi_IN]=नया विंडो
-Name[hr]=Novi prozor
-Name[hsb]=Nowe wokno
-Name[hu]=Új ablak
-Name[hy_AM]=Նոր Պատուհան
-Name[id]=Jendela Baru
-Name[is]=Nýr gluggi
-Name[it]=Nuova finestra
-Name[ja]=新しいウィンドウ
-Name[ja_JP-mac]=新規ウインドウ
-Name[ka]=ახალი ფანჯარა
-Name[kk]=Жаңа терезе
-Name[km]=បង្អួច​​​ថ្មី
-Name[kn]=ಹೊಸ ಕಿಟಕಿ
-Name[ko]=새 창
-Name[kok]=नवें जनेल
-Name[ks]=نئئ وِنڈو
-Name[lij]=Neuvo barcon
-Name[lo]=ຫນ້າຕ່າງໃຫມ່
-Name[lt]=Naujas langas
-Name[ltg]=Jauns lūgs
-Name[lv]=Jauns logs
-Name[mai]=नव विंडो
-Name[mk]=Нов прозорец
-Name[ml]=പുതിയ ജാലകം
-Name[mr]=नवीन पटल
-Name[ms]=Tetingkap Baru
-Name[my]=ဝင်းဒိုးအသစ်
-Name[nb_NO]=Nytt vindu
-Name[ne_NP]=नयाँ सञ्झ्याल
-Name[nl]=Nieuw venster
-Name[nn_NO]=Nytt vindauge
-Name[or]=ନୂତନ ୱିଣ୍ଡୋ
-Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
-Name[pl]=Nowe okno
-Name[pt_BR]=Nova janela
-Name[pt_PT]=Nova janela
-Name[rm]=Nova fanestra
-Name[ro]=Fereastră nouă
-Name[ru]=Новое окно
-Name[sat]=नावा विंडो (N)
-Name[si]=නව කවුළුවක්
-Name[sk]=Nové okno
-Name[sl]=Novo okno
-Name[son]=Zanfun taaga
-Name[sq]=Dritare e Re
-Name[sr]=Нови прозор
-Name[sv_SE]=Nytt fönster
-Name[ta]=புதிய சாளரம்
-Name[te]=కొత్త విండో
-Name[th]=หน้าต่างใหม่
-Name[tr]=Yeni pencere
-Name[tsz]=Eraatarakua jimpani
-Name[uk]=Нове вікно
-Name[ur]=نیا دریچہ
-Name[uz]=Yangi oyna
-Name[vi]=Cửa sổ mới
-Name[wo]=Palanteer bu bees
-Name[xh]=Ifestile entsha
-Name[zh_CN]=新建窗口
-Name[zh_TW]=開新視窗
-Exec=@EXEC@ --new-window %u
-
-[Desktop Action new-private-window]
-Name=Open a New Private Window
-Name[ach]=Dirica manyen me mung
-Name[af]=Nuwe privaatvenster
-Name[an]=Nueva finestra privada
-Name[ar]=نافذة خاصة جديدة
-Name[as]=নতুন ব্যক্তিগত উইন্ডো
-Name[ast]=Ventana privada nueva
-Name[az]=Yeni Məxfi Pəncərə
-Name[be]=Новае акно адасаблення
-Name[bg]=Нов прозорец за поверително сърфиране
-Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
-Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
-Name[br]=Prenestr merdeiñ prevez nevez
-Name[brx]=गोदान प्राइभेट उइन्ड'
-Name[bs]=Novi privatni prozor
-Name[ca]=Finestra privada nova
-Name[cak]=K'ak'a' ichinan tzuwäch
-Name[cs]=Nové anonymní okno
-Name[cy]=Ffenestr Breifat Newydd
-Name[da]=Nyt privat vindue
-Name[de]=Neues privates Fenster
-Name[dsb]=Nowe priwatne wokno
-Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
-Name[en_GB]=New Private Window
-Name[en_US]=New Private Window
-Name[en_ZA]=New Private Window
-Name[eo]=Nova privata fenestro
-Name[es_AR]=Nueva ventana privada
-Name[es_CL]=Nueva ventana privada
-Name[es_ES]=Nueva ventana privada
-Name[es_MX]=Nueva ventana privada
-Name[et]=Uus privaatne aken
-Name[eu]=Leiho pribatu berria
-Name[fa]=پنجره ناشناس جدید
-Name[ff]=Henorde Suturo Hesere
-Name[fi]=Uusi yksityinen ikkuna
-Name[fr]=Nouvelle fenêtre de navigation privée
-Name[fy_NL]=Nij priveefinster
-Name[ga_IE]=Fuinneog Nua Phríobháideach
-Name[gd]=Uinneag phrìobhaideach ùr
-Name[gl]=Nova xanela privada
-Name[gn]=Ovetã ñemi pyahu
-Name[gu_IN]=નવી ખાનગી વિન્ડો
-Name[he]=חלון פרטי חדש
-Name[hi_IN]=नयी निजी विंडो
-Name[hr]=Novi privatni prozor
-Name[hsb]=Nowe priwatne wokno
-Name[hu]=Új privát ablak
-Name[hy_AM]=Սկսել Գաղտնի դիտարկում
-Name[id]=Jendela Mode Pribadi Baru
-Name[is]=Nýr huliðsgluggi
-Name[it]=Nuova finestra anonima
-Name[ja]=新しいプライベートウィンドウ
-Name[ja_JP-mac]=新規プライベートウインドウ
-Name[ka]=ახალი პირადი ფანჯარა
-Name[kk]=Жаңа жекелік терезе
-Name[km]=បង្អួច​ឯកជន​ថ្មី
-Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
-Name[ko]=새 사생활 보호 모드
-Name[kok]=नवो खाजगी विंडो
-Name[ks]=نْو پرایوٹ وینڈو&amp;
-Name[lij]=Neuvo barcon privou
-Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
-Name[lt]=Naujas privataus naršymo langas
-Name[ltg]=Jauns privatais lūgs
-Name[lv]=Jauns privātais logs
-Name[mai]=नया निज विंडो (W)
-Name[mk]=Нов приватен прозорец
-Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
-Name[mr]=नवीन वैयक्तिक पटल
-Name[ms]=Tetingkap Persendirian Baharu
-Name[my]=New Private Window
-Name[nb_NO]=Nytt privat vindu
-Name[ne_NP]=नयाँ निजी सञ्झ्याल
-Name[nl]=Nieuw privévenster
-Name[nn_NO]=Nytt privat vindauge
-Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
-Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
-Name[pl]=Nowe okno prywatne
-Name[pt_BR]=Nova janela privativa
-Name[pt_PT]=Nova janela privada
-Name[rm]=Nova fanestra privata
-Name[ro]=Fereastră privată nouă
-Name[ru]=Новое приватное окно
-Name[sat]=नावा निजेराक् विंडो (W )
-Name[si]=නව පුද්ගලික කවුළුව (W)
-Name[sk]=Nové okno v režime Súkromné prehliadanie
-Name[sl]=Novo zasebno okno
-Name[son]=Sutura zanfun taaga
-Name[sq]=Dritare e Re Private
-Name[sr]=Нови приватан прозор
-Name[sv_SE]=Nytt privat fönster
-Name[ta]=புதிய தனிப்பட்ட சாளரம்
-Name[te]=కొత్త ఆంతరంగిక విండో
-Name[th]=หน้าต่างส่วนตัวใหม่
-Name[tr]=Yeni gizli pencere
-Name[tsz]=Juchiiti eraatarakua jimpani
-Name[uk]=Приватне вікно
-Name[ur]=نیا نجی دریچہ
-Name[uz]=Yangi maxfiy oyna
-Name[vi]=Cửa sổ riêng tư mới
-Name[wo]=Panlanteeru biir bu bees
-Name[xh]=Ifestile yangasese entsha
-Name[zh_CN]=新建隐私浏览窗口
-Name[zh_TW]=新增隱私視窗
-Exec=@EXEC@ --private-window %u
-
-[Desktop Action profile-manager-window]
-Name=Open the Profile Manager
-Name[de]=Profilverwaltung öffnen
-Name[cs]=Správa profilů
-Exec=@EXEC@ --ProfileManager

diff --git a/www-client/firefox/files/icon/firefox-symbolic.svg b/www-client/firefox/files/icon/firefox-symbolic.svg
deleted file mode 100644
index 2078eea..0000000
--- a/www-client/firefox/files/icon/firefox-symbolic.svg
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   viewBox="0 0 16 16"
-   version="1.1"
-   id="svg3758"
-   sodipodi:docname="firefox-symbolic-quantum.svg"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06">
-  <metadata
-     id="metadata3764">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title>Gnome Symbolic Icon Theme</dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs3762" />
-  <sodipodi:namedview
-     pagecolor="#555753"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="1"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1591"
-     inkscape:window-height="909"
-     id="namedview3760"
-     showgrid="false"
-     showborder="false"
-     inkscape:snap-global="false"
-     inkscape:zoom="1"
-     inkscape:cx="3.8851213"
-     inkscape:cy="12.517918"
-     inkscape:window-x="143"
-     inkscape:window-y="60"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="svg3758">
-    <inkscape:grid
-       type="xygrid"
-       id="grid3768" />
-  </sodipodi:namedview>
-  <title
-     id="title3754">Gnome Symbolic Icon Theme</title>
-  <path
-     d="m 15.054715,6.9884649 v 0 c -0.02034,-0.133652 -0.04071,-0.2122775 -0.04071,-0.2122775 0,0 -0.05225,0.060583 -0.138743,0.1748124 A 4.9808937,4.9808937 0 0 0 14.703694,6.0103229 6.4034781,6.4034781 0 0 0 14.270352,4.895288 4.6469845,4.6469845 0 0 0 13.87447,4.2163686 Q 13.793063,4.0947376 13.708437,3.9805045 C 13.444828,3.5499376 13.142365,3.2867867 12.792269,2.7891599 A 3.6101075,3.6101075 0 0 1 12.333953,1.5474054 5.0151173,5.0151173 0 0 0 12.113814,2.3599798 C 11.754468,1.997397 11.441832,1.7397963 11.253142,1.5640539 10.322171,0.69459485 10.430396,0.24367816 10.430396,0.24367816 v 0 c 0,0 -1.7389294,1.94102274 -0.9855522,3.96297904 a 3.8848199,3.8848199 0 0 0 1.2949452,1.726432 c 0.728868,0.6012222 1.513693,1.0743371 1.927612,2.2832561 A 3.8741829,3.8741829 0 0 0 11.21337,6.6823034 3.5023502,3.5023502 0 0 1 11.490854,8.0697401 3.2946971,3.2946971 0 0 1 7.4621982,11.27934 3.0343219,3.0343219 0 0 1 6.6459244,11.001852 3.3219834,3.3219834 0 0 1 5.667782,10.09771 l -0.00463,-
 0.0078 0.058274,0.02125 a 3.0061106,3.0061106 0 0 0 0.4162344,0.111409 2.6028293,2.6028293 0 0 0 1.6570605,-0.195631 C 8.3154732,9.7379218 8.6308831,9.5237932 8.8866339,9.6084266 h 0.0046 c 0.24974,0.079514 0.446755,-0.1628244 0.2682391,-0.4162632 A 1.3596868,1.3596868 0 0 0 7.8423564,8.6778985 C 7.3211426,8.7537416 6.8434027,9.1241907 6.1603222,8.7653097 a 1.4470953,1.4470953 0 0 1 -0.128107,-0.075371 c -0.04625,-0.026369 0.146605,0.040234 0.1017455,0.010233 A 3.3899676,3.3899676 0 0 1 5.7047808,8.4439577 c -0.010172,-0.00822 0.103133,0.032367 0.092497,0.024039 A 1.6561356,1.6561356 0 0 1 5.3495968,8.015168 0.80517516,0.80517516 0 0 1 5.3190728,7.2964766 0.63405807,0.63405807 0 0 1 5.5965603,7.0356384 c 0.088333,0.043485 0.1429059,0.076305 0.1429059,0.076305 0,0 -0.040235,-0.073997 -0.061972,-0.1128365 0.00786,-0.0027 0.014794,0 0.022662,-0.00513 0.077233,0.033293 0.248351,0.1202544 0.3385341,0.1734358 A 0.46987818,0.46987818 0 0 1 6.19362,7.3061637 c 0,0 0.030994,-0.015351 0.0079,
 -0.079998 A 0.41623066,0.41623066 0 0 0 6.0414753,7.0300927 h 0.0074 a 1.3596868,1.3596868 0 0 1 0.1970213,0.1225561 0.96149289,0.96149289 0 0 0 0.078625,-0.416232 0.54479973,0.54479973 0 0 0 -0.031914,-0.2312396 c -0.024511,-0.046254 0.013876,-0.064746 0.056885,-0.016135 A 0.45137905,0.45137905 0 0 0 6.3129456,6.378979 v -0.00372 0 c 0,0 0.024511,-0.031916 0.035615,-0.043486 A 0.66134433,0.66134433 0 0 1 6.4484481,6.2503678 4.6122987,4.6122987 0 0 1 7.1259793,5.9048971 C 7.3174429,5.8211545 7.4760733,5.7573477 7.5084475,5.7388339 a 1.0637007,1.0637007 0 0 0 0.1355052,-0.1040612 0.91015778,0.91015778 0 0 0 0.3052354,-0.5272274 0.73996569,0.73996569 0 0 0 0.0079,-0.082324 v -0.023118 -0.013967 0 -0.00552 0 -0.00611 0 C 7.9293085,4.872475 7.749868,4.7943251 6.8119611,4.7064478 A 0.81997449,0.81997449 0 0 1 6.1413599,4.0776254 v 0.0042 c -0.013416,0.034225 -0.025431,0.068909 -0.037456,0.1040572 0.012025,-0.034685 0.024051,-0.069373 0.037456,-0.1040572 v -0.00742 A 2.3762148,2.3762148 0
  0 1 7.0598423,2.9339361 c 0.024051,-0.019416 -0.096192,0.00512 -0.072152,-0.014798 A 2.3845397,2.3845397 0 0 1 7.2328039,2.8155414 C 7.2748921,2.7979724 7.0524371,2.7128704 6.8558842,2.7336774 a 1.0174527,1.0174527 0 0 0 -0.3496338,0.082324 c 0.046253,-0.039773 0.1849968,-0.092498 0.1521605,-0.092498 a 2.2499581,2.2499581 0 0 0 -0.713142,0.2696255 0.14521828,0.14521828 0 0 1 0.01387,-0.064747 1.1099484,1.1099484 0 0 0 -0.4458297,0.3440843 0.58966016,0.58966016 0 0 0 0.00462,-0.080469 1.3300881,1.3300881 0 0 0 -0.2187525,0.2053404 l -0.00417,0.00321 A 2.9066776,2.9066776 0 0 0 3.6684873,3.2618132 l -0.00463,-0.0042 h 0.00554 A 1.3610743,1.3610743 0 0 1 3.3803631,2.9339159 l -0.0074,0.0018 -0.00877,-0.010174 C 3.3285694,2.8728322 3.2920343,2.813172 3.2545731,2.7465739 3.2277502,2.7003291 3.2004619,2.646216 3.1731756,2.5902563 c 0,-0.00372 -0.00416,-0.00513 -0.006,-0.00552 -0.0111,0 -0.01896,0.05133 -0.028212,0.037927 v -0.0028 A 1.9923577,1.9923577 0 0 1 3.0080744,1.8396896 l -0.0074
 ,0.00372 A 0.87130958,0.87130958 0 0 0 2.6704677,2.2753541 c -0.028212,0.063362 -0.046248,0.098047 -0.064746,0.1327329 0,0.0028 0,-0.00461 0,-0.016194 0.00416,-0.031916 0.018037,-0.097585 0.014799,-0.092497 -0.00323,0.00513 -0.00553,0.00882 -0.00877,0.013415 A 0.80147532,0.80147532 0 0 0 2.4956586,2.4848515 1.0891367,1.0891367 0 0 0 2.4262868,2.661518 c -0.00276,0.00973 0,-0.00832 0,-0.029599 0,-0.02127 0.00416,-0.059199 0,-0.051331 L 2.4161148,2.600475 A 4.3935464,4.3935464 0 0 0 2.0461275,4.0040946 1.3976101,1.3976101 0 0 0 2.031791,4.252909 v 0.00742 A 3.0653076,3.0653076 0 0 0 1.6539417,4.7690529 7.2174403,7.2174403 0 0 0 0.85524217,6.725337 4.7871157,4.7871157 0 0 1 1.2830334,5.9756593 6.9371784,6.9371784 0 0 0 0.79974461,8.5192901 6.582457,6.582457 0 0 1 1.0078598,7.7659142 6.3854411,6.3854411 0 0 0 1.585032,10.755373 6.9542899,6.9542899 0 0 0 4.3372422,13.87618 v 0 a 6.0196208,6.0196208 0 0 0 1.6038754,0.768639 c 0.07492,0.02728 0.1507676,0.0541 0.2284646,0.08 -0.024511,-0.00
 96 -0.04625,-0.02034 -0.070761,-0.03098 A 7.2609132,7.2609132 0 0 0 8.179966,15 c 2.494615,0 3.318287,-0.949928 3.394136,-1.044738 v 0 A 1.2625664,1.2625664 0 0 0 11.8687,13.559386 v 0 q 0.07216,-0.02958 0.145679,-0.06335 l 0.03097,-0.01397 0.05597,-0.02635 a 5.2315572,5.2315572 0 0 0 1.053064,-0.659489 2.5436321,2.5436321 0 0 0 0.98184,-1.433687 v 0 a 0.89628343,0.89628343 0 0 0 0.01343,-0.660421 q 0.03838,-0.0606 0.0791,-0.129501 A 5.8762526,5.8762526 0 0 0 15.1107,7.7140393 v -0.0027 c 0,-0.027291 0,-0.054583 0,-0.081863 A 3.5754215,3.5754215 0 0 0 15.05473,6.9884887 Z"
-     id="path3756"
-     inkscape:connector-curvature="0"
-     style="fill:#bebebe;fill-opacity:1;stroke-width:0.46247858" />
-</svg>

diff --git a/www-client/firefox/firefox-103.0.1.ebuild b/www-client/firefox/firefox-103.0.1.ebuild
deleted file mode 100644
index d0494bb..0000000
--- a/www-client/firefox/firefox-103.0.1.ebuild
+++ /dev/null
@@ -1,1301 +0,0 @@
-# Copyright 1999-2022 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="8"
-
-FIREFOX_PATCHSET="firefox-103-patches-03j.tar.xz"
-
-LLVM_MAX_SLOT=14
-
-PYTHON_COMPAT=( python3_{8..11} )
-PYTHON_REQ_USE="ncurses,sqlite,ssl"
-
-WANT_AUTOCONF="2.1"
-
-VIRTUALX_REQUIRED="pgo"
-
-MOZ_ESR=
-
-MOZ_PV=${PV}
-MOZ_PV_SUFFIX=
-if [[ ${PV} =~ (_(alpha|beta|rc).*)$ ]] ; then
-	MOZ_PV_SUFFIX=${BASH_REMATCH[1]}
-
-	# Convert the ebuild version to the upstream Mozilla version
-	MOZ_PV="${MOZ_PV/_alpha/a}" # Handle alpha for SRC_URI
-	MOZ_PV="${MOZ_PV/_beta/b}"  # Handle beta for SRC_URI
-	MOZ_PV="${MOZ_PV%%_rc*}"    # Handle rc for SRC_URI
-fi
-
-if [[ -n ${MOZ_ESR} ]] ; then
-	# ESR releases have slightly different version numbers
-	MOZ_PV="${MOZ_PV}esr"
-fi
-
-MOZ_PN="${PN%-bin}"
-MOZ_P="${MOZ_PN}-${MOZ_PV}"
-MOZ_PV_DISTFILES="${MOZ_PV}${MOZ_PV_SUFFIX}"
-MOZ_P_DISTFILES="${MOZ_PN}-${MOZ_PV_DISTFILES}"
-
-inherit autotools check-reqs desktop flag-o-matic gnome2-utils linux-info \
-	llvm multiprocessing pax-utils python-any-r1 toolchain-funcs \
-	virtualx xdg
-
-MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}"
-
-if [[ ${PV} == *_rc* ]] ; then
-	MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/candidates/${MOZ_PV}-candidates/build${PV##*_rc}"
-fi
-
-PATCH_URIS=(
-	https://dev.gentoo.org/~{juippis,whissi,slashbeast}/mozilla/patchsets/${FIREFOX_PATCHSET}
-)
-
-SRC_URI="${MOZ_SRC_BASE_URI}/source/${MOZ_P}.source.tar.xz -> ${MOZ_P_DISTFILES}.source.tar.xz
-	${PATCH_URIS[@]}"
-
-DESCRIPTION="Firefox Web Browser"
-HOMEPAGE="https://www.mozilla.com/firefox"
-
-KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~x86"
-
-SLOT="rapid"
-LICENSE="MPL-2.0 GPL-2 LGPL-2.1"
-
-# make clang non-default for now, as lld's relocation relax support is comming in llvm 15 release
-# https://reviews.llvm.org/D127611
-IUSE="clang cpu_flags_arm_neon dbus debug eme-free hardened hwaccel"
-IUSE+=" jack libproxy lto +openh264 pgo pulseaudio sndio selinux"
-IUSE+=" +system-av1 +system-harfbuzz +system-icu +system-jpeg +system-libevent +system-libvpx system-png system-python-libs +system-webp"
-IUSE+=" wayland wifi"
-
-# Firefox-only IUSE
-IUSE+=" geckodriver +gmp-autoupdate screencast +X"
-
-REQUIRED_USE="debug? ( !system-av1 )
-	pgo? ( lto )
-	wifi? ( dbus )"
-
-# Firefox-only REQUIRED_USE flags
-REQUIRED_USE+=" || ( X wayland )"
-REQUIRED_USE+=" pgo? ( X )"
-REQUIRED_USE+=" screencast? ( wayland )"
-
-BDEPEND="${PYTHON_DEPS}
-	app-arch/unzip
-	app-arch/zip
-	>=dev-util/cbindgen-0.24.3
-	net-libs/nodejs
-	virtual/pkgconfig
-	virtual/rust
-	|| (
-		(
-			sys-devel/clang:14
-			sys-devel/llvm:14
-			clang? (
-				=sys-devel/lld-14*
-				pgo? ( =sys-libs/compiler-rt-sanitizers-14*[profile] )
-			)
-		)
-		(
-			sys-devel/clang:13
-			sys-devel/llvm:13
-			clang? (
-				=sys-devel/lld-13*
-				pgo? ( =sys-libs/compiler-rt-sanitizers-13*[profile] )
-			)
-		)
-	)
-	amd64? ( >=dev-lang/nasm-2.14 )
-	x86? ( >=dev-lang/nasm-2.14 )"
-
-COMMON_DEPEND="
-	dev-libs/atk
-	dev-libs/expat
-	dev-libs/glib:2
-	dev-libs/libffi:=
-	>=dev-libs/nss-3.80
-	>=dev-libs/nspr-4.34
-	media-libs/alsa-lib
-	media-libs/fontconfig
-	media-libs/freetype
-	media-libs/mesa
-	media-video/ffmpeg
-	sys-libs/zlib
-	virtual/freedesktop-icon-theme
-	x11-libs/cairo
-	x11-libs/gdk-pixbuf
-	x11-libs/pango
-	x11-libs/pixman
-	dbus? (
-		dev-libs/dbus-glib
-		sys-apps/dbus
-	)
-	jack? ( virtual/jack )
-	libproxy? ( net-libs/libproxy )
-	selinux? ( sec-policy/selinux-mozilla )
-	sndio? ( >=media-sound/sndio-1.8.0-r1 )
-	screencast? ( media-video/pipewire:= )
-	system-av1? (
-		>=media-libs/dav1d-0.9.3:=
-		>=media-libs/libaom-1.0.0:=
-	)
-	system-harfbuzz? (
-		>=media-gfx/graphite2-1.3.13
-		>=media-libs/harfbuzz-2.8.1:0=
-	)
-	system-icu? ( >=dev-libs/icu-71.1:= )
-	system-jpeg? ( >=media-libs/libjpeg-turbo-1.2.1 )
-	system-libevent? ( >=dev-libs/libevent-2.0:0=[threads] )
-	system-libvpx? ( >=media-libs/libvpx-1.8.2:0=[postproc] )
-	system-png? ( >=media-libs/libpng-1.6.35:0=[apng] )
-	system-webp? ( >=media-libs/libwebp-1.1.0:0= )
-	wayland? (
-		>=media-libs/libepoxy-1.5.10-r1
-		x11-libs/gtk+:3[wayland]
-		x11-libs/libdrm
-		x11-libs/libxkbcommon[wayland]
-	)
-	wifi? (
-		kernel_linux? (
-			dev-libs/dbus-glib
-			net-misc/networkmanager
-			sys-apps/dbus
-		)
-	)
-	X? (
-		virtual/opengl
-		x11-libs/cairo[X]
-		x11-libs/gtk+:3[X]
-		x11-libs/libX11
-		x11-libs/libXcomposite
-		x11-libs/libXdamage
-		x11-libs/libXext
-		x11-libs/libXfixes
-		x11-libs/libxkbcommon[X]
-		x11-libs/libXrandr
-		x11-libs/libXtst
-		x11-libs/libxcb:=
-	)"
-
-RDEPEND="${COMMON_DEPEND}
-	!www-client/firefox:0
-	!www-client/firefox:esr
-	jack? ( virtual/jack )
-	openh264? ( media-libs/openh264:*[plugin] )
-	pulseaudio? (
-		|| (
-			media-sound/pulseaudio
-			>=media-sound/apulse-0.1.12-r4
-		)
-	)
-	selinux? ( sec-policy/selinux-mozilla )"
-
-DEPEND="${COMMON_DEPEND}
-	pulseaudio? (
-		|| (
-			media-sound/pulseaudio
-			>=media-sound/apulse-0.1.12-r4[sdk]
-		)
-	)
-	X? (
-		x11-libs/libICE
-		x11-libs/libSM
-	)"
-
-S="${WORKDIR}/${PN}-${PV%_*}"
-RESTRICT=network-sandbox
-
-# Allow MOZ_GMP_PLUGIN_LIST to be set in an eclass or
-# overridden in the enviromnent (advanced hackers only)
-if [[ -z "${MOZ_GMP_PLUGIN_LIST+set}" ]] ; then
-	MOZ_GMP_PLUGIN_LIST=( gmp-gmpopenh264 gmp-widevinecdm )
-fi
-
-llvm_check_deps() {
-	if ! has_version -b "sys-devel/clang:${LLVM_SLOT}" ; then
-		einfo "sys-devel/clang:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
-		return 1
-	fi
-
-	if use clang ; then
-		if ! has_version -b "=sys-devel/lld-${LLVM_SLOT}*" ; then
-			einfo "=sys-devel/lld-${LLVM_SLOT}* is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
-			return 1
-		fi
-
-		if use pgo ; then
-			if ! has_version -b "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}*" ; then
-				einfo "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}* is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
-				return 1
-			fi
-		fi
-	fi
-
-	einfo "Using LLVM slot ${LLVM_SLOT} to build" >&2
-}
-
-MOZ_LANGS=(
-	af ar ast be bg br ca cak cs cy da de dsb
-	el en-CA en-GB en-US es-AR es-ES et eu
-	fi fr fy-NL ga-IE gd gl he hr hsb hu
-	id is it ja ka kab kk ko lt lv ms nb-NO nl nn-NO
-	pa-IN pl pt-BR pt-PT rm ro ru
-	sk sl sq sr sv-SE th tr uk uz vi zh-CN zh-TW
-)
-
-# Firefox-only LANGS
-MOZ_LANGS+=( ach )
-MOZ_LANGS+=( an )
-MOZ_LANGS+=( az )
-MOZ_LANGS+=( bn )
-MOZ_LANGS+=( bs )
-MOZ_LANGS+=( ca-valencia )
-MOZ_LANGS+=( eo )
-MOZ_LANGS+=( es-CL )
-MOZ_LANGS+=( es-MX )
-MOZ_LANGS+=( fa )
-MOZ_LANGS+=( ff )
-MOZ_LANGS+=( gn )
-MOZ_LANGS+=( gu-IN )
-MOZ_LANGS+=( hi-IN )
-MOZ_LANGS+=( hy-AM )
-MOZ_LANGS+=( ia )
-MOZ_LANGS+=( km )
-MOZ_LANGS+=( kn )
-MOZ_LANGS+=( lij )
-MOZ_LANGS+=( mk )
-MOZ_LANGS+=( mr )
-MOZ_LANGS+=( my )
-MOZ_LANGS+=( ne-NP )
-MOZ_LANGS+=( oc )
-MOZ_LANGS+=( sco )
-MOZ_LANGS+=( si )
-MOZ_LANGS+=( son )
-MOZ_LANGS+=( szl )
-MOZ_LANGS+=( ta )
-MOZ_LANGS+=( te )
-MOZ_LANGS+=( tl )
-MOZ_LANGS+=( trs )
-MOZ_LANGS+=( ur )
-MOZ_LANGS+=( xh )
-
-mozilla_set_globals() {
-	# https://bugs.gentoo.org/587334
-	local MOZ_TOO_REGIONALIZED_FOR_L10N=(
-		fy-NL ga-IE gu-IN hi-IN hy-AM nb-NO ne-NP nn-NO pa-IN sv-SE
-	)
-
-	local lang xflag
-	for lang in "${MOZ_LANGS[@]}" ; do
-		# en and en_US are handled internally
-		if [[ ${lang} == en ]] || [[ ${lang} == en-US ]] ; then
-			continue
-		fi
-
-		# strip region subtag if $lang is in the list
-		if has ${lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then
-			xflag=${lang%%-*}
-		else
-			xflag=${lang}
-		fi
-
-		SRC_URI+=" l10n_${xflag/[_@]/-}? ("
-		SRC_URI+=" ${MOZ_SRC_BASE_URI}/linux-x86_64/xpi/${lang}.xpi -> ${MOZ_P_DISTFILES}-${lang}.xpi"
-		SRC_URI+=" )"
-		IUSE+=" l10n_${xflag/[_@]/-}"
-	done
-}
-mozilla_set_globals
-
-moz_clear_vendor_checksums() {
-	debug-print-function ${FUNCNAME} "$@"
-
-	if [[ ${#} -ne 1 ]] ; then
-		die "${FUNCNAME} requires exact one argument"
-	fi
-
-	einfo "Clearing cargo checksums for ${1} ..."
-
-	sed -i \
-		-e 's/\("files":{\)[^}]*/\1/' \
-		"${S}"/third_party/rust/${1}/.cargo-checksum.json \
-		|| die
-}
-
-moz_install_xpi() {
-	debug-print-function ${FUNCNAME} "$@"
-
-	if [[ ${#} -lt 2 ]] ; then
-		die "${FUNCNAME} requires at least two arguments"
-	fi
-
-	local DESTDIR=${1}
-	shift
-
-	insinto "${DESTDIR}"
-
-	local emid xpi_file xpi_tmp_dir
-	for xpi_file in "${@}" ; do
-		emid=
-		xpi_tmp_dir=$(mktemp -d --tmpdir="${T}")
-
-		# Unpack XPI
-		unzip -qq "${xpi_file}" -d "${xpi_tmp_dir}" || die
-
-		# Determine extension ID
-		if [[ -f "${xpi_tmp_dir}/install.rdf" ]] ; then
-			emid=$(sed -n -e '/install-manifest/,$ { /em:id/!d; s/.*[\">]\([^\"<>]*\)[\"<].*/\1/; p; q }' "${xpi_tmp_dir}/install.rdf")
-			[[ -z "${emid}" ]] && die "failed to determine extension id from install.rdf"
-		elif [[ -f "${xpi_tmp_dir}/manifest.json" ]] ; then
-			emid=$(sed -n -e 's/.*"id": "\([^"]*\)".*/\1/p' "${xpi_tmp_dir}/manifest.json")
-			[[ -z "${emid}" ]] && die "failed to determine extension id from manifest.json"
-		else
-			die "failed to determine extension id"
-		fi
-
-		einfo "Installing ${emid}.xpi into ${ED}${DESTDIR} ..."
-		newins "${xpi_file}" "${emid}.xpi"
-	done
-}
-
-mozconfig_add_options_ac() {
-	debug-print-function ${FUNCNAME} "$@"
-
-	if [[ ${#} -lt 2 ]] ; then
-		die "${FUNCNAME} requires at least two arguments"
-	fi
-
-	local reason=${1}
-	shift
-
-	local option
-	for option in ${@} ; do
-		echo "ac_add_options ${option} # ${reason}" >>${MOZCONFIG}
-	done
-}
-
-mozconfig_add_options_mk() {
-	debug-print-function ${FUNCNAME} "$@"
-
-	if [[ ${#} -lt 2 ]] ; then
-		die "${FUNCNAME} requires at least two arguments"
-	fi
-
-	local reason=${1}
-	shift
-
-	local option
-	for option in ${@} ; do
-		echo "mk_add_options ${option} # ${reason}" >>${MOZCONFIG}
-	done
-}
-
-mozconfig_use_enable() {
-	debug-print-function ${FUNCNAME} "$@"
-
-	if [[ ${#} -lt 1 ]] ; then
-		die "${FUNCNAME} requires at least one arguments"
-	fi
-
-	local flag=$(use_enable "${@}")
-	mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}"
-}
-
-mozconfig_use_with() {
-	debug-print-function ${FUNCNAME} "$@"
-
-	if [[ ${#} -lt 1 ]] ; then
-		die "${FUNCNAME} requires at least one arguments"
-	fi
-
-	local flag=$(use_with "${@}")
-	mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}"
-}
-
-pkg_pretend() {
-	if [[ ${MERGE_TYPE} != binary ]] ; then
-		if use pgo ; then
-			if ! has usersandbox $FEATURES ; then
-				die "You must enable usersandbox as X server can not run as root!"
-			fi
-		fi
-
-		# Ensure we have enough disk space to compile
-		if use pgo || use lto || use debug ; then
-			CHECKREQS_DISK_BUILD="13500M"
-		else
-			CHECKREQS_DISK_BUILD="6600M"
-		fi
-
-		check-reqs_pkg_pretend
-	fi
-}
-
-pkg_setup() {
-	if [[ ${MERGE_TYPE} != binary ]] ; then
-		if use pgo ; then
-			if ! has userpriv ${FEATURES} ; then
-				eerror "Building ${PN} with USE=pgo and FEATURES=-userpriv is not supported!"
-			fi
-		fi
-
-		# Ensure we have enough disk space to compile
-		if use pgo || use lto || use debug ; then
-			CHECKREQS_DISK_BUILD="13500M"
-		else
-			CHECKREQS_DISK_BUILD="6400M"
-		fi
-
-		check-reqs_pkg_setup
-
-		llvm_pkg_setup
-
-		if use clang && use lto ; then
-			local version_lld=$(ld.lld --version 2>/dev/null | awk '{ print $2 }')
-			[[ -n ${version_lld} ]] && version_lld=$(ver_cut 1 "${version_lld}")
-			[[ -z ${version_lld} ]] && die "Failed to read ld.lld version!"
-
-			local version_llvm_rust=$(rustc -Vv 2>/dev/null | grep -F -- 'LLVM version:' | awk '{ print $3 }')
-			[[ -n ${version_llvm_rust} ]] && version_llvm_rust=$(ver_cut 1 "${version_llvm_rust}")
-			[[ -z ${version_llvm_rust} ]] && die "Failed to read used LLVM version from rustc!"
-
-			if ver_test "${version_lld}" -ne "${version_llvm_rust}" ; then
-				eerror "Rust is using LLVM version ${version_llvm_rust} but ld.lld version belongs to LLVM version ${version_lld}."
-				eerror "You will be unable to link ${CATEGORY}/${PN}. To proceed you have the following options:"
-				eerror "  - Manually switch rust version using 'eselect rust' to match used LLVM version"
-				eerror "  - Switch to dev-lang/rust[system-llvm] which will guarantee matching version"
-				eerror "  - Build ${CATEGORY}/${PN} without USE=lto"
-				eerror "  - Rebuild lld with llvm that was used to build rust (may need to rebuild the whole "
-				eerror "    llvm/clang/lld/rust chain depending on your @world updates)"
-				die "LLVM version used by Rust (${version_llvm_rust}) does not match with ld.lld version (${version_lld})!"
-			fi
-		fi
-
-		if ! use clang && [[ $(gcc-major-version) -eq 11 ]] \
-			&& ! has_version -b ">sys-devel/gcc-11.1.0:11" ; then
-			# bug 792705
-			eerror "Using GCC 11 to compile firefox is currently known to be broken (see bug #792705)."
-			die "Set USE=clang or select <gcc-11 to build ${CATEGORY}/${P}."
-		fi
-
-		python-any-r1_pkg_setup
-
-		# Avoid PGO profiling problems due to enviroment leakage
-		# These should *always* be cleaned up anyway
-		unset \
-			DBUS_SESSION_BUS_ADDRESS \
-			DISPLAY \
-			ORBIT_SOCKETDIR \
-			SESSION_MANAGER \
-			XAUTHORITY \
-			XDG_CACHE_HOME \
-			XDG_SESSION_COOKIE
-
-		# Build system is using /proc/self/oom_score_adj, bug #604394
-		addpredict /proc/self/oom_score_adj
-
-		if use pgo ; then
-			# Allow access to GPU during PGO run
-			local ati_cards mesa_cards nvidia_cards render_cards
-			shopt -s nullglob
-
-			ati_cards=$(echo -n /dev/ati/card* | sed 's/ /:/g')
-			if [[ -n "${ati_cards}" ]] ; then
-				addpredict "${ati_cards}"
-			fi
-
-			mesa_cards=$(echo -n /dev/dri/card* | sed 's/ /:/g')
-			if [[ -n "${mesa_cards}" ]] ; then
-				addpredict "${mesa_cards}"
-			fi
-
-			nvidia_cards=$(echo -n /dev/nvidia* | sed 's/ /:/g')
-			if [[ -n "${nvidia_cards}" ]] ; then
-				addpredict "${nvidia_cards}"
-			fi
-
-			render_cards=$(echo -n /dev/dri/renderD128* | sed 's/ /:/g')
-			if [[ -n "${render_cards}" ]] ; then
-				addpredict "${render_cards}"
-			fi
-
-			shopt -u nullglob
-		fi
-
-		if ! mountpoint -q /dev/shm ; then
-			# If /dev/shm is not available, configure is known to fail with
-			# a traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py
-			ewarn "/dev/shm is not mounted -- expect build failures!"
-		fi
-
-		# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
-		# Note: These are for Gentoo Linux use ONLY. For your own distribution, please
-		# get your own set of keys.
-		if [[ -z "${MOZ_API_KEY_GOOGLE+set}" ]] ; then
-			MOZ_API_KEY_GOOGLE="AIzaSyDEAOvatFogGaPi0eTgsV_ZlEzx0ObmepsMzfAc"
-		fi
-
-		if [[ -z "${MOZ_API_KEY_LOCATION+set}" ]] ; then
-			MOZ_API_KEY_LOCATION="AIzaSyB2h2OuRgGaPicUgy5N-5hsZqiPW6sH3n_rptiQ"
-		fi
-
-		# Mozilla API keys (see https://location.services.mozilla.com/api)
-		# Note: These are for Gentoo Linux use ONLY. For your own distribution, please
-		# get your own set of keys.
-		if [[ -z "${MOZ_API_KEY_MOZILLA+set}" ]] ; then
-			MOZ_API_KEY_MOZILLA="edb3d487-3a84-46m0ap1e3-9dfd-92b5efaaa005"
-		fi
-
-		# Ensure we use C locale when building, bug #746215
-		export LC_ALL=C
-	fi
-
-	CONFIG_CHECK="~SECCOMP"
-	WARNING_SECCOMP="CONFIG_SECCOMP not set! This system will be unable to play DRM-protected content."
-	linux-info_pkg_setup
-}
-
-src_unpack() {
-	local _lp_dir="${WORKDIR}/language_packs"
-	local _src_file
-
-	if [[ ! -d "${_lp_dir}" ]] ; then
-		mkdir "${_lp_dir}" || die
-	fi
-
-	for _src_file in ${A} ; do
-		if [[ ${_src_file} == *.xpi ]]; then
-			cp "${DISTDIR}/${_src_file}" "${_lp_dir}" || die "Failed to copy '${_src_file}' to '${_lp_dir}'!"
-		else
-			unpack ${_src_file}
-		fi
-	done
-}
-
-src_prepare() {
-	use lto && rm -v "${WORKDIR}"/firefox-patches/*-LTO-Only-enable-LTO-*.patch
-	eapply "${WORKDIR}/firefox-patches"
-	# riscv support from https://github.com/makotokato/gecko-dev
-	eapply "${FILESDIR}/firefox-riscv64-support.patch"
-	# disable cargo-vet check in order to do ./mach vendor rust
-	# https://bugzilla.mozilla.org/show_bug.cgi?id=1787601
-	# skip check_macroassembler_style.py
-	eapply "${FILESDIR}/firefox-riscv64-hack.patch"
-
-	# Allow user to apply any additional patches without modifing ebuild
-	eapply_user
-
-	# Make cargo respect MAKEOPTS
-	export CARGO_BUILD_JOBS="$(makeopts_jobs)"
-
-	# Make LTO respect MAKEOPTS
-	sed -i \
-		-e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
-		"${S}"/build/moz.configure/lto-pgo.configure \
-		|| die "sed failed to set num_cores"
-
-	# Make ICU respect MAKEOPTS
-	sed -i \
-		-e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
-		"${S}"/intl/icu_sources_data.py \
-		|| die "sed failed to set num_cores"
-
-	# sed-in toolchain prefix
-	sed -i \
-		-e "s/objdump/${CHOST}-objdump/" \
-		"${S}"/python/mozbuild/mozbuild/configure/check_debug_ranges.py \
-		|| die "sed failed to set toolchain prefix"
-
-	sed -i \
-		-e 's/ccache_stats = None/return None/' \
-		"${S}"/python/mozbuild/mozbuild/controller/building.py \
-		|| die "sed failed to disable ccache stats call"
-
-	einfo "Removing pre-built binaries ..."
-	find "${S}"/third_party -type f \( -name '*.so' -o -name '*.o' \) -print -delete || die
-
-	# Clearing checksums where we have applied patches
-	moz_clear_vendor_checksums audioipc
-	moz_clear_vendor_checksums audioipc-client
-	moz_clear_vendor_checksums audioipc-server
-
-	# Create build dir
-	BUILD_DIR="${WORKDIR}/${PN}_build"
-	mkdir -p "${BUILD_DIR}" || die
-
-	# Write API keys to disk
-	echo -n "${MOZ_API_KEY_GOOGLE//gGaPi/}" > "${S}"/api-google.key || die
-	echo -n "${MOZ_API_KEY_LOCATION//gGaPi/}" > "${S}"/api-location.key || die
-	echo -n "${MOZ_API_KEY_MOZILLA//m0ap1/}" > "${S}"/api-mozilla.key || die
-
-	xdg_environment_reset
-}
-
-src_configure() {
-	# Show flags set at the beginning
-	einfo "Current BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
-	einfo "Current CFLAGS:\t\t${CFLAGS:-no value set}"
-	einfo "Current CXXFLAGS:\t\t${CXXFLAGS:-no value set}"
-	einfo "Current LDFLAGS:\t\t${LDFLAGS:-no value set}"
-	einfo "Current RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}"
-
-	local have_switched_compiler=
-	if use clang && ! tc-is-clang ; then
-		# Force clang
-		einfo "Enforcing the use of clang due to USE=clang ..."
-		have_switched_compiler=yes
-		AR=llvm-ar
-		AS=llvm-as
-		CC=${CHOST}-clang
-		CXX=${CHOST}-clang++
-		NM=llvm-nm
-		RANLIB=llvm-ranlib
-	elif ! use clang && ! tc-is-gcc ; then
-		# Force gcc
-		have_switched_compiler=yes
-		einfo "Enforcing the use of gcc due to USE=-clang ..."
-		AR=gcc-ar
-		CC=${CHOST}-gcc
-		CXX=${CHOST}-g++
-		NM=gcc-nm
-		RANLIB=gcc-ranlib
-	fi
-
-	if [[ -n "${have_switched_compiler}" ]] ; then
-		# Because we switched active compiler we have to ensure
-		# that no unsupported flags are set
-		strip-unsupported-flags
-	fi
-
-	# Ensure we use correct toolchain
-	export HOST_CC="$(tc-getBUILD_CC)"
-	export HOST_CXX="$(tc-getBUILD_CXX)"
-	tc-export CC CXX LD AR NM OBJDUMP RANLIB PKG_CONFIG
-
-	# Pass the correct toolchain paths through cbindgen
-	if tc-is-cross-compiler ; then
-		export BINDGEN_CFLAGS="${SYSROOT:+--sysroot=${ESYSROOT}} --target=${CHOST} ${BINDGEN_CFLAGS-}"
-	fi
-
-	# Set MOZILLA_FIVE_HOME
-	export MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${PN}"
-
-	# python/mach/mach/mixin/process.py fails to detect SHELL
-	export SHELL="${EPREFIX}/bin/bash"
-
-	# Set state path
-	export MOZBUILD_STATE_PATH="${BUILD_DIR}"
-
-	# Set MOZCONFIG
-	export MOZCONFIG="${S}/.mozconfig"
-
-	# Initialize MOZCONFIG
-	mozconfig_add_options_ac '' --enable-application=browser
-
-	# Set Gentoo defaults
-	export MOZILLA_OFFICIAL=1
-
-	mozconfig_add_options_ac 'Gentoo default' \
-		--allow-addon-sideload \
-		--disable-cargo-incremental \
-		--disable-crashreporter \
-		--disable-gpsd \
-		--disable-install-strip \
-		--disable-parental-controls \
-		--disable-strip \
-		--disable-updater \
-		--enable-negotiateauth \
-		--enable-new-pass-manager \
-		--enable-official-branding \
-		--enable-release \
-		--enable-system-ffi \
-		--enable-system-pixman \
-		--host="${CBUILD:-${CHOST}}" \
-		--libdir="${EPREFIX}/usr/$(get_libdir)" \
-		--prefix="${EPREFIX}/usr" \
-		--target="${CHOST}" \
-		--without-ccache \
-		--without-wasm-sandboxed-libraries \
-		--with-intl-api \
-		--with-libclang-path="$(llvm-config --libdir)" \
-		--with-system-nspr \
-		--with-system-nss \
-		--with-system-zlib \
-		--with-toolchain-prefix="${CHOST}-" \
-		--with-unsigned-addon-scopes=app,system \
-		--x-includes="${ESYSROOT}/usr/include" \
-		--x-libraries="${ESYSROOT}/usr/$(get_libdir)"
-
-	# Set update channel
-	local update_channel=release
-	[[ -n ${MOZ_ESR} ]] && update_channel=esr
-	mozconfig_add_options_ac '' --update-channel=${update_channel}
-
-	if ! use x86 && [[ ${CHOST} != armv*h* ]] ; then
-		mozconfig_add_options_ac '' --enable-rust-simd
-	fi
-
-	# For future keywording: This is currently (97.0) only supported on:
-	# amd64, arm, arm64 & x86.
-	# Might want to flip the logic around if Firefox is to support more arches.
-	if use ppc64 || use riscv; then
-		mozconfig_add_options_ac '' --disable-sandbox
-	else
-		mozconfig_add_options_ac '' --enable-sandbox
-	fi
-	if use riscv; then
-		mozconfig_add_options_ac '' --disable-jit
-	fi
-
-	if [[ -s "${S}/api-google.key" ]] ; then
-		local key_origin="Gentoo default"
-		if [[ $(cat "${S}/api-google.key" | md5sum | awk '{ print $1 }') != 709560c02f94b41f9ad2c49207be6c54 ]] ; then
-			key_origin="User value"
-		fi
-
-		mozconfig_add_options_ac "${key_origin}" \
-			--with-google-safebrowsing-api-keyfile="${S}/api-google.key"
-	else
-		einfo "Building without Google API key ..."
-	fi
-
-	if [[ -s "${S}/api-location.key" ]] ; then
-		local key_origin="Gentoo default"
-		if [[ $(cat "${S}/api-location.key" | md5sum | awk '{ print $1 }') != ffb7895e35dedf832eb1c5d420ac7420 ]] ; then
-			key_origin="User value"
-		fi
-
-		mozconfig_add_options_ac "${key_origin}" \
-			--with-google-location-service-api-keyfile="${S}/api-location.key"
-	else
-		einfo "Building without Location API key ..."
-	fi
-
-	if [[ -s "${S}/api-mozilla.key" ]] ; then
-		local key_origin="Gentoo default"
-		if [[ $(cat "${S}/api-mozilla.key" | md5sum | awk '{ print $1 }') != 3927726e9442a8e8fa0e46ccc39caa27 ]] ; then
-			key_origin="User value"
-		fi
-
-		mozconfig_add_options_ac "${key_origin}" \
-			--with-mozilla-api-keyfile="${S}/api-mozilla.key"
-	else
-		einfo "Building without Mozilla API key ..."
-	fi
-
-	mozconfig_use_with system-av1
-	mozconfig_use_with system-harfbuzz
-	mozconfig_use_with system-harfbuzz system-graphite2
-	mozconfig_use_with system-icu
-	mozconfig_use_with system-jpeg
-	mozconfig_use_with system-libevent
-	mozconfig_use_with system-libvpx
-	mozconfig_use_with system-png
-	mozconfig_use_with system-webp
-
-	mozconfig_use_enable dbus
-	mozconfig_use_enable libproxy
-
-	use eme-free && mozconfig_add_options_ac '+eme-free' --disable-eme
-
-	mozconfig_use_enable geckodriver
-
-	if use hardened ; then
-		mozconfig_add_options_ac "+hardened" --enable-hardening
-		append-ldflags "-Wl,-z,relro -Wl,-z,now"
-	fi
-
-	local myaudiobackends=""
-	use jack && myaudiobackends+="jack,"
-	use sndio && myaudiobackends+="sndio,"
-	use pulseaudio && myaudiobackends+="pulseaudio,"
-	! use pulseaudio && myaudiobackends+="alsa,"
-
-	mozconfig_add_options_ac '--enable-audio-backends' --enable-audio-backends="${myaudiobackends::-1}"
-
-	mozconfig_use_enable wifi necko-wifi
-
-	if use X && use wayland ; then
-		mozconfig_add_options_ac '+x11+wayland' --enable-default-toolkit=cairo-gtk3-x11-wayland
-	elif ! use X && use wayland ; then
-		mozconfig_add_options_ac '+wayland' --enable-default-toolkit=cairo-gtk3-wayland-only
-	else
-		mozconfig_add_options_ac '+x11' --enable-default-toolkit=cairo-gtk3
-	fi
-
-	if use lto ; then
-		if use clang ; then
-			# Upstream only supports lld when using clang
-			mozconfig_add_options_ac "forcing ld=lld due to USE=clang and USE=lto" --enable-linker=lld
-
-			mozconfig_add_options_ac '+lto' --enable-lto=cross
-
-		else
-			# ThinLTO is currently broken, see bmo#1644409
-			mozconfig_add_options_ac '+lto' --enable-lto=full
-			mozconfig_add_options_ac "linker is set to bfd" --enable-linker=bfd
-		fi
-
-		if use pgo ; then
-			mozconfig_add_options_ac '+pgo' MOZ_PGO=1
-
-			if use clang ; then
-				# Used in build/pgo/profileserver.py
-				export LLVM_PROFDATA="llvm-profdata"
-			fi
-		fi
-	else
-		# Avoid auto-magic on linker
-		if use clang ; then
-			# This is upstream's default
-			mozconfig_add_options_ac "forcing ld=lld due to USE=clang" --enable-linker=lld
-		else
-			mozconfig_add_options_ac "linker is set to bfd" --enable-linker=bfd
-		fi
-	fi
-
-	# LTO flag was handled via configure
-	filter-flags '-flto*'
-
-	mozconfig_use_enable debug
-	if use debug ; then
-		mozconfig_add_options_ac '+debug' --disable-optimize
-	else
-		if is-flag '-g*' ; then
-			if use clang ; then
-				mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols=$(get-flag '-g*')
-			else
-				mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols
-			fi
-		else
-			mozconfig_add_options_ac 'Gentoo default' --disable-debug-symbols
-		fi
-
-		if is-flag '-O0' ; then
-			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O0
-		elif is-flag '-O4' ; then
-			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O4
-		elif is-flag '-O3' ; then
-			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O3
-		elif is-flag '-O1' ; then
-			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O1
-		elif is-flag '-Os' ; then
-			mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-Os
-		else
-			mozconfig_add_options_ac "Gentoo default" --enable-optimize=-O2
-		fi
-	fi
-
-	# Debug flag was handled via configure
-	filter-flags '-g*'
-
-	# Optimization flag was handled via configure
-	filter-flags '-O*'
-
-	# Modifications to better support ARM, bug #553364
-	if use cpu_flags_arm_neon ; then
-		mozconfig_add_options_ac '+cpu_flags_arm_neon' --with-fpu=neon
-
-		if ! tc-is-clang ; then
-			# thumb options aren't supported when using clang, bug 666966
-			mozconfig_add_options_ac '+cpu_flags_arm_neon' \
-				--with-thumb=yes \
-				--with-thumb-interwork=no
-		fi
-	fi
-
-	if [[ ${CHOST} == armv*h* ]] ; then
-		mozconfig_add_options_ac 'CHOST=armv*h*' --with-float-abi=hard
-
-		if ! use system-libvpx ; then
-			sed -i \
-				-e "s|softfp|hard|" \
-				"${S}"/media/libvpx/moz.build \
-				|| die
-		fi
-	fi
-
-	if use clang ; then
-		# https://bugzilla.mozilla.org/show_bug.cgi?id=1482204
-		# https://bugzilla.mozilla.org/show_bug.cgi?id=1483822
-		# toolkit/moz.configure Elfhack section: target.cpu in ('arm', 'x86', 'x86_64')
-		local disable_elf_hack=
-		if use amd64 ; then
-			disable_elf_hack=yes
-		elif use x86 ; then
-			disable_elf_hack=yes
-		elif use arm ; then
-			disable_elf_hack=yes
-		fi
-
-		if [[ -n ${disable_elf_hack} ]] ; then
-			mozconfig_add_options_ac 'elf-hack is broken when using Clang' --disable-elf-hack
-		fi
-	elif tc-is-gcc ; then
-		if ver_test $(gcc-fullversion) -ge 10 ; then
-			einfo "Forcing -fno-tree-loop-vectorize to workaround GCC bug, see bug 758446 ..."
-			append-cxxflags -fno-tree-loop-vectorize
-		fi
-	fi
-
-	# Additional ARCH support
-	case "${ARCH}" in
-		arm)
-			# Reduce the memory requirements for linking
-			if use clang ; then
-				# Nothing to do
-				:;
-			elif use lto ; then
-				append-ldflags -Wl,--no-keep-memory
-			else
-				append-ldflags -Wl,--no-keep-memory -Wl,--reduce-memory-overheads
-			fi
-			;;
-	esac
-
-	if ! use elibc_glibc ; then
-		mozconfig_add_options_ac '!elibc_glibc' --disable-jemalloc
-	fi
-
-	# Allow elfhack to work in combination with unstripped binaries
-	# when they would normally be larger than 2GiB.
-	append-ldflags "-Wl,--compress-debug-sections=zlib"
-
-	# Make revdep-rebuild.sh happy; Also required for musl
-	append-ldflags -Wl,-rpath="${MOZILLA_FIVE_HOME}",--enable-new-dtags
-
-	# Pass $MAKEOPTS to build system
-	export MOZ_MAKE_FLAGS="${MAKEOPTS}"
-
-	# Use system's Python environment
-	PIP_NETWORK_INSTALL_RESTRICTED_VIRTUALENVS=mach
-
-	if use system-python-libs; then
-		export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="system"
-	else
-		export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none"
-	fi
-
-	# Disable notification when build system has finished
-	export MOZ_NOSPAM=1
-
-	# Portage sets XARGS environment variable to "xargs -r" by default which
-	# breaks build system's check_prog() function which doesn't support arguments
-	mozconfig_add_options_ac 'Gentoo default' "XARGS=${EPREFIX}/usr/bin/xargs"
-
-	# Set build dir
-	mozconfig_add_options_mk 'Gentoo default' "MOZ_OBJDIR=${BUILD_DIR}"
-
-	# Show flags we will use
-	einfo "Build BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
-	einfo "Build CFLAGS:\t\t${CFLAGS:-no value set}"
-	einfo "Build CXXFLAGS:\t\t${CXXFLAGS:-no value set}"
-	einfo "Build LDFLAGS:\t\t${LDFLAGS:-no value set}"
-	einfo "Build RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}"
-
-	# Handle EXTRA_CONF and show summary
-	local ac opt hash reason
-
-	# Apply EXTRA_ECONF entries to $MOZCONFIG
-	if [[ -n ${EXTRA_ECONF} ]] ; then
-		IFS=\! read -a ac <<<${EXTRA_ECONF// --/\!}
-		for opt in "${ac[@]}"; do
-			mozconfig_add_options_ac "EXTRA_ECONF" --${opt#--}
-		done
-	fi
-
-	echo
-	echo "=========================================================="
-	echo "Building ${PF} with the following configuration"
-	grep ^ac_add_options "${MOZCONFIG}" | while read ac opt hash reason; do
-		[[ -z ${hash} || ${hash} == \# ]] \
-			|| die "error reading mozconfig: ${ac} ${opt} ${hash} ${reason}"
-		printf "    %-30s  %s\n" "${opt}" "${reason:-mozilla.org default}"
-	done
-	echo "=========================================================="
-	echo
-
-	# To avoid huge patches of rust library (~200MB), we have to download on the fly
-	einfo "riscv overlay: Performing ./mach vendor rust to update third party libs"
-	./mach vendor rust --ignore-modified || die
-	./mach configure || die
-}
-
-src_compile() {
-	local virtx_cmd=
-
-	if use pgo ; then
-		virtx_cmd=virtx
-
-		# Reset and cleanup environment variables used by GNOME/XDG
-		gnome2_environment_reset
-
-		addpredict /root
-	fi
-
-	if ! use X && use wayland; then
-		local -x GDK_BACKEND=wayland
-	else
-		local -x GDK_BACKEND=x11
-	fi
-
-	${virtx_cmd} ./mach build --verbose \
-		|| die
-}
-
-src_install() {
-	# xpcshell is getting called during install
-	pax-mark m \
-		"${BUILD_DIR}"/dist/bin/xpcshell \
-		"${BUILD_DIR}"/dist/bin/${PN} \
-		"${BUILD_DIR}"/dist/bin/plugin-container
-
-	DESTDIR="${D}" ./mach install || die
-
-	# Upstream cannot ship symlink but we can (bmo#658850)
-	rm "${ED}${MOZILLA_FIVE_HOME}/${PN}-bin" || die
-	dosym ${PN} ${MOZILLA_FIVE_HOME}/${PN}-bin
-
-	# Don't install llvm-symbolizer from sys-devel/llvm package
-	if [[ -f "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" ]] ; then
-		rm -v "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" || die
-	fi
-
-	# Install policy (currently only used to disable application updates)
-	insinto "${MOZILLA_FIVE_HOME}/distribution"
-	newins "${FILESDIR}"/distribution.ini distribution.ini
-	newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
-
-	# Install system-wide preferences
-	local PREFS_DIR="${MOZILLA_FIVE_HOME}/browser/defaults/preferences"
-	insinto "${PREFS_DIR}"
-	newins "${FILESDIR}"/gentoo-default-prefs.js gentoo-prefs.js
-
-	local GENTOO_PREFS="${ED}${PREFS_DIR}/gentoo-prefs.js"
-
-	# Set dictionary path to use system hunspell
-	cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set spellchecker.dictionary_path pref"
-	pref("spellchecker.dictionary_path",       "${EPREFIX}/usr/share/myspell");
-	EOF
-
-	# Force hwaccel prefs if USE=hwaccel is enabled
-	if use hwaccel ; then
-		cat "${FILESDIR}"/gentoo-hwaccel-prefs.js-r2 \
-		>>"${GENTOO_PREFS}" \
-		|| die "failed to add prefs to force hardware-accelerated rendering to all-gentoo.js"
-
-		if use wayland; then
-			cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set hwaccel wayland prefs"
-			pref("gfx.x11-egl.force-enabled",          false);
-			EOF
-		else
-			cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set hwaccel x11 prefs"
-			pref("gfx.x11-egl.force-enabled",          true);
-			EOF
-		fi
-	fi
-
-	if ! use gmp-autoupdate ; then
-		local plugin
-		for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do
-			einfo "Disabling auto-update for ${plugin} plugin ..."
-			cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to disable autoupdate for ${plugin} media plugin"
-			pref("media.${plugin}.autoupdate",   false);
-			EOF
-		done
-	fi
-
-	# Force the graphite pref if USE=system-harfbuzz is enabled, since the pref cannot disable it
-	if use system-harfbuzz ; then
-		cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set gfx.font_rendering.graphite.enabled pref"
-		sticky_pref("gfx.font_rendering.graphite.enabled", true);
-		EOF
-	fi
-
-	# Install language packs
-	local langpacks=( $(find "${WORKDIR}/language_packs" -type f -name '*.xpi') )
-	if [[ -n "${langpacks}" ]] ; then
-		moz_install_xpi "${MOZILLA_FIVE_HOME}/distribution/extensions" "${langpacks[@]}"
-	fi
-
-	# Install geckodriver
-	if use geckodriver ; then
-		einfo "Installing geckodriver into ${ED}${MOZILLA_FIVE_HOME} ..."
-		pax-mark m "${BUILD_DIR}"/dist/bin/geckodriver
-		exeinto "${MOZILLA_FIVE_HOME}"
-		doexe "${BUILD_DIR}"/dist/bin/geckodriver
-
-		dosym ${MOZILLA_FIVE_HOME}/geckodriver /usr/bin/geckodriver
-	fi
-
-	# Install icons
-	local icon_srcdir="${S}/browser/branding/official"
-	local icon_symbolic_file="${FILESDIR}/icon/firefox-symbolic.svg"
-
-	insinto /usr/share/icons/hicolor/symbolic/apps
-	newins "${icon_symbolic_file}" ${PN}-symbolic.svg
-
-	local icon size
-	for icon in "${icon_srcdir}"/default*.png ; do
-		size=${icon%.png}
-		size=${size##*/default}
-
-		if [[ ${size} -eq 48 ]] ; then
-			newicon "${icon}" ${PN}.png
-		fi
-
-		newicon -s ${size} "${icon}" ${PN}.png
-	done
-
-	# Install menu
-	local app_name="Mozilla ${MOZ_PN^}"
-	local desktop_file="${FILESDIR}/icon/${PN}-r3.desktop"
-	local desktop_filename="${PN}.desktop"
-	local exec_command="${PN}"
-	local icon="${PN}"
-	local use_wayland="false"
-
-	if use wayland ; then
-		use_wayland="true"
-	fi
-
-	cp "${desktop_file}" "${WORKDIR}/${PN}.desktop-template" || die
-
-	sed -i \
-		-e "s:@NAME@:${app_name}:" \
-		-e "s:@EXEC@:${exec_command}:" \
-		-e "s:@ICON@:${icon}:" \
-		"${WORKDIR}/${PN}.desktop-template" \
-		|| die
-
-	newmenu "${WORKDIR}/${PN}.desktop-template" "${desktop_filename}"
-
-	rm "${WORKDIR}/${PN}.desktop-template" || die
-
-	# Install wrapper script
-	[[ -f "${ED}/usr/bin/${PN}" ]] && rm "${ED}/usr/bin/${PN}"
-	newbin "${FILESDIR}/${PN}-r1.sh" ${PN}
-
-	# Update wrapper
-	sed -i \
-		-e "s:@PREFIX@:${EPREFIX}/usr:" \
-		-e "s:@MOZ_FIVE_HOME@:${MOZILLA_FIVE_HOME}:" \
-		-e "s:@APULSELIB_DIR@:${apulselib}:" \
-		-e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \
-		"${ED}/usr/bin/${PN}" \
-		|| die
-}
-
-pkg_preinst() {
-	xdg_pkg_preinst
-
-	# If the apulse libs are available in MOZILLA_FIVE_HOME then apulse
-	# does not need to be forced into the LD_LIBRARY_PATH
-	if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then
-		einfo "APULSE found; Generating library symlinks for sound support ..."
-		local lib
-		pushd "${ED}${MOZILLA_FIVE_HOME}" &>/dev/null || die
-		for lib in ../apulse/libpulse{.so{,.0},-simple.so{,.0}} ; do
-			# A quickpkg rolled by hand will grab symlinks as part of the package,
-			# so we need to avoid creating them if they already exist.
-			if [[ ! -L ${lib##*/} ]] ; then
-				ln -s "${lib}" ${lib##*/} || die
-			fi
-		done
-		popd &>/dev/null || die
-	fi
-}
-
-pkg_postinst() {
-	xdg_pkg_postinst
-
-	if ! use gmp-autoupdate ; then
-		elog "USE='-gmp-autoupdate' has disabled the following plugins from updating or"
-		elog "installing into new profiles:"
-		local plugin
-		for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do
-			elog "\t ${plugin}"
-		done
-		elog
-	fi
-
-	if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then
-		elog "Apulse was detected at merge time on this system and so it will always be"
-		elog "used for sound.  If you wish to use pulseaudio instead please unmerge"
-		elog "media-sound/apulse."
-		elog
-	fi
-
-	local show_doh_information
-	local show_normandy_information
-	local show_shortcut_information
-
-	if [[ -z "${REPLACING_VERSIONS}" ]] ; then
-		# New install; Tell user that DoH is disabled by default
-		show_doh_information=yes
-		show_normandy_information=yes
-		show_shortcut_information=no
-	else
-		local replacing_version
-		for replacing_version in ${REPLACING_VERSIONS} ; do
-			if ver_test "${replacing_version}" -lt 91.0 ; then
-				# Tell user that we no longer install a shortcut
-				# per supported display protocol
-				show_shortcut_information=yes
-			fi
-		done
-	fi
-
-	if [[ -n "${show_doh_information}" ]] ; then
-		elog
-		elog "Note regarding Trusted Recursive Resolver aka DNS-over-HTTPS (DoH):"
-		elog "Due to privacy concerns (encrypting DNS might be a good thing, sending all"
-		elog "DNS traffic to Cloudflare by default is not a good idea and applications"
-		elog "should respect OS configured settings), \"network.trr.mode\" was set to 5"
-		elog "(\"Off by choice\") by default."
-		elog "You can enable DNS-over-HTTPS in ${PN^}'s preferences."
-	fi
-
-	# bug 713782
-	if [[ -n "${show_normandy_information}" ]] ; then
-		elog
-		elog "Upstream operates a service named Normandy which allows Mozilla to"
-		elog "push changes for default settings or even install new add-ons remotely."
-		elog "While this can be useful to address problems like 'Armagadd-on 2.0' or"
-		elog "revert previous decisions to disable TLS 1.0/1.1, privacy and security"
-		elog "concerns prevail, which is why we have switched off the use of this"
-		elog "service by default."
-		elog
-		elog "To re-enable this service set"
-		elog
-		elog "    app.normandy.enabled=true"
-		elog
-		elog "in about:config."
-	fi
-
-	if [[ -n "${show_shortcut_information}" ]] ; then
-		elog
-		elog "Since ${PN}-91.0 we no longer install multiple shortcuts for"
-		elog "each supported display protocol.  Instead we will only install"
-		elog "one generic Mozilla ${PN^} shortcut."
-		elog "If you still want to be able to select between running Mozilla ${PN^}"
-		elog "on X11 or Wayland, you have to re-create these shortcuts on your own."
-	fi
-
-	# bug 835078
-	if use hwaccel && has_version "x11-drivers/xf86-video-nouveau"; then
-		ewarn "You have nouveau drivers installed in your system and 'hwaccel' "
-		ewarn "enabled for Firefox. Nouveau / your GPU might not support the "
-		ewarn "required EGL, so either disable 'hwaccel' or try the workaround "
-		ewarn "explained in https://bugs.gentoo.org/835078#c5 if Firefox crashes."
-	fi
-
-	elog
-	elog "Unfortunately Firefox-100.0 breaks compatibility with some sites using "
-	elog "useragent checks. To temporarily fix this, enter about:config and modify "
-	elog "network.http.useragent.forceVersion preference to \"99\"."
-	elog "Or install an addon to change your useragent."
-	elog "See: https://support.mozilla.org/en-US/kb/difficulties-opening-or-using-website-firefox-100"
-	elog
-}

diff --git a/www-client/firefox/metadata.xml b/www-client/firefox/metadata.xml
deleted file mode 100644
index ac687a3..0000000
--- a/www-client/firefox/metadata.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
-<pkgmetadata>
-<maintainer type="project">
-	<email>mozilla@gentoo.org</email>
-	<name>Gentoo Mozilla Team</name>
-</maintainer>
-<use>
-	<flag name="clang">Use Clang compiler instead of GCC</flag>
-	<flag name="eme-free">Disable EME (DRM plugin) cabability at build time</flag>
-	<flag name="geckodriver">Enable WebDriver support</flag>
-	<flag name="gmp-autoupdate">Allow Gecko Media Plugins (binary blobs) to be automatically
-		downloaded and kept up-to-date in user profiles</flag>
-	<flag name="hwaccel">Force-enable hardware-accelerated rendering (Mozilla bug 594876)</flag>
-	<flag name="lto">Enable Link Time Optimization (LTO). Requires Gold linker when using GCC
-		or LDD linker when using Clang</flag>
-	<flag name="openh264">Use <pkg>media-libs/openh264</pkg> for H.264 support
-		instead of downloading binary blob from Mozilla at runtime</flag>
-	<flag name="pgo">Add support for profile-guided optimization using gcc-4.5,
-		for faster binaries. This option will double the compile time.</flag>
-	<flag name="screencast">Enable support for remote desktop and screen cast using <pkg>media-video/pipewire</pkg></flag>
-	<flag name="sndio">Enable support for the <pkg>media-sound/sndio</pkg> backend</flag>
-	<flag name="system-av1">Use the system-wide <pkg>media-libs/dav1d</pkg>
-		and <pkg>media-libs/libaom</pkg> library instead of bundled.</flag>
-	<flag name="system-harfbuzz">Use the system-wide <pkg>media-libs/harfbuzz</pkg>
-		and <pkg>media-gfx/graphite2</pkg> instead of bundled.</flag>
-	<flag name="system-icu">Use the system-wide <pkg>dev-libs/icu</pkg>
-		instead of bundled.</flag>
-	<flag name="system-jpeg">Use the system-wide <pkg>media-libs/libjpeg-turbo</pkg>
-		instead of bundled.</flag>
-	<flag name="system-libevent">Use the system-wide <pkg>dev-libs/libevent</pkg>
-		instead of bundled.</flag>
-	<flag name="system-libvpx">Use the system-wide <pkg>media-libs/libvpx</pkg>
-		instead of bundled.</flag>
-	<flag name="system-png">Use the system-wide <pkg>media-libs/libpng</pkg>
-		instead of bundled (requires APNG patches).</flag>
-	<flag name="system-webp">Use the system-wide <pkg>media-libs/libwebp</pkg>
-		instead of bundled.</flag>
-</use>
-</pkgmetadata>


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-04-08 21:16 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-20  2:14 [gentoo-commits] proj/riscv:master commit in: www-client/firefox/files/icon/, www-client/firefox/files/, www-client/firefox/ Yixun Lan
  -- strict thread matches above, loose matches on Subject: below --
2023-04-08 21:16 Yixun Lan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox