Compare commits

..

2254 Commits

Author SHA1 Message Date
af55f68d25 2025-10-27 nightly release (000f49551bfda0683d395e1fe67f53cfb785868f) 2025-10-27 07:36:03 +00:00
fc9dd3487d 2025-10-26 nightly release (cdb60e44eb528bf02c6bb2d7e384298283e755ca) 2025-10-26 07:34:09 +00:00
af360b15da 2025-10-25 nightly release (b31bad1b8f1331bf43d47f46602cf6141db56844) 2025-10-25 07:34:15 +00:00
e5cabbf5f8 2025-10-24 nightly release (c12293dcbea3d9e9c5fade8e4c838f8a57c300e7) 2025-10-24 07:34:52 +00:00
958cc1742e 2025-10-23 nightly release (fb277a59167031883cc42249ed8fe869f39bd5ed) 2025-10-23 07:35:16 +00:00
72d577ba18 2025-10-22 nightly release (5211f4c1088f564cb15146e41bc592b7cf1824af) 2025-10-22 07:35:41 +00:00
94549de0a5 2025-10-21 nightly release (0e083942ccd98c5a2d9386f0b2c4bbc901be40ef) 2025-10-21 07:35:38 +00:00
427bf59f34 2025-10-20 nightly release (61d9a5180e44e43c2fe0394916688d756ea99da2) 2025-10-20 07:35:28 +00:00
f2b29280ef 2025-10-19 nightly release (c4f6619330bdac5bf4addb9070ecb42994202e1f) 2025-10-19 07:34:02 +00:00
92ae61a1ed 2025-10-18 nightly release (f510d0dbc0108a90c4b0275eb761bf189ff7a7d2) 2025-10-18 18:52:37 +00:00
411066f7cf 2025-10-18 nightly release (fe80f03726a7a50439be063327b67c7fba6279b2) 2025-10-18 07:34:05 +00:00
79a37055e7 2025-10-17 nightly release (556fc09a9f67f24ca5591ec049c5d0c347c5f62a) 2025-10-17 07:34:42 +00:00
0dfcb1a118 2025-10-16 nightly release (003dd130730993eedc302f769b7b653016ab6450) 2025-10-16 07:35:10 +00:00
0fec8d0539 2025-10-15 nightly release (e6f766c7d750d40603eee3f66c5915bac606b3ea) 2025-10-15 07:35:42 +00:00
89cf1adaf0 2025-10-14 nightly release (3a110c9bb209ccd690986d1593b44d261c1174a5) 2025-10-14 07:35:19 +00:00
40c3219a9e 2025-10-13 nightly release (3a110c9bb209ccd690986d1593b44d261c1174a5) 2025-10-13 07:35:26 +00:00
8d7cc00898 2025-10-12 nightly release (4f8a986b8feb4a171b8a68a2a3664275ec54a75f) 2025-10-12 07:33:57 +00:00
41aa60b096 2025-10-11 nightly release (12d7cc5cd3da00094c5801aff4c77550e2a59528) 2025-10-11 07:34:06 +00:00
a96cef0b4d 2025-10-10 nightly release (a57a14868dcfd9dabf9bd19b6b11f31967c80c87) 2025-10-10 07:34:21 +00:00
7d06d03434 2025-10-09 nightly release (7a1ead755f2e2abe8be49a7a0fb88b6b13973147) 2025-10-09 07:34:26 +00:00
f1efb72466 2025-10-08 nightly release (608792153f42254d2d2b5a87d524807a0c2724f1) 2025-10-08 07:34:27 +00:00
8fab07c5ca 2025-10-07 nightly release (bcd96cc6ff798281e66aabef6ce72542fdc97c7a) 2025-10-07 07:34:18 +00:00
39cdb9bef4 2025-10-06 nightly release (9fff8155c362da777e7ce31b85fb2dc7cfced2d5) 2025-10-06 07:34:40 +00:00
b8d25c1f42 2025-10-05 nightly release (cf0a00d4f38775e5a82a166e367f40383c606963) 2025-10-05 07:34:00 +00:00
cf9d09490c 2025-10-04 nightly release (9d1ab4f4bb508a72c7f549f0b5219c4601944ba1) 2025-10-04 07:33:56 +00:00
d1da98fe75 2025-10-03 nightly release (d1cbb74fb16406488a174832e1b58b7c242f418d) 2025-10-03 07:34:23 +00:00
d3d23546a3 2025-10-02 nightly release (144378615a5a2b347e39c6376cba7d75f7a82926) 2025-10-02 07:34:04 +00:00
8d091f3460 2025-10-01 nightly release (e30f01b5b569c0a6043774ee096d9d0bca231c93) 2025-10-01 07:35:14 +00:00
23acabb207 2025-09-30 nightly release (0b0ed6fd335dddccaf1b7212a785808c38cf98a1) 2025-09-30 07:35:13 +00:00
e86844ce4c 2025-09-29 nightly release (352197c50886c5a3b5b5e7ab86eba52548354d5c) 2025-09-29 07:35:06 +00:00
a5b10a3c27 2025-09-28 nightly release (3059b080128a0d13760f5e3ed9bf226c8c1a3ba5) 2025-09-28 07:33:49 +00:00
48f35f8940 2025-09-27 nightly release (9dac6437da12ef636139b7ae515c10617ffed528) 2025-09-27 07:33:53 +00:00
f64285495c 2025-09-26 nightly release (67cc0e0ac9fa009cbe6bd4d7852b39a579e92282) 2025-09-26 07:34:55 +00:00
337ce5ab49 2025-09-25 nightly release (ad2f7315ca66b42497047bb7951f696b50f1e81b) 2025-09-25 07:34:40 +00:00
5e8f2b0e21 2025-09-24 nightly release (d746b987d8239595438b9dbd0f96ec6a4fed4653) 2025-09-24 07:34:48 +00:00
6ba37938af 2025-09-23 nightly release (8f30a8dc47d61b0110f5797cad97040b1a58e6a0) 2025-09-23 07:35:01 +00:00
3ac0051187 2025-09-22 nightly release (0b59492853b7347ead6b71f52c76e7ac2836ea27) 2025-09-22 07:35:17 +00:00
e77b99230a 2025-09-21 nightly release (97eb7a281dab3d0454d72da1c72d4993a0b59a43) 2025-09-21 07:33:53 +00:00
d60c6e4a06 2025-09-20 nightly release (a31acf32bd18e115df910002aef42baf7a9b4a33) 2025-09-20 07:34:03 +00:00
2f25275aa3 2025-09-19 nightly release (04842ac2b013daf3029145d785b3805dfd3129a3) 2025-09-19 07:34:05 +00:00
a701395da4 2025-09-18 nightly release (13304401dfaab91a5f6311a09e77ed71914d6639) 2025-09-18 07:34:29 +00:00
5281945d57 2025-09-17 nightly release (65845d72917fc27cd89a88b067e7c8f44bc0c987) 2025-09-17 07:34:37 +00:00
f08d26d177 2025-09-16 nightly release (e900a274e5c7fd7f0c76a991ad182c635f807c83) 2025-09-16 07:34:24 +00:00
53a2908a10 2025-09-15 nightly release (76e5df3866f11712a3e6306bb0e5055c223c78f3) 2025-09-15 07:34:47 +00:00
8b8cd78b2b 2025-09-14 nightly release (f01bf0f64b2fb9a761d7a147f17a862561bc5baf) 2025-09-14 07:33:56 +00:00
27a4e36cf2 2025-09-13 nightly release (595e13feb71c10621271c30cb402906b6cc83e13) 2025-09-13 07:33:51 +00:00
616c50a126 2025-09-12 nightly release (ccb450b190a9c24fc53ca8f120bd1cdf36c312c2) 2025-09-12 07:33:59 +00:00
79440d8bcc 2025-09-11 nightly release (f654cff5663c1972172f150f529a587fc3c0d2c1) 2025-09-11 07:34:23 +00:00
75e7f49f9c 2025-09-10 nightly release (484c4093a87a3e6767e55ed553f95db8fc137442) 2025-09-10 07:34:16 +00:00
1ff17af8ec 2025-09-09 nightly release (a965f0979307d2d3894f00420e6d901c50f89d7a) 2025-09-09 07:34:30 +00:00
6d74d91e42 2025-09-08 nightly release (5babb4d5c04b1ff7ed5f96f7aea1898cd4faef5a) 2025-09-08 07:34:34 +00:00
d110794e53 2025-09-07 nightly release (4d4abec80f03cd8fdefe1d9cb3a60d3690cd777e) 2025-09-07 07:33:56 +00:00
b35c908b70 2025-09-06 nightly release (4d4abec80f03cd8fdefe1d9cb3a60d3690cd777e) 2025-09-06 07:34:07 +00:00
e018da741d 2025-09-05 nightly release (b67c41039835bd9b20b83cd6233e86baaa5f5dde) 2025-09-05 07:34:20 +00:00
6f6ce1a7ab 2025-09-04 nightly release (d636c181f9140a7b59be10b36eae23039fc2bb72) 2025-09-04 07:33:59 +00:00
aa0545ff8e 2025-09-03 nightly release (6737e2c996990024187ba620d2764f3b6f6add2c) 2025-09-03 07:34:25 +00:00
a0e3ca21ab 2025-09-02 nightly release (6737e2c996990024187ba620d2764f3b6f6add2c) 2025-09-02 07:35:23 +00:00
4ee895974d 2025-09-01 nightly release (9a665ca3c472384e9d722bddba79e5a7680f1abd) 2025-09-01 07:36:00 +00:00
2afb96c3e1 2025-08-31 nightly release (ad7b748686610e317e5c0cbbd523b7a6e3b8b51f) 2025-08-31 07:33:52 +00:00
5661512350 2025-08-30 nightly release (f6368e934e6bef84211f7db82c22e3623038e43f) 2025-08-30 07:33:55 +00:00
8296ac99be 2025-08-29 nightly release (d153af713e8bf825534b55d29fd7cfef6a3a5071) 2025-08-29 07:34:44 +00:00
e74f214c33 2025-08-28 nightly release (e9d34b2438d65d6d16109e2416f3698de20f85c2) 2025-08-28 07:34:51 +00:00
c6897fdd85 2025-08-27 nightly release (cd87f3029582cedb3b88747a3bd7d200b05c1138) 2025-08-27 07:34:42 +00:00
95dc3256f1 2025-08-26 nightly release (e34b6a01039df5d8940acdccd8d8989f3cd827aa) 2025-08-26 07:35:53 +00:00
dcc2abce2d 2025-08-25 nightly release (726dce3c944cbda16e54d3b15cdb4b6ced05af72) 2025-08-25 07:35:46 +00:00
7ad0c2909e 2025-08-24 nightly release (3e5b021f217a42ae55dc690083f67a28126808ed) 2025-08-24 07:34:16 +00:00
f853a0f43e 2025-08-23 nightly release (c2390087c34c964ef648addf43efb8c6a34e30c2) 2025-08-23 07:34:17 +00:00
d9a80aff4c 2025-08-22 nightly release (cc2b65a91ae7773d4ecf9a600dda48fc3e69aa8f) 2025-08-22 07:34:51 +00:00
22b0a727eb 2025-08-21 nightly release (39862acb2e320783245d2a03acfd1b14cae28038) 2025-08-21 07:36:29 +00:00
7956a1d1d0 2025-08-20 nightly release (2b62ef74208792c7c4bf923f872e54b5f384efc8) 2025-08-20 07:35:54 +00:00
0ce7e98ca9 2025-08-19 nightly release (58f9a3dd6391397e439c5f5075837e8f983735aa) 2025-08-19 07:35:31 +00:00
1fb85cc366 2025-08-18 nightly release (3ced4f1e6cb37d3470dcc540892dee08a6019cf8) 2025-08-18 07:37:41 +00:00
194cdb4509 2025-08-17 nightly release (8f434545c2e48c858d8b0d06db8f9642d6a87ad0) 2025-08-17 07:34:55 +00:00
32d1befbfe 2025-08-16 nightly release (b74c7cd335180a8ebcd5284f2909a73c9a87aa33) 2025-08-16 07:34:40 +00:00
0b5972dede 2025-08-15 nightly release (5b9ad951f8195865e13a44fe09a78bf95973f2fa) 2025-08-15 07:36:16 +00:00
a82d678c97 2025-08-14 nightly release (3faee0a6318afcbbbb48687009a459214910d820) 2025-08-14 07:36:46 +00:00
b81cea13b4 2025-08-13 nightly release (a354fa91e26b376d96385a2206c5ff5b42aa4600) 2025-08-13 07:37:16 +00:00
916ef1939b 2025-08-12 nightly release (bfc873d02ec413344717493e4175a902921359fd) 2025-08-12 07:36:51 +00:00
113daf02cb 2025-08-11 nightly release (e7152ff8a6a929a0db7f3f4a72a5b6d471769cd3) 2025-08-11 07:39:07 +00:00
dd1b1d0d2b 2025-08-10 nightly release (01f66d08d93365015f4af005a252f439c4d4013a) 2025-08-10 07:35:25 +00:00
86d99efdc4 2025-08-09 nightly release (5ed4f9177907fe403ec4c4499d0d0e9be6b68fcf) 2025-08-09 07:35:19 +00:00
d9796cf6b9 2025-08-08 nightly release (3fcd79e023da7156ac584992ebab29205d3b7881) 2025-08-08 07:39:27 +00:00
f9acb53318 2025-08-07 nightly release (2507ae63f293354170695fd20a5c5ce5f64e323d) 2025-08-07 07:39:26 +00:00
95ba6271fc 2025-08-06 nightly release (74a754aae98aabc2aca67e5edb41cc684fae9a82) 2025-08-06 07:39:45 +00:00
77bc90913a 2025-08-05 nightly release (efc4b460b3789d97b87d775f86c5f4ee8dfb5629) 2025-08-05 07:39:49 +00:00
af79a3aadc 2025-08-04 nightly release (978e3a91421e82fc95b34e75efd6324e3e89e755) 2025-08-04 07:41:32 +00:00
6f9445d860 2025-08-03 nightly release (38895c0ac26e4a18a6be0f88c3ec0c96f8077852) 2025-08-03 07:36:11 +00:00
8d0646ae44 2025-08-02 nightly release (e57a92734da09b96add98bc06693b62122c5df72) 2025-08-02 07:35:54 +00:00
b4f42c92a0 2025-08-01 nightly release (1ebcba4e1b1a5f20324cc94c2b92f260a0c1c0ab) 2025-08-01 07:39:37 +00:00
bb53f04097 2025-07-31 nightly release (3e5e0946152ca3500c0491927c26724f7f8ac244) 2025-07-31 07:38:40 +00:00
6e2a16b899 2025-07-30 nightly release (badd0618e4d9488e48f500664084356041cd6d44) 2025-07-30 07:39:50 +00:00
2ae9c24a31 2025-07-29 nightly release (08ea8fccaf28155466dbc1da203219941f4b08c0) 2025-07-29 07:38:58 +00:00
fa58508f47 2025-07-28 nightly release (f63673626d4c6a574a49f9e0d1131764d46b2bb8) 2025-07-28 07:39:22 +00:00
0669d84e19 2025-07-27 nightly release (d72ebefe3fa7d3ee0e9c9b399f5c07611e790664) 2025-07-27 07:35:54 +00:00
0f22b01329 2025-07-26 nightly release (c6b479bc09090336dcd1c97f5e368e76490065ea) 2025-07-26 07:36:02 +00:00
fa05753590 2025-07-25 nightly release (6fc0ad22f0a07b6f38d138861c56a765d5a9bb02) 2025-07-25 07:38:10 +00:00
e4d06f14ac 2025-07-24 nightly release (febf3c475e6fe369b41ef009f3598659a6df0911) 2025-07-24 07:38:13 +00:00
add37ba086 2025-07-23 nightly release (2dccff7dcf56b0d168ebfd7ca08bdeca37273c56) 2025-07-23 07:38:56 +00:00
5ec79a9787 2025-07-22 nightly release (350d6af52c76481d0f386208b6b86be93b7ff22d) 2025-07-22 07:38:13 +00:00
d59923f01d 2025-07-21 nightly release (70b4a8880b1c3fb5e92c5fcd75bda6b6f299abac) 2025-07-21 07:40:42 +00:00
1c2e48b67a 2025-07-20 nightly release (4869f7117009fb99a57482fce56b00c6163fbce6) 2025-07-20 07:35:32 +00:00
d78a49992c 2025-07-19 nightly release (90b082e207bff79dd09d89cfef9be49de5c2ad83) 2025-07-19 07:35:34 +00:00
744d29186e 2025-07-18 nightly release (89d842fec5229fff0df5342b2db121368d51e717) 2025-07-18 07:37:56 +00:00
9e5df57ebb 2025-07-17 nightly release (f6d138807f138868de0397936e2bee482c1fb987) 2025-07-17 07:37:40 +00:00
ab43fe4bdf 2025-07-16 nightly release (03852ddc22350eb8b6ed6b61777639ce6080f3dc) 2025-07-16 07:37:49 +00:00
d38be5ebdb 2025-07-15 nightly release (9345279c6ebdbad95b7b53bc2cb6f63a4e57b2cc) 2025-07-15 07:38:13 +00:00
90f1e7bed1 2025-07-14 nightly release (1f57e0e04da9d334e238cec346f7ae3667bed9d1) 2025-07-14 07:38:24 +00:00
8f2a1f3416 2025-07-13 nightly release (5aee022d8b2bc9d31ddaf877315ffb8ad9d62985) 2025-07-13 07:36:19 +00:00
987acea60a 2025-07-12 nightly release (4ff9b7fa3116b1c429e577830ac6e816734ad029) 2025-07-12 07:35:43 +00:00
87b2ac5d19 2025-07-11 nightly release (ae86e8f6c829a3cfa9204949156fce2d048c919b) 2025-07-11 07:37:34 +00:00
1b995e9218 2025-07-10 nightly release (3232b57cd87fbd15c990fbf87d181716a1993a55) 2025-07-10 07:36:45 +00:00
1c10a682ee 2025-07-09 nightly release (1b3d69b59f92383633731aada8383ab88da3ed60) 2025-07-09 07:36:52 +00:00
c5b9696986 2025-07-08 nightly release (12f9942b107acc9d7acf9591818c826ef972a0f5) 2025-07-08 07:36:53 +00:00
d9bca3a299 2025-07-07 nightly release (d26ca5de058dbcf56ac52bb43e84dd98df2ace97) 2025-07-07 07:36:53 +00:00
e067016da8 2025-07-06 nightly release (7cda4017ddda554752e89069ae205be5e8388f59) 2025-07-06 07:34:39 +00:00
d9c875e47b 2025-07-05 nightly release (f7127b9b940a98596599acda1f89fc5153635a5d) 2025-07-05 07:34:44 +00:00
522bab616b 2025-07-04 nightly release (a6fab82b16011213cb010c8c50461b9a680748a2) 2025-07-04 07:37:22 +00:00
76578d0c40 2025-07-03 nightly release (5cc4e856fda4accb2e9291527693a91dc2a18d89) 2025-07-03 07:36:27 +00:00
dd43031b67 2025-07-02 nightly release (4500a4aa50141ed30e093ef8491b30d1d1287348) 2025-07-02 07:36:13 +00:00
65d9261836 2025-07-01 nightly release (c174f3a6a55864cedb8f6d9014e9b8cadf91186b) 2025-07-01 07:37:29 +00:00
249addeefd 2025-06-30 nightly release (771be857043bf794cd219a9b925e308e31f12314) 2025-06-30 07:37:04 +00:00
fcd40af2df 2025-06-29 nightly release (bccb8473fed94dbc6f1392d0c5b4a51150ee4a9a) 2025-06-29 07:34:58 +00:00
6b21a0c286 2025-06-28 nightly release (feea575082439a0496dd404a4925b7d551039065) 2025-06-28 07:34:50 +00:00
3cce5f1d04 2025-06-27 nightly release (382c6190c1329e96e71eef21a19737a3eda0040b) 2025-06-27 07:36:18 +00:00
0fb413a39a 2025-06-26 nightly release (85df746892d9b0e87e7a5dfa78ef81a84aec6de0) 2025-06-26 07:36:28 +00:00
d9c0ee5520 2025-06-25 nightly release (9b498d3bb28b8e3411ce464dd2755c5b96d92c8f) 2025-06-25 07:36:29 +00:00
fbea094c72 2025-06-24 nightly release (c82a174ceab79f77ba18405dd263eb03692608fd) 2025-06-24 07:36:32 +00:00
c8569f3a23 2025-06-23 nightly release (c55eef79f8880e4b610a0ca6f6131e690dc948dd) 2025-06-23 07:37:05 +00:00
382411c3d8 2025-06-22 nightly release (1d993fa3092e4f0b5745f2470024b35cac96da14) 2025-06-22 07:35:28 +00:00
c3ffa66474 2025-06-21 nightly release (ac86ec0e60370c037e018137f2048cafd47c5c28) 2025-06-21 07:34:55 +00:00
a64e2e686a 2025-06-20 nightly release (f7a5ad6c2987ee5a83aa5d868cee3b8067d3de94) 2025-06-20 07:35:51 +00:00
5622038e20 2025-06-19 nightly release (2625c70aecc6eced1dbe108279feab7509733bef) 2025-06-19 07:36:07 +00:00
19e7984774 2025-06-18 nightly release (2625c70aecc6eced1dbe108279feab7509733bef) 2025-06-18 07:36:44 +00:00
d159881b7f 2025-06-17 nightly release (6e2992a9984f2c3f6469564008c7e45869b84678) 2025-06-17 07:37:08 +00:00
9ce4d95e84 2025-06-16 nightly release (c620d0b5c7e8679413d620624725471223ce8359) 2025-06-16 07:37:01 +00:00
74d0136772 2025-06-15 nightly release (6ebe9a4f47e9cd1c9ccd467bcdfdea9445fd98d6) 2025-06-15 07:34:46 +00:00
c3882619c2 2025-06-14 nightly release (a6084b71edb8d2856356724b5e71c4e2a861867f) 2025-06-14 07:34:19 +00:00
58a15e1c08 2025-06-13 nightly release (020da744370f6ee23e377357e9acc330b5610a67) 2025-06-13 07:35:55 +00:00
c07ea91237 2025-06-12 nightly release (b00b641ff1fbfa8f4f6152ffc631e0d24145a7a8) 2025-06-12 07:35:56 +00:00
3017faa76e 2025-06-11 nightly release (3040ca6d0f8558e39919b14eebeacc34ddf980f5) 2025-06-11 07:36:00 +00:00
0f61f5f414 2025-06-10 nightly release (3863bbb55b38985c7d64c8a0be7beb2005a9cc07) 2025-06-10 07:36:35 +00:00
724da4eecc 2025-06-09 nightly release (be2ad70cfa1360da5c23a04ff6ca3480fa02f278) 2025-06-09 07:36:29 +00:00
843156205e 2025-06-08 nightly release (f6e18bc1054624bb148632a85c10371d6cc62492) 2025-06-08 07:34:24 +00:00
e9e2e1992d 2025-06-07 nightly release (83d22256f84232c5440b25a08459c649a32b9a4f) 2025-06-07 07:34:11 +00:00
975b4d9707 2025-06-06 nightly release (e895e9689c625cbcd8f46880115e0d093713fa37) 2025-06-06 07:35:46 +00:00
d53869579d 2025-06-05 nightly release (a01bb9da14ad08853c7b0c1b9719b978cdbf66bc) 2025-06-05 07:35:55 +00:00
a6aa36e428 2025-06-04 nightly release (3e57de1251b879b595fba1d0b9e5eeac732d2137) 2025-06-04 07:36:01 +00:00
534604db0b 2025-06-03 nightly release (28cb3c0fe5dec58c595617066acd8bd082aa867e) 2025-06-03 07:36:30 +00:00
64247892a0 2025-06-02 nightly release (0d0058d90de410cbc998089eb5e475776d2ad55d) 2025-06-02 07:36:51 +00:00
b864161782 2025-06-01 nightly release (5616fa4a68718ead203314a3467f7dd9547153ae) 2025-06-01 07:34:50 +00:00
4612dbdec6 2025-05-31 nightly release (1193bf085574f5f0836b6ca7d84e3c8cb1f2d0c3) 2025-05-31 07:34:30 +00:00
5f945e8ea7 2025-05-30 nightly release (0c6c7780d9563b555d8b2948a005170044142537) 2025-05-30 07:35:17 +00:00
b122c5cdee 2025-05-29 nightly release (b394c6e89c2f7986274e405ec8f91c12fa52b5e2) 2025-05-29 07:35:25 +00:00
f2ad693453 2025-05-28 nightly release (54f1f29fedd3321f2398b6b34c82cc6355d7ba56) 2025-05-28 07:35:52 +00:00
b40585022f 2025-05-27 nightly release (f8010e7b934ab5f289a9d0f92168476882d497d4) 2025-05-27 07:35:58 +00:00
b5ad205e0e 2025-05-26 nightly release (8c16d0e4047a8ac5885baf52e8779fb3e36f2987) 2025-05-26 07:42:06 +00:00
3560b8ebe9 2025-05-25 nightly release (53ecb8159aa28b3c015917acaa89604cfae0d2c6) 2025-05-25 07:35:03 +00:00
fc4fe48f43 2025-05-24 nightly release (76ed9db4682c2ca75116de1547bfc298fafd132d) 2025-05-24 07:34:21 +00:00
4d514e404f 2025-05-23 nightly release (c1055f41a67ef9e76626fa14eea38073f4a09b62) 2025-05-23 07:35:40 +00:00
5f5ca60410 2025-05-22 nightly release (d1fe198df60cac55c70ad4eb3f8b70f8a556b4c1) 2025-05-22 07:35:29 +00:00
08ff525349 2025-05-21 nightly release (531d8f5fb6ea6e1fcac011e5af09067303839750) 2025-05-21 07:35:43 +00:00
9e910e020f 2025-05-20 nightly release (5ef90e14a3e4b26ec9247e5af03de493f20e79a7) 2025-05-20 07:37:18 +00:00
3b875c25ea 2025-05-19 nightly release (2ade886412fcf80b6f681ba660e6f9743489d492) 2025-05-19 07:35:50 +00:00
42f44e6d06 2025-05-18 nightly release (8568dbce1d7775d37c3f2dcc4073d3f44968fc43) 2025-05-18 07:34:25 +00:00
c44eb22680 2025-05-17 nightly release (084c4aa6140fa3e3ae66b09ffe893df841fa06da) 2025-05-17 07:34:07 +00:00
bab64901cc 2025-05-16 nightly release (d1f1ff8610d6baa9f9ce132fc082a10ffa2a9854) 2025-05-16 07:35:29 +00:00
a84c4fe2bb 2025-05-15 nightly release (014726d9d313fd6bf92cad6afb6933d2eb0cdf8a) 2025-05-15 07:35:28 +00:00
46a5746426 2025-05-14 nightly release (d759a517af3e6b2337bf8f8e0d1734e64e470f1b) 2025-05-14 07:35:30 +00:00
8b228c20ce 2025-05-13 nightly release (7243c69421cd0b868f3fa3b552c17e9c8b3023a1) 2025-05-13 07:35:48 +00:00
c8d468403b 2025-05-12 nightly release (032ef487258d8bbcae40fc580cdbf47398706aa4) 2025-05-12 07:35:34 +00:00
c3b3e52305 2025-05-11 nightly release (1f5cf19f56734aa92f1757b1afdbdbbdb198b807) 2025-05-11 07:34:04 +00:00
aff1eebd2b 2025-05-10 nightly release (180cbf46f2d2c2ceba608ad2722a6c9546e3fada) 2025-05-10 07:34:08 +00:00
8fc591edea 2025-05-09 nightly release (ab829ec6290b92b6f2c2519a9a922c1b06d0981a) 2025-05-09 07:34:56 +00:00
cd09210540 2025-05-08 nightly release (6f6fac6a416b64221031d32e6c1e4df145df45f5) 2025-05-08 07:35:58 +00:00
0ef95aa4f2 2025-05-07 nightly release (dfcfad2112933cc34247421ac0a4d3f19a1806c1) 2025-05-07 07:35:42 +00:00
02417607d1 2025-05-06 nightly release (1d7728056b9d9492930f56f7ad535bf927c7a4e8) 2025-05-06 07:35:40 +00:00
edcbbadc9a 2025-05-05 nightly release (0ffd31dc8a514d9ecb1dc653725e359ad37d8faa) 2025-05-05 07:36:04 +00:00
5ca255eb29 2025-05-04 nightly release (e889937850759fe69a8c7de6326984102ed9b088) 2025-05-04 07:33:51 +00:00
0217311e9a 2025-05-03 nightly release (457fa820ad538c7aeadb68f0ec418d63972ba1ee) 2025-05-03 07:33:51 +00:00
b4bd238d58 2025-05-02 nightly release (ce94b212c71c53656d8a357b6d3f2487f5c8d60c) 2025-05-02 07:34:41 +00:00
8c7f92885f 2025-05-01 nightly release (3849fd13de1a5ee727fd64351edb0d3b1bb637a9) 2025-05-01 07:34:40 +00:00
43be1858b1 2025-04-30 nightly release (e872bf8f888bdbb27a03e03935db61babf7180b8) 2025-04-30 07:34:46 +00:00
d2a7a65bf4 2025-04-29 nightly release (e5f4356a258d646df59aa350845c8ff913463ccf) 2025-04-29 07:35:38 +00:00
0c03652153 2025-04-28 nightly release (98bd2bd1abc7e4f18693a4bbe52f68b8d47019ac) 2025-04-28 07:47:12 +00:00
140c4197f8 2025-04-27 nightly release (a0d440a26a555c34e87b90bef3bff960b34bb180) 2025-04-27 07:33:53 +00:00
6a2d29f997 2025-04-26 nightly release (65b845f82b42e865e12c6a26dc6c749db0400973) 2025-04-26 07:34:01 +00:00
e0ba40b8b1 2025-04-25 nightly release (1a6d50d40799ba05b17254b236a6bf8817dd7d06) 2025-04-25 07:34:34 +00:00
0c4b0ec0c0 2025-04-24 nightly release (4ac2ee573d941e573b6648876bf215af609dccbe) 2025-04-24 07:35:07 +00:00
dab7e57003 2025-04-23 nightly release (cd021d048e4645d1bf9f193587ca0eda377a2721) 2025-04-23 07:37:06 +00:00
b182d84228 2025-04-22 nightly release (01f1cc44cbbfdf6307aa01b803a4ee22f9ade946) 2025-04-22 07:35:08 +00:00
6597b2807c 2025-04-21 nightly release (8eb21dffa9b1d0b55756ef94628f71bccfd5bbe9) 2025-04-21 07:34:47 +00:00
4b7863fc9f 2025-04-20 nightly release (a40e876b08277795a6552cf5e77e8649237c6812) 2025-04-20 07:34:08 +00:00
d3eb151b05 2025-04-19 nightly release (adf5f38eae0449b48a0356aa7f0e35c762525be5) 2025-04-19 07:33:54 +00:00
491e7e6ba7 2025-04-18 nightly release (3ed5f1fb77669c8ac5d02e7acc0218e31b71c0b6) 2025-04-18 07:35:16 +00:00
fcaf1a59e6 2025-04-17 nightly release (300e0ee13c08ef77e88f32204a2e0925c17ce216) 2025-04-17 07:35:32 +00:00
de772dae0a 2025-04-16 nightly release (3a90fd481e050cb73eff4e99ed16135b344baf69) 2025-04-16 07:34:40 +00:00
a58c844d04 2025-04-15 nightly release (e178a3aa9441a65aa6bfa079c2c23e515971fae6) 2025-04-15 07:36:12 +00:00
4fd036eb33 2025-04-14 nightly release (1a1a32ce5af880709a761c4cd9e9e43fb67e5058) 2025-04-14 07:34:56 +00:00
160a26e1a3 2025-04-13 nightly release (1a1a32ce5af880709a761c4cd9e9e43fb67e5058) 2025-04-13 07:33:47 +00:00
499ae6a4d4 2025-04-12 nightly release (1a1a32ce5af880709a761c4cd9e9e43fb67e5058) 2025-04-12 07:33:54 +00:00
a2033c7442 2025-04-11 nightly release (1a1a32ce5af880709a761c4cd9e9e43fb67e5058) 2025-04-11 07:34:26 +00:00
a094b3ad3e 2025-04-10 nightly release (cd80778ac8636db99685d792cbc93374f574d38b) 2025-04-10 07:35:22 +00:00
dcea61f3d2 2025-04-09 nightly release (4447352e6499c28c17f4d48d40c2b1cc3d2863a5) 2025-04-09 07:34:53 +00:00
37bbfdc278 2025-04-08 nightly release (836955bdbdeb299e6937065299564fb44ec422c2) 2025-04-08 07:34:33 +00:00
2b568a51f1 2025-04-07 nightly release (d98575806ba3f2b67439c241e980df8f98923f44) 2025-04-07 07:35:43 +00:00
881e8b6bda 2025-04-06 nightly release (15768cc34b9cdafdac645b9c22806e0bf4e74100) 2025-04-06 07:34:21 +00:00
51ba1b337c 2025-04-05 nightly release (7ac81868513a212af6be4a05e2f921cafeeb3069) 2025-04-05 07:34:34 +00:00
56d317d3a7 2025-04-04 nightly release (f9f6c080d8309ac1c5a546a47571389bac0b922c) 2025-04-04 07:34:17 +00:00
e374008e67 2025-04-03 nightly release (532530be34bf396cc632b5c8d95253953e3f7717) 2025-04-03 07:34:28 +00:00
f2ce02c559 2025-04-02 nightly release (5734909f343ab1de44ed5ab23311d43a9c6afaed) 2025-04-02 07:34:31 +00:00
365763495b 2025-04-01 nightly release (827b730f4e1cf172c7ba228a2efd268149163d52) 2025-04-01 07:34:55 +00:00
d5d5207db1 2025-03-31 nightly release (cbc0964636b382e096e4a048909c3fbf4ff82e59) 2025-03-31 07:34:42 +00:00
de61ed1823 2025-03-30 nightly release (52135db69a5b02bb9e5120a5fa410c303f649dfe) 2025-03-30 07:34:05 +00:00
3de3814e5e 2025-03-29 nightly release (d670df356cc27af60b09cb2653dd53a9b92790dc) 2025-03-29 07:33:50 +00:00
dac34906ab 2025-03-28 nightly release (d670df356cc27af60b09cb2653dd53a9b92790dc) 2025-03-28 07:34:40 +00:00
425df71311 2025-03-27 nightly release (114d404b0720e8073748690faeb96449e5c0b229) 2025-03-27 07:34:19 +00:00
41d214b5d4 2025-03-26 nightly release (45b11730f10f64171a9861c98782e1875bad87c9) 2025-03-26 07:34:22 +00:00
3794824ceb 2025-03-25 nightly release (59d5cf083b4f860dea76fe8936076177f9367f10) 2025-03-25 07:35:11 +00:00
139ce10879 2025-03-24 nightly release (de3aca331104776bdfac3f053511b7af442b4038) 2025-03-24 07:34:41 +00:00
9164cb4fbf 2025-03-23 nightly release (621c801f786a0fb24766f8b30b5d3e08b5c25fd3) 2025-03-23 07:34:02 +00:00
233790922b 2025-03-22 nightly release (01b1d1f91b9ee15051489da6d4e9377459ad692c) 2025-03-22 07:34:00 +00:00
6c7ce1b7be 2025-03-21 nightly release (0692301e25f0e0d64b4102819a4c0a4d8fe51b53) 2025-03-21 07:34:04 +00:00
c15acc148e 2025-03-20 nightly release (02e21c78543d0861305382b84c43936c90274eab) 2025-03-20 07:33:48 +00:00
2745ea1c97 2025-03-19 nightly release (790f93db3a5474a26d99e587016815c987566b49) 2025-03-19 07:34:22 +00:00
f66f3718dc 2025-03-18 nightly release (790f93db3a5474a26d99e587016815c987566b49) 2025-03-18 07:34:34 +00:00
3f3f7f67bc 2025-03-17 nightly release (6b1b95ad2acc9404307142d1f050e0e1b5815f99) 2025-03-17 07:34:39 +00:00
1184d9a6aa 2025-03-16 nightly release (f80bee4934dc2d6c8031f481d699cd4832a1a932) 2025-03-16 07:33:51 +00:00
a7848a5ca9 2025-03-15 nightly release (740ce0fa5f8c7e9e51422b614f8187ab93a60b8b) 2025-03-15 07:33:48 +00:00
cc803031f2 2025-03-14 nightly release (e8d36019d428a3c298bedc53d692a81e2f9abd26) 2025-03-14 07:34:00 +00:00
d330b82ed6 2025-03-13 nightly release (f2d43d866cff717c1ce33074d44924be777188c5) 2025-03-13 07:33:50 +00:00
ea02d322f0 2025-03-12 nightly release (2a7e997b3f1805b077810d7fef87cabc4411eeea) 2025-03-12 07:34:14 +00:00
d962699548 2025-03-11 nightly release (295f2ed4d103017f7e19a7b8263ece606cd629db) 2025-03-11 07:33:52 +00:00
cdb42bd8cc 2025-03-10 nightly release (7ae0ce6360b6e4f944906502d20da24c04debee5) 2025-03-10 07:33:51 +00:00
ecc1272a4b 2025-03-09 nightly release (5245304f1ecd4e78bd11f5a5efa8ce12f3b52826) 2025-03-09 07:33:38 +00:00
acd10bbd23 2025-03-08 nightly release (85467ed063d284fa21a2f1d2adfec8fda544923d) 2025-03-08 07:33:48 +00:00
21169daf3a 2025-03-07 nightly release (9c9b05bc4f3661e7b781186e646c08254758a2d4) 2025-03-07 07:33:50 +00:00
e35f2fa1a1 2025-03-06 nightly release (1433bc145526949c84acf4ba5eaa1687cc2d72fe) 2025-03-06 07:34:37 +00:00
8afad6f64c 2025-03-05 nightly release (aade4fbd55a07aaa23dbdfe055d70cd503fd0059) 2025-03-05 07:34:24 +00:00
d13587dfbf 2025-03-04 nightly release (aade4fbd55a07aaa23dbdfe055d70cd503fd0059) 2025-03-04 07:34:06 +00:00
8a38a193e4 2025-03-03 nightly release (ab81ca5053440074dc7d8c46ae4775f62f662394) 2025-03-03 07:33:58 +00:00
96b99c3c6d 2025-03-02 nightly release (ce2f680e0009550ef0dc594f375d542662fcb7e5) 2025-03-02 07:33:55 +00:00
f2a3f7c4b3 2025-03-01 nightly release (08434df1f2f88c9770e59246caa2ff9c6f613270) 2025-03-01 07:33:49 +00:00
5679f4f9c4 2025-02-28 nightly release (1845e7d1f597850b39e2e2d509e7cf8f997462a3) 2025-02-28 07:33:42 +00:00
7c2f94413c 2025-02-27 nightly release (784902983e79fe2f0ae2d7a73a57f4f2338eb86b) 2025-02-27 07:33:48 +00:00
77d7c96844 2025-02-26 nightly release (9ad0ad6497973b3bd72c7b50101cf30d359b950e) 2025-02-26 07:33:57 +00:00
ca19385711 2025-02-25 nightly release (866dc45d3ca0094bb89729b8309eeb25f6c9b575) 2025-02-25 15:21:41 +00:00
2bc7eb9e50 2025-02-24 nightly release (bea72180ed75f522ce4fe5e723bc2112e0874732) 2025-02-24 07:33:42 +00:00
52b3292d38 2025-02-23 nightly release (bea72180ed75f522ce4fe5e723bc2112e0874732) 2025-02-23 07:33:39 +00:00
28e3ea64c0 2025-02-22 nightly release (84fcf1bb11aa2106facb4e44da2a4e295936755d) 2025-02-22 07:33:46 +00:00
9c302da50c 2025-02-21 nightly release (fe100c3c5bcb19899b1f92c3281e527ba1eb011e) 2025-02-21 07:33:48 +00:00
a1f23bcb2e 2025-02-20 nightly release (fea718f062be1ea0602bef36ff42f28df968fd06) 2025-02-20 07:33:51 +00:00
83692a2c20 2025-02-19 nightly release (454fbd5bbe52d241a0ac89dc37574a16d322a1c0) 2025-02-19 13:01:56 +00:00
f1fbb1edba 2025-02-19 nightly release (bd370c138a9378d807ad16228cc6a066f14a526d) 2025-02-19 07:33:50 +00:00
7604dd1102 2025-02-18 nightly release (71484a2106750a5388d0eb1094a2206595d0e7e6) 2025-02-18 07:33:45 +00:00
54ea81783c 2025-02-17 nightly release (ae351d4d0ee0676b81f58170595d016d40cd223f) 2025-02-17 07:33:55 +00:00
68fa1e1ce9 2025-02-16 nightly release (1677a3101959cd2ea5f811a023a2b8b0b9fc6c18) 2025-02-16 07:33:48 +00:00
73f9dbce08 2025-02-15 nightly release (4233a779603207f19033cd433d2961c93b932cb4) 2025-02-15 07:33:51 +00:00
68c826639e 2025-02-14 nightly release (f95bdf5e6c8ea482ba6f64d655513b6a191ac142) 2025-02-14 07:34:01 +00:00
c709115e6c 2025-02-13 nightly release (54e28b2a71dbe003ec03a72c4e829acc0cf25334) 2025-02-13 07:33:50 +00:00
4446d2c933 2025-02-12 nightly release (28a2ab6b8489a22f29bf27b8c691aa27c2ea1094) 2025-02-12 07:33:50 +00:00
90092b9b08 2025-02-11 nightly release (fe94ece375f46d09a223d9796cac02b0796f13f1) 2025-02-11 07:34:51 +00:00
5f7ce38e44 2025-02-10 nightly release (e8304f08fedc802a90f9361c30861f8c5aab946e) 2025-02-10 07:34:04 +00:00
9b43fab6c5 2025-02-09 nightly release (6a9a02acbe34a9d810c8bf56c865b9d0687a3051) 2025-02-09 07:33:44 +00:00
ae9c74989e 2025-02-08 nightly release (9c78fb920d51462bbb6fbdb82592b5963a56ae8a) 2025-02-08 07:33:58 +00:00
1323ac671b 2025-02-07 nightly release (fa0592b568ce35c391dfede8bede9e1ed67f33f5) 2025-02-07 07:33:54 +00:00
a20cc87f83 2025-02-06 nightly release (425804db2b59fe2653fbf0ece730a522865a9b2a) 2025-02-06 07:34:05 +00:00
d945c3e427 2025-02-05 nightly release (3c0d2bc262b51dc55377eee687064d91fb12696d) 2025-02-05 07:33:50 +00:00
48d01e495e 2025-02-04 nightly release (d3c7e4bb9cb570e997dd143817580283c634fab2) 2025-02-04 07:33:46 +00:00
ca2de2e26f 2025-02-03 nightly release (d80eef7c6d2efcbf4b60d555512c7db9da2a6e58) 2025-02-03 07:33:52 +00:00
738ebb45ca 2025-02-02 nightly release (7854299b27d55223e402651ce0d33b209a213589) 2025-02-02 07:33:48 +00:00
6fba2824ee 2025-02-01 nightly release (cde5ddfd1460644bf3f3cbe755b40d44bfc1891b) 2025-02-01 07:34:36 +00:00
edf08cb080 2025-01-31 nightly release (2d6f6637d31854bff0ec7dc6b82429f37e0da271) 2025-01-31 21:28:06 +00:00
5f15cdfe27 2025-01-31 nightly release (27e35de6c288bffad1b4d18b393579c1d1a95547) 2025-01-31 07:33:54 +00:00
b27bb24208 2025-01-30 nightly release (354fe48db9ef94c69db6d03d997a374048824f83) 2025-01-30 07:33:57 +00:00
e1e9393cdf 2025-01-29 nightly release (9fd6722fc9068eeaa176754acb315fc7e0f6416c) 2025-01-29 07:34:09 +00:00
e72d5a5817 2025-01-28 nightly release (c1161957a4122d1913aa00ce2c17c1cc7b83b309) 2025-01-28 07:33:41 +00:00
3127214173 2025-01-27 nightly release (b75afa2e2e492ea59502daa73196fb7454a75a1a) 2025-01-27 07:33:54 +00:00
f97e773692 2025-01-26 nightly release (90448f0128d8090a07325be24bd513c4d14bed6d) 2025-01-26 07:33:55 +00:00
66d78ef560 2025-01-25 nightly release (ef60de07a0d390ac06efaa41b6548118cf84e0ea) 2025-01-25 07:33:47 +00:00
16f149b177 2025-01-24 nightly release (6f07847efe94157b9ab0bdba080f952ecebfbdc3) 2025-01-24 07:34:06 +00:00
e96db3e274 2025-01-23 nightly release (5a18f1e1eb5ae9cf87f66a367f07fdb5211531c7) 2025-01-23 07:33:44 +00:00
76535beee0 2025-01-22 nightly release (f2cfe8b59f56b75f4aa313b3979af845a903f5f8) 2025-01-22 07:34:05 +00:00
1d5261b3a7 2025-01-21 nightly release (5fd881a5b67bf715f212dad8c7cacd4ddfb5746b) 2025-01-21 07:33:56 +00:00
37626ee0e6 2025-01-20 nightly release (6cb186e279bc179a6bb63f0226e24ab42a07b394) 2025-01-20 07:33:45 +00:00
9cf75bc595 2025-01-19 nightly release (8cc415774f47b5a50077f72ea493b71b8101e48d) 2025-01-19 07:33:43 +00:00
afeff746d3 2025-01-18 nightly release (64e54d5af638f6e427e8ad2355c45970400c437e) 2025-01-18 07:33:47 +00:00
ab2a8287ca 2025-01-17 nightly release (43a00d73b36494e052a82418182c63e18e9d9f69) 2025-01-17 07:33:50 +00:00
b3e16e3b7b 2025-01-16 nightly release (62ce3e6e84df516fdd5310d5095fa01251806f1d) 2025-01-16 07:33:47 +00:00
55bf78123d 2025-01-15 nightly release (e2251fffbb012303f1c47ead67fa733a49fd21b4) 2025-01-15 07:34:00 +00:00
68e1d954e3 2025-01-14 nightly release (dfe06e555d474d3ed597b67893e6ff270e2070f4) 2025-01-14 07:33:53 +00:00
32c95e44c6 2025-01-13 nightly release (87843ee9ab50778a98eda62fd7498d44c69488bd) 2025-01-13 07:33:42 +00:00
24d762795f 2025-01-12 nightly release (e0f67405a154e7f9ce1ca9533cbc1d156fe075d7) 2025-01-12 07:33:47 +00:00
ea2107b759 2025-01-11 nightly release (68dad26b9504d96bf7c247941dee67ffb1a781e9) 2025-01-11 07:33:53 +00:00
07c3c5e34c 2025-01-10 nightly release (9f09b719d33c61224ebb85baa369a8364063aa6f) 2025-01-10 07:33:48 +00:00
bd1e0e0018 2025-01-09 nightly release (dcc3cf7066b4d8cab63ecb73daf1e36b01220a4e) 2025-01-09 07:33:53 +00:00
a00264a930 2025-01-08 nightly release (28b4992e7a60bb3fbb07c591099fa810557b4e57) 2025-01-08 07:33:56 +00:00
de51f09432 2025-01-07 nightly release (301b9c8a90002fa621d93b108e54460066226629) 2025-01-07 07:33:58 +00:00
65e9e383bb 2025-01-06 nightly release (cb5fa17e4437d0cf20e2cde03bc1c753d49b1f69) 2025-01-06 07:33:47 +00:00
e67f93ae33 2025-01-05 nightly release (f2d6cfa6775601df5a038f7a4d0b37da75a53ed9) 2025-01-05 07:33:47 +00:00
0f7331ca63 2025-01-04 nightly release (0a94bb432ed75cc2d950d81b2921363218a7e459) 2025-01-04 07:34:05 +00:00
8c92c3c359 2025-01-03 nightly release (496fc909651ff4fc0d1933277c2d30524061471c) 2025-01-03 07:33:57 +00:00
f769c99631 2025-01-02 nightly release (a174ee2255aa181d8d39c167694db1eb1a2e0deb) 2025-01-02 07:33:53 +00:00
d4e525871c 2025-01-01 nightly release (a174ee2255aa181d8d39c167694db1eb1a2e0deb) 2025-01-01 07:33:45 +00:00
a1bc249b5f 2024-12-31 nightly release (8df99b6a6e1fb7b1e548ef01e8d21a652019ed28) 2024-12-31 07:33:43 +00:00
40b0741e91 2024-12-30 nightly release (2ed4d65af0a1993c0df7b081f4088d0f3614283e) 2024-12-30 07:34:20 +00:00
ad23baaa28 2024-12-29 nightly release (cf0b72c4ab960a847758132cc501cf793926e070) 2024-12-29 07:33:41 +00:00
b7f762e00d 2024-12-28 nightly release (d3e9133ab217b8b1f244cd78428d116f83d5806b) 2024-12-28 07:33:58 +00:00
b01ca2c28b 2024-12-27 nightly release (1cd70e7e237d03de3f50445ab0c7975d6749dc5e) 2024-12-27 07:33:50 +00:00
dd88b7cb14 2024-12-26 nightly release (4bacfd6e117f1e77dbce9444fc3ef3d95c5f2b89) 2024-12-26 07:33:54 +00:00
4ae33911b2 2024-12-25 nightly release (c0d710634fcce172490c3ace0de977829b38bc06) 2024-12-25 07:33:52 +00:00
993ac7f9d6 2024-12-24 nightly release (6ccb8ed1868984d9d2ea4e48a085508d1027cd9b) 2024-12-24 07:33:51 +00:00
b2d1835353 2024-12-23 nightly release (12662901aa8ced7d1118193e40dd4f018bb2e0fa) 2024-12-23 19:46:19 +00:00
b74622335a 2024-12-23 nightly release (eebc93d41eeffb936cbf20c9052e1e813d0cc052) 2024-12-23 07:33:45 +00:00
9f02401460 2024-12-22 nightly release (f1cbf4b1b5a299f999c11e77bfabe39c7f04efdc) 2024-12-22 07:33:41 +00:00
3333f84c71 2024-12-21 nightly release (b5e159270a3784bc60fcb18513f30af22521dcf0) 2024-12-21 07:33:48 +00:00
6b3b6ccebb 2024-12-20 nightly release (75661f2036d36fd7f869cd749eb6ef5fb40e4772) 2024-12-20 07:33:45 +00:00
61944adb69 2024-12-19 nightly release (2c48af568a082c70ca4ca2cdc9b6469ed253a371) 2024-12-19 07:34:07 +00:00
a5fc054c22 2024-12-18 nightly release (2ea4b56ec872424e486c4fe2d55da061067a2ed3) 2024-12-18 12:53:39 +00:00
7260a15470 2024-12-18 nightly release (c06b5048ba866e2dd39e5da5399fe8261322c7ca) 2024-12-18 07:33:51 +00:00
5764ca46ed 2024-12-17 nightly release (c15638d8035f706b29a402397fd6766025801032) 2024-12-17 07:34:49 +00:00
3f159d6357 2024-12-16 nightly release (af8789c05654477649e4d99e6a253a2ebd81ad9e) 2024-12-16 07:35:17 +00:00
9f9823e3d2 2024-12-15 nightly release (dd2d360b7d5dcc66660fdfe8da083a7077dada56) 2024-12-15 07:33:42 +00:00
587bb30c44 2024-12-14 nightly release (698eefadddb7c276b381ecb510f4bcc219212c25) 2024-12-14 07:34:11 +00:00
33229b026a 2024-12-13 nightly release (ceb664aca6861d1a05c3d5602b1d7086a1e2901a) 2024-12-13 07:34:15 +00:00
3c7f1c0b09 2024-12-12 nightly release (1dd6f2102936175c06468aa4a18fcf401b53b439) 2024-12-12 07:35:13 +00:00
3bcdb4ed6b 2024-12-11 nightly release (95e7fcf82e91fa965bf35790d06fbf69bb945f81) 2024-12-11 07:34:59 +00:00
96a8273b63 2024-12-10 nightly release (5d3bc633ff3fab550afd286d53697bb5aab1c60e) 2024-12-10 07:35:50 +00:00
66b9fcf5f6 2024-12-09 nightly release (7435f57f600ff083bd2d0efcf33eeda674d2caa1) 2024-12-09 07:35:41 +00:00
afb4be9252 2024-12-08 nightly release (2682e5e0d48a8200c1672b6a42250d3c8de44190) 2024-12-08 07:33:59 +00:00
21b0f3b9bd 2024-12-07 nightly release (7939b5f5f9b073984c26adef1446fa250a20bceb) 2024-12-07 07:34:19 +00:00
3dd667797a 2024-12-06 nightly release (80ca6dd892613fd4f1dee9040b8273ddeadb1c50) 2024-12-06 07:34:55 +00:00
e21ebc30af 2024-12-05 nightly release (b08bc07cd75d166ea4873a5ea24680bfd6204a76) 2024-12-05 07:35:07 +00:00
aa019efbc3 2024-12-04 nightly release (30d907c6fbb0e1ce81023e10f9f2b6bbc27bf59a) 2024-12-04 07:35:07 +00:00
7851460668 2024-12-03 nightly release (77748ed8ec2dea0deb6ffd59bd28329e6cdc9d56) 2024-12-03 07:35:18 +00:00
90b7dcf2c5 2024-12-02 nightly release (5deca07c0dcf1482eba99bf93b805cf1cc41ad6c) 2024-12-02 07:35:32 +00:00
798d5b7ddd 2024-12-01 nightly release (e29dabbd719b988208f329c22157ecf03be6cf56) 2024-12-01 07:34:27 +00:00
8712710221 2024-11-30 nightly release (e29dabbd719b988208f329c22157ecf03be6cf56) 2024-11-30 07:34:13 +00:00
f0427e7be1 2024-11-29 nightly release (b97a7861256188efb7d4cf862886db7e547040a9) 2024-11-29 07:34:43 +00:00
1fba97d21a 2024-11-28 nightly release (fea771dcce8508c5d71755da65d1b97d6da13475) 2024-11-28 07:35:07 +00:00
44c5ea24d5 2024-11-27 nightly release (9b89fa44bad4128b0be2b03b0d8c11ee800d3de6) 2024-11-27 07:35:04 +00:00
06d9768062 2024-11-26 nightly release (851edf208b308789087f263de739607ea25c8a0e) 2024-11-26 07:35:07 +00:00
b16d9ba310 2024-11-25 nightly release (2398e758d2493c8142d4b7f9c72207f05991e9e9) 2024-11-25 07:34:49 +00:00
b0a6940290 2024-11-24 nightly release (c513f01516673898d551818c8ca6085cf07e4006) 2024-11-24 07:34:33 +00:00
716ed475a1 2024-11-23 nightly release (44d5012a80e9b9c0f28dfc9927bfe8157412254d) 2024-11-23 07:33:50 +00:00
b8aad2e5e5 2024-11-22 nightly release (740d1eb0306f1f9d0ce81ea81f287a6b52738fab) 2024-11-22 07:34:41 +00:00
ac47a2d971 2024-11-21 nightly release (e0482fdf95eb3ce679fa442b50871d113ceb673b) 2024-11-21 07:34:45 +00:00
dd2e6d6140 2024-11-20 nightly release (cee3f8541e9fed93095e249d17f791b861548562) 2024-11-20 07:34:51 +00:00
a7f5ff1bc5 2024-11-19 nightly release (98e441f00b2e4dff5234df120e6194eab6773853) 2024-11-19 07:35:01 +00:00
37b96b77a5 2024-11-18 nightly release (c3fbec74bd92e1c4e97a6f2908cabb799d515ce7) 2024-11-18 07:35:13 +00:00
edeae2313f 2024-11-17 nightly release (2fc692b3dd42bf92c4f92dcec862bae7ae1c7995) 2024-11-17 07:34:29 +00:00
5d487aa9be 2024-11-16 nightly release (924c1fe3f304aa599b823fb549c35b7809f61086) 2024-11-16 07:34:02 +00:00
79da951f19 2024-11-15 nightly release (1c1d06a22c2534cca3c4c36f5e7947a67b0d1512) 2024-11-15 07:34:34 +00:00
a0d79cba8d 2024-11-14 nightly release (3ce75e7ea6706adf64d823d0c7ab2d04f657d43e) 2024-11-14 07:34:09 +00:00
1ba72852e9 2024-11-14 nightly release (70060b0927221c63cf08be896dbca6103f2be96e) 2024-11-14 03:11:36 +00:00
d195b9388e 2024-11-13 nightly release (39d1c91c33270f66cdf57bae2a19e7738cf8f77f) 2024-11-13 07:34:06 +00:00
555bc8349d 2024-11-12 nightly release (19eff28ff3f19b50da46f5a9ff5f4d4d213806fe) 2024-11-12 07:34:12 +00:00
9c847fb635 2024-11-11 nightly release (ffb979032dc149b4c895526fe5b92d713ed7b1e1) 2024-11-11 07:34:40 +00:00
77d07d22ef 2024-11-10 nightly release (5ef33e40b3c3fd2608552d3301c7255826c0e7f6) 2024-11-10 07:33:34 +00:00
30cf05fc13 2024-11-09 nightly release (cc44b55b0080759d85068aefa9c74e3bf49658e1) 2024-11-09 07:33:37 +00:00
29017895e1 2024-11-08 nightly release (4715b7700131618be5f439a8ad6b5ae94a201915) 2024-11-08 07:33:41 +00:00
0d5247caf3 2024-11-07 nightly release (cf0bb6c435c58db4c72e489f462e1a0ebe310f14) 2024-11-07 07:33:48 +00:00
5a05d8baca 2024-11-06 nightly release (63b01f328ef63a28b6c31e711d094b1a4b2b7d28) 2024-11-06 07:33:56 +00:00
a8b26c6b07 2024-11-05 nightly release (9039fbb47ecfc93df74a014a209e5929d10fd2a3) 2024-11-05 07:33:56 +00:00
76c297ad6b 2024-11-04 nightly release (e6ff07f00e04a9b58efb86a3dd70ed7280ae8522) 2024-11-04 07:34:15 +00:00
3c901e20a9 2024-11-03 nightly release (f121eab0182f7da58b39ffb84744bdc7109817e3) 2024-11-03 07:34:09 +00:00
a37bd4b1a2 2024-11-02 nightly release (8d1eaa3da663c2bdd626ff1aafa1c5d0ff6e1bf3) 2024-11-02 07:33:48 +00:00
3e0dd1351c 2024-11-01 nightly release (c8a648d4dffb9f0133ff4a2ea0e660b42105d3ad) 2024-11-01 07:34:23 +00:00
81d824d17a 2024-10-31 nightly release (70ba471957011c0ef9d35207b4fb63657e5f8d1a) 2024-10-31 07:34:05 +00:00
e47e879449 2024-10-30 nightly release (23d590e518688f96e1d1947a08e9ca27df3e67e4) 2024-10-30 08:48:13 +00:00
c787213d41 2024-10-29 nightly release (4ee514144bcc227c6d73192d49baf354eb5f321c) 2024-10-29 07:34:47 +00:00
7784111661 2024-10-28 nightly release (d2ec28978730db514931e4dc146f8188738ed1ff) 2024-10-28 07:34:27 +00:00
cef671f99b 2024-10-27 nightly release (00504aa6b8b0ae68761b89f023184202e8c79bc8) 2024-10-27 07:34:07 +00:00
36c366341b 2024-10-26 nightly release (a3de067975a61f11ccb8580416ea4d4a838cdb24) 2024-10-26 07:33:44 +00:00
bd5482c7c3 2024-10-25 nightly release (32a3dbc6450171dec4ef62a36037dd5dc24790d2) 2024-10-25 07:34:20 +00:00
f64544f7fa 2024-10-24 nightly release (dbd6ada8c3272e9aa36b5da0ee785da5e17bd650) 2024-10-24 07:34:14 +00:00
4e9fedafc2 2024-10-23 nightly release (f2ebf6d94ab8d9f6b1a1ba8c6d6d120d9e8a2156) 2024-10-23 07:35:03 +00:00
65a14490e8 2024-10-22 nightly release (89067402d40e70f70b66f734c830fcd450c665df) 2024-10-22 07:36:10 +00:00
5553778a00 2024-10-21 nightly release (82eb09aafd7e4ee6e4fb0580f2221ea6253d218b) 2024-10-21 07:34:43 +00:00
160d421a40 2024-10-20 nightly release (47e80abc7a9de6b5cdc20f7d1a8afb68c639d764) 2024-10-20 07:34:10 +00:00
64b61eb313 2024-10-19 nightly release (e8b1409dcfbc7609110c9c332d6038a957b8dd9f) 2024-10-19 07:33:53 +00:00
c2c91fc8a4 2024-10-18 nightly release (7365a57dc05cc500b5ec910ae008bb168dbadd08) 2024-10-18 07:34:10 +00:00
e4dcf5b50e 2024-10-17 nightly release (fe43f72be7e0afd7fc6e5eee5dfdfb2968e66f32) 2024-10-17 07:34:19 +00:00
1655e904b5 2024-10-16 nightly release (75109682b66267d35ed2a5235ef50348926a336c) 2024-10-16 07:34:18 +00:00
ec8499a174 2024-10-15 nightly release (ed94725b8c5d70b31659d10775c011a23cbcb464) 2024-10-15 07:35:42 +00:00
2fcfb44b7e 2024-10-14 nightly release (41977a05314bbf537e1c5d6cf5916a368d1907d9) 2024-10-14 07:35:48 +00:00
380701ee2e 2024-10-13 nightly release (e89fe0bd6e827435ce436af5df93edb4494f6def) 2024-10-13 07:33:49 +00:00
de761c548d 2024-10-12 nightly release (c254901bdb6dcf8be91b41016c97cf685145fc1a) 2024-10-12 07:33:49 +00:00
e767966307 2024-10-11 nightly release (8321eec009c8c79145ebccd51fdfc336e5f8b848) 2024-10-11 07:34:11 +00:00
2ca8a3bdd1 2024-10-10 nightly release (d9f4a7d3f9678e9492ee1485987370973a55bef9) 2024-10-10 07:33:54 +00:00
7a558ac7ae 2024-10-09 nightly release (23c531b3e903764d06601e2f94f05b61038db83c) 2024-10-09 07:33:58 +00:00
1217ddad52 2024-10-08 nightly release (ff95ff5d38d5133ce74543f8a7a769b6dd9e5d72) 2024-10-08 07:34:05 +00:00
d7f1e2141a 2024-10-07 nightly release (d1b87e26e5c4343f5b56bb1e6f89b479b389bfac) 2024-10-07 07:33:51 +00:00
c9a3e50fbf 2024-10-06 nightly release (4061910ba26f3d81bcde29251677bda1dffbe734) 2024-10-06 07:33:44 +00:00
c327365f95 2024-10-05 nightly release (d6f340f66c2a1b0bdf22377d10b073dd0e5a95d6) 2024-10-05 07:33:47 +00:00
e8a3a16596 2024-10-04 nightly release (88e338f4dddd8fa3eac9c63a4b742dfe8aad0302) 2024-10-04 07:33:59 +00:00
76cfea5e2c 2024-10-03 nightly release (5c0ce8d0a6423472959cf17efa92b20160c6f6a5) 2024-10-03 07:33:57 +00:00
4b2970f7cd 2024-10-02 nightly release (18525e185e211b3eab44c67a688e5df8396f6f97) 2024-10-02 07:33:44 +00:00
972a8333fc 2024-10-01 nightly release (156ca01e51f766b1b069c5c6f3d57112a5c8f9ff) 2024-10-01 07:33:57 +00:00
c8887ca3bc 2024-09-30 nightly release (156ca01e51f766b1b069c5c6f3d57112a5c8f9ff) 2024-09-30 07:33:49 +00:00
f8a6ada8af 2024-09-29 nightly release (1d6e0412f5205b1cd709e034526d7f21d6f2d56f) 2024-09-29 07:33:48 +00:00
32ef0376fd 2024-09-28 nightly release (f42e88fea5915012ddb4cd9530f367524bf57019) 2024-09-28 07:33:49 +00:00
5ba404f687 2024-09-27 nightly release (aa56f80ec1d690f40a38893bfe72b88dd34aa7f7) 2024-09-27 07:33:57 +00:00
29f97eb575 2024-09-26 nightly release (76b044d7cb987081aaaf5b381b74c93543023f7f) 2024-09-26 07:33:58 +00:00
21a304b17f 2024-09-25 nightly release (780f4debdbb51347da5b416416392e5849cbfec5) 2024-09-25 07:33:45 +00:00
5fe833157e 2024-09-24 nightly release (e09c5b6046bbe86958f066b09adeed8435d7d518) 2024-09-24 07:33:51 +00:00
64141411e0 2024-09-23 nightly release (f276da7f988b12fad74594aa054197371be17184) 2024-09-23 07:33:48 +00:00
4b5ae4de44 2024-09-22 nightly release (9731ccb9e0c9f09dcd3435a47fc40fe6fb960504) 2024-09-22 07:33:48 +00:00
4d07616615 2024-09-21 nightly release (1a10751731784942dcbb9c0524c1369a29d45244) 2024-09-21 07:33:57 +00:00
4c73f163cd 2024-09-20 nightly release (fe0e9fb385d6e75a01c9feaa459252db09b71839) 2024-09-20 07:33:48 +00:00
89957684e0 2024-09-19 nightly release (e037bb326fdafca243bdb08023bbef93b29a4513) 2024-09-19 07:33:51 +00:00
900998e06b 2024-09-18 nightly release (48d18fbd4cf785e1f69a6555d97a39023a5d199e) 2024-09-18 07:34:22 +00:00
aec9b2ab77 2024-09-17 nightly release (37a08b33bb86ad0fce3db6fc98f90c9e02d77cba) 2024-09-17 07:33:53 +00:00
79d8db5004 2024-09-16 nightly release (c64ae601ba9eb3ad2cd3402a14f6ac83c0ab7eba) 2024-09-16 07:34:04 +00:00
458f88a3af 2024-09-15 nightly release (c64ae601ba9eb3ad2cd3402a14f6ac83c0ab7eba) 2024-09-15 07:33:41 +00:00
a36aa26d30 2024-09-14 nightly release (081c4a966de77dd5187c1cb97d287cae6f3fbc02) 2024-09-14 07:33:47 +00:00
cc185792f2 2024-09-13 nightly release (0cdc6a8dcd7e294b01d8914385bbe45e79c1770d) 2024-09-13 07:34:19 +00:00
f23873cf88 2024-09-12 nightly release (a130ed828ab879aa4a8c3fcaba5148e872ccaf42) 2024-09-12 07:33:46 +00:00
c42ec0f9b5 2024-09-11 nightly release (26e5572dd24acd69b08eb94577f8796a480c9fe0) 2024-09-11 07:33:46 +00:00
584f674aa0 2024-09-10 nightly release (7ec17b49cf89cfeb97272a1baddcc30fa6fa66d8) 2024-09-10 07:33:42 +00:00
995ec16c7a 2024-09-09 nightly release (31c4e0d37d8efc37a0697159e5b9121ec34d5141) 2024-09-09 07:33:44 +00:00
5678da6c98 2024-09-08 nightly release (3bebc09be9845c0779f190489e8d4caa9e2653c8) 2024-09-08 07:33:41 +00:00
9515104a2b 2024-09-07 nightly release (3d734d837be7b065dc36ae808699459c8e73dda3) 2024-09-07 07:33:42 +00:00
e4f495cdb0 2024-09-06 nightly release (06a7dc21c1005750598c37f3adbc031183c74de6) 2024-09-06 07:33:52 +00:00
90cf7dcfbb 2024-09-05 nightly release (a7a53b796b1fcde9a52c86d29d88e12bbf2b4092) 2024-09-05 07:33:46 +00:00
48d4dac077 2024-09-04 nightly release (e000cf0ad980e5d140dc895a646174e9b945cf26) 2024-09-04 07:34:03 +00:00
704c6fc1cb 2024-09-03 nightly release (c140fa1426603322a5a69ef91300f13489db5970) 2024-09-03 07:33:42 +00:00
e8379aab48 2024-09-02 nightly release (c140fa1426603322a5a69ef91300f13489db5970) 2024-09-02 07:33:54 +00:00
00e3eea170 2024-09-01 nightly release (caa04e0caeb5736e9094f6e0667c03585cc90724) 2024-09-01 07:33:53 +00:00
bed3938804 2024-08-31 nightly release (86e03a64e1e9570adfb574bc406cc5f3d8d90209) 2024-08-31 07:33:44 +00:00
603ac39af5 2024-08-30 nightly release (0d5f9787959efa671d390d5ae02a445a3314178c) 2024-08-30 07:33:47 +00:00
e4cd76cf82 2024-08-29 nightly release (41e36e2b46e05b8718ca724f1780040783c621d2) 2024-08-29 07:33:45 +00:00
de66933aaf 2024-08-28 nightly release (55236d0cb7d183f2b64982d8718e9012ae8a40d8) 2024-08-28 07:33:44 +00:00
7e19f8fbcd 2024-08-27 nightly release (55236d0cb7d183f2b64982d8718e9012ae8a40d8) 2024-08-27 07:33:44 +00:00
3bca514ed8 2024-08-26 nightly release (2553278bae5993bd94bae4f04bf4586fb3f30d57) 2024-08-26 07:33:54 +00:00
aa1fc68d51 2024-08-25 nightly release (2553278bae5993bd94bae4f04bf4586fb3f30d57) 2024-08-25 07:34:01 +00:00
d1c7d770de 2024-08-24 nightly release (2553278bae5993bd94bae4f04bf4586fb3f30d57) 2024-08-24 07:33:42 +00:00
5ddb842eb9 2024-08-23 nightly release (255cd75a974389985a7a542be1455210a9c369e2) 2024-08-23 07:34:34 +00:00
ef01a09a2c 2024-08-22 nightly release (255cd75a974389985a7a542be1455210a9c369e2) 2024-08-22 07:33:52 +00:00
401217e3fd 2024-08-21 nightly release (c42ac54d9e817bf0a0366eb78e6c8beba4d5eff5) 2024-08-21 07:33:51 +00:00
02f175d628 2024-08-20 nightly release (92151c814ba715fe7d1f5648b0ae6950dceee6b7) 2024-08-20 07:33:41 +00:00
d6eae72783 2024-08-19 nightly release (ae000635700e78161e0ed1a18f62b5db4030e343) 2024-08-19 07:33:48 +00:00
748db193d7 2024-08-18 nightly release (b4a1673a6741e183856cf3503f0574d3ac881ce0) 2024-08-18 07:33:38 +00:00
77b78fab0a 2024-08-17 nightly release (12b8e29203dfb8f9c3b1a4c438aac4981a0899ae) 2024-08-17 07:33:42 +00:00
c89b05606e 2024-08-16 nightly release (29c4b4ea5a23ec41b98def0f50a0294c0bdc5c18) 2024-08-16 07:33:42 +00:00
0f8aad57ae 2024-08-15 nightly release (3965f118376a01382b0d1d3eea612188c4847ec8) 2024-08-15 07:33:46 +00:00
3a023a67c4 2024-08-14 nightly release (c2eeda5da0edfbb59673a229b085a80945514fc6) 2024-08-14 07:33:39 +00:00
839ac8af16 2024-08-13 nightly release (d4b31f7bcf962560768b1ee24a2ee5a1e914b8ba) 2024-08-13 07:33:53 +00:00
954b7d3faa 2024-08-12 nightly release (e7b870c88bc3b854a95399a96a274d2f1f908172) 2024-08-12 07:33:41 +00:00
22f2d2c094 2024-08-11 nightly release (a7912bf9dc39b934baf5e04b436cc2134776c10d) 2024-08-11 07:33:35 +00:00
db707c9b5a 2024-08-10 nightly release (05de2b2d0fd582e102f469e55a8a7212aef94a70) 2024-08-10 07:33:34 +00:00
94cf247e0e 2024-08-09 nightly release (bb6eef8ed1de0eb48bde10a07da57b6acc82fb05) 2024-08-09 07:33:42 +00:00
7d5462bfd6 2024-08-08 nightly release (ac6398b630db42570228b95ffbdeab12b7684357) 2024-08-08 07:33:49 +00:00
6d2050e0db 2024-08-07 nightly release (919e38424729fd9499f99a7d9e0ed994669954ef) 2024-08-07 07:33:45 +00:00
ed158d3e1a 2024-08-06 nightly release (345bea01dc69d9c31a4954c299767ccecd702d3d) 2024-08-06 07:33:43 +00:00
b9251a4598 2024-08-05 nightly release (c7cfa5172139737bf75afbd4a7920b1a02b1dcb2) 2024-08-05 07:33:44 +00:00
d6ea1eb2bc 2024-08-04 nightly release (6ec4af6865dd884f984c9dbcb273ae26e3825481) 2024-08-04 07:33:35 +00:00
0cf4254a75 2024-08-03 nightly release (419b76c4ac80c8b1c95120cd52db622333a3a688) 2024-08-03 07:33:43 +00:00
3974b13308 2024-08-02 nightly release (93979e70631ae90afe26c25ef620b311c9b6a8f5) 2024-08-02 07:33:37 +00:00
2beeb996cb 2024-08-01 nightly release (f0da167ce55ddbbe4f0138ed0f0804008069ddad) 2024-08-01 07:33:47 +00:00
e84a29505c 2024-07-31 nightly release (afb04d78c822bbad35b9c72cb21408525dc186f9) 2024-07-31 07:33:42 +00:00
ea5d26ff81 2024-07-30 nightly release (05a8540041cea936a63355c2e38b7b3beb5ce168) 2024-07-30 07:33:43 +00:00
0e29c08c0d 2024-07-29 nightly release (500aea8d5033fd3540c6ed325dd80e7e1420b0f3) 2024-07-29 07:33:36 +00:00
246f9c93b2 2024-07-28 nightly release (8f5cf464054a191c23219e49cc6e3203b2396cfb) 2024-07-28 07:33:36 +00:00
092902bbd4 2024-07-27 nightly release (28fd2e905da8484de38faf4e04073e896f7a95f7) 2024-07-27 07:33:39 +00:00
4e12f36799 2024-07-26 nightly release (58b8704f28f569fc08fadacc12830346251dd297) 2024-07-26 07:33:57 +00:00
46fcfc993e 2024-07-25 nightly release (14495ce28876e6c19733d32e07f913dba6b55771) 2024-07-25 07:33:39 +00:00
d3def8fd79 2024-07-24 nightly release (3aa45cae7750070c25e99fc49409ab311aa7db0b) 2024-07-24 07:33:43 +00:00
d9e6b14e89 2024-07-23 nightly release (406f510f89dd7561eec8da9321d8572bfad64e72) 2024-07-23 07:33:48 +00:00
13bc64a43d 2024-07-22 nightly release (c2425a3b572328c6c1fdadc080f8a83c6357f945) 2024-07-22 07:34:28 +00:00
571ca813dc 2024-07-21 nightly release (1d1d074072ecb0aa6ca95e3f43221d2275e16d74) 2024-07-21 07:33:39 +00:00
2c2b18cf11 2024-07-20 nightly release (7c299b46ca4d056835f7da0d6950939106469edb) 2024-07-20 07:34:08 +00:00
c0f37f35d9 2024-07-19 nightly release (367213a608528ee74e67e03bf11f775e263ef480) 2024-07-19 07:33:36 +00:00
5147aeb49a 2024-07-18 nightly release (874bbc53c9dfdf108e8a8af63109c06f9ff7f6e4) 2024-07-18 07:33:37 +00:00
bd12fbe652 2024-07-17 nightly release (7919f0b952272b83886021b172a8d56a893917ba) 2024-07-17 07:33:41 +00:00
4e39cdceb1 2024-07-16 nightly release (9ab8d47f9d27f6f4102e7786fcd604861d8e480c) 2024-07-16 07:33:36 +00:00
1c036b3ea4 2024-07-15 nightly release (6f275ae4d06b82a2b41a04516d793ad15d45955a) 2024-07-15 07:33:45 +00:00
c02ee0cb6a 2024-07-14 nightly release (f9f85bfc0b5b63274fa3fdd22afb0a456abf53f4) 2024-07-14 07:34:08 +00:00
e4e5c41b7e 2024-07-13 nightly release (d727e2f2d12c825879acbea10abb7b08bc8b0691) 2024-07-13 07:33:32 +00:00
f8279e35f3 2024-07-12 nightly release (18b7633bfbf859904222aad90006b54ae562766c) 2024-07-12 07:33:35 +00:00
a9a7d1e7ee 2024-07-11 nightly release (ceedee23ec2cec14d12c2edd106d9c239dae95a7) 2024-07-11 07:33:41 +00:00
0bf00552b8 2024-07-10 nightly release (007e75958fd2e822b5266df500cf791c14b92b62) 2024-07-10 07:33:45 +00:00
fc864dcf35 2024-07-09 nightly release (1e61cb8c871c876b6f8166d173dabd1440bda4f0) 2024-07-09 07:33:45 +00:00
32e74ed040 2024-07-08 nightly release (7128504424ca54311efdf22f2c8425291586860e) 2024-07-08 07:33:56 +00:00
1a71eb647b 2024-07-07 nightly release (7128504424ca54311efdf22f2c8425291586860e) 2024-07-07 07:33:39 +00:00
cb92c66e9c 2024-07-06 nightly release (7128504424ca54311efdf22f2c8425291586860e) 2024-07-06 07:34:09 +00:00
419de13620 2024-07-05 nightly release (7128504424ca54311efdf22f2c8425291586860e) 2024-07-05 07:33:46 +00:00
a532737602 2024-07-04 nightly release (9108b74bbc62eeb48e668ea67525445d01568c65) 2024-07-04 07:33:38 +00:00
6d35c780e0 2024-07-03 nightly release (3b77b122c5ce3033df1e1d541de2a3d420225c9d) 2024-07-03 07:34:19 +00:00
d7ee373e90 2024-07-02 nightly release (9ae78a578caff195821ad535a9e8d8ef59552142) 2024-07-02 07:33:46 +00:00
7b2cee6dc9 2024-07-01 nightly release (9ae78a578caff195821ad535a9e8d8ef59552142) 2024-07-01 07:34:15 +00:00
f28393cfc9 2024-06-30 nightly release (9ae78a578caff195821ad535a9e8d8ef59552142) 2024-06-30 07:33:39 +00:00
e0d8e538f0 2024-06-29 nightly release (a32ce5ce344b384ad4c6642895835c10ae7872c8) 2024-06-29 07:33:48 +00:00
364e6692f3 2024-06-28 nightly release (424068d0d22908294f2e0705d7227c37244b9319) 2024-06-28 16:02:35 +00:00
2f21c45513 2024-06-28 nightly release (d4b6ff6fbe31385ca9e5e299ff616203f5b4717d) 2024-06-28 07:33:37 +00:00
8b2405fd53 2024-06-27 nightly release (cdbd6542d015bae9b850602834c4f22e3001084b) 2024-06-27 07:33:34 +00:00
bde150a53f 2024-06-26 nightly release (90d5a6f001ef3ea40ef91ae20e050e39a6d550de) 2024-06-26 16:45:19 +00:00
4f096464a9 2024-06-26 nightly release (00f675bb4c2ec02bb5ffecfc75571026e220701c) 2024-06-26 07:33:42 +00:00
9e60d009a5 2024-06-25 nightly release (00f675bb4c2ec02bb5ffecfc75571026e220701c) 2024-06-25 18:29:51 +00:00
a215657b4a 2024-06-25 nightly release (00f675bb4c2ec02bb5ffecfc75571026e220701c) 2024-06-25 17:15:56 +00:00
2a0a69813f 2024-06-25 nightly release (00f675bb4c2ec02bb5ffecfc75571026e220701c) 2024-06-25 15:58:29 +00:00
1125d755bf 2024-06-25 nightly release (00f675bb4c2ec02bb5ffecfc75571026e220701c) 2024-06-25 07:33:37 +00:00
bbd0babd09 2024-06-25 nightly release (00f675bb4c2ec02bb5ffecfc75571026e220701c) 2024-06-25 04:25:54 +00:00
475c553dc8 2024-06-25 nightly release (00f675bb4c2ec02bb5ffecfc75571026e220701c) 2024-06-25 03:43:16 +00:00
f9a5736c12 2024-06-24 nightly release (17d1723aeeadbfc6d33c02ab56c5aacb8c671876) 2024-06-24 21:35:25 +00:00
9bb4dd8ceb 2024-06-24 nightly release (920ebccca2644881ece4f9e07b4a4b4787b8f2b1) 2024-06-24 07:33:38 +00:00
91c197583a 2024-06-23 nightly release (920ebccca2644881ece4f9e07b4a4b4787b8f2b1) 2024-06-23 07:33:47 +00:00
74ca07380a 2024-06-23 nightly release (920ebccca2644881ece4f9e07b4a4b4787b8f2b1) 2024-06-23 01:49:12 +00:00
cb859f172e 2024-06-22 nightly release (92ca17d85def4a62aee04fcea3576cd0c07a0554) 2024-06-22 07:33:49 +00:00
769190cb3b 2024-06-21 nightly release (63a724d8e1fd49e64e31879c8545b285d213efe3) 2024-06-21 07:34:06 +00:00
5996356b3e 2024-06-20 nightly release (19f3abcde45f686e3d270d41c2c919d7598cec19) 2024-06-20 07:33:34 +00:00
505ff10e75 2024-06-19 nightly release (99f042d336b53844b509406f1ecf78cb6f5e5714) 2024-06-19 07:33:50 +00:00
23e34b0716 2024-06-18 nightly release (c017c97333dfb9d17f2e5357980241827e50e8d5) 2024-06-18 07:33:38 +00:00
8410bf5cd1 2024-06-17 nightly release (f9dae86222aaf15ea085c7774da70781bae46ff9) 2024-06-17 07:33:46 +00:00
db04d3cd9e 2024-06-16 nightly release (6079c5091091d872b8dafbaa4e31a5b6194647ad) 2024-06-16 07:33:35 +00:00
d69902da7e 2024-06-15 nightly release (2d01f877373d3255fa8b77c714c2ca17d08e6126) 2024-06-15 07:33:36 +00:00
3d45df9a51 2024-06-14 nightly release (8c20f53a5e24209624670ecd39841bd71f38d11d) 2024-06-14 07:33:45 +00:00
4ecd3982af 2024-06-13 nightly release (d630e1e838e7416b6e27572a91407c4447a00734) 2024-06-13 07:34:39 +00:00
b5335bf346 2024-06-12 nightly release (86b5df3e71e6b786347ee5fa69daa054849bea2e) 2024-06-12 07:33:44 +00:00
c8e5a721d0 2024-06-11 nightly release (734e8f6ad7e7f0fa0341fb658f1f986225173f5f) 2024-06-11 07:33:40 +00:00
481ceefe2a 2024-06-10 nightly release (df43d5843edd9abd95d2c039670bce51375d9c06) 2024-06-10 07:33:37 +00:00
963d450511 2024-06-09 nightly release (f681e3689b857b8811f19d60d439bfb3fb2dd2d3) 2024-06-09 07:33:33 +00:00
6a855e6923 2024-06-08 nightly release (6e5c2a1a3bc9507ec459f3e01f5e492d8bef122a) 2024-06-08 07:33:39 +00:00
9f88f70e2e 2024-06-07 nightly release (65aa16f968af2cd18ff8c25cc657e7abda594bfc) 2024-06-07 07:33:43 +00:00
529bedad3e 2024-06-06 nightly release (ffaea656b5d8ff6518669494cc8f664b94f8e8b1) 2024-06-06 07:33:42 +00:00
d3551df158 2024-06-05 nightly release (3bcc3cddb580bf0f0f1958cfe27001f236eac2c1) 2024-06-05 07:33:52 +00:00
b94ddab65b 2024-06-04 nightly release (1208347d0912d1236ae43257e2914767e35c3b36) 2024-06-04 07:33:37 +00:00
1b6f0e0d5f 2024-06-03 nightly release (7e97b33fbbb24fa5876500be764c97f51b74ac0e) 2024-06-03 07:33:39 +00:00
074e4f1c80 2024-06-02 nightly release (c19ad112f65ab88af3eeb319dda0675c076b0b67) 2024-06-02 07:33:38 +00:00
70b03a1d35 2024-06-01 nightly release (121c55d8d12a878b12eab00a7cebae2e2fa47ee7) 2024-06-01 07:33:43 +00:00
4d012a7a2f 2024-05-31 nightly release (029af29e6d2a91bc8a6e15d445fec42a49c0454e) 2024-05-31 07:34:17 +00:00
0bbe39cc0e 2024-05-30 nightly release (d66f12674cfe0151a86dc10b8de216f83bf42e6e) 2024-05-30 07:34:02 +00:00
c35e8711f4 2024-05-29 nightly release (0ff2f8b52248323bbe25108b64e706c43390cb72) 2024-05-29 07:33:53 +00:00
4fbc2ec72d 2024-05-28 nightly release (0ff2f8b52248323bbe25108b64e706c43390cb72) 2024-05-28 07:33:37 +00:00
2995cdef9a 2024-05-27 nightly release (6aa5bb1a76dee8112f1a9e7c194c790b5cdc6462) 2024-05-27 07:33:37 +00:00
549167fcb3 2024-05-26 nightly release (ee6cb6daa173896f8ea1876266a19775aaa4f610) 2024-05-26 07:33:37 +00:00
99b987f154 2024-05-25 nightly release (ed838793dfb530273fec30ea64954333672794e3) 2024-05-25 07:33:32 +00:00
269ad139c7 2024-05-24 nightly release (cb6ef68caa22c1a2f7a4e8583c0e7c923c8bfd17) 2024-05-24 07:34:51 +00:00
534d4bbde2 2024-05-23 nightly release (4f14282e350a6c9a0a280083c286f7d672fa3ebd) 2024-05-23 07:33:35 +00:00
1aa713bf08 2024-05-22 nightly release (608a11c4963dbba86189286da4a0aa58c0779126) 2024-05-22 07:33:51 +00:00
3149d44669 2024-05-21 nightly release (31ba6ee49bdbd7dd6c2a3c77ad31cc46aec2049e) 2024-05-21 07:33:38 +00:00
2a8ecff0c9 2024-05-20 nightly release (5fb11cda4fe60c1a7b30e6c844f84ce8933ef953) 2024-05-20 07:33:39 +00:00
bca6d8b2fe 2024-05-19 nightly release (71b6459edc19dac02b6e559977a0f615bf451210) 2024-05-19 07:33:36 +00:00
b138ead39a 2024-05-18 nightly release (d4704dcacc543023e7a746263a970bef155d58c4) 2024-05-18 07:33:43 +00:00
7fa9edf793 2024-05-17 nightly release (da1fc85d60fcf0bd1e8638d643a7c0c6560c3a5f) 2024-05-17 07:33:44 +00:00
a86434a3ca 2024-05-16 nightly release (315389bfed3a0b29752997862e18681169ebd501) 2024-05-16 07:33:42 +00:00
e5cd7bea02 2024-05-15 nightly release (1485621ccbb5367936ba6da51ba896387416c353) 2024-05-15 07:33:42 +00:00
8ea7ef39bc 2024-05-14 nightly release (9a2beb862d9c30f037c9b2eac878ec3f9227a5e2) 2024-05-14 07:33:54 +00:00
708a49f3e2 2024-05-13 nightly release (1c3fe8403365db3cc9b75524ae742e3027b745e2) 2024-05-13 07:33:36 +00:00
2de26f12a8 2024-05-12 nightly release (02093b6c6ae1046368e2500881d0bb5880873386) 2024-05-12 07:33:45 +00:00
d4d98b914c 2024-05-11 nightly release (c1690a3e12dd4a748af9827e84dbe8fa5273ee51) 2024-05-11 07:33:39 +00:00
8d3ad715c8 2024-05-10 nightly release (fcbf2b61e6f40048ef0e6d77360c86771956cc9c) 2024-05-10 07:33:33 +00:00
8f863f5efd 2024-05-09 nightly release (ff090c693751f564f45951f1b13c11478892799d) 2024-05-09 07:33:46 +00:00
e1c37ce2c1 2024-05-08 nightly release (50073127b5e49b2b75a912d73a70ecb61890a32d) 2024-05-08 07:34:30 +00:00
e4f522910a 2024-05-07 nightly release (48b6c8dbc376db4406a979b35cd6909bcb428931) 2024-05-07 07:33:24 +00:00
3e7378d00b 2024-05-06 nightly release (fc183f0bdec30baa6686e13720adae077c332bdd) 2024-05-06 07:33:40 +00:00
1b7523fbe9 2024-05-05 nightly release (6d30803d64953955df63da56833bf4eb52249aae) 2024-05-05 07:33:44 +00:00
48aefeb4a4 2024-05-04 nightly release (d4727fd4ebd42936a1bae7b7f44ee9a038fd643e) 2024-05-04 07:33:42 +00:00
5969fe4abd 2024-05-03 nightly release (a40d6df448de1acb263ed8f6ff9e7d26f5a1a161) 2024-05-03 07:33:33 +00:00
267a1102f8 2024-05-02 nightly release (b03fb49ed8d812ceba3741432ac1f9de3bd1650e) 2024-05-02 07:33:34 +00:00
01c419df43 2024-05-01 nightly release (1c905f1be34683480a33e36104b8482442d7c1fd) 2024-05-01 07:33:43 +00:00
dca7af5889 2024-04-30 nightly release (e7846447e03d44baf4437cf122fb6e70b0c1d472) 2024-04-30 07:33:36 +00:00
afb4c766d2 2024-04-29 nightly release (cc06c00a56a78e3ecdc1b5618e1af4a1a2be7cd5) 2024-04-29 07:33:40 +00:00
34ade3521c 2024-04-28 nightly release (7478b7f1cac9686f00edf3db4667cf86d2421531) 2024-04-28 07:33:44 +00:00
9179db815b 2024-04-27 nightly release (5944a5355501cb45fac966d3cf4277cbc718eff1) 2024-04-27 07:33:41 +00:00
38547e9613 2024-04-26 nightly release (769b1e6cdca56ee91a61ee6b1502a9faa1819106) 2024-04-26 07:33:36 +00:00
734a000f16 2024-04-25 nightly release (13ab24f1923359cdfe795a32cdd3d753f940efbe) 2024-04-25 07:33:48 +00:00
c5b898e77e 2024-04-24 nightly release (b91f83f18139a6ed2626c30979a38e533d4c7d7c) 2024-04-24 07:33:44 +00:00
6d1c678c58 2024-04-23 nightly release (7706cd7d12781b8c537dd045745738d60c6c31f1) 2024-04-23 07:34:04 +00:00
0a3e5f5bad 2024-04-22 nightly release (b1984237a0fb32b760c1b84d6d02d2f0f7ed293b) 2024-04-22 07:33:34 +00:00
02b1ebb3dd 2024-04-21 nightly release (bad8d25881d850eaf0b326f6ce5c78305e38c001) 2024-04-21 07:33:29 +00:00
db26423735 2024-04-20 nightly release (bad8d25881d850eaf0b326f6ce5c78305e38c001) 2024-04-20 07:33:37 +00:00
ee5e704c78 2024-04-20 nightly release (bad8d25881d850eaf0b326f6ce5c78305e38c001) 2024-04-20 03:06:07 +00:00
e0c77fb573 2024-04-19 nightly release (c9db59e9e4d425f9d4e9f55247888c24b0d638e8) 2024-04-19 18:17:20 +00:00
dc9eea4365 2024-04-19 nightly release (4946638f06e5916ea9bd0f790ff620bdb78a92a3) 2024-04-19 07:33:36 +00:00
0a0cedaf40 2024-04-18 nightly release (9385ef2a5dbd62cb877e863c91ff29a43c340456) 2024-04-18 19:38:08 +00:00
d8b31eb548 2024-04-18 nightly release (14162eecfcb5cc11139260c034c653e972a9073a) 2024-04-18 07:33:30 +00:00
449c28cb0d 2024-04-17 nightly release (dd3cea3291346e66a870bbec51e4d1a3550300db) 2024-04-17 07:33:43 +00:00
871442ef61 2024-04-16 nightly release (67bd43b5106bed6365f1986229d7c32079653e76) 2024-04-16 21:06:16 +00:00
0b80497b9d 2024-04-16 nightly release (e4efa311f1c692813befc45142d668f35a66392b) 2024-04-16 07:34:03 +00:00
42cbe0248e 2024-04-15 nightly release (19f50333e91e9e8b20a78517becd74bca70c7d46) 2024-04-15 07:33:32 +00:00
e275bb87c8 2024-04-14 nightly release (88a71594933b2464d9d8b6b3533c5a945a4ac2ff) 2024-04-14 08:03:45 +00:00
99d3d33091 2024-04-13 nightly release (7e3f80f00f3995e335bd6313b8c4be998cc4e2cd) 2024-04-13 07:33:52 +00:00
19db4687de 2024-04-12 nightly release (868e5ced5df34f1aef3703654f76e03f5126b534) 2024-04-12 07:33:35 +00:00
ad9f88b232 2024-04-11 nightly release (793df52dc52f5f5f657744abfd7681eaba7a21f9) 2024-04-11 07:34:32 +00:00
4dae33d814 2024-04-10 nightly release (65710d95c9adcc166e4d4a19ac16b8d7516fc87b) 2024-04-10 07:33:43 +00:00
74f1665940 2024-04-09 nightly release (d8e0c26e642bf8e44cc6e8d46822d54957b1c660) 2024-04-09 07:33:36 +00:00
a3fc530d82 2024-04-08 nightly release (bb04f3f66a5b92f0bed3712689f57774f00db349) 2024-04-08 07:33:35 +00:00
903938e95d 2024-04-07 nightly release (e3ea31662334770bbbb6da4abd881abc875e04c3) 2024-04-07 07:33:34 +00:00
a4ae0b67c2 2024-04-06 nightly release (22b99871442fc3c78ec173894c017d6d98996501) 2024-04-06 07:33:35 +00:00
8f9cba17bb 2024-04-05 nightly release (d8717c2d68bc0a8bda7e8ad823a0d6c2d8aae934) 2024-04-05 07:33:29 +00:00
3d14e74ccb 2024-04-04 nightly release (669462817071d1badd88a832a7c38b9bafde2233) 2024-04-04 07:33:48 +00:00
9da0ebeb73 2024-04-03 nightly release (15bd81bfafa86fec9d675e7f071c867c852ebe8f) 2024-04-03 07:33:51 +00:00
16261ef1eb 2024-04-02 nightly release (4d5cdc2e1e62ec400f4355cb9d3b0d2b5af0fbf8) 2024-04-02 07:33:38 +00:00
e1c8416590 2024-04-01 nightly release (781e8d2201c1e2aaeccbbc7b7b13f9322b481bc9) 2024-04-01 07:33:45 +00:00
4af23dd2d2 2024-03-31 nightly release (35c493f2cf9b623bfdc7e6b34dc1cb39690a7919) 2024-03-31 07:33:39 +00:00
70a3132121 2024-03-30 nightly release (f4ff063c333f286d4384523bac67c047aca4d7b9) 2024-03-30 07:33:42 +00:00
2f5e4e1df7 2024-03-29 nightly release (3beb9d85a6501d8df5a89e2cc2d7cb0f8f94dbfc) 2024-03-29 07:33:31 +00:00
096c0ed5e4 2024-03-28 nightly release (12116aee6852df2b040255b8fcc7deb52b897792) 2024-03-28 07:34:33 +00:00
384cbf2346 2024-03-27 nightly release (f2c1060de3cdddbfefcab11e547211993d0f9cfa) 2024-03-27 07:33:38 +00:00
a166d4b816 2024-03-26 nightly release (5e66bf5f42104bc60a8e77b51c84a4cce81efdd8) 2024-03-26 07:33:52 +00:00
c18fcd604f 2024-03-25 nightly release (deeeaded1ff45d0e1e666e42cadf2026594b6426) 2024-03-25 07:33:31 +00:00
848a2e8f52 2024-03-24 nightly release (f0d461beacded34abe196c72ec4bcdb55bf01793) 2024-03-24 07:33:29 +00:00
bbafd43d86 2024-03-23 nightly release (c677221798d8ce87c97aac1bd9ae34af0767c383) 2024-03-23 07:33:27 +00:00
9efd8fed32 2024-03-22 nightly release (ef0d470eb372a5e68f6332bea9b1df26fca28b59) 2024-03-22 07:33:31 +00:00
cfaed59ce7 2024-03-21 nightly release (cc0cadaf4c76c91d19474a1a512c9bc31e2c8602) 2024-03-21 07:33:42 +00:00
90fdee15be 2024-03-20 nightly release (6b5259e50704aede43c87fed33f64224f9047087) 2024-03-20 07:33:56 +00:00
0e66636599 2024-03-19 nightly release (5bc7f7f97760d2d485621f9f30d0316e1f2440c6) 2024-03-19 07:33:41 +00:00
c823f7a4de 2024-03-18 nightly release (7380585d9755eaef95bec8994a12e1fc6510f81b) 2024-03-18 07:33:33 +00:00
ad27e5012d 2024-03-17 nightly release (6f74b7607207054c1f5331183ab725640c99fe8d) 2024-03-17 07:33:37 +00:00
c5774a585f 2024-03-16 nightly release (f0b9a8344a38d2e865d08f084138ac2911a66ad1) 2024-03-16 07:34:28 +00:00
285db4990f 2024-03-15 nightly release (e4fda049c2bfe5a2e3aa0228a3792de87b4f670b) 2024-03-15 07:33:35 +00:00
8ef78d58d3 2024-03-14 nightly release (5b90074540577267c29f5f784be123ee54f6491d) 2024-03-14 07:33:44 +00:00
2447af7e49 2024-03-13 nightly release (9f235971f02e0d53038f5bcef9b7018be2ac8c6d) 2024-03-13 07:34:36 +00:00
a9e4e9b51d 2024-03-12 nightly release (6ca9ae4f8693639c395544327f7e362441a58c79) 2024-03-12 07:33:34 +00:00
1a6ae7b963 2024-03-11 nightly release (f11f2b0d55b1aa322f73f4bb521beaf9d4563603) 2024-03-11 07:33:34 +00:00
715d399539 2024-03-10 nightly release (41286f1505ffb214d386d72e4b72ebd680a4a475) 2024-03-10 07:33:30 +00:00
ffcaab7876 2024-03-09 nightly release (d482614fec5fb9bccb49bf4ee4ab561e872c0f50) 2024-03-09 07:33:47 +00:00
55e9301321 2024-03-08 nightly release (953c6c37cbfcc894963120666dbf066977931885) 2024-03-08 07:33:57 +00:00
ce01333322 2024-03-07 nightly release (a2854ae904c55ebf19031ca6e883e5dcbb6a4a9a) 2024-03-07 07:33:32 +00:00
c992f0fc38 2024-03-06 nightly release (dad1b765848c4f52501c4c60b1c3e6fbd3cc8837) 2024-03-06 07:33:41 +00:00
65d5412d00 2024-03-05 nightly release (6566b3db677a6d3f2f90a3fcd4dd1dd2d9d0bfc4) 2024-03-05 07:33:46 +00:00
c652a65065 2024-03-04 nightly release (581fe26792849a80f04feaa7f8bdec69b7f41dd8) 2024-03-04 07:51:50 +00:00
0586ca040c 2024-03-03 nightly release (581fe26792849a80f04feaa7f8bdec69b7f41dd8) 2024-03-03 07:33:40 +00:00
de87c0a689 2024-03-02 nightly release (581fe26792849a80f04feaa7f8bdec69b7f41dd8) 2024-03-02 07:33:26 +00:00
4be1e6af8b 2024-03-01 nightly release (2e84d01d0576a31a6387e4ccc195f11449fb875a) 2024-03-01 07:34:16 +00:00
574ad2898e 2024-02-29 nightly release (f5b99976adcbb01fd71bd0a39ea15bdac6c9e48a) 2024-02-29 07:33:43 +00:00
c019093955 2024-02-28 nightly release (9c597ff137ead9f7f7ec8fdcbf473de2d328e61b) 2024-02-28 07:33:41 +00:00
738f032fb9 2024-02-27 nightly release (a1c641f11809c1f04e1027086f44b1b8f8427dd9) 2024-02-27 07:33:39 +00:00
29e2492945 2024-02-26 nightly release (834c7a1d3ea07878ad87d127ee28606fc140b552) 2024-02-26 07:34:44 +00:00
53f5035912 2024-02-25 nightly release (5c7b761f8e748fe45c8e2e29563df637ae651917) 2024-02-25 07:33:22 +00:00
ea9f12d7d1 2024-02-24 nightly release (79f059987eead42b9279e31e28ed6fd697630d36) 2024-02-24 07:33:36 +00:00
d25357d14e 2024-02-23 nightly release (36c1cc962aaef854d2388a5ecfde230d40bcc1d6) 2024-02-23 07:33:36 +00:00
f8fa3bf4c8 2024-02-22 nightly release (fff9d98e58cda4ad67fef6d0739f684ca7d4bbec) 2024-02-22 07:33:34 +00:00
fe8007dad8 2024-02-21 nightly release (becfda005e524f93b1efed64917a129ef6778135) 2024-02-21 07:33:33 +00:00
8efa066dc0 2024-02-20 nightly release (becfda005e524f93b1efed64917a129ef6778135) 2024-02-20 07:33:29 +00:00
b57318ddcc 2024-02-19 nightly release (becfda005e524f93b1efed64917a129ef6778135) 2024-02-19 07:33:31 +00:00
672f086ea7 2024-02-18 nightly release (becfda005e524f93b1efed64917a129ef6778135) 2024-02-18 07:33:26 +00:00
d70e8ef6c8 2024-02-17 nightly release (becfda005e524f93b1efed64917a129ef6778135) 2024-02-17 07:33:36 +00:00
0747ef0bfb 2024-02-16 nightly release (62e5840b36b6790a5008faa76a920c6d154897b9) 2024-02-16 07:33:25 +00:00
04a9a7cd1a 2024-02-15 nightly release (cd08dc37f831f7b7deabdc92893758de84c4d3d9) 2024-02-15 07:33:42 +00:00
9debfae3d5 2024-02-14 nightly release (16369816a2e1c298fe5d15a439e922d10eb1894b) 2024-02-14 07:33:29 +00:00
98d4762774 2024-02-13 nightly release (2502a011108b0592dd6dd34e5a61b2d52b95160e) 2024-02-13 07:33:27 +00:00
633abee414 2024-02-12 nightly release (dcb08a7044d986ceecd7252fdb2dd0e10501587a) 2024-02-12 07:33:37 +00:00
fede3c1a2f 2024-02-11 nightly release (3ab08946d5052eaeda11d683d6a58e801a032755) 2024-02-11 07:33:40 +00:00
8f9cff839c 2024-02-10 nightly release (42ca82dfb1eb133b287b881c346a0032c1c2a08e) 2024-02-10 07:33:28 +00:00
1396090c1f 2024-02-09 nightly release (930b60f5aa7e17402491900a545d96822796b638) 2024-02-09 07:33:28 +00:00
0b66915bb5 2024-02-08 nightly release (5f6b35915af98fac741998edb55aeeba4aaa3794) 2024-02-08 07:33:36 +00:00
3cbc8e89fd 2024-02-07 nightly release (d0ca849fdf9807e730f91ce8e86d126b241e0940) 2024-02-07 07:33:40 +00:00
7f3f3c3d68 2024-02-06 nightly release (12ac3ba383af99733ec23fcd53c7e29f70b68371) 2024-02-06 07:33:48 +00:00
e795fa298a 2024-02-05 nightly release (b8307513e57f8beaf99daff342a23d705a417e11) 2024-02-05 07:33:36 +00:00
68d3fec0cb 2024-02-04 nightly release (8f82a44a5beed0f205a7f273b9f062da43d65679) 2024-02-04 07:33:30 +00:00
6517e8e586 2024-02-03 nightly release (ce40ee8ecdfdecd48ffcec4fced35f16a77f268d) 2024-02-03 07:33:21 +00:00
aaafe2673d 2024-02-02 nightly release (08472a4fd55881260cbad8a15260528e6c4bee04) 2024-02-02 07:34:01 +00:00
671f5d2d7f 2024-02-01 nightly release (4cba1dd0c3e7f625856566ae00d89d8ee2e8b990) 2024-02-01 07:33:32 +00:00
e3133a2234 2024-01-31 nightly release (e3cde685340d2c5c752428b37449ba75f59488af) 2024-01-31 07:33:40 +00:00
1e875b454f 2024-01-30 nightly release (dcc077eea2f95a9d5caa65eeca4d8c73e207f61d) 2024-01-30 07:34:34 +00:00
4e2aa5dbb8 2024-01-29 nightly release (890d8e66925ff7bb1b765087ad921ebc1bdebf48) 2024-01-29 07:33:38 +00:00
4749337721 2024-01-28 nightly release (2ed0af2bdeb2a5e0df78b22eab04d468f8db239e) 2024-01-28 07:33:22 +00:00
8f8d7de630 2024-01-27 nightly release (fe10b1800f5df432532fc91e0d553a521ec53479) 2024-01-27 07:33:29 +00:00
b12247c7ad 2024-01-26 nightly release (0c5da6100f5426173a64da5873fb565553c8510e) 2024-01-26 07:33:42 +00:00
86adc78cb3 2024-01-25 nightly release (2d7a360911fb7b27be82c51ca86b4b34b6f1b087) 2024-01-25 07:33:46 +00:00
54fee3b5dd 2024-01-24 nightly release (26968cefb0f0ddf31650015c95bbc11e8eaf88ec) 2024-01-24 07:33:42 +00:00
01a5c71e1d 2024-01-23 nightly release (5ec2d7959d1ef1e8eeacc5e59bbf0f8b2dda1ea6) 2024-01-23 22:34:47 +00:00
6458e8cbc2 2024-01-23 nightly release (3708f2608e932b588ae7d73788b969cf83ece8e8) 2024-01-23 07:33:38 +00:00
72fcb9ad66 2024-01-22 nightly release (39df084001c54cca5fe3174176f9b0206ddb7dcf) 2024-01-22 07:33:42 +00:00
4f9be7c2d0 2024-01-21 nightly release (949a76a7f001cc4ec0d8e14071d264f35b5f8a8a) 2024-01-21 07:33:40 +00:00
ffb3d30801 2024-01-20 nightly release (15d568d62142f207734c29a370d6e7ce0e7753de) 2024-01-20 07:33:32 +00:00
5a2ff3fc7c 2024-01-19 nightly release (f302a0d380cf2a6e8c2ae7e67c6859503a038cf7) 2024-01-19 07:33:38 +00:00
2b31a65125 2024-01-18 nightly release (02c96f69493ebd06d940a778a2d3d89c660a7ce4) 2024-01-18 07:33:35 +00:00
7b9dec1bfc 2024-01-17 nightly release (735715e6d31fb4356cc203824e0600b5f5dcb433) 2024-01-17 07:33:39 +00:00
24569d3416 2024-01-16 nightly release (28bb31e4a588f3fa198e927439fe09c871201aab) 2024-01-16 07:33:45 +00:00
cb0c26e8d3 2024-01-15 nightly release (19502ff6aaba0bce823989783d01b996469482f9) 2024-01-15 07:33:37 +00:00
6c531039fa 2024-01-14 nightly release (38c18f382577ee4a5587fd1876d2e2b546d004b8) 2024-01-14 07:33:30 +00:00
aa962d8943 2024-01-13 nightly release (96163eb010d233f97f114257ac1066def0164769) 2024-01-13 07:33:29 +00:00
ff10016dc5 2024-01-12 nightly release (b62ba82cdc2123d5542b18c035d52d28aee5c01a) 2024-01-12 07:33:40 +00:00
1beb432db5 2024-01-11 nightly release (ca23c56efcda3a0037252272a88b78936a5a9187) 2024-01-11 07:34:37 +00:00
f8e4c22ee2 2024-01-10 nightly release (8bcdde5058658cc193c94a7f1eb16660553dc35a) 2024-01-10 07:33:36 +00:00
03969cb2d2 2024-01-09 nightly release (428807f9bcd9bb32e0369c6b9c6f12fa4a4080e9) 2024-01-09 07:33:44 +00:00
da46ac2bbe 2024-01-08 nightly release (57491d2046b7ddcdf5588dea3cc1dee6c1eb366b) 2024-01-08 07:33:33 +00:00
2f05263756 2024-01-07 nightly release (95041829c8a76755d22df9bd711f25781e57e223) 2024-01-07 07:33:39 +00:00
98e5582aab 2024-01-06 nightly release (ff0f79d3c7aff0f9dd83b3a48d09a61ac8e82621) 2024-01-06 07:34:01 +00:00
f1655ac7ae 2024-01-05 nightly release (39f885331394e6baea6220f7e22bf1cda17bc361) 2024-01-05 07:33:34 +00:00
b99446db6b 2024-01-04 nightly release (e2359f72c82a14a1e2c6f036528fa9418227eba3) 2024-01-04 07:33:30 +00:00
804969c7ad 2024-01-03 nightly release (ca4df16fddc79b816021dc863f26056559dcf5bc) 2024-01-03 07:33:41 +00:00
a87500edd6 2024-01-02 nightly release (1ed8efa9b35328df6f0e8dbfd27578dcfde58e60) 2024-01-02 07:33:36 +00:00
7003edfbb4 2024-01-01 nightly release (fc5fda14bcc41008e5610bf39c53eb066933ea4e) 2024-01-01 07:33:30 +00:00
b41958165d 2023-12-31 nightly release (4bfaa6bc250f5ff5702703ea237f578a15bbe3b6) 2023-12-31 07:33:41 +00:00
534a8bd9e7 2023-12-30 nightly release (97891b184c12763f335fbe1ff63fab843edafab5) 2023-12-30 07:33:34 +00:00
7d163a9861 2023-12-29 nightly release (ef94499ad7ff40fee8aa230d71cd109570b74405) 2023-12-29 07:33:30 +00:00
ef28de986b 2023-12-28 nightly release (6375eb15efa1273514695e468f68963feedc0067) 2023-12-28 07:33:31 +00:00
50f7a03676 2023-12-27 nightly release (9c3ae37fc453505f5e437d1edadefdb278c2c39c) 2023-12-27 07:33:33 +00:00
eb8dedaa36 2023-12-26 nightly release (f6dfbffb3bb46ada6fe66b5da4f989f9d4d69b3c) 2023-12-26 07:33:46 +00:00
b68f93b094 2023-12-25 nightly release (36dccc2aba61a2637aa5d42f38b6fd1fe10dcbdc) 2023-12-25 07:33:40 +00:00
1ed8e26791 2023-12-24 nightly release (6c419a0efdcfa8e262582795144102051b527f62) 2023-12-24 07:33:26 +00:00
c70de4e370 2023-12-23 nightly release (84b2a323594bc7c4b47d61223b3f6466fe054416) 2023-12-23 07:33:50 +00:00
b6723b1317 2023-12-22 nightly release (b47aa69685aa6e561d3ba0edaff84b7833b98a82) 2023-12-22 07:33:29 +00:00
9a70b79cdc 2023-12-21 nightly release (f2c1fb3ee40012ab17a0548dcbff509d6b1dbf39) 2023-12-21 07:37:07 +00:00
1ee7950847 2023-12-20 nightly release (3747aca49a39479c2c5e223b91369db5bd339cdf) 2023-12-20 07:33:30 +00:00
ba4c18f527 2023-12-19 nightly release (9dda4b20a0dcc4786a130c12fc3e4a6a1ecf23d8) 2023-12-19 07:33:30 +00:00
ad2706c6cd 2023-12-18 nightly release (87ea6fb84471c09795672de542622515f81af3d7) 2023-12-18 07:33:27 +00:00
a2940cd437 2023-12-17 nightly release (87ea6fb84471c09795672de542622515f81af3d7) 2023-12-17 07:33:25 +00:00
8bea527b1a 2023-12-16 nightly release (e3aefe297050e197ff3f36f555a134a0e61ffc9c) 2023-12-16 07:33:34 +00:00
a846296964 2023-12-15 nightly release (9056903b098bb9190aa7d08caf5dbf549c5ada3a) 2023-12-15 07:33:35 +00:00
41dd4009c9 2023-12-14 nightly release (f5458f8f00006e7ba25731de42d651c808ccd8eb) 2023-12-14 07:33:49 +00:00
f13a21cce5 2023-12-13 nightly release (0dad85b402c2068c76a61d7c1ddcb60767ca1ef7) 2023-12-13 07:33:46 +00:00
935bfdac27 2023-12-12 nightly release (fbb744fd496c9ee85bcb68e2ba956753e61f6f88) 2023-12-12 07:33:32 +00:00
2cf75d28fe 2023-12-11 nightly release (fe01605830145b5aa204120b90361021a2952ac1) 2023-12-11 07:33:52 +00:00
5da0a5dcb6 2023-12-10 nightly release (4eb5838e184d7f5a795498d32bdde17f0088350f) 2023-12-10 07:33:41 +00:00
7cbcaabb5f 2023-12-09 nightly release (2ed47fecc5b9c526be9cc3c9bab93ca1fdb81547) 2023-12-09 07:33:30 +00:00
742864de52 2023-12-08 nightly release (9521331ba5d081a27b92eea50e42ed5da3dd973c) 2023-12-08 07:33:40 +00:00
424d4406cb 2023-12-07 nightly release (7ec145bfed9813599a0a9dcacbc7aa881626af79) 2023-12-07 07:33:47 +00:00
01557064c0 2023-12-06 nightly release (a548e805364b01554c5e48553f6c779d0973f498) 2023-12-06 07:33:55 +00:00
f87b94dcdc 2023-12-05 nightly release (7843df60e41f856edb148bbcbb5b9aee8292db74) 2023-12-05 07:33:43 +00:00
a111e45dfe 2023-12-04 nightly release (3fbfa8cd0a5cefadb3f116c5cd0d60e96ab8c99e) 2023-12-04 07:33:35 +00:00
6fc9d89863 2023-12-03 nightly release (3a2e2044cd36c1c300039aa915863b3e74df396b) 2023-12-03 07:33:48 +00:00
d2edc8ce7c 2023-12-02 nightly release (0fef82b3dfb4a5da1555a3c046950594b83e2898) 2023-12-02 07:33:24 +00:00
56a830e765 2023-12-01 nightly release (9267ab903200ed2ba548de3fa8a7e59a972cf68c) 2023-12-01 07:33:33 +00:00
ef73b5c9a8 2023-11-30 nightly release (f1fe0b685c4b93a684f0461a7a8f331e9dd17506) 2023-11-30 07:33:31 +00:00
95cc39e7d6 2023-11-29 nightly release (48820c928ce1822565821db3e73d4ee79a2508a1) 2023-11-29 07:33:54 +00:00
5ae273f939 2023-11-28 nightly release (11f11e95df9c205d427fe4dd7e63c9adb91ea03f) 2023-11-28 07:33:39 +00:00
b2f25d6342 2023-11-27 nightly release (624f2025229312bffd725775760dc9b147cc32d8) 2023-11-27 07:33:45 +00:00
df0c1b3a93 2023-11-26 nightly release (d37c4c69954ad7bdccca96854105c48e93d4587e) 2023-11-26 07:33:34 +00:00
794fd233b4 2023-11-25 nightly release (0f5e24bda9450a89ba56d2fdd471f56d97fe4546) 2023-11-25 07:33:36 +00:00
88ca0cc13d 2023-11-24 nightly release (dad3cc4d026794ad3ec309f7ae38e9c3798ce34f) 2023-11-24 07:33:31 +00:00
7f6282544f 2023-11-23 nightly release (b27565ad7d07baed98df50b05f108e209a6f4755) 2023-11-23 07:33:39 +00:00
3164682468 2023-11-22 nightly release (e0ec71deab2aedd6d44f4ea3e03b52bdaf5db3da) 2023-11-22 07:33:47 +00:00
8b7f52e025 2023-11-21 nightly release (18e1a37c4e637370ad3ceee91cecffcfeb4b79b6) 2023-11-21 07:33:34 +00:00
53233b86d5 2023-11-20 nightly release (7963aaac4157c961c1d54033d1f2515d0c987360) 2023-11-20 07:33:50 +00:00
6f045ad045 2023-11-19 nightly release (870539670aff386d66b190b4749316e21d2ae56e) 2023-11-19 07:33:31 +00:00
07c9b95f45 2023-11-18 nightly release (5e307417548374bb40d754518d324efa5359e8aa) 2023-11-18 07:33:37 +00:00
0603dcb449 2023-11-17 nightly release (e8ee14292e83f065c9baf0530de17759134091ee) 2023-11-17 07:33:49 +00:00
690c805c8b 2023-11-16 nightly release (a3b859fc673515f74d103494e61b432c9cc9009f) 2023-11-16 07:33:45 +00:00
a5a404865c 2023-11-15 nightly release (6f4409073f9fad32016f18b3b083f959d7600a2b) 2023-11-15 07:34:19 +00:00
ec2f8fd2f1 2023-11-14 nightly release (ffc3731dc477c92c1daa764f55bab1692c6a6361) 2023-11-14 07:33:40 +00:00
a45a8bf9e7 2023-11-13 nightly release (ef49f61f1909c2feb717023a6b55d87ac9c70a04) 2023-11-13 07:33:54 +00:00
63a5a14da9 2023-11-12 nightly release (ef49f61f1909c2feb717023a6b55d87ac9c70a04) 2023-11-12 07:34:05 +00:00
f40306d6c4 2023-11-11 nightly release (ef49f61f1909c2feb717023a6b55d87ac9c70a04) 2023-11-11 07:33:22 +00:00
edbf22fa03 2023-11-10 nightly release (265d6aac0b71b917d6e36c5dd65c22f61644b715) 2023-11-10 07:33:54 +00:00
2c3ba6926e 2023-11-09 nightly release (fbf7866ac98258a8130e14de3021d3160bc28af3) 2023-11-09 07:33:27 +00:00
4060c20449 2023-11-08 nightly release (aa376e31fdc8aacc6bfe1de5f6bff1d5f4fad136) 2023-11-08 07:33:33 +00:00
291abc63c0 2023-11-07 nightly release (10a829b85d721a76ba436f2416d2d802aab6e9e0) 2023-11-07 07:33:58 +00:00
a04dd794ad 2023-11-06 nightly release (bd9be877e4459d7889e5e3c8051caaffdfe21c85) 2023-11-06 07:34:04 +00:00
2d7dd2e800 2023-11-05 nightly release (64f326097be8ac66ff057365f3bed2d64c697563) 2023-11-05 07:33:37 +00:00
a89fef7184 2023-11-04 nightly release (fb044e2b1783854da105c7166becb8cc37ac96c4) 2023-11-04 07:34:00 +00:00
fd56aa0dae 2023-11-03 nightly release (4a17693d193a8b23109ac3129e5cde92babfe191) 2023-11-03 07:34:11 +00:00
d2c3aa1fde 2023-11-02 nightly release (59869903b3a54acb3ac3a93470fc595d1de3fa7a) 2023-11-02 07:33:53 +00:00
e844d7ab04 2023-11-01 nightly release (748c1a1d81400cbb067c0e15c3769e137cce57f4) 2023-11-01 07:33:58 +00:00
7d93922ea8 2023-10-31 nightly release (2f09da3a21a1a49425424715ea3b3f4131392334) 2023-10-31 07:33:50 +00:00
07cc1132a9 2023-10-30 nightly release (919c9b713e65aa1489123259a0ce7e79322d4d9d) 2023-10-30 07:33:51 +00:00
0a16ad0f88 2023-10-29 nightly release (f5088d2e45787094e201fe82677c399ce456ef71) 2023-10-29 07:33:46 +00:00
c0e43d4625 2023-10-28 nightly release (31f605344f255faaef0aede0f98483f4cb09f072) 2023-10-28 07:33:53 +00:00
525a926aaa 2023-10-27 nightly release (c84dbd2c0393fed3e3d98030c85c30fbbfdc7c3e) 2023-10-27 07:34:11 +00:00
bf9fd89f63 2023-10-26 nightly release (2aaa7e542cb3b217e19284d10d0c0ae1e2df202b) 2023-10-26 07:34:07 +00:00
e6efc2915b 2023-10-25 nightly release (6e2dfb360b310a8676e96caa6550be083d72bd96) 2023-10-25 07:34:13 +00:00
a422515e75 2023-10-24 nightly release (0e0f6a248db4ff054655ea405211dddc8e7ab817) 2023-10-24 07:34:06 +00:00
88eb6bbb1a 2023-10-23 nightly release (c65c0682b19ed479ea66653fc0457958a3e2c59c) 2023-10-23 07:33:55 +00:00
f468e74875 2023-10-22 nightly release (bf01a7b023c1ce4deb6316d25eadc1791807e88d) 2023-10-22 07:33:53 +00:00
147ac6b312 2023-10-21 nightly release (c84c86f018aea9aa9065ba3d57be1fc9fec51f5a) 2023-10-21 07:33:47 +00:00
6ffe31abca 2023-10-20 nightly release (e24fdfa1774f2bb008865fe991458b51e2bfba1d) 2023-10-20 07:34:06 +00:00
707b7b8613 2023-10-19 nightly release (e3463fe4ca5c43542e0d01814d2a1e13fa7769b3) 2023-10-19 07:34:03 +00:00
8aa40192b2 2023-10-18 nightly release (543a763cd8b433fc5740ce2b9db15b98e83ed9c2) 2023-10-18 07:33:58 +00:00
d902c353e9 2023-10-17 nightly release (013b51f8cc6f973d85c5adb36d5c110b7d42c7a2) 2023-10-17 07:34:05 +00:00
6c94bfc7da 2023-10-16 nightly release (4a388e70f2c7fedcdef598fb2144cc593452f04d) 2023-10-16 07:34:06 +00:00
abcc3fadc8 2023-10-15 nightly release (48989bc820d4dfbc0d23ce6f4a3e3e7495f5b315) 2023-10-15 07:33:47 +00:00
2438ac174d 2023-10-14 nightly release (625a3b1a428a8fa844090a87161b346b6d59075c) 2023-10-14 07:34:06 +00:00
85ee879b6b 2023-10-13 nightly release (a2c17a2b00f7c41866bbde28d33b8c50e5632e01) 2023-10-13 07:33:55 +00:00
996af0de18 2023-10-12 nightly release (9316c8b4bc5e449705e945a3069f35b690d70140) 2023-10-12 07:34:02 +00:00
e96ca539bc 2023-10-11 nightly release (02f6a8126e6453d1f5fba585fa7d552f0018263b) 2023-10-11 07:34:08 +00:00
c5b255161e 2023-10-10 nightly release (468a73f0e3527c52495c864c7d48dc26684f6c0b) 2023-10-10 07:33:56 +00:00
97287ff394 2023-10-09 nightly release (92fea5ae3f5307b8ebf5e9cb123d971237f8bf03) 2023-10-09 07:33:57 +00:00
f90c2af43e 2023-10-08 nightly release (459cef86492cfcfb1ed4136c5d4e5002c1c647a3) 2023-10-08 07:33:47 +00:00
8fe3c302f2 2023-10-07 nightly release (90bf6e3938050fded2dfc49bae9e3207c7f00e04) 2023-10-07 07:34:05 +00:00
20217d1426 2023-10-06 nightly release (11047be10e0767721f3fcb8f3a4b412d1c4834a8) 2023-10-06 07:33:40 +00:00
439cba9277 2023-10-05 nightly release (62cad5b5b0f921e3822ec25b6d7ea4343f4cab21) 2023-10-05 07:34:00 +00:00
56af607c04 2023-10-04 nightly release (510ec7e3c539dfed49df587d09e8a0a87e187201) 2023-10-04 07:34:00 +00:00
4e30fa8231 2023-10-03 nightly release (f7909cb947727195a9c55adaea2f374d0374d84b) 2023-10-03 07:33:58 +00:00
4dae8b4963 2023-10-02 nightly release (06464a347754ef764c90948a74428c0bb8daf9dd) 2023-10-02 07:34:03 +00:00
8d78e808f9 2023-10-01 nightly release (2bcae75513e56bcc12494636b33f31ebd9c2548e) 2023-10-01 07:34:04 +00:00
e6fa795672 2023-09-30 nightly release (6b84658433861a68459adb67b3468a9eb064f0e3) 2023-09-30 07:34:12 +00:00
496a17caec 2023-09-29 nightly release (3dc479e70b3d41dd5b09e9cfef8f5a993c05626e) 2023-09-29 07:34:22 +00:00
fecde478ac 2023-09-28 nightly release (75462fd87024bfe9fb79f4c46ab689bec227caa7) 2023-09-28 07:33:53 +00:00
d7520d8668 2023-09-27 nightly release (869226bf947bad0c4ba740c7b56ffe38acdddf52) 2023-09-27 07:34:04 +00:00
ab61acc20c 2023-09-26 nightly release (ac60638c6c74149f05c7980f571afa6fe0661b0c) 2023-09-26 07:33:56 +00:00
cc697537b0 2023-09-25 nightly release (12cd776d902dea1ee3f0ef7980bea62ff64096d2) 2023-09-25 07:33:54 +00:00
24d07d104b 2023-09-24 nightly release (dee100945eec2285943433e63b0670140eed0d1f) 2023-09-24 07:33:49 +00:00
5d97502dc8 2023-09-23 nightly release (691f8ca4f4108d1c22403d9ef6688e04077d28b4) 2023-09-23 07:33:50 +00:00
90c406a3a1 2023-09-22 nightly release (8856c1628e8ddb3fe3bd51ed8cfef5c02ad0a609) 2023-09-22 07:34:30 +00:00
d8fd7f96b9 2023-09-21 nightly release (55685d57c004f250118fcccc4e99ae883e037e2d) 2023-09-21 07:34:27 +00:00
00ae5fa311 2023-09-20 nightly release (1b3e5b53f336e782d6706eb6e61ec363f2fb2c30) 2023-09-20 07:34:02 +00:00
8fd241588a 2023-09-19 nightly release (54c28c564f0f4da174358312a026398ebca5337c) 2023-09-19 16:20:32 +00:00
4d1773d0c5 2023-09-19 nightly release (98208e51603a27e4b88d933a7c7edc18aada4b9e) 2023-09-19 07:34:08 +00:00
ba087c0903 2023-09-18 nightly release (9e86a093e4c165e093cba38f88ceda97f5b5e3af) 2023-09-18 07:34:06 +00:00
0de25554e9 2023-09-17 nightly release (d860313903f21c26d10c2bdd3a9482466255b001) 2023-09-17 07:33:46 +00:00
78c95e1741 2023-09-16 nightly release (b904432e82933ebbd53fd29910df532f15838176) 2023-09-16 07:33:56 +00:00
4a4af8fb1c 2023-09-15 nightly release (bf5622e9650c8dab77ccabc2fffe600bbdfc0b5b) 2023-09-15 07:33:48 +00:00
5c903fb12c 2023-09-14 nightly release (e066056414aef696265e14bceb54392d4965da99) 2023-09-14 07:34:04 +00:00
2baa4c4928 2023-09-13 nightly release (e066056414aef696265e14bceb54392d4965da99) 2023-09-13 07:34:07 +00:00
7b14f0ff8f 2023-09-12 nightly release (8025b193a966a6d8e3afc9c03a54e577bc04eb3d) 2023-09-12 07:34:01 +00:00
8ef4b6af4e 2023-09-11 nightly release (8ff00360a4daab7848307a9a0b1c81b1da873d0c) 2023-09-11 07:33:55 +00:00
3316374d14 2023-09-10 nightly release (8ff00360a4daab7848307a9a0b1c81b1da873d0c) 2023-09-10 07:33:53 +00:00
11d2c766f1 2023-09-09 nightly release (d4230e55748c66c72e7a17b1cd08540b742b20a5) 2023-09-09 07:34:00 +00:00
806d1a871d 2023-09-08 nightly release (4965fffedad8f7f4d333a384d3b046b029395de5) 2023-09-08 07:33:56 +00:00
0200b1106c 2023-09-07 nightly release (35974234c4f811e28a4a74852d2245ec4d044c2f) 2023-09-07 07:33:56 +00:00
a618118ba9 2023-09-06 nightly release (ce4967ad180bcdc1e89d1c0db4bf63dac8a44b6a) 2023-09-06 07:33:58 +00:00
9ea5b31c6f 2023-09-05 nightly release (51c2e22e94caf56ac89967093b274ac81c7ca9e2) 2023-09-05 07:34:17 +00:00
cf9eb00513 2023-09-04 nightly release (621463a3e6b488b2bff04e355a1abd9a4c5bb2cd) 2023-09-04 07:34:04 +00:00
ea7e229735 2023-09-03 nightly release (e5548f81956157e1fdb76cb52579bffe5915dee1) 2023-09-03 07:33:55 +00:00
753f5a11bf 2023-09-02 nightly release (4084d039b7a4b6e55ee6ca05f2789d7ed03b9d73) 2023-09-02 07:33:56 +00:00
73c794dadc 2023-09-01 nightly release (4a9c6f1b731e86b1d4fe31c6753ce7efdc522efa) 2023-09-01 07:33:43 +00:00
b5b99fe13b 2023-08-31 nightly release (0e4752bafc24755893bd1657c42d8937c275ce74) 2023-08-31 07:34:12 +00:00
b3874abf04 2023-08-30 nightly release (620d267ef30b199e0ba1b37407dcf8670448fb6a) 2023-08-30 07:34:16 +00:00
8c68466304 2023-08-29 nightly release (e68b3ad14f9598334a97c1aff15408e1d8f09002) 2023-08-29 07:34:27 +00:00
2c3aa09cde 2023-08-28 nightly release (138e2895d08a6517c5718b2a0118c1b23ff4664c) 2023-08-28 07:34:02 +00:00
f54acf0991 2023-08-27 nightly release (bad3f2db40ffa491181fc7df5dc310830326d9ec) 2023-08-27 07:33:51 +00:00
c0a66455c0 2023-08-26 nightly release (95cacb7fa97881b7e830d1ee0bcb4729b50632c0) 2023-08-26 07:33:53 +00:00
91bde862b2 2023-08-25 nightly release (e00bd8312440ad121cba8acc12935de4f1d947fc) 2023-08-25 07:34:11 +00:00
b48a2494be 2023-08-24 nightly release (2fcda650cf29301e86dd21a5ceabc0f31fa4e3d3) 2023-08-24 07:33:58 +00:00
62d3bf32fd 2023-08-23 nightly release (83517c8dba012b6b68eafe8f6296db97fe26fa3e) 2023-08-23 07:34:14 +00:00
1d3bf3da21 2023-08-22 nightly release (8ed169b1628285924e10fc98de53dbb75c92c43e) 2023-08-22 07:33:57 +00:00
a65b4aa3e4 2023-08-21 nightly release (11602ac564c0e3178b38a65e09be13644322d303) 2023-08-21 07:33:59 +00:00
4ce227bfb9 2023-08-20 nightly release (11602ac564c0e3178b38a65e09be13644322d303) 2023-08-20 07:33:50 +00:00
668af07501 2023-08-19 nightly release (3ddf30505f8f03bd98e6ff418d7389ba69d8043b) 2023-08-19 07:34:05 +00:00
bac60d8896 2023-08-18 nightly release (3c3874d623b2d2ddf7c666f099ae8d014c7dcca1) 2023-08-18 07:34:16 +00:00
3522f2a7b7 2023-08-17 nightly release (e9af315e02d42ca2075972212e1c5e644620901c) 2023-08-17 07:34:14 +00:00
3af011b858 2023-08-16 nightly release (6c0bba3dafde888777a07e395a6e731c1fa51c26) 2023-08-16 07:34:04 +00:00
e4d5143f8c 2023-08-15 nightly release (2624da638d989c902ef9e1a5cff6028ab816605c) 2023-08-15 07:33:49 +00:00
53551b5c87 2023-08-14 nightly release (2b1058c54273a73ed407f2a6495063e9ef18b54f) 2023-08-14 07:33:54 +00:00
3748ee4a8c 2023-08-13 nightly release (ddd2f682b974fa274771965266c2bc0786f1e747) 2023-08-13 07:34:05 +00:00
c9397a7bc8 2023-08-12 nightly release (5b04e9b6cea2be600e81d111a5e407296522ec8e) 2023-08-12 07:34:02 +00:00
422297f87f 2023-08-11 nightly release (4df84c3b4d93ea53c9ca169f32a0dc4619bee797) 2023-08-11 07:33:53 +00:00
a099ff75d3 2023-08-10 nightly release (dfd441a12cede6702d1fd160eb808778b62adae0) 2023-08-10 07:33:59 +00:00
abe3687720 2023-08-09 nightly release (6691413145b71f20221ae77cb2c5d98b2f3213eb) 2023-08-09 07:33:59 +00:00
c01a41cdec 2023-08-08 nightly release (5f551133dc6dc670705281eb3dcbb6ac0dba9a4b) 2023-08-08 07:33:38 +00:00
5e438d59cd 2023-08-07 nightly release (e35cb480f4df1cf440b8705c93546c1b15891a4b) 2023-08-07 07:33:37 +00:00
a8638d61c8 2023-08-06 nightly release (68cb854d73458a14684d584c25c22b17eb79dfca) 2023-08-06 07:34:09 +00:00
be75ecac1b 2023-08-05 nightly release (dc22b4fdb1b4af1f0b7b77a78b30237d337d7109) 2023-08-05 07:33:43 +00:00
4734e4d60f 2023-08-04 nightly release (aaa989c24451259aff4f0b70070bd7ab8380944d) 2023-08-04 07:33:55 +00:00
f89c73be3a 2023-08-03 nightly release (a6f7dd4707ac116c0f5fb5f44f42429f38d23ab4) 2023-08-03 07:33:39 +00:00
c89b169177 2023-08-02 nightly release (92cac6bf32afabed6de8551196fea1f81a27f65d) 2023-08-02 07:33:54 +00:00
1d1670186a 2023-08-01 nightly release (ceea08a986805030014fac203d5b2411e23ff091) 2023-08-01 07:33:46 +00:00
6298ac688f 2023-07-31 nightly release (3c70d4bda785106b7d55738befa36ff46c596068) 2023-07-31 07:33:55 +00:00
0ff243ff35 2023-07-30 nightly release (858ca65c8a3a8b730426690fcbdfb28e9626eda8) 2023-07-30 07:33:53 +00:00
b638df0afb 2023-07-29 nightly release (f160a972aa7ef2db508dbd233246f6dc61643d88) 2023-07-29 07:33:47 +00:00
eb5cb724fe 2023-07-28 nightly release (e31855d0d6cefe18ca4ee9f74b24d3ed5fbfcffb) 2023-07-28 07:34:14 +00:00
8a24a912a5 2023-07-27 nightly release (707aadeedd081714060e51cee279abaea6305a98) 2023-07-27 07:34:08 +00:00
964a13b3df 2023-07-26 nightly release (8d9c8897eddf53b01ce760ff9ae9ec9e4c2c08b5) 2023-07-26 07:33:43 +00:00
153afbda4b 2023-07-25 nightly release (98956c5320534cb66fd0dd69bc632122e16adba9) 2023-07-25 07:33:59 +00:00
ba1da8199b 2023-07-24 nightly release (54a673bdcf52a36603fcc56dceeef9f5afbd9e62) 2023-07-24 07:33:45 +00:00
a060bf3cf0 2023-07-23 nightly release (45e4706aff4cb92addda329576fcf9e4dc2e772c) 2023-07-23 07:33:38 +00:00
b5222f140d 2023-07-22 nightly release (0ad93a3d5684c2026bda8ff4ab7c72c6596a225b) 2023-07-22 07:33:35 +00:00
f228c8b8ca 2023-07-21 nightly release (a01a7329548e579ba894ac016670296cf96a6802) 2023-07-21 07:33:56 +00:00
a16c87a767 2023-07-20 nightly release (2e81cdc1ddbb07dead5b32a6fbf1514a118ac208) 2023-07-20 07:33:38 +00:00
82e03ad957 2023-07-19 nightly release (9c225c9b9a07eedaede9c27c74188181184fb022) 2023-07-19 07:33:53 +00:00
5e128c4fa1 2023-07-18 nightly release (ad6dad810e871da3ec9d19f1ec0f11a7b62fca03) 2023-07-18 07:33:49 +00:00
6ebf7bd6ab 2023-07-18 nightly release (ba00b0939ea82ec7607dfa8c0b4bd468f4f3bf31) 2023-07-18 00:03:13 -07:00
c437a4b1e0 2023-07-17 nightly release (93f852f201b93ca0c41b5cd861834d4f1f235ef7) 2023-07-17 00:03:38 -07:00
c69b6e5da6 2023-07-16 nightly release (e3c4f2fb59837808756f76c23f1fb29afa40ce9d) 2023-07-16 00:03:36 -07:00
6db8e8b9b7 2023-07-15 nightly release (028536646499abbb9cfce672a3ff7a91f1511e2c) 2023-07-15 00:03:16 -07:00
d257917ad4 2023-07-14 nightly release (a66f08d6265c9800ca00ee5f0a8a626f89e0374b) 2023-07-14 00:03:58 -07:00
fccac344df 2023-07-13 nightly release (0faf8ed49f9da63d1b5339f152586ffd7cde3e83) 2023-07-13 00:03:17 -07:00
e571f87e89 2023-07-12 nightly release (979f826015cbd2b353f02e93865a9b9a8877b414) 2023-07-12 08:10:34 -07:00
927dc66238 2023-07-11 nightly release (63d1fb21f56d9b91dd4080b04276d4cc461224fa) 2023-07-11 00:03:32 -07:00
69565763c8 2023-07-10 nightly release (54f33265dba0d0782febe8bf8029efb2d0b29ac1) 2023-07-10 00:03:45 -07:00
9b5a84f544 2023-07-09 nightly release (dd6c38cb596199d70bba76688c99ed919d77002d) 2023-07-09 00:03:30 -07:00
3a919e00b8 2023-07-08 nightly release (dbc22168008711f68775e9d5b159295527a9f108) 2023-07-08 00:03:20 -07:00
760dafbb05 2023-07-07 nightly release (a358a9262e4b8c7280d1817ac73f24a1bf383da6) 2023-07-07 00:03:28 -07:00
72404877d3 2023-07-06 nightly release (13763f58ad86fadf49ef7960d1836318e6480d36) 2023-07-06 00:03:23 -07:00
758c84d41f 2023-07-05 nightly release (ea4d5c45385233af6be36aa50a6945ee9c704b74) 2023-07-05 00:03:30 -07:00
e5472fd3c3 2023-07-04 nightly release (2a21469a77a53a066a299225a3d4ddd60693e7a6) 2023-07-04 00:03:21 -07:00
7682252cac 2023-07-03 nightly release (9f7ad25c987b8b69ff3a0c2aabd55a7c032de7d5) 2023-07-03 00:03:20 -07:00
d33f3a7547 2023-07-02 nightly release (707d265db2dc1eeb8a1b95bc70def5a1e5af7752) 2023-07-02 00:03:23 -07:00
bb3df0bb7c 2023-07-01 nightly release (1de1bea60d96c75403beaa13b1ce80d0ea6ccdbd) 2023-07-01 00:03:41 -07:00
dc72046b23 2023-06-30 nightly release (89decc3a10137838cf4f7400af034645d52684e0) 2023-06-30 00:03:23 -07:00
7bc858743e 2023-06-29 nightly release (998c07799f22a0bb63a39c84d15eae29778631f4) 2023-06-29 00:03:27 -07:00
94ca800459 2023-06-28 nightly release (28d42e66e418f655fdca45c53d4e09d095e7e182) 2023-06-28 00:03:30 -07:00
43ec335ff2 2023-06-27 nightly release (968b7b5e0f892f993c65f8a365fb2df99359f09c) 2023-06-27 00:03:56 -07:00
176a02ed90 2023-06-26 nightly release (58feefa4ede4779d339d76b78b0e0a3de7d47212) 2023-06-26 00:03:58 -07:00
3bebfdfbab 2023-06-25 nightly release (86e0eda18d3665b9db6ea075cc3586210f4116c3) 2023-06-25 00:03:35 -07:00
27b3861096 2023-06-24 nightly release (63f66d19ea8973563edbb48c8887d2e6b4931408) 2023-06-24 00:03:56 -07:00
ad724c83fb 2023-06-23 nightly release (5a97c947c69dd248fb60eba6c8d1913720dfe2af) 2023-06-23 00:04:57 -07:00
d46b579c85 2023-06-22 nightly release (58d11159bd9bdb4db70901821bcae4ce13160284) 2023-06-22 00:03:25 -07:00
e4cf441a4b 2023-06-21 nightly release (f3c3d12efb363f61ca9d68ed9e55f345f1a7e388) 2023-06-21 00:05:18 -07:00
e928f55884 2023-06-20 nightly release (d4b85f3031b81ea9f0e53502ad3b831fb91ec39b) 2023-06-20 09:45:27 -07:00
2aa882f2ad 2023-06-20 nightly release (2d745b95d723641e575027bd4e2fff612f61cc8f) 2023-06-20 00:03:38 -07:00
5beeb400ca 2023-06-19 nightly release (2d745b95d723641e575027bd4e2fff612f61cc8f) 2023-06-19 00:03:41 -07:00
59c654a6ad 2023-06-18 nightly release (2d745b95d723641e575027bd4e2fff612f61cc8f) 2023-06-18 00:03:48 -07:00
a522f9aedd 2023-06-17 nightly release (2d745b95d723641e575027bd4e2fff612f61cc8f) 2023-06-17 00:04:09 -07:00
1b5af9c097 2023-06-16 nightly release (2d745b95d723641e575027bd4e2fff612f61cc8f) 2023-06-16 00:03:22 -07:00
0d4f9aee90 2023-06-15 nightly release (2d745b95d723641e575027bd4e2fff612f61cc8f) 2023-06-15 00:03:37 -07:00
487d6c278b 2023-06-14 nightly release (876161983d353f7553755a58b927762f09c86966) 2023-06-14 00:03:21 -07:00
246b53d588 2023-06-13 nightly release (45104cb67f5e0591bc246edb71f6771f95317cb7) 2023-06-13 00:04:05 -07:00
8aee9489c9 2023-06-12 nightly release (8a744c31d3c5194b4850869a112d94912c1e08b4) 2023-06-12 00:03:26 -07:00
ec23ae5ad4 2023-06-11 nightly release (03101a227f6639d5a9ad628d1dc300f9f99a8812) 2023-06-11 00:03:16 -07:00
dd69d6251a 2023-06-10 nightly release (0496d70aa076143aabde9ee0a010dcccb882eaa9) 2023-06-10 00:03:43 -07:00
b6ab779111 2023-06-09 nightly release (4cc474dec4c55fc11ee92e7c9366946744e60cdd) 2023-06-09 00:03:55 -07:00
c1406a99df 2023-06-08 nightly release (d5142c52d3592e4a5777834be80b276ed1073012) 2023-06-08 00:03:58 -07:00
6226b7d098 2023-06-07 nightly release (428bff842dbeb4bbef245b7c4355f8c76a4bd1b3) 2023-06-07 00:04:54 -07:00
4d648e450b 2023-06-06 nightly release (872fdb329b75c832c2cd1314b3613e28289d8fac) 2023-06-06 00:09:17 -07:00
7a5da81822 2023-06-05 nightly release (881307abcfd8fd229fa521098597f4becb2d6c86) 2023-06-05 00:03:25 -07:00
810edae513 2023-06-04 nightly release (992bffe5a3f030ac75152fcda4bdc6c8d7539962) 2023-06-04 00:05:41 -07:00
7726721661 2023-06-03 nightly release (39b04370db85313efe23966d04499970a882415c) 2023-06-03 00:03:32 -07:00
52c7a761c5 2023-06-02 nightly release (1ca2e993af6fa6934fca35da6970308ce227ddc7) 2023-06-02 00:03:32 -07:00
a14be7981b 2023-06-01 nightly release (bebb8b7c1e6f3baf35c00d2a9265a285b4e439a8) 2023-06-01 00:03:57 -07:00
4855233864 2023-05-31 nightly release (e7cc41772d65010749beab7734d29e32d1a7b494) 2023-05-31 00:03:46 -07:00
9148727f45 2023-05-30 nightly release (0e72ada9bba2693e55fd7177ab4d2af826d7d15f) 2023-05-30 00:03:31 -07:00
4316d8495a 2023-05-29 nightly release (af1d437654aa7fd5aa4a5d30ae2f2e9af34c7765) 2023-05-29 00:03:35 -07:00
3dedcb31fc 2023-05-28 nightly release (c3ea8cc58beec343fef8ec69c409e0b83e60a8e9) 2023-05-28 00:03:43 -07:00
c914be2d44 2023-05-27 nightly release (26f53bb8b0dfeb633fef405595bd4f30ffbf437b) 2023-05-27 00:03:26 -07:00
10b46f7c7f 2023-05-26 nightly release (fb468b6792213e0d8e6221b3bb51e71fcadbed30) 2023-05-26 00:03:28 -07:00
eb2ef134b4 2023-05-25 nightly release (3ca068bc44440e780298d250f295d2b68a8a9ae3) 2023-05-25 00:03:47 -07:00
41917f7d92 2023-05-24 nightly release (45843c7f41374d6d0f76050febc72582a650b472) 2023-05-24 00:04:57 -07:00
981d4c2578 2023-05-23 nightly release (8cab7994a6e92b9b37e324be493c04e4660dc330) 2023-05-23 00:03:25 -07:00
871fc7bb76 2023-05-22 nightly release (e9a7115605ee5b6ae38ea5716a4abea5aa415333) 2023-05-22 00:03:31 -07:00
1c938577d8 2023-05-21 nightly release (9e8da7fb44d190677d0e455bd0a85053311c27e2) 2023-05-21 00:03:38 -07:00
aa43e0d245 2023-05-20 nightly release (0c6f409cdad073e8c64ef11b72c41d89ab7ee167) 2023-05-20 00:03:16 -07:00
61239df555 2023-05-19 nightly release (f66d5dd788b4f9f09790c705afe64f377624c621) 2023-05-19 00:03:32 -07:00
329bb2a33e 2023-05-18 nightly release (900ca4df595fbd7370534cec9d4a0f781667dfd0) 2023-05-18 00:03:41 -07:00
174d01bc93 2023-05-17 nightly release (41d668c9dcad40589609efab899131f0acd188f1) 2023-05-17 00:03:24 -07:00
ed0910596d 2023-05-16 nightly release (799ef7e501003ef988e23a724789c0dbbd304ebb) 2023-05-16 00:03:32 -07:00
f3e13d9567 2023-05-15 nightly release (7dd8e08817ee59c926922409062e25f30408469b) 2023-05-15 00:03:40 -07:00
7a20f535c0 2023-05-14 nightly release (674e52b0b913d7b7f733ce1e73a42cb383860d55) 2023-05-14 00:03:16 -07:00
d6e2903b44 2023-05-13 nightly release (387b369ee4d0d94b616254e26e43ab16a30d83f4) 2023-05-13 00:03:15 -07:00
1a3d3669ef 2023-05-12 nightly release (e98d762f21083775598e7c1d96b2b9f6b10ea9d4) 2023-05-12 00:03:39 -07:00
6166b3dd77 2023-05-11 nightly release (da02ccc60e225c3150e695ddf724799dac961806) 2023-05-11 00:03:31 -07:00
b204f65758 2023-05-10 nightly release (b004c0b3c6a1ee39ba0b512a00d95e7f83852556) 2023-05-10 00:03:45 -07:00
6cbfabc45f 2023-05-09 nightly release (75e4214f92059aa3ab2931e31ace63f598ebec25) 2023-05-09 00:05:18 -07:00
9a8c655956 2023-05-08 nightly release (7d0e4e2aa843ef5d73646f5b304914d2b65db93c) 2023-05-08 00:03:36 -07:00
3a5c9bb5c8 2023-05-07 nightly release (ca9f55f79d944672cb93157836f8ee92f54d2e10) 2023-05-07 00:03:25 -07:00
cf05864b32 2023-05-06 nightly release (f73973d789a14afe9fde4640c767f2da0b547076) 2023-05-06 00:14:18 -07:00
ccace360e0 2023-05-05 nightly release (bf52d570d9be0167501cd6a206b7e262e6d3860c) 2023-05-05 00:03:25 -07:00
1b6d6e98fe 2023-05-04 nightly release (9bc68fcd25798553e311d8562fe3a1c5a450feb3) 2023-05-04 00:03:34 -07:00
664ac1ebd2 2023-05-03 nightly release (771a9debbe8cc1bbc41e1f9b8759971ae20f09d2) 2023-05-03 00:03:41 -07:00
d97f26abcb 2023-05-02 nightly release (ff297223641ae336c421994a9d650bbb72798c0c) 2023-05-02 00:03:51 -07:00
f38a04a5c5 2023-05-01 nightly release (e779a30d5097714acea011da6a554e43810b5d0e) 2023-05-01 00:03:22 -07:00
572ef38a2f 2023-04-30 nightly release (6c934a89a725fd5d171b52a37cbc58e198edf4d6) 2023-04-30 00:03:28 -07:00
6d1cfc04be 2023-04-29 nightly release (3d55bce3bf5fe5cb0d654ecb48100eeac1d2dfa0) 2023-04-29 00:03:24 -07:00
4fecad50d3 2023-04-28 nightly release (54c0edf6da01c5ded74fe67e834b3c6869d5e5f0) 2023-04-28 00:03:30 -07:00
521b386e57 2023-04-27 nightly release (e0bf51d3bf2cf4c8272708f78b72572d81efd0a2) 2023-04-27 00:03:25 -07:00
a977a12ca5 2023-04-26 nightly release (0b1b063158e35be06e488e29a302ef28932b083b) 2023-04-26 00:04:52 -07:00
015e4ddb72 2023-04-25 nightly release (ecd2c71871f8bf9a9fa4a4d875609b0922061a6f) 2023-04-25 00:03:17 -07:00
287a30305a 2023-04-24 nightly release (48d112c431fc988de5473d3992f6c72ec5f02a6b) 2023-04-24 00:03:20 -07:00
1b3ac4a14b 2023-04-23 nightly release (ebd47b0eec9af20b238a72860dfc08c0bf250fdb) 2023-04-23 00:05:36 -07:00
f85810f9fc 2023-04-22 nightly release (ca8625f45662e5d451d1da928b223e47d79ce5fa) 2023-04-22 00:03:25 -07:00
8aa785fa2b 2023-04-21 nightly release (51742a467d1714afb6715af92c4459160eb71fb4) 2023-04-21 00:03:24 -07:00
aef7b6b424 2023-04-20 nightly release (95ca8e589d8aaa614619e4dcd89c569cf0ad8dea) 2023-04-20 00:03:30 -07:00
b206fd2f6a 2023-04-19 nightly release (8e69879209330089fdd8f2cd48769dc467c7d036) 2023-04-19 00:03:07 -07:00
ffa6fefab6 2023-04-18 nightly release (436edc5ac3de4c4e677ed136473bafe72002cc93) 2023-04-18 00:03:24 -07:00
584d16f2f2 2023-04-17 nightly release (efc3887ea508b3cfd94603fd8afe4e8cf6dce7b7) 2023-04-17 00:03:23 -07:00
fea73cb39e 2023-04-16 nightly release (039faf0dbf75c8e6bb3c097c1b8d257eebb74c45) 2023-04-16 00:03:27 -07:00
ba53e304d4 2023-04-15 nightly release (e9be0b0fb93c271ba3deb31b5ccc8f4c4f602ef9) 2023-04-15 00:03:09 -07:00
30a9757c80 2023-04-14 nightly release (cd078d376e833c4da3b8a6b03447614501178e9b) 2023-04-14 00:03:21 -07:00
3e5bc3f6bb 2023-04-13 nightly release (ccc9a3d726b1f249daffa442460b70fb50a0ee2e) 2023-04-13 00:03:28 -07:00
84ec5d9b1f 2023-04-12 nightly release (6ff32b5575abf07ebee74c9e17fc5113d5dd0652) 2023-04-12 00:03:28 -07:00
61007ca987 2023-04-11 nightly release (d4ce045cfcf2d7cacd0b90d7ea625f6fa82d566b) 2023-04-11 00:03:18 -07:00
b8423c1370 2023-04-10 nightly release (96fb64a1599f3e1679baa9db16f71c8a854577c7) 2023-04-10 00:03:15 -07:00
e60d9b7507 2023-04-09 nightly release (54b168484d8463a6f38737751ab5ac78777fa6a6) 2023-04-09 00:03:15 -07:00
f3a098a55a 2023-04-08 nightly release (d255c8e1ad332a2ded0ff1595b63d50034c473ee) 2023-04-08 00:03:14 -07:00
83b1c515f4 2023-04-07 nightly release (616f50da3aa8c0616cf93f1d92f31044aa5123f8) 2023-04-07 00:03:22 -07:00
a86aae1504 2023-04-06 nightly release (9c7b03d51e097c40abdb9ef55ce79b98d7f1fd48) 2023-04-06 00:03:13 -07:00
73b995ec2d 2023-04-05 nightly release (2d9b2bcfba7eaf9aa30e05df4ff51fa9f3241e9e) 2023-04-05 00:04:29 -07:00
5fa1402662 2023-04-04 nightly release (c5963b779281e2b7dfba1b2fc0e6628c1622f7e4) 2023-04-04 00:03:17 -07:00
3b8052d979 2023-04-03 nightly release (5d62d1255778b53ece16c79fd842cd42eca31f93) 2023-04-03 00:03:10 -07:00
5775e1c1e6 2023-04-02 nightly release (7fcff01b50d6a3a94a181a5b452455e8a82efad3) 2023-04-02 00:03:04 -07:00
63f61a66b0 2023-04-01 nightly release (57c6f3fe90bccfed878b301c2d61bf42270c5b52) 2023-04-01 00:03:04 -07:00
f08dd7d0f7 2023-03-31 nightly release (3dc440527817b065fa5cb652467921c9514cdd1c) 2023-03-31 00:03:21 -07:00
f6aae5043e 2023-03-30 nightly release (af0264ae084359c8042194f5e15070aafb430677) 2023-03-30 00:03:19 -07:00
f1f0a4f064 2023-03-29 nightly release (91166ef7e75fc5fb94fb56ec6679a1744cf0f28c) 2023-03-29 00:03:21 -07:00
81558034b3 2023-03-28 nightly release (c1a6dde79e5517ba3f71dcd4b9ff8f00e0cd881d) 2023-03-28 00:03:26 -07:00
cb970ea2e5 2023-03-27 nightly release (542fb0b1fad6bf61929df16e2133e9a296820f08) 2023-03-27 00:03:29 -07:00
c9ed10c377 2023-03-26 nightly release (dc45ad702466e4a73d972d3e1dc0c12ed80d2eef) 2023-03-26 00:03:18 -07:00
13581257b1 2023-03-25 nightly release (2e8086b0a157dbe922a588fed15edc31c8faf802) 2023-03-25 00:03:16 -07:00
333a93ff4d 2023-03-24 nightly release (763c5a33e70113253e5861ee6d185ea343acf286) 2023-03-24 00:03:19 -07:00
d3b915155a 2023-03-23 nightly release (c5b65032aca9af04ce9d261bc29ff7f063b00748) 2023-03-23 00:03:18 -07:00
00891e96e8 2023-03-22 nightly release (f9a9a888128625969be1ff6effca9df74a55432c) 2023-03-22 00:03:31 -07:00
8c8491fe4c 2023-03-21 nightly release (d2f57229969d1758369a15a71740a94f5baa2cd6) 2023-03-21 00:03:32 -07:00
4d3baf684b 2023-03-20 nightly release (5471621497ea0068bd453d251bf5ec2621e8119f) 2023-03-20 00:03:23 -07:00
422a1d3b9a 2023-03-19 nightly release (c1214ce5c26fce541a920bdf9917c9ca9f63ecb0) 2023-03-19 00:03:16 -07:00
21b32e8b01 2023-03-18 nightly release (b132220309add1748f4548b88d7a947c19322ff9) 2023-03-18 00:03:06 -07:00
fb9db7dccf 2023-03-17 nightly release (cbd3df93c4a4b5d8a3244be9fbfa68e2b06bb836) 2023-03-17 00:03:19 -07:00
e262e404bd 2023-03-16 nightly release (3606f593665f2dc3ad0877db4f5df69a6c31cf2f) 2023-03-16 00:03:27 -07:00
4f7cbd0a3a 2023-03-15 nightly release (c6a82e433924b4d36fd571d36ce363cb1c622c76) 2023-03-15 00:03:27 -07:00
b5e03345ec 2023-03-14 nightly release (2cc8368af369c6c3d930ca9ad85c7124e4809509) 2023-03-14 00:03:11 -07:00
eb17fc7b11 2023-03-13 nightly release (be220690d9d8b7e8d58b81694c6cbf0958f94845) 2023-03-13 00:03:17 -07:00
1238ae3e39 2023-03-12 nightly release (82d3d053b9cf439a1970d788a7809cdc30142626) 2023-03-12 00:03:14 -08:00
cf353b03fd 2023-03-11 nightly release (f3fc4d035d8fc1ed560ade0c8b8eff6be1c95972) 2023-03-11 00:03:08 -08:00
c54ce93106 2023-03-10 nightly release (065de4301200117c65607b213322cbde800b50f8) 2023-03-10 00:03:08 -08:00
820eb13ecf 2023-03-09 nightly release (fe05266fda4f908130dea7cbac37e9264c0429a2) 2023-03-09 00:03:09 -08:00
47cb44946c 2023-03-08 nightly release (3a4275278b265f02e9d5fa336074d27b908dd1ea) 2023-03-08 00:03:24 -08:00
24e305c3c6 2023-03-07 nightly release (7038458c5b47eda626e9d535f792f1f4611c5675) 2023-03-07 00:03:12 -08:00
d7e5a324d5 2023-03-06 nightly release (02792ff16f4934ccd837c28df437de460273432c) 2023-03-06 00:03:05 -08:00
98e5a7eaf1 2023-03-05 nightly release (af8dbe7ec2b32492589bad1eef4ed72be81646f9) 2023-03-05 00:03:17 -08:00
f1d60f5872 2023-03-04 nightly release (43dd043ea79cd427aa40f1910da63da96e8363ec) 2023-03-04 00:03:07 -08:00
a9a8c5ea9e 2023-03-03 nightly release (53c9866ffa8baa7b7070901ce74704e0771bb05b) 2023-03-03 00:03:07 -08:00
5bdd05400a 2023-03-02 nightly release (62b775583f008effc510e5f5c3e2b30a85a53465) 2023-03-02 00:03:20 -08:00
f09ed1d3c2 2023-03-01 nightly release (21b1134be690bdf338689ed0da287e772e8fd859) 2023-03-01 00:03:19 -08:00
341911ad3e 2023-02-28 nightly release (58648822b640dc11d196f7060d968b2c38fb3351) 2023-02-28 00:03:13 -08:00
1e2e6e78c6 2023-02-27 nightly release (6624a73837bee5b59f01bdd4d2f0d5619bd3ab1f) 2023-02-27 00:03:21 -08:00
3313e86c03 2023-02-26 nightly release (a88bfc60c75d22a047f03787aaa43130c6a8d6d9) 2023-02-26 00:03:10 -08:00
f64b61f58c 2023-02-25 nightly release (f5cf1a8b434a39576f8f49f4ebb32741de5cb9c1) 2023-02-25 00:03:17 -08:00
dbde255a2c 2023-02-24 nightly release (6665fe9e65548ba01cb232b965af4d64a49fb46b) 2023-02-24 00:03:19 -08:00
2a2c29b984 2023-02-23 nightly release (cece63f1976464f3c48b5563d8a59888566d0897) 2023-02-23 12:55:17 -08:00
5a6cf2804b 2023-02-20 nightly release (286d821e61e29de8fd6c81abd78b84fea5a44c0b) 2023-02-20 00:03:06 -08:00
66f63bd56f 2023-02-19 nightly release (a17a7ccc92144452e0fe51e02f21f1f1ba88118a) 2023-02-19 00:03:06 -08:00
844f9f697e 2023-02-18 nightly release (e44737e61975c49b20fa176e77c012b626c5f331) 2023-02-18 00:08:44 -08:00
fe66daafaf 2023-02-17 nightly release (766d51b496bb85feab4b0f23977b4ffc0a0e354b) 2023-02-17 12:30:53 -08:00
9c72352263 2023-02-17 nightly release (5d1e9fd214fcd8bbc95e9f8dea69df8dd17bf92e) 2023-02-17 00:03:19 -08:00
5fe2e6ac60 2023-02-16 nightly release (07bc6b958768af3462095eea7af2cbc7b395b972) 2023-02-16 00:03:03 -08:00
de1114554c 2023-02-15 nightly release (c10acb834d73f399589ce08a9fea1e4520a8c02c) 2023-02-15 00:03:08 -08:00
e67dc17b06 2023-02-14 nightly release (d567df9f36094e1efa89d11599067773f45032c8) 2023-02-14 00:03:15 -08:00
8397282212 2023-02-13 nightly release (6fadd5e94a273d62ac3f245a7615f818b6a33500) 2023-02-13 00:03:07 -08:00
52df37a117 2023-02-12 nightly release (67d979098567fd61dfdb918d837426535eb9883b) 2023-02-12 00:03:02 -08:00
00a8867aba 2023-02-11 nightly release (948cd61afc90e1b9067b35d4aec4ec74deeb73f6) 2023-02-11 00:03:09 -08:00
54ad459fb0 2023-02-10 nightly release (336d9354d655e52c575d070fc53eaccbebc94cd2) 2023-02-10 00:03:18 -08:00
34d2472fc0 2023-02-09 nightly release (cb715c26e270759e3955968fbd3d763d51b0b83d) 2023-02-09 00:03:07 -08:00
cb47373166 2023-02-08 nightly release (61ecaf1dd40ba93dde11249bd8ee64274098d3d7) 2023-02-08 00:03:11 -08:00
1530b798ce 2023-02-07 nightly release (d493bc8a764f65c140e73d7a6e9d20abe519a9b0) 2023-02-07 00:03:12 -08:00
0a73b08b9f 2023-02-06 nightly release (9350bcf6ae9d646389a0a4345c48275d4f9e4d1a) 2023-02-06 00:03:02 -08:00
6a03ad6a34 2023-02-05 nightly release (1d53123f44e2d5f08e4605af353b7d32b62346ae) 2023-02-05 00:03:01 -08:00
3b05e02983 2023-02-04 nightly release (adde6fd25eec0bd5ebe304ca08a9d57ba64d10d5) 2023-02-04 00:02:59 -08:00
df9abf685b 2023-02-03 nightly release (732a865c1bf2382a75f531d5907d18dd9bb0c4c9) 2023-02-03 00:03:13 -08:00
bf27152a8a 2023-02-02 nightly release (569f2e3228efeb1f8571e96d8f3ec835239e9c0e) 2023-02-02 00:03:05 -08:00
2e6952fa58 2023-02-01 nightly release (79db5bcc9d3febad00e5a2234b44c7db87defdab) 2023-02-01 00:03:07 -08:00
b2690c3cea 2023-01-31 nightly release (2a6e08570442c8fcbad6659e074c226809b1ed22) 2023-01-31 00:03:05 -08:00
3a7bab55b2 2023-01-30 nightly release (e790281a85fe3693fc1d38bf0e2c6e874d5e10b0) 2023-01-30 00:03:07 -08:00
d6c87398e2 2023-01-29 nightly release (7cc91f4002cb5dd3290318a967fb1e830d812666) 2023-01-29 00:03:10 -08:00
5d6a4f697c 2023-01-28 nightly release (ca8f5e177a1e0781b4a9e376c34d3ef9b934a454) 2023-01-28 00:02:59 -08:00
6cbac32dc7 2023-01-27 nightly release (661800a2cf0a4251c48a50fce8599c4c5fc49be1) 2023-01-27 00:03:02 -08:00
8181f12af5 2023-01-26 nightly release (0a57a20c02132577a48f5283ffbdf04257af1dbf) 2023-01-26 00:03:01 -08:00
83e8426fa4 2023-01-25 nightly release (4bc0491752b6d891c5bb33a3d18c5da7334fc6df) 2023-01-25 00:02:59 -08:00
d0e7a12a39 2023-01-24 nightly release (2a8669c54cb29bf42692185340fd68f341ac65ef) 2023-01-24 00:02:57 -08:00
6f611c5030 2023-01-23 nightly release (20bf77f9bd3cd7cb4da758afb58042e2980ee6ba) 2023-01-23 00:03:12 -08:00
284677213e 2023-01-22 nightly release (ed07070a11802dd561995c20e89d33cc986de2fa) 2023-01-22 00:02:58 -08:00
f960e5c8ae 2023-01-21 nightly release (1af40d5108ee5ddd408eed8115ce3abf6512149c) 2023-01-21 00:03:09 -08:00
d7b0db060c 2023-01-20 nightly release (620846c8b4f00f58dbd8b62746ec8e4328552b58) 2023-01-20 00:03:12 -08:00
65d7b967f8 2023-01-19 nightly release (de459bdfaa44a25565d4c4eedda49906feb6d993) 2023-01-19 00:03:04 -08:00
69dbc7dca8 2023-01-18 nightly release (00fe63d1d8c5c6411e093fa4388dc98c3683d236) 2023-01-18 00:03:34 -08:00
fbc4086458 2023-01-17 nightly release (0388400f3f8a8ecae2f809ba40ca3ddd5a8b9028) 2023-01-17 00:03:09 -08:00
a4dd47e06e 2023-01-16 nightly release (85e0fd0280948a342a916429448fed2486e82aa5) 2023-01-16 00:02:55 -08:00
868797ac1f 2023-01-15 nightly release (d41b5d7c145f3e09c7223c2b707933266241ec9b) 2023-01-15 00:03:08 -08:00
c202ddde8d 2023-01-14 nightly release (b8057aa16d376eefe081d852335541e2a7609c40) 2023-01-14 00:02:59 -08:00
06f81fdbf8 2023-01-13 nightly release (fbbb19599a1d162e5927542ed251fd2ba63d5163) 2023-01-13 00:03:32 -08:00
a0c46f5ab8 2023-01-12 nightly release (5766764d6cf9b14380c1b6ef5c2fe5392722e37b) 2023-01-12 00:03:08 -08:00
466be3f2ad 2023-01-11 nightly release (364f526b9cdf9818a7647b5e637efdee825d61a1) 2023-01-11 00:03:02 -08:00
971b1d38ec 2023-01-10 nightly release (b0f359a3c99041d9c87e700dccd0f22e73f40e1d) 2023-01-10 00:03:00 -08:00
65ff52a53b 2023-01-09 nightly release (73e5379fab05c40ff6f42500309cdc17ee57548c) 2023-01-09 00:03:08 -08:00
fac4361e84 2023-01-08 nightly release (73e5379fab05c40ff6f42500309cdc17ee57548c) 2023-01-08 00:02:56 -08:00
253e5c9744 2023-01-07 nightly release (faed4db4971af151e3dba7233ae49f9c0149dc18) 2023-01-07 00:03:12 -08:00
143e944699 2023-01-06 nightly release (33547bb58745a5deedaa36ca4e9363413f803e12) 2023-01-06 00:02:56 -08:00
1b52ceea52 2023-01-05 nightly release (d6bd67f2ebebb840ecf9d1c7c70653c900e6ee96) 2023-01-05 00:03:01 -08:00
caaf948ae3 2023-01-04 nightly release (80394bb73423bb849f46a7a9ffc55ebf478b8639) 2023-01-04 00:02:54 -08:00
74c03b46ae 2023-01-03 nightly release (2b52db9c953d063db7b46c12f4df35b47aca4381) 2023-01-03 00:03:05 -08:00
680efdb840 2023-01-02 nightly release (f6136331244fbe680ccc03d3bd5c5d9a71933d9f) 2023-01-02 00:03:05 -08:00
ede810cc26 2023-01-01 nightly release (f6136331244fbe680ccc03d3bd5c5d9a71933d9f) 2023-01-01 00:02:59 -08:00
733de4dc1d 2022-12-31 nightly release (73436af43fd84891b6765f4d1e5eeb0073a10a11) 2022-12-31 00:02:58 -08:00
a52fb6c041 2022-12-30 nightly release (9710ac653157dee780c33bf3080568076ce69a7b) 2022-12-30 15:03:00 -08:00
f8dcaca1da 2022-12-30 nightly release (6f034dc0b09a96c50421cf92ddb8709c59d95edf) 2022-12-30 00:03:12 -08:00
7edb2ee6a4 2022-12-29 nightly release (3d8834bdbf7f5da1163fd7ac543728779b557d29) 2022-12-29 00:02:58 -08:00
5abc365268 2022-12-28 nightly release (2e79d46708fb53c1a92bf0c2840d47a39e13e400) 2022-12-28 00:03:06 -08:00
4ada512fc4 2022-12-27 nightly release (3f4e87beaf67ec44d609605777d9da9e65cfbdd9) 2022-12-27 00:03:00 -08:00
9c156524e8 2022-12-26 nightly release (3f4e87beaf67ec44d609605777d9da9e65cfbdd9) 2022-12-26 00:02:58 -08:00
fac2cc8b24 2022-12-25 nightly release (5725a440806e7d75ad4fdea2c63d1a0a2fd004af) 2022-12-25 00:03:01 -08:00
3416c23868 2022-12-24 nightly release (5725a440806e7d75ad4fdea2c63d1a0a2fd004af) 2022-12-24 00:03:07 -08:00
7277d5a8f0 2022-12-23 nightly release (b95e1d76a86b7b66f0946f72ebd33889bfc19e03) 2022-12-23 00:03:12 -08:00
7919ae96db 2022-12-22 nightly release (6cea4f3d57927b30c3fc0a2f7103684fde0c75ea) 2022-12-22 00:02:55 -08:00
5837a6683b 2022-12-21 nightly release (5d37890b8eb952560f22b1b8ff661a024bf4b6d9) 2022-12-21 00:03:00 -08:00
8b450f6934 2022-12-20 nightly release (d6dd2e97da619319a103d1061290fe33ce33b6a4) 2022-12-20 00:02:58 -08:00
1ae3ad540d 2022-12-19 nightly release (9ca41a986c902f9db44ff04ca87a07238627d020) 2022-12-19 00:03:10 -08:00
e2c1293373 2022-12-18 nightly release (e2377c8300c578d648aac3bff6f96cdfce4308de) 2022-12-18 00:03:06 -08:00
8726996125 2022-12-17 nightly release (e689c509222a2dbc4796bcf32625193b9ea13c49) 2022-12-17 00:03:08 -08:00
2bd3fbe2e6 2022-12-16 nightly release (4372dbb89f457a0aa90f22d27f1468442a2a51bd) 2022-12-16 00:03:08 -08:00
1902ca9d53 2022-12-15 nightly release (670efb974af056fc3f46b48225581351b047eb4d) 2022-12-15 00:03:10 -08:00
971c769d42 2022-12-14 nightly release (769392178a8da6aab1bf82a09c9b105ea3dd6778) 2022-12-14 00:02:55 -08:00
3612f8bd54 2022-12-13 nightly release (7498e23bd52f049071500d443a18e6e5382c87b1) 2022-12-13 00:03:12 -08:00
008d7ee616 2022-12-12 nightly release (b95ea4f1494dacf86b5789f5466025b1fac1f2bb) 2022-12-12 00:03:01 -08:00
e220581718 2022-12-11 nightly release (6845598617ab75920dc1d4fbba9475bf64148bd6) 2022-12-11 00:02:56 -08:00
6e83e0b5d7 2022-12-10 nightly release (0457020d2ccfcb34262e2d46a3a4dbbdba5772a2) 2022-12-10 00:03:03 -08:00
8ce9be6212 2022-12-09 nightly release (b4c27c86b71c41bb44a804d8c6a7d466fb4d8baf) 2022-12-09 00:03:00 -08:00
9a7b94fa1f 2022-12-08 nightly release (bc93454e4a51f85f6c8603309bed7bd6de84385a) 2022-12-08 00:03:08 -08:00
c8ee46c764 2022-12-07 nightly release (26d1dbc4f85be7c5dc03c865e9bc092d83f7f2f0) 2022-12-07 00:02:57 -08:00
d80585d52d 2022-12-06 nightly release (05ccbd6d94c25fc26d30d2f60081924ce5bc973f) 2022-12-06 00:03:01 -08:00
ba7543762b 2022-12-05 nightly release (4648baa91155718642937ec27b04196fde846566) 2022-12-05 00:03:10 -08:00
b23c765574 2022-12-04 nightly release (9a1c6fd50664a46f0bacac92a10bcc26f307fadb) 2022-12-04 00:02:54 -08:00
ea0a17f785 2022-12-03 nightly release (9a1c6fd50664a46f0bacac92a10bcc26f307fadb) 2022-12-03 00:03:05 -08:00
82ab7407b3 2022-12-02 nightly release (cf3c3f22804be6909e54fc09e07f891ab0886774) 2022-12-02 07:14:00 -08:00
203213d3bf 2022-12-02 nightly release (f623b123f00358936932e103131bb6e3fc8ea685) 2022-12-02 00:03:06 -08:00
d8006fa84d 2022-12-01 nightly release (b399acd2dd755d7184538a58f933fbd48593c158) 2022-12-01 00:03:03 -08:00
30b87f46b5 2022-11-30 nightly release (12f98f85bc7effd48f4728dcaba6362c8b2dd697) 2022-11-30 00:02:57 -08:00
c528648f56 2022-11-29 nightly release (2b522670d2840522e0eeb87afec7f1956eaa8748) 2022-11-29 00:02:58 -08:00
77d59b2eab 2022-11-28 nightly release (db1f1144f1303db45e0b9d96e4bb6bdd87c80e5a) 2022-11-28 00:02:53 -08:00
f8506fb341 2022-11-27 nightly release (39449ea61d9a6644731687219282f610cbf7cf54) 2022-11-27 00:02:54 -08:00
21825b268c 2022-11-26 nightly release (591dfffa38848de54b7f5f4e49260847024c9281) 2022-11-26 00:03:03 -08:00
b8162a48b9 2022-11-25 nightly release (95ea47ef0c1cffe1fe05cc36bdc47c26cc72f13e) 2022-11-25 00:02:59 -08:00
c60a6bb340 2022-11-24 nightly release (903ae4570e401e5c4e42dc4a44cae37f805044a4) 2022-11-24 00:03:00 -08:00
db1da1f2ca 2022-11-23 nightly release (52669534438db3d680def4c70cb03b7e27566d7e) 2022-11-23 00:02:57 -08:00
f44ba7d75d 2022-11-22 nightly release (40cf214f2d18b3b8af5354ddc5dad8156ea32520) 2022-11-22 00:03:06 -08:00
e290a47a82 2022-11-21 nightly release (1856fa5df7fda9950da26eff2ef885e845bf6b6c) 2022-11-21 00:03:03 -08:00
89e792c046 2022-11-20 nightly release (6afe341276f9ffa660446c5fa15b68558791869a) 2022-11-20 00:02:54 -08:00
3806b657b7 2022-11-19 nightly release (419ef2cdcfe84442de5232739284c6a51a18632f) 2022-11-19 00:02:50 -08:00
d7eadde6dc 2022-11-18 nightly release (6f609dd0e03e11395cc637a34abd68472e5a1e12) 2022-11-18 00:02:52 -08:00
0015b0d515 2022-11-17 nightly release (c3acb9c8859fb5cfa1959ee49849f07942c40ccc) 2022-11-17 00:03:02 -08:00
0662e90840 2022-11-16 nightly release (e2f0648750f2d0d0ac648728ce4c514db178cfa1) 2022-11-16 00:03:15 -08:00
b5ea3fd1ef 2022-11-15 nightly release (73d71ae3d62607f2e480af37c470375ea405eb1c) 2022-11-15 00:03:36 -08:00
b7c4176df3 2022-11-14 nightly release (06486cd0087200e08ebb8a9518e064251c7c5309) 2022-11-14 00:03:41 -08:00
637228bcc4 2022-11-13 nightly release (46796fe5e9b74602d45927304773fdcda1c3215a) 2022-11-13 00:04:06 -08:00
580b16fa9b 2022-11-12 nightly release (7c3adddd6c3fe1bda4a9e5bfb9f992a802329551) 2022-11-12 00:03:49 -08:00
aeacdaed41 2022-11-11 nightly release (a6d72f44a4e8b6e9d2e878f30fd8b1d3e1197f0e) 2022-11-11 00:03:54 -08:00
e02bd6d2e4 2022-11-10 nightly release (e87c79ca0cbab476a7d09853b5830b615a62f679) 2022-11-10 00:03:05 -08:00
3b29687f0f 2022-11-09 nightly release (a7420d2ccb62d005f2e1853cfef8d25eb7748a90) 2022-11-09 00:03:19 -08:00
93f15b1b54 2022-11-08 nightly release (ed97e0aa2918e687309ee9a146c8294aefb237d2) 2022-11-08 00:02:58 -08:00
d6f7b88fc6 2022-11-07 nightly release (eda247ee6ce2f8bc29d86ec94f3863f929a2ea6e) 2022-11-07 00:03:09 -08:00
027d0aef88 2022-11-06 nightly release (0e3031f7e76fbd84e62650642dc334c11cc3c511) 2022-11-06 00:02:53 -07:00
12d78465eb 2022-11-05 nightly release (957a9b63c5c2953da3a1d1fc86c20703c96b2fa6) 2022-11-05 00:03:02 -07:00
4ebaafab95 2022-11-04 nightly release (70b00b13830c8adbaa2db8f61d475c2458b707c4) 2022-11-04 00:03:04 -07:00
a374be6433 2022-11-03 nightly release (4c20c0509d5cf8d4dea83cc330056044a6277b1b) 2022-11-03 00:04:06 -07:00
ded1b03613 2022-11-02 nightly release (95fc0bcaaddc2d24e8759f24dbefa789d04e9e42) 2022-11-02 00:09:24 -07:00
43ff4c443a 2022-11-01 nightly release (afd00673b6dedbdb811cfb1a9078deee1cb53f38) 2022-11-01 00:05:13 -07:00
7ceeba2c87 2022-10-31 nightly release (d13f1e6ab4d20451f7e2acd87571ffa7fece0c32) 2022-10-31 00:02:52 -07:00
d6a7672424 2022-10-30 nightly release (e7b854fae9ff8116eaf4aeb24e04cac550bed362) 2022-10-30 00:02:54 -07:00
7623f24837 2022-10-29 nightly release (c5cb6ec06619a2fc9874b967f11d13663c5d32c1) 2022-10-29 00:02:57 -07:00
8d1914359f 2022-10-28 nightly release (fd27246c16d8a80e7de0ccc86d014f9759611b0f) 2022-10-28 00:03:05 -07:00
7ecffceed4 2022-10-27 nightly release (21bef8e944c90cdf98c2ead4369410db252944e1) 2022-10-27 00:03:46 -07:00
3fa360a3c8 2022-10-26 nightly release (0d13ffbbae0ae12e72ed8856ccdd822bf840344c) 2022-10-26 00:03:07 -07:00
dfd50c05fc 2022-10-25 nightly release (3f94adc1056b541851422f887149d54756ed91c1) 2022-10-25 00:03:10 -07:00
9c14af470f 2022-10-24 nightly release (233305a852e1cd7f319b15b5137074c9eac455f6) 2022-10-24 00:03:41 -07:00
21d5156225 2022-10-23 nightly release (efdd43d5193435206fbe76cecc294961d10558db) 2022-10-23 00:03:06 -07:00
8e7fb10812 2022-10-22 nightly release (8461460d55c2474b236a5d7198067ed299631b76) 2022-10-22 00:03:46 -07:00
6418c7d4ba 2022-10-21 nightly release (ff43288d31ea7f3de69f4907e2a36455c742d9c9) 2022-10-21 01:01:25 -07:00
aab82cf32e 2022-10-20 nightly release (472bdb3aa84678b2faa4afe1cb5757f55e14ed9a) 2022-10-20 00:03:02 -07:00
f2aafd1c40 2022-10-19 nightly release (c471c29fdccc3fe48a78083c638a4a88559488b4) 2022-10-19 00:03:50 -07:00
bd3e718742 2022-10-18 nightly release (4814270708cb6141c1fb6202f883c084c71290b4) 2022-10-18 00:03:48 -07:00
cb329eb0ba 2022-10-17 nightly release (364a9973cab8e7458abd27e3926168978fe5428e) 2022-10-17 00:02:45 -07:00
d20ebc91e3 2022-10-16 nightly release (a0c2a7f2eda788a48f1d243940297f1467faf138) 2022-10-16 00:02:54 -07:00
1edc91820e 2022-10-15 nightly release (5210fab64d4322438ebfd8ec9c1170d5effab0a3) 2022-10-15 00:03:45 -07:00
987a944470 2022-10-14 nightly release (f451e824f39516f503c2bdfd785d254b447b9557) 2022-10-14 00:02:58 -07:00
f4ae3bad46 2022-10-13 nightly release (48c648d75df4a2d02ede71f34c11b7f48c80da0e) 2022-10-13 00:03:32 -07:00
2c2a7b256d 2022-10-12 nightly release (25725fd62448165b91647304c26d676db22b6955) 2022-10-12 00:02:49 -07:00
027a1549b9 2022-10-11 nightly release (ad2b04c39c41949d8869de743736bcaeec2dfa0d) 2022-10-11 00:03:23 -07:00
04f63b02a1 2022-10-10 nightly release (c89d286af633a802226c34ccbdd5c7c4be10dcfb) 2022-10-10 00:02:57 -07:00
0dbefb2414 2022-10-09 nightly release (92ac84c98a19310885f3d818aba56b981940d615) 2022-10-09 00:02:53 -07:00
95911a478f 2022-10-08 nightly release (a95889ba7c1ecd8cb0f90507a6152cb035bcefd1) 2022-10-08 00:03:00 -07:00
a23db27756 2022-10-07 nightly release (b14f1d7bb855834ec5f2d3996746e048ba835d69) 2022-10-07 00:02:47 -07:00
99cb9ab0a2 2022-10-06 nightly release (bebd1622490becd09de97003bd22761e973d3edd) 2022-10-06 00:03:11 -07:00
03587d440b 2022-10-05 nightly release (ac25c210e5452d360fcc8cf5ea96c85756e3e370) 2022-10-05 00:02:55 -07:00
9f3d8fec57 2022-10-04 nightly release (82d9592f1baaf943b81bca13a51d655139f050aa) 2022-10-04 00:03:13 -07:00
57d0543a3f 2022-10-03 nightly release (b26eafec079a18bc331f569a7e35497129feed71) 2022-10-03 00:03:10 -07:00
60de01321d 2022-10-02 nightly release (92c2295ab4b5ccdedcc32227c1125a4daf9e2759) 2022-10-02 00:03:40 -07:00
7ac93c0c8f 2022-10-01 nightly release (05d1128106e50075b0fd7d667680214ace34306c) 2022-10-01 00:02:54 -07:00
3bf7094ddb 2022-09-30 nightly release (95681929e4c379c504d8a7761f8104118a5a16db) 2022-09-30 00:02:59 -07:00
7a07ea9138 2022-09-29 nightly release (7628603aeeeb8ed160c2479f75175bb3ea028a42) 2022-09-29 00:02:52 -07:00
5b04269af6 2022-09-28 nightly release (795028a3cec2603a750bdc02ab2b93329f43e883) 2022-09-28 00:02:58 -07:00
04bb9533d5 2022-09-27 nightly release (b360d66391f03a0d5dc2c9a7aff496324b75aa2f) 2022-09-27 00:03:05 -07:00
193cc14176 2022-09-26 nightly release (9c036aa112b0a8fd9afb824d1fda058e2b66ba1d) 2022-09-26 00:03:02 -07:00
69168261cd 2022-09-25 nightly release (db40fbdee03920944219588464d38774ca0b3d05) 2022-09-25 00:02:56 -07:00
6dc8fba854 2022-09-24 nightly release (2b6d2cad29fc1652f80199d647306b9c7c841ca9) 2022-09-24 00:02:52 -07:00
114d9a2be3 2022-09-23 nightly release (cf0de77c2cfb8843b8ae67e6a6f053e6bf6bb3d9) 2022-09-23 00:02:57 -07:00
62b4e98396 2022-09-22 nightly release (99ad8a304898de8bf1e20a6fc12e335e9b7c5064) 2022-09-22 00:02:55 -07:00
8b575a966c 2022-09-21 nightly release (cf2f552cd8a41f4913c370c15804173a3b56a415) 2022-09-21 00:02:54 -07:00
b472915d42 2022-09-20 nightly release (e41d758e26bd2de00e9dd50e94e878f46f9f1b88) 2022-09-20 00:02:50 -07:00
1b1d4240c3 2022-09-19 nightly release (9024015adf01d93fd2533c71fa1e7f06831c2ac7) 2022-09-19 00:02:58 -07:00
39579e7294 2022-09-18 nightly release (12a19a4846c924e9d1e2d37fa0a706fb8eaef9a7) 2022-09-18 00:02:53 -07:00
e42e8dc76f 2022-09-17 nightly release (d6c2080eb49ccaaf43cff37b7f07a85906250b92) 2022-09-17 00:02:58 -07:00
089b57935b 2022-09-16 nightly release (0ec19db7ac88e307135100ddcfc418ae3925844f) 2022-09-16 00:02:51 -07:00
a5ce01692c 2022-09-15 nightly release (625e44c1df211d6753609a9b391cb10f2f94367f) 2022-09-15 00:03:03 -07:00
f35657efc9 2022-09-14 nightly release (55ca297d4e048c641d149a76f2fda7c9ce630ff6) 2022-09-14 00:02:52 -07:00
0feda8a4ba 2022-09-13 nightly release (2fbc0fab20d4af520f69f158f8777e99ad761e1d) 2022-09-13 00:02:48 -07:00
82246b020e 2022-09-12 nightly release (5f960db0e01839f1de8735060b374ea6cbd1713a) 2022-09-12 00:02:48 -07:00
6dd155f968 2022-09-11 nightly release (5f960db0e01839f1de8735060b374ea6cbd1713a) 2022-09-11 00:02:51 -07:00
3bcb7fae2d 2022-09-10 nightly release (96e4bd950027a2f472fafa98616c92403a890bd2) 2022-09-10 00:02:56 -07:00
f708f8d227 2022-09-09 nightly release (dbdc1cd590169576cfb78008f33b7cc795150729) 2022-09-09 00:02:53 -07:00
16ac031e95 2022-09-08 nightly release (e0229d6517385a98afeadbc6391d3592d5027c63) 2022-09-08 00:02:53 -07:00
e3c0d6d5b3 2022-09-07 nightly release (06ebe2d5bc1055f226f56ed2fe26a29038a466e5) 2022-09-07 00:03:03 -07:00
37d93c97bc 2022-09-06 nightly release (1a16b2576f69383480e8be889531e4f574356c62) 2022-09-06 00:02:49 -07:00
83d53043a3 2022-09-05 nightly release (9a6aa9053f79127721875e371addd9c3baeaaac0) 2022-09-05 00:02:50 -07:00
a3ee509f45 2022-09-04 nightly release (e46c1c7931da2d723a6cad4ec307ff4ed4e9cb7f) 2022-09-04 00:02:57 -07:00
a70ad97d6c 2022-09-03 nightly release (2a332afbf41b68080a9436e910b93af7cd336fbc) 2022-09-03 00:02:51 -07:00
e0735fd259 2022-09-02 nightly release (97b2dff60081e1092cfd6d1b3a80c995ff3d6148) 2022-09-02 00:02:44 -07:00
467eb02f43 2022-09-01 nightly release (693ed8b14777d1515c18653f5f8f28a602898662) 2022-09-01 00:02:48 -07:00
325dcc2a47 2022-08-31 nightly release (71d99662a0d7f8a9ad68999c9a014b71591cbb68) 2022-08-31 00:02:57 -07:00
e47d389287 2022-08-30 nightly release (df98c529480b2ece3809b19fc850f57d2054605a) 2022-08-30 00:02:48 -07:00
b044e4c13d 2022-08-29 nightly release (533203f5aaa9f8987f25d828e1c37e755a2ba4ea) 2022-08-29 00:02:46 -07:00
8cdff0bbfb 2022-08-28 nightly release (c9b144ff47ff3b6f358752976d29ac61f2b9b070) 2022-08-28 00:02:45 -07:00
40043c8960 2022-08-27 nightly release (e33897cb9999f124bce126c7e43f96c0755413ef) 2022-08-27 00:02:48 -07:00
733c645ec1 2022-08-26 nightly release (15b560a5c4d638c82e738f3496e2faf95fc328a5) 2022-08-26 00:03:00 -07:00
b7c5e1bc42 2022-08-25 nightly release (b21a6ff6397b74c148c12e4fc41ef12b382443e2) 2022-08-25 00:02:45 -07:00
503de157b7 2022-08-24 nightly release (754d7f05b6841e555cea5a4b2c505dd9e0baec1d) 2022-08-24 00:02:56 -07:00
a0ea0f5fc9 2022-08-23 nightly release (b29a074882a2194d61f1cd7ccf939618d8384d08) 2022-08-23 00:02:51 -07:00
85a04f1c91 2022-08-22 nightly release (765fd77d9a96983e1a2adf496ac2fe66b4825f45) 2022-08-22 00:02:45 -07:00
5c72ae78f9 2022-08-21 nightly release (c9475fa927ef5557aa54e4e9a7bc2a9ab98cdcf7) 2022-08-21 00:02:41 -07:00
1af6aa6752 2022-08-20 nightly release (9732a7d84ee72521d006c9617430c4415016daef) 2022-08-20 00:02:48 -07:00
ba442f621d 2022-08-19 nightly release (61b2cde5270986476f47b58b984de80d02aac321) 2022-08-19 00:02:49 -07:00
2c8f75b138 2022-08-18 nightly release (7263450c309443a8fd3f8ab29fbc04c35692e58f) 2022-08-18 00:02:45 -07:00
89a0e3da4a 2022-08-17 nightly release (343b5f86512f75f8f3bd4b90749c0459743b9e72) 2022-08-17 00:02:53 -07:00
937b90ea32 2022-08-16 nightly release (641d75d0ba0053816a73a6c977ac4a2d6e00e896) 2022-08-16 00:02:55 -07:00
c979188ed7 2022-08-15 nightly release (fbe8c77427ea95eb76876f20239e9493f2a1d6ec) 2022-08-15 00:02:58 -07:00
202caa35b2 2022-08-14 nightly release (408fa38f33d10e02fe762ef9d444ec9fc4f41ffc) 2022-08-14 00:02:53 -07:00
d773851902 2022-08-13 nightly release (c2808571bf823a26e97231d83f5f3f2c5e3d3fe3) 2022-08-13 00:02:44 -07:00
eb92c0d89f 2022-08-12 nightly release (2ca721cda54bcaee2202819bee92088ae2320ebf) 2022-08-12 00:02:44 -07:00
1cdc061e46 2022-08-11 nightly release (3aeb5e4ff9d56ecd680401cfa3f23e97a279efbe) 2022-08-11 00:02:45 -07:00
8a8283d468 2022-08-10 nightly release (e1007950484aa1df4a2f87c9c14b514ffd7736a5) 2022-08-10 00:02:48 -07:00
61f112cb3a 2022-08-09 nightly release (9e65e93c39238ec05aa7913693d7c3e4523bf257) 2022-08-09 00:02:55 -07:00
2085de7d43 2022-08-08 nightly release (1d56ea5e92b7bd041cf84ba9e0bb73f47a7eacf9) 2022-08-08 00:02:44 -07:00
c506576280 2022-08-07 nightly release (4f255dbfb320e8b30f83b35dd4a40c8abd3164fc) 2022-08-07 00:02:54 -07:00
5244615fad 2022-08-06 nightly release (86437b8631918aa4e766df869bca43853f0be6e9) 2022-08-06 00:03:07 -07:00
2869946265 2022-08-05 nightly release (802a4fd28620f03d6537374953dbb4bb887a47b4) 2022-08-05 00:02:47 -07:00
a2b3a3801c 2022-08-04 nightly release (1164c83c3c3070c82618350d57c7bf65ec56f0f1) 2022-08-04 00:02:53 -07:00
881e41c398 2022-08-03 nightly release (9647bec0ec41176adfd0cd5b80ab72c5bf6b2141) 2022-08-03 00:02:54 -07:00
a05de36989 2022-08-02 nightly release (c6b1e096afeabcc118c2e74db6709a1b4c531c53) 2022-08-02 00:03:06 -07:00
f059422a11 2022-08-01 nightly release (53f56894ae0b747d2833ee168599afcfdd4be471) 2022-08-01 00:02:55 -07:00
4a3790b3f0 2022-07-31 nightly release (32cf6c6fb0d98f747f576f52abe533449ae5da84) 2022-07-31 00:02:43 -07:00
f623d1fb75 2022-07-30 nightly release (dc53cb4536839d11ab9a32ec10a0ff0dd96a590f) 2022-07-30 00:02:47 -07:00
5e354516c9 2022-07-29 nightly release (357b7d589c9c451f4850449b9313d8b857ae7140) 2022-07-29 00:02:43 -07:00
053ea30ff8 2022-07-28 nightly release (7f7c81c5f9c4ef92085c1081dfb0f037f768bf27) 2022-07-28 00:02:46 -07:00
27064dc6e1 2022-07-27 nightly release (3cf9c3d8769fa3509c190a4f4c3dacd61ba154af) 2022-07-27 00:02:42 -07:00
983d26963e 2022-07-26 nightly release (1223e94469682271c94ac3b6a0cbe31a3078e351) 2022-07-26 00:02:44 -07:00
f0bd47f927 2022-07-25 nightly release (64094d81fe3cf512d3dfc6b2aabfd1754c86e87d) 2022-07-25 00:02:52 -07:00
63efe6b923 2022-07-24 nightly release (194255bb56a7bdcb5e6fb236d82b4897c2e5967c) 2022-07-24 00:02:41 -07:00
c747033c31 2022-07-23 nightly release (35d97e21c8e2e28fae4a4744ce42f1544972ba1f) 2022-07-23 00:02:52 -07:00
dae37da22c 2022-07-22 nightly release (12cb26509a30077f4bd11972dea9baa03c8d943f) 2022-07-22 00:02:47 -07:00
d7d8cf9170 2022-07-21 nightly release (2fb2740ef976ab6f139c5ccfa17c5c265bd2f78c) 2022-07-21 00:02:37 -07:00
bb7af45ebb 2022-07-20 nightly release (589e8a1da5aefeb27c2187b8f0d11471edb10153) 2022-07-20 00:02:46 -07:00
ab98dd1924 2022-07-19 nightly release (a8f4011e90aeffac0757bfdb971b139e1d348967) 2022-07-19 00:02:52 -07:00
8e9ce913ff 2022-07-18 nightly release (471397d0ee27b61ae1a088ece9f3ead1562152e0) 2022-07-18 02:51:54 -07:00
6f50b0393b 2022-07-18 nightly release (86b86202b58a6e3e7ccde32c51f81eff2e4e6445) 2022-07-18 00:02:28 -07:00
64c005dbd7 2022-07-17 nightly release (0b5b10002af2dce031d4fad337728f81c58a8b10) 2022-07-17 00:02:36 -07:00
468bcbe765 2022-07-16 nightly release (00359ff886e69f064360e5e8c6f2d5c306a105f1) 2022-07-16 00:02:48 -07:00
888ece62d5 2022-07-15 nightly release (75fdebde6290e2955129e665c2b0d99c391542a7) 2022-07-15 00:02:49 -07:00
c77e5b3ace 2022-07-14 nightly release (12c30a8250d1a00a0ac2e03d70ec909c76d922c3) 2022-07-14 00:03:12 -07:00
608f835654 2022-07-13 nightly release (07f4dc9b2c4cf6a00aa12cfb1d5db9056475ae98) 2022-07-13 00:02:53 -07:00
564e65cf0a 2022-07-12 nightly release (28776c45e393ec7d6731a5613f5d79d309036d3a) 2022-07-12 00:03:24 -07:00
4423cee876 2022-07-11 nightly release (3c2199b159b6ec57af3f7ea22d61ace9ce5cf5bc) 2022-07-11 00:02:50 -07:00
1ccfb24e91 2022-07-10 nightly release (f3008be9004418c3651bf89de764355580b994a2) 2022-07-10 00:02:37 -07:00
f1ef8f4871 2022-07-09 nightly release (39f659c3baa491cc060f7df6b55354bd78c30be1) 2022-07-09 00:02:45 -07:00
c10163e770 2022-07-08 nightly release (8389ccbcd809e2596bd4f8a20d069fc919beefdf) 2022-07-08 00:03:18 -07:00
19bac0d4c9 2022-07-07 nightly release (74877943b84cb6d3fc82993ebc8f0e2f8b3c5ce1) 2022-07-07 00:04:30 -07:00
76c411ec8d 2022-07-06 nightly release (fe361dede45747067e39669573cbcf48be4fe4f9) 2022-07-06 00:03:00 -07:00
5728ca13ae 2022-07-05 nightly release (828c787ea98da39eb786925eedcb8527aae07153) 2022-07-05 00:03:21 -07:00
4492525e2e 2022-07-04 nightly release (19f3d4d7950daef5c0e93a7c6da37353381da3d9) 2022-07-04 00:02:45 -07:00
14908b1f7d 2022-07-03 nightly release (19f3d4d7950daef5c0e93a7c6da37353381da3d9) 2022-07-03 00:02:44 -07:00
fa0f6bad6d 2022-07-02 nightly release (19f3d4d7950daef5c0e93a7c6da37353381da3d9) 2022-07-02 00:02:33 -07:00
b12db36e77 2022-07-01 nightly release (ffae7308c9bfbe52964577e35b3c1fdbcfb28e66) 2022-07-01 00:02:38 -07:00
67434681aa 2022-06-30 nightly release (331c0c18033bf4138c9ea468a8c759865dd8ffff) 2022-06-30 00:02:54 -07:00
5452b8baa5 2022-06-29 nightly release (5943aaa0c45bddef9b577cd0483627144585af0d) 2022-06-29 00:02:41 -07:00
2010b6df9a 2022-06-28 nightly release (8a45ef23f564cc092fa0805ea6c0f8f73eed209c) 2022-06-28 00:02:22 -07:00
3245693a02 2022-06-27 nightly release (80b50dfa3ab16de3e90dab8eeed003a98a0da1fe) 2022-06-27 00:02:44 -07:00
5074dab26d 2022-06-26 nightly release (80b50dfa3ab16de3e90dab8eeed003a98a0da1fe) 2022-06-26 00:02:31 -07:00
7b6fd33c64 2022-06-25 nightly release (80b50dfa3ab16de3e90dab8eeed003a98a0da1fe) 2022-06-25 00:02:45 -07:00
2befd0b446 2022-06-24 nightly release (55aa0b1a840e7bf5c53c8e457abf85ded92317eb) 2022-06-24 00:04:40 -07:00
f0e1176a37 2022-06-23 nightly release (9f29d09b3bfbb6c4b64605703f52d7e2fe1fea7f) 2022-06-23 00:02:29 -07:00
4de7faed35 2022-06-22 nightly release (bd7cd7c3569bb708207a80c704355af2ca42b834) 2022-06-22 00:02:50 -07:00
766cc00b15 2022-06-21 nightly release (6d6e77eb6b9649aeb1f21b59145391f28e136a40) 2022-06-21 00:02:35 -07:00
3f72225847 2022-06-20 nightly release (332e43ed1a353a8b0a1d8e0167daaaed1e8b7a34) 2022-06-20 00:02:40 -07:00
c296168bd0 2022-06-19 nightly release (0545c85f744cadc6f06616f15748052cd7cebe20) 2022-06-19 00:02:27 -07:00
c4171aed91 2022-06-18 nightly release (1432a3d6acc7ac58269e5ea7ef6b2373e9a3dbf6) 2022-06-18 00:02:36 -07:00
4c19eece3f 2022-06-17 nightly release (4a4890cfb2440c497fd41e69405ad623c144e32b) 2022-06-17 09:52:36 -07:00
8115b705b3 2022-06-17 nightly release (9d419e81e2cf64504126652def4eec46b72b75c5) 2022-06-17 00:02:34 -07:00
a4fa62064e 2022-06-16 nightly release (86606fbe22c76d71851a38003462e9b6428b47d3) 2022-06-16 00:02:52 -07:00
39c39325d1 2022-06-15 nightly release (bad7720dde598d4300b6523e2c06e61923a2820a) 2022-06-15 00:02:37 -07:00
4981166f3d 2022-06-14 nightly release (18305e30a785a0336837a3e4406b84e3bf36e727) 2022-06-14 00:02:26 -07:00
b6cec31acb 2022-06-13 nightly release (a732bbea232fa32191f259d7cb15e9fabb6c2926) 2022-06-13 00:02:38 -07:00
bf5a87c628 2022-06-12 nightly release (66460c4a6ab0dc29187618bdf0a3d097bbb0ad21) 2022-06-12 00:02:36 -07:00
74ee629516 2022-06-11 nightly release (38350acf8fddc350c893e23a8e77bed2e59f5b06) 2022-06-11 00:02:33 -07:00
92b4285a8d 2022-06-10 nightly release (70d6446a3def513b8082d243d7996ef86c2787a6) 2022-06-10 00:03:19 -07:00
18fa2ad3f3 2022-06-09 nightly release (bfaa187fb083aea66804673de033b17506061de2) 2022-06-09 00:02:53 -07:00
5ab96cd7be 2022-06-08 nightly release (d09e3674d875060c1a848f9634ceff7300fb7c04) 2022-06-08 00:02:33 -07:00
12aaa27135 2022-06-07 nightly release (b40c751c33439bb8721fddb85c25b893ba73ada7) 2022-06-07 00:02:55 -07:00
22aa5e65d2 2022-06-06 nightly release (e6cc2e8d384d3e045b1529c89bcb0460883691e9) 2022-06-06 00:02:46 -07:00
17bd418fc3 2022-06-05 nightly release (7860ce5b79f28d601f31aeade400d9873137fee4) 2022-06-05 00:02:50 -07:00
9c02239648 2022-06-04 nightly release (7860ce5b79f28d601f31aeade400d9873137fee4) 2022-06-04 00:02:36 -07:00
6593c7bbc1 2022-06-03 nightly release (4bb8db85e924b1850d5cf1709a2a0bb7deca603d) 2022-06-03 00:02:43 -07:00
7ba52788aa 2022-06-02 nightly release (4bb8db85e924b1850d5cf1709a2a0bb7deca603d) 2022-06-02 00:02:36 -07:00
b7577f4d6a 2022-06-01 nightly release (01d20491ff2034f283455a59d8faa9b11c43a10c) 2022-06-01 00:02:46 -07:00
d76af8f41c 2022-05-31 nightly release (017b0ae9431ae3780a4eb9bf6d8865dfcd02cd92) 2022-05-31 00:03:03 -07:00
0cac4ed4c7 2022-05-30 nightly release (18273c39da4880b68f8a546978a23516fe5c3e51) 2022-05-30 00:10:03 -07:00
447b0d9521 2022-05-29 nightly release (18273c39da4880b68f8a546978a23516fe5c3e51) 2022-05-29 00:02:36 -07:00
555bfd9e65 2022-05-28 nightly release (18273c39da4880b68f8a546978a23516fe5c3e51) 2022-05-28 00:02:39 -07:00
3038818d93 2022-05-27 nightly release (d98a8148b66fb6f74ce1b437d6bde4f24208bb78) 2022-05-27 00:02:45 -07:00
367ce697da 2022-05-26 nightly release (032d1ace1de47e93edcc69b06da9d79636652991) 2022-05-26 00:02:41 -07:00
281c99ca98 2022-05-25 nightly release (d450034f240681f5133bc61ddc9c0d195c527b59) 2022-05-25 00:02:50 -07:00
8f263fda5c 2022-05-24 nightly release (c7ce4fcc619fab5c82071eac934b505b396ee015) 2022-05-24 00:03:09 -07:00
56d66c84c6 2022-05-23 nightly release (d4345ed0a6c06b1e489e41c219f94d26d3014ce6) 2022-05-23 00:02:35 -07:00
5db8a74f9a 2022-05-22 nightly release (5f1b0a4f48bad11907031ff473b99558ae703593) 2022-05-22 00:03:23 -07:00
00c4d7fa54 2022-05-21 nightly release (47834679ba2f869e66450a74e2add4c04f0006e9) 2022-05-21 00:02:31 -07:00
f5a90b859c 2022-05-20 nightly release (b3e7230efa30e03b9ee8ff3e2b31c38754a6b2b1) 2022-05-20 00:02:54 -07:00
23ce60e364 2022-05-19 nightly release (4124307faeed923175d3e02fa685c0788e99f0ee) 2022-05-19 00:02:44 -07:00
2b57412cef 2022-05-18 nightly release (05ce0f9be63dd6fadd2fb40c29f8f867f267002b) 2022-05-18 11:50:31 -07:00
3e449774fe 2022-05-18 nightly release (7f1e331b34fd0b9caba12aa86469b59366cde9a4) 2022-05-18 00:02:44 -07:00
bd39de2c81 2022-05-17 nightly release (6aea0b10734df77252a2f67315b5c447c263ea6c) 2022-05-17 00:02:47 -07:00
c6efbc72a2 2022-05-16 nightly release (88205886d72486fbeac420c7df99bfe460c38436) 2022-05-16 00:02:33 -07:00
4f32ac4356 2022-05-15 nightly release (e175065c4e31f33247eec4edf026c8ee020d943e) 2022-05-15 00:02:31 -07:00
6a62a087bb 2022-05-14 nightly release (3cade9d454babc70f43ace1ce6481543104934b2) 2022-05-14 00:02:33 -07:00
44bf440b53 2022-05-13 nightly release (65f71c0cbeb080c13e927d37b0d23d39bac6f092) 2022-05-13 00:02:35 -07:00
24898298be 2022-05-12 nightly release (188854eeaf148b685e54a438fa7b9a20d3a28e33) 2022-05-12 00:02:45 -07:00
794df1af9a 2022-05-11 nightly release (fc4f8b5edec69c0ddc63e5210d3f34724d4bd672) 2022-05-11 00:02:36 -07:00
b99396932d 2022-05-10 nightly release (4ceac494259e6b7d57e721793fb0a9ad598a0e12) 2022-05-10 00:02:33 -07:00
e6f2163016 2022-05-09 nightly release (e3dcd175f7aacb6aa2fb150b01335afd508c9d52) 2022-05-09 00:02:29 -07:00
19998c0c4c 2022-05-08 nightly release (e3dcd175f7aacb6aa2fb150b01335afd508c9d52) 2022-05-08 00:02:26 -07:00
60ac495151 2022-05-07 nightly release (901cb7c2e40123822c2d8e5cf4c5af782a4e22a1) 2022-05-07 00:02:33 -07:00
06611fcdd8 2022-05-06 nightly release (040e2e04dd35c49e2b0faeeca964333f7cbc45b9) 2022-05-06 00:03:53 -07:00
0328afd12e 2022-05-05 nightly release (4baf7c0899a2fa9c3630613f37d5fc65971db21c) 2022-05-05 00:02:34 -07:00
1d34bdd21e 2022-05-04 nightly release (201ddafc22e22c387b4cd654f397e05354d73d09) 2022-05-04 00:02:28 -07:00
5a8679f89b 2022-05-03 nightly release (201ddafc22e22c387b4cd654f397e05354d73d09) 2022-05-03 00:02:35 -07:00
fd1f1d0d1b 2022-05-02 nightly release (201ddafc22e22c387b4cd654f397e05354d73d09) 2022-05-02 00:02:41 -07:00
629bca39ad 2022-05-01 nightly release (201ddafc22e22c387b4cd654f397e05354d73d09) 2022-05-01 00:02:30 -07:00
13015c5b75 2022-04-30 nightly release (2540f866ff1eff10dbed7ca47ea9c432e8583da2) 2022-04-30 00:02:31 -07:00
e19fc28ab6 2022-04-29 nightly release (ac31e5d4a3ba20315b5bae26411252c72e0f5c0b) 2022-04-29 00:02:33 -07:00
32808706c5 2022-04-28 nightly release (177ea46332fcde48df5ce0c0efe1552991a5548a) 2022-04-28 00:02:33 -07:00
5a835234d2 2022-04-27 nightly release (ec62901a2c38b63d12843e0f079bdeb7644d8714) 2022-04-27 00:02:34 -07:00
a4974f7e6e 2022-04-26 nightly release (e48b29b1fb1510535efa2a00b6501d5455556aa2) 2022-04-26 00:02:30 -07:00
7393e51ecc 2022-04-25 nightly release (36420b5e8cce9c783903bbc210ed7f2b6535ebf5) 2022-04-25 00:02:36 -07:00
bbd2ae4d6c 2022-04-24 nightly release (77f23d64607142c0cba47f5148ebc1959c9de366) 2022-04-24 00:02:52 -07:00
5b7df69855 2022-04-23 nightly release (2f2158ae4502667951a4d6f5f95d751c7d0927d8) 2022-04-23 00:02:38 -07:00
acc1284169 2022-04-22 nightly release (80fe96c86057efa768ad1eed6c54af0ad259a423) 2022-04-22 00:02:30 -07:00
c0d0c45456 2022-04-21 nightly release (3e10fe323165a94fed66b1487902e8d394ce3be1) 2022-04-21 00:02:32 -07:00
30beb5e09a 2022-04-20 nightly release (d0af05f931e271131e1e207bcc47235059cfd723) 2022-04-20 00:02:39 -07:00
3a600dd46f 2022-04-19 nightly release (736f0d0e46ad70f2382a9035bc72f491970d43f5) 2022-04-19 00:02:41 -07:00
1d23709c9c 2022-04-18 nightly release (f4d89aa28e182bd7768a997a70b033748591ceac) 2022-04-18 00:02:31 -07:00
f827d1bda6 2022-04-17 nightly release (1c5c739993284f908ede18fcd5c1ff79dcadc251) 2022-04-17 00:02:31 -07:00
be96d5d2cb 2022-04-16 nightly release (5dcbcc6de83b552f43415ef60bb2e771bdbc0026) 2022-04-16 00:02:23 -07:00
5cbdc6315b 2022-04-15 nightly release (cc1902a5ed64e5e3b956c5cc6fcbdcd45630f7b8) 2022-04-15 00:02:35 -07:00
053a97bbcb 2022-04-14 nightly release (1118b157bc524944b6094ee0d69adac9ec86931a) 2022-04-14 00:02:33 -07:00
80e358b406 2022-04-13 nightly release (4afe2db641c526800fb8b33532a920be625f3cf4) 2022-04-13 00:02:35 -07:00
80863b0d47 2022-04-12 nightly release (25aa251f37b74ea8354a3e9366912180a6c84613) 2022-04-12 00:02:37 -07:00
3daf56e4fd 2022-04-11 nightly release (a98b4666e0d5b50d876df39a02ae4241d5663ccf) 2022-04-11 14:34:00 -07:00
9afee87fe1 2022-04-11 nightly release (0389f99c4976319f688e936ac520441466f6ab13) 2022-04-11 07:53:19 -07:00
3d8554ce13 2022-04-11 nightly release (caa28ff4959c7cf7165dabf1ffae7c233b8e4b61) 2022-04-11 00:02:30 -07:00
49f28d09b8 2022-04-10 nightly release (f42bdff0166ef503c844353c32b6725391e440ac) 2022-04-10 00:02:29 -07:00
6f47f3883d 2022-04-09 nightly release (58a44523c1f74093ad9a05513a32c45a109b6c55) 2022-04-09 00:02:33 -07:00
02cf8fe543 2022-04-08 nightly release (11f1fef9817bc8a9bc0c3ff7af98ab6cbefe51ed) 2022-04-08 00:02:31 -07:00
8fcdacc23d 2022-04-07 nightly release (ef41201d4acf6b7601577b08b90e36f749db84b8) 2022-04-07 00:02:39 -07:00
59ac7da723 2022-04-06 nightly release (f2a4d49174eb7b705c2c605c45f78d4fa6786be0) 2022-04-06 00:03:18 -07:00
4817424257 2022-04-05 nightly release (b0e047b59da4d6434bf347dd6ae501169218bb1a) 2022-04-05 00:02:42 -07:00
17459dfef2 2022-04-04 nightly release (bf16552617e0f82e6963762b6d40a8ae39105fae) 2022-04-04 00:02:29 -07:00
fa2c3ef58f 2022-04-03 nightly release (bd032cd8d65e36b9d16af42520f5d63e861cb9d4) 2022-04-03 00:02:24 -07:00
4aad5531c0 2022-04-02 nightly release (6efc5c1acfe6afc7268e39d9b058a34e87932560) 2022-04-02 00:04:58 -07:00
2f5ec0f958 2022-04-01 nightly release (c0a6add7eef8ab3715c0f4281b3b7a2a0f1e24b5) 2022-04-01 00:03:50 -07:00
0c6e65a77b 2022-03-31 nightly release (3036a0309dba11d0601d19b5f2d2f4a7e6afa456) 2022-03-31 00:03:40 -07:00
32ec80e619 2022-03-30 nightly release (3269729c683ac01d7e91b109187a69686167bb08) 2022-03-30 00:02:59 -07:00
7313eddbb2 2022-03-29 nightly release (51e50a2ddb9844e0abaf6028fe5e4246448dffff) 2022-03-29 00:03:16 -07:00
ee7c21e4f2 2022-03-28 nightly release (1c5a8125798392f8d7c57e88735f43a14ae0beca) 2022-03-28 00:02:31 -07:00
a9cc98c890 2022-03-27 nightly release (1c5a8125798392f8d7c57e88735f43a14ae0beca) 2022-03-27 00:02:22 -07:00
4e21b8b1d0 2022-03-26 nightly release (90459ba9dc6a812ef74c814d8fd1fa1edaaa27ee) 2022-03-26 00:02:36 -07:00
b7c262acb8 2022-03-25 nightly release (4d82e5bf449929c2732250f8620976e5be96a7f3) 2022-03-25 00:02:40 -07:00
10d252ff4a 2022-03-24 nightly release (d583f9c9d2bd0cc5fb5d369cd498bd62b62c43fe) 2022-03-24 00:03:02 -07:00
6a9d73c33a 2022-03-23 nightly release (65329f4fac8fb22318b7a3eb115e9da207d8d41a) 2022-03-23 00:02:35 -07:00
674a66aea3 2022-03-22 nightly release (7c2103ad5ffdc1ef91231c966988f7f2a61b4166) 2022-03-22 00:02:37 -07:00
3c1c7fd26e 2022-03-21 nightly release (7c2103ad5ffdc1ef91231c966988f7f2a61b4166) 2022-03-21 00:02:48 -07:00
be7f24a66d 2022-03-20 nightly release (38512d90c1380aa7eb66bdfbc52c744bc06b17c6) 2022-03-20 00:02:30 -07:00
2b1020d9c9 2022-03-19 nightly release (b86554abedd9b1bfbca582b1f28e02806a2dfbf8) 2022-03-19 00:02:25 -07:00
46686703a0 2022-03-18 nightly release (6ffe16662f1f4792bf4dc2c2ec35f21b6ff1cc7e) 2022-03-18 00:03:00 -07:00
203c75e473 2022-03-17 nightly release (495e69eaff3037318eafc1b8c2166f11db474a1d) 2022-03-17 00:03:11 -07:00
1a3899dc0e 2022-03-16 nightly release (ac3effd150e829da8bac7525adadec2fad31ece1) 2022-03-16 00:03:08 -07:00
7fc88a1335 2022-03-15 nightly release (060f1b822a6b71e1db07b94f68fdfb53fe47a7d0) 2022-03-15 00:02:26 -07:00
6dc1221394 2022-03-14 nightly release (ef9023e93dabdcfe328bb55869ded08096e2d993) 2022-03-14 00:02:28 -07:00
9b7dac5e86 2022-03-13 nightly release (ef9023e93dabdcfe328bb55869ded08096e2d993) 2022-03-13 00:02:32 -08:00
08dbe0b800 2022-03-12 nightly release (bbdb758423d8f22cfcae492686cba848e3eadbc9) 2022-03-12 00:02:40 -08:00
7d3f48cab3 2022-03-11 nightly release (794f813522deb8afb5e576cec264ce9224cfe067) 2022-03-11 00:02:29 -08:00
7ed23549dd 2022-03-10 nightly release (d8dbf9d8b2d73c4799555af04d8fdf9af9d027a3) 2022-03-10 00:02:31 -08:00
6874a3d788 2022-03-09 nightly release (beda4e8b2f644434202c3d27eac21b5bf9b82321) 2022-03-09 00:02:28 -08:00
df69a9d17e 2022-03-08 nightly release (07410207c487369d87a03e4602f72ec870abe4b7) 2022-03-08 00:02:26 -08:00
8057557dc7 2022-03-07 nightly release (5167e9d59d76d67f4a240f94600ce6bba2c70ed3) 2022-03-07 00:02:27 -08:00
f1c8cb63b4 2022-03-06 nightly release (5167e9d59d76d67f4a240f94600ce6bba2c70ed3) 2022-03-06 00:02:44 -08:00
59ceb67b45 2022-03-05 nightly release (5167e9d59d76d67f4a240f94600ce6bba2c70ed3) 2022-03-05 00:02:31 -08:00
526746077c 2022-03-04 nightly release (b955a046cd7ac6178e8a23c855a98f3d546dec37) 2022-03-04 00:02:25 -08:00
9b5962b28a 2022-03-03 nightly release (715c000cf107a83583cf6292d61e121562296be9) 2022-03-03 00:02:38 -08:00
32c488b10c 2022-03-02 nightly release (81437e66c1cc02f3c18c60b0d3467fc80a51ae09) 2022-03-02 09:20:52 -08:00
54d1329999 2022-03-02 nightly release (2f957f513e6faebb001d60a544aedd8042ce7026) 2022-03-02 00:02:34 -08:00
e71a0f5247 2022-03-01 nightly release (5e86505693c4c7e518e9e08cfa206c6405df7f67) 2022-03-01 00:02:25 -08:00
4d45de45d4 2022-02-28 nightly release (6688487f3ec22b7e89553b8acd6782264061f5cd) 2022-02-28 00:05:23 -08:00
bc9703b4fe 2022-02-27 nightly release (6688487f3ec22b7e89553b8acd6782264061f5cd) 2022-02-27 00:02:20 -08:00
82fe813e3a 2022-02-26 nightly release (6688487f3ec22b7e89553b8acd6782264061f5cd) 2022-02-26 00:02:20 -08:00
bb2f184fe2 2022-02-25 nightly release (6688487f3ec22b7e89553b8acd6782264061f5cd) 2022-02-25 00:02:36 -08:00
143655fcc9 2022-02-24 nightly release (6688487f3ec22b7e89553b8acd6782264061f5cd) 2022-02-24 00:02:51 -08:00
ecf368e6b2 2022-02-23 nightly release (7807a83f6e677987e8cb0bdbebd04ccdd157b68b) 2022-02-23 00:02:44 -08:00
e8d0a25159 2022-02-22 nightly release (f41db99a5690bf0ae4d51d9cdb9aaff95703f6c6) 2022-02-22 00:02:30 -08:00
47698f9118 2022-02-21 nightly release (f41db99a5690bf0ae4d51d9cdb9aaff95703f6c6) 2022-02-21 00:02:38 -08:00
bbad85aa47 2022-02-20 nightly release (f41db99a5690bf0ae4d51d9cdb9aaff95703f6c6) 2022-02-20 00:03:46 -08:00
74e6ae00b6 2022-02-19 nightly release (1646a0033dda77eca980c40870524996b4ad1f76) 2022-02-19 00:02:40 -08:00
ffd57dc90c 2022-02-18 nightly release (d4f3d07ae251876054f5681afc44e0d6057d851b) 2022-02-18 12:41:03 -08:00
cbab909688 2022-02-18 nightly release (d4f3d07ae251876054f5681afc44e0d6057d851b) 2022-02-18 00:02:37 -08:00
56dccfef91 2022-02-17 nightly release (e0e1e0b114d57542e65a054d05a81618e786fe18) 2022-02-17 15:14:25 -08:00
35e605ec6f 2022-02-17 nightly release (bbac8c9c4816c87eae17a04b60d4103940c08f83) 2022-02-17 00:03:18 -08:00
7e58a2be96 2022-02-16 nightly release (47c69933558040158c1533f1b500d15153236b3b) 2022-02-16 00:02:25 -08:00
e61d57f299 2022-02-15 nightly release (47c69933558040158c1533f1b500d15153236b3b) 2022-02-15 00:02:42 -08:00
19bed12bb3 2022-02-14 nightly release (1776caf361fc2c652f0c00b2fd42714447cefc29) 2022-02-14 00:02:37 -08:00
e83d4e52c0 2022-02-13 nightly release (c73cc92eff3160121973930dca2a2927268dc2c1) 2022-02-13 00:02:31 -08:00
a8ce06044a 2022-02-12 nightly release (444191de5680e7c5526614d94adbbcd7cba985e2) 2022-02-12 00:02:34 -08:00
1222e07cd4 2022-02-11 nightly release (730fef25c71dfb7c7d3f403df48541cc0aac154d) 2022-02-11 00:02:29 -08:00
30eddeb999 2022-02-10 nightly release (239531fb3165fbca13a18febbabff493ea4fd55d) 2022-02-10 00:02:25 -08:00
b362168f8c 2022-02-09 nightly release (4b69a2373f8f77548fba82886ab0dc8c06a38d87) 2022-02-09 00:02:52 -08:00
641a582e7b 2022-02-08 nightly release (224093db113fd333a7cb8e5e07308de5098e4a62) 2022-02-08 00:02:38 -08:00
3053858b8d 2022-02-07 nightly release (5c6b897516ac59775d7d58692fad052c399c4ec3) 2022-02-07 00:02:26 -08:00
d804a55840 2022-02-06 nightly release (5c6b897516ac59775d7d58692fad052c399c4ec3) 2022-02-06 00:03:04 -08:00
49ebad53c5 2022-02-05 nightly release (f2f40ce870488b0cfc6e1d9c1cdea3a95f01a4c1) 2022-02-05 00:02:26 -08:00
e9259fa905 2022-02-04 nightly release (1ad53b51d03d9ff4085bcc02b3a65088ed4a6c80) 2022-02-04 00:02:34 -08:00
e2e9c916a5 2022-02-03 nightly release (58dabebcd746aad95a37bdfc7e60e5d22f0f5641) 2022-02-03 00:02:30 -08:00
72056d08cd 2022-02-02 nightly release (f20fa66f704a61b4570ce372add59c7469f44a96) 2022-02-02 00:03:00 -08:00
b5590f46d3 2022-02-01 nightly release (a319bce58d66d12cd71fbf54a145cf7b7563eebc) 2022-02-01 09:00:43 -08:00
2352fadbfa 2022-02-01 nightly release (8fa5cde3a9fab1f82bbb424312995035f2342eaa) 2022-02-01 00:02:33 -08:00
7ddf106b1f 2022-01-31 nightly release (8fa5cde3a9fab1f82bbb424312995035f2342eaa) 2022-01-31 00:02:57 -08:00
3e25201ab5 2022-01-30 nightly release (8fa5cde3a9fab1f82bbb424312995035f2342eaa) 2022-01-30 00:02:53 -08:00
d53c69395a 2022-01-29 nightly release (9413c0cd3e15c2b38e7df500613cff1e7951699e) 2022-01-29 00:02:29 -08:00
c8381acacb 2022-01-28 nightly release (fb0e27d38a8fdab4e1c14d6378c9e41cb30fd6a3) 2022-01-28 10:47:42 -08:00
573a6ad052 2022-01-28 nightly release (7aa4a1f63e14406807ff6cb45faabf0151a63db8) 2022-01-28 00:02:43 -08:00
aaa24811c5 2022-01-27 nightly release (12e01f78257479f91b0f23d8d93318bc92945c87) 2022-01-27 00:02:29 -08:00
a2f0cefe70 2022-01-26 nightly release (12e01f78257479f91b0f23d8d93318bc92945c87) 2022-01-26 00:02:37 -08:00
4d321910fa 2022-01-25 nightly release (b372be4211d40be92ffbb025cac0038ee3445141) 2022-01-25 00:02:51 -08:00
e5e237cdd2 2022-01-24 nightly release (9b3a56eecfab13877d32f0a5051e1584746668bc) 2022-01-24 00:02:35 -08:00
a031636e60 2022-01-23 nightly release (9b3a56eecfab13877d32f0a5051e1584746668bc) 2022-01-23 00:02:21 -08:00
f7e78364e4 2022-01-22 nightly release (7680a0ae9dce001265c34869af469c55653f8c04) 2022-01-22 00:02:54 -08:00
fe71938284 2022-01-21 nightly release (2eb4b05b94811286593171ad1c6f1f97b36cf665) 2022-01-21 00:02:27 -08:00
121e193266 2022-01-20 nightly release (f45e217c0158c247772f6491a18662cc972c29cd) 2022-01-20 00:03:13 -08:00
6ee1aed356 2022-01-19 nightly release (30739f532940a6dbc19bccb56442e6352bf3fed7) 2022-01-19 00:02:39 -08:00
c199e3cdb7 2022-01-18 nightly release (17540c5c80f5c6cd4e0fee42ec47d881e46f47f9) 2022-01-18 00:02:27 -08:00
1261c6d6bb 2022-01-17 nightly release (1ecfa1d61a3e56aab7f3b69c33fac9e9a0eebb6c) 2022-01-17 00:03:26 -08:00
d949a9746b 2022-01-16 nightly release (1ecfa1d61a3e56aab7f3b69c33fac9e9a0eebb6c) 2022-01-16 00:02:28 -08:00
f1436c776e 2022-01-15 nightly release (c43e0286a9fd234b98a0666c8539b65d0e114139) 2022-01-15 00:02:20 -08:00
050720060a 2022-01-14 nightly release (356af8f857d7c8d5948a438002757c4a4a9c45e8) 2022-01-14 00:02:26 -08:00
19172fdb82 2022-01-13 nightly release (60632a00fe6212159164d92ad69766925ab15c97) 2022-01-13 11:21:32 -08:00
9d73bfd9c8 2022-01-10 nightly release (2bed616e0fb1a937b1bb1eee8e6cf83734e839bd) 2022-01-10 00:02:45 -08:00
8e9a40233c 2022-01-09 nightly release (49a07c892265ed89ed8302db15af4647746f6543) 2022-01-09 00:03:02 -08:00
a7432d187f 2022-01-08 nightly release (0eb2fc608c0ea8c4150a6ba823e80a52e4d9d158) 2022-01-08 00:02:27 -08:00
d097728842 2022-01-07 nightly release (ddea6980fe7ce6168e13710164f06bd1b7ca1674) 2022-01-07 00:04:28 -08:00
65fabd7f04 2022-01-06 nightly release (e1aa5db108deb4f3e0faa95b703d4bbc9f7453b7) 2022-01-06 00:02:29 -08:00
39e21b875b 2022-01-05 nightly release (14457bb8cbaebf501872fc4183376eb6d7e62d81) 2022-01-05 00:03:09 -08:00
aa16a081e0 2022-01-03 nightly release (fa09099ba35fcd42347732ca3a5f8ddaf145da1b) 2022-01-03 00:02:28 -08:00
b526651566 2022-01-02 nightly release (ce86881afadc0fea628c7e47d64a4073f3e09894) 2022-01-02 00:05:04 -08:00
758a1e7d2d 2022-01-01 nightly release (ce86881afadc0fea628c7e47d64a4073f3e09894) 2022-01-01 00:02:20 -08:00
21348f6cdb 2021-12-31 nightly release (7bfaa230be303280740b1f94574fb6bc4aee2758) 2021-12-31 00:02:26 -08:00
d94f86e906 2021-12-30 nightly release (2b00dbbbbcb23dc506072a81d04145fb5f983490) 2021-12-30 00:04:33 -08:00
6d3cc13581 2021-12-29 nightly release (a0c99a8d3bce895c6bb6a220e98ca84274eb33dd) 2021-12-29 00:03:09 -08:00
766e7ac1bf 2021-12-28 nightly release (795af1578ccade97792646e02e5ec3c295385501) 2021-12-28 00:05:39 -08:00
5796475e9f 2021-12-27 nightly release (795af1578ccade97792646e02e5ec3c295385501) 2021-12-27 00:03:03 -08:00
59aa7dd7b7 2021-12-26 nightly release (795af1578ccade97792646e02e5ec3c295385501) 2021-12-26 00:02:26 -08:00
788fb7ea22 2021-12-25 nightly release (795af1578ccade97792646e02e5ec3c295385501) 2021-12-25 00:02:28 -08:00
3264153060 2021-12-24 nightly release (795af1578ccade97792646e02e5ec3c295385501) 2021-12-24 00:02:29 -08:00
81d11862e2 2021-12-23 nightly release (a421ee0e52e57e854656d40df3d8280af27ab4a0) 2021-12-23 00:02:56 -08:00
ec8f98980f 2021-12-22 nightly release (6217fee96bf1dc4e1343935d7ff87053f9bf22e4) 2021-12-22 00:02:42 -08:00
8f2a8717fb 2021-12-21 nightly release (5651e1e3ad435ec45b9435b9d78ff2fbc715fa0b) 2021-12-21 00:02:26 -08:00
4811137a2b 2021-12-20 nightly release (7ea86dfdb162758c9fbbf6807ab1dd778591c062) 2021-12-20 00:03:21 -08:00
f0e58f4f9b 2021-12-19 nightly release (fb34af1b211d0b0ed7c2fcc63599215c8fb107c2) 2021-12-19 00:02:54 -08:00
ff227a22b7 2021-12-18 nightly release (9ee3006d583e9853da79f7bd12431c67a863519a) 2021-12-18 00:02:27 -08:00
bb1f3fce83 2021-12-17 nightly release (4a6a5d163012a81268f0db20e9fcc3a926dd4d54) 2021-12-17 00:02:23 -08:00
54d8b577b7 2021-12-16 nightly release (3d358a76783acef87f282cc0fb20818eeb4c133c) 2021-12-16 00:02:38 -08:00
1446d40fb4 2021-12-15 nightly release (3d358a76783acef87f282cc0fb20818eeb4c133c) 2021-12-15 00:02:58 -08:00
785dab1d01 2021-12-14 nightly release (3d358a76783acef87f282cc0fb20818eeb4c133c) 2021-12-14 00:02:31 -08:00
95346adead 2021-12-13 nightly release (e948856ce7ead632483e35714a9a27ea2fa68ee7) 2021-12-13 00:05:52 -08:00
18dc1aa4a1 2021-12-12 nightly release (e948856ce7ead632483e35714a9a27ea2fa68ee7) 2021-12-12 00:02:38 -08:00
0e83eb8b88 2021-12-11 nightly release (e948856ce7ead632483e35714a9a27ea2fa68ee7) 2021-12-11 00:03:25 -08:00
bfd8a5fd5f 2021-12-10 nightly release (e948856ce7ead632483e35714a9a27ea2fa68ee7) 2021-12-10 00:02:19 -08:00
fc105afbd8 2021-12-09 nightly release (8b20dde93240642b3fce14b304e2d5e6d09d9891) 2021-12-09 00:02:36 -08:00
98fc2d6d95 2021-12-08 nightly release (e06af7913692641dbcad1cf4d7931f32b8b4c2a7) 2021-12-08 09:28:55 -08:00
4c5efdfc23 2021-12-08 nightly release (bd8a4a937216433b281a333905175214a12f5fc1) 2021-12-08 00:02:35 -08:00
f12c9eb1a0 2021-12-07 nightly release (38c576cfef0473e2d1921e83ed52a2b4364cdede) 2021-12-07 00:04:14 -08:00
7ae7bea489 2021-12-06 nightly release (6a4fa860262951ca14db0c53fc7d60c3dbc48af4) 2021-12-06 00:02:59 -08:00
ea056f797f 2021-12-05 nightly release (6a4fa860262951ca14db0c53fc7d60c3dbc48af4) 2021-12-05 00:07:22 -08:00
6c54275622 2021-12-04 nightly release (6a4fa860262951ca14db0c53fc7d60c3dbc48af4) 2021-12-04 00:04:13 -08:00
ef07820bab 2021-12-03 nightly release (abda069ce203bbe9b655a939a58a7fedca86af80) 2021-12-03 00:03:58 -08:00
afbb6e88ab 2021-12-02 nightly release (cbe0a38d8c99e5c860d61818b2452ee3efa6d22f) 2021-12-02 00:02:27 -08:00
4b0e1e1c0a 2021-12-01 nightly release (e534c5efd7e7a0ed476fa1e9ec2f37ccd3a1b63d) 2021-12-01 00:02:40 -08:00
379f835b6c 2021-11-30 nightly release (1342f19a8c2d92ed86bc32a0b3a6fc9b35b3e3e3) 2021-11-30 00:06:12 -08:00
9212bb98d6 2021-11-29 nightly release (6ae34ea6f8b65d2ad36e417c3d525507901cfd7f) 2021-11-29 00:06:32 -08:00
1b6bb4f7b0 2021-11-28 nightly release (b10929a14a32c90ac5943cc3f27a3a9105e6f53f) 2021-11-28 00:10:41 -08:00
13468ed9ea 2021-11-27 nightly release (cffad597ea620600472c509b642a9ad03a56fdbe) 2021-11-27 00:05:38 -08:00
f547c5c960 2021-11-26 nightly release (5fdcc20d8d96a6b42387f57c2ce331516ad94228) 2021-11-26 00:07:52 -08:00
dfa8a087e3 2021-11-25 nightly release (5fdcc20d8d96a6b42387f57c2ce331516ad94228) 2021-11-25 00:04:09 -08:00
84395832d9 2021-11-24 nightly release (b5b62b340891f041b378681577c74922d21700a9) 2021-11-24 00:04:25 -08:00
e42361b602 2021-11-23 nightly release (d6a68e0b8dfe314da642e17e84b1f4cb095d00ba) 2021-11-23 00:07:38 -08:00
7cdf1ed9bd 2021-11-22 nightly release (e1c449ff342ee00a4b25e1651bd08a41b7e9fda4) 2021-11-22 00:03:38 -08:00
95589e9ba3 2021-11-21 nightly release (c7ecf1498d961415006c3710ac8d99166fe5d634) 2021-11-21 00:07:57 -08:00
cf31235b62 2021-11-20 nightly release (75955e4ef8a941d72db20c5098371325bd83ffd1) 2021-11-20 00:05:00 -08:00
15077954a3 2021-11-19 nightly release (ca921117589dfd8eca7c18bb2c31350dd26bbd45) 2021-11-19 00:02:50 -08:00
40631bb9cd 2021-11-18 nightly release (980778713588be8a583557c4693634c3782b00c4) 2021-11-18 00:02:53 -08:00
4eb447d938 2021-11-17 nightly release (aa9ee8d02aecee1a01f7e4fe22fd0660851227e8) 2021-11-17 00:06:20 -08:00
bfc110e848 2021-11-16 nightly release (722af775c3ff01c4af4f3fe79bb12997c8ab665a) 2021-11-16 00:05:37 -08:00
649bf082f6 2021-11-15 nightly release (1adeeabdc0c8832420c091c5c668843768530d7f) 2021-11-15 00:03:03 -08:00
228a46daa1 2021-11-14 nightly release (1adeeabdc0c8832420c091c5c668843768530d7f) 2021-11-14 00:06:12 -08:00
39c478062a 2021-11-13 nightly release (80339e85c5fea7c1f3ef1dd63ce67c049691194f) 2021-11-13 00:03:34 -08:00
96a56d12b5 2021-11-12 nightly release (613c1aca6dcc5c9764d81ddfb1e33f7b7b06bd5f) 2021-11-12 00:02:50 -08:00
65f638ab6c 2021-11-11 nightly release (1f07efd0f21e8750967c907c3f96b5344d3ab8c0) 2021-11-11 00:02:47 -08:00
4670c0042a 2021-11-10 nightly release (6b44e75f6bccca7acc8ec31a635f1175c265ac54) 2021-11-10 00:05:00 -08:00
ce5eb6a07a 2021-11-09 nightly release (4b1d044498f49ad5f770354174070a4277279c2d) 2021-11-09 00:02:29 -08:00
05a2aa8a7f 2021-11-08 nightly release (191b48b12f33e1e9525882da0c62b68686d69e42) 2021-11-08 00:04:23 -08:00
2512eac760 2021-11-07 nightly release (9fb3ba9d7bc5f6f8852a2bafe053b16a26d73e51) 2021-11-07 00:02:41 -07:00
9f25d95f9b 2021-11-06 nightly release (ae501a9727c16b8bc83c2fd7b40d9d801133ac91) 2021-11-06 00:04:47 -07:00
458c445463 2021-11-05 nightly release (f1754319e32f302a53520ac3608addb31402209b) 2021-11-05 00:03:07 -07:00
f14f488fd2 2021-11-04 nightly release (2486061c72c12ac7eb53946448f0a29525bf8cd1) 2021-11-04 00:09:46 -07:00
755da00eda 2021-11-03 nightly release (54241a9cfa1d4c5ee2096cd9acec1ae7bf623c37) 2021-11-03 00:07:22 -07:00
c81e8a07b2 2021-11-02 nightly release (c65f332da47eb9bc76aefc50122cae2630fff2cc) 2021-11-02 00:12:01 -07:00
c0f53f117a 2021-11-01 nightly release (97f29bda59deab8c063cf01f0a8ff4321b93c55e) 2021-11-01 00:11:29 -07:00
79922746b0 2021-10-31 nightly release (510e3026a9bdac6e347e8756c7750029201ecc82) 2021-10-31 00:03:48 -07:00
1a13e431d3 2021-10-30 nightly release (c00806beda43063a0978a81aa4e6ce42cb893fe0) 2021-10-30 00:04:21 -07:00
56587756dc 2021-10-29 nightly release (26241994b26df626ca81ec7c666b54bea90e2dd8) 2021-10-29 00:06:31 -07:00
729c0ef82e 2021-10-28 nightly release (fae1c0a4340ef4698f43875f5ed84ba512bdcd95) 2021-10-28 00:06:50 -07:00
4a04d2b0fe 2021-10-27 nightly release (c88da701e2f94987ea58a0980cc19cfb956cd980) 2021-10-27 00:02:48 -07:00
85a7535c03 2021-10-26 nightly release (0e371e413dd12b93cf50ad2441652ee6e0eb7217) 2021-10-26 00:11:04 -07:00
52fec21b2f 2021-10-25 nightly release (83f70db95cf9f53a98fae63d511b5013279a9ac2) 2021-10-25 00:13:15 -07:00
ef0fca4249 2021-10-24 nightly release (83f70db95cf9f53a98fae63d511b5013279a9ac2) 2021-10-24 00:03:57 -07:00
db84da55b7 2021-10-23 nightly release (83f70db95cf9f53a98fae63d511b5013279a9ac2) 2021-10-23 00:03:23 -07:00
5c9ba2feff 2021-10-22 nightly release (9d4549295d8da634771d6040c224d21928805be7) 2021-10-22 00:04:51 -07:00
15fecc4c83 2021-10-21 nightly release (f8f04d5424f9ea3068bcd16d1c799f161944936f) 2021-10-21 00:02:52 -07:00
03975588d7 2021-10-20 nightly release (32e3003726070597da9c6237e59c8ba09744cfe2) 2021-10-20 00:06:35 -07:00
c186c995df 2021-10-19 nightly release (0d203a16fed340488be0966d377e8a6f7f8f4244) 2021-10-19 00:04:57 -07:00
15ef6a1052 2021-10-18 nightly release (49a1d7bfcb9b0fc5f0ee62d91f5d6c76e4cf9dc8) 2021-10-18 00:06:57 -07:00
cb85f701d4 2021-10-17 nightly release (49a1d7bfcb9b0fc5f0ee62d91f5d6c76e4cf9dc8) 2021-10-17 00:08:45 -07:00
1392b8260e 2021-10-16 nightly release (49a1d7bfcb9b0fc5f0ee62d91f5d6c76e4cf9dc8) 2021-10-16 00:05:17 -07:00
8640112dea 2021-10-15 nightly release (49a1d7bfcb9b0fc5f0ee62d91f5d6c76e4cf9dc8) 2021-10-15 00:04:15 -07:00
d1b988e47c 2021-10-14 nightly release (6634570aef94b34dfc3a40865c9ba057356e6a47) 2021-10-14 00:04:21 -07:00
da7bfd9bcc 2021-10-13 nightly release (06a156efc75f726ca95cadc043bab0c0d75d7548) 2021-10-13 00:04:56 -07:00
e5dba35501 2021-10-12 nightly release (99711133403eff8474af0e710a45d367f4fb5e66) 2021-10-12 00:17:43 -07:00
90bf35d772 2021-10-11 nightly release (99711133403eff8474af0e710a45d367f4fb5e66) 2021-10-11 00:03:33 -07:00
29fe93c375 2021-10-10 nightly release (b96c7aea73705a94e584084fa410a7392cb7523f) 2021-10-10 00:04:45 -07:00
654e2c11ec 2021-10-09 nightly release (85b562dd2bd0a0738159746ce83bf110effcc065) 2021-10-09 00:05:22 -07:00
cba9960d6a 2021-10-08 nightly release (ca363d1e22f56722855d2c937eeb508784ad4e33) 2021-10-08 00:07:12 -07:00
a1937d7c45 2021-10-07 nightly release (67970e8c9b326e8e5d6e30ce652ec965f3599f3f) 2021-10-07 00:15:48 -07:00
6102554be1 2021-10-06 nightly release (3bd26792c06a4537883537997078de9d4a73e48d) 2021-10-06 00:08:48 -07:00
a21f2ab401 2021-10-05 nightly release (6eb3a1c8310253c6875d1d703f3cd00cdd9b00f1) 2021-10-05 00:04:15 -07:00
125a559b5c 2021-10-04 nightly release (89ed9bdaee468195faed1eb230960491eb350304) 2021-10-04 00:03:29 -07:00
a7b6201b1e 2021-10-03 nightly release (29c0725e8a0de91e1a4338dec785d1638aa02931) 2021-10-03 00:05:49 -07:00
2cead16bcb 2021-10-02 nightly release (10f62942818281eb99e0bef5f1afcc71c66599a7) 2021-10-02 00:12:13 -07:00
03686b218d 2021-10-01 nightly release (8297a16cc07fa88799fd221cca8d5efa1b71fe5f) 2021-10-01 00:15:23 -07:00
6a58458563 2021-09-30 nightly release (3900509b7da866c22e08120e73a0b54cc30e4de7) 2021-09-30 00:06:50 -07:00
13ee5d4f98 2021-09-29 nightly release (93852bb2d41d90b6ac660015d79f7474bcebb774) 2021-09-29 00:02:57 -07:00
01e3a7f7e7 2021-09-28 nightly release (63bb7c6dbab5644c6f95ccfb66de00db40fa6340) 2021-09-28 00:04:10 -07:00
1a7aea8cb1 2021-09-27 nightly release (146817c9d07ecc6f3af8111f31e37a8c64948cc0) 2021-09-27 00:05:24 -07:00
55eac26522 2021-09-26 nightly release (146817c9d07ecc6f3af8111f31e37a8c64948cc0) 2021-09-26 00:07:02 -07:00
eb64e52a57 2021-09-25 nightly release (af7238f2149fd23b87dbec0b5e0a2e5a82e7f0d1) 2021-09-25 00:03:57 -07:00
af95408d21 2021-09-24 nightly release (d78b3909e83fe6b8f3629bd7013528edbd7edc26) 2021-09-24 00:04:48 -07:00
42cf661a25 2021-09-23 nightly release (0ca1102609e9d2b06bad6965b695c0d76d8ffe46) 2021-09-23 00:05:23 -07:00
701771a879 2021-09-22 nightly release (3f5f721ab34e8b540bba47efbb9fc93d1bac0921) 2021-09-22 00:04:12 -07:00
6cf311ca6d 2021-09-21 nightly release (0dc98728bc06e1e0a553b8ad4ed2591b688cc72f) 2021-09-21 00:06:56 -07:00
5b07b6ad2f 2021-09-20 nightly release (88032d894311e5c0aed8bbc21a4306bc6be4af82) 2021-09-20 00:03:29 -07:00
87df24cd30 2021-09-19 nightly release (88032d894311e5c0aed8bbc21a4306bc6be4af82) 2021-09-19 00:03:22 -07:00
bd05cbf977 2021-09-18 nightly release (6707dfeefb00512eba1d95cb91306671638dc4d5) 2021-09-18 00:03:25 -07:00
64fd318420 2021-09-17 nightly release (8c38d141df429459ea6891847950ce157ac82b2c) 2021-09-17 00:04:16 -07:00
20ba201201 2021-09-16 nightly release (2bb898e039d90d3897cc0fbd1886f2b2fe4dbcfb) 2021-09-16 00:03:54 -07:00
64187fc690 2021-09-15 nightly release (6ab97fbc287ea89ce81abcb24829b502aeb309cc) 2021-09-15 00:03:13 -07:00
99da1f699d 2021-09-14 nightly release (c4073af61d4e530f8627dced870f42526d93dcaf) 2021-09-14 00:06:38 -07:00
84a9f5031f 2021-09-13 nightly release (d46ea03871562d4c93a9dfedcb211051338b44a9) 2021-09-13 00:09:58 -07:00
58df55da4d 2021-09-12 nightly release (dd2d48df07d6b9354f3e448bf66655941a22d1e1) 2021-09-12 00:04:31 -07:00
6862deee75 2021-09-11 nightly release (ade4bf3e82ea369e77d511a796ba936ce281aa89) 2021-09-11 00:02:27 -07:00
5286f993ad 2021-09-10 nightly release (11ef68938c4dda67efb9944ec4f3521776e0f9bc) 2021-09-10 00:05:13 -07:00
c99e75cc1e 2021-09-09 nightly release (15532595209d2daf34d35e10f8d3d3b64966aea2) 2021-09-09 00:09:14 -07:00
58c529752a 2021-09-08 nightly release (1a1fb31cfa3135e56c533da037b5d8dc6981b7fa) 2021-09-08 00:09:21 -07:00
277d05ac57 2021-09-07 nightly release (0c4e4e588e2e3308c659f741e7bc5cabf0975c09) 2021-09-07 00:02:23 -07:00
b7e88bfb19 2021-09-06 nightly release (0c4e4e588e2e3308c659f741e7bc5cabf0975c09) 2021-09-06 00:09:57 -07:00
d5e8254a4a 2021-09-05 nightly release (0c4e4e588e2e3308c659f741e7bc5cabf0975c09) 2021-09-05 00:04:55 -07:00
42fac310f6 2021-09-04 nightly release (0c4e4e588e2e3308c659f741e7bc5cabf0975c09) 2021-09-04 00:04:19 -07:00
7ee25ea72d 2021-09-03 nightly release (0c4e4e588e2e3308c659f741e7bc5cabf0975c09) 2021-09-03 00:09:38 -07:00
c9eff59b96 2021-09-02 nightly release (0c4e4e588e2e3308c659f741e7bc5cabf0975c09) 2021-09-02 00:07:41 -07:00
9c414cc253 2021-09-01 nightly release (0c4e4e588e2e3308c659f741e7bc5cabf0975c09) 2021-09-01 10:47:03 -07:00
aab14ffd43 2021-09-01 nightly release (8406dba65af414f4ac9bb569ca8d70752611e4ba) 2021-09-01 00:05:36 -07:00
cca8c1fe99 2021-08-31 nightly release (8406dba65af414f4ac9bb569ca8d70752611e4ba) 2021-08-31 00:05:17 -07:00
47829fdabc 2021-08-30 nightly release (8406dba65af414f4ac9bb569ca8d70752611e4ba) 2021-08-30 00:03:14 -07:00
5ceddc29e7 2021-08-29 nightly release (8406dba65af414f4ac9bb569ca8d70752611e4ba) 2021-08-29 00:02:17 -07:00
fc8a7a5769 2021-08-28 nightly release (8406dba65af414f4ac9bb569ca8d70752611e4ba) 2021-08-28 00:04:29 -07:00
c9287bd4b7 2021-08-27 nightly release (510d2ece81c18ba3f9bbcbc509effe281a77206c) 2021-08-27 00:06:04 -07:00
3d4fed4dc0 2021-08-26 nightly release (f4bc28990f6edcaf6bfc9e9737a70ea0be514198) 2021-08-26 00:03:25 -07:00
ece2e093bc 2021-08-25 nightly release (8dda299d9631e0f6e121dcb9f8f94bbdd8435515) 2021-08-25 00:11:42 -07:00
0d14ad556e 2021-08-24 nightly release (f5d585391d13287250e85cbd55a17c5e0b8ac2a8) 2021-08-24 00:11:28 -07:00
ca87998c97 2021-08-23 nightly release (d6133b2fe6b863dd49fb21641bd04e24e19ac794) 2021-08-23 00:02:58 -07:00
058c01d851 2021-08-22 nightly release (2289a12f21c54da93bf5d696e3f9aea83dd9c10d) 2021-08-22 00:03:02 -07:00
161d945f2d 2021-08-21 nightly release (a8de0d83fed2d68512c0b0e20716bd63e6769469) 2021-08-21 00:02:47 -07:00
38b78b9bfe 2021-08-20 nightly release (ccca66597ab7079c39b744c2906171aa63e7db61) 2021-08-20 00:13:47 -07:00
41b2532c21 2021-08-19 nightly release (2aa19f33c6272cb016c629792ddc70cf9636fc9a) 2021-08-19 00:02:54 -07:00
67788eefcd 2021-08-18 nightly release (cd5e9dcc1dd2d240aa034b1f02b9886b44b1efa6) 2021-08-18 00:03:53 -07:00
c21b6c1529 2021-08-17 nightly release (075024b9a34904ec3ecdab3704c3bcaa329bdfea) 2021-08-17 00:08:09 -07:00
100f6e1ee6 2021-08-16 nightly release (3c1d1170a4ca2e50a846c69cc61583a29952afee) 2021-08-16 00:03:21 -07:00
b27b86ad55 2021-08-15 nightly release (3c1d1170a4ca2e50a846c69cc61583a29952afee) 2021-08-15 00:07:23 -07:00
fa0a4e5a49 2021-08-14 nightly release (3c1d1170a4ca2e50a846c69cc61583a29952afee) 2021-08-14 00:09:34 -07:00
2cbeb755f3 2021-08-13 nightly release (3c1d1170a4ca2e50a846c69cc61583a29952afee) 2021-08-13 00:09:28 -07:00
c0abc5fe82 2021-08-12 nightly release (3c1d1170a4ca2e50a846c69cc61583a29952afee) 2021-08-12 00:02:42 -07:00
54912fec6b 2021-08-11 nightly release (3c1d1170a4ca2e50a846c69cc61583a29952afee) 2021-08-11 14:52:11 -07:00
bcd79e571e 2021-08-11 nightly release (3c1d1170a4ca2e50a846c69cc61583a29952afee) 2021-08-11 00:03:01 -07:00
56b302f2a7 2021-08-10 nightly release (3c1d1170a4ca2e50a846c69cc61583a29952afee) 2021-08-10 00:03:00 -07:00
269b2a58d4 2021-08-09 nightly release (30214aef2d831067b8962398321f1fb20d359c97) 2021-08-09 00:04:07 -07:00
fd62ee1fff 2021-08-08 nightly release (30214aef2d831067b8962398321f1fb20d359c97) 2021-08-08 00:04:31 -07:00
2b4586f493 2021-08-07 nightly release (4bd54cebe0b736acbcb8f040df897d17956bb71b) 2021-08-07 00:03:28 -07:00
f9574bca64 2021-08-06 nightly release (4bd54cebe0b736acbcb8f040df897d17956bb71b) 2021-08-06 00:04:35 -07:00
b9e662f0e4 2021-08-05 nightly release (4bd54cebe0b736acbcb8f040df897d17956bb71b) 2021-08-05 00:02:27 -07:00
726dc164e6 2021-08-04 nightly release (773a8eede437de972311b21824694e4fb120f6a2) 2021-08-04 00:07:56 -07:00
e2c5ce2ac5 2021-08-03 nightly release (10d3a2c13a1ae547ee5ece5838d66432158d4b22) 2021-08-03 00:02:25 -07:00
4acea95c07 2021-08-02 nightly release (7adb78017a81b656d22864ec97c072519a7dca63) 2021-08-02 00:03:19 -07:00
7e69745b3b 2021-08-01 nightly release (32b37ba2462d9d87337a4fe332f95524a4c49777) 2021-08-01 00:02:33 -07:00
19454af809 2021-07-31 nightly release (7521addede276bd978fc2b113a6f7d010273bdf1) 2021-07-31 00:02:30 -07:00
8b5dbd9749 2021-07-30 nightly release (8f519c5e07e9440a4beb519463302c0cdf2a4b37) 2021-07-30 00:07:42 -07:00
b24169897d 2021-07-29 nightly release (cac4aa71ca262dadd6a887bd1f449b3a35f03bf3) 2021-07-29 00:07:41 -07:00
145a20b1c8 2021-07-28 nightly release (df18d05429d8283ad7b848fa7fca0e06b7ec630b) 2021-07-28 00:03:32 -07:00
7fce0bbbd8 2021-07-27 nightly release (d2594fa5380954eba7d013044ebdde3c041b650d) 2021-07-27 00:02:30 -07:00
fe20ae42aa 2021-07-26 nightly release (8152433de2420fc64063366bebd7b1feadf38d1f) 2021-07-26 00:03:08 -07:00
68fa6f6579 2021-07-25 nightly release (8152433de2420fc64063366bebd7b1feadf38d1f) 2021-07-25 00:04:58 -07:00
cf42c96705 2021-07-24 nightly release (e856a45283c6a215c78597d05f6e8dfeb0030c49) 2021-07-24 00:03:01 -07:00
b324086eca 2021-07-23 nightly release (a9b0a921d592b328e7e80a436ef065dadda5f01b) 2021-07-23 00:04:42 -07:00
2bfbfd8285 2021-07-21 nightly release (94965212e5bf959b029e59d685162b1929bb4c31) 2021-07-21 00:02:20 -07:00
10d38a8b75 2021-07-19 nightly release (94965212e5bf959b029e59d685162b1929bb4c31) 2021-07-19 00:03:15 -07:00
590290b1d0 2021-07-18 nightly release (94965212e5bf959b029e59d685162b1929bb4c31) 2021-07-18 00:02:35 -07:00
d4adc41437 2021-07-17 nightly release (94965212e5bf959b029e59d685162b1929bb4c31) 2021-07-17 00:03:15 -07:00
604c318ee0 2021-07-16 nightly release (94965212e5bf959b029e59d685162b1929bb4c31) 2021-07-16 00:02:40 -07:00
d88bfc953f 2021-07-15 nightly release (94965212e5bf959b029e59d685162b1929bb4c31) 2021-07-15 00:02:11 -07:00
7a317743cf 2021-07-14 nightly release (60382de455ea5f860d5787fac72ea100b7a405bb) 2021-07-14 00:03:10 -07:00
98f637eb78 2021-07-13 nightly release (8a2c7d902fb159bb57a0cf46f3a5ba74095cc34a) 2021-07-13 00:02:45 -07:00
27cbbb870c 2021-07-12 nightly release (76c0f223d3ff430369a2864cf4e05464b1bfb688) 2021-07-12 00:03:04 -07:00
55e9cf2d89 2021-07-11 nightly release (76c0f223d3ff430369a2864cf4e05464b1bfb688) 2021-07-11 00:04:40 -07:00
abc594d345 2021-07-10 nightly release (76c0f223d3ff430369a2864cf4e05464b1bfb688) 2021-07-10 00:05:52 -07:00
3b69ec8047 2021-07-09 nightly release (80797d03e072d32c36fd26589f03368b1536001d) 2021-07-09 00:02:44 -07:00
fc79ae3d0e 2021-07-08 nightly release (c03f99f3ef2db0cd61f9bf3813492cd9fda9ce79) 2021-07-08 00:02:52 -07:00
273fb34c2f 2021-07-07 nightly release (5da507b57bee31805217889b9f8ff673915dbc3a) 2021-07-07 00:03:41 -07:00
b2bec4fed4 2021-07-06 nightly release (5576c7bdd1a21187ae4ff6bc6c584555d5470a43) 2021-07-06 00:02:14 -07:00
fb10eeee5b 2021-07-05 nightly release (5576c7bdd1a21187ae4ff6bc6c584555d5470a43) 2021-07-05 00:06:20 -07:00
8ab947ade6 2021-07-04 nightly release (5576c7bdd1a21187ae4ff6bc6c584555d5470a43) 2021-07-04 00:02:48 -07:00
17a841ec7b 2021-07-03 nightly release (5576c7bdd1a21187ae4ff6bc6c584555d5470a43) 2021-07-03 00:02:56 -07:00
b31c9ebcab 2021-07-02 nightly release (5576c7bdd1a21187ae4ff6bc6c584555d5470a43) 2021-07-02 00:02:43 -07:00
0487088661 2021-07-01 nightly release (5576c7bdd1a21187ae4ff6bc6c584555d5470a43) 2021-07-01 00:02:35 -07:00
f502a6f6b9 2021-06-30 nightly release (5bc28c897e5d00c0a839de9692b9b54de5294aff) 2021-06-30 00:02:26 -07:00
1f6616c269 2021-06-29 nightly release (d71e7ae740f635534594075fc3060e24c399d0dc) 2021-06-29 00:03:46 -07:00
d3c62eb854 2021-06-28 nightly release (3bfe15085d6a01b3accf75647d12c70084392a61) 2021-06-28 00:02:36 -07:00
be1a85d8c7 2021-06-27 nightly release (dae25c2002a0d7201588e6ff60316a8d9ace88a8) 2021-06-27 00:02:32 -07:00
f82186a4bb 2021-06-26 nightly release (ad69e2fd1120ac37f826c09ee2f1654f1d5c80b2) 2021-06-26 00:02:35 -07:00
9f626092c9 2021-06-25 nightly release (2dedd96dd259a37f7a812856b43de29a14381aee) 2021-06-25 00:04:26 -07:00
1221896926 2021-06-24 nightly release (5bd49c3396e7dd0380b0ee8633a6ae7c3791e479) 2021-06-24 00:03:03 -07:00
61ec571d74 2021-06-23 nightly release (5bd49c3396e7dd0380b0ee8633a6ae7c3791e479) 2021-06-23 00:02:34 -07:00
360e0ec73e 2021-06-22 nightly release (5bd49c3396e7dd0380b0ee8633a6ae7c3791e479) 2021-06-22 00:02:33 -07:00
143c23e586 2021-06-21 nightly release (3815a013ed76e2a0a0b15fbcd0d419d9be322254) 2021-06-21 00:03:00 -07:00
d65834d579 2021-06-20 nightly release (3815a013ed76e2a0a0b15fbcd0d419d9be322254) 2021-06-20 00:05:17 -07:00
932d09235e 2021-06-19 nightly release (3815a013ed76e2a0a0b15fbcd0d419d9be322254) 2021-06-19 00:03:50 -07:00
eed1219e4b 2021-06-18 nightly release (be038d89898d0d2111b8acedefd08ceed62664cb) 2021-06-18 00:02:08 -07:00
7be6ef5eeb 2021-06-17 nightly release (be038d89898d0d2111b8acedefd08ceed62664cb) 2021-06-17 00:02:32 -07:00
d7ab6005b9 2021-06-16 nightly release (be038d89898d0d2111b8acedefd08ceed62664cb) 2021-06-16 00:03:01 -07:00
f8fb474ad9 2021-06-15 nightly release (1fc3576d97b5c551ea1add6e81da530070f2e03f) 2021-06-15 00:03:05 -07:00
c742b6c9c3 2021-06-14 nightly release (1fc3576d97b5c551ea1add6e81da530070f2e03f) 2021-06-14 00:02:18 -07:00
cb3b64cb01 2021-06-13 nightly release (1fc3576d97b5c551ea1add6e81da530070f2e03f) 2021-06-13 00:02:19 -07:00
54dc5817a9 2021-06-12 nightly release (1fc3576d97b5c551ea1add6e81da530070f2e03f) 2021-06-12 00:03:35 -07:00
5dc15963c2 2021-06-11 nightly release (1fc3576d97b5c551ea1add6e81da530070f2e03f) 2021-06-11 00:02:07 -07:00
ddaf6a0647 2021-06-10 nightly release (2f395f3b5466b72638847df37f5b3948ae4c5948) 2021-06-10 00:02:43 -07:00
210259b208 2021-06-09 nightly release (77dde35f1a55aaebc7ad3df53edb6796a1183a24) 2021-06-09 00:02:29 -07:00
89e6f30509 2021-06-08 nightly release (77dde35f1a55aaebc7ad3df53edb6796a1183a24) 2021-06-08 00:02:40 -07:00
f7bfc7bb4d 2021-06-07 nightly release (de40c8e495ffc7b4042ac544ba38759c4dcb5d50) 2021-06-07 00:02:39 -07:00
216f8135a8 2021-06-06 nightly release (0a5bfa99198a1c07e4eeec35dd8c20082a05f63a) 2021-06-06 00:04:49 -07:00
93404aa88f 2021-06-05 nightly release (c769300301e8bc775e54cdd114e2beaa11b1f893) 2021-06-05 00:02:17 -07:00
ba9b756a30 2021-06-04 nightly release (f87aa23125ff92520204fa0ca201c2d169fd3e17) 2021-06-04 00:02:51 -07:00
abca349be8 2021-06-03 nightly release (f87aa23125ff92520204fa0ca201c2d169fd3e17) 2021-06-03 00:07:09 -07:00
789de8268a 2021-06-02 nightly release (1d37f415671976c36f6bf3fa4b83384db066fc2f) 2021-06-02 00:03:00 -07:00
2916b4e5e9 2021-06-01 nightly release (223725cfb08fc6915597d1e16f11d7c51c3c2934) 2021-06-01 00:02:16 -07:00
d13f843261 2021-05-31 nightly release (ea465f73783a130b7a21200a2ec2fa01c885a63b) 2021-05-31 00:02:32 -07:00
be3599d1b9 2021-05-30 nightly release (d68df54269552dc8312b7c2eba23be20c255c59f) 2021-05-30 00:02:14 -07:00
9b497f13f4 2021-05-29 nightly release (c9af4c2636c7ca27be15f39f16512c2f5f36b7fe) 2021-05-29 00:02:07 -07:00
8149145c71 2021-05-28 nightly release (934f6dca65a7521aec7a13a1156b21551196bba0) 2021-05-28 00:02:43 -07:00
fa0e02b7cf 2021-05-27 nightly release (58d1b3639bc07f9519de18e5a18e575f260c7eeb) 2021-05-27 00:02:34 -07:00
b530f7c66b 2021-05-26 nightly release (cf395c071820e4d98a960bc761524b655d262bb3) 2021-05-26 00:04:03 -07:00
6b0e363bd3 2021-05-25 nightly release (f29e75c4dcc3454d50849f3a4670c6ae1d4d3142) 2021-05-25 00:03:02 -07:00
c375b9af1f 2021-05-24 nightly release (e8c6a65074aa039b749edab2b968a4885550dbde) 2021-05-24 00:03:12 -07:00
8c318c5cdd 2021-05-23 nightly release (e8c6a65074aa039b749edab2b968a4885550dbde) 2021-05-23 00:03:29 -07:00
f8f3346997 2021-05-22 nightly release (e8c6a65074aa039b749edab2b968a4885550dbde) 2021-05-22 00:04:14 -07:00
f3a9779b78 2021-05-21 nightly release (e8c6a65074aa039b749edab2b968a4885550dbde) 2021-05-21 00:02:16 -07:00
94e33c13cd 2021-05-20 nightly release (00a46a5eb46073807ec3d28dfd83bf07b206530f) 2021-05-20 00:02:33 -07:00
c5de2f0f2c 2021-05-19 nightly release (00a46a5eb46073807ec3d28dfd83bf07b206530f) 2021-05-19 00:10:34 -07:00
19537812bc 2021-05-18 nightly release (00a46a5eb46073807ec3d28dfd83bf07b206530f) 2021-05-18 00:02:24 -07:00
fc348d8ad2 2021-05-17 nightly release (00a46a5eb46073807ec3d28dfd83bf07b206530f) 2021-05-17 00:02:44 -07:00
7d615e312d 2021-05-16 nightly release (00a46a5eb46073807ec3d28dfd83bf07b206530f) 2021-05-16 00:02:20 -07:00
537fc9b889 2021-05-15 nightly release (00a46a5eb46073807ec3d28dfd83bf07b206530f) 2021-05-15 00:04:07 -07:00
4fb06c9e93 2021-05-14 nightly release (9b95568dc3a81de60435ad155ec87f625f4b69a2) 2021-05-14 00:02:23 -07:00
40b7867cb5 2021-05-13 nightly release (d212bf186390fdcc3b36cd3b41489544c4f50b75) 2021-05-13 00:02:23 -07:00
ef9586b10b 2021-05-12 nightly release (0d4dc6cb39184c2a6ef48cc5238f4df60ec9f14d) 2021-05-12 00:03:01 -07:00
bde9f3aa8c 2021-05-11 nightly release (f97650e70bb8ef42680a700e8c14a288aa3ea661) 2021-05-11 00:02:57 -07:00
9584d83c36 2021-05-10 nightly release (fc55290e5b128d82fa3854565a4d89f60d747fa7) 2021-05-10 00:02:29 -07:00
515bd352fa 2021-05-09 nightly release (e8fb167b1732b2e0ed7dde05f5c59e9a34997a00) 2021-05-09 00:05:09 -07:00
6e6cc22e9a 2021-05-08 nightly release (8c04593c0a486bea7e2cbec348298d348742e096) 2021-05-08 00:02:10 -07:00
c9944ca13c 2021-05-07 nightly release (e5e095cbe4dbc5a601f98e6134dcbd59c6342d7d) 2021-05-07 00:02:26 -07:00
b64472a49d 2021-05-06 nightly release (7627dd568aeda29b2cd757f11493d8a1f0599b60) 2021-05-06 00:11:15 -07:00
513f2a2ada 2021-05-05 nightly release (9c5478588e68a104024dcdaae61c9b402390631c) 2021-05-05 00:02:38 -07:00
a465a9317b 2021-05-04 nightly release (c0309af1f3d57e362a00308c48bca8a5ac2ecb38) 2021-05-04 00:03:00 -07:00
2bd4eadf47 2021-05-03 nightly release (5c68072ee866dde690bc3dda7c2b4bf1a1e6f485) 2021-05-03 00:02:14 -07:00
4ee630a813 2021-05-02 nightly release (afe6b4c8ee7c494c259bbcf8585ffb30a416d924) 2021-05-02 00:02:39 -07:00
adfc9a352b 2021-05-01 nightly release (5e422fa1707f637a7eb8ea9207943d729e13cbda) 2021-05-01 00:02:03 -07:00
1bb0a274a0 2021-04-30 nightly release (65968ab817db323a532f50a2f2ea131ae27dada5) 2021-04-30 00:02:42 -07:00
434be444db 2021-04-29 nightly release (73453f1de112609a34461c84bb16faf74b8b40a4) 2021-04-29 00:03:04 -07:00
6ea01360d9 2021-04-28 nightly release (808850b6de8f92afde0ddf5dce6b94523b126b51) 2021-04-28 00:04:10 -07:00
0fd1dbcff0 2021-04-27 nightly release (7989f2ac879fcc624fc7cc055f437fa849cda5f2) 2021-04-27 00:02:25 -07:00
fb65a2e2ff 2021-04-26 nightly release (70d9be0f42e569d6c74091bbed89ac2d9933ee65) 2021-04-26 00:02:28 -07:00
bc2e5ae70f 2021-04-25 nightly release (bcef7ebd603a6e16a11ab20a030a4338dbb91ff6) 2021-04-25 00:03:07 -07:00
2322ce0268 2021-04-24 nightly release (19943aafe90558a209857a188191df161fd32a6f) 2021-04-24 00:02:35 -07:00
b881571665 2021-04-23 nightly release (19943aafe90558a209857a188191df161fd32a6f) 2021-04-23 00:04:30 -07:00
c7974927b6 2021-04-22 nightly release (19943aafe90558a209857a188191df161fd32a6f) 2021-04-22 00:02:28 -07:00
aca2009f6b 2021-04-21 nightly release (1e03a2505f9cee92587bf45fbbbbfedede5cb9ec) 2021-04-21 00:01:48 -07:00
24ee5bc666 2021-04-20 nightly release (ca6e5c7fc9244ace874bb99aacb12eddef5d4f8a) 2021-04-20 00:02:03 -07:00
6b4502817d 2021-04-19 nightly release (3e42da09dfac51a260a01acd65953e497d027059) 2021-04-19 00:02:20 -07:00
cffbd8af00 2021-04-18 nightly release (85126629a59ac51dcebca08b0ef2da5dd3afd827) 2021-04-18 00:01:53 -07:00
8ed25026ce 2021-04-17 nightly release (98933866a984d104e9f2bf1a91f3a38d3cbe0b99) 2021-04-17 00:01:58 -07:00
10ff790778 2021-04-16 nightly release (bde53cfd9ad3992b21ff30120018017252e8a643) 2021-04-16 00:02:34 -07:00
afff696fee 2021-04-15 nightly release (1688a5d31a740fe502232295ec22e49d376e4f2d) 2021-04-15 00:02:05 -07:00
12d5971c08 2021-04-14 nightly release (19f15317a0c2153aa9ef911e84b939122c9b0769) 2021-04-14 00:02:10 -07:00
a697df1413 2021-04-13 nightly release (19f15317a0c2153aa9ef911e84b939122c9b0769) 2021-04-13 00:02:04 -07:00
e5450b3cc8 2021-04-12 nightly release (19f15317a0c2153aa9ef911e84b939122c9b0769) 2021-04-12 00:01:50 -07:00
3e479451cd 2021-04-11 nightly release (c9b94a85e9029f994f9bd72409293723cbc1d7b1) 2021-04-11 00:01:54 -07:00
552e7d3bd3 2021-04-10 nightly release (7485818a3ff69775b7a01b2d4d971df441702605) 2021-04-10 00:02:17 -07:00
26116b3581 2021-04-09 nightly release (f1a0b817f063250d76aa3bddba6d0d5772a77bf3) 2021-04-09 00:01:49 -07:00
b785f7a276 2021-04-08 nightly release (5f90ed550ccffbe02476a9229ecddc3dc89b3d50) 2021-04-08 00:02:36 -07:00
167a6be779 2021-04-07 nightly release (96655e2b81765d94c359a5dc079ec00404244184) 2021-04-07 00:01:53 -07:00
435d2577d1 2021-04-06 nightly release (b986a76d91906f3e22d6963b16f56e2f8e813a54) 2021-04-06 00:01:53 -07:00
0226b9c72e 2021-04-05 nightly release (6e33420436412d3704d181ebb7fe3f39ba00a087) 2021-04-05 00:02:01 -07:00
a35e8f72a0 2021-04-04 nightly release (6e33420436412d3704d181ebb7fe3f39ba00a087) 2021-04-04 00:01:51 -07:00
33aed5f7bf 2021-04-03 nightly release (6e33420436412d3704d181ebb7fe3f39ba00a087) 2021-04-03 00:01:56 -07:00
729f49d35a 2021-04-02 nightly release (047a487b072354325d50db1510e75ec4218b1a75) 2021-04-02 00:01:54 -07:00
732df435ba 2021-04-01 nightly release (eb52e3646035c8916495515399c2c7ccf490c705) 2021-04-01 00:02:56 -07:00
12be6b82da 2021-03-31 nightly release (920eb01e2e066f6e51f20d0e24a02472e53bc723) 2021-03-31 00:02:04 -07:00
0f545f9a7b 2021-03-30 nightly release (1267efce75e20e571995694c6fbcf4934119395b) 2021-03-30 00:01:49 -07:00
f6458977ba 2021-03-29 nightly release (b7c5d575638afeb7b61594782af438658f6234cc) 2021-03-29 00:02:02 -07:00
3f1f3bf563 2021-03-28 nightly release (7caa464631c1fcc9f9a4290cf0fe7913c36d1796) 2021-03-28 00:01:54 -07:00
6f95b09bb8 2021-03-27 nightly release (394b720e38455c2c07e6a31ef816edd0c5afbeb4) 2021-03-27 00:01:48 -07:00
cae5d728c0 2021-03-26 nightly release (fd58ececab731803eceace70b985b35f9872b53c) 2021-03-26 00:01:52 -07:00
755dd076a3 2021-03-25 nightly release (347ab5d8b86a69c4ab0a163b01d41cd0d0734f59) 2021-03-25 00:01:57 -07:00
13fb17b712 2021-03-24 nightly release (91d37d7d2fd2bb9bc9dcaa3ffd58a39426285af9) 2021-03-24 00:01:52 -07:00
09588132d7 2021-03-23 nightly release (6a4d2c61d5ea12d62bfcf0ad0b9cd79ae776433e) 2021-03-23 00:01:50 -07:00
6f3e9ce0af 2021-03-22 nightly release (6a4d2c61d5ea12d62bfcf0ad0b9cd79ae776433e) 2021-03-22 00:02:07 -07:00
82c758067f 2021-03-21 nightly release (6a4d2c61d5ea12d62bfcf0ad0b9cd79ae776433e) 2021-03-21 00:03:10 -07:00
c3626319c3 2021-03-20 nightly release (454dd7ba8647ac11735c6563ac8e2b60313789ad) 2021-03-20 00:02:11 -07:00
638cdc776a 2021-03-19 nightly release (19792b45dbf30b4555c4a87512e624cdd4aa6e4c) 2021-03-19 00:01:57 -07:00
1bbf0359e8 2021-03-18 nightly release (2e7311ef25a028f06bfff7cf97e6fbf5da767eb5) 2021-03-18 00:03:31 -07:00
b14b3f48b9 2021-03-17 nightly release (b936abd840d8fa3122d3a6166c0d7344d8352901) 2021-03-17 00:02:03 -07:00
3f71714146 2021-03-16 nightly release (e87ab2ac4d4f4d208a1dcbc21b584fe59bf18e5f) 2021-03-16 00:01:50 -07:00
f595ab38d4 2021-03-15 nightly release (f6df18f6ca444561b4108d746ed7b579a78c0294) 2021-03-15 00:02:10 -07:00
3ddc48dbe5 2021-03-14 nightly release (84af0c7acdac705e0465d4865cd37e6cfe2cd537) 2021-03-14 00:02:01 -08:00
49244d58a9 2021-03-13 nightly release (8a5b946ff6ecc068b11d5c40a571af8b8b24137e) 2021-03-13 00:01:57 -08:00
4ec6b36905 2021-03-12 nightly release (997f05cd34078c0d2447f9f310b1f5d6fd041503) 2021-03-12 00:01:53 -08:00
f8c286b72c 2021-03-11 nightly release (0584fd9339af7c939ab7d955db05743ba58ff86d) 2021-03-11 00:01:53 -08:00
30b9583650 2021-03-10 nightly release (a9e4bb56e54e83a69fbe7fad6d637817db1dd6a4) 2021-03-10 00:01:58 -08:00
56e7889e52 2021-03-09 nightly release (a947bfaa2650ea1f4c6e61e94c7e6d3eb3a3d952) 2021-03-09 00:02:00 -08:00
21d09eea0c 2021-03-08 nightly release (36dc5d3b3aaa81280ad290d4b85d4dd033c5c911) 2021-03-08 17:06:31 -08:00
8859a4060b 2021-03-05 nightly release (69bb0e028596d481cda38a0f49bcb5965fab4293) 2021-03-05 00:01:52 -08:00
39496d2d15 2021-03-04 nightly release (d98839e53eaa171230c6d190e51e2fded8fa8fe1) 2021-03-04 00:02:00 -08:00
cc88ac8bbd 2021-03-03 nightly release (30dd15e778195c6b7cf266a0b4b20af9c9ca5ba7) 2021-03-03 00:02:33 -08:00
715835c8ee 2021-03-02 nightly release (748285ccd76b67db7ebc0bc099789bb09c23c038) 2021-03-02 00:01:55 -08:00
70f88165ce 2021-03-01 nightly release (b9e12a0e8290af1c05107cf7e9a6117355e5ac1a) 2021-03-01 00:01:58 -08:00
ad67b30e18 2021-02-28 nightly release (f2f7fdba05159e90b75b780cef29a0640a1f475c) 2021-02-28 00:01:49 -08:00
ea85ae6460 2021-02-27 nightly release (177694681ecc582c5335adbbe43c1ee1e02d53ce) 2021-02-27 00:01:55 -08:00
7e0921bfc4 2021-02-26 nightly release (7a178a8a523d4653a3a2fa10c573b71e7fab1b9a) 2021-02-26 00:01:51 -08:00
edc5fdff12 2021-02-25 nightly release (57947c5d85cb2fc755773ebce2df06b1c7d177b0) 2021-02-25 00:04:07 -08:00
8b997aa6a3 2021-02-24 nightly release (b4b7db2f3bdd67a8650583a49b8a12b24c2c7a78) 2021-02-24 11:13:59 -08:00
c89db19de8 2021-02-23 nightly release (64847c7f0b3559c6edc40f001619b80c7dc68ef7) 2021-02-23 00:04:07 -08:00
3cbcda0694 2021-02-22 nightly release (c2b9283d4aa3f05999926b6871fc1c4bb787c15a) 2021-02-22 00:01:57 -08:00
ad403652be 2021-02-21 nightly release (a935118c90db94879b41d6dc359520e99e6cdca2) 2021-02-21 00:01:49 -08:00
ebd6d2d8c4 2021-02-20 nightly release (bb34fd6191e0f2a31edc38e00d93a24d9da8c031) 2021-02-20 00:01:50 -08:00
c316f4b69f 2021-02-19 nightly release (0c46b6b3f63b0858cb0d3e76ee43ccc2659143a6) 2021-02-19 00:02:18 -08:00
02ae2764a8 2021-02-18 nightly release (ac121165e29d29399615e4ea8fc286ab0864571d) 2021-02-18 00:01:55 -08:00
15f099ad3a 2021-02-17 nightly release (bb9e0c625ebe0e8dd73d896b8a52ff807d969fb3) 2021-02-17 00:01:51 -08:00
a9f93776d4 2021-02-16 nightly release (df837d0384398f1fac1000189d62b05e7ff0240d) 2021-02-16 00:04:22 -08:00
486e771762 2021-02-15 nightly release (1903b32c35a7e7432d62e43a2d3a679f6f01066d) 2021-02-15 00:01:55 -08:00
6c8fea96b3 2021-02-14 nightly release (4949eea0ffb60dc81a0a78402fa59fdf68206718) 2021-02-14 00:02:55 -08:00
08bda18b3f 2021-02-13 nightly release (71d0b5632bfa29f1b6828050edc6512402e253a7) 2021-02-13 00:03:08 -08:00
acd0a1de4c 2021-02-12 nightly release (e4203c4306d86a546d12f9fc354ea78794e2606e) 2021-02-12 00:02:09 -08:00
5c9184d4c4 2021-02-11 nightly release (fd41ed1ccef68e88e075c7b633409644c22f0782) 2021-02-11 00:01:59 -08:00
99bc386e8d 2021-02-10 nightly release (0620c96fd6a140e68c49d68ed14721b1ee108ecc) 2021-02-10 00:02:16 -08:00
567520f3a8 2021-02-09 nightly release (034a007ad80038ad796959387c5a450f7a05ac57) 2021-02-09 00:02:04 -08:00
71e7186e5d 2021-02-08 nightly release (fcf8b712348f21634044a5d76a69a59727756357) 2021-02-08 00:02:08 -08:00
3e934d77c2 2021-02-07 nightly release (0c313564af6173d54b393ae0b70cf2cb0db5a5c8) 2021-02-07 00:02:00 -08:00
256d46ca95 2021-02-06 nightly release (215d9daceb5482d2d5cceaaf44cb3f2aa38faaaf) 2021-02-06 00:02:23 -08:00
a8da1dd168 2021-02-05 nightly release (d3023d86ba6eebbcfeafc1633d1a8f8249d12e6d) 2021-02-05 00:02:07 -08:00
5fdff0d29f 2021-02-04 nightly release (1518aee639b6f9fb4456977431720bd5ecb2ed74) 2021-02-04 00:03:20 -08:00
4b6fea91c7 2021-02-03 nightly release (62f6e55439255d27d41752e2f01715c11e04bd38) 2021-02-03 00:02:01 -08:00
d8fdfb6912 2021-02-02 nightly release (7328710cbce459bbd77dfe424acc94010725d979) 2021-02-02 00:01:53 -08:00
59906439fe 2021-02-01 nightly release (40c0fffb4bb4a7d49cb50c6b276565aa60b3daaf) 2021-02-01 00:02:00 -08:00
fa29005e57 2021-01-31 nightly release (9cf62a4b5d3b287442e70c0c560a8e21d8c3b189) 2021-01-31 00:02:28 -08:00
f34c7916c7 2021-01-30 nightly release (e26fccc22b1f1fa28bceb076567d3e53c92a4c77) 2021-01-30 00:04:16 -08:00
ecc357c395 2021-01-29 nightly release (534aabce147129fc2fa54d448093c79603d45781) 2021-01-29 00:02:38 -08:00
470e6b3037 2021-01-28 nightly release (9fe7c0633f74b04889cce81cea2cbb28f8d08cea) 2021-01-28 00:02:15 -08:00
8d5685876a 2021-01-27 nightly release (19358808604129573dba354558ca4019acf2503f) 2021-01-27 00:02:13 -08:00
adf8b7eb1c 2021-01-26 nightly release (6dda0363bb47fbfbceb242098f63b67560540584) 2021-01-26 10:19:32 -08:00
e64ec0010a 2021-01-25 nightly release (48b6b9221a544f7d5b7d6f93eec2fa304da8af94) 2021-01-25 00:09:03 -08:00
49b090d628 2021-01-24 nightly release (1f40f2a1723fd3b9302bea3829f2570c8e0e7e94) 2021-01-24 00:03:43 -08:00
159eb0d08a 2021-01-23 nightly release (6aec1eba1582ef2c3486652ec0a6cd0ce346b83d) 2021-01-23 00:04:39 -08:00
c51f016767 2021-01-22 nightly release (7494f0233aabb5109e068f3cad73e20dc6a8dd23) 2021-01-22 00:02:55 -08:00
52f6bba29c 2021-01-21 nightly release (439afda090a343e90aa87678a0019c0dc26880cc) 2021-01-21 00:03:48 -08:00
99845753b9 2021-01-20 nightly release (e00966501b63013cd3057daf864cbb54e7f4cf9b) 2021-01-20 00:03:07 -08:00
eb7195e27a 2021-01-19 nightly release (5252e9857a1587a38ca09d316c958eb232e0f68d) 2021-01-19 00:06:10 -08:00
e6279f85c9 2021-01-18 nightly release (3f052ba07b2da4801d8f52f4116357760d5b632d) 2021-01-18 00:07:39 -08:00
43d4eaff8a 2021-01-17 nightly release (7e05d07ca7557b0b433b97a5943c8eedbbf34837) 2021-01-17 00:02:40 -08:00
cc54968f58 2021-01-16 nightly release (a469336292e411a056fbe9445ed948108acde57d) 2021-01-16 00:05:07 -08:00
c4efbf7862 2021-01-15 nightly release (d9f71b5868ca7e36e16e9e6a87ae39c738ccdc5f) 2021-01-15 00:04:29 -08:00
71094fd978 2021-01-14 nightly release (19a8e68d8c2c53f47f1dcfdbadec03f6897d84e6) 2021-01-14 00:04:55 -08:00
4c84d88295 2021-01-13 nightly release (b54240d200fe34fe425857a67a87273bc105665f) 2021-01-13 00:02:38 -08:00
538bf139cb 2021-01-12 nightly release (8c5b0247a571aa672f9070fcc9769f2c4bb19571) 2021-01-12 00:04:11 -08:00
efdef1838a 2021-01-11 nightly release (9d8bd216f9e29251685389a22dce69614ab648a5) 2021-01-11 00:02:43 -08:00
5f767b4f41 2021-01-10 nightly release (375c30a7177442fb9d6de7516a9ae4031ae324c4) 2021-01-10 00:03:26 -08:00
206064ae71 2021-01-09 nightly release (d4c1684cf5ddbbe808d71999d4fdf014c3fdb8b1) 2021-01-09 00:02:27 -08:00
bc83b4980f 2021-01-08 nightly release (c215ffb6a2de1c85a62a146a9e282908335ba3ed) 2021-01-08 00:04:16 -08:00
b7bb2d75a2 2021-01-07 nightly release (968ad47b410b93d2600d163db50eb9fb45c24a2b) 2021-01-07 00:04:09 -08:00
396c67bec6 2021-01-06 nightly release (ad7d208ba5f2c5614679a7999918b75ae74530e9) 2021-01-06 00:05:09 -08:00
21c7ada3a6 2021-01-05 nightly release (ee80b458433627ea8e4f48e7b50043dca1906bb1) 2021-01-05 00:03:00 -08:00
e2681f4d25 2021-01-04 nightly release (e44b2b72bd4ccecf9c2f6c18d09c11eff446b5a3) 2021-01-04 00:03:15 -08:00
4af891460c 2021-01-03 nightly release (8aad66a7bd35782a0e662d133276830204499656) 2021-01-03 00:02:30 -08:00
b788d5159e 2021-01-02 nightly release (8aad66a7bd35782a0e662d133276830204499656) 2021-01-02 00:03:13 -08:00
d7a4e5a328 2021-01-01 nightly release (749f8b78508c43f9e6331f2395a4202785068442) 2021-01-01 00:05:05 -08:00
afb63f9b63 2020-12-31 nightly release (749f8b78508c43f9e6331f2395a4202785068442) 2020-12-31 00:03:08 -08:00
8b6af7fd8f 2020-12-30 nightly release (12b73fdbbf4a89f3ec46983f90a2bb2d866cb338) 2020-12-30 00:02:59 -08:00
3c482552c8 2020-12-29 nightly release (c619892482667f846f96215f290df70d56bd4a84) 2020-12-29 00:03:24 -08:00
606ddb19c9 2020-12-28 nightly release (963f7629b591dc9750476faf1513bc7f1fb4d6de) 2020-12-28 00:05:11 -08:00
95d87beeb1 2020-12-27 nightly release (963f7629b591dc9750476faf1513bc7f1fb4d6de) 2020-12-27 00:04:51 -08:00
9b38aa2443 2020-12-26 nightly release (963f7629b591dc9750476faf1513bc7f1fb4d6de) 2020-12-26 00:02:40 -08:00
6d23d0fe51 2020-12-25 nightly release (963f7629b591dc9750476faf1513bc7f1fb4d6de) 2020-12-25 00:02:57 -08:00
8e7138bce1 2020-12-24 nightly release (89b4899ea5363fd69872c0cabf0dedea2dc533c8) 2020-12-24 00:03:20 -08:00
54837ec26d 2020-12-23 nightly release (55b431b17aba504ae7b75f6f97b4437101e50f38) 2020-12-23 00:04:02 -08:00
58d9290532 2020-12-22 nightly release (590e7168ed66bc1060a0bff6c35cc1eea86db0ae) 2020-12-22 00:02:56 -08:00
b8f60df5f5 2020-12-21 nightly release (5c3788d5d76f64f6708e0b79f40b1cf45276625a) 2020-12-21 00:02:54 -08:00
9ceeb84f52 2020-12-20 nightly release (c0deb231db76dbea8a9d326401417f7d1ce96ed5) 2020-12-20 00:02:40 -08:00
370cb23850 2020-12-19 nightly release (e0f60c97208a9745b4e031b0941ec60b75a7406b) 2020-12-19 00:02:41 -08:00
cfa557ab81 2020-12-18 nightly release (5fcfebd84abc5af3f4816d2a77319dd617d52da1) 2020-12-18 00:03:18 -08:00
006df1bad5 2020-12-17 nightly release (65876d3f5134bba3c6ab5dccd1860ce1b9e43b6d) 2020-12-17 00:03:36 -08:00
902afe6bbb 2020-12-16 nightly release (94e328c0385d2e915d2bc38446d1da2f1cd94068) 2020-12-16 00:05:43 -08:00
450503d815 2020-12-15 nightly release (39a10fb6528b355791993a67b895934e3c902765) 2020-12-15 00:03:40 -08:00
eb6c0edcb4 2020-12-14 nightly release (94a3d4b083c945050a93fefcdd20d7d336185f2d) 2020-12-14 00:03:44 -08:00
b50c85260f 2020-12-13 nightly release (dc4db95540da06623c747bf0f2bf9f4af3d2925a) 2020-12-13 00:02:58 -08:00
637ad9acd8 2020-12-12 nightly release (717f31d9846f9b7707f9b1ab6076e1353f399119) 2020-12-12 00:02:49 -08:00
2275fa0a44 2020-12-11 nightly release (2b1057b0cf2eaea633a90b2e130612d8f93eeb2b) 2020-12-11 00:03:11 -08:00
ff32f65844 2020-12-10 nightly release (27f7d1c2865355c694fb964609df45974748615b) 2020-12-10 00:07:21 -08:00
ffe1744602 2020-12-09 nightly release (2d9585a6a10ea5717c6523086259391684c5aaf2) 2020-12-09 00:03:38 -08:00
6b1df384ea 2020-12-08 nightly release (cb6233aa538114fce55380a79978f3e576eb7cfe) 2020-12-08 00:05:02 -08:00
dff5a4324f 2020-12-07 nightly release (a39398b9e5d528e4a6ca293f1703833932f0d9b2) 2020-12-07 00:02:43 -08:00
c58b37f253 2020-12-06 nightly release (17f53bffefa7bd46e134a99bcd4c4e471b81c86b) 2020-12-06 00:02:41 -08:00
19f40be8c8 2020-12-05 nightly release (6317e0b2f1090ea4189e88557d4ff6656fb758cc) 2020-12-05 00:04:00 -08:00
ea248f6464 2020-12-04 nightly release (2181ff89bb6126b1382f35d7cfca23ee45f40fc9) 2020-12-04 00:03:29 -08:00
2e5c4409a0 2020-12-03 nightly release (79b9c034656652cad838a15094536fe38344ab2c) 2020-12-03 00:03:37 -08:00
c87acc2ecc 2020-12-02 nightly release (bcc85a363ecbcb381623d3c26faa94be13ad58bc) 2020-12-02 00:04:43 -08:00
492c0eb536 2020-12-01 nightly release (ccd20e995fb56a1aafefd90c0f2c68c537534c67) 2020-12-01 00:56:29 -08:00
d3dbcaf423 2020-11-30 nightly release (755b8158e2a664ad308bab3cc0b6f4ae14aefd39) 2020-11-30 00:04:24 -08:00
1cabe03694 2020-11-29 nightly release (36c87f1243f582ae761ec6d69f5965bd91c32d3c) 2020-11-29 00:04:52 -08:00
2221ff5a44 2020-11-28 nightly release (272f4db043ec2c63ecfe6d2759e7893cb842a3c3) 2020-11-28 00:04:01 -08:00
1b0b4998ee 2020-11-27 nightly release (7df84452423f44ebe1db40a2e3463066bf954f95) 2020-11-27 00:02:58 -08:00
c10ca6b85f 2020-11-26 nightly release (18ae12a841bdc99c6cce65ac5c77cc1149dc8564) 2020-11-26 00:05:35 -08:00
b5e7a24057 2020-11-25 nightly release (e9efd8df1bce365d2dddbbc9e9266b7432aee5b2) 2020-11-25 00:03:13 -08:00
168b0224aa 2020-11-24 nightly release (671ee71ad4b6f507218d1cad278a8e743780b716) 2020-11-24 00:03:27 -08:00
88092c79b7 2020-11-23 nightly release (4ed7f36ed181ee784f9904d5eabf073701e1fb78) 2020-11-23 00:02:56 -08:00
90af5978b6 2020-11-22 nightly release (f2da18af143b3fdb322d2188dace6e2020e301b9) 2020-11-22 00:02:42 -08:00
4f320939f0 2020-11-21 nightly release (fdc62c74a60a5cd3a833d50a6f23045e9c55035e) 2020-11-21 00:03:16 -08:00
7ad15e28f6 2020-11-20 nightly release (eb49dabe925b2fa32897dae771f831cb056aef65) 2020-11-20 00:02:57 -08:00
a4262a1db7 2020-11-19 nightly release (8819bad86cd15c74dd076012c59e7b1f6081fda4) 2020-11-19 00:03:09 -08:00
5a09c3b029 2020-11-18 nightly release (df0ae244a999a365ac13695cf4682ea30490b157) 2020-11-18 00:02:46 -08:00
0f0c2ba3e8 2020-11-17 nightly release (49f0e5dfeb64a928c6a2368dd5f86573b07d20fb) 2020-11-17 00:02:39 -08:00
984b5f0945 2020-11-16 nightly release (013e6a3d9d0d3ebe8283bf9af0f3b666ba4d96b7) 2020-11-16 00:03:12 -08:00
c36b7c99a6 2020-11-15 nightly release (8ef7ccd669a36f49eb052d12a71df9b7836cafa5) 2020-11-15 00:04:25 -08:00
b553e35ddf 2020-11-14 nightly release (982ae987d3572b211b371e5c2a7f8062b1ae86f1) 2020-11-14 00:03:21 -08:00
17d86337b4 2020-11-13 nightly release (16d6af74e6605941f51ffd9cacca15e40fa9eec8) 2020-11-13 00:04:31 -08:00
9bc97fcaf0 2020-11-12 nightly release (4b25d83e9bdaee701967d7aff625cedf4c12913c) 2020-11-12 00:03:50 -08:00
20721e12b8 2020-11-11 nightly release (ae5c2febb912066f1a8dec8b54451c09195b2c6d) 2020-11-11 00:02:53 -08:00
0a7dab4ce7 2020-11-10 nightly release (f2eac5df1840b65b24ef2f1c3bd6332f654935b6) 2020-11-10 00:02:38 -08:00
1ca45fae2d 2020-11-09 nightly release (9e0102c10f57631000ebf28e55a055f480b9b780) 2020-11-09 00:02:38 -08:00
e9dd9f342a 2020-11-08 nightly release (781e0ed835e1bfbf6613720c89ba98a4de53e2e9) 2020-11-08 00:02:44 -08:00
6c2cd89110 2020-11-07 nightly release (9d0c6e9469028cd7e7f44172e30aa4ce21b64be3) 2020-11-07 00:03:07 -08:00
1e9fe285da 2020-11-06 nightly release (873652d9accc54f8d2a3fac4baf1c926af755025) 2020-11-06 00:03:02 -08:00
f463bdbe57 2020-11-05 nightly release (d8c3b2b10c14f86f817f1ef12cabc8ef5e37c30a) 2020-11-05 00:03:43 -08:00
6071dc770f 2020-11-04 nightly release (996f444c007a89f7364ed03b7c24755f7ec43eb0) 2020-11-04 00:03:13 -08:00
d60c452534 2020-11-03 nightly release (0ead9d545a92e5d4bed99661b108545a0126826d) 2020-11-03 00:04:54 -08:00
1c10830b51 2020-11-02 nightly release (1cc1da541158b53c24a579fd316d190d5c27bfd1) 2020-11-02 00:02:44 -08:00
b5d9a1c61e 2020-11-01 nightly release (19ede75eb95b2436d5e493497a38c1e6be5ec50b) 2020-11-01 00:02:36 -07:00
ec10b116d2 2020-10-31 nightly release (ee0033af9b7531ba0a453844dc621f8cfa140c20) 2020-10-31 00:04:53 -07:00
3ee3d3b7eb 2020-10-30 nightly release (d95e1afad37ab91a7c8d3fed19d86f2b7f2d218f) 2020-10-30 00:03:00 -07:00
f71e46c37f 2020-10-29 nightly release (b553c06abbe7133c059e05844033067625382973) 2020-10-29 00:02:39 -07:00
d25dcd31ae 2020-10-28 nightly release (ddbdbce6232f896f47b81fc13f95b536cf274d20) 2020-10-28 00:03:01 -07:00
ea2c6ca48e 2020-10-27 nightly release (6b50ccc41cd9feb624243a518e1362659f2fada4) 2020-10-27 00:03:16 -07:00
81d3931f01 2020-10-26 nightly release (d94bd998ece87a1af996ad047e98b1ccba2c3a85) 2020-10-26 00:02:44 -07:00
06e4087ffa 2020-10-25 nightly release (edbc84aa4ae6b9d0410e581c31e8c309426b2d29) 2020-10-25 00:03:10 -07:00
ebbb40c985 2020-10-24 nightly release (13b7855f33e61e3c466197518250e57ffe5886db) 2020-10-24 00:04:54 -07:00
7a69d3fa6b 2020-10-23 nightly release (4fd2cce9fa939006b97abca6e66c117bb42b2b2e) 2020-10-23 00:03:33 -07:00
96741a8516 2020-10-22 nightly release (fe4f90c40bfcb442eddcd26657158bd8fd43a464) 2020-10-22 00:02:41 -07:00
b466478440 2020-10-21 nightly release (8357e2edc329b3a62979ceae3faa1e51fd70150e) 2020-10-21 00:04:07 -07:00
11c8a58712 2020-10-20 nightly release (e5ed037529264e6747a33145aad364660cb250db) 2020-10-20 00:02:41 -07:00
3292b9e050 2020-10-19 nightly release (0c5cd8c2b9cdf473e30bbb1b49ca80ed442813df) 2020-10-19 00:03:03 -07:00
f57dc3adb8 2020-10-18 nightly release (c3466dabaae9328b207804afb043b7b519f64825) 2020-10-18 00:02:39 -07:00
342069f090 2020-10-17 nightly release (cc471c6dafff9b3a45575ba01244b1b58a25ab34) 2020-10-17 00:02:25 -07:00
b1eed8fe32 2020-10-16 nightly release (ec5f81f9d334efa3d46ca9c66885e2ab14b6ce01) 2020-10-16 00:03:20 -07:00
e5ed02e3f0 2020-10-15 nightly release (a87a1c110342dff912963aac1d8095878c79f914) 2020-10-15 00:02:42 -07:00
3142764e51 2020-10-14 nightly release (d790ec6de01a61fe81733c41a64b6092bacfb7bd) 2020-10-14 00:03:00 -07:00
9e25229618 2020-10-13 nightly release (7f6a1b2bd5eca2d25c70afe233f8b6878fec241d) 2020-10-13 00:02:42 -07:00
5015a81dda 2020-10-12 nightly release (a814231616f5db7fcdb8793f64c12d652d1e8572) 2020-10-12 00:02:42 -07:00
73a00339a9 2020-10-11 nightly release (bbb3f0937743ddd006d8a5400e9549623260e6be) 2020-10-11 00:02:34 -07:00
8f6131de72 2020-10-10 nightly release (b7261de0df87c4df548451cbfbe020c62396bd86) 2020-10-10 00:03:06 -07:00
403616e494 2020-10-09 nightly release (87226f72d2827d0367d01b664efa21d80ccaf632) 2020-10-09 00:02:25 -07:00
3ada667f23 2020-10-08 nightly release (c19b9cd18dd1da5f499ef0672e6871928618204d) 2020-10-08 00:07:08 -07:00
69474f119a 2020-10-07 nightly release (205ab4961232140d3a46a6a3f59b377243bb5407) 2020-10-07 00:02:33 -07:00
72429b08dc 2020-10-06 nightly release (2fbe5971b360f63715fcccf4bb61ac7c44dff48c) 2020-10-06 00:04:23 -07:00
8722e9d287 2020-10-05 nightly release (e1ff46b6e5b752a889174ba4a995e74898799287) 2020-10-05 00:02:25 -07:00
8706bf8b1f 2020-10-04 nightly release (2ab74a48395c55d9b186a01bdb09fdd347bf4f1b) 2020-10-04 00:03:20 -07:00
2fc129834c 2020-10-03 nightly release (d8a9c2c27e0d11fdde1d8e5bfbce1b55fa2cd478) 2020-10-03 00:02:21 -07:00
29f546df64 2020-10-02 nightly release (1a2d3b6a750cc4c1709b64412619b28c737e1a79) 2020-10-02 00:02:41 -07:00
17635b8851 2020-10-01 nightly release (4339f5c076e6f59433ac4eec08b6151a803a7604) 2020-10-01 00:02:30 -07:00
1c087f9b30 2020-09-30 nightly release (c2c7099944e94fb7d0460ac8689819b42ba0e30e) 2020-09-30 00:02:23 -07:00
c54443b19e 2020-09-29 nightly release (6bdb871d47f8810fb627d908c4fa2408fa6a632f) 2020-09-29 00:03:39 -07:00
e3234fd375 2020-09-28 nightly release (c3bf402cbbd5bba53fa8b7d86500e4dc3bb904b8) 2020-09-28 00:02:59 -07:00
f3659fb14b 2020-09-27 nightly release (bc5710f2f746d33645858ed82141076ab5fec75d) 2020-09-27 00:02:20 -07:00
4a6dd6ec6a 2020-09-26 nightly release (d9af3d2fcd4e86c1b410f700dc6361e5c538b0af) 2020-09-26 00:02:44 -07:00
d4a3a4ca6e 2020-09-25 nightly release (99e0a87bbb4faa6bb539c0eedf323d79fdd8cfcf) 2020-09-25 00:03:07 -07:00
ce6dd35b28 2020-09-24 nightly release (b3d7c2f97859973c7282a772b811708379064d37) 2020-09-24 00:02:57 -07:00
eeb9914f09 2020-09-23 nightly release (215679573ebff5a03238a7f9aa801a6c00826f19) 2020-09-23 00:04:30 -07:00
af6cc04916 2020-09-22 nightly release (5aed75b21bf81f14f1c527df8832f5a93299019c) 2020-09-22 00:02:30 -07:00
8de4375712 2020-09-21 nightly release (9f67176b821afe4afa75df22f43f4932f1289ef4) 2020-09-21 00:04:36 -07:00
b64de1730d 2020-09-20 nightly release (da7863f46bff365499730244a3198a9d4b201f7c) 2020-09-20 00:02:36 -07:00
420a345397 2020-09-19 nightly release (9e5045e978d8800a6dbeb919745169e4de18927c) 2020-09-19 00:02:26 -07:00
145abbc193 2020-09-18 nightly release (f2b3480795d4364aba32de18e42e1309ffd013f4) 2020-09-18 00:03:00 -07:00
27cdcdc69a 2020-09-17 nightly release (b6f4bb0a703d6c33bedf3c7f4551954a8015fcb9) 2020-09-17 00:02:40 -07:00
b5c2df117b 2020-09-16 nightly release (b85568a54a9c60986235ad1e0cc5dffc71b9d5b1) 2020-09-16 00:03:32 -07:00
4c94add238 2020-09-15 nightly release (f5d231d5933e0ca8feb59f9fe76913d8aa720457) 2020-09-15 10:11:47 -07:00
e5b3332958 2020-09-15 nightly release (2435d941b13723b4ccae1eb65695e2c902b9399d) 2020-09-15 00:02:29 -07:00
ce76eb5dc4 2020-09-14 nightly release (870f6470405a37392eb37ea7e927bca6adfecc3c) 2020-09-14 00:02:42 -07:00
7ad07dab6c 2020-09-13 nightly release (e703c17967ba7565ca8c4a019511b0b7b46a2d5d) 2020-09-13 00:02:22 -07:00
680262a4a5 2020-09-12 nightly release (05c1f1d974910736275b4c4572095a106499c298) 2020-09-12 00:13:43 -07:00
521dce53ee 2020-09-11 nightly release (b5d75dddd93089458c7aee91134ff281d5c3b580) 2020-09-11 00:02:39 -07:00
61fd94ce73 2020-09-10 nightly release (65d4a6b7c05674935da8cbd3ae68f982dd9272ff) 2020-09-10 00:04:37 -07:00
beea9fe377 2020-09-09 nightly release (15cbd1cf4b2cd37e102a495f5e5d8362d2c6e6e2) 2020-09-09 12:26:09 -07:00
bac811d8a8 2020-09-09 nightly release (135ebbde6dda16887cc2c08962bb3694af0f8e82) 2020-09-09 00:02:55 -07:00
5200db437e 2020-09-08 nightly release (cce5982c4ceb77a0797e8bd4c717ebfec0681eab) 2020-09-08 00:02:56 -07:00
2d48355fe2 2020-09-07 nightly release (626e410e1dedcdb9d5a410a8827cc7a8a9fbcce1) 2020-09-07 00:03:07 -07:00
72cbcceccf 2020-09-06 nightly release (70c8daf43946b53af6493d058899ef952d27d339) 2020-09-06 00:02:29 -07:00
a6ebbbad37 2020-09-05 nightly release (5a0d65b06b197c06797a41de04ce99edbe48f669) 2020-09-05 00:02:25 -07:00
b0e834edbe 2020-09-04 nightly release (98ad5ff41f82086ce77d5519945aff288b030c6e) 2020-09-04 00:02:42 -07:00
ccfd128bb8 2020-09-03 nightly release (ab7606702cca34c06f0bf08d6b109402c574563c) 2020-09-03 00:02:37 -07:00
9bef2cdcca 2020-09-02 nightly release (297c938729a0adbd98a235a5970c972f6148adfe) 2020-09-02 13:38:07 -07:00
bae900999d 2020-09-02 nightly release (7000c2efb54bae527de22a325c2b59e9f9af45b9) 2020-09-02 00:02:53 -07:00
cb188a89fa 2020-09-01 nightly release (6da26cf0d96475a2fa4d0aa235f868eff198546e) 2020-09-01 00:04:06 -07:00
c32d9b1874 2020-08-31 nightly release (8fb7c50250f9cb38232bf87008855fd1665b31ec) 2020-08-31 00:03:14 -07:00
a27ceb1a7e 2020-08-30 nightly release (1830e4f08cd3b41df9d643211762156b67371611) 2020-08-30 00:03:02 -07:00
42cb14b81d 2020-08-29 nightly release (000739c31ad34909e64124e0d39b2f49249458e9) 2020-08-29 00:02:39 -07:00
dade70d4af 2020-08-28 nightly release (f06d3904f2c7b6e47ffa532f4a22b9e18941bb90) 2020-08-28 00:03:10 -07:00
0f03b7c404 2020-08-27 nightly release (a070c619b9bed1205ec95b53f97db3fbfc43c4de) 2020-08-27 00:05:38 -07:00
8e23641871 2020-08-26 nightly release (42f6c3b1f475c3c1cb1655a70b128fa5cf236860) 2020-08-26 10:11:03 -07:00
f361befd6c 2020-08-26 nightly release (2b70f827373fe5c90e15ce7ba0a1d331dcd57379) 2020-08-26 00:02:35 -07:00
2b2b063dfd 2020-08-25 nightly release (d1d32003bbe1cb06de552c3581982d1bc8125cd9) 2020-08-25 00:02:45 -07:00
17857c55a3 2020-08-24 nightly release (1f0cfbaaad09921f588adf549751041b8cb2e283) 2020-08-24 00:02:41 -07:00
8d4f134db7 2020-08-23 nightly release (a97ca93c0e698b81599f7a0ca5cdbda947799431) 2020-08-23 00:02:40 -07:00
13f00ef652 2020-08-22 nightly release (88b564ce3927f7a691c29697b2b21873a84a0d23) 2020-08-22 00:06:42 -07:00
f3070b6b37 2020-08-21 nightly release (da036250cd7dae8896fdc14b2bc718bcb3bdd158) 2020-08-21 00:03:56 -07:00
0b355b5f8c 2020-08-20 nightly release (66a79bf114ee4e9a4adf0d83b48f2266cfaeab95) 2020-08-20 10:29:04 -07:00
c75d13a67a 2020-08-20 nightly release (4e964f3b97558792d6af903425561f765b1c5d68) 2020-08-20 00:03:14 -07:00
7915de9032 2020-08-19 nightly release (018b4d7abb894c3de21f9f10b0678c80a7b0a701) 2020-08-19 14:55:57 -07:00
6f80e1207a 2020-08-19 nightly release (fa6b34b54c731938327c8e30e08b287a10b86b0a) 2020-08-19 00:02:57 -07:00
14b1e2392c 2020-08-18 nightly release (c44b1de54e29e9d33365fe0116a43d3958f5a450) 2020-08-18 00:02:32 -07:00
02b98413b7 2020-08-17 nightly release (e2eb0cb1a9e525de9abb352cf39c85cc090e33b8) 2020-08-17 00:02:31 -07:00
865a01d2eb 2020-08-16 nightly release (5bcf9b017a426e55466cf7435009d1fb339684d8) 2020-08-16 00:02:36 -07:00
4458315a89 2020-08-15 nightly release (91f3114fc1350dd2e1797e6edc5c61c44f2ffecd) 2020-08-15 00:03:22 -07:00
ac414f6c7e 2020-08-14 nightly release (b9a105bcc03d27f68b53e32258ee4c252570dcc9) 2020-08-14 00:03:33 -07:00
936fa35cf1 2020-08-13 nightly release (c9dcc833bca69a0f2dd3518ce97136206da8024f) 2020-08-13 00:03:43 -07:00
b7c4a72c53 2020-08-12 nightly release (ecb9e790ed6ceafa738ad52a500b9e50bc0fc241) 2020-08-12 00:02:47 -07:00
c531bf36cd 2020-08-11 nightly release (ddcf3ded3e78042a41fd6d6b861d678e11460821) 2020-08-11 00:02:53 -07:00
1eed3cba2a 2020-08-10 nightly release (d7aaa3327bf9ad8757897a76879230da92bf607f) 2020-08-10 12:37:23 -07:00
c8173d2cb5 2020-08-10 nightly release (55ac2405893165de0687960a6650bbc5c8f29e73) 2020-08-10 00:02:26 -07:00
818b9ac780 2020-08-09 nightly release (b6810c1064eb24cb542a9be56140689dce8ad7a1) 2020-08-09 00:02:28 -07:00
97c7575520 2020-08-08 nightly release (b7a9bc0802b68cff07958937cfda2271155689e5) 2020-08-08 00:02:23 -07:00
5dec2a9909 2020-08-07 nightly release (cb1ac94069700e47f7283c41820d3c2de0af9553) 2020-08-07 00:02:52 -07:00
c81b784a72 2020-08-06 nightly release (644d787cd8d9512b92d18e9a94d6f3a401b5ca69) 2020-08-06 00:03:49 -07:00
5415138490 2020-08-05 nightly release (0f358fab6b92307edba4d89a855cac395f5b1565) 2020-08-05 00:03:04 -07:00
40277cdaae 2020-08-04 nightly release (ae67f4c8b89547d648b66a49048ce13982ed6be7) 2020-08-04 00:03:10 -07:00
51381481e2 2020-08-03 nightly release (bfa94487b968ccb570ef8cd9547029b967e76ed0) 2020-08-03 00:02:59 -07:00
36fa26aae5 2020-08-02 nightly release (91c80d122ab271d36ce37d60acf430fdbd54d249) 2020-08-02 00:03:17 -07:00
69909359f4 2020-08-01 nightly release (44b018ddeb89e9c6283d3a1c17549848cf77d6a4) 2020-08-01 00:03:38 -07:00
006129dc63 2020-07-31 nightly release (2f840b1662b487d5551d7230f8eb4d57645cfff5) 2020-07-31 00:06:51 -07:00
87867a04f9 2020-07-30 nightly release (0444bac940695ccfa43854f9241839f759ba5f28) 2020-07-30 00:03:38 -07:00
7e19a4a05b 2020-07-29 nightly release (6b3f335641e1874c5b0ae0aa719687ed5f42ab45) 2020-07-29 00:03:42 -07:00
e99cef1e0b 2020-07-28 nightly release (4f723825b48e555512813fcffd56e89e5b16eeaf) 2020-07-28 00:03:07 -07:00
1da1361946 2020-07-27 nightly release (96aaa311c0251d24decb9dc5da4957b7c590af6f) 2020-07-27 00:02:27 -07:00
bfbc0a6fcf 2020-07-26 nightly release (b7bda236d18815052378c88081f64935427d7716) 2020-07-26 00:04:40 -07:00
2f4f3b4fb7 2020-07-25 nightly release (366c014a7799f0b7bbc258fd6c271dadb99d1de0) 2020-07-25 00:02:25 -07:00
f83664fb35 2020-07-24 nightly release (c0bfa45f9d26fb814a80f3053fbc550ff77d82c1) 2020-07-24 00:02:36 -07:00
c6ef1bac44 2020-07-23 nightly release (0ec7ba40888f07678d3a1d766817154dc90bef90) 2020-07-23 00:02:44 -07:00
10c53d9390 2020-07-22 nightly release (5c9918e757b019564e74ae6f676cacfe70a87afd) 2020-07-22 00:03:14 -07:00
a41d75b78a 2020-07-21 nightly release (fe415589a964697a78186189bd4815541f853b47) 2020-07-21 00:02:27 -07:00
bb29acf111 2020-07-20 nightly release (bd42e1a082f21d189492a950533970caabf2d089) 2020-07-20 00:03:24 -07:00
33f735f3ec 2020-07-19 nightly release (a69a2628109a55f7f965bb79eca8967fce685a6a) 2020-07-19 00:02:41 -07:00
0fcfa4aca3 2020-07-18 nightly release (e7a09b4d17010e60bc95c25f8165ef479d1b9612) 2020-07-18 00:02:55 -07:00
b18ecab49c 2020-07-17 nightly release (e3e58e20cd57892fd39e4bda33a2c249cab6f739) 2020-07-17 00:03:42 -07:00
7fb344967b 2020-07-16 nightly release (04c0f2e3cc7be79bfa005d1670b19cfb7dee308c) 2020-07-16 00:03:01 -07:00
21dba79af2 2020-07-15 nightly release (9552ec787cf7a004ed7a6063d45bb5e2d85e1d60) 2020-07-15 00:03:03 -07:00
7affad5f48 2020-07-14 nightly release (80d5b3785b88f83eb598e393d0137f045b979c4b) 2020-07-14 00:02:49 -07:00
62b00bcddb 2020-07-13 nightly release (0c77bd7c0bbd4d6e50a5f3ce7b4debbee85d7963) 2020-07-13 12:58:41 -07:00
b7e29fb2c6 2020-07-13 nightly release (67a4f375cdf06113ca959b4e16739edb666f243f) 2020-07-13 00:02:49 -07:00
7bc96af0a7 2020-07-12 nightly release (4b4184fc69e224701529b84d2f182c1d65cea74a) 2020-07-12 00:02:37 -07:00
1ec86870fc 2020-07-11 nightly release (a1ed6e1eb30c03db55881bca536e5edf64622a1b) 2020-07-11 00:02:33 -07:00
5797d683a2 2020-07-10 nightly release (df252c059c3ea4c04f8c39c3b4c25a3f4572b0b7) 2020-07-10 00:03:27 -07:00
2360093da9 2020-07-09 nightly release (bf9cc5c77698da260e806ce07a690770b6d26253) 2020-07-09 00:02:31 -07:00
0a0d5b9a80 2020-07-08 nightly release (e2a291b396be8db6f9ac1fc7d45e97c6026df590) 2020-07-08 00:02:31 -07:00
f4f757998d 2020-07-07 nightly release (22c7d183f7c95a70f75acb310c1abc79d674fb18) 2020-07-07 11:13:40 -07:00
52e3d4aba1 2020-07-07 nightly release (4aa543ed2e3ff9e9e6aab4979efca559a62f22b7) 2020-07-07 00:02:22 -07:00
cbac4f50d3 2020-07-06 nightly release (300a3aaaadb5edaac818713b1752e9af976336f9) 2020-07-06 00:02:26 -07:00
9a199cf853 2020-07-05 nightly release (8ecd4f36aab89df38500e72458af5e05e7f12a78) 2020-07-05 00:02:28 -07:00
d9a61a1671 2020-07-04 nightly release (480851ad2c21e8e39e336d849b8030a2f91718d7) 2020-07-04 00:02:15 -07:00
b2718d2b21 2020-07-03 nightly release (824ab19941b09164b099c0a614b78984b9c68cf9) 2020-07-03 00:04:57 -07:00
b9bde4e47b 2020-07-02 nightly release (ea03f954ada77bfbfef542ce93be2f525c8d8e64) 2020-07-02 00:02:42 -07:00
05bcdcd112 2020-07-01 nightly release (fcadca1bdab62ea5728e49397e023c8863466e83) 2020-07-01 00:02:57 -07:00
6bdf560205 2020-06-30 nightly release (871bfaaba1da0eff28d5a992cc86a2bb745e6621) 2020-06-30 11:14:52 -07:00
ca6a9756c2 2020-06-30 nightly release (b9cca4b186797b4ccdc12197b3b71db94d8e2297) 2020-06-30 00:02:32 -07:00
9a7a41a96d 2020-06-29 nightly release (b35cdc5200af963e410c0a25400fd07f30b89bca) 2020-06-29 00:02:19 -07:00
2c978b42a4 2020-06-28 nightly release (502ec8f7f76619e6cbb1efb0e23eb8c5438daed2) 2020-06-28 00:02:34 -07:00
09c29e5af2 2020-06-27 nightly release (61a8de77cfc50ba0d12348065a7d399663ba6511) 2020-06-27 00:02:23 -07:00
28d1a1436b 2020-06-26 nightly release (eebd492dcfb8d4152a5ba4240486f3df5aaf112d) 2020-06-26 00:02:56 -07:00
64d71c446e 2020-06-25 nightly release (eae1ed99a35eac4e7b6daf7123136e832c50a158) 2020-06-25 00:02:46 -07:00
1d4e5f4a25 2020-06-24 nightly release (7b0f867c4853af69b14bb516ba2a9dbff8f56d51) 2020-06-24 00:02:33 -07:00
8752b4048d 2020-06-23 nightly release (e9efad687875a7de1e599dda776ed1e9509d01eb) 2020-06-23 00:02:44 -07:00
48a48958f3 2020-06-22 nightly release (c8738957221e3edd0aa2fc2be84c037fd0611881) 2020-06-22 12:49:39 -07:00
aa61b8bc13 2020-06-22 nightly release (ab8a99bd36b9969f6226f0dfd62510e3dd6ecb51) 2020-06-22 00:02:27 -07:00
d6e183bda7 2020-06-21 nightly release (3bbedb34b9b316729a27e793d94488b574e1577a) 2020-06-21 00:02:52 -07:00
e51edad5d3 2020-06-20 nightly release (9da277c63557784d6a2ea7c44d1c469d7178d444) 2020-06-20 00:02:52 -07:00
c51aaa7f08 2020-06-19 nightly release (86b1afa039f3fba83f082382b7c62b896fb98e09) 2020-06-19 00:02:39 -07:00
681f9c3458 2020-06-18 nightly release (d1a0e880750bd2a7a88ff3465df3af7f05261790) 2020-06-18 00:02:55 -07:00
309d8f4dea 2020-06-17 nightly release (9d588f7ce26775ffad0035dcc4c1128d62b889fc) 2020-06-17 00:02:54 -07:00
37dddadd6a 2020-06-16 nightly release (bcb44796ba00f9ac5f22e33f1de3a24b277c4c3a) 2020-06-16 00:03:48 -07:00
d630b39c4f 2020-06-15 nightly release (541814f2b7eacabacdc87ccb1b4495bf486f501a) 2020-06-15 00:02:18 -07:00
9fca12ab19 2020-06-14 nightly release (8072f0685f5bd9bc8f1e48ef916518fa31a50826) 2020-06-14 00:02:19 -07:00
c82098341b 2020-06-13 nightly release (8d3fcb43cf5e58d05351107bc99ee5e2ce8ae5b9) 2020-06-13 00:04:02 -07:00
7b4d0fbaa9 2020-06-12 nightly release (c068233300f1473e3119b8d6b8b672c2fb912f1d) 2020-06-12 00:02:03 -07:00
195f29e3ba 2020-06-11 nightly release (c3d4053bc0648f76906208a69d863276c8b82995) 2020-06-11 00:02:27 -07:00
31019eecb8 2020-06-10 nightly release (6bdfd6ae1adb341f5bae2fc8bc987653b8a319ad) 2020-06-10 00:01:56 -07:00
bd13707502 2020-06-09 nightly release (af05158c56af29e062580f458a86a32b8f4c2b85) 2020-06-09 00:02:44 -07:00
41ff48299b 2020-06-08 nightly release (6c56671fd96ac71346c818d0a5ea8087575e9cba) 2020-06-08 00:01:58 -07:00
61a9383920 2020-06-07 nightly release (e4627e5dba1516afe0c12bf748ebc2200b6e378d) 2020-06-07 00:01:59 -07:00
b5da8c9f3e 2020-06-06 nightly release (6a75f650dd3bf6d3fdaafffe7298d141c0377489) 2020-06-06 00:02:17 -07:00
2f447b8e25 2020-06-05 nightly release (8a6914ddb225196d9b4c712ad7a82b464a80c0e5) 2020-06-05 00:02:36 -07:00
00de97d13a 2020-06-04 nightly release (fe684679b06f7f2fe7a7e136ea5605c04254b652) 2020-06-04 12:31:20 -07:00
645b018a22 2020-06-04 nightly release (03eca384fd87ee07c73b6406c3e32ee69bb13fb0) 2020-06-04 00:02:18 -07:00
6fdf7aa7a2 2020-06-03 nightly release (a05ef17e467a152e86e3de1d47868dd4a1d9d648) 2020-06-03 00:02:01 -07:00
588bf42df3 2020-06-02 nightly release (f4365cf5ba8ee4ba319385cbd2ff7b9a825a75d0) 2020-06-02 00:02:14 -07:00
c3dc364b18 2020-06-01 nightly release (caaea084e9e63dd3f22edcab0fda6822f7634820) 2020-06-01 00:02:00 -07:00
860bd46af1 2020-05-31 nightly release (8556664d6896a8e7f48f1c419e06e0568b9ee09e) 2020-05-31 00:02:09 -07:00
825ee6cbb3 2020-05-30 nightly release (b7b99ab0c8f82100177729b9751481852d83e77e) 2020-05-30 00:02:07 -07:00
c1afe3d886 2020-05-29 nightly release (b08a4aaf3bdf59e80590fc2b4a7c821be2213699) 2020-05-29 00:02:06 -07:00
43beca9d58 2020-05-28 nightly release (f5bc91f851f7d3b862643b51f06f0281eb225b8c) 2020-05-28 00:01:59 -07:00
f0711fe9c6 2020-05-27 nightly release (916084d933792f7ee619aee7155fedf68d1a8cd1) 2020-05-27 00:02:22 -07:00
f01bd55177 2020-05-26 nightly release (d035d05080729c30636ff30fcc068de3c7e9badd) 2020-05-26 00:02:00 -07:00
31d8b6eabd 2020-05-25 nightly release (d035d05080729c30636ff30fcc068de3c7e9badd) 2020-05-25 00:02:12 -07:00
74b18f831e 2020-05-24 nightly release (d035d05080729c30636ff30fcc068de3c7e9badd) 2020-05-24 00:03:13 -07:00
7c4f81427c 2020-05-23 nightly release (d035d05080729c30636ff30fcc068de3c7e9badd) 2020-05-23 00:01:53 -07:00
04734358e7 2020-05-22 nightly release (d035d05080729c30636ff30fcc068de3c7e9badd) 2020-05-22 00:02:14 -07:00
991faa295f 2020-05-21 nightly release (e9902358df14dc4809e4f50b12088a5200a1862d) 2020-05-21 00:01:58 -07:00
0a55aad1ea 2020-05-20 nightly release (1465970a343e61f2f2b104859ca7f5d7e03f5d02) 2020-05-20 00:02:15 -07:00
fe43bd1a77 2020-05-19 nightly release (f6f1384811b9cc722f650ed9ead8ee99938c009a) 2020-05-19 00:01:52 -07:00
8216138905 2020-05-18 nightly release (176174a68ba2d36b9a5aaef0943421682ecc66d4) 2020-05-18 00:01:53 -07:00
c680caafb1 2020-05-17 nightly release (176174a68ba2d36b9a5aaef0943421682ecc66d4) 2020-05-17 00:02:01 -07:00
c683033c5b 2020-05-16 nightly release (83df3beacad3e22bdfa95c1d3514af59dceaacdc) 2020-05-16 00:02:02 -07:00
8167c5996d 2020-05-15 nightly release (c0bc1827611f4ad6370e87af35571bfe3cc91e4f) 2020-05-15 00:02:02 -07:00
053c725853 2020-05-14 nightly release (96885f73ed79c4d3d01717248f24694e05e1b041) 2020-05-14 00:01:54 -07:00
5fdf2cdc0e 2020-05-13 nightly release (61bea93fca35ad7ace2c9856499d3f478ffb1377) 2020-05-13 00:02:04 -07:00
f5bcbc5400 2020-05-12 nightly release (cf82011361592c0f55d1ce9e55c692108308374d) 2020-05-12 00:01:56 -07:00
c361c5a57c 2020-05-11 nightly release (324dc1623e2f91892038fb1b151450a7c6529dd9) 2020-05-11 00:02:03 -07:00
5d263b7b81 2020-05-10 nightly release (26928b164f3e43a48bc57fc41ca277583501054d) 2020-05-10 00:01:58 -07:00
e241ab52a0 2020-05-09 nightly release (45010833069c02162fee40291ef7d444dfe7f41b) 2020-05-09 00:02:19 -07:00
2311a48ce4 2020-05-08 nightly release (4c358b8b726f56bc78ce20bb031e10869145de94) 2020-05-08 00:02:45 -07:00
5c7548f1bd 2020-05-07 nightly release (9143d7fb687acb4aff2ca7f8e1fc13c2af7a941b) 2020-05-07 00:01:59 -07:00
b372ce156d 2020-05-06 nightly release (b57b596f20b004116053e821d76ee08d46e55e39) 2020-05-06 00:02:19 -07:00
d84fbdc752 2020-05-05 nightly release (429d90f6487b276b02bd13b26c5291678412b389) 2020-05-05 00:01:54 -07:00
4154b913b5 2020-05-04 nightly release (843c0230f2928aad61a6940688da3a6cd6c4cd57) 2020-05-04 00:01:59 -07:00
bb75b0b420 2020-05-03 nightly release (5baa6b6c34c9a61c936f90168b6449421814553d) 2020-05-03 00:01:57 -07:00
0d1ee45511 2020-05-02 nightly release (d6394183078d3525f64b27ec0659b994a78c42dd) 2020-05-02 00:01:59 -07:00
3c5465887a 2020-05-01 nightly release (9e32a1f5cdcefa3ab55d91121e10d37e8fc850ea) 2020-05-01 00:01:53 -07:00
4684f1fe19 2020-04-30 nightly release (68250fa557cc3079bdd88aee4bee2d9222fbb34d) 2020-04-30 00:02:19 -07:00
4070924186 2020-04-29 nightly release (4bfa51d40595d41d6bec6d4a9b1ade72adde4ebc) 2020-04-29 00:02:11 -07:00
d055855a96 2020-04-28 nightly release (ebcacd5e878f3f8e84c941d6b9567c88f50a2f10) 2020-04-28 00:02:00 -07:00
52f688abbc 2020-04-27 nightly release (f41742ff2fd5c9507c037dc120d75f6f191a87b1) 2020-04-27 00:02:50 -07:00
7bce785c8b 2020-04-26 nightly release (b64fc3c4b5d927928770f9b343eb845123367084) 2020-04-26 00:02:15 -07:00
d3b0b98dbc 2020-04-25 nightly release (6e659e928ba48afa8a6f5d734c37ab187734927b) 2020-04-25 00:02:08 -07:00
1021e473d6 2020-04-24 nightly release (827f04a075d9f564e0871f809ae67f5538b30ab9) 2020-04-24 00:02:02 -07:00
572542260d 2020-04-23 nightly release (b889e0da8ab33e0b47abc817e679851299728be7) 2020-04-23 00:02:18 -07:00
5213e2cf39 2020-04-22 nightly release (799793f27951dbf1abd01c3a1082e6edd525f19e) 2020-04-22 00:02:25 -07:00
23c4dbd92b 2020-04-21 nightly release (a1eb591ea6afa07d2bc6e644bc0697a585dbdd7e) 2020-04-21 00:02:11 -07:00
2c106114c9 2020-04-20 nightly release (0f0d69009eb1dbc58feacc819bc9885990e888aa) 2020-04-20 00:02:31 -07:00
130773838d 2020-04-19 nightly release (b0b9e704ed1f31ed1c81994c20e5a9f3715d2583) 2020-04-19 00:01:52 -07:00
54f8763e8f 2020-04-18 nightly release (197c85fcbc487d707e0e2635a5291da7c8658036) 2020-04-18 00:02:02 -07:00
59c6f7575b 2020-04-17 nightly release (a89d1ed5496dccce310b3dd08a417b5de71e8332) 2020-04-17 00:01:53 -07:00
57f9ef23d8 2020-04-16 nightly release (7539ea0207859d5e20f6e836818bfafa77f3045e) 2020-04-16 00:01:55 -07:00
5ddf7a5733 2020-04-15 nightly release (9cac2b83d9e6838de796e0cecfbacaa6a64dc6a8) 2020-04-15 00:02:09 -07:00
8cfa076820 2020-04-14 nightly release (dd64e738c5cb191a5280b19635fe9941d6c0b95a) 2020-04-14 00:02:13 -07:00
e15f869505 2020-04-13 nightly release (b92f8d9b7e2e8543e2808c1d05c09e57c19ce5d9) 2020-04-13 00:02:03 -07:00
013659bc5b 2020-04-12 nightly release (d83509e603d6d932a818d4e0ca027129aa9c5857) 2020-04-12 00:02:09 -07:00
81f40df4e5 2020-04-11 nightly release (409346eee308017336fc73a4ae1e9b60777b7b49) 2020-04-11 00:02:06 -07:00
cabe3becc0 2020-04-10 nightly release (31dca07fa5673c115ae6e9e68a09b969918c49d8) 2020-04-10 00:01:53 -07:00
4ba93a8a3e 2020-04-09 nightly release (f59e646faa6ec7c388735aeda4a5bd7eb8eb0be2) 2020-04-09 00:01:56 -07:00
1061602446 2020-04-08 nightly release (f0bddd5e7a89a7f8037a27180b27aeb1a90b6f6a) 2020-04-08 00:01:55 -07:00
50aefcfa05 2020-04-07 nightly release (3e5d25fdfd6dc22cfc697a83d924ff386fdf51b3) 2020-04-07 00:02:24 -07:00
598d03f9a9 2020-04-06 nightly release (82d58ed484eb04f894475de0551055f7e070f481) 2020-04-06 00:02:00 -07:00
28295bbcce 2020-04-05 nightly release (b3cdec88e364e56bc69bf42cd6d8583fcfd62a18) 2020-04-05 00:02:30 -07:00
06d935798d 2020-04-04 nightly release (e3e2dd7779974307cc5caa75d539adac690f5ca5) 2020-04-04 00:02:09 -07:00
021d8fa26d 2020-04-03 nightly release (1a146b0577ac7737cc8eb28ecf4c10fd713dd4c5) 2020-04-03 00:01:49 -07:00
d0937d2101 2020-04-02 nightly release (2f50c119545c654088bb2796fa23e747099ca053) 2020-04-02 00:01:54 -07:00
66d3b83708 2020-04-01 nightly release (ee6f7c3e62a179178e8e0cc3ab1aaedfa820d04d) 2020-04-01 00:01:54 -07:00
73f6729ccf 2020-03-31 nightly release (a090de380c1d0be68b26476d69d38a3291268c69) 2020-03-31 00:01:57 -07:00
77f1aef758 2020-03-30 nightly release (340048b67c53f05a04def9e5a69403c7b49915c8) 2020-03-30 00:02:07 -07:00
29ccceee5c 2020-03-29 nightly release (67c382294443cca408347ce68d73d5084301c5a2) 2020-03-29 00:01:52 -07:00
554de41a6e 2020-03-28 nightly release (683246e5ead92503e1022418cab33c93bfbc77e3) 2020-03-28 00:02:02 -07:00
565f305f3a 2020-03-27 nightly release (ac639d927a37f58bda16c7a1b96a2dfcf3a21666) 2020-03-27 00:02:02 -07:00
a49ed6d378 2020-03-26 nightly release (be0cdf5d157a84dd28bd95ca8f5f82306c0340f5) 2020-03-26 00:01:59 -07:00
dd073cd4fc 2020-03-25 nightly release (17abb7c31a30ee8e5037528b7b6552a25b7132e7) 2020-03-25 14:19:03 -07:00
fc211ce302 2020-03-25 nightly release (d6377b7cef0c7bc822df80eedd86689bc51e83d2) 2020-03-25 00:02:04 -07:00
addd3250a4 2020-03-24 nightly release (8b8af0d4580f74680240a88a34fea78be02a6d22) 2020-03-24 00:02:26 -07:00
e8c963122a 2020-03-23 nightly release (a6672f3b305c3805c691f3477e7940d146130a88) 2020-03-23 00:02:27 -07:00
f3908c0ee6 2020-03-22 nightly release (a5b509985a37127fb52fbfdee85c7b336cd8d2c1) 2020-03-22 00:01:50 -07:00
37ea717b03 2020-03-21 nightly release (95ad94c75b09ad2438141e4eb52e83e737966e60) 2020-03-21 00:02:00 -07:00
8b2e30b3f5 2020-03-20 nightly release (ec9f6809734b4cada98d02138ad8de75ce790273) 2020-03-20 00:02:28 -07:00
2730db1362 2020-03-19 nightly release (c8f665dcb626378ca9c51d7b70fc242524105441) 2020-03-19 00:02:22 -07:00
f1a11aee2b 2020-03-18 nightly release (bcbdba450c25cdf7c6bbe590880cf39f0984123c) 2020-03-18 00:01:58 -07:00
5d40408bfd 2020-03-17 nightly release (089a0a211776ac928a9fefb1841e1d44c9b4dee1) 2020-03-17 00:01:57 -07:00
e9bd3eca1b 2020-03-16 nightly release (bdd7dbfd4b75e66a88d393993b41c77f576f74fc) 2020-03-16 00:04:09 -07:00
36718f7877 2020-03-15 nightly release (6c555e1508184f2cbf34c6ec96d557809808fe85) 2020-03-15 00:02:09 -07:00
d3d99e47ef 2020-03-14 nightly release (fb20621b3b80aef95485574f53cceecaf51ac8be) 2020-03-14 00:02:08 -07:00
bac80526bd 2020-03-13 nightly release (fd355965857f5c281d0b60be864745e7b7a223bd) 2020-03-13 00:02:28 -07:00
fc35f28aa5 2020-03-12 nightly release (c235be42ddecc3c4e1cdf192ca2764455082c1c6) 2020-03-12 00:05:52 -07:00
c09e7d1b26 2020-03-11 nightly release (2ce9513b0c8894987f6d42bfb57ff95b22e32c95) 2020-03-11 00:04:29 -07:00
f9ef5dafca 2020-03-10 nightly release (4f62cbe7de8f867809ca601c996dd48a5a28ffca) 2020-03-10 00:08:48 -07:00
d44877c493 2020-03-09 nightly release (7e55494502478d7f78138bc974e681df52b0635c) 2020-03-09 00:02:22 -07:00
81e7c5374a 2020-03-08 nightly release (79d47c1c5ff5306bdd275196b7171c04bebbdcca) 2020-03-08 00:19:17 -08:00
e80485cacc 2020-03-07 nightly release (65bad41cbec096aa767b3752843eddebf845726f) 2020-03-07 00:02:51 -08:00
fbd3eeb1e7 2020-03-06 nightly release (9a5e9d8cecb1c68eebd69618729a7ec5671b2a06) 2020-03-06 00:03:33 -08:00
d499ac979a 2020-03-05 nightly release (2b79bab029ec387618f6b9724a4027b81fbda33c) 2020-03-05 00:04:15 -08:00
b236f19a6a 2020-03-04 nightly release (f097ca503d349fa352281925fc6df72e52fff077) 2020-03-04 00:02:50 -08:00
ea8063a8aa 2020-03-03 nightly release (0afee0c20bc9c3b4261157d5a5f8eee437954a2a) 2020-03-03 00:03:22 -08:00
3b175e7c33 2020-03-02 nightly release (a500491cbc51c093b5990a69c6066479c13e360c) 2020-03-02 00:03:45 -08:00
38aabee374 2020-03-01 nightly release (ace2b4f37f26b8d7782dd6f1ce7e3738f8dc0dec) 2020-03-01 00:02:54 -08:00
bd482deca4 2020-02-29 nightly release (5a8562a6af2f4097975ad079e982a88924c4fd07) 2020-02-29 00:02:32 -08:00
e5f2f9d8c7 2020-02-28 nightly release (f5f1e5e7f66502a6a3f53f22f5034fdef8f040e9) 2020-02-28 00:02:24 -08:00
d2665bc828 2020-02-27 nightly release (973371139475834c44d118ba0256d97b070980a0) 2020-02-27 00:07:20 -08:00
9f327c18e3 2020-02-26 nightly release (758ad516f32708de243f194144ee0f7b9e0f5117) 2020-02-26 00:02:40 -08:00
496939b5fa 2020-02-25 nightly release (4460c8b034f8fd544ff9c271c4aa21698644d352) 2020-02-25 00:02:35 -08:00
bd8e7b182f 2020-02-24 nightly release (039dc9085425e18b8c217f6e33a1c3dd072dd48f) 2020-02-24 00:02:31 -08:00
6693e040e5 2020-02-23 nightly release (6d448acb345d2f21a6ddc6bd4b57a27fc785112d) 2020-02-23 00:02:05 -08:00
9718bd1498 2020-02-22 nightly release (8291e06f8fb14a09e6c3b7a740a182250069242c) 2020-02-22 00:02:08 -08:00
5ec369fd8b 2020-02-21 nightly release (a943b0518bee8f3ad5f6c44a30fbdd3382f2209c) 2020-02-21 00:02:12 -08:00
6ba25af498 2020-02-20 nightly release (e95282ab282032369289232e844ee61fbdf3a4e9) 2020-02-20 00:03:33 -08:00
63db28f43a 2020-02-19 nightly release (d13c1b8af803eecb7586c3760e6e93efb51e6677) 2020-02-19 00:02:30 -08:00
1e1c56b0fd 2020-02-18 nightly release (dde2ff46084202f646632d32aece341c911ff269) 2020-02-18 00:02:29 -08:00
3529bc52ce 2020-02-17 nightly release (87dc2dbcce2f46bbc861ef7e884a0e6b99290cf5) 2020-02-17 00:02:49 -08:00
3b952ed61f 2020-02-16 nightly release (f6808df75fb3ac4bc6b5f17a1d960f069e1faaea) 2020-02-16 00:02:07 -08:00
33e3497594 2020-02-15 nightly release (d35a4c202e917b5d5cb67ac749fcf7931212c25b) 2020-02-15 00:02:15 -08:00
03a562bf9e 2020-02-14 nightly release (ecd3c252b4da3056797f8a505c9ebe8d68db55c4) 2020-02-14 00:02:59 -08:00
b974dc1a0b 2020-02-13 nightly release (b98c7d34ed718774db28651220eb8bb71b2e8baf) 2020-02-13 00:04:26 -08:00
f7b3186fa4 2020-02-12 nightly release (9d9fa2eace07f2833bcd73551b52bf31bbdbc093) 2020-02-12 00:08:14 -08:00
c58acf210e 2020-02-11 nightly release (9857d9b4cd4b50c326c0d8309e92e5bbde083a84) 2020-02-11 00:04:23 -08:00
fa524b1ca1 2020-02-10 nightly release (e2f12885140c36c1d5bf82de6eb47797856fdacd) 2020-02-10 00:03:15 -08:00
121046fe2e 2020-02-09 nightly release (e2f12885140c36c1d5bf82de6eb47797856fdacd) 2020-02-09 00:03:14 -08:00
e9a11f3014 2020-02-08 nightly release (6249d7302b7277864ed0ade93f58d88ee0cd3aa8) 2020-02-08 00:05:28 -08:00
d180c32586 2020-02-07 nightly release (05d18ffaf5ccc5a19245afafe3998fc3731b570d) 2020-02-07 00:02:37 -08:00
77c97edf1e 2020-02-06 nightly release (e76fa9822dc4f980791d1bf01d63b2d4e9993ced) 2020-02-06 00:04:15 -08:00
1c420dd12b 2020-02-05 nightly release (1b446aa2ee540c6fbd029619459962aa7af3f168) 2020-02-05 00:13:49 -08:00
57a3554274 2020-02-04 nightly release (b894dc06de3e0750d9db8bd20b92429f6d873fa1) 2020-02-04 00:08:04 -08:00
e121e114d2 2020-02-03 nightly release (29e6f13cd1c309cf3dfd8ba45a6ca199359422b5) 2020-02-03 00:02:34 -08:00
6bc40330a5 2020-02-02 nightly release (71ad88199abb837286cdec73ccfcfb9f1a0a2356) 2020-02-02 00:02:18 -08:00
35d1dd656d 2020-02-01 nightly release (c83f9849067c5f14ce8e61f84b62af1215af5133) 2020-02-01 00:03:53 -08:00
ed119e9754 2020-01-31 nightly release (ed10408cc64d1acf0e325a3dda01f7b911350052) 2020-01-31 00:02:26 -08:00
7ef2fd057b 2020-01-30 nightly release (821b6aa769645c8190703b7d8e2cc9f36597853a) 2020-01-30 00:08:51 -08:00
9784297745 2020-01-29 nightly release (5e2311033ebc4bb6009f70db68e4d63ba73a1633) 2020-01-29 00:02:54 -08:00
7a245af681 2020-01-28 nightly release (2060e0a9dd197f8116635dc7517dde5191c0b1a0) 2020-01-28 15:25:48 -08:00
ace7cb80fd 2020-01-28 nightly release (8e4161517e112478a1c1f0290fedb91965f95aff) 2020-01-28 00:02:51 -08:00
db7d91084b 2020-01-27 nightly release (1e5aead35b3d2dca993f90e7d3343cc105ab93e1) 2020-01-27 00:02:08 -08:00
989298c613 2020-01-26 nightly release (90a259e1e22d14c79f788520c836d78b7f6325ba) 2020-01-26 00:02:41 -08:00
2e96268be1 2020-01-25 nightly release (e0ffe72649cef3a1dfd321545194d1b3574975c7) 2020-01-25 00:02:48 -08:00
b068dc341c 2020-01-24 nightly release (3ada2e0d64b40622e823b8135d2bbbc74e6526b9) 2020-01-24 00:02:13 -08:00
05641e89d5 2020-01-23 nightly release (21d475e20d8e9ae1652548e33c3be76383a821d3) 2020-01-23 00:07:25 -08:00
9ae9ff0f09 2020-01-22 nightly release (44b270d892176d6526801bdfa5227a8caa9852bf) 2020-01-22 00:03:23 -08:00
8b77987981 2020-01-21 nightly release (ecbf6f99e6a4e373105133b31534c9fb50f2acca) 2020-01-21 00:03:38 -08:00
0ba313bc2f 2020-01-20 nightly release (ecbf6f99e6a4e373105133b31534c9fb50f2acca) 2020-01-20 00:02:06 -08:00
80d85d6d95 2020-01-19 nightly release (58234c0254f135d1e3714b17f44f4922d56d41b4) 2020-01-19 00:02:25 -08:00
72f778b3d8 2020-01-18 nightly release (1ecad2bb2b9cf7c76657250688fb56af2e87886a) 2020-01-18 00:05:21 -08:00
e13d222815 2020-01-17 nightly release (ef5ae4823a00923342c82e08dd06adf579f5bc26) 2020-01-17 00:07:47 -08:00
be1384f850 2020-01-16 nightly release (d75b6b3f9d41c4f82fb2f5a04e8c9b27361e2701) 2020-01-16 00:05:31 -08:00
35bd8fc853 2020-01-15 nightly release (4dce482acb2f0b248e4886b3069dca8e3a1b7681) 2020-01-15 00:04:50 -08:00
90cb5cd111 2020-01-14 nightly release (62b1a5f8466991b3e042345e1c786d520c3b9d91) 2020-01-14 00:02:33 -08:00
aa881c569d 2020-01-13 nightly release (14593f077f9cb248cca85fd18b598d14c47d5d4e) 2020-01-13 00:04:24 -08:00
8ec30d8da4 2020-01-12 nightly release (927c2a02b0b29a0fafcced8d65896dd417023067) 2020-01-12 00:09:43 -08:00
b324108e81 2020-01-11 nightly release (927c2a02b0b29a0fafcced8d65896dd417023067) 2020-01-11 00:02:48 -08:00
0fa8c2c780 2020-01-10 nightly release (8ea49e7a0897b77a2cd6bf854efd80ef593acf02) 2020-01-10 00:02:55 -08:00
004e3ab791 2020-01-09 nightly release (26f552a3d10f9952636346173a1c34e824556c98) 2020-01-09 11:06:55 -08:00
0ae8b50609 2020-01-09 nightly release (0dbd5c0bfe9c4af1ecb0fccc669277d6eafd0d2b) 2020-01-09 00:02:20 -08:00
ab79b1861b 2020-01-08 nightly release (9116f02bebf3a5260feef5732d36c54ecb3b4033) 2020-01-08 00:05:01 -08:00
3ea026f4ab 2020-01-07 nightly release (a561a8448b6b7bb8f6068178fe7bc9e2bf348304) 2020-01-07 00:14:56 -08:00
b5620f68e6 2020-01-06 nightly release (33430cf0946650058118096f78741440676e33c0) 2020-01-06 00:02:22 -08:00
8936e4ed33 2020-01-05 nightly release (3f0b330736a2af1331e49e8e12e880dffd1e5974) 2020-01-05 00:09:33 -08:00
9944deb456 2020-01-04 nightly release (2bac76969c3a7306a818cb35983fee3f3005131a) 2020-01-04 00:02:39 -08:00
9c908cb9c3 2020-01-03 nightly release (95cb66570af68ec93b5a72144a4f8eee45c354dc) 2020-01-03 00:04:06 -08:00
4313ac1d3e 2020-01-02 nightly release (cb1af5f61fb338c591e6427fd274ea5b44df4f26) 2020-01-02 00:03:28 -08:00
505aad770c 2020-01-01 nightly release (cb1af5f61fb338c591e6427fd274ea5b44df4f26) 2020-01-01 00:02:30 -08:00
8c2e381be8 2019-12-31 nightly release (b102550d2c103cd4e2d7cb9535d730417b7c8ef2) 2019-12-31 00:02:47 -08:00
73a5627944 2019-12-30 nightly release (ee87b01f4093208d527fc0bd740723c2fa4f1feb) 2019-12-30 00:07:29 -08:00
86523be4f1 2019-12-29 nightly release (22d84204f7188ed4042505e723eef46f048ff47c) 2019-12-29 00:08:28 -08:00
e67d8245f9 2019-12-28 nightly release (90a187618ef043edb40483746fba16ddb0b9918b) 2019-12-28 00:03:33 -08:00
9fe8cf51de 2019-12-27 nightly release (b522a8e1ff8a531c4ac75a3551b99d5b40125cf0) 2019-12-27 00:02:40 -08:00
fa96a94943 2019-12-26 nightly release (a54dc87e8ebf7634d3fb2f32dd32b73c1a4d095f) 2019-12-26 00:03:14 -08:00
776a8b0c01 2019-12-25 nightly release (a54dc87e8ebf7634d3fb2f32dd32b73c1a4d095f) 2019-12-25 00:08:27 -08:00
9eb235f1a5 2019-12-24 nightly release (363d8be787cb324a451b8511abea4e5bf05f376f) 2019-12-24 00:02:25 -08:00
3d6e73b978 2019-12-23 nightly release (fe76af96eddbf62df0d2722220b907e56e3ee8e6) 2019-12-23 00:02:20 -08:00
6998eb5c60 2019-12-22 nightly release (7d630278daee00ea2db6bc01e8a2a5f160bd8e81) 2019-12-22 00:02:09 -08:00
087fe33bef 2019-12-21 nightly release (700109eb630b79fd65cb93becb7f2d14f93bdb5c) 2019-12-21 00:05:00 -08:00
c899e0f249 2019-12-20 nightly release (4c341582ea18f241628c6e1756633bc9f897b76d) 2019-12-20 00:03:23 -08:00
fc345e9b5c 2019-12-19 nightly release (1e116a5089a353fa5186e436addbc4dd08d73f68) 2019-12-19 00:05:38 -08:00
1fb749785c 2019-12-18 nightly release (3c8892aa0cd80e62f01b1ba3c99e4f5fd713868c) 2019-12-18 00:04:05 -08:00
bb462a28c7 2019-12-17 nightly release (0e548a76ebc42d604d2c26ed586b899e2a25ded4) 2019-12-17 00:02:15 -08:00
28efaa7b99 2019-12-16 nightly release (409151e1bb90c66546901d372f59930f72242ee9) 2019-12-16 00:02:14 -08:00
96449cd8e6 2019-12-15 nightly release (ec92711aac5537bb509535c74bf59ccbf4d72db2) 2019-12-15 00:02:04 -08:00
74de2ce96f 2019-12-14 nightly release (36d17f4105f48d264fe085ce3dc0e4e825ebfb42) 2019-12-14 00:02:26 -08:00
4954096451 2019-12-13 nightly release (f7c92f60ba25ec5c50e125a4098913684448deca) 2019-12-13 00:02:15 -08:00
35cdcd2d31 2019-12-12 nightly release (2488231fe32e6e2c86f58acaa34766a6daa19235) 2019-12-12 00:02:20 -08:00
827fe3ff0a 2019-12-11 nightly release (8013ffd400b80ea3478e4b38daf9049647bf1550) 2019-12-11 00:03:19 -08:00
e8dc63722a 2019-12-10 nightly release (5205556782a71bdb8d90bcf0dcc58262713056b6) 2019-12-10 00:06:41 -08:00
6f08a756d1 2019-12-09 nightly release (190dac13e33267b4808a280fbc449ad672ec7544) 2019-12-09 00:04:51 -08:00
cefedb5547 2019-12-08 nightly release (6848f9abb82edc4e03e34b2c45a6c559a45a6c7c) 2019-12-08 00:02:27 -08:00
e2195755f4 2019-12-07 nightly release (63f1b780ba584384aef515ee3405f5847234787a) 2019-12-07 00:06:39 -08:00
7f6fc267c8 2019-12-06 nightly release (d32aec5ad627290516c17f37deeae04cafa06eab) 2019-12-06 00:05:51 -08:00
3fd4c696d9 2019-12-05 nightly release (a939b52ddbb0e1f9b7bf6b3a90dd4f7b331ef8de) 2019-12-05 00:02:45 -08:00
2561aea9fa 2019-12-04 nightly release (7e472679ff95fe4d23bcad89e98b8a6a2594880a) 2019-12-04 00:02:39 -08:00
d68cce5399 2019-12-03 nightly release (18ec4632b335521c8497ca2760a386c6d0d10a64) 2019-12-03 00:02:14 -08:00
66186d66e7 2019-12-02 nightly release (c780610f2d8358297cb4e4460692d496e124d64d) 2019-12-02 00:02:02 -08:00
bb9fdbeb5b 2019-12-01 nightly release (dd52f50fc85e6710f020936c1fc5f14673508350) 2019-12-01 00:03:15 -08:00
60d1c2048a 2019-11-30 nightly release (dd52f50fc85e6710f020936c1fc5f14673508350) 2019-11-30 00:02:51 -08:00
1e33e3ff3c 2019-11-29 nightly release (dd52f50fc85e6710f020936c1fc5f14673508350) 2019-11-29 00:02:09 -08:00
801675b97a 2019-11-28 nightly release (1350b99de4f13dfecfac335c088a79ff1f7e6adc) 2019-11-28 00:03:47 -08:00
3b178ac7ba 2019-11-27 nightly release (829499e626362e6a1badeba4e28c0f7a7a120fde) 2019-11-27 00:04:56 -08:00
2b44caa054 2019-11-26 nightly release (b8f50d9cc860460c7e9b6d3b370cab546e9f9583) 2019-11-26 00:02:13 -08:00
f8779b3945 2019-11-25 nightly release (3990e9d1ca23e39bfa65fe1d907ddb9f9dbf0919) 2019-11-25 00:02:52 -08:00
dfcf37b25a 2019-11-24 nightly release (3990e9d1ca23e39bfa65fe1d907ddb9f9dbf0919) 2019-11-24 00:02:20 -08:00
c1c03d34de 2019-11-23 nightly release (328ec5460f159ad9d42ddec463eaff2c118b092e) 2019-11-23 00:03:11 -08:00
1ac88375e4 2019-11-22 nightly release (48b943960e98082f103b9cbbdac54ec1eeca3fc9) 2019-11-22 00:02:32 -08:00
91110f4b2a 2019-11-21 nightly release (f7b12a985812f278b225fd58549ac95c7864a22c) 2019-11-21 00:06:35 -08:00
85ab8fc4b7 2019-11-20 nightly release (7495c25440709213cf9e018e7929a1a691c34489) 2019-11-20 00:03:35 -08:00
13f5548df1 2019-11-19 nightly release (a9ad2e2f00e9b7d9b30af5c0c6db348432ad7964) 2019-11-19 00:02:54 -08:00
95eee138ed 2019-11-18 nightly release (bb217eee985529b87f9582d6e4d6cb452fcd3909) 2019-11-18 00:03:42 -08:00
b6b29af92a 2019-11-17 nightly release (b011461c9f4bee46075cdf23a13d75c35baed612) 2019-11-17 00:02:06 -08:00
1b1e2c69e2 2019-11-16 nightly release (455b5c1a7d1503c03853e37b5a2caf60948359eb) 2019-11-16 00:04:39 -08:00
a3eaa3fac6 2019-11-15 nightly release (d22f61432dc71315029641b01bf264482bc9c5ca) 2019-11-15 15:49:07 -08:00
dc8c0d2ad7 2019-11-15 nightly release (d22f61432dc71315029641b01bf264482bc9c5ca) 2019-11-15 14:03:45 -08:00
031bd7a195 2019-11-15 nightly release (e1a309a647c5096bddaf44c423cc5dea8d6cae6c) 2019-11-15 00:03:24 -08:00
96a8c5838a 2019-11-14 nightly release (9fd7db616a0e220a74f4459958ea2d3186d5e55a) 2019-11-14 00:01:54 -08:00
fcfd231cbb 2019-11-13 nightly release 2019-11-13 00:02:28 -08:00
692a412019 2019-11-12 nightly release 2019-11-12 00:02:10 -08:00
c302ad7241 2019-11-11 nightly release 2019-11-11 03:00:50 -08:00
4700557819 2019-11-10 nightly release 2019-11-10 03:00:46 -08:00
36ddaddedc 2019-11-09 nightly release 2019-11-09 03:03:17 -08:00
3d0a871767 2019-11-08 nightly release (f362ae1f72525138b0b5e6240fc480f72148712f) 2019-11-08 13:10:28 -08:00
945c9128dc 2019-11-08 nightly release 2019-11-08 03:01:53 -08:00
76e078d3b0 2019-11-07 nightly release 2019-11-07 03:01:36 -08:00
40453f8c2d 2019-11-06 nightly release 2019-11-06 03:02:19 -08:00
2169a327ea 2019-11-05 nightly release 2019-11-05 03:02:39 -08:00
8bd6991397 2019-11-04 nightly release 2019-11-04 03:01:55 -08:00
cd324a9107 2019-11-03 nightly release 2019-11-03 03:04:23 -08:00
51770b859f 2019-11-02 nightly release 2019-11-02 03:01:32 -07:00
c4a27d2dad 2019-11-01 nightly release 2019-11-01 03:01:17 -07:00
4e8f1b5ee3 2019-10-31 nightly release 2019-10-31 03:03:17 -07:00
9328ceaba3 2019-10-30 nightly release 2019-10-30 03:01:42 -07:00
7fd0514bec 2019-10-29 nightly release 2019-10-29 03:04:52 -07:00
97ce0ad2e2 2019-10-28 nightly release 2019-10-28 03:05:15 -07:00
a9ffa7dbfe 2019-10-27 nightly release 2019-10-27 03:01:31 -07:00
30ae96a55e 2019-10-26 nightly release 2019-10-26 03:03:27 -07:00
8ee799199f 2019-10-25 nightly release 2019-10-25 03:01:22 -07:00
18edd71061 2019-10-24 nightly release 2019-10-24 03:02:07 -07:00
2b630217db 2019-10-23 nightly release 2019-10-23 03:02:12 -07:00
4b1da15d9b 2019-10-22 nightly release 2019-10-22 03:07:48 -07:00
201ea71b2e 2019-10-21 nightly release 2019-10-21 03:04:27 -07:00
6ea77adf16 2019-10-20 nightly release 2019-10-20 03:01:18 -07:00
6e0fb1c894 2019-10-19 nightly release 2019-10-19 03:07:41 -07:00
e0b14d085e 2019-10-18 nightly release 2019-10-18 03:02:23 -07:00
fb77773d5f 2019-10-17 nightly release 2019-10-17 03:04:03 -07:00
5c86840692 2019-10-16 nightly release 2019-10-16 03:01:01 -07:00
21ad376b4e 2019-10-15 nightly release 2019-10-15 03:02:07 -07:00
47dab98ccb nightly release 2019-10-14 03:00:32 -07:00
680 changed files with 5441 additions and 4381 deletions

View File

@ -833,8 +833,7 @@ exclude_patterns = [
command = [
'python3',
'tools/linter/adapters/grep_linter.py',
'--pattern=cudaSetDevice(',
'--pattern=cudaGetDevice(',
'--pattern=(cudaSetDevice|cudaGetDevice)\\(',
'--linter-name=RAWCUDADEVICE',
'--error-name=raw CUDA API usage',
"""--error-description=\

View File

@ -185,11 +185,11 @@ struct TORCH_API Type {
: repr_(nullptr) {}
/* implicit */ SingletonOrSharedTypePtr(SingletonTypePtr<T> p)
: repr_(p) {}
: repr_(makeSingletonSharedPtr(p.get())) {}
template <typename U, std::enable_if_t<std::is_convertible_v<U*, T*>, bool> = true>
/* implicit */ SingletonOrSharedTypePtr(SingletonTypePtr<U> p)
: repr_(SingletonTypePtr<T>(p.get())) {}
: repr_(makeSingletonSharedPtr(static_cast<T*>(p.get()))) {}
// We need to support construction from T* for pybind. The problem
@ -202,8 +202,8 @@ struct TORCH_API Type {
// Case 2: if T is exactly Type, we need to do a dynamic_cast to
// check if it's a SharedType and do the right thing.
//
// Case 3: Otherwise, T is not a SharedType. (debug-check this
// assumption!) Use a singleton pointer.
// Case 3: Otherwise, T is not a SharedType. Use a singleton
// pointer.
template <typename U = T, std::enable_if_t<std::is_base_of_v<SharedType, U>, bool> = true>
/* implicit */ SingletonOrSharedTypePtr(T* p) : SingletonOrSharedTypePtr(static_cast<typename detail::as_shared_type<U>::type>(p)->shared_from_this()) {}
@ -211,15 +211,15 @@ struct TORCH_API Type {
template <typename U = T, std::enable_if_t<std::is_same_v<Type, U>, bool> = true>
/* implicit */ SingletonOrSharedTypePtr(T* p) {
if (auto* shared_p = dynamic_cast<typename detail::as_shared_type<U>::type>(p)) {
repr_ = Repr(shared_p->shared_from_this());
repr_ = shared_p->shared_from_this();
} else {
repr_ = Repr(p);
repr_ = makeSingletonSharedPtr(p);
}
}
template <typename U = T, std::enable_if_t<!std::is_same_v<Type, U> && !std::is_base_of_v<SharedType, U>, bool> = true>
/* implicit */ SingletonOrSharedTypePtr(T* p)
: repr_(p) {
: repr_(makeSingletonSharedPtr(p)) {
TORCH_INTERNAL_ASSERT_DEBUG_ONLY(dynamic_cast<typename detail::as_shared_type<U>::type>(p) == nullptr);
}
@ -230,19 +230,19 @@ struct TORCH_API Type {
~SingletonOrSharedTypePtr() = default;
T* get() const {
return repr_.isSharedAndNonNull() ? repr_.shared_.repr_.get() : static_cast<T*>(repr_.rawRepr().first);
return repr_.get();
}
operator bool() const {
return repr_.isNonNull();
return repr_ != nullptr;
}
bool operator==(std::nullptr_t) const {
return !repr_.isNonNull();
return repr_ == nullptr;
}
bool operator!=(std::nullptr_t) const {
return repr_.isNonNull();
return repr_ != nullptr;
}
template <typename U = T, std::enable_if_t<!std::is_same_v<std::remove_const_t<U>, void>, bool> = true>
@ -255,138 +255,14 @@ struct TORCH_API Type {
}
private:
// NOTE: SharedPtrWrapper exists to work around a baffling bug in
// nvcc; see comment in destroy() below.
struct SharedPtrWrapper {
SharedPtrWrapper(std::shared_ptr<T> &&x)
: repr_(std::move(x)) {}
std::shared_ptr<T> repr_;
};
union Repr {
Repr() : Repr(nullptr) {}
// Use shared_ptr's aliasing constructor to create a non-owning pointer
// to a singleton. The lifetime is tied to the null shared_ptr, so there's
// no reference counting overhead for the singleton itself.
static std::shared_ptr<T> makeSingletonSharedPtr(T* ptr) {
return std::shared_ptr<T>(std::shared_ptr<T>(), ptr);
}
explicit Repr(std::shared_ptr<T> x)
: shared_(std::move(x)) {}
explicit Repr(std::nullptr_t)
: singletonRepr_(nullptr) {}
explicit Repr(SingletonTypePtr<T> p)
: singletonRepr_(p.get()) {}
~Repr() {
destroy();
}
// NOTE: the only non-UB way to access our null state is through
// rawRepr(), because our copy operation doesn't preserve which
// union member is active for null pointers.
Repr(const Repr& rhs) {
if (rhs.isSharedAndNonNull()) {
new (&shared_) SharedPtrWrapper(rhs.shared_);
} else {
singletonRepr_.singleton_ = static_cast<T*>(rhs.rawRepr().first);
TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.singletonRepr_.unused_ == nullptr);
singletonRepr_.unused_ = nullptr;
}
}
Repr(Repr&& rhs) noexcept {
if (rhs.isSharedAndNonNull()) {
new (&shared_) SharedPtrWrapper(std::move(rhs.shared_));
} else {
singletonRepr_.singleton_ = static_cast<T*>(rhs.rawRepr().first);
TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.singletonRepr_.unused_ == nullptr);
singletonRepr_.unused_ = nullptr;
}
}
Repr& operator=(const Repr& rhs) {
if (&rhs == this) {
return *this;
}
if (rhs.isSharedAndNonNull()) {
if (isSharedAndNonNull()) {
shared_ = rhs.shared_;
} else {
new (&shared_) SharedPtrWrapper(rhs.shared_);
}
} else {
if (isSharedAndNonNull()) {
destroy();
}
singletonRepr_.singleton_ = static_cast<T*>(rhs.rawRepr().first);
TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.rawRepr().nullIfSingleton_ == nullptr);
singletonRepr_.unused_ = nullptr;
}
return *this;
}
Repr& operator=(Repr&& rhs) noexcept {
if (&rhs == this) {
return *this;
}
if (rhs.isSharedAndNonNull()) {
if (isSharedAndNonNull()) {
shared_ = std::move(rhs.shared_);
} else {
new (&shared_) SharedPtrWrapper(std::move(rhs.shared_));
}
} else {
if (isSharedAndNonNull()) {
destroy();
}
singletonRepr_.singleton_ = static_cast<T*>(rhs.rawRepr().first);
TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.rawRepr().nullIfSingleton_ == nullptr);
singletonRepr_.unused_ = nullptr;
}
return *this;
}
SharedPtrWrapper shared_;
struct SingletonRepr {
explicit SingletonRepr(T* s) : singleton_(s) {}
T* singleton_;
void* unused_ = nullptr;
} singletonRepr_;
struct RawRepr {
void* first;
void* nullIfSingleton_;
};
// It is UB to read the singleton part of Repr if it was
// constructed as a shared_ptr and vice versa, but memcpying out
// the representation is always OK, so here's an accessor to obey
// the letter of the law.
RawRepr rawRepr() const {
RawRepr repr{};
memcpy(&repr, reinterpret_cast<const char *>(this), sizeof(RawRepr));
return repr;
}
bool isNonNull() const {
auto repr = rawRepr();
TORCH_INTERNAL_ASSERT_DEBUG_ONLY(repr.nullIfSingleton_ == nullptr || repr.first != nullptr);
return repr.first != nullptr;
}
bool isSharedAndNonNull() const {
return rawRepr().nullIfSingleton_ != nullptr;
}
private:
void destroy() {
if (isSharedAndNonNull()) {
// Without SharedPtrWrapper, this line would read
// `shared_.~shared_ptr()` and nvcc would complain with
// "error: expected primary-expression before '>' token"
// referring to the "t" in "shared_ptr". SharedPtrWrapper
// exists to work around this compiler bug.
shared_.~SharedPtrWrapper();
}
}
} repr_;
std::shared_ptr<T> repr_;
};
using TypePtr = SingletonOrSharedTypePtr<Type>;

View File

@ -104,71 +104,6 @@ class Vectorized<float> {
}
return b;
}
// Implementation is picked from
// https://github.com/ARM-software/ComputeLibrary/blob/v25.01/src/core/NEON/SVEMath.inl#L105
inline svfloat32_t svexp_f32_z(svbool_t pg, svfloat32_t x) const {
const auto c1 =
svreinterpret_f32_u32(svdup_n_u32(0x3f7ffff6)); // x^1: 0x1.ffffecp-1f
const auto c2 =
svreinterpret_f32_u32(svdup_n_u32(0x3efffedb)); // x^2: 0x1.fffdb6p-2f
const auto c3 =
svreinterpret_f32_u32(svdup_n_u32(0x3e2aaf33)); // x^3: 0x1.555e66p-3f
const auto c4 =
svreinterpret_f32_u32(svdup_n_u32(0x3d2b9f17)); // x^4: 0x1.573e2ep-5f
const auto c5 =
svreinterpret_f32_u32(svdup_n_u32(0x3c072010)); // x^5: 0x1.0e4020p-7f
const auto shift = svreinterpret_f32_u32(
svdup_n_u32(0x4b00007f)); // 2^23 + 127 = 0x1.0000fep23f
const auto inv_ln2 = svreinterpret_f32_u32(
svdup_n_u32(0x3fb8aa3b)); // 1 / ln(2) = 0x1.715476p+0f
const auto neg_ln2_hi = svreinterpret_f32_u32(svdup_n_u32(
0xbf317200)); // -ln(2) from bits -1 to -19: -0x1.62e400p-1f
const auto neg_ln2_lo = svreinterpret_f32_u32(svdup_n_u32(
0xb5bfbe8e)); // -ln(2) from bits -20 to -42: -0x1.7f7d1cp-20f
const auto inf = svdup_n_f32(std::numeric_limits<float>::infinity());
const auto max_input = svdup_n_f32(88.37f); // Approximately ln(2^127.5)
const auto zero = svdup_n_f32(0.f);
const auto min_input = svdup_n_f32(-86.64f); // Approximately ln(2^-125)
// Range reduction:
// e^x = 2^n * e^r
// where:
// n = floor(x / ln(2))
// r = x - n * ln(2)
//
// By adding x / ln(2) with 2^23 + 127 (shift):
// * As FP32 fraction part only has 23-bits, the addition of 2^23 + 127
// forces decimal part
// of x / ln(2) out of the result. The integer part of x / ln(2) (i.e.
// n) + 127 will occupy the whole fraction part of z in FP32 format.
// Subtracting 2^23 + 127 (shift) from z will result in the integer part
// of x / ln(2) (i.e. n) because the decimal part has been pushed out
// and lost.
// * The addition of 127 makes the FP32 fraction part of z ready to be
// used as the exponent
// in FP32 format. Left shifting z by 23 bits will result in 2^n.
const auto z = svmla_f32_z(pg, shift, x, inv_ln2);
const auto n = svsub_f32_z(pg, z, shift);
const auto scale = svreinterpret_f32_u32(
svlsl_n_u32_z(pg, svreinterpret_u32_f32(z), 23)); // 2^n
// The calculation of n * ln(2) is done using 2 steps to achieve accuracy
// beyond FP32. This outperforms longer Taylor series (3-4 tabs) both in
// term of accuracy and performance.
const auto r_hi = svmla_f32_z(pg, x, n, neg_ln2_hi);
const auto r = svmla_f32_z(pg, r_hi, n, neg_ln2_lo);
// Compute the truncated Taylor series of e^r.
// poly = scale * (1 + c1 * r + c2 * r^2 + c3 * r^3 + c4 * r^4 + c5 * r^5)
const auto r2 = svmul_f32_z(pg, r, r);
const auto p1 = svmul_f32_z(pg, c1, r);
const auto p23 = svmla_f32_z(pg, c2, c3, r);
const auto p45 = svmla_f32_z(pg, c4, c5, r);
const auto p2345 = svmla_f32_z(pg, p23, p45, r2);
const auto p12345 = svmla_f32_z(pg, p1, p2345, r2);
auto poly = svmla_f32_z(pg, scale, p12345, scale);
// Handle underflow and overflow.
poly = svsel_f32(svcmplt_f32(pg, x, min_input), zero, poly);
poly = svsel_f32(svcmpgt_f32(pg, x, max_input), inf, poly);
return poly;
}
static Vectorized<float> loadu(const void* ptr, int64_t count = size()) {
if (count == size())
return svld1_f32(ptrue, reinterpret_cast<const float*>(ptr));
@ -313,11 +248,41 @@ class Vectorized<float> {
return USE_SLEEF(
Vectorized<float>(Sleef_expm1fx_u10sve(values)), map(std::expm1));
}
// Implementation copied from Arm Optimized Routines:
// https://github.com/ARM-software/optimized-routines/blob/master/math/aarch64/sve/expf.c
Vectorized<float> exp_u20() const {
return exp();
// special case to handle special inputs that are too large or too small
// i.e. where there's at least one element x, s.t. |x| >= 87.3...
svbool_t is_special_case = svacgt(svptrue_b32(), values, 0x1.5d5e2ap+6f);
if (svptest_any(svptrue_b32(), is_special_case)) {
return exp();
}
const svfloat32_t ln2_hi = svdup_n_f32(0x1.62e4p-1f);
const svfloat32_t ln2_lo = svdup_n_f32(0x1.7f7d1cp-20f);
const svfloat32_t c1 = svdup_n_f32(0.5f);
const svfloat32_t inv_ln2 = svdup_n_f32(0x1.715476p+0f);
const float shift = 0x1.803f8p17f;
/* n = round(x/(ln2/N)). */
svfloat32_t z = svmad_x(svptrue_b32(), inv_ln2, values, shift);
svfloat32_t n = svsub_x(svptrue_b32(), z, shift);
/* r = x - n*ln2/N. */
svfloat32_t r = values;
r = svmls_x(svptrue_b32(), r, n, ln2_hi);
r = svmls_x(svptrue_b32(), r, n, ln2_lo);
/* scale = 2^(n/N). */
svfloat32_t scale = svexpa(svreinterpret_u32(z));
/* poly(r) = exp(r) - 1 ~= r + 0.5 r^2. */
svfloat32_t r2 = svmul_x(svptrue_b32(), r, r);
svfloat32_t poly = svmla_x(svptrue_b32(), r, r2, c1);
return svmla_x(svptrue_b32(), scale, scale, poly);
}
Vectorized<float> fexp_u20() const {
return exp();
return exp_u20();
}
Vectorized<float> fmod(const Vectorized<float>& q) const {USE_SLEEF(
{ return Vectorized<float>(Sleef_fmodfx_sve(values, q)); },
@ -453,9 +418,11 @@ class Vectorized<float> {
ptrue, svmax_f32_z(ptrue, values, CONST_MIN_TANH), CONST_MAX_TANH);
// Step 2: Calculate exp(2 * x), where x is the clamped value.
// svmul_f32_z computes 2 * x, and svexp_f32_z computes the exponential of
// the result.
svfloat32_t exp2x = svexp_f32_z(ptrue, svmul_f32_z(ptrue, CONST_2, x));
// svmul_f32_z computes 2 * x, and exp_u20() computes the exponential of
// the result (via Vectorized<float>, then auto-converts back to
// svfloat32_t).
svfloat32_t exp2x =
Vectorized<float>(svmul_f32_z(ptrue, CONST_2, x)).exp_u20();
// Step 3: Calculate the numerator of the tanh function, which is exp(2x)
// - 1.

View File

@ -307,11 +307,49 @@ class Vectorized<float> {
DEFINE_SLEEF_COMPATIBLE_UNARY_ELEMENTWISE_FUNC(exp)
DEFINE_SLEEF_COMPATIBLE_UNARY_ELEMENTWISE_FUNC(exp2)
DEFINE_SLEEF_COMPATIBLE_UNARY_ELEMENTWISE_FUNC(expm1)
// Implementation copied from Arm Optimized Routine
// https://github.com/ARM-software/optimized-routines/blob/master/math/aarch64/advsimd/expf.c
Vectorized<float> exp_u20() const {
return exp();
// bail out to sleef if it's a special case:
// i.e. there's an input s.t. |input| > 87.3....
const float32x4_t special_bound = vdupq_n_f32(0x1.5d5e2ap+6f);
uint32x4_t cmp = vcagtq_f32(values, special_bound);
if (vpaddd_u64(vreinterpretq_u64_u32(cmp)) != 0) {
return exp();
}
const float32x4_t inv_ln2 = vdupq_n_f32(0x1.715476p+0f);
const float ln2_hi = 0x1.62e4p-1f;
const float ln2_lo = 0x1.7f7d1cp-20f;
const float c0 = 0x1.0e4020p-7f;
const float c2 = 0x1.555e66p-3f;
const float32x4_t ln2_c02 = {ln2_hi, ln2_lo, c0, c2};
const uint32x4_t exponent_bias = vdupq_n_u32(0x3f800000);
const float32x4_t c1 = vdupq_n_f32(0x1.573e2ep-5f);
const float32x4_t c3 = vdupq_n_f32(0x1.fffdb6p-2f);
const float32x4_t c4 = vdupq_n_f32(0x1.ffffecp-1f);
/* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]
x = ln2*n + r, with r in [-ln2/2, ln2/2]. */
float32x4_t n = vrndaq_f32(vmulq_f32(values, inv_ln2));
float32x4_t r = vfmsq_laneq_f32(values, n, ln2_c02, 0);
r = vfmsq_laneq_f32(r, n, ln2_c02, 1);
uint32x4_t e = vshlq_n_u32(vreinterpretq_u32_s32(vcvtq_s32_f32(n)), 23);
float32x4_t scale = vreinterpretq_f32_u32(vaddq_u32(e, exponent_bias));
float32x4_t r2 = vmulq_f32(r, r);
float32x4_t p = vfmaq_laneq_f32(c1, r, ln2_c02, 2);
float32x4_t q = vfmaq_laneq_f32(c3, r, ln2_c02, 3);
q = vfmaq_f32(q, p, r2);
p = vmulq_f32(c4, r);
float32x4_t poly = vfmaq_f32(p, q, r2);
return vfmaq_f32(scale, poly, scale);
}
Vectorized<float> fexp_u20() const {
return exp();
return exp_u20();
}
DEFINE_SLEEF_COMPATIBLE_BINARY_ELEMENTWISE_FUNC_WITH_SLEEF_NAME(
fmod,

View File

@ -0,0 +1,270 @@
#include <cstdint>
#include <c10/util/typeid.h>
#include <c10/util/Exception.h>
#include <c10/util/SmallVector.h>
#include <c10/core/Scalar.h>
#include <c10/core/ScalarType.h>
#include <c10/util/Exception.h>
#define TORCH_ASSERT_ONLY_METHOD_OPERATORS
#include <ATen/core/Tensor.h>
#include <ATen/core/NamedTensor.h>
#include <ATen/Dispatch.h>
#include <ATen/ExpandUtils.h>
#include <ATen/OpMathType.h>
#include <ATen/TensorUtils.h>
#include <ATen/cuda/CUDABlas.h>
#include <ATen/cuda/tunable/Tunable.h>
#include <ATen/cuda/tunable/TunableGemm.h>
#include <ATen/native/Resize.h>
#include <c10/util/MaybeOwned.h>
#include <ATen/native/GroupedMMUtils.h>
#include <ATen/native/cuda/RowwiseScaledMM.h>
#include <ATen/native/cuda/ScaledGroupMM.h>
#include <ATen/native/cuda/GroupMM.h>
#include <ATen/ceil_div.h>
#ifdef USE_FBGEMM_GENAI
#include <fbgemm_gpu/torch_ops.h>
#endif
#ifndef AT_PER_OPERATOR_HEADERS
#include <ATen/Functions.h>
#include <ATen/NativeFunctions.h>
#else
#include <ATen/ops/_addmm_activation_native.h>
#include <ATen/ops/_efficientzerotensor.h>
#include <ATen/ops/_scaled_mm_native.h>
#include <ATen/ops/_unsafe_view_native.h>
#include <ATen/ops/abs.h>
#include <ATen/ops/addmm_native.h>
#include <ATen/ops/addmv_native.h>
#include <ATen/ops/baddbmm_native.h>
#include <ATen/ops/bmm_native.h>
#include <ATen/ops/copy_native.h>
#include <ATen/ops/dot_native.h>
#include <ATen/ops/empty.h>
#include <ATen/ops/empty_strided.h>
#include <ATen/ops/gelu.h>
#include <ATen/ops/max.h>
#include <ATen/ops/mm_native.h>
#include <ATen/ops/mul.h>
#include <ATen/ops/relu.h>
#include <ATen/ops/ones.h>
#include <ATen/ops/scalar_tensor_native.h>
#include <ATen/ops/vdot_native.h>
#endif
using at::blas::ScalingType;
using at::blas::SwizzleType;
namespace at::cuda::scaled {
/**
* Both inputs must be fp8,
* Each needs a single scale, {Tensorwise (float)}
*/
bool check_tensorwise_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp8
if (!isFloat8Type(type_a) || !isFloat8Type(type_b)) {
return false;
}
// 1 scale each, {Tensorwise, float}
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x32, e8m0} for A & B
if (recipe_a[0] != ScalingType::TensorWise) return false;
if (scales_a[0].scalar_type() != ScalarType::Float) return false;
if (recipe_b[0] != ScalingType::TensorWise) return false;
if (scales_b[0].scalar_type() != ScalarType::Float) return false;
return true;
}
/**
* Both inputs must be fp8,
* Each needs scales, {Rowwise (float)}
*/
bool check_rowwise_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp8
if (!isFloat8Type(type_a) || !isFloat8Type(type_b)) {
return false;
}
// 1 scale each, {Tensorwise, float}
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {RowWise, dp32} for A & B
if (recipe_a[0] != ScalingType::RowWise) return false;
if (scales_a[0].scalar_type() != ScalarType::Float) return false;
if (recipe_b[0] != ScalingType::RowWise) return false;
if (scales_b[0].scalar_type() != ScalarType::Float) return false;
return true;
}
/**
* Two-level scaling, canonical NVFP4
* Both inputs must be fp4
* A, B need 2 scales, {Blockwise_1x16 (e4m3), Tensorwise (fp32)}
*/
bool check_nvfp4_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp4
if (type_a != ScalarType::Float4_e2m1fn_x2 || type_b != ScalarType::Float4_e2m1fn_x2) {
return false;
}
// 2 scales, 2 recipes for each input
if (scales_a.size() != 2 || recipe_a.size() != 2 || scales_b.size() != 2 || recipe_b.size() != 2) {
return false;
}
// Need {Blockwise_1x16, e4m3 for scale[0], Tensorwise, fp32 for scale[1]}
if (recipe_a[0] != ScalingType::BlockWise1x16 || recipe_a[1] != ScalingType::TensorWise) return false;
if (scales_a[0].scalar_type() != ScalarType::Float8_e4m3fn || scales_a[1].scalar_type() != ScalarType::Float) return false;
if (recipe_b[0] != ScalingType::BlockWise1x16 || recipe_b[1] != ScalingType::TensorWise) return false;
if (scales_b[0].scalar_type() != ScalarType::Float8_e4m3fn || scales_b[1].scalar_type() != ScalarType::Float) return false;
return true;
}
/**
* Single-level scaling, what PyT currently understands
* Both inputs must be fp4
* A, B need 1 scale, {Blockwise_1x16 (e4m3)}
*/
bool check_nvfp4_recipe_single_scale
(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp4
if (type_a != ScalarType::Float4_e2m1fn_x2 || type_b != ScalarType::Float4_e2m1fn_x2) {
return false;
}
// 2 scales, 2 recipes for each input
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x16, e4m3 for scale[0], Tensorwise, fp32 for scale[1]}
if (recipe_a[0] != ScalingType::BlockWise1x16) return false;
if (scales_a[0].scalar_type() != ScalarType::Float8_e4m3fn) return false;
if (recipe_b[0] != ScalingType::BlockWise1x16) return false;
if (scales_b[0].scalar_type() != ScalarType::Float8_e4m3fn) return false;
return true;
}
/**
* Both inputs must be fp8
* A, B must only have 1 scale each, A: {Blockwise_1x128 (float), B: {Blockwise_128x128 (float)
*/
bool check_deepseek_recipe(ScalingType expected_recipe_a,
ScalingType expected_recipe_b,
c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp8
if (type_a != ScalarType::Float8_e4m3fn || type_b != ScalarType::Float8_e4m3fn) {
return false;
}
// 1 scales, 1 recipes for each input
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x128, float} for A, {Blockwise_128x128, float} for B
if (recipe_a[0] != expected_recipe_a) return false;
if (scales_a[0].scalar_type() != ScalarType::Float) return false;
if (recipe_b[0] != expected_recipe_b) return false;
if (scales_b[0].scalar_type() != ScalarType::Float) return false;
return true;
}
/**
* Both inputs must be fp8
* A, B must have 1 scale each, {Blockwise_1x32, e8m0}
*/
bool check_mxfp8_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp8
if (type_a != ScalarType::Float8_e4m3fn || type_b != ScalarType::Float8_e4m3fn) {
return false;
}
// 1 scales, 1 recipes for each input
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x32, e8m0} for A & B
if (recipe_a[0] != ScalingType::BlockWise1x32) return false;
if (scales_a[0].scalar_type() != ScalarType::Float8_e8m0fnu) return false;
if (recipe_b[0] != ScalingType::BlockWise1x32) return false;
if (scales_b[0].scalar_type() != ScalarType::Float8_e8m0fnu) return false;
return true;
}
/**
* Both inputs must be fp4
* A, B must have 1 scale each, {Blockwise_1x32, e8m0}
*/
bool check_mxfp4_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp4
if (type_a != ScalarType::Float4_e2m1fn_x2 || type_b != ScalarType::Float4_e2m1fn_x2) {
return false;
}
// 1 scales, 1 recipes for each input
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x32, e8m0} for A & B
if (recipe_a[0] != ScalingType::BlockWise1x32) return false;
if (scales_a[0].scalar_type() != ScalarType::Float8_e8m0fnu) return false;
if (recipe_b[0] != ScalingType::BlockWise1x32) return false;
if (scales_b[0].scalar_type() != ScalarType::Float8_e8m0fnu) return false;
return true;
}
} // namespace at::native::cuda::blas::scaled

View File

@ -0,0 +1,174 @@
#include <cstdint>
#include <c10/util/typeid.h>
#include <c10/util/Exception.h>
#include <c10/util/SmallVector.h>
#include <c10/core/Scalar.h>
#include <c10/core/ScalarType.h>
#include <c10/util/Exception.h>
#define TORCH_ASSERT_ONLY_METHOD_OPERATORS
#include <ATen/core/Tensor.h>
#include <ATen/core/NamedTensor.h>
#include <ATen/Dispatch.h>
#include <ATen/ExpandUtils.h>
#include <ATen/OpMathType.h>
#include <ATen/TensorUtils.h>
#include <ATen/cuda/CUDABlas.h>
#include <ATen/cuda/tunable/Tunable.h>
#include <ATen/cuda/tunable/TunableGemm.h>
#include <ATen/native/Resize.h>
#include <c10/util/MaybeOwned.h>
#include <ATen/native/GroupedMMUtils.h>
#include <ATen/native/cuda/RowwiseScaledMM.h>
#include <ATen/native/cuda/ScaledGroupMM.h>
#include <ATen/native/cuda/GroupMM.h>
#include <ATen/ceil_div.h>
#ifdef USE_FBGEMM_GENAI
#include <fbgemm_gpu/torch_ops.h>
#endif
#ifndef AT_PER_OPERATOR_HEADERS
#include <ATen/Functions.h>
#include <ATen/NativeFunctions.h>
#else
#include <ATen/ops/_addmm_activation_native.h>
#include <ATen/ops/_efficientzerotensor.h>
#include <ATen/ops/_scaled_mm_native.h>
#include <ATen/ops/_unsafe_view_native.h>
#include <ATen/ops/abs.h>
#include <ATen/ops/addmm_native.h>
#include <ATen/ops/addmv_native.h>
#include <ATen/ops/baddbmm_native.h>
#include <ATen/ops/bmm_native.h>
#include <ATen/ops/copy_native.h>
#include <ATen/ops/dot_native.h>
#include <ATen/ops/empty.h>
#include <ATen/ops/empty_strided.h>
#include <ATen/ops/gelu.h>
#include <ATen/ops/max.h>
#include <ATen/ops/mm_native.h>
#include <ATen/ops/mul.h>
#include <ATen/ops/relu.h>
#include <ATen/ops/ones.h>
#include <ATen/ops/scalar_tensor_native.h>
#include <ATen/ops/vdot_native.h>
#endif
using at::blas::ScalingType;
using at::blas::SwizzleType;
namespace at::cuda::scaled {
static bool _scaled_mm_allowed_device(bool sm90_only=false, bool sm100_only=false) {
#ifdef USE_ROCM
static const std::vector<std::string> archs = {
"gfx942",
#if ROCM_VERSION >= 60300
"gfx1200", "gfx1201",
#endif
#if ROCM_VERSION >= 60500
"gfx950"
#endif
};
return at::detail::getCUDAHooks().isGPUArch(archs);
#else
auto dprops = at::cuda::getCurrentDeviceProperties();
if (sm90_only || sm100_only) {
return (sm90_only && dprops->major == 9) || (sm100_only && dprops->major == 10);
} else {
return dprops->major >= 9 || (dprops->major == 8 && dprops->minor == 9);
}
#endif
}
#ifdef USE_ROCM
static bool _scaled_mm_is_fnuz() {
return at::detail::getCUDAHooks().isGPUArch({"gfx942"});
}
#endif
/**
* Track concrete implementations available
*/
enum class ScaledGemmImplementation {
NONE = 0,
TENSORWISE_TENSORWISE = 1,
ROWWISE_ROWWISE = 2,
BLOCK_128x128_1x128 = 3,
BLOCK_1x128_128x128 = 4,
BLOCK_1x128_1x128 = 5,
MXFP8_MXFP8 = 6,
NVFP4_NVFP4 = 7,
NVFP4_NVFP4_SINGLE_SCALE = 8,
MXFP4_MXFP4 = 9,
};
/**
* Convert passed int (enum) from python back into a
* strictly-typed enum
*/
template <class EnumType, class ArrayType>
std::vector<EnumType> convert_int_to_enum(ArrayType& v) {
std::vector<EnumType> converted;
converted.reserve(v.size());
for (auto vi : v) {
converted.push_back(static_cast<EnumType>(vi));
}
return converted;
}
bool check_tensorwise_recipe(c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&,
c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&);
bool check_rowwise_recipe(c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&,
c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&);
bool check_nvfp4_recipe(c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&,
c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&);
bool check_nvfp4_recipe_single_scale
(c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&,
c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&);
bool check_deepseek_recipe(ScalingType,
ScalingType,
c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&,
c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&);
bool check_mxfp8_recipe(c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&,
c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&);
bool check_mxfp4_recipe(c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&,
c10::ScalarType,
std::vector<ScalingType>&,
ArrayRef<Tensor>&);
} // namespace at::native::cuda::blas::scaled

View File

@ -13,6 +13,7 @@
#include <ATen/OpMathType.h>
#include <ATen/TensorUtils.h>
#include <ATen/cuda/CUDABlas.h>
#include <ATen/cuda/CUDAScaledBlas.h>
#include <ATen/cuda/tunable/Tunable.h>
#include <ATen/cuda/tunable/TunableGemm.h>
#include <ATen/native/Resize.h>
@ -1628,104 +1629,6 @@ _scaled_mm_out_cuda(const Tensor& mat1, const Tensor& mat2,
return _scaled_gemm(mat1, mat2, scale_a, scale_b, scaling_choice_a, scaling_choice_b, bias, use_fast_accum, out);
}
namespace {
void _check_scales_fp8_rowwise(const Tensor& mat, const Tensor& scale, const int dim, const int arg_idx, const int scale_multiplier=1) {
// Checks scales for 2d or 3d target tensors (`mat`).
if (mat.dim() == 2) {
TORCH_CHECK(
scale.dim() == 1,
"scale must be a 1D tensor, but got ",
scale.dim(),
"D, arg ",
arg_idx);
TORCH_CHECK(
scale.is_contiguous(), "scale must be contiguous for arg ", arg_idx);
TORCH_CHECK(
scale.size(0) == mat.size(dim) * scale_multiplier,
"scale must have the same length as mat for arg ",
arg_idx);
} else {
TORCH_CHECK(
scale.dim() == 2,
"scale must be a 2D tensor, but got ",
scale.dim(),
"D for arg ",
arg_idx);
TORCH_CHECK(
scale.stride(1) == 1,
"scale must be contiguous in the last dimension for arg ",
arg_idx);
TORCH_CHECK(
scale.size(0) == mat.size(0),
"scale must have the same batch dimension as mat for arg ",
arg_idx);
TORCH_CHECK(
scale.size(1) == mat.size(1 + dim),
"scale must have the same first dimension as mat for arg ",
arg_idx);
}
}
void _check_scales_mxfp8(const Tensor& mat, const Tensor& scale, const int dim, const int arg_idx) {
// Checks scales for 2d or 3d target tensors (`mat`).
if (mat.dim() == 2) {
// For MXFP8, 2d tensors have variable size groups represented as subtensors,
// that are converted to blocked padded format individually,
// so we can't check the scale sizes without doing a d2h sync to get the group sizes here.
TORCH_CHECK(
scale.dim() == mat.dim(),
"for mxfp8, scale must have same number of dimensions as parent tensor, but got mat.dim() = ", mat.dim(), " and scale.dim() = ", scale.dim(), " for arg ", arg_idx);
// LHS mat shape (M, total_K) -> scale shape (rounded_up(M, 128), rounded_up_per_group(K/32, 4))
// RHS mat shape (total_K, N) -> scale shape (rounded_up(N, 128), rounded_up_per_group(K/32, 4))
// * weight is transposed prior to the call, scale stays non-transposed.
bool LHS = arg_idx == 0;
int scale_dim_to_check = 0;
int mat_dim_to_check = LHS ? 0 : 1;
TORCH_CHECK(
scale.size(scale_dim_to_check) >= mat.size(mat_dim_to_check),
"for mxfp8, arg ", arg_idx, " tensor shape (", mat.size(0), ", ", mat.size(1), ") ",
"must have scale.shape[", scale_dim_to_check, "] >= ", mat.size(mat_dim_to_check), " but got scale.shape=(", scale.size(0), ", ", scale.size(1), ")");
} else {
// For MXFP8, 3d tensors have static group sizes (stack of 2d tensors),
// so we can check the exact expected scale sizes here without a d2h sync.
auto round_up = [](auto x, auto y) {
return ((x + y - 1) / y) * y;
};
// TODO: this is for 3d tensor in 2d-3d case specifically.
// We'll need to support 3d-3d and 3d-2d cases once mxfp8 grouped gemm supports them.
int64_t G = mat.size(0);
int64_t K = mat.size(1);
int64_t N = mat.size(2);
int64_t blocked_scale_K = round_up(K/32, 4);
int64_t blocked_scale_N = round_up(N, 128);
// fbgemm expects stack of flattened blocked scales for 3d tensor, shape (G, blocked_scale_K * blocked_scale_N).
TORCH_CHECK(
scale.dim() == mat.dim() - 1,
"for mxfp8 2d-3d grouped GEMM, the 3d tensor of shape (G,K,N) must have a 2d scale of shape (G, blocked_scale_K * blocked_scale_N), but scale is ", scale.dim(), "D for arg ", arg_idx
);
TORCH_CHECK(
scale.size(0) == G && scale.size(1) == blocked_scale_K * blocked_scale_N,
"for mxfp8, the tensor shape (", G, ", ", K, ", ", N, ") must have scale shape (", G, ",", blocked_scale_K, ",", blocked_scale_N, ") for arg ", arg_idx
);
}
}
void check_scale(const Tensor& mat, const Tensor& scale, const int dim, const int arg_idx, const int scale_multiplier=1) {
bool using_fp8_rowwise = scale.scalar_type() == kFloat;
bool using_mxfp8 = scale.scalar_type() == at::kFloat8_e8m0fnu;
if (using_fp8_rowwise) {
_check_scales_fp8_rowwise(mat, scale, dim, arg_idx, scale_multiplier);
} else if (using_mxfp8) {
_check_scales_mxfp8(mat, scale, dim, arg_idx);
} else {
TORCH_CHECK(false, "scale must be float32 or float8_e8m0fnu, but got ", scale.dtype());
}
}
}
Tensor
_scaled_mm_cuda(const Tensor& mat_a, const Tensor& mat_b,
const Tensor& scale_a,
@ -1740,261 +1643,26 @@ _scaled_mm_cuda(const Tensor& mat_a, const Tensor& mat_b,
return _scaled_mm_out_cuda(mat_a, mat_b, scale_a, scale_b, bias, scale_result, out_dtype, use_fast_accum, out);
}
/**
* Track concrete implementations available
*/
enum class ScaledGemmImplementation {
NONE = 0,
TENSORWISE_TENSORWISE = 1,
ROWWISE_ROWWISE = 2,
BLOCK_128x128_1x128 = 3,
BLOCK_1x128_128x128 = 4,
BLOCK_1x128_1x128 = 5,
MXFP8_MXFP8 = 6,
NVFP4_NVFP4 = 7,
NVFP4_NVFP4_SINGLE_SCALE = 8,
MXFP4_MXFP4 = 9,
};
/**
* Convert passed int (enum) from python back into a
* strictly-typed enum
*/
template <class EnumType, class ArrayType>
std::vector<EnumType> convert_int_to_enum(ArrayType& v) {
std::vector<EnumType> converted;
converted.reserve(v.size());
for (auto vi : v) {
converted.push_back(static_cast<EnumType>(vi));
}
return converted;
}
/**
* Both inputs must be fp8,
* Each needs a single scale, {Tensorwise (float)}
*/
bool check_tensorwise_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp8
if (!isFloat8Type(type_a) || !isFloat8Type(type_b)) {
return false;
}
// 1 scale each, {Tensorwise, float}
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x32, e8m0} for A & B
if (recipe_a[0] != ScalingType::TensorWise) return false;
if (scales_a[0].scalar_type() != ScalarType::Float) return false;
if (recipe_b[0] != ScalingType::TensorWise) return false;
if (scales_b[0].scalar_type() != ScalarType::Float) return false;
return true;
}
/**
* Both inputs must be fp8,
* Each needs scales, {Rowwise (float)}
*/
bool check_rowwise_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp8
if (!isFloat8Type(type_a) || !isFloat8Type(type_b)) {
return false;
}
// 1 scale each, {Tensorwise, float}
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {RowWise, dp32} for A & B
if (recipe_a[0] != ScalingType::RowWise) return false;
if (scales_a[0].scalar_type() != ScalarType::Float) return false;
if (recipe_b[0] != ScalingType::RowWise) return false;
if (scales_b[0].scalar_type() != ScalarType::Float) return false;
return true;
}
/**
* Two-level scaling, canonical NVFP4
* Both inputs must be fp4
* A, B need 2 scales, {Blockwise_1x16 (e4m3), Tensorwise (fp32)}
*/
bool check_nvfp4_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp4
if (type_a != ScalarType::Float4_e2m1fn_x2 || type_b != ScalarType::Float4_e2m1fn_x2) {
return false;
}
// 2 scales, 2 recipes for each input
if (scales_a.size() != 2 || recipe_a.size() != 2 || scales_b.size() != 2 || recipe_b.size() != 2) {
return false;
}
// Need {Blockwise_1x16, e4m3 for scale[0], Tensorwise, fp32 for scale[1]}
if (recipe_a[0] != ScalingType::BlockWise1x16 || recipe_a[1] != ScalingType::TensorWise) return false;
if (scales_a[0].scalar_type() != ScalarType::Float8_e4m3fn || scales_a[1].scalar_type() != ScalarType::Float) return false;
if (recipe_b[0] != ScalingType::BlockWise1x16 || recipe_b[1] != ScalingType::TensorWise) return false;
if (scales_b[0].scalar_type() != ScalarType::Float8_e4m3fn || scales_b[1].scalar_type() != ScalarType::Float) return false;
return true;
}
/**
* Single-level scaling, what PyT currently understands
* Both inputs must be fp4
* A, B need 1 scale, {Blockwise_1x16 (e4m3)}
*/
bool check_nvfp4_recipe_single_scale
(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp4
if (type_a != ScalarType::Float4_e2m1fn_x2 || type_b != ScalarType::Float4_e2m1fn_x2) {
return false;
}
// 2 scales, 2 recipes for each input
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x16, e4m3 for scale[0], Tensorwise, fp32 for scale[1]}
if (recipe_a[0] != ScalingType::BlockWise1x16) return false;
if (scales_a[0].scalar_type() != ScalarType::Float8_e4m3fn) return false;
if (recipe_b[0] != ScalingType::BlockWise1x16) return false;
if (scales_b[0].scalar_type() != ScalarType::Float8_e4m3fn) return false;
return true;
}
/**
* Both inputs must be fp8
* A, B must only have 1 scale each, A: {Blockwise_1x128 (float), B: {Blockwise_128x128 (float)
*/
bool check_deepseek_recipe(ScalingType expected_recipe_a,
ScalingType expected_recipe_b,
c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp8
if (type_a != ScalarType::Float8_e4m3fn || type_b != ScalarType::Float8_e4m3fn) {
return false;
}
// 1 scales, 1 recipes for each input
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x128, float} for A, {Blockwise_128x128, float} for B
if (recipe_a[0] != expected_recipe_a) return false;
if (scales_a[0].scalar_type() != ScalarType::Float) return false;
if (recipe_b[0] != expected_recipe_b) return false;
if (scales_b[0].scalar_type() != ScalarType::Float) return false;
return true;
}
/**
* Both inputs must be fp8
* A, B must have 1 scale each, {Blockwise_1x32, e8m0}
*/
bool check_mxfp8_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp8
if (type_a != ScalarType::Float8_e4m3fn || type_b != ScalarType::Float8_e4m3fn) {
return false;
}
// 1 scales, 1 recipes for each input
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x32, e8m0} for A & B
if (recipe_a[0] != ScalingType::BlockWise1x32) return false;
if (scales_a[0].scalar_type() != ScalarType::Float8_e8m0fnu) return false;
if (recipe_b[0] != ScalingType::BlockWise1x32) return false;
if (scales_b[0].scalar_type() != ScalarType::Float8_e8m0fnu) return false;
return true;
}
/**
* Both inputs must be fp4
* A, B must have 1 scale each, {Blockwise_1x32, e8m0}
*/
bool check_mxfp4_recipe(c10::ScalarType type_a,
std::vector<ScalingType>& recipe_a,
ArrayRef<Tensor>& scales_a,
c10::ScalarType type_b,
std::vector<ScalingType>& recipe_b,
ArrayRef<Tensor>& scales_b) {
// both types must be fp4
if (type_a != ScalarType::Float4_e2m1fn_x2 || type_b != ScalarType::Float4_e2m1fn_x2) {
return false;
}
// 1 scales, 1 recipes for each input
if (scales_a.size() != 1 || recipe_a.size() != 1 || scales_b.size() != 1 || recipe_b.size() != 1) {
return false;
}
// Need {Blockwise_1x32, e8m0} for A & B
if (recipe_a[0] != ScalingType::BlockWise1x32) return false;
if (scales_a[0].scalar_type() != ScalarType::Float8_e8m0fnu) return false;
if (recipe_b[0] != ScalingType::BlockWise1x32) return false;
if (scales_b[0].scalar_type() != ScalarType::Float8_e8m0fnu) return false;
return true;
}
using acceptance_fn = std::function<bool(c10::ScalarType, std::vector<ScalingType>&, ArrayRef<Tensor>&, c10::ScalarType, std::vector<ScalingType>&, ArrayRef<Tensor>&)>;
using namespace std::placeholders;
namespace scaled_blas = at::cuda::scaled;
using scaled_blas::ScaledGemmImplementation;
using scaled_blas::convert_int_to_enum;
std::array<std::tuple<std::string, acceptance_fn, ScaledGemmImplementation>, 9> scale_kernel_dispatch = {{
{ "tensorwise_tensorwise", check_tensorwise_recipe, ScaledGemmImplementation::TENSORWISE_TENSORWISE },
{ "rowwise_rowwise", check_rowwise_recipe, ScaledGemmImplementation::ROWWISE_ROWWISE},
{ "block_1x128_128x128", std::bind(check_deepseek_recipe, ScalingType::BlockWise1x128, ScalingType::BlockWise128x128, _1, _2, _3, _4, _5, _6),
{ "tensorwise_tensorwise", scaled_blas::check_tensorwise_recipe, ScaledGemmImplementation::TENSORWISE_TENSORWISE },
{ "rowwise_rowwise", scaled_blas::check_rowwise_recipe, ScaledGemmImplementation::ROWWISE_ROWWISE},
{ "block_1x128_128x128", std::bind(scaled_blas::check_deepseek_recipe, ScalingType::BlockWise1x128, ScalingType::BlockWise128x128, _1, _2, _3, _4, _5, _6),
ScaledGemmImplementation::BLOCK_1x128_128x128},
{ "block_128x128_1x128", std::bind(check_deepseek_recipe, ScalingType::BlockWise128x128, ScalingType::BlockWise1x128, _1, _2, _3, _4, _5, _6),
{ "block_128x128_1x128", std::bind(scaled_blas::check_deepseek_recipe, ScalingType::BlockWise128x128, ScalingType::BlockWise1x128, _1, _2, _3, _4, _5, _6),
ScaledGemmImplementation::BLOCK_128x128_1x128},
{ "block_1x128_1x128", std::bind(check_deepseek_recipe, ScalingType::BlockWise1x128, ScalingType::BlockWise1x128, _1, _2, _3, _4, _5, _6),
{ "block_1x128_1x128", std::bind(scaled_blas::check_deepseek_recipe, ScalingType::BlockWise1x128, ScalingType::BlockWise1x128, _1, _2, _3, _4, _5, _6),
ScaledGemmImplementation::BLOCK_1x128_1x128},
{ "nvfp4_nvfp4", check_nvfp4_recipe, ScaledGemmImplementation::NVFP4_NVFP4},
{ "nvfp4_nvfp4_single_scale", check_nvfp4_recipe_single_scale, ScaledGemmImplementation::NVFP4_NVFP4_SINGLE_SCALE },
{ "mxfp8_mxfp8", check_mxfp8_recipe, ScaledGemmImplementation::MXFP8_MXFP8},
{ "mxfp4_mxfp4", check_mxfp4_recipe, ScaledGemmImplementation::MXFP4_MXFP4}}};
{ "nvfp4_nvfp4", scaled_blas::check_nvfp4_recipe, ScaledGemmImplementation::NVFP4_NVFP4},
{ "nvfp4_nvfp4_single_scale", scaled_blas::check_nvfp4_recipe_single_scale, ScaledGemmImplementation::NVFP4_NVFP4_SINGLE_SCALE },
{ "mxfp8_mxfp8", scaled_blas::check_mxfp8_recipe, ScaledGemmImplementation::MXFP8_MXFP8},
{ "mxfp4_mxfp4", scaled_blas::check_mxfp4_recipe, ScaledGemmImplementation::MXFP4_MXFP4}}};
Tensor&
_scaled_tensorwise_tensorwise(
@ -2596,410 +2264,6 @@ _scaled_mm_cuda_v2(
out);
}
// 2d-2d and 2d-3d
// scaling=MXFP8
// CUDA-only
Tensor&
_mx8_mx8_bf16_grouped_mm_fbgemm(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const SwizzleType& swizzle_a,
const Tensor& scale_b,
const SwizzleType& swizzle_b,
const std::optional<at::Tensor>& offs,
Tensor& out) {
const bool a_is_2d = mat_a.dim() == 2;
const bool b_is_2d = mat_b.dim() == 2;
bool b_is_3d = mat_b.dim() == 3;
bool is_2d_2d = a_is_2d && b_is_2d;
bool is_2d_3d = a_is_2d && b_is_3d;
TORCH_CHECK_VALUE(is_2d_2d || is_2d_3d, "MXFP8 grouped GEMM currently only supports 2d-2d and 2d-3d cases");
TORCH_CHECK_VALUE(offs.has_value(), "MXFP8 2d-2d and 2d-3d grouped GEMMs requires offsets");
TORCH_CHECK_VALUE(out.scalar_type() == at::kBFloat16, "Only bf16 out_dtype is supported for MXFP8 grouped gemm");
// MXFP8 expects float8_e8m0fnu scales.
TORCH_CHECK_VALUE(scale_a.scalar_type() == at::kFloat8_e8m0fnu && scale_b.scalar_type() == at::kFloat8_e8m0fnu,
"For MXFP8 grouped gemm, both scales must be float8_e8m0fnu tensors.");
#ifdef USE_ROCM
TORCH_CHECK_VALUE(swizzle_a == SwizzleType::NO_SWIZZLE && swizzle_b == SwizzleType::NO_SWIZZLE,
"For ROCM MXFP8 grouped gemm, both scale swizzle types must be SWIZZLE_NONE");
#else
TORCH_CHECK_VALUE(swizzle_a == SwizzleType::SWIZZLE_32_4_4 && swizzle_b == SwizzleType::SWIZZLE_32_4_4,
"For CUDA MXFP8 grouped gemm, both scale swizzle types must be SWIZZLE_32_4_4");
#endif
#if defined(USE_FBGEMM_GENAI) and !defined(USE_ROCM)
fbgemm_gpu::mx8mx8bf16_grouped_mm(
mat_a,
mat_b,
scale_a,
scale_b,
offs.value(),
out);
#else
TORCH_CHECK_NOT_IMPLEMENTED(false, "mxfp8_mxfp8 grouped gemm requires compile with USE_FBGEMM_GENAI");
#endif
return out;
}
// 2d-2d and 2d-3d cases
// scaling=rowwise
// CUDA-only
Tensor&
_f8_f8_bf16_rowwise_grouped_mm_cuda(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const Tensor& scale_b,
const std::optional<Tensor>& offs,
const std::optional<Tensor>& bias,
const bool use_fast_accum,
Tensor& out) {
TORCH_CHECK_VALUE(mat_a.dtype() == at::kFloat8_e4m3fn, "Expected mat_a to be Float8_e4m3 matrix got ", mat_a.scalar_type());
TORCH_CHECK_VALUE(mat_b.dtype() == at::kFloat8_e4m3fn, "Expected mat_a to be Float8_e4m3 matrix got ", mat_b.scalar_type());
at::cuda::detail::f8f8bf16_grouped_mm(
mat_a,
mat_b,
scale_a,
scale_b,
offs,
bias,
use_fast_accum,
out);
return out;
}
// 2d-2d and 2d-3d cases
// scaling=rowwise
// only being called for rocm
Tensor&
_f8_f8_bf16_rowwise_grouped_mm_rocm(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const Tensor& scale_b,
const std::optional<Tensor>& offs,
Tensor& out) {
TORCH_CHECK_VALUE(mat_a.dtype() == at::kFloat8_e4m3fnuz, "Expected mat_a to be Float8_e4m3fnuz matrix got ", mat_a.scalar_type());
TORCH_CHECK_VALUE(mat_b.dtype() == at::kFloat8_e4m3fnuz, "Expected mat_a to be Float8_e4m3fnuz matrix got ", mat_b.scalar_type());
#if defined(USE_FBGEMM_GENAI) && defined(USE_ROCM)
fbgemm_gpu::f8f8bf16_rowwise_grouped_mm(
mat_a,
// FBGEMM expects B matrix shape to be (.., N, K)
mat_b.transpose(-2, -1),
scale_a,
scale_b,
offs,
out);
#else
TORCH_CHECK_NOT_IMPLEMENTED(false, "grouped gemm is not supported without USE_FBGEMM_GENAI on ROCM")
#endif
return out;
}
// Dispatch f8 x f8 -> bf16 row-wise scaled to rocm/cuda
Tensor&
_f8_f8_bf16_rowwise_grouped_mm(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const Tensor& scale_b,
const std::optional<Tensor>& offs,
const std::optional<Tensor>& bias,
bool use_fast_accum,
Tensor& out) {
// FP8 per-tensor and per-row scaling expect fp32 scales.
TORCH_CHECK_VALUE(scale_a.scalar_type() == kFloat && scale_b.scalar_type() == kFloat,
"For grouped FP8 rowwise, both scales must be float32 tensors");
#ifndef USE_ROCM
return _f8_f8_bf16_rowwise_grouped_mm_cuda(
mat_a,
mat_b,
scale_a,
scale_b,
offs,
bias,
use_fast_accum,
out);
#else
// NOTE: ignore use_fast_accum
TORCH_CHECK_VALUE(!bias.has_value(), "ROCM grouped gemm does not support bias")
return _f8_f8_bf16_rowwise_grouped_mm_rocm(
mat_a,
mat_b,
scale_a,
scale_b,
offs,
out);
#endif
}
Tensor
_scaled_grouped_mm_cuda(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const Tensor& scale_b,
const std::optional<at::Tensor>& offs,
const std::optional<at::Tensor>& bias,
const std::optional<at::Tensor>& scale_result,
std::optional<c10::ScalarType> out_dtype,
bool use_fast_accum) {
bool allowed_device = _scaled_mm_allowed_device(/*sm90_only*/true, /*sm100_only*/true);
TORCH_CHECK_VALUE(allowed_device, "torch._scaled_grouped_mm is only supported on CUDA devices with compute capability = [9.0, 10.0], or ROCm MI300+");
TORCH_CHECK_VALUE(!check_valid_strides_and_return_transposed(mat_a), "Expected mat1 to not be transposed");
TORCH_CHECK_VALUE(check_valid_strides_and_return_transposed(mat_b), "Expected mat2 to be transposed");
TORCH_CHECK_VALUE(mat_a.dim() == 2 || mat_a.dim() == 3, "mat_a has to be 2 or 3d");
TORCH_CHECK_VALUE(mat_b.dim() == 2 || mat_b.dim() == 3, "mat_b has to be 2 or 3d");
const bool a_is_2d = mat_a.dim() == 2;
const bool b_is_2d = mat_b.dim() == 2;
// NOTE(slayton): For sub-1B formats want contraction_dim argument?
if (!a_is_2d || !b_is_2d) {
TORCH_CHECK_VALUE(mat_a.size(-1) == mat_b.size(-2), "contraction dimension of mat_a and mat_b must match");
}
TORCH_CHECK_VALUE(
mat_a.size(-1) % 16 == 0,
"Expected trailing dimension of mat_a to be divisible by 16 ",
"but got mat1 shape: (",
mat_a.sizes(),
").");
TORCH_CHECK_VALUE(mat_b.size(-2) % 16 == 0 && mat_b.size(-1) % 16 == 0,
"Expected mat_b shape to be divisible by 16 ",
"but got mat_b shape: (",
mat_b.sizes(),
").");
TORCH_CHECK_VALUE(!bias.has_value(), "Bias not supported yet");
TORCH_CHECK_VALUE(!scale_result.has_value(), "Scale result not supported yet");
TORCH_CHECK_VALUE(offs.has_value() == (a_is_2d || b_is_2d), "Have to provide offsets if there is a 2d matrix");
// NOTE: mxfp8 x mxfp8 requires (and asserts later) that offsets is present.
// for rowwise, no offsets implies 3d-3d and is handled by lower-level
// routines
if (offs.has_value()) {
TORCH_CHECK_VALUE(offs->dim() == 1, "offs has to be 1D");
TORCH_CHECK_VALUE(offs->dtype() == at::kInt, "Offsets have to be int32");
}
// FP8 per-tensor and per-row scaling expect fp32 scales.
// MXFP8 expects float8_e8m0fnu scales.
TORCH_CHECK_VALUE(
(scale_a.scalar_type() == kFloat && scale_b.scalar_type() == kFloat) ||
(scale_a.scalar_type() == at::kFloat8_e8m0fnu && scale_b.scalar_type() == at::kFloat8_e8m0fnu),
"For FP8 tensorwise and rowwise, both scales must both be float32 tensors. For MXFP8, scales must both be float8_e8m0fnu tensors.");
const int scale_multiplier = (mat_a.dim() == 2 && mat_b.dim() == 2) ? offs->size(0) : 1;
check_scale(mat_a, scale_a, 0 ,0, scale_multiplier);
check_scale(mat_b, scale_b, 1, 1, scale_multiplier);
const auto out_dtype_ = out_dtype.value_or(kBFloat16);
TORCH_CHECK_VALUE(out_dtype_ == kBFloat16, "Only bf16 high precision output types are supported for grouped gemm");
Tensor out = create_grouped_gemm_output_tensor(mat_a, mat_b, offs, out_dtype_);
#if defined(USE_FBGEMM_GENAI) && defined(USE_CUDA) && !defined(USE_ROCM)
// MXFP8 grouped GEMM dispatching
bool is_mx8mx8bf16 = (
mat_a.scalar_type() == at::kFloat8_e4m3fn && mat_b.scalar_type() == at::kFloat8_e4m3fn &&
scale_a.scalar_type() == at::kFloat8_e8m0fnu && scale_b.scalar_type() == at::kFloat8_e8m0fnu
);
#else
bool is_mx8mx8bf16 = false;
#endif
if (is_mx8mx8bf16) {
// Note: Passing implied SwizzleType here, correctness of scale previously checked
// in `check_scale` call
return _mx8_mx8_bf16_grouped_mm_fbgemm(
mat_a,
mat_b,
scale_a,
SwizzleType::SWIZZLE_32_4_4,
scale_b,
SwizzleType::SWIZZLE_32_4_4,
offs.value(),
out);
}
// If we're not MXFP8, then we're row-wise scaling.
return _f8_f8_bf16_rowwise_grouped_mm(
mat_a,
mat_b,
scale_a,
scale_b,
offs,
bias,
use_fast_accum,
out);
}
namespace {
std::array<std::tuple<std::string, acceptance_fn, ScaledGemmImplementation>, 2> scale_grouped_kernel_dispatch = {{
{ "rowwise_rowwise", check_rowwise_recipe, ScaledGemmImplementation::ROWWISE_ROWWISE},
{ "mxfp8_mxfp8", check_mxfp8_recipe, ScaledGemmImplementation::MXFP8_MXFP8}}};
} // anonymous namespace
Tensor
_scaled_grouped_mm_cuda_v2(
const Tensor& mat_a, const Tensor& mat_b,
ArrayRef<Tensor> scale_a,
IntArrayRef scale_recipe_a,
IntArrayRef swizzle_a,
ArrayRef<Tensor> scale_b,
IntArrayRef scale_recipe_b,
IntArrayRef swizzle_b,
const std::optional<Tensor>& offs,
const std::optional<Tensor>& bias,
const std::optional<c10::ScalarType> out_dtype,
IntArrayRef contraction_dim,
bool use_fast_accum) {
bool allowed_device = _scaled_mm_allowed_device(/*sm90_only*/true, /*sm100_only*/true);
TORCH_CHECK_VALUE(allowed_device, "torch._scaled_grouped_mm is only supported on CUDA devices with compute capability = [9.0, 10.0], or ROCm MI300+");
TORCH_CHECK_VALUE(!check_valid_strides_and_return_transposed(mat_a), "Expected mat1 to not be transposed");
TORCH_CHECK_VALUE(check_valid_strides_and_return_transposed(mat_b), "Expected mat2 to be transposed");
TORCH_CHECK_VALUE(mat_a.dim() == 2 || mat_a.dim() == 3, "mat_a has to be 2 or 3d");
TORCH_CHECK_VALUE(mat_b.dim() == 2 || mat_b.dim() == 3, "mat_b has to be 2 or 3d");
const bool a_is_2d = mat_a.dim() == 2;
const bool b_is_2d = mat_b.dim() == 2;
// NOTE(slayton): For sub-1B formats want contraction_dim argument?
if (!a_is_2d || !b_is_2d) {
if (contraction_dim.size() > 0) {
const int dim_a = contraction_dim[0], dim_b = mat_b.size(contraction_dim[1]);
TORCH_CHECK_VALUE(mat_a.size(dim_a) == mat_b.size(dim_b),
"Contraction dimensions (", dim_a, ",", dim_b, ") of mat_a and mat_b must match, got: ", mat_a.size(dim_a), " and ",
mat_b.size(dim_b));
// Note: only (-1, -2) is currently supported
TORCH_CHECK_VALUE(dim_a == -1 && dim_b == -2, "Curently contraction dims must be (-1, -2) only");
} else {
TORCH_CHECK_VALUE(mat_a.size(-1) == mat_b.size(-2), "contraction dimension of mat_a and mat_b must match");
}
}
TORCH_CHECK_VALUE(
mat_a.size(-1) % 16 == 0,
"Expected trailing dimension of mat_a to be divisible by 16 ",
"but got mat1 shape: (",
mat_a.sizes(),
").");
TORCH_CHECK_VALUE(mat_b.size(-2) % 16 == 0 && mat_b.size(-1) % 16 == 0,
"Expected mat_b shape to be divisible by 16 ",
"but got mat_b shape: (",
mat_b.sizes(),
").");
TORCH_CHECK_VALUE(!bias.has_value(), "Bias not supported yet");
TORCH_CHECK_VALUE(offs.has_value() == (a_is_2d || b_is_2d), "Have to provide offsets if there is a 2d matrix");
// NOTE: mxfp8 x mxfp8 requires (and asserts later) that offsets is present.
// for rowwise, no offsets implies 3d-3d and is handled by lower-level
// routines
if (offs.has_value()) {
TORCH_CHECK_VALUE(offs->dim() == 1, "offs has to be 1D");
TORCH_CHECK_VALUE(offs->dtype() == at::kInt, "Offsets have to be int32");
}
const auto out_dtype_ = out_dtype.value_or(kBFloat16);
TORCH_CHECK_VALUE(out_dtype_ == kBFloat16, "Only bf16 high precision output types are supported for grouped gemm");
Tensor out = create_grouped_gemm_output_tensor(mat_a, mat_b, offs, out_dtype_);
// Conversion of implicitly-defined enums to explicit
auto scale_recipe_a_enum = convert_int_to_enum<ScalingType>(scale_recipe_a);
auto swizzle_a_enum = convert_int_to_enum<SwizzleType>(swizzle_a);
auto scale_recipe_b_enum = convert_int_to_enum<ScalingType>(scale_recipe_b);
auto swizzle_b_enum = convert_int_to_enum<SwizzleType>(swizzle_b);
// at this point we can start working out what we want to be doing
// Try to do as few steps as possible.
// NOTE: support is deliberately sparse, can explicitly enumerate all combinations allowed.
// Do this via a list of defined (name, acceptance, concrete_impl) tuples.
ScaledGemmImplementation gemm_impl = ScaledGemmImplementation::NONE;
for (const auto& fn_entry : scale_grouped_kernel_dispatch) {
const auto [name, accept_fn, scaled_gemm_impl] = fn_entry;
bool ok = accept_fn(mat_a.scalar_type(),
scale_recipe_a_enum,
scale_a,
mat_b.scalar_type(),
scale_recipe_b_enum,
scale_b);
if (ok) {
gemm_impl = scaled_gemm_impl;
break;
}
}
TORCH_CHECK_VALUE(gemm_impl != ScaledGemmImplementation::NONE,
"No gemm implementation was found");
switch (gemm_impl) {
case ScaledGemmImplementation::ROWWISE_ROWWISE: {
const int scale_multiplier = (mat_a.dim() == 2 && mat_b.dim() == 2) ? offs->size(0) : 1;
_check_scales_fp8_rowwise(mat_a, scale_a[0], 0 /* dim */ , 0 /* arg_idx */, scale_multiplier);
_check_scales_fp8_rowwise(mat_b, scale_b[0], 1 /* dim */ , 1 /* arg_idx */, scale_multiplier);
return _f8_f8_bf16_rowwise_grouped_mm(
mat_a,
mat_b,
scale_a[0],
scale_b[0],
offs,
bias,
use_fast_accum,
out);
}
case ScaledGemmImplementation::MXFP8_MXFP8: {
_check_scales_mxfp8(mat_a, scale_a[0], 0 /* dim */, 0 /* arg_idx */);
_check_scales_mxfp8(mat_b, scale_b[0], 1 /* dim */, 1 /* arg_idx */);
return _mx8_mx8_bf16_grouped_mm_fbgemm(
mat_a,
mat_b,
scale_a[0],
swizzle_a_enum[0],
scale_b[0],
swizzle_b_enum[0],
offs.value(),
out);
}
default:
TORCH_CHECK_NOT_IMPLEMENTED(false,
"_scaled_grouped_mm_cuda_v2 is in an inconsistent state - should never reach here");
}
}
Tensor _grouped_mm_cuda(const Tensor& mat_a, const Tensor& mat_b,
const std::optional<at::Tensor>& offs,
const std::optional<at::Tensor>& bias,
std::optional<c10::ScalarType> out_dtype) {
_grouped_mm_validate_inputs(mat_a, mat_b, offs, bias, out_dtype);
bool a_b_and_out_are_bf16 = (
mat_a.dtype() == at::kBFloat16 &&
mat_b.dtype() == at::kBFloat16 &&
out_dtype.value_or(at::kBFloat16) == at::kBFloat16
);
#ifndef USE_ROCM
bool use_fast_path = _scaled_mm_allowed_device(/*sm90_only*/true, /*sm100_only*/true) && a_b_and_out_are_bf16;
#else
// _scaled_mm_allowed_device is used here within _grouped_mm_cuda which seems incorrect since scale is not used.
// the _grouped_mm_fallback should be safe for any ROCm GPU since it's just calling typical mm/bmm
bool use_fast_path = false;
#endif
const auto out_dtype_ = _resolve_grouped_mm_out_dtype(mat_a, mat_b, out_dtype);
Tensor out = create_grouped_gemm_output_tensor(mat_a, mat_b, offs, out_dtype_);
if (use_fast_path) {
// fast path, no d2h sync needed
at::cuda::detail::bf16bf16_grouped_mm(mat_a, mat_b, offs, bias, out);
} else {
_grouped_mm_fallback(mat_a, mat_b, offs, bias, out_dtype, out);
}
return out;
}
static void baddbmm_bmm_out_dtype_checks(const Tensor& batch1, const Tensor& batch2, const Scalar& beta, const Scalar& alpha, const at::ScalarType out_dtype, bool is_bmm, const std::optional<Tensor>& self_baddbmm = std::nullopt) {
// ref ATen/native/LinearAlgebra.cpp common_checks_baddbmm_bmm
TORCH_CHECK(batch1.dim() == 3, "batch1 must be a 3D tensor");

View File

@ -0,0 +1,574 @@
#include <cstdint>
#include <c10/util/typeid.h>
#include <c10/util/Exception.h>
#include <c10/util/SmallVector.h>
#include <c10/core/Scalar.h>
#include <c10/core/ScalarType.h>
#include <c10/util/Exception.h>
#define TORCH_ASSERT_ONLY_METHOD_OPERATORS
#include <ATen/core/Tensor.h>
#include <ATen/core/NamedTensor.h>
#include <ATen/Dispatch.h>
#include <ATen/ExpandUtils.h>
#include <ATen/OpMathType.h>
#include <ATen/TensorUtils.h>
#include <ATen/cuda/CUDABlas.h>
#include <ATen/cuda/CUDAScaledBlas.h>
#include <ATen/cuda/tunable/Tunable.h>
#include <ATen/cuda/tunable/TunableGemm.h>
#include <ATen/native/Resize.h>
#include <c10/util/MaybeOwned.h>
#include <ATen/native/GroupedMMUtils.h>
#include <ATen/native/cuda/RowwiseScaledMM.h>
#include <ATen/native/cuda/ScaledGroupMM.h>
#include <ATen/native/cuda/GroupMM.h>
#include <ATen/ceil_div.h>
#ifdef USE_FBGEMM_GENAI
#include <fbgemm_gpu/torch_ops.h>
#endif
#ifndef AT_PER_OPERATOR_HEADERS
#include <ATen/Functions.h>
#include <ATen/NativeFunctions.h>
#else
#include <ATen/ops/_addmm_activation_native.h>
#include <ATen/ops/_efficientzerotensor.h>
#include <ATen/ops/_scaled_mm_native.h>
#include <ATen/ops/_unsafe_view_native.h>
#include <ATen/ops/abs.h>
#include <ATen/ops/addmm_native.h>
#include <ATen/ops/addmv_native.h>
#include <ATen/ops/baddbmm_native.h>
#include <ATen/ops/bmm_native.h>
#include <ATen/ops/copy_native.h>
#include <ATen/ops/dot_native.h>
#include <ATen/ops/empty.h>
#include <ATen/ops/empty_strided.h>
#include <ATen/ops/gelu.h>
#include <ATen/ops/max.h>
#include <ATen/ops/mm_native.h>
#include <ATen/ops/mul.h>
#include <ATen/ops/relu.h>
#include <ATen/ops/ones.h>
#include <ATen/ops/scalar_tensor_native.h>
#include <ATen/ops/vdot_native.h>
#endif
using at::blas::ScalingType;
using at::blas::SwizzleType;
namespace scaled_blas = at::cuda::scaled;
using scaled_blas::ScaledGemmImplementation;
using scaled_blas::convert_int_to_enum;
using scaled_blas::_scaled_mm_allowed_device;
namespace at::native {
namespace {
// 2d-2d and 2d-3d
// scaling=MXFP8
// CUDA-only
Tensor&
_mx8_mx8_bf16_grouped_mm_fbgemm(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const SwizzleType& swizzle_a,
const Tensor& scale_b,
const SwizzleType& swizzle_b,
const std::optional<at::Tensor>& offs,
Tensor& out) {
const bool a_is_2d = mat_a.dim() == 2;
const bool b_is_2d = mat_b.dim() == 2;
bool b_is_3d = mat_b.dim() == 3;
bool is_2d_2d = a_is_2d && b_is_2d;
bool is_2d_3d = a_is_2d && b_is_3d;
TORCH_CHECK_VALUE(is_2d_2d || is_2d_3d, "MXFP8 grouped GEMM currently only supports 2d-2d and 2d-3d cases");
TORCH_CHECK_VALUE(offs.has_value(), "MXFP8 2d-2d and 2d-3d grouped GEMMs requires offsets");
TORCH_CHECK_VALUE(out.scalar_type() == at::kBFloat16, "Only bf16 out_dtype is supported for MXFP8 grouped gemm");
// MXFP8 expects float8_e8m0fnu scales.
TORCH_CHECK_VALUE(scale_a.scalar_type() == at::kFloat8_e8m0fnu && scale_b.scalar_type() == at::kFloat8_e8m0fnu,
"For MXFP8 grouped gemm, both scales must be float8_e8m0fnu tensors.");
#ifdef USE_ROCM
TORCH_CHECK_VALUE(swizzle_a == SwizzleType::NO_SWIZZLE && swizzle_b == SwizzleType::NO_SWIZZLE,
"For ROCM MXFP8 grouped gemm, both scale swizzle types must be SWIZZLE_NONE");
#else
TORCH_CHECK_VALUE(swizzle_a == SwizzleType::SWIZZLE_32_4_4 && swizzle_b == SwizzleType::SWIZZLE_32_4_4,
"For CUDA MXFP8 grouped gemm, both scale swizzle types must be SWIZZLE_32_4_4");
#endif
#if defined(USE_FBGEMM_GENAI) and !defined(USE_ROCM)
fbgemm_gpu::mx8mx8bf16_grouped_mm(
mat_a,
mat_b,
scale_a,
scale_b,
offs.value(),
out);
#else
TORCH_CHECK_NOT_IMPLEMENTED(false, "mxfp8_mxfp8 grouped gemm requires compile with USE_FBGEMM_GENAI");
#endif
return out;
}
// 2d-2d and 2d-3d cases
// scaling=rowwise
// CUDA-only
Tensor&
_f8_f8_bf16_rowwise_grouped_mm_cuda(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const Tensor& scale_b,
const std::optional<Tensor>& offs,
const std::optional<Tensor>& bias,
const bool use_fast_accum,
Tensor& out) {
TORCH_CHECK_VALUE(mat_a.dtype() == at::kFloat8_e4m3fn, "Expected mat_a to be Float8_e4m3 matrix got ", mat_a.scalar_type());
TORCH_CHECK_VALUE(mat_b.dtype() == at::kFloat8_e4m3fn, "Expected mat_a to be Float8_e4m3 matrix got ", mat_b.scalar_type());
at::cuda::detail::f8f8bf16_grouped_mm(
mat_a,
mat_b,
scale_a,
scale_b,
offs,
bias,
use_fast_accum,
out);
return out;
}
// 2d-2d and 2d-3d cases
// scaling=rowwise
// only being called for rocm
Tensor&
_f8_f8_bf16_rowwise_grouped_mm_rocm(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const Tensor& scale_b,
const std::optional<Tensor>& offs,
Tensor& out) {
TORCH_CHECK_VALUE(mat_a.dtype() == at::kFloat8_e4m3fnuz, "Expected mat_a to be Float8_e4m3fnuz matrix got ", mat_a.scalar_type());
TORCH_CHECK_VALUE(mat_b.dtype() == at::kFloat8_e4m3fnuz, "Expected mat_a to be Float8_e4m3fnuz matrix got ", mat_b.scalar_type());
#if defined(USE_FBGEMM_GENAI) && defined(USE_ROCM)
fbgemm_gpu::f8f8bf16_rowwise_grouped_mm(
mat_a,
// FBGEMM expects B matrix shape to be (.., N, K)
mat_b.transpose(-2, -1),
scale_a,
scale_b,
offs,
out);
#else
TORCH_CHECK_NOT_IMPLEMENTED(false, "grouped gemm is not supported without USE_FBGEMM_GENAI on ROCM")
#endif
return out;
}
// Dispatch f8 x f8 -> bf16 row-wise scaled to rocm/cuda
Tensor&
_f8_f8_bf16_rowwise_grouped_mm(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const Tensor& scale_b,
const std::optional<Tensor>& offs,
const std::optional<Tensor>& bias,
bool use_fast_accum,
Tensor& out) {
// FP8 per-tensor and per-row scaling expect fp32 scales.
TORCH_CHECK_VALUE(scale_a.scalar_type() == kFloat && scale_b.scalar_type() == kFloat,
"For grouped FP8 rowwise, both scales must be float32 tensors");
#ifndef USE_ROCM
return _f8_f8_bf16_rowwise_grouped_mm_cuda(
mat_a,
mat_b,
scale_a,
scale_b,
offs,
bias,
use_fast_accum,
out);
#else
// NOTE: ignore use_fast_accum
TORCH_CHECK_VALUE(!bias.has_value(), "ROCM grouped gemm does not support bias")
return _f8_f8_bf16_rowwise_grouped_mm_rocm(
mat_a,
mat_b,
scale_a,
scale_b,
offs,
out);
#endif
}
void _check_scales_fp8_rowwise(const Tensor& mat, const Tensor& scale, const int dim, const int arg_idx, const int scale_multiplier=1) {
// Checks scales for 2d or 3d target tensors (`mat`).
if (mat.dim() == 2) {
TORCH_CHECK(
scale.dim() == 1,
"scale must be a 1D tensor, but got ",
scale.dim(),
"D, arg ",
arg_idx);
TORCH_CHECK(
scale.is_contiguous(), "scale must be contiguous for arg ", arg_idx);
TORCH_CHECK(
scale.size(0) == mat.size(dim) * scale_multiplier,
"scale must have the same length as mat for arg ",
arg_idx);
} else {
TORCH_CHECK(
scale.dim() == 2,
"scale must be a 2D tensor, but got ",
scale.dim(),
"D for arg ",
arg_idx);
TORCH_CHECK(
scale.stride(1) == 1,
"scale must be contiguous in the last dimension for arg ",
arg_idx);
TORCH_CHECK(
scale.size(0) == mat.size(0),
"scale must have the same batch dimension as mat for arg ",
arg_idx);
TORCH_CHECK(
scale.size(1) == mat.size(1 + dim),
"scale must have the same first dimension as mat for arg ",
arg_idx);
}
}
void _check_scales_mxfp8(const Tensor& mat, const Tensor& scale, const int dim, const int arg_idx) {
// Checks scales for 2d or 3d target tensors (`mat`).
if (mat.dim() == 2) {
// For MXFP8, 2d tensors have variable size groups represented as subtensors,
// that are converted to blocked padded format individually,
// so we can't check the scale sizes without doing a d2h sync to get the group sizes here.
TORCH_CHECK(
scale.dim() == mat.dim(),
"for mxfp8, scale must have same number of dimensions as parent tensor, but got mat.dim() = ", mat.dim(), " and scale.dim() = ", scale.dim(), " for arg ", arg_idx);
// LHS mat shape (M, total_K) -> scale shape (rounded_up(M, 128), rounded_up_per_group(K/32, 4))
// RHS mat shape (total_K, N) -> scale shape (rounded_up(N, 128), rounded_up_per_group(K/32, 4))
// * weight is transposed prior to the call, scale stays non-transposed.
bool LHS = arg_idx == 0;
int scale_dim_to_check = 0;
int mat_dim_to_check = LHS ? 0 : 1;
TORCH_CHECK(
scale.size(scale_dim_to_check) >= mat.size(mat_dim_to_check),
"for mxfp8, arg ", arg_idx, " tensor shape (", mat.size(0), ", ", mat.size(1), ") ",
"must have scale.shape[", scale_dim_to_check, "] >= ", mat.size(mat_dim_to_check), " but got scale.shape=(", scale.size(0), ", ", scale.size(1), ")");
} else {
// For MXFP8, 3d tensors have static group sizes (stack of 2d tensors),
// so we can check the exact expected scale sizes here without a d2h sync.
auto round_up = [](auto x, auto y) {
return ((x + y - 1) / y) * y;
};
// TODO: this is for 3d tensor in 2d-3d case specifically.
// We'll need to support 3d-3d and 3d-2d cases once mxfp8 grouped gemm supports them.
int64_t G = mat.size(0);
int64_t K = mat.size(1);
int64_t N = mat.size(2);
int64_t blocked_scale_K = round_up(K/32, 4);
int64_t blocked_scale_N = round_up(N, 128);
// fbgemm expects stack of flattened blocked scales for 3d tensor, shape (G, blocked_scale_K * blocked_scale_N).
TORCH_CHECK(
scale.dim() == mat.dim() - 1,
"for mxfp8 2d-3d grouped GEMM, the 3d tensor of shape (G,K,N) must have a 2d scale of shape (G, blocked_scale_K * blocked_scale_N), but scale is ", scale.dim(), "D for arg ", arg_idx
);
TORCH_CHECK(
scale.size(0) == G && scale.size(1) == blocked_scale_K * blocked_scale_N,
"for mxfp8, the tensor shape (", G, ", ", K, ", ", N, ") must have scale shape (", G, ",", blocked_scale_K, ",", blocked_scale_N, ") for arg ", arg_idx
);
}
}
void check_scale(const Tensor& mat, const Tensor& scale, const int dim, const int arg_idx, const int scale_multiplier=1) {
bool using_fp8_rowwise = scale.scalar_type() == kFloat;
bool using_mxfp8 = scale.scalar_type() == at::kFloat8_e8m0fnu;
if (using_fp8_rowwise) {
_check_scales_fp8_rowwise(mat, scale, dim, arg_idx, scale_multiplier);
} else if (using_mxfp8) {
_check_scales_mxfp8(mat, scale, dim, arg_idx);
} else {
TORCH_CHECK(false, "scale must be float32 or float8_e8m0fnu, but got ", scale.dtype());
}
}
} // namespace
Tensor
_scaled_grouped_mm_cuda(
const Tensor& mat_a,
const Tensor& mat_b,
const Tensor& scale_a,
const Tensor& scale_b,
const std::optional<at::Tensor>& offs,
const std::optional<at::Tensor>& bias,
const std::optional<at::Tensor>& scale_result,
std::optional<c10::ScalarType> out_dtype,
bool use_fast_accum) {
bool allowed_device = _scaled_mm_allowed_device(/*sm90_only*/true, /*sm100_only*/true);
TORCH_CHECK_VALUE(allowed_device, "torch._scaled_grouped_mm is only supported on CUDA devices with compute capability = [9.0, 10.0], or ROCm MI300+");
TORCH_CHECK_VALUE(!check_valid_strides_and_return_transposed(mat_a), "Expected mat1 to not be transposed");
TORCH_CHECK_VALUE(check_valid_strides_and_return_transposed(mat_b), "Expected mat2 to be transposed");
TORCH_CHECK_VALUE(mat_a.dim() == 2 || mat_a.dim() == 3, "mat_a has to be 2 or 3d");
TORCH_CHECK_VALUE(mat_b.dim() == 2 || mat_b.dim() == 3, "mat_b has to be 2 or 3d");
const bool a_is_2d = mat_a.dim() == 2;
const bool b_is_2d = mat_b.dim() == 2;
// NOTE(slayton): For sub-1B formats want contraction_dim argument?
if (!a_is_2d || !b_is_2d) {
TORCH_CHECK_VALUE(mat_a.size(-1) == mat_b.size(-2), "contraction dimension of mat_a and mat_b must match");
}
TORCH_CHECK_VALUE(
mat_a.size(-1) % 16 == 0,
"Expected trailing dimension of mat_a to be divisible by 16 ",
"but got mat1 shape: (",
mat_a.sizes(),
").");
TORCH_CHECK_VALUE(mat_b.size(-2) % 16 == 0 && mat_b.size(-1) % 16 == 0,
"Expected mat_b shape to be divisible by 16 ",
"but got mat_b shape: (",
mat_b.sizes(),
").");
TORCH_CHECK_VALUE(!bias.has_value(), "Bias not supported yet");
TORCH_CHECK_VALUE(!scale_result.has_value(), "Scale result not supported yet");
TORCH_CHECK_VALUE(offs.has_value() == (a_is_2d || b_is_2d), "Have to provide offsets if there is a 2d matrix");
// NOTE: mxfp8 x mxfp8 requires (and asserts later) that offsets is present.
// for rowwise, no offsets implies 3d-3d and is handled by lower-level
// routines
if (offs.has_value()) {
TORCH_CHECK_VALUE(offs->dim() == 1, "offs has to be 1D");
TORCH_CHECK_VALUE(offs->dtype() == at::kInt, "Offsets have to be int32");
}
// FP8 per-tensor and per-row scaling expect fp32 scales.
// MXFP8 expects float8_e8m0fnu scales.
TORCH_CHECK_VALUE(
(scale_a.scalar_type() == kFloat && scale_b.scalar_type() == kFloat) ||
(scale_a.scalar_type() == at::kFloat8_e8m0fnu && scale_b.scalar_type() == at::kFloat8_e8m0fnu),
"For FP8 tensorwise and rowwise, both scales must both be float32 tensors. For MXFP8, scales must both be float8_e8m0fnu tensors.");
const int scale_multiplier = (mat_a.dim() == 2 && mat_b.dim() == 2) ? offs->size(0) : 1;
check_scale(mat_a, scale_a, 0 ,0, scale_multiplier);
check_scale(mat_b, scale_b, 1, 1, scale_multiplier);
const auto out_dtype_ = out_dtype.value_or(kBFloat16);
TORCH_CHECK_VALUE(out_dtype_ == kBFloat16, "Only bf16 high precision output types are supported for grouped gemm");
Tensor out = create_grouped_gemm_output_tensor(mat_a, mat_b, offs, out_dtype_);
#if defined(USE_FBGEMM_GENAI) && defined(USE_CUDA) && !defined(USE_ROCM)
// MXFP8 grouped GEMM dispatching
bool is_mx8mx8bf16 = (
mat_a.scalar_type() == at::kFloat8_e4m3fn && mat_b.scalar_type() == at::kFloat8_e4m3fn &&
scale_a.scalar_type() == at::kFloat8_e8m0fnu && scale_b.scalar_type() == at::kFloat8_e8m0fnu
);
#else
bool is_mx8mx8bf16 = false;
#endif
if (is_mx8mx8bf16) {
// Note: Passing implied SwizzleType here, correctness of scale previously checked
// in `check_scale` call
return _mx8_mx8_bf16_grouped_mm_fbgemm(
mat_a,
mat_b,
scale_a,
SwizzleType::SWIZZLE_32_4_4,
scale_b,
SwizzleType::SWIZZLE_32_4_4,
offs.value(),
out);
}
// If we're not MXFP8, then we're row-wise scaling.
return _f8_f8_bf16_rowwise_grouped_mm(
mat_a,
mat_b,
scale_a,
scale_b,
offs,
bias,
use_fast_accum,
out);
}
namespace {
using acceptance_fn = std::function<bool(c10::ScalarType, std::vector<ScalingType>&, ArrayRef<Tensor>&, c10::ScalarType, std::vector<ScalingType>&, ArrayRef<Tensor>&)>;
std::array<std::tuple<std::string, acceptance_fn, ScaledGemmImplementation>, 2> scale_grouped_kernel_dispatch = {{
{ "rowwise_rowwise", scaled_blas::check_rowwise_recipe, ScaledGemmImplementation::ROWWISE_ROWWISE},
{ "mxfp8_mxfp8", scaled_blas::check_mxfp8_recipe, ScaledGemmImplementation::MXFP8_MXFP8}}};
} // anonymous namespace
Tensor
_scaled_grouped_mm_cuda_v2(
const Tensor& mat_a, const Tensor& mat_b,
ArrayRef<Tensor> scale_a,
IntArrayRef scale_recipe_a,
IntArrayRef swizzle_a,
ArrayRef<Tensor> scale_b,
IntArrayRef scale_recipe_b,
IntArrayRef swizzle_b,
const std::optional<Tensor>& offs,
const std::optional<Tensor>& bias,
const std::optional<c10::ScalarType> out_dtype,
IntArrayRef contraction_dim,
bool use_fast_accum) {
bool allowed_device = _scaled_mm_allowed_device(/*sm90_only*/true, /*sm100_only*/true);
TORCH_CHECK_VALUE(allowed_device, "torch._scaled_grouped_mm is only supported on CUDA devices with compute capability = [9.0, 10.0], or ROCm MI300+");
TORCH_CHECK_VALUE(!check_valid_strides_and_return_transposed(mat_a), "Expected mat1 to not be transposed");
TORCH_CHECK_VALUE(check_valid_strides_and_return_transposed(mat_b), "Expected mat2 to be transposed");
TORCH_CHECK_VALUE(mat_a.dim() == 2 || mat_a.dim() == 3, "mat_a has to be 2 or 3d");
TORCH_CHECK_VALUE(mat_b.dim() == 2 || mat_b.dim() == 3, "mat_b has to be 2 or 3d");
const bool a_is_2d = mat_a.dim() == 2;
const bool b_is_2d = mat_b.dim() == 2;
// NOTE(slayton): For sub-1B formats want contraction_dim argument?
if (!a_is_2d || !b_is_2d) {
if (contraction_dim.size() > 0) {
const int dim_a = contraction_dim[0], dim_b = mat_b.size(contraction_dim[1]);
TORCH_CHECK_VALUE(mat_a.size(dim_a) == mat_b.size(dim_b),
"Contraction dimensions (", dim_a, ",", dim_b, ") of mat_a and mat_b must match, got: ", mat_a.size(dim_a), " and ",
mat_b.size(dim_b));
// Note: only (-1, -2) is currently supported
TORCH_CHECK_VALUE(dim_a == -1 && dim_b == -2, "Curently contraction dims must be (-1, -2) only");
} else {
TORCH_CHECK_VALUE(mat_a.size(-1) == mat_b.size(-2), "contraction dimension of mat_a and mat_b must match");
}
}
TORCH_CHECK_VALUE(
mat_a.size(-1) % 16 == 0,
"Expected trailing dimension of mat_a to be divisible by 16 ",
"but got mat1 shape: (",
mat_a.sizes(),
").");
TORCH_CHECK_VALUE(mat_b.size(-2) % 16 == 0 && mat_b.size(-1) % 16 == 0,
"Expected mat_b shape to be divisible by 16 ",
"but got mat_b shape: (",
mat_b.sizes(),
").");
TORCH_CHECK_VALUE(!bias.has_value(), "Bias not supported yet");
TORCH_CHECK_VALUE(offs.has_value() == (a_is_2d || b_is_2d), "Have to provide offsets if there is a 2d matrix");
// NOTE: mxfp8 x mxfp8 requires (and asserts later) that offsets is present.
// for rowwise, no offsets implies 3d-3d and is handled by lower-level
// routines
if (offs.has_value()) {
TORCH_CHECK_VALUE(offs->dim() == 1, "offs has to be 1D");
TORCH_CHECK_VALUE(offs->dtype() == at::kInt, "Offsets have to be int32");
}
const auto out_dtype_ = out_dtype.value_or(kBFloat16);
TORCH_CHECK_VALUE(out_dtype_ == kBFloat16, "Only bf16 high precision output types are supported for grouped gemm");
Tensor out = create_grouped_gemm_output_tensor(mat_a, mat_b, offs, out_dtype_);
// Conversion of implicitly-defined enums to explicit
auto scale_recipe_a_enum = convert_int_to_enum<ScalingType>(scale_recipe_a);
auto swizzle_a_enum = convert_int_to_enum<SwizzleType>(swizzle_a);
auto scale_recipe_b_enum = convert_int_to_enum<ScalingType>(scale_recipe_b);
auto swizzle_b_enum = convert_int_to_enum<SwizzleType>(swizzle_b);
// at this point we can start working out what we want to be doing
// Try to do as few steps as possible.
// NOTE: support is deliberately sparse, can explicitly enumerate all combinations allowed.
// Do this via a list of defined (name, acceptance, concrete_impl) tuples.
ScaledGemmImplementation gemm_impl = ScaledGemmImplementation::NONE;
for (const auto& fn_entry : scale_grouped_kernel_dispatch) {
const auto [name, accept_fn, scaled_gemm_impl] = fn_entry;
bool ok = accept_fn(mat_a.scalar_type(),
scale_recipe_a_enum,
scale_a,
mat_b.scalar_type(),
scale_recipe_b_enum,
scale_b);
if (ok) {
gemm_impl = scaled_gemm_impl;
break;
}
}
TORCH_CHECK_VALUE(gemm_impl != ScaledGemmImplementation::NONE,
"No gemm implementation was found");
switch (gemm_impl) {
case ScaledGemmImplementation::ROWWISE_ROWWISE: {
const int scale_multiplier = (mat_a.dim() == 2 && mat_b.dim() == 2) ? offs->size(0) : 1;
_check_scales_fp8_rowwise(mat_a, scale_a[0], 0 /* dim */ , 0 /* arg_idx */, scale_multiplier);
_check_scales_fp8_rowwise(mat_b, scale_b[0], 1 /* dim */ , 1 /* arg_idx */, scale_multiplier);
return _f8_f8_bf16_rowwise_grouped_mm(
mat_a,
mat_b,
scale_a[0],
scale_b[0],
offs,
bias,
use_fast_accum,
out);
}
case ScaledGemmImplementation::MXFP8_MXFP8: {
_check_scales_mxfp8(mat_a, scale_a[0], 0 /* dim */, 0 /* arg_idx */);
_check_scales_mxfp8(mat_b, scale_b[0], 1 /* dim */, 1 /* arg_idx */);
return _mx8_mx8_bf16_grouped_mm_fbgemm(
mat_a,
mat_b,
scale_a[0],
swizzle_a_enum[0],
scale_b[0],
swizzle_b_enum[0],
offs.value(),
out);
}
default:
TORCH_CHECK_NOT_IMPLEMENTED(false,
"_scaled_grouped_mm_cuda_v2 is in an inconsistent state - should never reach here");
}
}
Tensor _grouped_mm_cuda(const Tensor& mat_a, const Tensor& mat_b,
const std::optional<at::Tensor>& offs,
const std::optional<at::Tensor>& bias,
std::optional<c10::ScalarType> out_dtype) {
_grouped_mm_validate_inputs(mat_a, mat_b, offs, bias, out_dtype);
bool a_b_and_out_are_bf16 = (
mat_a.dtype() == at::kBFloat16 &&
mat_b.dtype() == at::kBFloat16 &&
out_dtype.value_or(at::kBFloat16) == at::kBFloat16
);
#ifndef USE_ROCM
bool use_fast_path = _scaled_mm_allowed_device(/*sm90_only*/true, /*sm100_only*/true) && a_b_and_out_are_bf16;
#else
// _scaled_mm_allowed_device is used here within _grouped_mm_cuda which seems incorrect since scale is not used.
// the _grouped_mm_fallback should be safe for any ROCm GPU since it's just calling typical mm/bmm
bool use_fast_path = false;
#endif
const auto out_dtype_ = _resolve_grouped_mm_out_dtype(mat_a, mat_b, out_dtype);
Tensor out = create_grouped_gemm_output_tensor(mat_a, mat_b, offs, out_dtype_);
if (use_fast_path) {
// fast path, no d2h sync needed
at::cuda::detail::bf16bf16_grouped_mm(mat_a, mat_b, offs, bias, out);
} else {
_grouped_mm_fallback(mat_a, mat_b, offs, bias, out_dtype, out);
}
return out;
}
} // namespace at::native

View File

@ -2,6 +2,7 @@
#include <ATen/WrapDimUtilsMulti.h>
#include <ATen/native/Resize.h>
#include <ATen/native/mkldnn/xpu/detail/oneDNN.h>
#include <ATen/native/xpu/Blas.h>
#include <torch/library.h>
#ifndef AT_PER_OPERATOR_HEADERS
@ -50,9 +51,13 @@ Tensor& addmm_out(
mat1.dtype(),
" != ",
mat2.dtype())
// complex case
TORCH_CHECK(
!mat1.is_complex(), "Complex datatype matmul is not supported in oneDNN");
if (self.is_complex()) {
at::native::addmm_complex_out_xpu(self, mat1, mat2, beta, alpha, result);
return result;
}
std::vector<int64_t> result_shape = {mat1.size(0), mat2.size(1)};
result.resize_(result_shape);
@ -167,8 +172,11 @@ Tensor& mm_out(const Tensor& self, const Tensor& mat2, Tensor& result) {
return result;
}
TORCH_CHECK(
!self.is_complex(), "Complex datatype matmul is not supported in oneDNN");
if (self.is_complex()) {
at::native::mm_complex_out_xpu(self, mat2, result);
return result;
}
onednn::matmul(result, self, mat2, Tensor(), true, onednn::Attr());
return result;
@ -208,9 +216,12 @@ Tensor& baddbmm_out(
input.sizes());
// complex case
TORCH_CHECK(
!batch1.is_complex(),
"Complex datatype matmul is not supported in oneDNN");
if (input.is_complex()) {
at::native::baddbmm_complex_out_xpu(
input, batch1, batch2, beta, alpha, result);
return result;
}
// general case
onednn::Attr attr;
@ -257,8 +268,13 @@ Tensor& bmm_out(const Tensor& self, const Tensor& batch2, Tensor& result) {
return result;
}
TORCH_CHECK(
!self.is_complex(), "Complex datatype matmul is not supported in oneDNN");
// complex case
if (self.is_complex()) {
at::native::bmm_complex_out_xpu(self, batch2, result);
return result;
}
onednn::matmul(result, self, batch2, at::Tensor(), true, onednn::Attr());
return result;
}

View File

@ -222,6 +222,13 @@ struct nextafter_functor {
}
};
struct hypot_functor {
template <typename T>
inline T operator()(const T a, const T b) {
return static_cast<T>(precise::sqrt(float(a) * a + float(b) * b));
}
};
// Complex binary functors
struct polar_functor {
template <typename U>
@ -362,6 +369,7 @@ struct igammac_functor {
REGISTER_OPMATH_BINARY_OP(NAME, half, half); \
REGISTER_OPMATH_BINARY_OP(NAME, bfloat, bfloat)
REGISTER_FLOAT_BINARY_OP(hypot);
REGISTER_FLOAT_BINARY_OP(copysign);
REGISTER_INT2FLOAT_BINARY_OP(copysign);
REGISTER_FLOAT_BINARY_OP(fmax);

View File

@ -202,6 +202,10 @@ static void igammac_mps_kernel(TensorIteratorBase& iter) {
lib.exec_binary_kernel(iter, "igammac");
}
static void hypot_mps_kernel(TensorIteratorBase& iter) {
lib.exec_binary_kernel(iter, "hypot");
}
REGISTER_DISPATCH(fmax_stub, &fmax_mps_kernel)
REGISTER_DISPATCH(fmin_stub, &fmin_mps_kernel)
REGISTER_DISPATCH(copysign_stub, &copysign_mps_kernel)
@ -229,4 +233,5 @@ REGISTER_DISPATCH(fmod_stub, &fmod_mps_kernel)
REGISTER_DISPATCH(remainder_stub, &remainder_mps_kernel)
REGISTER_DISPATCH(igamma_stub, &igamma_mps_kernel)
REGISTER_DISPATCH(igammac_stub, &igammac_mps_kernel)
REGISTER_DISPATCH(hypot_stub, &hypot_mps_kernel)
} // namespace at::native

View File

@ -16,7 +16,6 @@
#include <ATen/ops/eq_native.h>
#include <ATen/ops/ge_native.h>
#include <ATen/ops/gt_native.h>
#include <ATen/ops/hypot_native.h>
#include <ATen/ops/le_native.h>
#include <ATen/ops/logaddexp2_native.h>
#include <ATen/ops/logaddexp_native.h>
@ -278,22 +277,6 @@ TORCH_IMPL_FUNC(pow_Scalar_out_mps)(const Scalar& base, const Tensor& exp, const
}
}
TORCH_IMPL_FUNC(hypot_out_mps)(const Tensor& self, const Tensor& other, const Tensor& output) {
mps::BinaryOpBlock hypot_op_block = ^BinaryOpFn(cachedGraph, primaryCastTensor, secondaryCastTensor) {
MPSGraph* mpsGraph = cachedGraph->graph();
MPSGraphTensor* twoTensor = [mpsGraph constantWithScalar:2.0 shape:@[ @1 ] dataType:primaryCastTensor.dataType];
MPSGraphTensor* sumTensor = [mpsGraph additionWithPrimaryTensor:[mpsGraph powerWithPrimaryTensor:primaryCastTensor
secondaryTensor:twoTensor
name:nil]
secondaryTensor:[mpsGraph powerWithPrimaryTensor:secondaryCastTensor
secondaryTensor:twoTensor
name:nil]
name:nil];
return [mpsGraph squareRootWithTensor:sumTensor name:nil];
};
mps::binaryOpTensor(self, other, output, "hypot_out_mps", hypot_op_block);
}
TORCH_IMPL_FUNC(logaddexp_out_mps)(const Tensor& self, const Tensor& other, const Tensor& output) {
mps::BinaryOpBlock logaddexp_op_block = ^BinaryOpFn(cachedGraph, primaryCastTensor, secondaryCastTensor) {
MPSGraph* mpsGraph = cachedGraph->graph();

View File

@ -10040,8 +10040,7 @@
structured: True
structured_inherits: TensorIteratorBase
dispatch:
CPU, CUDA: hypot_out
MPS: hypot_out_mps
CPU, CUDA, MPS: hypot_out
tags: pointwise
- func: hypot(Tensor self, Tensor other) -> Tensor

View File

@ -76,14 +76,21 @@ bool priority_order_init_ = false;
// TODO(eqy): more benchmarking to determine whether this should include sm86/89
// Needs to be kept in-sync with test_fused_chocie in test_transformers.py
bool check_prefer_cudnn_attention() {
static const bool prefer_cudnn = c10::utils::check_env("TORCH_CUDNN_SDPA_PREFERRED") != false;
static const bool prefer_cudnn = c10::utils::check_env("TORCH_CUDNN_SDPA_DEPRIORITIZED") != true;
if (!prefer_cudnn) {
return false;
}
#if (defined(CUDNN_VERSION) && (CUDNN_VERSION >= 90900))
auto dprops = at::cuda::getCurrentDeviceProperties();
auto major = dprops->major;
return (major == 9 || major == 10) && !dprops->minor;
try {
auto dprops = at::cuda::getCurrentDeviceProperties();
auto major = dprops->major;
return (major == 9 || major == 10) && !dprops->minor;
} catch (c10::Error const& e) {
#ifdef DEBUG
TORCH_WARN("check_prefer_cudnn_attention() caught exception ", e.what());
#endif
return false;
}
#else
return false;
#endif

View File

@ -37,6 +37,10 @@ TEST(SingletonOrSharedTypePtr, Comparison) {
EXPECT_NE(empty, p);
EXPECT_NE(p, p2);
EXPECT_EQ(empty, empty);
EXPECT_EQ(p, p);
EXPECT_EQ(p2, p2);
}
TEST(SingletonOrSharedTypePtr, SingletonComparison) {
@ -47,6 +51,8 @@ TEST(SingletonOrSharedTypePtr, SingletonComparison) {
c10::TypePtr type = c10::NoneType::get();
EXPECT_NE(type, c10::StringType::get());
EXPECT_NE(type, c10::DeviceObjType::get());
EXPECT_EQ(type, type);
EXPECT_EQ(type, c10::NoneType::get());
}

View File

@ -526,6 +526,41 @@ namespace {
[](const vec& v) { return v.expm1(); },
createDefaultUnaryTestCase<vec>(TestSeed(), false, true));
}
TYPED_TEST(Exponents, ExpU20) {
using vec = TypeParam;
using VT = ValueType<TypeParam>;
using UVT = UvalueType<TypeParam>;
// Explicit edge values
VT v_too_small = VT(-100.0); // much less than -87.3
VT exp_too_small = std::exp(v_too_small);
VT v_neg_edge = VT(-0x1.5d5e2ap+6f); // just at the edge
VT exp_neg_edge = std::exp(v_neg_edge);
VT v_zero = VT(0.0); // middle, normal case
VT exp_zero = std::exp(v_zero);
VT v_pos_edge = VT(0x1.5d5e2ap+6f); // just at the edge
VT exp_pos_edge = std::exp(v_pos_edge);
VT v_too_large = VT(100.0); // much more than 87.3
VT exp_too_large = std::exp(v_too_large);
auto test_case = TestingCase<vec>::getBuilder()
// Randoms in normal range, but the .addCustom() below guarantees we hit the special/fallback cases
.addDomain(CheckWithinDomains<UVT>{{{-100, 100}}, false, getDefaultTolerance<UVT>()})
.addCustom({ {v_too_small}, exp_too_small })
.addCustom({ {v_neg_edge}, exp_neg_edge })
.addCustom({ {v_zero}, exp_zero })
.addCustom({ {v_pos_edge}, exp_pos_edge })
.addCustom({ {v_too_large}, exp_too_large })
.setTrialCount(65536)
.setTestSeed(TestSeed());
test_unary<vec>(
NAME_INFO(exp_u20_edge_cases),
RESOLVE_OVERLOAD(std::exp),
[](const vec& v) { return v.exp_u20(); },
test_case
);
}
TYPED_TEST(ErrorFunctions, Erf) {
using vec = TypeParam;
test_unary<vec>(

View File

@ -41,6 +41,7 @@ torch.distributed.fsdp.fully_shard <distributed.fsdp.fully_shard>
torch.distributed.tensor.parallel <distributed.tensor.parallel>
torch.distributed.optim <distributed.optim>
torch.distributed.pipelining <distributed.pipelining>
torch.distributed._symmetric_memory <symmetric_memory>
torch.distributed.checkpoint <distributed.checkpoint>
torch.distributions <distributions>
torch.compiler <torch.compiler>

View File

@ -0,0 +1,380 @@
```{eval-rst}
.. role:: hidden
:class: hidden-section
```
# PyTorch Symmetric Memory
:::{note}
`torch.distributed._symmetric_memory` is currently in alpha state and under
development. API changes may be possible.
:::
## Why Symmetric Memory?
With rapidly evolving parallelization techniques, existing frameworks and
libraries often struggle to keep up, and developers increasingly rely on custom
implementations directly scheduling communications and computations. In recent
years weve witnessed a shift from primarily relying on one-dimensional
data-parallelism techniques to multi-dimensional parallelism ones. The latter
have different latency requirements for different types of communications and
thus require fine-grained overlapping of compute and communications.
To minimize compute interference, they also require the use of copy engines and
network interface cards (NICs) to drive communication. Network transport
protocols such as remote direct memory access (RDMA) enhance the performance by
enabling direct, high-speed, and low-latency communication between processors
and memory. This increase in variety indicates the need for finer-grained
communication primitives than are offered today by high-level collective APIs,
ones that would enable developers to implement specific algorithms tailored for
their use cases, such as low-latency collectives, fine-grained
compute-communications overlap, or custom fusions.
Furthermore, todays advanced AI systems connect GPUs with high-bandwidth links
(such as NVLinks, InfiniBand or RoCE), making GPU global memory directly
accessible to peers. Such connections present a great opportunity for
programmers to program the system as a single, gigantic GPU with vast accessible
memory, instead of programming singular “GPU islands.”
In this document, we will show how you can use PyTorch Symmetric Memory to
program modern GPU systems as a “single GPU” and achieve fine-grained remote
access.
## What PyTorch Symmetric Memory unlocks?
PyTorch Symmetric Memory unlocks three new capabilities:
- **Customized communication patterns**: Increased flexibility in kernel writing
allows developers to write custom kernels that implement their custom
computations and communications, directly tailored to the need of the
application. It will also be straightforward to add support for new data types
along with the special compute that those data types might require, even if its
not present yet in the standard libraries.
- **In-kernel compute-comm fusion**: Device-initiated communication capability
allows developers to write kernels with both computation and communication
instructions, allowing for the fusion of computation and data movement in the
smallest possible granularity.
- **Low-latency remote access**: Network transport protocols like RDMA enhance the
performance of symmetric memory in networked environments by enabling direct,
high-speed, and low-latency communication between processors and memory. RDMA
eliminates the overhead associated with the traditional network stack and CPU
involvement. It also offloads data transfer from the compute to the NICs,
freeing up compute resources for computational tasks.
Next, we will show you how PyTorch Symmetric Memory (SymmMem) enables new
applications with the above capabilities.
## A “Hello World” example
The PyTorch SymmMem programming model involves two key elements:
- creating symmetric tensors
- creating SymmMem kernels
To create symmetric tensors, one can use the
`torch.distributed._symmetric_memory` package:
```python
import torch.distributed._symmetric_memory as symm_mem
t = symm_mem.empty(128, device=torch.device("cuda", rank))
hdl = symm_mem.rendezvous(t, group)
```
The `symm_mem.empty` function creates a tensor that is backed by a symmetric
memory allocation. The `rendezvous` function establishes a rendezvous with peers
in the group, and returns a handle to the symmetric memory allocation. The
handle provides method to access information related to the symmetric memory
allocation, such as pointers to symmetric buffer on peer ranks, multicast
pointer (if supported), and signal pads.
The `empty` and `rendezvous` functions must be called in the same order on all
ranks in the group.
Then, collectives can be called on these tensors. For example, to perform a
one-shot all-reduce:
```python
# Most SymmMem ops are under the torch.ops.symm_mem namespace
torch.ops.symm_mem.one_shot_all_reduce(t, "sum", group)
```
Please note that `torch.ops.symm_mem` is an "op namespace" instead of a python
module. Therefore, you can't import it by `import torch.ops.symm_mem`, neither
can you import an op by `from torch.ops.symm_mem import one_shot_all_reduce`.
You can call the op directly as in the example above.
## Write your own kernel
To write your own kernel doing communications with symmetric memory, youll need
access to the addresses of mapped peer buffers and access to signal pads that
are required for synchronization. In the kernel youll also need to perform
correct synchronizations to make sure that peers are ready for communication,
and signal to them that this GPU is ready.
PyTorch Symmetric Memory provides CUDA Graph-compatible synchronization
primitives that operate on the signal pad accompanying each symmetric memory
allocation. Kernels using symmetric memory can be written both in CUDA and in
Triton. Heres an example allocating symmetric tensor and exchanging handles:
```python
import torch.distributed._symmetric_memory as symm_mem
dist.init_process_group()
rank = dist.get_rank()
# Allocate a tensor
t = symm_mem.empty(4096, device=f"cuda:{rank}")
# Establish symmetric memory and obtain the handle
hdl = symm_mem.rendezvous(t, dist.group.WORLD)
```
Access to buffer pointers, multimem pointer, and signal pads is provided via:
```python
hdl.buffer_ptrs
hdl.multicast_ptr
hdl.signal_pad_ptrs
```
Data pointed to by `buffer_ptrs` can be accessed just like regular local data,
and any necessary compute can also be performed in the usual ways. As with local
data, you can and should use vectorized accesses to improve efficiency.
Symmetric memory is especially convenient for writing kernels in Triton. While
previously Triton removed the barriers to writing efficient CUDA code, now
communications can be added easily to Triton kernels. The kernel below
demonstrates a low-latency, all-reduce kernel written in Triton.
```python
@triton.jit
def one_shot_all_reduce_kernel(
buf_tuple,
signal_pad_ptrs,
output_ptr,
numel: tl.constexpr,
rank: tl.constexpr,
world_size: tl.constexpr,
BLOCK_SIZE: tl.constexpr,
):
ptx_utils.symm_mem_sync(
signal_pad_ptrs, None, rank, world_size, hasSubsequenceMemAccess=True
)
pid = tl.program_id(axis=0)
block_start = pid * BLOCK_SIZE
while block_start < numel:
offsets = block_start + tl.arange(0, BLOCK_SIZE)
mask = offsets < numel
acc = tl.zeros((BLOCK_SIZE,), dtype=tl.bfloat16)
for i in tl.static_range(world_size):
buffer_rank = buf_tuple[i]
x = tl.load(buffer_rank + offsets, mask=mask)
acc += x
tl.store(output_ptr + offsets, acc, mask=mask)
block_start += tl.num_programs(axis=0) * BLOCK_SIZE
ptx_utils.symm_mem_sync(
signal_pad_ptrs, None, rank, world_size, hasPreviousMemAccess=True
)
```
Synchronizations at the beginning and the end of the kernel above guarantee that
all the processes see consistent data. The bulk of the kernel is recognizable
Triton code, and Triton will optimize it behind the scene, making sure memory
accesses are performed in an efficient way with vectorization and unrolling. As
with all Triton kernels, it is easily modifiable to add extra computations or
change the communication algorithm. Visit
https://github.com/meta-pytorch/kraken/blob/main/kraken to see additional
utilities and examples of using symmetric memory to implement common patterns in
Triton.
## Scale out
Large language models distribute experts onto more than 8 GPUs, hence requiring
multi-node access capability. NICs capable of RDMA come to help. In addition,
software libraries such as NVSHMEM or rocSHMEM abstract away the programming
difference between intra-node access and inter-node access with primitives that
are slightly higher level than pointer access, such as put and get.
PyTorch provides NVSHMEM plugins to augment Triton kernels cross-node
capabilities. As shown in the code snippet below, one can initiate a cross-node
put command within the kernel.
```python
import torch.distributed._symmetric_memory._nvshmem_triton as nvshmem
from torch.distributed._symmetric_memory._nvshmem_triton import requires_nvshmem
@requires_nvshmem
@triton.jit
def my_put_kernel(
dest,
src,
nelems,
pe,
):
nvshmem.put(dest, src, nelems, pe)
```
The `requires_nvshmem` decorator is used to indicate that the kernel requires
the NVSHMEM device library as an external dependency. When Triton compiles the
kernel, the decorator will search your system paths for the NVSHMEM device
library. If it is available, Triton will include the necessary device assembly
to use the NVSHMEM functions.
## API Reference
```{eval-rst}
.. currentmodule:: torch.distributed._symmetric_memory
```
```{eval-rst}
.. autofunction:: empty
```
```{eval-rst}
.. autofunction:: rendezvous
```
```{eval-rst}
.. autofunction:: is_nvshmem_available
```
```{eval-rst}
.. autofunction:: set_backend
```
```{eval-rst}
.. autofunction:: get_backend
```
## Op Reference
:::{note}
The following ops are hosted in the `torch.ops.symm_mem` namespace. You can call
them directly via `torch.ops.symm_mem.<op_name>`.
:::
```{eval-rst}
.. currentmodule:: torch.ops.symm_mem
```
```{eval-rst}
.. py:function:: multimem_all_reduce_(input: Tensor, reduce_op: str, group_name: str) -> Tensor
Performs a multimem all-reduce operation on the input tensor. This operation
requires hardware support for multimem operations. On NVIDIA GPUs, NVLink
SHARP is required.
:param Tensor input: Input tensor to perform all-reduce on. Must be symmetric.
:param str reduce_op: Reduction operation to perform. Currently only "sum" is supported.
:param str group_name: Name of the group to perform all-reduce on.
.. py:function:: multimem_all_gather_out(input: Tensor, group_name: str, out: Tensor) -> Tensor
Performs a multimem all-gather operation on the input tensor. This operation requires hardware support for multimem operations. On NVIDIA GPUs, NVLink SHARP is required.
:param Tensor input: Input tensor to perform all-gather on.
:param str group_name: Name of the group to perform all-gather on.
:param Tensor out: Output tensor to store the result of the all-gather operation. Must be symmetric.
.. py:function:: one_shot_all_reduce(input: Tensor, reduce_op: str, group_name: str) -> Tensor
Performs a one-shot all-reduce operation on the input tensor.
:param Tensor input: Input tensor to perform all-reduce on. Must be symmetric.
:param str reduce_op: Reduction operation to perform. Currently only "sum" is supported.
:param str group_name: Name of the group to perform all-reduce on.
.. py:function:: one_shot_all_reduce_out(input: Tensor, reduce_op: str, group_name: str, out: Tensor) -> Tensor
Performs a one-shot all-reduce operation based on the input tensor and writes the result to the output tensor.
:param Tensor input: Input tensor to perform all-reduce on. Must be symmetric.
:param str reduce_op: Reduction operation to perform. Currently only "sum" is supported.
:param str group_name: Name of the group to perform all-reduce on.
:param Tensor out: Output tensor to store the result of the all-reduce operation. Can be a regular tensor.
.. py:function:: two_shot_all_reduce_(input: Tensor, reduce_op: str, group_name: str) -> Tensor
Performs a two-shot all-reduce operation on the input tensor.
:param Tensor input: Input tensor to perform all-reduce on. Must be symmetric.
:param str reduce_op: Reduction operation to perform. Currently only "sum" is supported.
:param str group_name: Name of the group to perform all-reduce on.
.. py:function:: all_to_all_vdev(input: Tensor, out: Tensor, in_splits: Tensor, out_splits_offsets: Tensor, group_name: str) -> None
Performs an all-to-all-v operation using NVSHMEM, with split information provided on device.
:param Tensor input: Input tensor to perform all-to-all on. Must be symmetric.
:param Tensor out: Output tensor to store the result of the all-to-all operation. Must be symmetric.
:param Tensor in_splits: Tensor containing splits of data to send to each peer. Must be symmetric. Must be of size (group_size,). The splits are in the unit of elements in the 1st dimension.
:param Tensor out_splits_offsets: Tensor containing the splits and offsets of data received from each peer. Must be symmetric. Must be of size (2, group_size). The rows are (in order): output splits and output offsets.
:param str group_name: Name of the group to perform all-to-all on.
.. py:function:: all_to_all_vdev_2d(input: Tensor, out: Tensor, in_splits: Tensor, out_splits_offsets: Tensor, group_name: str, [major_align: int = None]) -> None
Perform a 2D all-to-all-v operation using NVSHMEM, with split information provided on device. In Mixture of Experts models, this operation can be used to dispatch tokens.
:param Tensor input: Input tensor to perform all-to-all on. Must be symmetric.
:param Tensor out: Output tensor to store the result of the all-to-all operation. Must be symmetric.
:param Tensor in_splits: Tensor containing the splits of data to send to each expert. Must be symmetric. Must be of size (group_size * ne,), where ne is the number of experts per rank. The splits are in the unit of elements in the 1st dimension.
:param Tensor out_splits_offsets: Tensor containing the splits and offsets of data received from each peer. Must be symmetric. Must be of size (2, group_size * ne). The rows are (in order): output splits and output offsets.
:param str group_name: Name of the group to perform all-to-all on.
:param int major_align: Optional alignment for the major dimension of the output chunk for each expert. If not provided, the alignment is assumed to be 1. Any alignment adjustment will be reflected in the output offsets.
A 2D AllToAllv shuffle is illustrated below:
(world_size = 2, ne = 2, total number of experts = 4)::
Source: | Rank 0 | Rank 1 |
| c0 | c1 | c2 | c3 | d0 | d1 | d2 | d3 |
Dest : | Rank 0 | Rank 1 |
| c0 | d0 | c1 | d1 | c2 | d2 | c3 | d3 |
where each `c_i` / `d_i` are slices of the `input` tensor, targeting expert
`i`, with length indicated by input splits. That is, the 2D AllToAllv
shuffle achieves a transpose from rank-major order at input to expert-major
order at output.
If `major_align` is not 1, the output offsets of c1, c2, c3 will be
up-aligned to this value. For example, if c0 has length 5 and d0 has
length 7 (making a total of 12), and if the `major_align` is set to 16,
the output offset of c1 will be 16. Similar for c2 and c3. This value has
no effect on the offset of the minor dimension, i.e. d0, d1, d2 and d3.
Note: since cutlass does not support empty bins, we set the aligned length
to `major_align` if it is 0. See
https://github.com/pytorch/pytorch/issues/152668.
.. py:function:: all_to_all_vdev_2d_offset(Tensor input, Tensor out, Tensor in_splits_offsets, Tensor out_splits_offsets, str group_name) -> None
Perform a 2D AllToAllv shuffle operation, with input split and offset
information provided on device. The input offsets are not required to be
exact prefix sum of the input splits, i.e. paddings are allowed between the
split chunks. The paddings, however, will not be transferred to peer
ranks.
In Mixture of Experts models, this operation can be used to combine tokens
processed by experts on parallel ranks. This operation can be viewed as an
"reverse" operation to the `all_to_all_vdev_2d` operation (which shuffles
tokens to experts).
:param Tensor input: Input tensor to perform all-to-all on. Must be symmetric.
:param Tensor out: Output tensor to store the result of the all-to-all operation. Must be symmetric.
:param Tensor in_splits_offsets: Tensor containing the splits and offsets of data to send to each expert. Must be symmetric. Must be of size (2, group_size * ne), where `ne` is the number of experts. The rows are (in order): input splits and input offsets. The splits are in the unit of elements in the 1st dimension.
:param Tensor out_splits_offsets: Tensor containing the splits and offsets of data received from each peer. Must be symmetric. Must be of size (2, group_size * ne). The rows are (in order): output splits and output offsets.
:param str group_name: Name of the group to perform all-to-all on.
```

View File

@ -130,6 +130,7 @@ errors.bad-param-name-override = false
# Mypy doesn't require that imports are explicitly imported, so be compatible with that.
# Might be a good idea to turn this on in future.
errors.implicit-import = false
errors.deprecated = false # re-enable after we've fix import formatting
permissive-ignores = true
replace-imports-with-any = ["!sympy.printing.*", "sympy.*", "onnxscript.onnx_opset.*"]
search-path = ["tools/experimental"]

View File

@ -257,7 +257,10 @@ class RecordWorkerEventsTest(unittest.TestCase):
self.assertEqual(failed_event.metadata["state"], "FAILED")
self.assertEqual(failed_event.metadata["global_rank"], 0)
md = json.loads(failed_event.metadata["metadata"])
self.assertEqual(failed_event.metadata["raw_error"], '{"message": "<NONE>"}')
self.assertEqual(
failed_event.metadata["raw_error"],
'{"message": "<NONE>", "errorTraits": {"category": "system_terminated_error", "retryability": "False"}}',
)
self.assertEqual(md["exit_code"], [1])
self.assertEqual(md["worker_pid"], [1000])

View File

@ -22,7 +22,6 @@ from torch.distributed.tensor.parallel import (
parallelize_module,
RowwiseParallel,
)
from torch.nn.attention.flex_attention import create_block_mask, flex_attention
from torch.testing._internal.common_utils import (
instantiate_parametrized_tests,
parametrize,
@ -83,46 +82,7 @@ class SimpleModelAnnotated(torch.nn.Module):
return self.mlp_1(x)
class FlexAttentionModel(torch.nn.Module):
def __init__(self, device):
super().__init__()
self.proj_q = torch.nn.Linear(16, 128, device=device)
self.proj_k = torch.nn.Linear(16, 128, device=device)
self.proj_v = torch.nn.Linear(16, 128, device=device)
self.proj_out = torch.nn.Linear(128, 16, device=device)
self.num_heads = 8
self.head_dim = 16
def forward(self, x, *, block_mask=None):
batch_size, seq_len, embed_dim = x.shape
# Project to Q, K, V
q = self.proj_q(x)
k = self.proj_k(x)
v = self.proj_v(x)
# After colwise parallel, q/k/v are sharded on the last dimension
# Get the actual size after sharding
hidden_size = q.shape[-1]
num_heads_local = hidden_size // self.head_dim
# Reshape to (batch, num_heads, seq_len, head_dim)
q = q.view(batch_size, seq_len, num_heads_local, self.head_dim).transpose(1, 2)
k = k.view(batch_size, seq_len, num_heads_local, self.head_dim).transpose(1, 2)
v = v.view(batch_size, seq_len, num_heads_local, self.head_dim).transpose(1, 2)
# Apply flex_attention
attn_output_raw = flex_attention(q, k, v, block_mask=block_mask)
# Reshape back to (batch, seq_len, hidden_size)
attn_output = (
attn_output_raw.transpose(1, 2)
.contiguous()
.view(batch_size, seq_len, hidden_size)
)
# Output projection
output = self.proj_out(attn_output)
return output
def strict_export_and_aot_export_joint_with_descriptors(model, args, kwargs=None):
if kwargs is None:
kwargs = {}
def strict_export_and_aot_export_joint_with_descriptors(model, inputs):
# needed for stric export
torch.utils._pytree.register_constant(DTensorSpec)
@ -131,43 +91,36 @@ def strict_export_and_aot_export_joint_with_descriptors(model, args, kwargs=None
install_free_tensors=True, inline_inbuilt_nn_modules=True
):
with torch._export.utils._disable_aten_to_metadata_assertions():
ep = torch.export.export(model, args, kwargs, strict=True)
ep = torch.export.export(model, (inputs,), strict=True)
# joint_gm produced here is missing the backward region, due to incompatiblility
# between ep.module() and aot_export_joint_with_descriptors.
# Keeping this here to show the issue.
return aot_export_joint_with_descriptors_alone(ep.module(), args, kwargs)
return aot_export_joint_with_descriptors_alone(ep.module(), inputs)
def graph_capture_and_aot_export_joint_with_descriptors_v2(model, args, kwargs=None):
if kwargs is None:
kwargs = {}
gm = dynamo_graph_capture_for_export(model)(*args, **kwargs)
def graph_capture_and_aot_export_joint_with_descriptors_v2(model, inputs):
gm = dynamo_graph_capture_for_export(model)(inputs)
fake_mode = gm.meta.get("fake_mode", None)
with tracing(TracingContext(fake_mode)):
return aot_export_joint_with_descriptors_alone(gm, args, kwargs)
return aot_export_joint_with_descriptors_alone(gm, inputs)
def graph_capture_and_aot_export_joint_with_descriptors(model, args, kwargs=None):
if kwargs is None:
kwargs = {}
def graph_capture_and_aot_export_joint_with_descriptors(model, inputs):
with torch._dynamo.config.patch(install_free_tensors=True):
# TODO: switch to use the official graph_capture API once it is ready
gm = _dynamo_graph_capture_for_export(model)(*args, **kwargs)
gm = _dynamo_graph_capture_for_export(model)(inputs)
fake_mode = gm.meta.get("fake_mode", None)
with tracing(TracingContext(fake_mode)):
return aot_export_joint_with_descriptors_alone(gm, args, kwargs)
return aot_export_joint_with_descriptors_alone(gm, inputs)
def aot_export_joint_with_descriptors_alone(model, args, kwargs=None):
if kwargs is None:
kwargs = {}
def aot_export_joint_with_descriptors_alone(model, inputs):
with contextlib.ExitStack() as stack:
joint_with_descriptors = aot_export_joint_with_descriptors(
stack,
model,
args,
kwargs,
(inputs,),
)
return joint_with_descriptors.graph_module
@ -215,8 +168,8 @@ class DTensorExportTest(TestCase):
}
tp_model = parallelize_module(model, mesh_2d["tp"], parallelize_plan)
inp = torch.rand(20, 10, device=self.device_type)
inputs = (distribute_tensor(inp, mesh_2d["tp"], placements=[Replicate()]),)
inputs = torch.rand(20, 10, device=self.device_type)
inputs = distribute_tensor(inputs, mesh_2d["tp"], placements=[Replicate()])
joint_gm = export_fn(tp_model, inputs)
fw_gm, bw_gm = min_cut_rematerialization_partition(
@ -399,10 +352,9 @@ class DTensorExportTest(TestCase):
}
tp_model = parallelize_module(model, mesh_2d["tp"], parallelize_plan)
inp = torch.rand(20, 10, device=self.device_type)
inp_dtensor = distribute_tensor(inp, mesh_2d["tp"], placements=[Replicate()])
torch._dynamo.mark_dynamic(inp_dtensor, 0, min=5, max=100)
inputs = (inp_dtensor,)
inputs = torch.rand(20, 10, device=self.device_type)
inputs = distribute_tensor(inputs, mesh_2d["tp"], placements=[Replicate()])
torch._dynamo.mark_dynamic(inputs, 0, min=5, max=100)
joint_gm = export_fn(tp_model, inputs)
@ -438,67 +390,15 @@ class DTensorExportTest(TestCase):
z = torch.randn(16, 16)
y_dtensor = distribute_tensor(y, device_mesh, placements=[Replicate()])
z_dtensor = DTensor.from_local(z, device_mesh, placements=[Partial()])
inputs = (x_dtensor, y_dtensor, z_dtensor)
# Run model to verify it works
output = model(*inputs)
output = model(x_dtensor, y_dtensor, z_dtensor)
with torch._dynamo.config.patch(install_free_tensors=True):
# TODO: switch to use the official graph_capture API once it is ready
gm = export_fn(model)(*inputs)
output_gm = gm(*inputs)
gm = export_fn(model)(x_dtensor, y_dtensor, z_dtensor)
output_gm = gm(x_dtensor, y_dtensor, z_dtensor)
self.assertEqual(output, output_gm)
def test_flex_attention_dtensor_export(self):
device_mesh = init_device_mesh(self.device_type, mesh_shape=(self.world_size,))
model = FlexAttentionModel(self.device_type)
# Parallelize the model: shard on head dimension
# proj_q, proj_k, proj_v are colwise parallel (output is sharded on head dimension)
# proj_out is rowwise parallel (input is sharded, output needs reduction)
parallelize_plan = {
"proj_q": ColwiseParallel(),
"proj_k": ColwiseParallel(),
"proj_v": ColwiseParallel(),
"proj_out": RowwiseParallel(),
}
tp_model = parallelize_module(model, device_mesh, parallelize_plan)
batch_size = 4
seq_len = 64
embed_dim = 16
num_heads = 8
# Input tensor replicated across all devices
inp = torch.randn(batch_size, seq_len, embed_dim, device=self.device_type)
inputs = (distribute_tensor(inp, device_mesh, placements=[Replicate()]),)
def causal_mask(b, h, q_idx, kv_idx):
return q_idx >= kv_idx
block_mask = create_block_mask(
causal_mask,
batch_size,
num_heads,
seq_len,
seq_len,
device=self.device_type,
)
flex_kwargs = {"block_mask": block_mask}
joint_gm = graph_capture_and_aot_export_joint_with_descriptors(
tp_model, inputs, flex_kwargs
)
self.assertTrue(
_count_op(joint_gm, torch.ops.higher_order.flex_attention),
1,
)
self.assertTrue(
_count_op(joint_gm, torch.ops.higher_order.flex_attention_backward),
2,
)
instantiate_parametrized_tests(DTensorExportTest)

View File

@ -13,6 +13,7 @@ from torch.distributed.tensor import (
distribute_module,
distribute_tensor,
DTensor,
Partial,
Replicate,
Shard,
)
@ -649,6 +650,41 @@ class DistMathOpsTest(DTensorTestBase):
self.assertEqual(len(comm_counts), 1)
self.assertEqual(comm_counts[funcol.all_gather_into_tensor], 1)
@with_comms
def test_vector_norm(self):
device_mesh = self.build_device_mesh()
grad = torch.randn(12, 8)
sharded_grad = distribute_tensor(grad, device_mesh, [Shard(0)])
# non-sharded op
out = torch.ops.aten.linalg_vector_norm(grad, 2)
# sharded op
sharded_out = torch.ops.aten.linalg_vector_norm(sharded_grad, 2)
self.assertEqual(sharded_out.full_tensor(), out)
@with_comms
def test_vector_norm_partial(self):
device_mesh = self.build_device_mesh()
rank = device_mesh.get_local_rank()
all_ranks = list(range(self.world_size))
local_grad = torch.tensor([rank, 1], dtype=torch.float32)
full_grad = torch.tensor([sum(all_ranks), self.world_size], dtype=torch.float32)
partial_grad = DTensor.from_local(local_grad, device_mesh, [Partial()])
# full result
out = torch.ops.aten.linalg_vector_norm(full_grad, 2)
# partial result
partial_out = torch.ops.aten.linalg_vector_norm(partial_grad, 2)
self.assertEqual(partial_out.full_tensor(), out)
@with_comms
def test_foreach_norm(self):
device_mesh = self.build_device_mesh()
@ -668,6 +704,33 @@ class DistMathOpsTest(DTensorTestBase):
for o, so in zip(out, sharded_out):
self.assertEqual(so.full_tensor(), o)
@with_comms
def test_foreach_norm_partial(self):
device_mesh = self.build_device_mesh()
rank = device_mesh.get_local_rank()
all_ranks = list(range(self.world_size))
local_grad0 = torch.tensor([rank, 1], dtype=torch.float32)
local_grad1 = torch.tensor([rank + 1, 2], dtype=torch.float32)
grad0 = torch.tensor([sum(all_ranks), self.world_size], dtype=torch.float32)
grad1 = torch.tensor(
[sum(all_ranks) + self.world_size, 2 * self.world_size], dtype=torch.float32
)
partial_grad0 = DTensor.from_local(local_grad0, device_mesh, [Partial()])
partial_grad1 = DTensor.from_local(local_grad1, device_mesh, [Partial()])
# full result
out = torch.ops.aten._foreach_norm([grad0, grad1], 2)
# partial result
partial_out = torch.ops.aten._foreach_norm([partial_grad0, partial_grad1], 2)
for o, po in zip(out, partial_out):
self.assertEqual(po.full_tensor(), o)
@with_comms
def test_foreach_norm_different_mesh(self):
mesh_shape = (2, self.world_size // 2)

View File

@ -7,6 +7,10 @@ import itertools
import unittest
import torch
from torch.distributed._local_tensor import (
maybe_disable_local_tensor_mode,
maybe_run_for_local_tensor,
)
from torch.distributed.device_mesh import init_device_mesh
from torch.distributed.tensor import (
DeviceMesh,
@ -29,7 +33,9 @@ from torch.testing._internal.common_utils import (
TEST_HPU,
)
from torch.testing._internal.distributed._tensor.common_dtensor import (
create_local_tensor_test_class,
DTensorTestBase,
map_local_tensor_for_rank,
with_comms,
)
from torch.utils._debug_mode import DebugMode
@ -163,7 +169,9 @@ class RedistributeTest(DTensorTestBase):
)
# make local tensor as the element of the corresponding chunked list
local_tensor = splitted_list[self.rank]
local_tensor = map_local_tensor_for_rank(
splitted_list, self.rank, lambda tl, r: tl[r]
)
replica_tensor = distribute_tensor(local_replica, device_mesh, replica_spec)
with comm_mode:
reshard_tensor = replica_tensor.redistribute(device_mesh, shard_spec)
@ -407,7 +415,7 @@ class RedistributeTest(DTensorTestBase):
def test_partial_to_shard(self, dtype):
device_mesh = self.build_device_mesh()
partial_spec = [Partial()]
my_rank = device_mesh.get_rank()
my_rank = self.rank
input_sizes_and_shard_dim = [
((self.world_size * 3, 3), 0),
@ -440,8 +448,13 @@ class RedistributeTest(DTensorTestBase):
for idx in range(self.world_size)
]
local_shape = list(input_size)
local_shape[shard_dim] = chunk_sizes[my_rank]
@maybe_run_for_local_tensor
def _compute_local_shape(rank) -> list[int]:
local_shape = list(input_size)
local_shape[shard_dim] = chunk_sizes[rank]
return local_shape
local_shape = _compute_local_shape(my_rank)
# test partial to shard, trigger reduce_scatter
with comm_mode:
@ -534,10 +547,12 @@ class RedistributeTest(DTensorTestBase):
1,
)
else:
self.assertEqual(
comm_mode.get_comm_counts()[funcol.all_gather_into_tensor],
1,
)
# TODO: Integrate local tensor with CommDebugMode
if not self.is_local_tensor_enabled:
self.assertEqual(
comm_mode.get_comm_counts()[funcol.all_gather_into_tensor],
1,
)
# test 2d device mesh
mesh_2d = DeviceMesh(
@ -586,7 +601,8 @@ class RedistributeTest(DTensorTestBase):
out_dt = sharded_dt.redistribute(mesh_2d, dst)
self.assertEqual(out_dt.placements, expected_dt.placements)
self.assertEqual(comm_mode.get_total_counts(), comm_counts_2d[idx])
if not self.is_local_tensor_enabled:
self.assertEqual(comm_mode.get_total_counts(), comm_counts_2d[idx])
local_out_dt = out_dt.to_local()
local_expected_dt = expected_dt.to_local()
@ -1027,23 +1043,27 @@ class DistributeWithDeviceOrderTest(DTensorTestBase):
def test_ordered_distribute_all_combination(self):
"""Exhaustively test all possible sharding combinations and verify correctness"""
torch.manual_seed(21)
mesh = init_device_mesh(self.device_type, (2, 2, 2))
input_tensor_shape = [
# even sharding
(16, 8),
(8, 16, 32),
(8, 32, 16, 16),
# uneven sharding with padding
(17, 5),
(13, 2, 13),
(33, 16, 8, 1),
]
with maybe_disable_local_tensor_mode():
mesh = init_device_mesh(self.device_type, (2, 2, 2))
input_tensor_shape = [
# even sharding
(16, 8),
(8, 16, 32),
(8, 32, 16, 16),
# uneven sharding with padding
(17, 5),
(13, 2, 13),
(33, 16, 8, 1),
]
# 1. Verify correctness of distribute_tensor from Tensor to DTensor.
for tensor_shape in input_tensor_shape:
input_data = torch.randn(tensor_shape, device=self.device_type)
tensor_rank = input_data.ndim
for shard_order in self.generate_shard_orders(mesh, tensor_rank):
with maybe_disable_local_tensor_mode():
shard_orders = self.generate_shard_orders(mesh, tensor_rank)
for shard_order in shard_orders:
sharded_dt = self.distribute_tensor(
input_data.clone(), mesh, placements=None, shard_order=shard_order
)
@ -1057,7 +1077,9 @@ class DistributeWithDeviceOrderTest(DTensorTestBase):
input_data = torch.randn(tensor_shape, device=self.device_type)
tensor_rank = input_data.ndim
prev_sharded_dt = None
for shard_order in self.generate_shard_orders(mesh, tensor_rank):
with maybe_disable_local_tensor_mode():
shard_orders = self.generate_shard_orders(mesh, tensor_rank)
for shard_order in shard_orders:
if prev_sharded_dt is None:
prev_sharded_dt = self.distribute_tensor(
input_data.clone(),
@ -1077,26 +1099,27 @@ class DistributeWithDeviceOrderTest(DTensorTestBase):
"""Test mixing Partial in the original placements and do redistribute."""
# This test takes 226s to complete on 8XA100...
torch.manual_seed(21)
mesh = init_device_mesh(self.device_type, (2, 2, 2))
input_tensor_shape = [
# even sharding
(16, 8),
(8, 16, 32),
# uneven sharding with padding
(17, 5),
(13, 2, 13),
(33, 16, 8, 1),
]
placement_choice = [
Shard(0),
Shard(1),
Shard(2),
Partial("sum"),
Partial("min"),
Replicate(),
]
# pick 3 for the 3D mesh
partial_placement_comb = list(itertools.combinations(placement_choice, 3))
with maybe_disable_local_tensor_mode():
mesh = init_device_mesh(self.device_type, (2, 2, 2))
input_tensor_shape = [
# even sharding
(16, 8),
(8, 16, 32),
# uneven sharding with padding
(17, 5),
(13, 2, 13),
(33, 16, 8, 1),
]
placement_choice = [
Shard(0),
Shard(1),
Shard(2),
Partial("sum"),
Partial("min"),
Replicate(),
]
# pick 3 for the 3D mesh
partial_placement_comb = list(itertools.combinations(placement_choice, 3))
def _is_valid_placement(placements, tensor_rank):
# Check if placements is valid for tensor with rank `tensor_rank`
@ -1112,7 +1135,9 @@ class DistributeWithDeviceOrderTest(DTensorTestBase):
continue
local_tensor = torch.randn(shape, device=self.device_type)
full_tensor = DTensor.from_local(local_tensor, mesh, placements)
for shard_order in self.generate_shard_orders(mesh, len(shape)):
with maybe_disable_local_tensor_mode():
shard_orders = self.generate_shard_orders(mesh, len(shape))
for shard_order in shard_orders:
sharded_dt = self.redistribute(
full_tensor, mesh, placements=None, shard_order=shard_order
)
@ -1163,5 +1188,18 @@ class DistributeWithDeviceOrderTest(DTensorTestBase):
self.assertEqual(x_ordered_dt.to_local(), x_strided_dt.to_local())
RedistributeTestWithLocalTensor = create_local_tensor_test_class(
RedistributeTest,
)
MultiDimRedistributeTestWithLocalTensor = create_local_tensor_test_class(
MultiDimRedistributeTest,
skipped_tests=["test_multi_dim_mesh"],
)
DistributeWithDeviceOrderTestWithLocalTensor = create_local_tensor_test_class(
DistributeWithDeviceOrderTest,
)
if __name__ == "__main__":
run_tests()

View File

@ -462,7 +462,9 @@ class DeviceMeshTestNDim(DTensorTestBase):
ep_mesh_2 = DeviceMesh(self.device_type, mesh_group_2)
ep_mesh = ep_mesh_1 if self.rank < self.world_size // 2 else ep_mesh_2
# ep_mesh is considered different from mesh_2d["TP"]
self.assertEqual(mesh_2d["TP"]._flatten_mesh_list, ep_mesh._flatten_mesh_list)
self.assertEqual(
mesh_2d["TP"].mesh.flatten().tolist(), ep_mesh.mesh.flatten().tolist()
)
self.assertEqual(mesh_2d["TP"]._layout, ep_mesh._layout)
self.assertEqual(mesh_2d["TP"].mesh.shape, ep_mesh.mesh.shape)
self.assertEqual(mesh_2d["TP"].device_type, ep_mesh.device_type)
@ -477,7 +479,7 @@ class DeviceMeshTestNDim(DTensorTestBase):
another_mesh_1 if self.rank < self.world_size // 2 else another_mesh_2
)
# another_mesh is considered the same as ep_mesh
self.assertEqual(ep_mesh._flatten_mesh_list, another_mesh._flatten_mesh_list)
self.assertEqual(ep_mesh._flatten_rank_map, another_mesh._flatten_rank_map)
self.assertEqual(ep_mesh._layout, another_mesh._layout)
self.assertEqual(ep_mesh.mesh.shape, another_mesh.mesh.shape)
self.assertEqual(ep_mesh.device_type, another_mesh.device_type)

View File

@ -1076,7 +1076,22 @@ class DictTests(torch._dynamo.test_case.TestCase):
def test_newly_constructed_default_dict(self):
def f(x):
d = defaultdict(list)
d[0] = 42
d[0] = [
42,
]
return x + 1, d
x = torch.ones(2)
ref = f(x)
res = torch.compile(f, backend="eager", fullgraph=True)(x)
self.assertEqual(ref, res)
@unittest.expectedFailure
def test_newly_constructed_default_dict_with_dict(self):
def f(x):
d = defaultdict(dict, {2: {"a": 1}})
d[0] = {"b": 2}
return x + 1, d
x = torch.ones(2)

View File

@ -747,7 +747,7 @@ class TestGuardSerialization(TestGuardSerializationBase):
):
self._test_serialization("NN_MODULE", fn, m, x)
def test_function_match(self):
def test_class_match(self):
def fn(x):
# usage of this context manager installs a FUNCTION_MATCH guard
with torch.no_grad():
@ -759,9 +759,9 @@ class TestGuardSerialization(TestGuardSerializationBase):
# we don't support FUNCTION_MATCH because it adds an ID_MATCH guard, and we don't
# support that in serialization
with self.assertRaisesRegex(
PackageError, "FUNCTION_MATCH guard cannot be serialized."
PackageError, "CLASS_MATCH guard cannot be serialized."
):
self._test_serialization("FUNCTION_MATCH", fn, x)
self._test_serialization("CLASS_MATCH", fn, x)
def test_closure_match(self):
def fn(x):
@ -957,12 +957,12 @@ class TestGuardSerialization(TestGuardSerializationBase):
self._test_check_fn(ref, loaded, {"x": torch.randn(3)}, True)
def fn(x):
# usage of this context manager installs a FUNCTION_MATCH guard
# usage of this context manager installs a CLASS_MATCH guard
with torch.no_grad():
y = x * 2
return y
ref, loaded = self._test_serialization("FUNCTION_MATCH", fn, torch.randn(3))
ref, loaded = self._test_serialization("CLASS_MATCH", fn, torch.randn(3))
self._test_check_fn(ref, loaded, {"x": torch.randn(3)}, True)
def test_dispatch_key_set_match(self):
@ -1467,7 +1467,8 @@ class TestGuardSerialization(TestGuardSerializationBase):
torch._dynamo.optimize(
package=package,
guard_filter_fn=lambda gs: [
x.guard_type not in ("CLOSURE_MATCH", "ID_MATCH") for x in gs
x.guard_type not in ("CLOSURE_MATCH", "ID_MATCH", "CLASS_MATCH")
for x in gs
],
)(foo)(ddp_model, x)
self.assertEqual(len(package._codes[foo.__code__].guarded_codes), 1)

View File

@ -245,8 +245,7 @@ due to:
Traceback (most recent call last):
File "test_logging.py", line N, in throw
raise AssertionError
torch._dynamo.exc.BackendCompilerFailed: backend='inductor' raised:
LoweringException: AssertionError:
torch._inductor.exc.InductorError: LoweringException: AssertionError:
target: aten.round.default
args[0]: TensorBox(StorageBox(
InputBuffer(name='primals_1', layout=FixedLayout('cpu', torch.float32, size=[1000, 1000], stride=[1000, 1]))

View File

@ -326,7 +326,8 @@ def add(x, y):
def guard_filter_fn(guards):
return [
guard.guard_type not in ("CLOSURE_MATCH", "FUNCTION_MATCH")
guard.guard_type
not in ("CLOSURE_MATCH", "FUNCTION_MATCH", "MODULE_MATCH")
for guard in guards
]

View File

@ -1,7 +1,6 @@
# Owner(s): ["module: dynamo"]
import functools
import unittest
import torch
import torch._inductor.test_case
@ -155,10 +154,6 @@ class RegionalInductorTests(torch._inductor.test_case.TestCase):
def test_invoke_subgraph_inner(self, serialize):
# Checks that the inductor regions are searched recursively.
# TODO: GraphPickler does not recompile nested subgraphs?
if serialize:
raise unittest.SkipTest("GraphPickler doesn't recompile nested subgraphs")
@torch.compiler.nested_compile_region
def gn(x):
with fx_traceback.annotate({"compile_with_inductor": 0}):
@ -184,12 +179,6 @@ class RegionalInductorTests(torch._inductor.test_case.TestCase):
@requires_cuda_and_triton
@parametrize("serialize", [False, True])
def test_flex_attention(self, serialize):
if serialize:
# TODO: Fixed in next PR
raise unittest.SkipTest(
"FlexAttentionBackward isn't marked cacheable even though it is"
)
def _squared(score, b, h, m, n):
return score * score
@ -229,11 +218,6 @@ class RegionalInductorTests(torch._inductor.test_case.TestCase):
@requires_cuda_and_triton
@parametrize("serialize", [False, True])
def test_selective_ac_flex(self, serialize):
if serialize:
raise unittest.SkipTest(
"FlexAttentionBackward isn't marked cacheable even though it is"
)
class FlexAttentionModule(torch.nn.Module):
def __init__(self, hidden_size, num_heads):
super().__init__()

View File

@ -55,7 +55,7 @@ torch.fx.node.Node.append(self, x: 'Node') -> None
torch.fx.node.Node.format_node(self, placeholder_names: Optional[List[str]] = None, maybe_return_typename: Optional[List[str]] = None, include_tensor_metadata: bool = False) -> Optional[str]
torch.fx.node.Node.insert_arg(self, idx: int, arg: torch.fx.node.Argument) -> None
torch.fx.node.Node.prepend(self, x: 'Node') -> None
torch.fx.node.Node.replace_all_uses_with(self, replace_with: 'Node', delete_user_cb: Callable[[Node], bool] = <function <lambda>>, propagate_meta: bool = False) -> List[Node]
torch.fx.node.Node.replace_all_uses_with(self, replace_with: 'Node', delete_user_cb: Optional[Callable[[Node], bool]] = None, propagate_meta: bool = False) -> List[Node]
torch.fx.node.Node.replace_input_with(self, old_input: 'Node', new_input: 'Node') -> None
torch.fx.node.Node.update_arg(self, idx: int, arg: torch.fx.node.Argument) -> None
torch.fx.node.Node.update_kwarg(self, key: str, arg: torch.fx.node.Argument) -> None

View File

@ -5734,141 +5734,6 @@ BlockMask(shape=(1,s1,s2048,s2048),ssparsity=46.88%,s
self.assertEqual(flex_output, sdpa_output, atol=1e-3, rtol=1e-3)
@supported_platform
def test_pytree_flatten_unflatten(self, device):
"""Test that BlockMask can be correctly flattened and unflattened using class methods."""
def causal_mask(b, h, q_idx, kv_idx):
return q_idx >= kv_idx
# Create a BlockMask with various attributes set
block_mask = create_block_mask(
causal_mask, B=2, H=4, Q_LEN=512, KV_LEN=512, device=device
)
# Flatten and unflatten using class methods
tensors, context = block_mask._flatten()
reconstructed_mask = BlockMask._unflatten(tensors, context)
# Verify the reconstructed mask has the same attributes
self.assertEqual(reconstructed_mask.shape, block_mask.shape)
self.assertEqual(reconstructed_mask.sparsity(), block_mask.sparsity())
# Verify all tensor attributes are equal (using _TENSOR_ATTRS)
for attr_name in BlockMask._TENSOR_ATTRS:
original_value = getattr(block_mask, attr_name)
reconstructed_value = getattr(reconstructed_mask, attr_name)
if original_value is None:
self.assertIsNone(
reconstructed_value,
f"Tensor attribute {attr_name} should be None but got {reconstructed_value}",
)
else:
self.assertIsInstance(
original_value,
torch.Tensor,
f"Expected {attr_name} to be a Tensor",
)
self.assertTrue(
torch.equal(original_value, reconstructed_value),
f"Tensor attribute {attr_name} not equal after reconstruction",
)
# Verify all context attributes are equal (using _CONTEXT_ATTRS)
for attr_name in BlockMask._CONTEXT_ATTRS:
original_value = getattr(block_mask, attr_name)
reconstructed_value = getattr(reconstructed_mask, attr_name)
self.assertEqual(
original_value,
reconstructed_value,
f"Context attribute {attr_name} not equal after reconstruction",
)
@supported_platform
def test_pytree_flatten_with_keys(self, device):
"""Test that BlockMask._flatten_with_keys works correctly for tracing."""
def causal_mask(b, h, q_idx, kv_idx):
return q_idx >= kv_idx
block_mask = create_block_mask(
causal_mask, B=2, H=4, Q_LEN=512, KV_LEN=512, device=device
)
tensors_with_keys, context_with_keys = block_mask._flatten_with_keys()
self.assertEqual(len(tensors_with_keys), len(BlockMask._TENSOR_ATTRS))
self.assertEqual(len(context_with_keys), len(BlockMask._CONTEXT_ATTRS))
from torch.utils._pytree import GetAttrKey
for key, tensor in tensors_with_keys:
self.assertIsInstance(key, GetAttrKey)
self.assertIsNotNone(key)
for key, value in context_with_keys:
self.assertIsInstance(key, GetAttrKey)
self.assertIsNotNone(key)
@supported_platform
def test_pytree_preserves_new_attributes(self, device):
"""
Test that BlockMask._TENSOR_ATTRS and _CONTEXT_ATTRS are correctly defined
and that flatten/unflatten preserves all attributes in these lists.
"""
def causal_mask(b, h, q_idx, kv_idx):
return q_idx >= kv_idx
block_mask = create_block_mask(
causal_mask, B=2, H=4, Q_LEN=512, KV_LEN=512, device=device
)
# Flatten and unflatten using class methods
tensors, context = block_mask._flatten()
reconstructed_mask = BlockMask._unflatten(tensors, context)
# Verify the number of tensors and context values matches the attribute lists
self.assertEqual(
len(tensors),
len(BlockMask._TENSOR_ATTRS),
"Number of tensors should match _TENSOR_ATTRS length",
)
self.assertEqual(
len(context),
len(BlockMask._CONTEXT_ATTRS),
"Number of context values should match _CONTEXT_ATTRS length",
)
# Verify all attributes from the lists exist and are equal after reconstruction
for attr_name in BlockMask._TENSOR_ATTRS + BlockMask._CONTEXT_ATTRS:
self.assertTrue(
hasattr(reconstructed_mask, attr_name),
f"Reconstructed mask missing attribute: {attr_name}",
)
original_value = getattr(block_mask, attr_name)
reconstructed_value = getattr(reconstructed_mask, attr_name)
if isinstance(original_value, torch.Tensor):
self.assertTrue(
torch.equal(original_value, reconstructed_value),
f"Tensor attribute {attr_name} not equal after reconstruction",
)
elif original_value is None:
self.assertIsNone(
reconstructed_value,
f"Attribute {attr_name} should be None but got {reconstructed_value}",
)
else:
self.assertEqual(
original_value,
reconstructed_value,
f"Attribute {attr_name} not equal after reconstruction",
)
@large_tensor_test_class("2GB", device=test_device[0])
class TestPagedAttention(InductorTestCase):
@ -6753,7 +6618,7 @@ class TestLearnableBiases(InductorTestCase):
)
# Error in backwards
with self.assertRaisesRegex(
torch._inductor.exc.LoweringException,
torch._inductor.exc.InductorError,
"Using multiple indexing operations on the same tensor that requires gradients",
):
self._check_outputs_and_grads(

View File

@ -294,7 +294,6 @@ inductor_expected_failures_single_sample["xpu"] = {
i32,
i64,
}, # align with cuda.
"linalg.eig": {f32, f64},
("linalg.pinv", "singular"): {f64},
# could not create a primitive
"addmv": {f64},

View File

@ -0,0 +1,53 @@
# Owner(s): ["oncall: jit"]
import unittest
import torch
from torch.testing._internal.common_utils import raise_on_run_directly
class TestConcreteModuleTypeFindSubmodule(unittest.TestCase):
def test_error_message_includes_submodule_name(self):
class ChildModule(torch.nn.Module):
def __init__(self):
super().__init__()
self.linear = torch.nn.Linear(5, 3)
def forward(self, x):
return self.linear(x)
class ParentModule(torch.nn.Module):
def __init__(self):
super().__init__()
self.existing_child = ChildModule()
def forward(self, x):
return self.existing_child(x)
module = ParentModule()
scripted_module = torch.jit.script(module)
self.assertIsNotNone(scripted_module.existing_child)
# Now try to trigger the error by accessing a non-existent submodule
# through the internal ConcreteModuleType mechanism. This happens
# when the TorchScript compiler tries to resolve submodule references.
class BrokenModule(torch.nn.Module):
def __init__(self):
super().__init__()
self.parent = ParentModule()
def forward(self, x):
return self.parent.missing_submodule(x)
broken_module = BrokenModule()
with self.assertRaises(RuntimeError) as context:
torch.jit.script(broken_module)
error_msg = str(context.exception)
self.assertIn("missing_submodule", error_msg.lower())
if __name__ == "__main__":
raise_on_run_directly("test/test_jit.py")

View File

@ -238,7 +238,7 @@ class TestBasicGEMM(TestCase):
)
@precisionOverride({torch.float: 1e-4, torch.double: 1e-6, torch.half: 1e-1})
@dtypes(torch.float32, torch.half, torch.double)
@dtypes(torch.float32, torch.half, torch.double, torch.complex64)
@tf32_on_and_off(0.05)
def test_addmm(self, device, dtype):
self._test_addmm_impl(torch.addmm, None, device, dtype)
@ -313,6 +313,7 @@ class TestBasicGEMM(TestCase):
torch.half,
torch.float32,
torch.float64,
torch.complex64,
)
@tf32_on_and_off(0.05)
def test_mm(self, device, dtype):
@ -416,7 +417,7 @@ class TestBasicGEMM(TestCase):
_test_mm(n, m, p, dtype, genf)
@precisionOverride({torch.half: 0.05, torch.bfloat16: 0.05})
@dtypes(torch.float32, torch.bfloat16, torch.half, torch.float64)
@dtypes(torch.float32, torch.bfloat16, torch.half, torch.float64, torch.complex64)
@tf32_on_and_off(0.05)
def test_bmm(self, device, dtype):
batch_sizes = [1, 10]
@ -533,7 +534,7 @@ class TestBasicGEMM(TestCase):
self.assertEqual(res7, ref)
@precisionOverride({torch.half: 0.05, torch.bfloat16: 0.05})
@dtypes(torch.float64, torch.float32, torch.bfloat16, torch.half)
@dtypes(torch.float64, torch.float32, torch.bfloat16, torch.half, torch.complex64)
@tf32_on_and_off(0.005)
def test_addbmm(self, device, dtype):
num_batches = 2
@ -637,7 +638,7 @@ class TestBasicGEMM(TestCase):
self._test_addbmm_baddbmm("addbmm", b1, b2, ref, out_tensor)
@precisionOverride({torch.half: 0.1, torch.bfloat16: 0.5, torch.float64: 1e-6})
@dtypes(torch.float64, torch.float32, torch.bfloat16, torch.half)
@dtypes(torch.float64, torch.float32, torch.bfloat16, torch.half, torch.complex64)
@tf32_on_and_off(0.01)
def test_baddbmm(self, device, dtype):
num_batches = 10

2
third_party/xpu.txt vendored
View File

@ -1 +1 @@
ce9db15136c5e8ba1b51710aae574ce4791c5d73
30dcaa83183b189b00dc827fb39234714fe4e46d

View File

@ -863,7 +863,7 @@ static PyObject* THP${op}_${name}_getter(THPCppFunction *self, void *_unused) {
saved_variables.append(f"{type.cpp_type()} {name};")
if type in MISC_GETTER_DEFS:
# pyrefly: ignore # index-error
# pyrefly: ignore [index-error]
getter_def, body = MISC_GETTER_DEFS[type]
getter_definitions.append(
getter_def.substitute(op=info.op, name=name, body=body)
@ -1034,7 +1034,7 @@ static PyObject* THP${op}_${name}_getter(THPCppFunction *self, void *_unused) {
unpack_ivalues = []
for typ, name in zip(apply_functional_args_ref_types, apply_functional_args):
typ = typ.removesuffix("&")
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
unpack_ivalues.append(f"auto {name} = packed_args.unpack<{typ}>();")
schema_args = [f"std::array<bool, {len(input_name_to_idx)}>"]

View File

@ -182,7 +182,7 @@ def format_trace_inputs(f: NativeFunction) -> str:
ADD_TRACE_INPUT.substitute(
name=f.func.arguments.out[i].name, input=f.func.arguments.out[i].name
)
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
for i in range(num_out_args)
]

View File

@ -1495,7 +1495,7 @@ def emit_body(
else:
expr = f"SavedVariable({var}, {str(is_output).lower()})"
if foreacharg is not None and "original_selfs" not in expr:
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
expr = expr.replace(src_name, name_in_expr)
elif (
type == BaseCType(tensorListT)
@ -1845,14 +1845,14 @@ def emit_body(
)
)
cur_derivative_conditions.append(
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
FW_DERIVATIVE_CHECK_TEMPLATE.substitute(
req_inp=inp_name + "[i]"
)
)
else:
cur_derivative_conditions.append(
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
FW_DERIVATIVE_CHECK_TEMPLATE.substitute(req_inp=inp_name)
)
@ -1923,7 +1923,7 @@ def emit_body(
unpacked_arguments += FW_DERIVATIVE_DEFINED_GRAD_TEMPLATE.substitute(
inp_name="original_self",
inp="original_self" + input_suffix,
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
zeros_fn=zeros_fn,
)
unpacked_arguments += FW_DERIVATIVE_DEFINED_PRIMAL_TEMPLATE.substitute(

View File

@ -95,11 +95,11 @@ def add_view_copy_derivatives(
else:
break
# prefer manually-defined derivatives if any
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
if len(view_copy_differentiability_infos) > 0 and fn_schema not in infos:
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
assert fn_schema is not None
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
view_infos[fn_schema] = view_copy_differentiability_infos
infos.update(view_infos)
@ -401,7 +401,7 @@ def postprocess_forward_derivatives(
for arg_name in all_arg_names:
if arg_name in diff_arg_names:
arg_name = arg_name + "_t"
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
new_args.append(arg_name)
# TODO we are trolling
@ -942,7 +942,7 @@ def saved_variables(
+ f".sym_strides(), which returned a c10::SymIntArrayRef. formula={formula}"
)
for nctype in nctypes:
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
name = (
nctype.name.name if isinstance(nctype.name, SpecialArgName) else nctype.name
)
@ -952,7 +952,7 @@ def saved_variables(
def repl(m: re.Match[str]) -> str:
suffix: str = (
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
info["suffix"](m) if callable(info["suffix"]) else info["suffix"]
)
expr: str = info["expr"](name) if "expr" in info else m.group(0)

View File

@ -67,7 +67,7 @@ def is_intrested_file(
# ignore files that are not belong to pytorch
if platform == TestPlatform.OSS:
# pyrefly: ignore # import-error
# pyrefly: ignore [import-error]
from package.oss.utils import get_pytorch_folder
if not file_path.startswith(get_pytorch_folder()):

View File

@ -24,7 +24,7 @@ def report_download_progress(
file_size: int,
) -> None:
if file_size != -1:
# pyrefly: ignore # no-matching-overload
# pyrefly: ignore [no-matching-overload]
percent = min(1, (chunk_number * chunk_size) / file_size)
bar = "#" * int(64 * percent)
sys.stdout.write(f"\r0% |{bar:<64}| {int(percent * 100)}%")

View File

@ -105,10 +105,10 @@ def extract_info_from_keyword(source: str, kw: ast.keyword) -> Any:
evaluated_context = []
for value in kw.value.values:
if isinstance(value, ast.FormattedValue):
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
evaluated_context.append(f"{{{ast.unparse(value.value)}}}")
elif isinstance(value, ast.Constant):
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
evaluated_context.append(value.value)
return "".join(evaluated_context)
else:
@ -154,7 +154,7 @@ def find_unimplemented_v2_calls(
for kw in node.keywords:
if kw.arg in info:
# pyrefly: ignore # unsupported-operation
# pyrefly: ignore [unsupported-operation]
info[kw.arg] = extract_info_from_keyword(source, kw)
if info["gb_type"] is None:

View File

@ -219,7 +219,6 @@ class DefaultFuzzTemplate(FuzzTemplate):
# Neural network operations
"torch.nn.functional.embedding",
"torch.nn.functional.linear",
"torch.nn.functional.scaled_dot_product_attention",
# Activation functions
"torch.nn.functional.relu",
"torch.nn.functional.leaky_relu",

View File

@ -72,21 +72,6 @@ IGNORE_PATTERNS: list[re.Pattern] = [
re.compile(
r"dimensionality of sizes \(0\) must match dimensionality of strides \(1\)"
), # https://github.com/pytorch/pytorch/issues/164814
re.compile(
r"self and mat2 must have the same dtype"
), # https://github.com/pytorch/pytorch/issues/165718
re.compile(
r"free\(\): invalid next size \(fast\)"
), # TODO: figure out why sometimes heap metadata gets corrupted on program exit (checks actually pass successfully)
re.compile(
r'assert "int" in str\(indices\.get_dtype\(\)\)'
), # https://github.com/pytorch/pytorch/issues/166042
re.compile(
r'self\.shape_env\.guard_or_defer_runtime_assert\(expr, "guard_equals"\)'
), # https://github.com/pytorch/pytorch/issues/166245
re.compile(
r"assert len\(self\.stride\) == len\(order\)"
), # https://github.com/pytorch/pytorch/issues/166270
# Add more patterns here as needed, e.g.:
# re.compile(r"Some other error message"),
]
@ -311,7 +296,7 @@ def run_multi_process_fuzzer(
)
def write_func(msg):
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
pbar.write(msg)
else:
persist_print("Progress: (install tqdm for better progress bar)")
@ -606,7 +591,7 @@ def run_until_failure(
pbar.set_postfix_str(f"{total_successful}/{total_ignored}")
def write_func(msg):
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
pbar.write(msg)
else:
pbar = None

View File

@ -23,7 +23,6 @@ from torchfuzz.operators.nn_functional import (
LayerNormOperator,
LinearOperator,
ReLUOperator,
ScaledDotProductAttentionOperator,
SoftmaxOperator,
)
from torchfuzz.operators.registry import (
@ -78,7 +77,6 @@ __all__ = [
"EmbeddingOperator",
"LinearOperator",
"ReLUOperator",
"ScaledDotProductAttentionOperator",
"SoftmaxOperator",
"DropoutOperator",
"LayerNormOperator",

View File

@ -111,7 +111,7 @@ class ConstantOperator(Operator):
]:
# Clamp integer values to [0, 3] to avoid index overflow in multiplication
# Even with multiplication, indices should stay in reasonable range
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
fill_value = max(0, min(3, abs(fill_value)))
tensor_creation = (

View File

@ -15,8 +15,14 @@ from torchfuzz.tensor_fuzzer import Spec, TensorSpec
class MatrixMultiplyOperator(Operator):
"""Base class for matrix multiplication operations."""
def __init__(self, name: str):
def __init__(self, name: str, torch_op: str):
super().__init__(name)
self._torch_op = torch_op
@property
def torch_op_name(self) -> Optional[str]:
"""Return the torch operation name."""
return self._torch_op
def can_produce(self, output_spec: Spec) -> bool:
"""Matrix multiply operations can produce float/complex tensors of dimension >= 2."""
@ -41,6 +47,12 @@ class MatrixMultiplyOperator(Operator):
def _get_compatible_dtype(self, output_dtype):
"""Get a compatible dtype for matrix multiplication."""
# For matrix multiplication, we need to be flexible with input dtypes
# since earlier operations may have performed type promotion.
# We'll let the fuzzer generate whatever dtypes result from earlier operations
# and rely on the operation graph to ensure compatibility.
# Return the output dtype as a starting point, but this may be overridden
# by the actual tensor specs generated by the fuzzer.
return [output_dtype, output_dtype]
@ -48,14 +60,9 @@ class MMOperator(MatrixMultiplyOperator):
"""Operator for matrix multiplication (torch.mm)."""
def __init__(self):
super().__init__("mm")
super().__init__("mm", "torch.mm")
self.weight = 5.0
@property
def torch_op_name(self) -> Optional[str]:
"""Return the torch operation name."""
return "torch.mm"
def can_produce(self, output_spec: Spec) -> bool:
"""MM requires exactly 2D tensors."""
if not isinstance(output_spec, TensorSpec):
@ -89,6 +96,7 @@ class MMOperator(MatrixMultiplyOperator):
# Choose a random inner dimension k
k = random.randint(1, 16)
# Get compatible dtypes
dtypes = self._get_compatible_dtype(output_spec.dtype)
# First tensor: [m, k]
@ -133,14 +141,9 @@ class AddmmOperator(MatrixMultiplyOperator):
"""Operator for additive matrix multiplication (torch.addmm)."""
def __init__(self):
super().__init__("addmm")
super().__init__("addmm", "torch.addmm")
self.weight = 5.0
@property
def torch_op_name(self) -> Optional[str]:
"""Return the torch operation name."""
return "torch.addmm"
def can_produce(self, output_spec: Spec) -> bool:
"""Addmm requires exactly 2D tensors."""
if not isinstance(output_spec, TensorSpec):
@ -174,6 +177,7 @@ class AddmmOperator(MatrixMultiplyOperator):
# Choose a random inner dimension k
k = random.randint(1, 16)
# Get compatible dtypes
dtypes = self._get_compatible_dtype(output_spec.dtype)
# Bias tensor: [m, n] (same shape as output)
@ -226,14 +230,9 @@ class BmmOperator(MatrixMultiplyOperator):
"""Operator for batch matrix multiplication (torch.bmm)."""
def __init__(self):
super().__init__("bmm")
super().__init__("bmm", "torch.bmm")
self.weight = 5.0
@property
def torch_op_name(self) -> Optional[str]:
"""Return the torch operation name."""
return "torch.bmm"
def can_produce(self, output_spec: Spec) -> bool:
"""Batch matrix multiply requires 3D tensors."""
if not isinstance(output_spec, TensorSpec):
@ -267,6 +266,7 @@ class BmmOperator(MatrixMultiplyOperator):
# Choose a random inner dimension k
k = random.randint(1, 16)
# Get compatible dtypes
dtypes = self._get_compatible_dtype(output_spec.dtype)
# First tensor: [b, m, k]
@ -311,14 +311,9 @@ class MatmulOperator(MatrixMultiplyOperator):
"""Operator for general matrix multiplication (torch.matmul)."""
def __init__(self):
super().__init__("matmul")
super().__init__("matmul", "torch.matmul")
self.weight = 500.0
@property
def torch_op_name(self) -> Optional[str]:
"""Return the torch operation name."""
return "torch.matmul"
def can_produce(self, output_spec: Spec) -> bool:
"""Matmul can handle various tensor dimensions >= 1."""
if not isinstance(output_spec, TensorSpec):
@ -348,6 +343,7 @@ class MatmulOperator(MatrixMultiplyOperator):
output_size = output_spec.size
output_dims = len(output_size)
# Get compatible dtypes
dtypes = self._get_compatible_dtype(output_spec.dtype)
if output_dims == 1:

View File

@ -1,6 +1,5 @@
"""Neural network functional operator implementations."""
import math
import random
from typing import Optional
@ -753,17 +752,6 @@ class GroupNormOperator(Operator):
# GroupNorm needs at least 2 dimensions (batch, channels)
if len(output_spec.size) < 2:
return False
# GroupNorm requires more than 1 value per channel
# For shape (N, C, *), num_values_per_channel = N * prod(*)
# We need N * prod(*) > 1
batch_size = output_spec.size[0]
spatial_size = math.prod(output_spec.size[2:])
num_values_per_channel = batch_size * spatial_size
if num_values_per_channel <= 1:
return False
return is_float_dtype(output_spec.dtype)
def fuzz_inputs_specs(self, output_spec: Spec) -> list[Spec]:
@ -963,221 +951,3 @@ class SiLUOperator(Operator):
input_name = input_names[0]
return f"{output_name} = torch.nn.functional.silu({input_name})"
class ScaledDotProductAttentionOperator(Operator):
"""Operator for torch.nn.functional.scaled_dot_product_attention."""
def __init__(self):
super().__init__("torch.nn.functional.scaled_dot_product_attention")
@property
def torch_op_name(self) -> Optional[str]:
"""Return the torch operation name."""
return "torch.nn.functional.scaled_dot_product_attention"
def can_produce(self, output_spec: Spec) -> bool:
"""Scaled dot product attention can produce tensor outputs with floating point dtypes."""
if not isinstance(output_spec, TensorSpec):
return False
# SDPA needs at least 3 dimensions (batch, seq_len, embed_dim)
if len(output_spec.size) < 3:
return False
return is_float_dtype(output_spec.dtype)
def fuzz_inputs_specs(self, output_spec: Spec) -> list[Spec]:
"""Generate input specs for scaled_dot_product_attention.
SDPA requires:
- query: (batch, seq_len, embed_dim) or (batch, num_heads, seq_len, head_dim)
- key: (batch, seq_len, embed_dim) or (batch, num_heads, seq_len_kv, head_dim)
- value: (batch, seq_len, embed_dim) or (batch, num_heads, seq_len_kv, head_dim)
Output shape matches query shape.
"""
if not isinstance(output_spec, TensorSpec):
raise ValueError(
"ScaledDotProductAttentionOperator can only produce TensorSpec outputs"
)
if len(output_spec.size) < 3:
raise ValueError("SDPA output must have at least 3 dimensions")
# Query has the same shape as output
query_spec = TensorSpec(
size=output_spec.size, stride=output_spec.stride, dtype=output_spec.dtype
)
# Key and value: match query shape for simplicity
# In practice, seq_len for key/value can differ, but we'll keep it simple
key_spec = TensorSpec(
size=output_spec.size, stride=output_spec.stride, dtype=output_spec.dtype
)
value_spec = TensorSpec(
size=output_spec.size, stride=output_spec.stride, dtype=output_spec.dtype
)
return [query_spec, key_spec, value_spec]
def codegen(
self, output_name: str, input_names: list[str], output_spec: Spec
) -> str:
"""Generate code for scaled_dot_product_attention operation."""
if len(input_names) != 3:
raise ValueError("SDPA requires exactly 3 inputs: query, key, value")
# Ensure dtype compatibility by converting all inputs to the expected output dtype
target_dtype = str(output_spec.dtype)
query_name, key_name, value_name = input_names
return f"{output_name} = torch.nn.functional.scaled_dot_product_attention({query_name}.to({target_dtype}), {key_name}.to({target_dtype}), {value_name}.to({target_dtype}))"
class MultiHeadAttentionForwardOperator(Operator):
"""Operator for torch.nn.functional.multi_head_attention_forward."""
def __init__(self):
super().__init__("torch.nn.functional.multi_head_attention_forward")
@property
def torch_op_name(self) -> Optional[str]:
"""Return the torch operation name."""
return "torch.nn.functional.multi_head_attention_forward"
def can_produce(self, output_spec: Spec) -> bool:
"""Multi-head attention forward can produce tensor outputs with floating point dtypes."""
if not isinstance(output_spec, TensorSpec):
return False
# MHA needs at least 3 dimensions (seq_len, batch, embed_dim)
if len(output_spec.size) < 3:
return False
# MHA cannot handle 0-sized dimensions (seq_len, batch, or embed_dim must be > 0)
if any(dim == 0 for dim in output_spec.size):
return False
return is_float_dtype(output_spec.dtype)
def fuzz_inputs_specs(self, output_spec: Spec) -> list[Spec]:
"""Generate input specs for multi_head_attention_forward.
MHA requires:
- query, key, value: (seq_len, batch, embed_dim)
- in_proj_weight: (3*embed_dim, embed_dim) for combined QKV projection
- in_proj_bias: (3*embed_dim,) optional
- out_proj_weight: (embed_dim, embed_dim)
- out_proj_bias: (embed_dim,) optional
For simplicity, we'll use the combined in_proj_weight path.
IMPORTANT: The order of optional parameters matters for codegen!
We must ensure that when we have 6 inputs, they are in the order:
query, key, value, in_proj_weight, in_proj_bias, out_proj_weight
NOT: query, key, value, in_proj_weight, out_proj_weight, out_proj_bias
"""
if not isinstance(output_spec, TensorSpec):
raise ValueError(
"MultiHeadAttentionForwardOperator can only produce TensorSpec outputs"
)
if len(output_spec.size) < 3:
raise ValueError("MHA output must have at least 3 dimensions")
# Output shape: (seq_len, batch, embed_dim)
seq_len, batch, embed_dim = output_spec.size[:3]
# Query, key, value have the same shape as output
query_spec = TensorSpec(
size=output_spec.size, stride=output_spec.stride, dtype=output_spec.dtype
)
key_spec = TensorSpec(
size=output_spec.size, stride=output_spec.stride, dtype=output_spec.dtype
)
value_spec = TensorSpec(
size=output_spec.size, stride=output_spec.stride, dtype=output_spec.dtype
)
# in_proj_weight: (3*embed_dim, embed_dim)
in_proj_weight_spec = TensorSpec(
size=(3 * embed_dim, embed_dim),
stride=(embed_dim, 1),
dtype=output_spec.dtype,
)
# out_proj_weight: (embed_dim, embed_dim)
out_proj_weight_spec = TensorSpec(
size=(embed_dim, embed_dim),
stride=(embed_dim, 1),
dtype=output_spec.dtype,
)
# For simplicity and correctness, always generate all required tensors
# This avoids ambiguity in the codegen about which optional parameters are present
# We'll use a simplified signature: query, key, value, in_proj_weight, out_proj_weight only
specs = [
query_spec,
key_spec,
value_spec,
in_proj_weight_spec,
out_proj_weight_spec,
]
from typing import cast
return cast(list[Spec], specs)
def _calculate_stride(self, size):
"""Calculate stride for a given size."""
if not size:
return ()
stride = []
current_stride = 1
for dim_size in reversed(size):
stride.append(current_stride)
current_stride *= dim_size
return tuple(reversed(stride))
def codegen(
self, output_name: str, input_names: list[str], output_spec: Spec
) -> str:
"""Generate code for multi_head_attention_forward operation."""
if len(input_names) != 5:
raise ValueError(
"MHA requires exactly 5 inputs: query, key, value, in_proj_weight, out_proj_weight"
)
if not isinstance(output_spec, TensorSpec):
raise ValueError(
"MultiHeadAttentionForwardOperator can only produce TensorSpec outputs"
)
target_dtype = str(output_spec.dtype)
embed_dim = output_spec.size[-1]
# Determine number of heads (must divide embed_dim evenly)
# Common choices: 8, 4, 2, 1
possible_heads = [h for h in [8, 4, 2, 1] if embed_dim % h == 0]
num_heads = possible_heads[0] if possible_heads else 1
query_name = input_names[0]
key_name = input_names[1]
value_name = input_names[2]
in_proj_weight_name = input_names[3]
out_proj_weight_name = input_names[4]
# Build the function call without optional biases
code = f"""{output_name}, _ = torch.nn.functional.multi_head_attention_forward(
{query_name}.to({target_dtype}),
{key_name}.to({target_dtype}),
{value_name}.to({target_dtype}),
{embed_dim},
{num_heads},
{in_proj_weight_name}.to({target_dtype}),
None, # in_proj_bias
None, # bias_k
None, # bias_v
False, # add_zero_attn
0.0, # dropout_p (no dropout for testing)
{out_proj_weight_name}.to({target_dtype}),
None, # out_proj_bias
training=False, # Use eval mode for deterministic behavior
need_weights=False, # Don't compute attention weights for performance
)"""
return code

View File

@ -32,7 +32,6 @@ from torchfuzz.operators.nn_functional import (
LinearOperator,
ReLUOperator,
RMSNormOperator,
ScaledDotProductAttentionOperator,
SigmoidOperator,
SiLUOperator,
SoftmaxOperator,
@ -102,7 +101,6 @@ class OperatorRegistry:
# Neural network functional operators
self.register(EmbeddingOperator())
self.register(LinearOperator())
self.register(ScaledDotProductAttentionOperator())
# Activation functions
self.register(ReLUOperator())

View File

@ -1,6 +1,7 @@
"""Tensor pointwise operator implementation."""
import random
from typing import Optional
import torch
@ -16,10 +17,16 @@ from torchfuzz.type_promotion import (
class PointwiseOperator(Operator):
"""Base class for element-wise pointwise operations."""
def __init__(self, name: str, symbol: str):
def __init__(self, name: str, torch_op: str, symbol: str):
super().__init__(name)
self._torch_op = torch_op
self.symbol = symbol
@property
def torch_op_name(self) -> Optional[str]:
"""Return the torch operation name."""
return self._torch_op
def can_produce(self, output_spec: Spec) -> bool:
"""Tensor pointwise operations can produce tensors but not scalars."""
if isinstance(output_spec, TensorSpec) and output_spec.dtype == torch.bool:
@ -67,7 +74,9 @@ class PointwiseOperator(Operator):
) -> str:
"""Generate code for pointwise operation."""
if len(input_names) == 2:
return f"{output_name} = {self.torch_op_name}({input_names[0]}, {input_names[1]})"
return (
f"{output_name} = {self._torch_op}({input_names[0]}, {input_names[1]})"
)
else:
# Chain operations using symbols for readability
expr = f" {self.symbol} ".join(input_names)
@ -78,42 +87,26 @@ class AddOperator(PointwiseOperator):
"""Operator for element-wise addition."""
def __init__(self, weight: float = 1.0):
super().__init__("add", "+")
super().__init__("add", "torch.add", "+")
self.weight = float(weight)
@property
def torch_op_name(self) -> str:
return "torch.add"
class MulOperator(PointwiseOperator):
"""Operator for element-wise multiplication."""
def __init__(self):
super().__init__("mul", "*")
@property
def torch_op_name(self) -> str:
return "torch.mul"
super().__init__("mul", "torch.mul", "*")
class SubOperator(PointwiseOperator):
"""Operator for element-wise subtraction."""
def __init__(self):
super().__init__("sub", "-")
@property
def torch_op_name(self) -> str:
return "torch.sub"
super().__init__("sub", "torch.sub", "-")
class DivOperator(PointwiseOperator):
"""Operator for element-wise division."""
def __init__(self):
super().__init__("div", "/")
@property
def torch_op_name(self) -> str:
return "torch.div"
super().__init__("div", "torch.div", "/")

View File

@ -78,22 +78,22 @@ class JobConfig:
def parse_args(
self: "JobConfig", args: Optional[Sequence[str]]
) -> argparse.Namespace:
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
args = self.parser.parse_args(args)
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
if args.selected_ranks is not None:
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
assert args.just_print_entries, (
"Not support selecting ranks without printing entries"
)
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
if args.pg_filters is not None:
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
assert args.just_print_entries, (
"Not support selecting pg filters without printing entries"
)
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
if args.verbose:
logger.set_log_level(logging.DEBUG)
# pyrefly: ignore # bad-return
# pyrefly: ignore [bad-return]
return args

View File

@ -41,7 +41,7 @@ def format_frame(frame: dict[str, str]) -> str:
def format_frames(frames: list[dict[str, str]]) -> str:
formatted_frames = []
for frame in frames:
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
formatted_frames.append(format_frame(frame))
return "\n".join(formatted_frames)
@ -696,7 +696,7 @@ def check_version(version_by_ranks: dict[str, str], version: str) -> None:
def get_version_detail(version: str) -> tuple[int, int]:
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
version = version.split(".")
assert len(version) == 2, f"Invalid version {version}"
major, minor = map(int, version)

View File

@ -40,17 +40,17 @@ from tools.flight_recorder.components.types import types
def main(args: Optional[Sequence[str]] = None) -> None:
config = JobConfig()
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
args = config.parse_args(args)
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
assert args.trace_dir, "Trace directory trace_dir is required"
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
details, version = read_dir(args)
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
db = build_db(details, args, version)
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
if args.output:
# pyrefly: ignore # no-matching-overload
# pyrefly: ignore [no-matching-overload]
with open(args.output, "wb") as f:
pickle.dump((types, db), f)

View File

@ -34,7 +34,7 @@ class TensorRepr(gdb.Command): # type: ignore[misc, no-any-unimported]
on it.
"""
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
__doc__ = textwrap.dedent(__doc__).strip()
def __init__(self) -> None:

View File

@ -118,7 +118,7 @@ def extract_filename(path: str, keep_ext: bool = True) -> Any:
# https://gist.github.com/pypt/94d747fe5180851196eb
# pyrefly: ignore # invalid-inheritance
# pyrefly: ignore [invalid-inheritance]
class UniqueKeyLoader(Loader):
def construct_mapping(self, node, deep=False): # type: ignore[no-untyped-def]
if not isinstance(node, MappingNode):
@ -234,7 +234,7 @@ def preprocess(
last_indent = input_indent
while blank_lines != 0:
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
python_lines.append(python_indent + "print(file=OUT_STREAM)")
blank_lines -= 1
@ -669,7 +669,7 @@ def generateShaderDispatchStr(shader_info: ShaderInfo, name: str) -> str:
" ",
)
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
return shader_dispatch_str
@ -684,18 +684,18 @@ def genCppFiles(
name = getName(spvPath).replace("_spv", "")
sizeBytes, spv_bin_str = generateSpvBinStr(spvPath, name)
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
spv_bin_strs.append(spv_bin_str)
shader_info = getShaderInfo(srcPath)
register_shader_info_strs.append(
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
generateShaderInfoStr(shader_info, name, sizeBytes)
)
if shader_info.register_for is not None:
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
shader_registry_strs.append(generateShaderDispatchStr(shader_info, name))
spv_bin_arrays = "\n".join(spv_bin_strs)

View File

@ -131,14 +131,14 @@ class ComputeCodegenUnboxedKernels:
else:
arg_cpp = f"c10::IValue({arg_default})"
args_code.append(
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
f"""c10::Argument("{arg.name}", nullptr, ::std::nullopt, {arg_cpp})"""
)
returns = f.func.returns
returns_code = []
for ret in returns:
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
returns_code.append(f"""c10::Argument("{ret.name if ret.name else ""}")""")
return f"""
// aten::{schema}

View File

@ -112,7 +112,7 @@ class FileLinter:
first_results = None
original = replacement = pf.contents
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
while True:
try:
results = sorted(self._lint(pf), key=LintResult.sort_key)

View File

@ -41,7 +41,7 @@ class LineWithSets:
t = self.tokens[i]
after = i < len(self.tokens) - 1 and self.tokens[i + 1]
if t.string == "Set" and t.type == token.NAME:
# pyrefly: ignore # bad-return
# pyrefly: ignore [bad-return]
return after and after.string == "[" and after.type == token.OP
return (
(t.string == "set" and t.type == token.NAME)

View File

@ -19,13 +19,13 @@ from typing import NamedTuple
# PyTorch directory root
def scm_root() -> str:
path = os.path.abspath(os.getcwd())
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
while True:
if os.path.exists(os.path.join(path, ".git")):
return path
if os.path.isdir(os.path.join(path, ".hg")):
return path
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
n = len(path)
path = os.path.dirname(path)
if len(path) == n:

View File

@ -20,6 +20,8 @@ FORBIDDEN_WORDS = {
"multipy", # project pytorch/multipy is dead # codespell:ignore multipy
}
MAX_FILE_SIZE: int = 1024 * 1024 * 1024 # 1GB in bytes
class LintSeverity(str, Enum):
ERROR = "error"
@ -86,6 +88,39 @@ def run_codespell(path: Path) -> str:
def check_file(filename: str) -> list[LintMessage]:
path = Path(filename).absolute()
# Check if file is too large
try:
file_size = os.path.getsize(path)
if file_size > MAX_FILE_SIZE:
return [
LintMessage(
path=filename,
line=None,
char=None,
code="CODESPELL",
severity=LintSeverity.WARNING,
name="file-too-large",
original=None,
replacement=None,
description=f"File size ({file_size} bytes) exceeds {MAX_FILE_SIZE} bytes limit, skipping",
)
]
except OSError as err:
return [
LintMessage(
path=filename,
line=None,
char=None,
code="CODESPELL",
severity=LintSeverity.ERROR,
name="file-access-error",
original=None,
replacement=None,
description=f"Failed to get file size: {err}",
)
]
try:
run_codespell(path)
except Exception as err:
@ -101,7 +136,7 @@ def check_dictionary(filename: str) -> list[LintMessage]:
words_set = set(words)
if len(words) != len(words_set):
raise ValueError("The dictionary file contains duplicate entries.")
# pyrefly: ignore # no-matching-overload
# pyrefly: ignore [no-matching-overload]
uncased_words = list(map(str.lower, words))
if uncased_words != sorted(uncased_words):
raise ValueError(

View File

@ -16,6 +16,11 @@ from typing import NamedTuple
IS_WINDOWS: bool = os.name == "nt"
MAX_FILE_SIZE: int = 1024 * 1024 * 1024 # 1GB in bytes
MAX_MATCHES_PER_FILE: int = 100 # Maximum number of matches to report per file
MAX_ORIGINAL_SIZE: int = (
512 * 1024
) # 512KB - don't compute replacement if original is larger
class LintSeverity(str, Enum):
@ -25,6 +30,10 @@ class LintSeverity(str, Enum):
DISABLED = "disabled"
LINTER_NAME: str = ""
ERROR_DESCRIPTION: str | None = None
class LintMessage(NamedTuple):
path: str | None
line: int | None
@ -56,72 +65,143 @@ def run_command(
logging.debug("took %dms", (end_time - start_time) * 1000)
def print_lint_message(
name: str,
severity: LintSeverity = LintSeverity.ERROR,
path: str | None = None,
line: int | None = None,
original: str | None = None,
replacement: str | None = None,
description: str | None = None,
) -> None:
"""
Create a LintMessage and print it as JSON.
Accepts the same arguments as LintMessage constructor.
"""
char = None
code = LINTER_NAME
description = description or ERROR_DESCRIPTION
lint_message = LintMessage(
path, line, char, code, severity, name, original, replacement, description
)
print(json.dumps(lint_message._asdict()), flush=True)
def group_lines_by_file(lines: list[str]) -> dict[str, list[str]]:
"""
Group matching lines by filename.
Args:
lines: List of grep output lines in format "filename:line:content"
Returns:
Dictionary mapping filename to list of line remainders (without filename prefix)
"""
grouped: dict[str, list[str]] = {}
for line in lines:
if not line:
continue
# Extract filename and remainder from "filename:line:content" format
parts = line.split(":", 1)
filename = parts[0]
remainder = parts[1] if len(parts) > 1 else ""
if filename not in grouped:
grouped[filename] = []
grouped[filename].append(remainder)
return grouped
def check_allowlist(
filename: str,
allowlist_pattern: str,
) -> bool:
"""
Check if a file matches the allowlist pattern.
Args:
filename: Path to the file to check
allowlist_pattern: Pattern to grep for in the file
Returns:
True if the file should be skipped (allowlist pattern matched), False otherwise.
Prints error message and returns False if there was an error running grep.
"""
if not allowlist_pattern:
return False
try:
proc = run_command(["grep", "-nEHI", allowlist_pattern, filename])
except Exception as err:
print_lint_message(
name="command-failed",
description=(
f"Failed due to {err.__class__.__name__}:\n{err}"
if not isinstance(err, subprocess.CalledProcessError)
else (
"COMMAND (exit code {returncode})\n"
"{command}\n\n"
"STDERR\n{stderr}\n\n"
"STDOUT\n{stdout}"
).format(
returncode=err.returncode,
command=" ".join(as_posix(x) for x in err.cmd),
stderr=err.stderr.decode("utf-8").strip() or "(empty)",
stdout=err.stdout.decode("utf-8").strip() or "(empty)",
)
),
)
return False
# allowlist pattern was found, abort lint
if proc.returncode == 0:
return True
return False
def lint_file(
matching_line: str,
filename: str,
line_remainders: list[str],
allowlist_pattern: str,
replace_pattern: str,
linter_name: str,
error_name: str,
error_description: str,
) -> LintMessage | None:
# matching_line looks like:
# tools/linter/clangtidy_linter.py:13:import foo.bar.baz
split = matching_line.split(":")
filename = split[0]
) -> None:
"""
Lint a file with one or more pattern matches, printing LintMessages as they're created.
if allowlist_pattern:
try:
proc = run_command(["grep", "-nEHI", allowlist_pattern, filename])
except Exception as err:
return LintMessage(
path=None,
line=None,
char=None,
code=linter_name,
severity=LintSeverity.ERROR,
name="command-failed",
original=None,
replacement=None,
description=(
f"Failed due to {err.__class__.__name__}:\n{err}"
if not isinstance(err, subprocess.CalledProcessError)
else (
"COMMAND (exit code {returncode})\n"
"{command}\n\n"
"STDERR\n{stderr}\n\n"
"STDOUT\n{stdout}"
).format(
returncode=err.returncode,
command=" ".join(as_posix(x) for x in err.cmd),
stderr=err.stderr.decode("utf-8").strip() or "(empty)",
stdout=err.stdout.decode("utf-8").strip() or "(empty)",
)
),
)
Args:
filename: Path to the file being linted
line_remainders: List of line remainders (format: "line:content" without filename prefix)
allowlist_pattern: Pattern to check for allowlisting
replace_pattern: Pattern for sed replacement
error_name: Human-readable error name
"""
if not line_remainders:
return
# allowlist pattern was found, abort lint
if proc.returncode == 0:
return None
should_skip = check_allowlist(filename, allowlist_pattern)
if should_skip:
return
# Check if file is too large to compute replacement
file_size = os.path.getsize(filename)
compute_replacement = replace_pattern and file_size <= MAX_ORIGINAL_SIZE
# Apply replacement to entire file if pattern is specified and file is not too large
original = None
replacement = None
if replace_pattern:
with open(filename) as f:
original = f.read()
if compute_replacement:
# When we have a replacement, report a single message with line=None
try:
with open(filename) as f:
original = f.read()
proc = run_command(["sed", "-r", replace_pattern, filename])
replacement = proc.stdout.decode("utf-8")
except Exception as err:
return LintMessage(
path=None,
line=None,
char=None,
code=linter_name,
severity=LintSeverity.ERROR,
print_lint_message(
name="command-failed",
original=None,
replacement=None,
description=(
f"Failed due to {err.__class__.__name__}:\n{err}"
if not isinstance(err, subprocess.CalledProcessError)
@ -138,18 +218,36 @@ def lint_file(
)
),
)
return
return LintMessage(
path=split[0],
line=int(split[1]) if len(split) > 1 else None,
char=None,
code=linter_name,
severity=LintSeverity.ERROR,
name=error_name,
original=original,
replacement=replacement,
description=error_description,
)
print_lint_message(
path=filename,
name=error_name,
original=original,
replacement=replacement,
)
else:
# When no replacement, report each matching line (up to MAX_MATCHES_PER_FILE)
total_matches = len(line_remainders)
matches_to_report = min(total_matches, MAX_MATCHES_PER_FILE)
for line_remainder in line_remainders[:matches_to_report]:
# line_remainder format: "line_number:content"
split = line_remainder.split(":", 1)
line_number = int(split[0]) if split[0] else None
print_lint_message(
path=filename,
line=line_number,
name=error_name,
)
# If there are more matches than the limit, print an error
if total_matches > MAX_MATCHES_PER_FILE:
print_lint_message(
path=filename,
name="too-many-matches",
description=f"File has {total_matches} matches, only showing first {MAX_MATCHES_PER_FILE}",
)
def main() -> None:
@ -203,8 +301,24 @@ def main() -> None:
nargs="+",
help="paths to lint",
)
# Check for duplicate arguments before parsing
seen_args = set()
for arg in sys.argv[1:]:
if arg.startswith("--"):
arg_name = arg.split("=")[0]
if arg_name in seen_args:
parser.error(
f"argument {arg_name}: not allowed to be specified multiple times"
)
seen_args.add(arg_name)
args = parser.parse_args()
global LINTER_NAME, ERROR_DESCRIPTION
LINTER_NAME = args.linter_name
ERROR_DESCRIPTION = args.error_description
logging.basicConfig(
format="<%(threadName)s:%(levelname)s> %(message)s",
level=logging.NOTSET
@ -215,6 +329,31 @@ def main() -> None:
stream=sys.stderr,
)
# Filter out files that are too large before running grep
filtered_filenames = []
for filename in args.filenames:
try:
file_size = os.path.getsize(filename)
if file_size > MAX_FILE_SIZE:
print_lint_message(
path=filename,
severity=LintSeverity.WARNING,
name="file-too-large",
description=f"File size ({file_size} bytes) exceeds {MAX_FILE_SIZE} bytes limit, skipping",
)
else:
filtered_filenames.append(filename)
except OSError as err:
print_lint_message(
path=filename,
name="file-access-error",
description=f"Failed to get file size: {err}",
)
# If all files were filtered out, nothing to do
if not filtered_filenames:
return
files_with_matches = []
if args.match_first_only:
files_with_matches = ["--files-with-matches"]
@ -223,30 +362,23 @@ def main() -> None:
try:
# Split the grep command into multiple batches to avoid hitting the
# command line length limit of ~1M on my machine
arg_length = sum(len(x) for x in args.filenames)
arg_length = sum(len(x) for x in filtered_filenames)
batches = arg_length // 750000 + 1
batch_size = len(args.filenames) // batches
for i in range(0, len(args.filenames), batch_size):
batch_size = len(filtered_filenames) // batches
for i in range(0, len(filtered_filenames), batch_size):
proc = run_command(
[
"grep",
"-nEHI",
*files_with_matches,
args.pattern,
*args.filenames[i : i + batch_size],
*filtered_filenames[i : i + batch_size],
]
)
lines.extend(proc.stdout.decode().splitlines())
except Exception as err:
err_msg = LintMessage(
path=None,
line=None,
char=None,
code=args.linter_name,
severity=LintSeverity.ERROR,
print_lint_message(
name="command-failed",
original=None,
replacement=None,
description=(
f"Failed due to {err.__class__.__name__}:\n{err}"
if not isinstance(err, subprocess.CalledProcessError)
@ -263,20 +395,19 @@ def main() -> None:
)
),
)
print(json.dumps(err_msg._asdict()), flush=True)
sys.exit(0)
for line in lines:
lint_message = lint_file(
line,
# Group lines by file to call lint_file once per file
grouped_lines = group_lines_by_file(lines)
for filename, line_remainders in grouped_lines.items():
lint_file(
filename,
line_remainders,
args.allowlist_pattern,
args.replace_pattern,
args.linter_name,
args.error_name,
args.error_description,
)
if lint_message is not None:
print(json.dumps(lint_message._asdict()), flush=True)
if __name__ == "__main__":

View File

@ -7,6 +7,7 @@ from __future__ import annotations
import argparse
import json
import logging
import os
import sys
from enum import Enum
from typing import NamedTuple
@ -15,6 +16,7 @@ from typing import NamedTuple
NEWLINE = 10 # ASCII "\n"
CARRIAGE_RETURN = 13 # ASCII "\r"
LINTER_CODE = "NEWLINE"
MAX_FILE_SIZE: int = 1024 * 1024 * 1024 # 1GB in bytes
class LintSeverity(str, Enum):
@ -39,6 +41,34 @@ class LintMessage(NamedTuple):
def check_file(filename: str) -> LintMessage | None:
logging.debug("Checking file %s", filename)
# Check if file is too large
try:
file_size = os.path.getsize(filename)
if file_size > MAX_FILE_SIZE:
return LintMessage(
path=filename,
line=None,
char=None,
code=LINTER_CODE,
severity=LintSeverity.WARNING,
name="file-too-large",
original=None,
replacement=None,
description=f"File size ({file_size} bytes) exceeds {MAX_FILE_SIZE} bytes limit, skipping",
)
except OSError as err:
return LintMessage(
path=filename,
line=None,
char=None,
code=LINTER_CODE,
severity=LintSeverity.ERROR,
name="file-access-error",
original=None,
replacement=None,
description=f"Failed to get file size: {err}",
)
with open(filename, "rb") as f:
lines = f.readlines()

View File

@ -12,7 +12,7 @@ from enum import Enum
from pathlib import Path
from typing import NamedTuple
# pyrefly: ignore # import-error
# pyrefly: ignore [import-error]
import isort
import usort

View File

@ -55,7 +55,7 @@ def report_download_progress(
Pretty printer for file download progress.
"""
if file_size != -1:
# pyrefly: ignore # no-matching-overload
# pyrefly: ignore [no-matching-overload]
percent = min(1, (chunk_number * chunk_size) / file_size)
bar = "#" * int(64 * percent)
sys.stdout.write(f"\r0% |{bar:<64}| {int(percent * 100)}%")

View File

@ -15,10 +15,10 @@ import multiprocessing as mp
from enum import Enum
from typing import NamedTuple
# pyrefly: ignore # import-error
# pyrefly: ignore [import-error]
import libcst as cst
# pyrefly: ignore # import-error
# pyrefly: ignore [import-error]
import libcst.matchers as m

View File

@ -78,7 +78,7 @@ def print_lint_message(
lint_message = LintMessage(
path=str(path),
# pyrefly: ignore # unbound-name
# pyrefly: ignore [unbound-name]
line=line_number,
char=None,
code="WORKFLOWSYNC",

View File

@ -73,7 +73,7 @@ def get_selected_kernel_dtypes_code(
for kernel_tag, dtypes in selective_builder.kernel_metadata.items():
conditions = ["scalar_type == at::ScalarType::" + x for x in dtypes]
body_parts.append(
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
if_condition_template.substitute(
kernel_tag_name=kernel_tag,
dtype_checks=" || ".join(conditions),

View File

@ -311,7 +311,7 @@ class Venv:
python=python,
capture_output=True,
).stdout
# pyrefly: ignore # no-matching-overload
# pyrefly: ignore [no-matching-overload]
candidates = list(map(Path, filter(None, map(str.strip, output.splitlines()))))
candidates = [p for p in candidates if p.is_dir() and p.name == "site-packages"]
if not candidates:
@ -481,7 +481,7 @@ class Venv:
cmd = [str(python), *args]
env = popen_kwargs.pop("env", None) or {}
check = popen_kwargs.pop("check", True)
# pyrefly: ignore # no-matching-overload
# pyrefly: ignore [no-matching-overload]
return subprocess.run(
cmd,
check=check,
@ -533,7 +533,7 @@ class Venv:
cmd = [str(self.bindir / "uv"), *args]
env = popen_kwargs.pop("env", None) or {}
check = popen_kwargs.pop("check", True)
# pyrefly: ignore # no-matching-overload
# pyrefly: ignore [no-matching-overload]
return subprocess.run(
cmd,
check=check,
@ -941,7 +941,7 @@ def _move_single(
def _copy_files(listing: list[Path], source_dir: Path, target_dir: Path) -> None:
for src in listing:
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
_move_single(src, source_dir, target_dir, shutil.copy2, "Copying")

View File

@ -118,7 +118,7 @@ def download_patch(pr_number: int, repo_url: str, download_dir: str) -> str:
urllib.request.urlopen(patch_url) as response,
open(patch_file, "wb") as out_file,
):
# pyrefly: ignore # bad-specialization
# pyrefly: ignore [bad-specialization]
shutil.copyfileobj(response, out_file)
if not os.path.isfile(patch_file):
print(f"Failed to download patch for PR #{pr_number}")

View File

@ -994,7 +994,7 @@ def add_docstr_to_hint(docstr: str, hint: str) -> str:
hint = hint.removesuffix("...").rstrip() # remove "..."
content = hint + "\n" + textwrap.indent(f'r"""\n{docstr}\n"""', prefix=" ")
# Remove trailing whitespace on each line
# pyrefly: ignore # no-matching-overload
# pyrefly: ignore [no-matching-overload]
return "\n".join(map(str.rstrip, content.splitlines())).rstrip()
# attribute or property

View File

@ -100,7 +100,7 @@ class CMake:
if ver is not None:
eprint(f"Found {cmd} ({command}) version: {ver}", end="")
cmake_versions.append(f"{cmd}=={ver}")
# pyrefly: ignore # unsupported-operation
# pyrefly: ignore [unsupported-operation]
if ver >= CMAKE_MINIMUM_VERSION:
eprint(f" (>={CMAKE_MINIMUM_VERSION})")
valid_cmake_versions[cmd] = ver

View File

@ -31,9 +31,9 @@ def gen_linker_script(
text_line_start = text_line_start[0]
# ensure that parent directory exists before writing
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
fout = Path(fout)
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
fout.parent.mkdir(parents=True, exist_ok=True)
with open(fout, "w") as f:

View File

@ -60,7 +60,7 @@ class SegmentGenerator:
df[time_col_name] = pd.to_datetime(df[time_col_name], unit="s", utc=True)
# get unique cmd names
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
unique_cmds_df = pd.DataFrame(df[cmd_col_name].unique(), columns=[cmd_col_name])
# get all detected python cmds

View File

@ -2,7 +2,8 @@ from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional
from dataclasses_json import DataClassJsonMixin
# pyrefly: ignore [missing-import]
from dataclasses_json import DataClassJsonMixin # type: ignore[import-not-found]
_DATA_MODEL_VERSION = 1.5
@ -17,7 +18,7 @@ class UtilizationStats:
@dataclass
class UtilizationMetadata(DataClassJsonMixin):
class UtilizationMetadata(DataClassJsonMixin): # type: ignore[misc, no-any-unimported]
level: str
workflow_id: str
job_id: str
@ -33,7 +34,7 @@ class UtilizationMetadata(DataClassJsonMixin):
@dataclass
class GpuUsage(DataClassJsonMixin):
class GpuUsage(DataClassJsonMixin): # type: ignore[misc, no-any-unimported]
uuid: Optional[str] = None
util_percent: Optional[UtilizationStats] = None
mem_util_percent: Optional[UtilizationStats] = None
@ -43,14 +44,14 @@ class GpuUsage(DataClassJsonMixin):
@dataclass
class RecordData(DataClassJsonMixin):
class RecordData(DataClassJsonMixin): # type: ignore[misc, no-any-unimported]
cpu: Optional[UtilizationStats] = None
memory: Optional[UtilizationStats] = None
gpu_usage: Optional[list[GpuUsage]] = None
@dataclass
class UtilizationRecord(DataClassJsonMixin):
class UtilizationRecord(DataClassJsonMixin): # type: ignore[misc, no-any-unimported]
level: str
timestamp: int
data: Optional[RecordData] = None
@ -63,7 +64,7 @@ class UtilizationRecord(DataClassJsonMixin):
# the db schema related to this is:
# https://github.com/pytorch/test-infra/blob/main/clickhouse_db_schema/oss_ci_utilization/oss_ci_utilization_metadata_schema.sql
@dataclass
class OssCiSegmentV1(DataClassJsonMixin):
class OssCiSegmentV1(DataClassJsonMixin): # type: ignore[misc, no-any-unimported]
level: str
name: str
start_at: int

View File

@ -7,7 +7,7 @@ import unittest
from collections import defaultdict
from unittest.mock import Mock, patch
# pyrefly: ignore # import-error
# pyrefly: ignore [import-error]
from gen_operators_yaml import (
fill_output,
get_parser_options,
@ -242,6 +242,6 @@ class GenOperatorsYAMLTest(unittest.TestCase):
fill_output(output, options)
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
for op_val in output["operators"].values():
self.assertFalse(op_val["include_all_overloads"])

View File

@ -88,7 +88,7 @@ operators:
self.assertTrue(selector2.is_operator_selected("aten::sub.int"))
selector_legacy_v1 = SelectiveBuilder.from_legacy_op_registration_allow_list(
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
["aten::add", "aten::add.int", "aten::mul.int"],
False,
False,
@ -104,7 +104,7 @@ operators:
)
selector_legacy_v1 = SelectiveBuilder.from_legacy_op_registration_allow_list(
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
["aten::add", "aten::add.int", "aten::mul.int"],
True,
False,
@ -120,7 +120,7 @@ operators:
)
selector_legacy_v1 = SelectiveBuilder.from_legacy_op_registration_allow_list(
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
["aten::add", "aten::add.int", "aten::mul.int"],
False,
True,

View File

@ -83,9 +83,9 @@ def _rank_correlated_tests(
) -> list[str]:
# Find the tests failures that are correlated with the edited files.
# Filter the list to only include tests we want to run.
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
tests_to_run = set(tests_to_run)
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
ratings = _get_ratings_for_tests(tests_to_run)
prioritize = sorted(ratings, key=lambda x: -ratings[x])
return prioritize

View File

@ -36,13 +36,13 @@ def concated_logs() -> str:
for log_file in glob.glob(
f"{REPO_ROOT}/test/test-reports/**/*.log", recursive=True
):
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
logs.append(f"=== {log_file} ===")
with open(log_file) as f:
# For every line, prefix with fake timestamp for log classifier
for line in f:
line = line.rstrip("\n") # Remove any trailing newline
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
logs.append(f"2020-01-01T00:00:00.0000000Z {line}")
return "\n".join(logs)

View File

@ -2759,6 +2759,7 @@ class _NodeBase:
) -> None: ...
def _update_args_kwargs(self, args: tuple[Any, ...], kwargs: dict[str, Any]): ...
def _prepend(self, n: FxNode) -> None: ...
def _replace_input_with(self, old_input: FxNode, new_input: FxNode) -> None: ...
def _remove_from_list(self) -> None: ...
def __lt__(self, n: Self) -> _bool: ...
def __gt__(self, n: Self) -> _bool: ...

View File

@ -1703,7 +1703,7 @@ def _check(cond, message=None): # noqa: F811
an object that has a ``__str__()`` method to be used as the error
message. Default: ``None``
"""
_check_with(RuntimeError, cond, message) # pyrefly: ignore # bad-argument-type
_check_with(RuntimeError, cond, message) # pyrefly: ignore [bad-argument-type]
# TODO add deprecation annotation
@ -1753,7 +1753,7 @@ def _check_index(cond, message=None): # noqa: F811
an object that has a ``__str__()`` method to be used as the error
message. Default: ``None``
"""
_check_with(IndexError, cond, message) # pyrefly: ignore # bad-argument-type
_check_with(IndexError, cond, message) # pyrefly: ignore [bad-argument-type]
def _check_value(cond, message=None): # noqa: F811
@ -1771,7 +1771,7 @@ def _check_value(cond, message=None): # noqa: F811
an object that has a ``__str__()`` method to be used as the error
message. Default: ``None``
"""
_check_with(ValueError, cond, message) # pyrefly: ignore # bad-argument-type
_check_with(ValueError, cond, message) # pyrefly: ignore [bad-argument-type]
def _check_type(cond, message=None): # noqa: F811
@ -1789,7 +1789,7 @@ def _check_type(cond, message=None): # noqa: F811
an object that has a ``__str__()`` method to be used as the error
message. Default: ``None``
"""
_check_with(TypeError, cond, message) # pyrefly: ignore # bad-argument-type
_check_with(TypeError, cond, message) # pyrefly: ignore [bad-argument-type]
def _check_not_implemented(cond, message=None): # noqa: F811
@ -2653,7 +2653,8 @@ def compile(
if torch.compiler.is_exporting():
warnings.warn(
"You are calling torch.compile inside torch.export region. "
"To capture an useful graph, we will implicitly switch to torch.compile(backend=eager)"
"To capture an useful graph, we will implicitly switch to torch.compile(backend=eager)",
stacklevel=2,
)
from torch._higher_order_ops.utils import setup_compilation_env

View File

@ -55,6 +55,7 @@ def warn_deprecated():
"torch._custom_op is deprecated and will be removed in PyTorch 2.6, please "
"use the equivalent torch.library API instead.",
DeprecationWarning,
stacklevel=2,
)
@ -101,7 +102,7 @@ def custom_op(
lib, ns, function_schema, name, ophandle, _private_access=True
)
result.__name__ = func.__name__ # pyrefly: ignore # bad-assignment
result.__name__ = func.__name__ # pyrefly: ignore [bad-assignment]
result.__module__ = func.__module__
result.__doc__ = func.__doc__

View File

@ -154,7 +154,7 @@ def make_crossref_functionalize(
maybe_detach, (f_args, f_kwargs)
)
with fake_mode:
f_r = op(*f_args, **f_kwargs) # pyrefly: ignore # invalid-param-spec
f_r = op(*f_args, **f_kwargs) # pyrefly: ignore [invalid-param-spec]
r = op._op_dk(final_key, *args, **kwargs)
def desc():

View File

@ -55,7 +55,7 @@ from .eval_frame import (
reset_code,
)
# pyrefly: ignore # deprecated
# pyrefly: ignore [deprecated]
from .external_utils import is_compiling
from .mutation_guard import GenerationTracker
from .pgo import reset_code_state

View File

@ -95,7 +95,7 @@ class ModIndex(torch.autograd.Function):
generate_vmap_rule = True
@staticmethod
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
def forward(x: Tensor, indices: list[Tensor]) -> Tensor:
return torch.ops.aten.index(x, indices)
@ -243,7 +243,7 @@ def _trace_wrapped_functionalized(ctx: Any, *args: Any, **kwargs: Any) -> Any:
def autograd_function_backward_rewritten(original_backward: Any) -> Any:
def new_backward(ctx: Any, *grads: Any) -> Any:
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
grads = [g.contiguous() for g in grads]
return original_backward(ctx, *grads)

View File

@ -81,7 +81,7 @@ class AOTCompiledFunction:
**import_sources,
self._artifacts.backend_id: self._artifacts.compiled_fn,
}
# pyrefly: ignore # read-only
# pyrefly: ignore [read-only]
self.fn = types.FunctionType(
self._artifacts.bytecode, f_globals, closure=self._artifacts.closure
)

View File

@ -206,7 +206,7 @@ def cudagraphs(dynamo_model: torch.fx.GraphModule, dynamo_inputs: Sequence[Any])
assert manager is not None
def fn(inputs: list[Any]) -> Any:
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
manager.set_to_running_backward()
return aot_model(inputs)

View File

@ -78,19 +78,19 @@ def tvm(
opt_level = options.get("opt_level", 3)
if scheduler == "auto_scheduler":
# pyrefly: ignore # import-error
# pyrefly: ignore [import-error]
from tvm import auto_scheduler
log_file = tempfile.NamedTemporaryFile()
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
if not os.path.exists(log_file):
tasks, task_weights = auto_scheduler.extract_tasks(
mod["main"], params, target
)
if len(tasks) != 0:
tuner = auto_scheduler.TaskScheduler(tasks, task_weights)
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
if not os.path.exists(log_file):
assert trials > 0
tune_option = auto_scheduler.TuningOptions(
@ -101,9 +101,9 @@ def tvm(
try:
tuner.tune(tune_option)
except Exception:
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
if os.path.exists(log_file):
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
os.unlink(log_file)
raise
@ -113,7 +113,7 @@ def tvm(
):
lib = relay.build(mod, target=target, params=params)
elif scheduler == "meta_schedule":
# pyrefly: ignore # import-error
# pyrefly: ignore [import-error]
from tvm import meta_schedule as ms
with tempfile.TemporaryDirectory() as work_dir:

View File

@ -37,7 +37,7 @@ if sys.version_info >= (3, 11):
TERMINAL_OPCODES.add(dis.opmap["JUMP_FORWARD"])
else:
TERMINAL_OPCODES.add(dis.opmap["JUMP_ABSOLUTE"])
# pyrefly: ignore # unsupported-operation
# pyrefly: ignore [unsupported-operation]
if (3, 12) <= sys.version_info < (3, 14):
TERMINAL_OPCODES.add(dis.opmap["RETURN_CONST"])
if sys.version_info >= (3, 13):

View File

@ -923,7 +923,7 @@ def devirtualize_jumps(instructions: list[Instruction]) -> None:
inst.arg = abs(
int(target.offset - inst.offset - instruction_size(inst))
)
# pyrefly: ignore # unsupported-operation
# pyrefly: ignore [unsupported-operation]
inst.arg //= 2
inst.argval = target.offset
inst.argrepr = f"to {target.offset}"
@ -1375,7 +1375,7 @@ def update_offsets(instructions: Sequence[Instruction]) -> None:
offset = 0
for inst in instructions:
inst.offset = offset
# pyrefly: ignore # unsupported-operation
# pyrefly: ignore [unsupported-operation]
offset += instruction_size(inst)

View File

@ -475,7 +475,7 @@ def cprofile_wrapper(func: Callable[_P, _T]) -> Callable[_P, _T]:
try:
prof.enable()
start_ts = time.time()
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
retval = prof.runcall(func, *args, **kwargs)
profile_latency = time.time() - start_ts
prof.disable()
@ -995,7 +995,7 @@ def get_traced_fn(mod: Any) -> tuple[FunctionType, Optional[object]]:
if isinstance(mod, torch.nn.Module):
mod = mod.forward
if hasattr(mod, "__self__"):
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
return mod.__func__, mod.__self__
elif inspect.isfunction(mod):
return mod, None
@ -1140,7 +1140,7 @@ def _fullgraph_capture_frame(
while cur_exn.__cause__ is not None:
cur_exn.__cause__.with_traceback(None)
cur_exn = cur_exn.__cause__
# pyrefly: ignore # invalid-inheritance
# pyrefly: ignore [invalid-inheritance]
raise e.with_traceback(None) from e.__cause__ # User compiler error
return CaptureOutput(
@ -1164,7 +1164,7 @@ def compile_frame( # type: ignore[return]
frame_state: Optional[dict[str, Union[int, FrameStateSizeEntry]]] = None,
distributed_state: Optional[DistributedState] = None,
package: Optional[CompilePackage] = None,
# pyrefly: ignore # bad-return
# pyrefly: ignore [bad-return]
) -> DynamoOutput:
"""
A helper function taking a frame and backend, then return the generated bytecode

View File

@ -20,7 +20,7 @@ allowed to compute gradients on).
class TracableCreateParameter(torch.autograd.Function):
@staticmethod
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
def forward(ctx: Any, tensor: Any, placeholder: Any) -> torch.nn.Parameter:
assert not tensor.requires_grad
return placeholder.set_(tensor)

View File

@ -879,7 +879,7 @@ def aot_graph_input_parser(
data_type, shape_str = match.groups()
shape = tuple(shape_str.split(","))
dtype = dtype_map[data_type]
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
kwargs[param] = gen_tensor(shape, dtype)
match = re.search(sym_shape_regex, annotation)
@ -893,7 +893,7 @@ def aot_graph_input_parser(
attr_name, data_type, shape_str, _ = match.groups()
shape = tuple(shape_str.split(","))
dtype = dtype_map[data_type]
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
setattr(container, attr_name, gen_tensor(shape, dtype))
return kwargs

View File

@ -96,7 +96,7 @@ def disable(fn=None, recursive=True, *, reason=None, wrapping=True): # type: ig
nonrecursive_disable_wrapper._torchdynamo_disable = True # type: ignore[attr-defined]
nonrecursive_disable_wrapper._torchdynamo_disable_msg = reason # type: ignore[attr-defined]
nonrecursive_disable_wrapper._torchdynamo_orig_callable = fn # type: ignore[attr-defined]
# pyrefly: ignore # bad-return
# pyrefly: ignore [bad-return]
return nonrecursive_disable_wrapper
if fn is None:
@ -316,7 +316,7 @@ def forbid_in_graph(fn: Any) -> Any:
if isinstance(fn, (list, tuple)):
return [forbid_in_graph(x) for x in fn]
assert callable(fn), "forbid_in_graph applies only to callables"
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
fn._dynamo_forbidden = True
return fn
@ -493,10 +493,16 @@ def substitute_in_graph(
def dispatch_fn(
self: VariableBuilder, value: Callable[_P, _R]
) -> PolyfilledFunctionVariable:
if inspect.isclass(value):
guard_type = GuardBuilder.CLASS_MATCH
elif inspect.ismodule(value):
guard_type = GuardBuilder.MODULE_MATCH
else:
guard_type = GuardBuilder.ID_MATCH
return PolyfilledFunctionVariable(
value,
source=self.source,
**self.install_guards(GuardBuilder.FUNCTION_MATCH),
**self.install_guards(guard_type),
)
id_dispatch_map[id(original_fn)] = id_dispatch_map[id(wrapped)] = dispatch_fn
@ -664,28 +670,28 @@ def mark_dynamic(
if isinstance(index, int):
if not hasattr(t, "_dynamo_dynamic_indices"):
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._dynamo_dynamic_indices = set()
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._dynamo_dynamic_range = set()
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._dynamo_hint_overrides = {}
if not hasattr(t, "_specialize_on"):
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._specialize_on = {}
if hint_override:
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._dynamo_hint_overrides[index] = hint_override
# TODO(voz): Should we bounds check?
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._dynamo_dynamic_indices.add(index)
t._dynamo_dynamic_range.add(_DimRange(index, min, max)) # type: ignore[arg-type]
# FX tracers don't respect @forbid_in_graph and choke on the following error since it passes in proxies:
# TypeError: 'Attribute' object does not support item assignment
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
if isinstance(t._specialize_on, dict):
t._specialize_on[index] = specialize_on if specialize_on is not None else []
@ -710,10 +716,10 @@ def maybe_mark_dynamic(t: Any, index: Union[int, list[Any], tuple[Any]]) -> None
if isinstance(index, int):
if not hasattr(t, "_dynamo_weak_dynamic_indices"):
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._dynamo_weak_dynamic_indices = set()
# TODO(voz): Should we bounds check?
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._dynamo_weak_dynamic_indices.add(index)
return
@ -765,11 +771,11 @@ def mark_static(
# TODO: Make this configurable via a supported public API
_apply_func_to_inner_tensors_of_same_dim(mark_static, t, index)
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
if not isinstance(t, torch.Tensor) and issubclass(t, torch.nn.Module):
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
t._dynamo_marked_static = True
# pyrefly: ignore # bad-return
# pyrefly: ignore [bad-return]
return t
if not isinstance(t, torch.Tensor):

View File

@ -205,7 +205,7 @@ class CudaInterface(DeviceInterface):
Event = torch.cuda.Event # type: ignore[assignment]
Stream = torch.cuda.Stream # type: ignore[assignment]
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
class Worker:
@staticmethod
def set_device(device: int) -> None:
@ -241,7 +241,7 @@ class CudaInterface(DeviceInterface):
set_device = staticmethod(torch.cuda.set_device)
device_count = staticmethod(torch.cuda.device_count)
stream = staticmethod(torch.cuda.stream) # type: ignore[assignment]
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
current_stream = staticmethod(torch.cuda.current_stream)
set_stream = staticmethod(torch.cuda.set_stream) # type: ignore[assignment]
_set_stream_by_id = staticmethod(torch.cuda._set_stream_by_id) # type: ignore[assignment]
@ -302,7 +302,7 @@ class MtiaInterface(DeviceInterface):
Event = torch.mtia.Event # type: ignore[assignment]
Stream = torch.mtia.Stream # type: ignore[assignment]
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
class Worker:
@staticmethod
def set_device(device: int) -> None:
@ -338,7 +338,7 @@ class MtiaInterface(DeviceInterface):
set_device = staticmethod(torch.mtia.set_device) # type: ignore[assignment]
device_count = staticmethod(torch.mtia.device_count)
stream = staticmethod(torch.mtia.stream) # type: ignore[assignment]
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
current_stream = staticmethod(torch.mtia.current_stream)
set_stream = staticmethod(torch.mtia.set_stream) # type: ignore[assignment]
_set_stream_by_id = staticmethod(torch.mtia._set_stream_by_id) # type: ignore[assignment]
@ -385,7 +385,7 @@ class XpuInterface(DeviceInterface):
Event = torch.xpu.Event # type: ignore[assignment]
Stream = torch.xpu.Stream # type: ignore[assignment]
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
class Worker:
@staticmethod
def set_device(device: int) -> None:
@ -421,7 +421,7 @@ class XpuInterface(DeviceInterface):
set_device = staticmethod(torch.xpu.set_device)
device_count = staticmethod(torch.xpu.device_count) # type: ignore[has-type]
stream = staticmethod(torch.xpu.stream) # type: ignore[assignment]
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
current_stream = staticmethod(torch.xpu.current_stream)
set_stream = staticmethod(torch.xpu.set_stream) # type: ignore[assignment]
_set_stream_by_id = staticmethod(torch.xpu._set_stream_by_id) # type: ignore[assignment]
@ -464,7 +464,7 @@ class CpuDeviceProperties:
class CpuInterface(DeviceInterface):
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
class Event(torch.Event):
def __init__(self, enable_timing: bool = True) -> None:
self.time = 0.0
@ -475,7 +475,7 @@ class CpuInterface(DeviceInterface):
def record(self, stream: Any = None) -> None:
self.time = time.perf_counter()
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
class Worker:
@staticmethod
def get_device_properties(
@ -551,7 +551,7 @@ class MpsInterface(DeviceInterface):
def synchronize(device: torch.types.Device = None) -> None:
torch.mps.synchronize()
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
class Worker:
@staticmethod
def get_device_properties(device: torch.types.Device = None) -> Any:

View File

@ -499,7 +499,7 @@ class OptimizedModule(torch.nn.Module):
self._initialize()
@property
# pyrefly: ignore # bad-override
# pyrefly: ignore [bad-override]
def training(self) -> bool:
return self._orig_mod.training
@ -918,7 +918,7 @@ class _TorchDynamoContext:
while cur_exn.__cause__ is not None:
cur_exn.__cause__.with_traceback(None)
cur_exn = cur_exn.__cause__
# pyrefly: ignore # invalid-inheritance
# pyrefly: ignore [invalid-inheritance]
raise e.with_traceback(None) from e.__cause__ # User compiler error
except ShortenTraceback as e:
# Failures in the backend likely don't have useful
@ -1048,7 +1048,7 @@ class OptimizeContext(_TorchDynamoContext):
compiler_fn = rebuild_ctx()
ctx = torch._dynamo.compiled_autograd._enable(
compiler_fn,
# pyrefly: ignore # bad-argument-type
# pyrefly: ignore [bad-argument-type]
dynamic=_dynamic,
ignore_active_disable_ctx=False,
)
@ -1113,7 +1113,7 @@ class DisableContext(_TorchDynamoContext):
cls_obj.__call__ = self(cls_obj.__call__)
if issubclass(cls_obj, torch.nn.Module):
# NN module variable tracker directly inlines the _call_impl. Disable it.
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
cls_obj._call_impl = self(cls_obj._call_impl)
return cls_obj
@ -2018,7 +2018,7 @@ def export(
path: KeyPath, t: Union[torch.Tensor, _IntWrapper, Any]
) -> Any:
if isinstance(t, torch.Tensor):
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
return ambient_fake_mode.from_tensor(t, static_shapes=True)
elif isinstance(t, _IntWrapper):
if (
@ -2103,11 +2103,10 @@ def export(
)
and not trace_rules.check(call_to_inspect)
):
# pyrefly: ignore # unbound-name
dim_constraints.solve()
# pyrefly: ignore # unbound-name
forced_specializations = dim_constraints.forced_specializations()
# pyrefly: ignore # unbound-name
msg = dim_constraints.prettify_results(
original_signature,
dynamic_shapes,
@ -2128,11 +2127,10 @@ def export(
)
# Error if we have any constraints on static values
# pyrefly: ignore # unbound-name
for k in shape_env.var_to_range.keys():
if isinstance(k, sympy.Integer):
constraint_violation_error = ConstraintViolationError(
# pyrefly: ignore # unbound-name
f"{''.join(traceback.format_list(shape_env.var_to_stack[k]))}\n"
"It appears that you're trying to set a constraint on a "
f"value which we evaluated to have a static value of {k}. "

View File

@ -384,7 +384,7 @@ def get_dynamo_observed_exception(exc_type: type[Exception]) -> type[ObservedExc
observed_exception_map[exc_type] = type( # type: ignore[assignment]
f"Observed{name}Error", (ObservedException,), {}
)
# pyrefly: ignore # index-error
# pyrefly: ignore [index-error]
return observed_exception_map[exc_type]

View File

@ -97,9 +97,9 @@ def wrap_numpy(f: Callable[_P, _R]) -> Callable[_P, _R]:
args, kwargs = pytree.tree_map_only(
torch.Tensor, lambda x: x.numpy(), (args, kwargs)
)
# pyrefly: ignore # invalid-param-spec
# pyrefly: ignore [invalid-param-spec]
out = f(*args, **kwargs)
# pyrefly: ignore # missing-attribute
# pyrefly: ignore [missing-attribute]
return pytree.tree_map_only(np.ndarray, lambda x: torch.as_tensor(x), out)
return wrap

View File

@ -290,7 +290,7 @@ class DynamoGraphTransformer(torch.fx.Transformer):
else:
placeholder.node.meta["val"] = self.flat_inputs[i]
# pyrefly: ignore # unsupported-operation
# pyrefly: ignore [unsupported-operation]
self.new_input_nodes[i] = placeholder
def _create_placeholder_mapping(self) -> None:
@ -365,18 +365,18 @@ class DynamoGraphTransformer(torch.fx.Transformer):
# Copy module metadata like the original implementation
if hasattr(self.module, "meta"):
# pyrefly: ignore # unsupported-operation
# pyrefly: ignore [unsupported-operation]
if "dynamo_flat_name_to_original_fqn" in self.module.meta:
# pyrefly: ignore # index-error
# pyrefly: ignore [index-error]
result_gm.meta["dynamo_flat_name_to_original_fqn"] = self.module.meta[
# pyrefly: ignore # index-error
# pyrefly: ignore [index-error]
"dynamo_flat_name_to_original_fqn"
]
# pyrefly: ignore # unsupported-operation
# pyrefly: ignore [unsupported-operation]
if "dynamo_compile_id" in self.module.meta:
# pyrefly: ignore # index-error
# pyrefly: ignore [index-error]
result_gm.meta["dynamo_compile_id"] = self.module.meta[
# pyrefly: ignore # index-error
# pyrefly: ignore [index-error]
"dynamo_compile_id"
]
@ -408,11 +408,10 @@ def _suggest_or_raise_constraint_violation(
torch._ops.OpOverloadPacket | torch._ops.OpOverload,
)
):
# pyrefly: ignore # unbound-name
dim_constraints.solve()
# pyrefly: ignore # unbound-name
forced_specializations = dim_constraints.forced_specializations()
# pyrefly: ignore # unbound-name
msg = dim_constraints.prettify_results(
inspect.signature(orig_callable), # type: ignore[attr-defined]
dynamic_shapes,
@ -433,11 +432,10 @@ def _suggest_or_raise_constraint_violation(
)
# Error if we have any constraints on static values
# pyrefly: ignore # unbound-name
for k in shape_env.var_to_range.keys():
if isinstance(k, sympy.Integer):
constraint_violation_error = ConstraintViolationError(
# pyrefly: ignore # unbound-name
f"{''.join(traceback.format_list(shape_env.var_to_stack[k]))}\n"
"It appears that you're trying to set a constraint on a "
f"value which we evaluated to have a static value of {k}. "

View File

@ -456,8 +456,10 @@ def _add_mutation_dependencies(
for user in mutated_arg.users:
if user is node:
continue
# pyrefly: ignore [unsupported-operation]
elif user < node:
node_to_additional_deps[node].add(user)
# pyrefly: ignore [unsupported-operation]
elif user > node:
node_to_additional_deps[user].add(node)

View File

@ -333,7 +333,7 @@ class GraphRegionTracker:
if len(group) > 1:
region_group = []
min_rank = math.inf
# pyrefly: ignore # bad-assignment
# pyrefly: ignore [bad-assignment]
for node in group:
# some nodes aren't in the topo ranking?
if node in topological_ranking:

Some files were not shown because too many files have changed in this diff Show More