mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-01-31 01:15:24 +01:00
Compare commits
8508 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4955a4ef98 | ||
|
|
ca55d86187 | ||
|
|
5974856924 | ||
|
|
bdb7c65ab0 | ||
|
|
45ba8690a9 | ||
|
|
7054190832 | ||
|
|
dbd997b551 | ||
|
|
369bda13f8 | ||
|
|
c9216e5625 | ||
|
|
93af9656d0 | ||
|
|
bcade5bb9d | ||
|
|
59ab303c5c | ||
|
|
4ab9d1a493 | ||
|
|
f1576eeb32 | ||
|
|
1f851887d9 | ||
|
|
2a2564cf45 | ||
|
|
b5a78763f8 | ||
|
|
728e1ffdd0 | ||
|
|
14c9cfb310 | ||
|
|
b511a54445 | ||
|
|
f446e5ad3d | ||
|
|
c263c12448 | ||
|
|
ed9b6f0d3f | ||
|
|
d3152bee9c | ||
|
|
a504b429bd | ||
|
|
7b6db5ad7a | ||
|
|
398f675412 | ||
|
|
d18bf338b6 | ||
|
|
3091d28615 | ||
|
|
ab2365b475 | ||
|
|
7d356a2d20 | ||
|
|
e5a4f27e79 | ||
|
|
9cbcda0f7b | ||
|
|
93b2cd6002 | ||
|
|
411ed1e0c7 | ||
|
|
e5c4fe003b | ||
|
|
d6293ab081 | ||
|
|
38a5431ceb | ||
|
|
7f2a9f6806 | ||
|
|
6ab69e5c1c | ||
|
|
cd902a12b3 | ||
|
|
72809e8724 | ||
|
|
610cad00bf | ||
|
|
4f5bbebcd8 | ||
|
|
33f88039d7 | ||
|
|
2cf6b5052d | ||
|
|
8cb680f34e | ||
|
|
f089ef3fbe | ||
|
|
e1d2d4b863 | ||
|
|
d0b34dc04c | ||
|
|
6a8cffe615 | ||
|
|
d08101a5f4 | ||
|
|
7b6a26367a | ||
|
|
08ecf3f582 | ||
|
|
8d38e97c0b | ||
|
|
4c167cf528 | ||
|
|
7d27b675d0 | ||
|
|
0ef7e82548 | ||
|
|
8db0b52821 | ||
|
|
364199916f | ||
|
|
42066ecaba | ||
|
|
986b5a2afe | ||
|
|
921689aa04 | ||
|
|
283dcaffe2 | ||
|
|
074ffacf9d | ||
|
|
f1d3177b69 | ||
|
|
fa50e9dd20 | ||
|
|
d4de43a062 | ||
|
|
af795985fc | ||
|
|
610b19d646 | ||
|
|
95c8915d78 | ||
|
|
6bdfec743c | ||
|
|
e270c46703 | ||
|
|
0c0a866481 | ||
|
|
28ca0aed48 | ||
|
|
ca9ab100e5 | ||
|
|
73732bfb29 | ||
|
|
048e7f4c1b | ||
|
|
d041df8254 | ||
|
|
8e8b9a3cff | ||
|
|
b7b65d7361 | ||
|
|
6263c8a0cd | ||
|
|
3c92054a6e | ||
|
|
cf2b6a895f | ||
|
|
5bdb34521d | ||
|
|
e1e83c11cc | ||
|
|
0f5b17de0f | ||
|
|
568d9a3e30 | ||
|
|
1518b793dc | ||
|
|
6182b46033 | ||
|
|
4194553450 | ||
|
|
5f5a696717 | ||
|
|
35d516e140 | ||
|
|
fb5e5cc13f | ||
|
|
aa475a8d2e | ||
|
|
fa5c023d33 | ||
|
|
22d8e6f79f | ||
|
|
126ae4a0f0 | ||
|
|
68f18245a7 | ||
|
|
e2e25b7134 | ||
|
|
32088647c3 | ||
|
|
baf8df9597 | ||
|
|
34aa266260 | ||
|
|
8c887c2eee | ||
|
|
a95250cabb | ||
|
|
96bc6807ae | ||
|
|
81a139b875 | ||
|
|
1a3c20f0f7 | ||
|
|
4f735d0201 | ||
|
|
ec0543335e | ||
|
|
0872d024f9 | ||
|
|
0ce21c91ef | ||
|
|
220c7c271b | ||
|
|
bf389b94d6 | ||
|
|
6187f36c33 | ||
|
|
73df4e4abf | ||
|
|
1a8a5a5e8e | ||
|
|
c4ab6280c6 | ||
|
|
a27b6a113a | ||
|
|
a60ded5c94 | ||
|
|
5ff67d4b2d | ||
|
|
874e3d976f | ||
|
|
90e1284d83 | ||
|
|
75518b71ea | ||
|
|
b355efd73a | ||
|
|
8e920d727f | ||
|
|
5976be55f4 | ||
|
|
4c3df1a963 | ||
|
|
5b44f495ee | ||
|
|
3951e15446 | ||
|
|
b9da7c6f27 | ||
|
|
c5ae4a6957 | ||
|
|
e40c2f97f0 | ||
|
|
1dbc11bdd5 | ||
|
|
299edae7c0 | ||
|
|
86309bd837 | ||
|
|
0312e9026d | ||
|
|
a7bafb60e9 | ||
|
|
602769b9d0 | ||
|
|
e76546f8e4 | ||
|
|
a9ef1680ce | ||
|
|
670ddef944 | ||
|
|
be6b8dce25 | ||
|
|
75fd20f5df | ||
|
|
f0509a6631 | ||
|
|
702319c4ca | ||
|
|
d5bd187930 | ||
|
|
753036f0c8 | ||
|
|
cfc763b488 | ||
|
|
7edfeab0b7 | ||
|
|
226b0540c5 | ||
|
|
0c36647506 | ||
|
|
1348c8880e | ||
|
|
9334285edd | ||
|
|
2330d3a056 | ||
|
|
bce54a64ff | ||
|
|
bd43400ad8 | ||
|
|
b16c75324e | ||
|
|
0ddef1169d | ||
|
|
4da09bd841 | ||
|
|
6811cd617b | ||
|
|
4e762c75b0 | ||
|
|
f471c30036 | ||
|
|
aaed932a67 | ||
|
|
5f168b1a1e | ||
|
|
5d6f0d7e47 | ||
|
|
cf176f1b99 | ||
|
|
d97e867c07 | ||
|
|
3d0654dd48 | ||
|
|
e688840703 | ||
|
|
8bf272e806 | ||
|
|
0744bc4004 | ||
|
|
918f8cbe16 | ||
|
|
b6dafff524 | ||
|
|
34686dc167 | ||
|
|
c0c75bf18e | ||
|
|
66cfb403c6 | ||
|
|
0375f9c0ae | ||
|
|
11ac758d78 | ||
|
|
9e705b2f53 | ||
|
|
b475108ff3 | ||
|
|
ab34dff152 | ||
|
|
6a3f093cfa | ||
|
|
04ef9af703 | ||
|
|
b773ab3fb4 | ||
|
|
32085dc009 | ||
|
|
18fdfc26aa | ||
|
|
f50d2fa48e | ||
|
|
e82859c979 | ||
|
|
99bb35f109 | ||
|
|
8637f8ee9b | ||
|
|
1e11d40828 | ||
|
|
5546b102eb | ||
|
|
7d9c8c9172 | ||
|
|
8dd51b7207 | ||
|
|
746c5b603f | ||
|
|
d0de8d22fe | ||
|
|
231b8e9481 | ||
|
|
f9f36700bb | ||
|
|
ba9fced3db | ||
|
|
c192ecf6b7 | ||
|
|
6ee029e14b | ||
|
|
935f880fa7 | ||
|
|
47d046c5fe | ||
|
|
4305e17cbe | ||
|
|
c5c4cdd0b4 | ||
|
|
252562db90 | ||
|
|
a898682f3e | ||
|
|
7829094668 | ||
|
|
042c23a545 | ||
|
|
af2b9e3a4c | ||
|
|
b3b7c55b9a | ||
|
|
1859ede325 | ||
|
|
2c32c374fb | ||
|
|
65d22406a3 | ||
|
|
92689a60ae | ||
|
|
1a598ccf0d | ||
|
|
e50feb74fd | ||
|
|
af067a8c84 | ||
|
|
61a196bc3d | ||
|
|
6a431daffc | ||
|
|
1aad3e6cc8 | ||
|
|
c8d42e32ed | ||
|
|
514cc6edb8 | ||
|
|
208d3ffa7b | ||
|
|
25dd92f8c0 | ||
|
|
3f81b7e56d | ||
|
|
99b7333991 | ||
|
|
a2ae4ba441 | ||
|
|
4e1b2792c9 | ||
|
|
55695bb5bc | ||
|
|
6e064da536 | ||
|
|
69ff12645c | ||
|
|
efb93d22d9 | ||
|
|
cdb0068dcc | ||
|
|
b0a0d714c4 | ||
|
|
7e36ee243c | ||
|
|
21bc56a8ba | ||
|
|
e920c0fe3e | ||
|
|
31992fb398 | ||
|
|
dc65599fae | ||
|
|
eb9dc7b70d | ||
|
|
06bf2502a6 | ||
|
|
242655bac9 | ||
|
|
8335b3ee77 | ||
|
|
a0c8ad9511 | ||
|
|
d775a9364b | ||
|
|
1695124472 | ||
|
|
70145eb150 | ||
|
|
dacd7d94d9 | ||
|
|
85bd8555c0 | ||
|
|
6920b4e366 | ||
|
|
bda3835cb1 | ||
|
|
83e5aa6137 | ||
|
|
4719e52c6e | ||
|
|
e313eadcd2 | ||
|
|
be952e40ba | ||
|
|
4d4b24f8b0 | ||
|
|
9533fa25c3 | ||
|
|
013c9072b9 | ||
|
|
bf8dc05fac | ||
|
|
f4b38662fa | ||
|
|
ea41cce5ef | ||
|
|
013c292ffb | ||
|
|
cb18f11133 | ||
|
|
ea25f49c65 | ||
|
|
5d15d5958e | ||
|
|
efed92b15c | ||
|
|
7d39d02e98 | ||
|
|
e006442e4f | ||
|
|
212848e931 | ||
|
|
732de53d1b | ||
|
|
08c00eed1e | ||
|
|
2a1c3d1f33 | ||
|
|
5f57084ed9 | ||
|
|
9368e29d62 | ||
|
|
ae8751e9ca | ||
|
|
a11b8c4750 | ||
|
|
1e7e23df96 | ||
|
|
8395e00835 | ||
|
|
66bc1bdc77 | ||
|
|
b8984661d9 | ||
|
|
ea98a1c9f9 | ||
|
|
9173b40e2e | ||
|
|
59e5b1918f | ||
|
|
ab4b7b8ee6 | ||
|
|
7f0f153ebd | ||
|
|
f3d51a242d | ||
|
|
88ce192610 | ||
|
|
bd489647e9 | ||
|
|
c36666b4d4 | ||
|
|
97727cae2c | ||
|
|
f412b6818e | ||
|
|
e8aea86e75 | ||
|
|
fac171fa95 | ||
|
|
fa1b6493da | ||
|
|
e58766745c | ||
|
|
d8a9c5b479 | ||
|
|
9a4d8ba934 | ||
|
|
ab816543c8 | ||
|
|
37ccd81985 | ||
|
|
42dad4ade8 | ||
|
|
b2ac035862 | ||
|
|
f42d7eec74 | ||
|
|
e4ef41f86a | ||
|
|
103dd3954a | ||
|
|
2f9577a28e | ||
|
|
33ec4d9430 | ||
|
|
209f09ca7a | ||
|
|
2e6af75f1d | ||
|
|
f68122a380 | ||
|
|
d51bdccf7f | ||
|
|
7d8377b133 | ||
|
|
80d3a8a757 | ||
|
|
2e6c5cde29 | ||
|
|
0f2768dca4 | ||
|
|
d5be095482 | ||
|
|
b315625a94 | ||
|
|
6b51462fa0 | ||
|
|
373e698545 | ||
|
|
3b309c6d4e | ||
|
|
8e93e9f516 | ||
|
|
ac8582eca7 | ||
|
|
e6f72fdde7 | ||
|
|
9166218d07 | ||
|
|
c0b1bde94b | ||
|
|
756a679262 | ||
|
|
13b19b35c0 | ||
|
|
cadb70d1e4 | ||
|
|
4cb4844e8d | ||
|
|
556c7ca080 | ||
|
|
962db4bfc4 | ||
|
|
da651cabe4 | ||
|
|
e03076c6ff | ||
|
|
122968e63a | ||
|
|
6beac26727 | ||
|
|
3073281d13 | ||
|
|
0e0e23eefb | ||
|
|
bcec38bd97 | ||
|
|
bd706f99b2 | ||
|
|
501af632f7 | ||
|
|
a143122804 | ||
|
|
92aa426bba | ||
|
|
96a1ce2fb2 | ||
|
|
c203a09435 | ||
|
|
c4084b4162 | ||
|
|
2a7c948a57 | ||
|
|
46912595ea | ||
|
|
120ee6c673 | ||
|
|
112238fbd7 | ||
|
|
38e288ef6a | ||
|
|
35322cf49b | ||
|
|
8d44e1af0e | ||
|
|
16af078b3b | ||
|
|
3e968b4390 | ||
|
|
0029dac32d | ||
|
|
a083343c6e | ||
|
|
c277ee1d34 | ||
|
|
ebe8592a8d | ||
|
|
6c3e357d9e | ||
|
|
64455620e8 | ||
|
|
fc799778de | ||
|
|
e04e0e38d1 | ||
|
|
8d6569be95 | ||
|
|
8b086a3898 | ||
|
|
a4b8c33cf3 | ||
|
|
1d37ba47f4 | ||
|
|
8d480c28ce | ||
|
|
6e38f40f96 | ||
|
|
017c37f212 | ||
|
|
6eee4cb38a | ||
|
|
1f6a14261c | ||
|
|
14e8d840ff | ||
|
|
125b9ea1e1 | ||
|
|
e6b1e1948e | ||
|
|
ba1072f470 | ||
|
|
1fb29de082 | ||
|
|
f79e5ab559 | ||
|
|
c3a9fd469e | ||
|
|
c8abc909fa | ||
|
|
401a9f4c62 | ||
|
|
f1edb0c960 | ||
|
|
d73335e4d3 | ||
|
|
7a554be7a7 | ||
|
|
31b6ff6046 | ||
|
|
38ab0630e6 | ||
|
|
b5fa9deb30 | ||
|
|
4e8bae1703 | ||
|
|
464ce1c3cd | ||
|
|
bb55c320c1 | ||
|
|
af585bffa9 | ||
|
|
bde4868b67 | ||
|
|
3835fc5ad1 | ||
|
|
7b815b5f07 | ||
|
|
754c6126b1 | ||
|
|
2dc2a32e45 | ||
|
|
7a579303b9 | ||
|
|
03401e377b | ||
|
|
ff4ec6d843 | ||
|
|
0dc3dcd9ed | ||
|
|
ed3237f808 | ||
|
|
9321c3c334 | ||
|
|
adc7d41183 | ||
|
|
4ca69d8818 | ||
|
|
cca52e271b | ||
|
|
a2e15bbc87 | ||
|
|
9d6ad0303c | ||
|
|
bbaa23c22d | ||
|
|
bacb860cc1 | ||
|
|
7a4191e16d | ||
|
|
0fa620e3ba | ||
|
|
96642d8bc3 | ||
|
|
8a26c3783a | ||
|
|
d2742a177c | ||
|
|
6d4713e069 | ||
|
|
342170b077 | ||
|
|
df02d784d6 | ||
|
|
340874996e | ||
|
|
3bd89154d3 | ||
|
|
1e198fbb83 | ||
|
|
01855fc66a | ||
|
|
7ac045b5e2 | ||
|
|
03f1617ff5 | ||
|
|
c75b20e37d | ||
|
|
08f72596d4 | ||
|
|
dcd1f90ae7 | ||
|
|
c10603d161 | ||
|
|
7ea335e59b | ||
|
|
d20cb91d90 | ||
|
|
e38d754e86 | ||
|
|
afacc47f33 | ||
|
|
5803cc441e | ||
|
|
d60c66deee | ||
|
|
d7797a50f5 | ||
|
|
87bbebed36 | ||
|
|
3aa33bf0b1 | ||
|
|
e37afd6976 | ||
|
|
791f2a63ac | ||
|
|
1917f2b98a | ||
|
|
78b74f1115 | ||
|
|
8ea24d9ff9 | ||
|
|
f36d5fdbdf | ||
|
|
d421fc6e6f | ||
|
|
90c4c9e96b | ||
|
|
0a79892923 | ||
|
|
d88f638fbc | ||
|
|
d29121a871 | ||
|
|
5b8e983478 | ||
|
|
24d47cb10b | ||
|
|
ae7b84a85f | ||
|
|
161240045f | ||
|
|
fe85fc9d25 | ||
|
|
b8a2cd1b06 | ||
|
|
eee51828cb | ||
|
|
1eddd9017b | ||
|
|
9c0582a103 | ||
|
|
6cd8b34abb | ||
|
|
47075bec49 | ||
|
|
8eb6cbd400 | ||
|
|
8f394b5c3f | ||
|
|
2245315b60 | ||
|
|
0d40661b33 | ||
|
|
e015b91ed1 | ||
|
|
de577709d9 | ||
|
|
52c6d79975 | ||
|
|
512064f1b5 | ||
|
|
a396b50610 | ||
|
|
67299fcd9f | ||
|
|
f7476dfb63 | ||
|
|
87f7672dbf | ||
|
|
648a958290 | ||
|
|
ed90e2fcf9 | ||
|
|
b74be70ffc | ||
|
|
2351431d71 | ||
|
|
7435f76609 | ||
|
|
d2c1a4a7fb | ||
|
|
e37fbfddc3 | ||
|
|
8ab884a89e | ||
|
|
42f438146c | ||
|
|
08b1b350db | ||
|
|
cbcd9b5004 | ||
|
|
162a0bbe46 | ||
|
|
69d50e583e | ||
|
|
40a8384087 | ||
|
|
6053b2b5c9 | ||
|
|
7e17497c1e | ||
|
|
b573be918e | ||
|
|
2fada14a65 | ||
|
|
cf64a2bc8e | ||
|
|
39fd3479b7 | ||
|
|
536133289f | ||
|
|
3f280649a9 | ||
|
|
6c80aa8c98 | ||
|
|
65c39f600f | ||
|
|
3b5a9f6c6a | ||
|
|
665db4bdad | ||
|
|
b34e7fa303 | ||
|
|
abc0458d4f | ||
|
|
1e35398a84 | ||
|
|
be3253bf87 | ||
|
|
241a762d04 | ||
|
|
b944687191 | ||
|
|
736c66ee31 | ||
|
|
d96f31d01b | ||
|
|
e30c096d87 | ||
|
|
be71b98c55 | ||
|
|
6bec3162f6 | ||
|
|
c863876dee | ||
|
|
f5d0542f06 | ||
|
|
b1650eb503 | ||
|
|
82b090e234 | ||
|
|
7f1e416d31 | ||
|
|
4312bf711c | ||
|
|
f8061448d1 | ||
|
|
e934bec4b7 | ||
|
|
4e5d7ba8ef | ||
|
|
59fd815c3d | ||
|
|
b901c6af71 | ||
|
|
b2fb6c7804 | ||
|
|
84c5f8f738 | ||
|
|
39c7f11b98 | ||
|
|
86a2d73931 | ||
|
|
8eb50c3517 | ||
|
|
d9defb19f9 | ||
|
|
874804bcfd | ||
|
|
b0f9662811 | ||
|
|
24850823a2 | ||
|
|
951604475b | ||
|
|
74f3bb2aa9 | ||
|
|
4442b798c9 | ||
|
|
f10a8de2c1 | ||
|
|
329b29269b | ||
|
|
5b3ffe6bab | ||
|
|
fb14500b41 | ||
|
|
ad29594d08 | ||
|
|
37e2142cca | ||
|
|
1e5f1de12c | ||
|
|
0f93dbcd5e | ||
|
|
e415d85dbe | ||
|
|
4c8bf53e69 | ||
|
|
83fcd4bd1f | ||
|
|
bfd960ad1b | ||
|
|
6b81808ecc | ||
|
|
c615a6f6e2 | ||
|
|
40b522b42f | ||
|
|
f2655b763f | ||
|
|
fd145e65aa | ||
|
|
6596b7f27e | ||
|
|
9d767838d6 | ||
|
|
f55219bb1b | ||
|
|
805b647c73 | ||
|
|
fd0351ca8f | ||
|
|
ed5a7802f3 | ||
|
|
44f8317b7e | ||
|
|
0200933ddd | ||
|
|
f712b2b63a | ||
|
|
71923e7cba | ||
|
|
532d14611c | ||
|
|
3a91a07d51 | ||
|
|
6a8287ea9f | ||
|
|
dc051541bd | ||
|
|
3265c2a614 | ||
|
|
f798401e93 | ||
|
|
60791e4c2b | ||
|
|
bd8fcc8f81 | ||
|
|
5d33165fa5 | ||
|
|
2e1d147135 | ||
|
|
ee8d24a260 | ||
|
|
81ac26c33c | ||
|
|
0a9cc924a4 | ||
|
|
86e12c9603 | ||
|
|
79e56f21d1 | ||
|
|
f9e4bb5288 | ||
|
|
d1085a40ba | ||
|
|
c0f83524a9 | ||
|
|
9d2976cef6 | ||
|
|
b20dd73b30 | ||
|
|
c32d5f1672 | ||
|
|
6eacade082 | ||
|
|
8baecb9c9c | ||
|
|
b7bdbffad4 | ||
|
|
c4e5a21c86 | ||
|
|
a494e05fd9 | ||
|
|
b5eed53db0 | ||
|
|
78881113b9 | ||
|
|
0d946d8083 | ||
|
|
2a20119fbb | ||
|
|
c84e56329f | ||
|
|
6348fe7362 | ||
|
|
20ab4dbf20 | ||
|
|
c09240de3b | ||
|
|
62b40b516c | ||
|
|
9d2bdd5681 | ||
|
|
46283cd513 | ||
|
|
5ba70c8c20 | ||
|
|
198fc2629e | ||
|
|
5848efe03b | ||
|
|
ca2a75db9c | ||
|
|
97474488d8 | ||
|
|
0f5ed59e50 | ||
|
|
114d78d378 | ||
|
|
fadd97c021 | ||
|
|
09764393e0 | ||
|
|
de8b4f17a1 | ||
|
|
52eab49359 | ||
|
|
3ac86a19ff | ||
|
|
0dea6dbc9d | ||
|
|
23283b7f0a | ||
|
|
7ac56a0d11 | ||
|
|
667f98334a | ||
|
|
6825b5d79a | ||
|
|
ac91a48182 | ||
|
|
855b46edee | ||
|
|
8a531ad2cb | ||
|
|
5a1dabc293 | ||
|
|
3705054095 | ||
|
|
0fed1cbedd | ||
|
|
f5a9b98578 | ||
|
|
bfbe86a3d5 | ||
|
|
d70631477d | ||
|
|
936cf5b60d | ||
|
|
8095490d23 | ||
|
|
740b421ce8 | ||
|
|
4273b6ce37 | ||
|
|
0717353069 | ||
|
|
bb494af6b0 | ||
|
|
05dfe0b0ac | ||
|
|
b63f6e807c | ||
|
|
18b982dc6a | ||
|
|
f5cfd7e6bf | ||
|
|
b16b759adf | ||
|
|
687e5d41e1 | ||
|
|
3ba3ac5813 | ||
|
|
b48ae6d519 | ||
|
|
e068d24920 | ||
|
|
85bc4f1027 | ||
|
|
005f8c7d1d | ||
|
|
0a72e7474e | ||
|
|
7a330340ac | ||
|
|
24e73b3134 | ||
|
|
c3e5b4225b | ||
|
|
85f1acb7b7 | ||
|
|
881b017606 | ||
|
|
5ff89dd695 | ||
|
|
cf02893d22 | ||
|
|
5011b9ead5 | ||
|
|
6746578120 | ||
|
|
a85247ff9f | ||
|
|
c363241fad | ||
|
|
d875bff471 | ||
|
|
44bc273590 | ||
|
|
9044531a80 | ||
|
|
f22ba886d9 | ||
|
|
3f6ac2fa68 | ||
|
|
7fd40f094a | ||
|
|
f873e3b630 | ||
|
|
6da938a714 | ||
|
|
934a7f70b2 | ||
|
|
9109751ff0 | ||
|
|
880107e72b | ||
|
|
f14c9e7ddd | ||
|
|
d736c8b281 | ||
|
|
a96f900760 | ||
|
|
45bb57a38c | ||
|
|
1b31eb9e4a | ||
|
|
d36043c678 | ||
|
|
54d10d21ec | ||
|
|
4c7a251f6d | ||
|
|
e597f68620 | ||
|
|
6ed00107cf | ||
|
|
ef2c7ac480 | ||
|
|
575b88ac04 | ||
|
|
2e0b8302dd | ||
|
|
a2ba0ae818 | ||
|
|
ae1f1599f6 | ||
|
|
296911bef9 | ||
|
|
05dc48df07 | ||
|
|
660c623dd0 | ||
|
|
b8f4a8ffb3 | ||
|
|
6bed14cb26 | ||
|
|
8cad96499d | ||
|
|
0ccad56ee6 | ||
|
|
d440360906 | ||
|
|
3c522a0e60 | ||
|
|
00fbc8289d | ||
|
|
1f386cf8bd | ||
|
|
86278b75e4 | ||
|
|
a94a324423 | ||
|
|
4df3bee178 | ||
|
|
e04c890018 | ||
|
|
e096814697 | ||
|
|
a6e188692e | ||
|
|
8d92c0668c | ||
|
|
759b869c1c | ||
|
|
c59db35ce2 | ||
|
|
d0d58ded29 | ||
|
|
65ce152e2c | ||
|
|
4fc8a588ed | ||
|
|
a585a27d1e | ||
|
|
1e703286f0 | ||
|
|
d72c476483 | ||
|
|
3fdc32d9d7 | ||
|
|
5e481951ea | ||
|
|
603537719e | ||
|
|
c4e3bd148f | ||
|
|
91f1eca95e | ||
|
|
8123cc27db | ||
|
|
e68fa34372 | ||
|
|
8476fc3b5a | ||
|
|
a41ec422d2 | ||
|
|
ca523edf0e | ||
|
|
43dfbe3f29 | ||
|
|
c1fc018449 | ||
|
|
6fa82da1f1 | ||
|
|
817524bd1c | ||
|
|
171a395369 | ||
|
|
4d8905abd6 | ||
|
|
d13982ea0e | ||
|
|
f79f85480b | ||
|
|
17c049d7e3 | ||
|
|
3fdab1222b | ||
|
|
c234f83ca6 | ||
|
|
640e955c38 | ||
|
|
307feefa87 | ||
|
|
15365c8702 | ||
|
|
bd9b43b482 | ||
|
|
77a890ff4a | ||
|
|
3f265b3f1c | ||
|
|
4b2a81e7ff | ||
|
|
6b2a865e57 | ||
|
|
324a3d09e6 | ||
|
|
8b44e3d6f6 | ||
|
|
0cc8d402d6 | ||
|
|
83e9513623 | ||
|
|
7ede817241 | ||
|
|
a09a6db24d | ||
|
|
2241e635c6 | ||
|
|
dd3db3fc54 | ||
|
|
928bf71d2a | ||
|
|
8e1470f637 | ||
|
|
91627b28b4 | ||
|
|
4594e02812 | ||
|
|
2af8cde40d | ||
|
|
97b94acd86 | ||
|
|
e0caacfa6f | ||
|
|
6ff46a795f | ||
|
|
9abaa1adf6 | ||
|
|
42d730c80f | ||
|
|
c3c15a95c4 | ||
|
|
384f87b89c | ||
|
|
a25dc9c38c | ||
|
|
1497e894cf | ||
|
|
e6728d9d55 | ||
|
|
c0443e25f9 | ||
|
|
7faa5db9e5 | ||
|
|
d53171e20f | ||
|
|
48eee328b9 | ||
|
|
21c6bb6b59 | ||
|
|
b0932825a9 | ||
|
|
be9587d520 | ||
|
|
635f411880 | ||
|
|
24f97fd221 | ||
|
|
ca3b857f22 | ||
|
|
bac0930591 | ||
|
|
1f31edf65c | ||
|
|
39328c5c66 | ||
|
|
26ea5bcfed | ||
|
|
2d0ad7fb72 | ||
|
|
cd22a1d00d | ||
|
|
485e514409 | ||
|
|
71b2c17e2c | ||
|
|
954688a38d | ||
|
|
def04c2524 | ||
|
|
963f071a70 | ||
|
|
e45aa63a8b | ||
|
|
5627d91c17 | ||
|
|
aef731fdbe | ||
|
|
5a9aeb165f | ||
|
|
c1fea5bc16 | ||
|
|
b5f9e14cd3 | ||
|
|
0ab31a2e9f | ||
|
|
4c941f81ec | ||
|
|
e6e7a55d7e | ||
|
|
f7bcb92d9a | ||
|
|
2406ae6e07 | ||
|
|
74b08589c4 | ||
|
|
5435718167 | ||
|
|
87c56ccfc4 | ||
|
|
1a29a6da1d | ||
|
|
d73bf834b3 | ||
|
|
ffbfd2c844 | ||
|
|
0f4f09c597 | ||
|
|
f5f44286bf | ||
|
|
65e57a8230 | ||
|
|
e74ba82093 | ||
|
|
b8eb18836f | ||
|
|
66a1c26b77 | ||
|
|
f4010029f1 | ||
|
|
cff9f83a45 | ||
|
|
0d7f141279 | ||
|
|
23578e963f | ||
|
|
e9518f78c7 | ||
|
|
7563f54e83 | ||
|
|
b7f1c65f7e | ||
|
|
e127ca0cd1 | ||
|
|
752957604e | ||
|
|
fba9c6c04d | ||
|
|
05b8e80ac8 | ||
|
|
5f9653d9ef | ||
|
|
d67caab621 | ||
|
|
5e9fe31f4e | ||
|
|
55173bf27a | ||
|
|
252eaa2d62 | ||
|
|
cfdacb900e | ||
|
|
8fe0061751 | ||
|
|
ee9672858c | ||
|
|
1ee0e23617 | ||
|
|
1dfd2e2ec1 | ||
|
|
65aa811344 | ||
|
|
e2992cbc02 | ||
|
|
a546cb8f7f | ||
|
|
9c24e48e68 | ||
|
|
862d606514 | ||
|
|
5f58c325ca | ||
|
|
c1d21c5513 | ||
|
|
d9c4ace613 | ||
|
|
59dfe52b52 | ||
|
|
d3f0718001 | ||
|
|
f460cac3ba | ||
|
|
4586a645fc | ||
|
|
beb8ec2668 | ||
|
|
e68c977ecf | ||
|
|
45de8f77cd | ||
|
|
ec9c6521fd | ||
|
|
bdb4ff0d83 | ||
|
|
f343614640 | ||
|
|
8841df96c0 | ||
|
|
8c6cad559e | ||
|
|
ed62ae124b | ||
|
|
0a7b725340 | ||
|
|
ac87484acc | ||
|
|
8235d6cb72 | ||
|
|
77c961ba40 | ||
|
|
154ed57633 | ||
|
|
b0d1d4ff44 | ||
|
|
52943d8399 | ||
|
|
980c954bf4 | ||
|
|
73bb8e4fdf | ||
|
|
3f56414824 | ||
|
|
7e29a7e5a4 | ||
|
|
7966c27246 | ||
|
|
c2af477758 | ||
|
|
b4eaf3722f | ||
|
|
ddf305fce5 | ||
|
|
857ab07f1c | ||
|
|
1f50dd7496 | ||
|
|
83143bd42e | ||
|
|
e19b0bce57 | ||
|
|
2e2d6ba35d | ||
|
|
aad4f3e753 | ||
|
|
d7e6ef4ce6 | ||
|
|
77eb380305 | ||
|
|
0326659b14 | ||
|
|
3bad60ce84 | ||
|
|
067faccdd2 | ||
|
|
253571fd35 | ||
|
|
a58fde68e6 | ||
|
|
8fe7a173cd | ||
|
|
fc9beafc32 | ||
|
|
2175814acf | ||
|
|
19072b6595 | ||
|
|
43e3055d11 | ||
|
|
ab64023e56 | ||
|
|
a8a50641f6 | ||
|
|
9722bcd3c3 | ||
|
|
9832a935d7 | ||
|
|
b12f0d865f | ||
|
|
77e630b78a | ||
|
|
30e5731f14 | ||
|
|
18311d6a4c | ||
|
|
17fdc6a0f3 | ||
|
|
33ac2e7d15 | ||
|
|
589aba3713 | ||
|
|
2e6174bd2c | ||
|
|
13dfceff48 | ||
|
|
f9bf87f50d | ||
|
|
0226c443e7 | ||
|
|
f91286dbf3 | ||
|
|
aec1249481 | ||
|
|
b919de9dd1 | ||
|
|
c2dad218e5 | ||
|
|
ddb300027c | ||
|
|
420b675746 | ||
|
|
1fe352d8a6 | ||
|
|
de7a92944f | ||
|
|
dae8e0d233 | ||
|
|
5260d63565 | ||
|
|
7aa85960ba | ||
|
|
dcbf62a294 | ||
|
|
42f2210f7f | ||
|
|
0717bf788a | ||
|
|
831c8b9189 | ||
|
|
8fdaaa2eab | ||
|
|
ce8a30bf8f | ||
|
|
0a0430051c | ||
|
|
8ba9cc102a | ||
|
|
bb5bfda5c6 | ||
|
|
b61f6d517b | ||
|
|
38f1a9a762 | ||
|
|
bda80fc748 | ||
|
|
553d8ccbb4 | ||
|
|
d8dfe0a1e9 | ||
|
|
ef9c8ce877 | ||
|
|
4dc0db6ee6 | ||
|
|
c93692a779 | ||
|
|
756e3b4a12 | ||
|
|
681531d128 | ||
|
|
6bff64f834 | ||
|
|
4dc26ab234 | ||
|
|
c6fc357c43 | ||
|
|
64cc1b106c | ||
|
|
b61619cf40 | ||
|
|
14cfdafd05 | ||
|
|
010893092e | ||
|
|
b5fd684160 | ||
|
|
a9c2409e0f | ||
|
|
6d5fedcf97 | ||
|
|
2881149f0b | ||
|
|
142d91dfb5 | ||
|
|
4d8b9aee2a | ||
|
|
04df2824cf | ||
|
|
059d856f45 | ||
|
|
2ce3a004ba | ||
|
|
e9e58fd791 | ||
|
|
4f22bc8162 | ||
|
|
1159f6d4f8 | ||
|
|
315c87bd4f | ||
|
|
e1bb96cc94 | ||
|
|
205c8a05c3 | ||
|
|
c288be3d4c | ||
|
|
feaf5ba5f2 | ||
|
|
f7838750c9 | ||
|
|
6051312dfb | ||
|
|
bafb0db6d1 | ||
|
|
31dcacb941 | ||
|
|
74105d6983 | ||
|
|
e4e306baca | ||
|
|
5f3c1816f9 | ||
|
|
90a198e3f1 | ||
|
|
2dbfe9f743 | ||
|
|
a68d834f8f | ||
|
|
c3b45f3237 | ||
|
|
61dca40679 | ||
|
|
94c6814be8 | ||
|
|
436e252d0e | ||
|
|
4032b91e72 | ||
|
|
509e24f966 | ||
|
|
d0f3c620d2 | ||
|
|
86263d05bc | ||
|
|
cee077d1d3 | ||
|
|
ee0b2b1249 | ||
|
|
b167bd6807 | ||
|
|
90e8923c31 | ||
|
|
7af74deaac | ||
|
|
d96b1ef525 | ||
|
|
0bd65614d0 | ||
|
|
0e3401da2c | ||
|
|
692adbd04a | ||
|
|
7b587dcc9c | ||
|
|
17c66cc2d3 | ||
|
|
d7de81aaaa | ||
|
|
a216f28c9d | ||
|
|
1180de51fd | ||
|
|
6844849305 | ||
|
|
af07d803fd | ||
|
|
284ca6ae68 | ||
|
|
122de7a7d7 | ||
|
|
e17f83c2cf | ||
|
|
7ed0f38623 | ||
|
|
ae2ae8b982 | ||
|
|
02a60acbcc | ||
|
|
69ba5b447f | ||
|
|
11c346ab02 | ||
|
|
88c2e9ea48 | ||
|
|
52cefc5543 | ||
|
|
3e1b76c0a9 | ||
|
|
f45c618fc2 | ||
|
|
9892624242 | ||
|
|
4dee68faaf | ||
|
|
04aa251dee | ||
|
|
be6db93698 | ||
|
|
c61473d060 | ||
|
|
47bdc58c1a | ||
|
|
70a862fced | ||
|
|
c6a39006d5 | ||
|
|
0c5df806bf | ||
|
|
94910216f7 | ||
|
|
f1b4bee88f | ||
|
|
87ee413141 | ||
|
|
823618aea8 | ||
|
|
bb3fb35c7e | ||
|
|
8f171c70f5 | ||
|
|
f11334cb3b | ||
|
|
df1461bba6 | ||
|
|
97749e6005 | ||
|
|
11ed747741 | ||
|
|
a982852e30 | ||
|
|
a811e653a7 | ||
|
|
0d4549a66e | ||
|
|
f3dbf24864 | ||
|
|
525027f993 | ||
|
|
e34116e340 | ||
|
|
55d0d40697 | ||
|
|
9d9e8a9217 | ||
|
|
167a4b4d12 | ||
|
|
c1e6773818 | ||
|
|
e1a223c7c3 | ||
|
|
21c13a850c | ||
|
|
64d8b7fbe7 | ||
|
|
8f82cd11b9 | ||
|
|
958e27c782 | ||
|
|
f032e663cd | ||
|
|
70a1b31f5d | ||
|
|
dc4b382b20 | ||
|
|
4308aa29dd | ||
|
|
043b5d351f | ||
|
|
97bfe08c04 | ||
|
|
407a64c118 | ||
|
|
e7513c8c58 | ||
|
|
3eda42075a | ||
|
|
85d35311d0 | ||
|
|
88a53f013e | ||
|
|
88edd1acd6 | ||
|
|
fd1305e4da | ||
|
|
35c50e01e1 | ||
|
|
2a409af54e | ||
|
|
cf3d5bc040 | ||
|
|
40da5697c5 | ||
|
|
ea759d7b68 | ||
|
|
34e779a654 | ||
|
|
8bc01eb375 | ||
|
|
b373763924 | ||
|
|
b2618ba148 | ||
|
|
6902ce007a | ||
|
|
e9b3b89620 | ||
|
|
1606a50bb4 | ||
|
|
4402bbda55 | ||
|
|
4bf3819778 | ||
|
|
9ecda0489b | ||
|
|
0dadda66cf | ||
|
|
aa20220627 | ||
|
|
45103ec496 | ||
|
|
397f257b39 | ||
|
|
0f20a22e10 | ||
|
|
e64567e119 | ||
|
|
73116752b9 | ||
|
|
cd33a17584 | ||
|
|
1a327a73a0 | ||
|
|
c1232136c2 | ||
|
|
06d6001b0c | ||
|
|
080ba94ed2 | ||
|
|
a13222f926 | ||
|
|
146f9a766e | ||
|
|
7b495437ae | ||
|
|
2b95e3b48b | ||
|
|
22fb1e2df4 | ||
|
|
52b6ae0bc2 | ||
|
|
e293e96f00 | ||
|
|
d4f87112ec | ||
|
|
f3ac8ee464 | ||
|
|
286e32c012 | ||
|
|
c39598b98d | ||
|
|
ae945f49e3 | ||
|
|
bdcfcc65ea | ||
|
|
d8d69f2aa8 | ||
|
|
70f29072bf | ||
|
|
9bdf6675fc | ||
|
|
3ba2ae0275 | ||
|
|
4f50e7e478 | ||
|
|
2e411a6019 | ||
|
|
6d9d39d4c8 | ||
|
|
dba223eb18 | ||
|
|
c072c0e82b | ||
|
|
7bb3f41fdc | ||
|
|
248c8b9da4 | ||
|
|
4213b4a409 | ||
|
|
e788dd352c | ||
|
|
2c869afbc6 | ||
|
|
108e8bdf0a | ||
|
|
7584571fbc | ||
|
|
e92d15e459 | ||
|
|
03b0d2eb00 | ||
|
|
0fcabe2b8e | ||
|
|
2925f3635f | ||
|
|
8628993fb0 | ||
|
|
4995b13994 | ||
|
|
f430bca472 | ||
|
|
c3403de216 | ||
|
|
dcfe9f7aff | ||
|
|
bac66e1e5e | ||
|
|
4eb5d2c5ed | ||
|
|
5bfd48c65c | ||
|
|
d1344fdd91 | ||
|
|
a8b392e662 | ||
|
|
9768cfb4ba | ||
|
|
975f33df52 | ||
|
|
49986bab5e | ||
|
|
a949b24434 | ||
|
|
6523b0e9c2 | ||
|
|
29f83b4364 | ||
|
|
efd2df8a33 | ||
|
|
58a9460f7c | ||
|
|
f9909f4226 | ||
|
|
56372cc46d | ||
|
|
c31d6b9ca3 | ||
|
|
6d9ace148e | ||
|
|
8d167158ae | ||
|
|
71a04aae23 | ||
|
|
21908bdaad | ||
|
|
1e056ca3fa | ||
|
|
45c1579a15 | ||
|
|
b85ebbbc2d | ||
|
|
060ca1915f | ||
|
|
de728dbefc | ||
|
|
bba37b1ff7 | ||
|
|
e5f19a4312 | ||
|
|
14be2649cf | ||
|
|
1f0f584397 | ||
|
|
2925077169 | ||
|
|
d0ada6b40a | ||
|
|
238da17196 | ||
|
|
9b8239bafa | ||
|
|
6d21761a4e | ||
|
|
16fcd1d1ad | ||
|
|
d9bd63fcb7 | ||
|
|
98b19656c9 | ||
|
|
93e5f86e24 | ||
|
|
2195ac9051 | ||
|
|
be2bf9faca | ||
|
|
b0edc68c3d | ||
|
|
a4057d569f | ||
|
|
f7966bd213 | ||
|
|
e8cc2df46c | ||
|
|
7283b1a177 | ||
|
|
26fdc3ea4b | ||
|
|
b52a2f4962 | ||
|
|
3376722a43 | ||
|
|
7dd4fd16fd | ||
|
|
178354099d | ||
|
|
d9cee7467f | ||
|
|
811f9c52c6 | ||
|
|
6dd90aeaef | ||
|
|
24e5d909d0 | ||
|
|
2101e17004 | ||
|
|
627f216bf7 | ||
|
|
1630805fd8 | ||
|
|
c77e0a3a56 | ||
|
|
f925c88753 | ||
|
|
973ebd153d | ||
|
|
4116aed738 | ||
|
|
0f917c24a5 | ||
|
|
2feaa8adf7 | ||
|
|
54590a843a | ||
|
|
91acaa2555 | ||
|
|
a0dc71378e | ||
|
|
c19f8f8997 | ||
|
|
bd3918bd64 | ||
|
|
d85d02ac02 | ||
|
|
32c30ad9e4 | ||
|
|
8dd9af23d4 | ||
|
|
2384a3d172 | ||
|
|
9814d442cd | ||
|
|
601241b2c7 | ||
|
|
63645de85b | ||
|
|
2849f0bc81 | ||
|
|
d2d5fcf07a | ||
|
|
8281eec60e | ||
|
|
146b33f120 | ||
|
|
483f28044b | ||
|
|
7597ac12b6 | ||
|
|
b06468e268 | ||
|
|
a3a700eeaf | ||
|
|
8d56332993 | ||
|
|
23c0b0f7b1 | ||
|
|
3ca8ada424 | ||
|
|
7040ad9990 | ||
|
|
a9d8a7d70f | ||
|
|
4237ab9925 | ||
|
|
db80ff5477 | ||
|
|
c73769607e | ||
|
|
841d0cfe0e | ||
|
|
d6e39b7ab0 | ||
|
|
31c70a7c38 | ||
|
|
edaa8f7817 | ||
|
|
8e52dc1e22 | ||
|
|
1e84b00126 | ||
|
|
ab02bfa7c0 | ||
|
|
b70b3382c7 | ||
|
|
5a4c05607d | ||
|
|
fa4f4bca73 | ||
|
|
ab65f2ab5e | ||
|
|
527e5a8610 | ||
|
|
e65019a6fc | ||
|
|
0009ff8853 | ||
|
|
70a6c59126 | ||
|
|
90a9708619 | ||
|
|
b5f50f283c | ||
|
|
44026aa899 | ||
|
|
e90fbfe138 | ||
|
|
848a930e1a | ||
|
|
2669a31171 | ||
|
|
59e06c8bbd | ||
|
|
3ed58ffde0 | ||
|
|
0542fa527c | ||
|
|
d48e4cd138 | ||
|
|
f020ffabeb | ||
|
|
1317f19de2 | ||
|
|
614ef4a35b | ||
|
|
c8524022b7 | ||
|
|
9c77896f2d | ||
|
|
d5abf459bb | ||
|
|
763533060a | ||
|
|
8cd2da61c5 | ||
|
|
8a7f6c8c01 | ||
|
|
290ca11fc7 | ||
|
|
8281b57c56 | ||
|
|
4803ed0a4e | ||
|
|
3313acac84 | ||
|
|
b52063e4e0 | ||
|
|
2e9349328a | ||
|
|
94901f8be3 | ||
|
|
06da3a1359 | ||
|
|
25af4de320 | ||
|
|
80c67e2d48 | ||
|
|
9cb0093a1a | ||
|
|
136c326059 | ||
|
|
3b56b0340d | ||
|
|
a7ff19ac98 | ||
|
|
18bc19a09c | ||
|
|
a781b4529b | ||
|
|
fbf10dcdf5 | ||
|
|
83a28ddab1 | ||
|
|
70dde551e3 | ||
|
|
fa9b30fa9e | ||
|
|
4f33bfb9f3 | ||
|
|
b2da348834 | ||
|
|
e0499b587e | ||
|
|
9d4c41e051 | ||
|
|
707d2dae71 | ||
|
|
9422e32f23 | ||
|
|
d2a5e3b675 | ||
|
|
727693248d | ||
|
|
c1e625cc4b | ||
|
|
77b6ce1c27 | ||
|
|
a207abcfc1 | ||
|
|
7177bd3597 | ||
|
|
67a5c8e314 | ||
|
|
fec12819fa | ||
|
|
08419440f1 | ||
|
|
18e892f473 | ||
|
|
48aef61027 | ||
|
|
b7c0c9589a | ||
|
|
24b9c5698e | ||
|
|
3a5d1ace91 | ||
|
|
4e96ed3e74 | ||
|
|
00ed02f831 | ||
|
|
3851014634 | ||
|
|
fef8dfd05b | ||
|
|
bbcfc0ff1d | ||
|
|
5f0699d382 | ||
|
|
fc1e00b7ef | ||
|
|
b284ab7566 | ||
|
|
ada56a1c03 | ||
|
|
160117ffbb | ||
|
|
f04f941dbb | ||
|
|
e68a3606a9 | ||
|
|
27cb700259 | ||
|
|
f75ae3e046 | ||
|
|
d272334c71 | ||
|
|
9587afc5ed | ||
|
|
fd39f14b4e | ||
|
|
1893bfe93d | ||
|
|
c87a054b4c | ||
|
|
587a893a0e | ||
|
|
fbffa1c7bc | ||
|
|
e3d6e50ba0 | ||
|
|
b7dfb2c294 | ||
|
|
3c59221dd1 | ||
|
|
d310ae948d | ||
|
|
67cd7713b8 | ||
|
|
f5346129ae | ||
|
|
a333a65419 | ||
|
|
982ef41814 | ||
|
|
7f8ca17752 | ||
|
|
33d8290fd4 | ||
|
|
f3b17cf021 | ||
|
|
b5a917fb08 | ||
|
|
739787e8c4 | ||
|
|
d988e8d764 | ||
|
|
a6193b0a51 | ||
|
|
8552090f50 | ||
|
|
286b6448be | ||
|
|
48961ed3df | ||
|
|
1b4c8991c8 | ||
|
|
a35edc95cf | ||
|
|
91c2f62c9e | ||
|
|
7a7f98955b | ||
|
|
3a877a51b5 | ||
|
|
17519c21b4 | ||
|
|
ead1243c61 | ||
|
|
fad389faab | ||
|
|
af63023d92 | ||
|
|
0b51f09a38 | ||
|
|
18abe94e7f | ||
|
|
128eaf5790 | ||
|
|
bfe0ba7e99 | ||
|
|
1bbc51c947 | ||
|
|
1097e246a4 | ||
|
|
f90a4871b4 | ||
|
|
e0111195a5 | ||
|
|
bb09d3fe74 | ||
|
|
e88f29d3ac | ||
|
|
084c7db9ac | ||
|
|
1af6979e88 | ||
|
|
f28bfa4ad1 | ||
|
|
7efa96c732 | ||
|
|
2eb6d9a0fb | ||
|
|
02546459ea | ||
|
|
b6ac5e3be0 | ||
|
|
bc25ffb52c | ||
|
|
3d1b79464c | ||
|
|
221a8dc530 | ||
|
|
36406e2fd9 | ||
|
|
7e35c7750e | ||
|
|
c1ab094938 | ||
|
|
26b954fdc6 | ||
|
|
1221b5c271 | ||
|
|
f1f888bd11 | ||
|
|
869bdb727a | ||
|
|
076d13a7c2 | ||
|
|
109ca396b9 | ||
|
|
ce0395947f | ||
|
|
551b52922a | ||
|
|
90938b100c | ||
|
|
ee0ebe1c04 | ||
|
|
23f727351c | ||
|
|
133af79c45 | ||
|
|
704d998c7f | ||
|
|
e50a4463a5 | ||
|
|
6a2ed3d078 | ||
|
|
0ad5680597 | ||
|
|
2e0baa7162 | ||
|
|
11e08642f3 | ||
|
|
8760214817 | ||
|
|
d760ad7293 | ||
|
|
0a247868df | ||
|
|
15b9e775a1 | ||
|
|
82ce20210f | ||
|
|
467659200d | ||
|
|
5639273cec | ||
|
|
07f2459178 | ||
|
|
be6b46b793 | ||
|
|
bd4d04f914 | ||
|
|
c27ae16b42 | ||
|
|
affa24e596 | ||
|
|
52408145c1 | ||
|
|
19af887257 | ||
|
|
607b56be97 | ||
|
|
c7ad748e98 | ||
|
|
f8f783737d | ||
|
|
a6cec6a04e | ||
|
|
8dee1a3e9f | ||
|
|
eef643cf63 | ||
|
|
290183040f | ||
|
|
ee2890517c | ||
|
|
46cd43ab9e | ||
|
|
4ca84e8049 | ||
|
|
a4bb6234ac | ||
|
|
dac2a302ec | ||
|
|
72eddb7286 | ||
|
|
f0cdf398a6 | ||
|
|
ffb1a3d11e | ||
|
|
721253bf49 | ||
|
|
526c143eb5 | ||
|
|
4d2f7ae9e2 | ||
|
|
d7851132c4 | ||
|
|
6f7890b709 | ||
|
|
d3be481327 | ||
|
|
256afa8b9d | ||
|
|
770eb0bdaf | ||
|
|
6e8578ff6c | ||
|
|
5e585c69ff | ||
|
|
3db5e42b96 | ||
|
|
ae1bc651d6 | ||
|
|
fafbb3cc63 | ||
|
|
6251c3f8ab | ||
|
|
1e60161932 | ||
|
|
6cc969a89c | ||
|
|
0235bec410 | ||
|
|
12e9ddfa2b | ||
|
|
8a9ec4c706 | ||
|
|
5509bfc003 | ||
|
|
48f51b3ce3 | ||
|
|
6bc31a0023 | ||
|
|
fb1f73fbd4 | ||
|
|
970dfb9cfd | ||
|
|
87daea8a06 | ||
|
|
edeb0d7bd7 | ||
|
|
1d93cd25e5 | ||
|
|
80cd65d347 | ||
|
|
4a2482e950 | ||
|
|
bc6e5213a0 | ||
|
|
434a06cb72 | ||
|
|
05a31bd656 | ||
|
|
b60765e976 | ||
|
|
c61566dec0 | ||
|
|
0fe9a9535e | ||
|
|
048356a393 | ||
|
|
7704960e1d | ||
|
|
e36199c499 | ||
|
|
9ea1610d37 | ||
|
|
a6fac1e009 | ||
|
|
157add3eea | ||
|
|
d81f236910 | ||
|
|
dedd860d40 | ||
|
|
294e54c42b | ||
|
|
690dae5c17 | ||
|
|
72eafeaf40 | ||
|
|
51253193e0 | ||
|
|
4a55f7b845 | ||
|
|
bc477e1ce1 | ||
|
|
b436898d2a | ||
|
|
742b829c82 | ||
|
|
c5196b4ebf | ||
|
|
0599e675a0 | ||
|
|
3dc5162079 | ||
|
|
6c73256196 | ||
|
|
d5b312866d | ||
|
|
cf46e52035 | ||
|
|
475e5865d7 | ||
|
|
1248aa95cb | ||
|
|
ce24c87a3f | ||
|
|
2076b90d92 | ||
|
|
06fa29678b | ||
|
|
00d680f4bd | ||
|
|
d6a671d4ae | ||
|
|
501225c630 | ||
|
|
f407c5aabd | ||
|
|
d8b52111cf | ||
|
|
1851595aff | ||
|
|
6249831bb9 | ||
|
|
0020568823 | ||
|
|
a4e01d4593 | ||
|
|
3cfc00b355 | ||
|
|
49f566dc9f | ||
|
|
4280ee1f0a | ||
|
|
3bb8fcf655 | ||
|
|
65291ace12 | ||
|
|
7674545814 | ||
|
|
d86d9f66a9 | ||
|
|
db2b487247 | ||
|
|
29356ef465 | ||
|
|
dae36f59d2 | ||
|
|
6840041ee6 | ||
|
|
9bfc82cfc7 | ||
|
|
c9201111ab | ||
|
|
3ef92baa74 | ||
|
|
423f677264 | ||
|
|
7412d1ac43 | ||
|
|
2068f3fc60 | ||
|
|
82c99695d7 | ||
|
|
f9ee7e01bf | ||
|
|
8817e71c99 | ||
|
|
3beb47f8d9 | ||
|
|
de38219927 | ||
|
|
e208c0f8cf | ||
|
|
ca33ccc60e | ||
|
|
7c0fc3b777 | ||
|
|
20d825b054 | ||
|
|
d579dc16f1 | ||
|
|
0ba7b18032 | ||
|
|
fa0deffc5d | ||
|
|
e94b5f9e54 | ||
|
|
f1df1de64f | ||
|
|
1f5c0639b9 | ||
|
|
dedd82747a | ||
|
|
d5e8fc6fea | ||
|
|
794ef66392 | ||
|
|
0dffc13e49 | ||
|
|
9a435c1a7e | ||
|
|
fcee1e5496 | ||
|
|
f8b8b5db13 | ||
|
|
5ac4b41281 | ||
|
|
68d8840075 | ||
|
|
0af847bd29 | ||
|
|
af98432881 | ||
|
|
b819cfcbe8 | ||
|
|
501a714b98 | ||
|
|
d55ddd4795 | ||
|
|
37221a5fe5 | ||
|
|
5e27e6dd78 | ||
|
|
0a3f380718 | ||
|
|
794e2e47d0 | ||
|
|
e18ee42afc | ||
|
|
789c619169 | ||
|
|
ad4a5f9ef4 | ||
|
|
b2b8bfc433 | ||
|
|
f6e12f82de | ||
|
|
b68e8f059b | ||
|
|
8d977d43bb | ||
|
|
be89e23030 | ||
|
|
4840d1db93 | ||
|
|
bb39276ccc | ||
|
|
a74609d321 | ||
|
|
ceb7eaaf47 | ||
|
|
c664a48f26 | ||
|
|
7b9c8634f4 | ||
|
|
df446510da | ||
|
|
c60cdbba07 | ||
|
|
1e5e742601 | ||
|
|
0a88fe1f3b | ||
|
|
d49acfc087 | ||
|
|
b5b74388f4 | ||
|
|
b7d01b4889 | ||
|
|
717677402c | ||
|
|
288c8fedce | ||
|
|
f2525acedf | ||
|
|
ec09699fb0 | ||
|
|
693de2a9dd | ||
|
|
7d875076e2 | ||
|
|
880b93246c | ||
|
|
b33321d6c6 | ||
|
|
d24450f4a9 | ||
|
|
862518e7da | ||
|
|
8117df5644 | ||
|
|
cb56b3f76b | ||
|
|
1bb398c6c2 | ||
|
|
1949c586f3 | ||
|
|
23897eca23 | ||
|
|
df7ee3b166 | ||
|
|
0142d33d5c | ||
|
|
52c1d027ee | ||
|
|
0be35a3799 | ||
|
|
119942b7a4 | ||
|
|
b6246a7ba4 | ||
|
|
a40e6ba693 | ||
|
|
49dc994351 | ||
|
|
5ea864f09d | ||
|
|
30024767ea | ||
|
|
593e44ca54 | ||
|
|
0dee88e805 | ||
|
|
5153d9a198 | ||
|
|
e651147c53 | ||
|
|
047e63ee5f | ||
|
|
b7bb3daa9d | ||
|
|
3f9ea1d01b | ||
|
|
9cfe1b88fc | ||
|
|
951cce7543 | ||
|
|
f9d96f55a5 | ||
|
|
cc9c3a2a28 | ||
|
|
db4d4ed278 | ||
|
|
dbddc3dd75 | ||
|
|
d8f65dc427 | ||
|
|
f3d31a1946 | ||
|
|
1cbd959ae8 | ||
|
|
8bfe851446 | ||
|
|
5917029788 | ||
|
|
7512c01ca6 | ||
|
|
f42befadf1 | ||
|
|
e42d506a64 | ||
|
|
9e3fb9f3ce | ||
|
|
3806c93867 | ||
|
|
4b71dd3c08 | ||
|
|
10e995aa06 | ||
|
|
e1df43703c | ||
|
|
b088ee69cd | ||
|
|
0a8ac3ba04 | ||
|
|
2243b56115 | ||
|
|
87eb7f1e1f | ||
|
|
9db778a1ed | ||
|
|
7295837135 | ||
|
|
513f377a8f | ||
|
|
25628d09e6 | ||
|
|
f62636e893 | ||
|
|
c5a243ba43 | ||
|
|
e9e7974b15 | ||
|
|
e703a7b5b7 | ||
|
|
40d9e13334 | ||
|
|
32eac3ff13 | ||
|
|
64c526ede2 | ||
|
|
458f22d214 | ||
|
|
599d25c59b | ||
|
|
390391e119 | ||
|
|
bbf248fc46 | ||
|
|
d4b1a0daa5 | ||
|
|
edf3b43e2f | ||
|
|
14edc2246e | ||
|
|
398a2dfd30 | ||
|
|
7acc51ef67 | ||
|
|
7e10e4d6eb | ||
|
|
7801682377 | ||
|
|
c695a7eabb | ||
|
|
aa338d234d | ||
|
|
1b931172fb | ||
|
|
84913da5b9 | ||
|
|
c59f1bfea6 | ||
|
|
993af8c19e | ||
|
|
20e2a4055c | ||
|
|
8dcaa48651 | ||
|
|
ce8047bd8c | ||
|
|
4b722cc253 | ||
|
|
c121b180be | ||
|
|
a8d1a7cba1 | ||
|
|
5d111636b4 | ||
|
|
c634f2e6e3 | ||
|
|
2473d626d8 | ||
|
|
4507712a72 | ||
|
|
2e8ca89f3d | ||
|
|
82493343fa | ||
|
|
33b6cbc2a9 | ||
|
|
802c18cb68 | ||
|
|
31606db6fe | ||
|
|
1144cc9ad9 | ||
|
|
df6c0b610b | ||
|
|
e01bba4525 | ||
|
|
4c287191cd | ||
|
|
e883e93f52 | ||
|
|
a37e62337d | ||
|
|
6177f89c3f | ||
|
|
81fd8e011f | ||
|
|
0800cdbbc2 | ||
|
|
7187b883b0 | ||
|
|
ef6b65afb4 | ||
|
|
7f362de7db | ||
|
|
d72a49ad5c | ||
|
|
4c166eb3e3 | ||
|
|
66b2659a47 | ||
|
|
efe0ceb588 | ||
|
|
02bf212789 | ||
|
|
5804af6b6c | ||
|
|
7c072094ae | ||
|
|
37089065ba | ||
|
|
d993e4ebc8 | ||
|
|
0ec98e32d4 | ||
|
|
d55c611947 | ||
|
|
f3b6868e51 | ||
|
|
4105fe41fb | ||
|
|
84e0f315ad | ||
|
|
4890a26ae0 | ||
|
|
1470315356 | ||
|
|
456ea95794 | ||
|
|
de6c1f88dc | ||
|
|
712a922cc5 | ||
|
|
97ed78109c | ||
|
|
2415fd3415 | ||
|
|
6a6fd48af9 | ||
|
|
983f6e28f5 | ||
|
|
6445af6eb2 | ||
|
|
376e699515 | ||
|
|
e0394921e9 | ||
|
|
4624d2d175 | ||
|
|
541dfdfc7f | ||
|
|
5b5b9cc6c9 | ||
|
|
9efcd9a096 | ||
|
|
e15807eff8 | ||
|
|
c7267d3665 | ||
|
|
7c37e86283 | ||
|
|
4497532edb | ||
|
|
b9a6dca4b4 | ||
|
|
803bac5da0 | ||
|
|
91e8e0d33c | ||
|
|
5470f7ff5e | ||
|
|
dabfff8b35 | ||
|
|
e96d316d41 | ||
|
|
ff0c9334e6 | ||
|
|
34f665dc7e | ||
|
|
18da716016 | ||
|
|
e3c40359d4 | ||
|
|
0689f4bb36 | ||
|
|
2ffc6b3acd | ||
|
|
99f8d2fa84 | ||
|
|
cf33fb3ca1 | ||
|
|
028f468d26 | ||
|
|
ee54396670 | ||
|
|
5583a75eac | ||
|
|
d841f27b25 | ||
|
|
cebc531c13 | ||
|
|
b8858663f4 | ||
|
|
53dfb8efb9 | ||
|
|
b501a1deae | ||
|
|
dc3bd53f7b | ||
|
|
31a3ee3cbc | ||
|
|
afc9412191 | ||
|
|
64bc5409d1 | ||
|
|
b76abc3550 | ||
|
|
5640ee8a23 | ||
|
|
d32b583b3e | ||
|
|
e0da758d1b | ||
|
|
6c5b63707d | ||
|
|
4f9ec8caa0 | ||
|
|
e649ad8241 | ||
|
|
5826be9a74 | ||
|
|
406403cd8e | ||
|
|
3f8510eaae | ||
|
|
11eba8738c | ||
|
|
cd0bda3ab4 | ||
|
|
464031e8d3 | ||
|
|
6c81bb54f7 | ||
|
|
f5d89062e0 | ||
|
|
0f685fbb49 | ||
|
|
de3bb1b39d | ||
|
|
ade09b0630 | ||
|
|
1e7b6d6dbe | ||
|
|
23d436237c | ||
|
|
9f12d3a380 | ||
|
|
618940d78c | ||
|
|
538e5691f0 | ||
|
|
9e23d15d51 | ||
|
|
f21fbc24cf | ||
|
|
efed4a07ef | ||
|
|
0d02d1e41b | ||
|
|
d6575ed267 | ||
|
|
9031c24fc7 | ||
|
|
89991594de | ||
|
|
8ec4e40ae1 | ||
|
|
262d36f49a | ||
|
|
ec7116f2ed | ||
|
|
9468b04713 | ||
|
|
5cdb6dcb12 | ||
|
|
bae445d9d2 | ||
|
|
5f2441e832 | ||
|
|
275f5bd744 | ||
|
|
4aaf55b4b7 | ||
|
|
acd7fa90ef | ||
|
|
0192c538ee | ||
|
|
aed639bb20 | ||
|
|
5fe01f0149 | ||
|
|
3a054b9f91 | ||
|
|
511ceede3b | ||
|
|
7dbf01b024 | ||
|
|
170d1cb94c | ||
|
|
1f236cab75 | ||
|
|
95e7045db7 | ||
|
|
f45f8c9479 | ||
|
|
1ad5711b63 | ||
|
|
06cf30019b | ||
|
|
7a1ee439d2 | ||
|
|
f1e44bfd47 | ||
|
|
89a33c0ab3 | ||
|
|
a8aeeb5a6a | ||
|
|
a679766740 | ||
|
|
f5e50d4571 | ||
|
|
5cf5f40c65 | ||
|
|
ddffd9acd6 | ||
|
|
bc9892d324 | ||
|
|
0f7044a90f | ||
|
|
c9bc6eac69 | ||
|
|
bfdfc495a3 | ||
|
|
faf147d029 | ||
|
|
6bcdb55f22 | ||
|
|
413fd004da | ||
|
|
ee07f860fc | ||
|
|
af89879750 | ||
|
|
a94561fba7 | ||
|
|
f07ca859e5 | ||
|
|
b7f5404062 | ||
|
|
a8a5d4bca9 | ||
|
|
c998a51f71 | ||
|
|
3b771a6a94 | ||
|
|
3d3c039596 | ||
|
|
2859123c47 | ||
|
|
c278e6414c | ||
|
|
a6b2d30bd0 | ||
|
|
acb61a3cf2 | ||
|
|
3f359147c8 | ||
|
|
a1b6f0b76a | ||
|
|
ca5d78e7a5 | ||
|
|
7431a18bbe | ||
|
|
c9a5443539 | ||
|
|
e8c91f0537 | ||
|
|
8190379519 | ||
|
|
4ffc0d2247 | ||
|
|
3c2f7983a5 | ||
|
|
527ba52dec | ||
|
|
17d5f8985d | ||
|
|
232c4b482a | ||
|
|
657ce60ff8 | ||
|
|
839b243bf1 | ||
|
|
9534b2af1d | ||
|
|
b8406a5b95 | ||
|
|
b097ca9979 | ||
|
|
54651731f9 | ||
|
|
f19985c410 | ||
|
|
2c1ebae039 | ||
|
|
a1f213cfd0 | ||
|
|
d65c4c1892 | ||
|
|
2465b0e278 | ||
|
|
fa18568d62 | ||
|
|
d78de3237c | ||
|
|
6066f48d7c | ||
|
|
20695d6b15 | ||
|
|
3f4bb44310 | ||
|
|
4ab7d78574 | ||
|
|
74336d952d | ||
|
|
ade01ecb86 | ||
|
|
91d4c4aa37 | ||
|
|
17cbb835ce | ||
|
|
b2bf0301bb | ||
|
|
7a5f9e80e7 | ||
|
|
b5e561e68f | ||
|
|
b3b272e2e2 | ||
|
|
df5cfb303b | ||
|
|
191ebbcacf | ||
|
|
44b700a6fd | ||
|
|
97b74fa6ea | ||
|
|
843650e79e | ||
|
|
a4553e821f | ||
|
|
2c7f54134e | ||
|
|
7287dce376 | ||
|
|
3143a46e4d | ||
|
|
155cf385bd | ||
|
|
ce332571dc | ||
|
|
6a7648d2b0 | ||
|
|
ee890c508e | ||
|
|
10afd0b684 | ||
|
|
38c03ecbbb | ||
|
|
d8884e3a2f | ||
|
|
80e379820d | ||
|
|
d3b120fafd | ||
|
|
02c028d14f | ||
|
|
5769ae3e78 | ||
|
|
b941d16f78 | ||
|
|
b8cedae527 | ||
|
|
913cb296b4 | ||
|
|
c4abe44e67 | ||
|
|
2c5b75a695 | ||
|
|
3e0f9d3931 | ||
|
|
dc5e4e61c5 | ||
|
|
093e19aae6 | ||
|
|
83e6ecb5af | ||
|
|
8067a480c7 | ||
|
|
9cdc963c97 | ||
|
|
f38c132efe | ||
|
|
cd70ba753e | ||
|
|
a0c18d97fd | ||
|
|
d05c4e60be | ||
|
|
494e384d9e | ||
|
|
2b4e73e885 | ||
|
|
ce7fbe6398 | ||
|
|
afef852609 | ||
|
|
7d5066bc3c | ||
|
|
140f2fc0dd | ||
|
|
d1c6b6b789 | ||
|
|
c6d6865bb9 | ||
|
|
a9da983d02 | ||
|
|
eed1e4fe8a | ||
|
|
a90d588167 | ||
|
|
8f7b9f609f | ||
|
|
82f7a23be4 | ||
|
|
2e0be1f75a | ||
|
|
6df4fea079 | ||
|
|
84f838aab0 | ||
|
|
e47aa28af9 | ||
|
|
1703e9f8d9 | ||
|
|
69e837c1ea | ||
|
|
913bb359a0 | ||
|
|
a691abc630 | ||
|
|
93fba0a8e7 | ||
|
|
85231dfca6 | ||
|
|
01b210f42a | ||
|
|
0e13200911 | ||
|
|
37b8819fc5 | ||
|
|
66ed78f2c8 | ||
|
|
406ef3741c | ||
|
|
e168b00ee0 | ||
|
|
1a727febe9 | ||
|
|
096bb8bf74 | ||
|
|
f33a6076dc | ||
|
|
bf8fb7bad6 | ||
|
|
271f60b65a | ||
|
|
c90eec2814 | ||
|
|
57c7e56203 | ||
|
|
7b7278bc85 | ||
|
|
4d79754f78 | ||
|
|
34fe57d84b | ||
|
|
4b975efa23 | ||
|
|
e90046d8a2 | ||
|
|
279dfd741a | ||
|
|
5ef141187a | ||
|
|
39a4d3ce4e | ||
|
|
3f6193580c | ||
|
|
18ea20e7b0 | ||
|
|
dc52ec7aec | ||
|
|
b800ed0a10 | ||
|
|
df1a8e8667 | ||
|
|
9fa484dbab | ||
|
|
b102134ae3 | ||
|
|
675a60b3d4 | ||
|
|
03445d0b55 | ||
|
|
678829a5b2 | ||
|
|
7138769182 | ||
|
|
4a90499ec9 | ||
|
|
446adf1983 | ||
|
|
ab0d785ab5 | ||
|
|
083380297f | ||
|
|
88983caaba | ||
|
|
3e5f434df3 | ||
|
|
cfb795c23c | ||
|
|
f25091414e | ||
|
|
85c3ee823f | ||
|
|
d5adcdd1b2 | ||
|
|
8cbaacfe38 | ||
|
|
8e191dabbd | ||
|
|
5d01952254 | ||
|
|
5729230f56 | ||
|
|
f27baec6fb | ||
|
|
56b0026160 | ||
|
|
2c8b2b48bd | ||
|
|
790e0a8327 | ||
|
|
16750c19ce | ||
|
|
a29a4d69d9 | ||
|
|
2ec8cdb86d | ||
|
|
34425d892c | ||
|
|
7fa6740710 | ||
|
|
99b8168ea8 | ||
|
|
7bcee22890 | ||
|
|
a0ac42cf6d | ||
|
|
7f6e2e4bf4 | ||
|
|
65ee46c0fb | ||
|
|
16d33f8960 | ||
|
|
4595aae0de | ||
|
|
378eccc6ea | ||
|
|
d0dd60f295 | ||
|
|
3d43293a5d | ||
|
|
32f14f48b0 | ||
|
|
465aa00fc7 | ||
|
|
f929d79473 | ||
|
|
7f9f7d49c6 | ||
|
|
55d4604d8f | ||
|
|
5d00a845ac | ||
|
|
79a0403163 | ||
|
|
be85c568ab | ||
|
|
705e39473d | ||
|
|
430fc7b596 | ||
|
|
cd9a0cd1d5 | ||
|
|
2057f3ff15 | ||
|
|
6e47834e8a | ||
|
|
4a477244f1 | ||
|
|
3b073343cc | ||
|
|
76c98e7140 | ||
|
|
047599e12c | ||
|
|
b5fecc49a3 | ||
|
|
b8eb4c26ea | ||
|
|
52d88a7282 | ||
|
|
5927cef89f | ||
|
|
10a7e7a15f | ||
|
|
e50efceb62 | ||
|
|
559f93f353 | ||
|
|
40f26cb975 | ||
|
|
12bf837eee | ||
|
|
8ef6d7ffec | ||
|
|
37f145f6bd | ||
|
|
c25ae58c6f | ||
|
|
142082837c | ||
|
|
358f098b65 | ||
|
|
626bf27887 | ||
|
|
86ed9f68f6 | ||
|
|
a0cb6dda94 | ||
|
|
97a24c006a | ||
|
|
56893a0731 | ||
|
|
0f17734896 | ||
|
|
4b4fa06432 | ||
|
|
5a77ed14bf | ||
|
|
e8ebb7d23d | ||
|
|
ab97832a78 | ||
|
|
5d071ceebe | ||
|
|
9983bcfbe6 | ||
|
|
ba1497ca48 | ||
|
|
f2fa60e56b | ||
|
|
27536283f2 | ||
|
|
9d4337b7eb | ||
|
|
532e7c906d | ||
|
|
46e8057f9c | ||
|
|
a6e845088d | ||
|
|
d9936dbbfb | ||
|
|
91292f0bfa | ||
|
|
5000687b10 | ||
|
|
20c8a11925 | ||
|
|
319287dbe5 | ||
|
|
7117633204 | ||
|
|
c57f861f2b | ||
|
|
35122e6601 | ||
|
|
60ef26ec51 | ||
|
|
f3f50a948e | ||
|
|
ce658e8a96 | ||
|
|
961715ab62 | ||
|
|
a699e94b2b | ||
|
|
b1d1783da4 | ||
|
|
6bdee6a5bd | ||
|
|
08adfb5746 | ||
|
|
3b6cdf32fc | ||
|
|
5b67f8528a | ||
|
|
613fe3740f | ||
|
|
d2fa215aa9 | ||
|
|
3279cba559 | ||
|
|
1881d12f61 | ||
|
|
1aa585e56b | ||
|
|
47d65c3f89 | ||
|
|
b5dbd794de | ||
|
|
a1c4077d83 | ||
|
|
5799e35327 | ||
|
|
73ca53eadc | ||
|
|
ede7fa86fa | ||
|
|
9da3d9a5bf | ||
|
|
9eb78a0a19 | ||
|
|
92be17986f | ||
|
|
30235f49db | ||
|
|
395b372ef7 | ||
|
|
bc022789fc | ||
|
|
f1d1acd487 | ||
|
|
53b818ac3b | ||
|
|
90c9686684 | ||
|
|
0c43fa92e5 | ||
|
|
56e96a8ff9 | ||
|
|
37e54ebd9f | ||
|
|
a6c67dde55 | ||
|
|
e5a7cc4a1c | ||
|
|
e2a72b2798 | ||
|
|
d33eff635b | ||
|
|
eb4089657e | ||
|
|
50969601bf | ||
|
|
de314d253e | ||
|
|
2788198b75 | ||
|
|
8f8a83a038 | ||
|
|
9dd0ef681d | ||
|
|
3442ba7483 | ||
|
|
2a921b40af | ||
|
|
be67773dd7 | ||
|
|
64010cf797 | ||
|
|
12c21de66c | ||
|
|
476a4ec882 | ||
|
|
3d12b33113 | ||
|
|
a7c9005626 | ||
|
|
a52607e346 | ||
|
|
83a5a78728 | ||
|
|
f6478a2c0c | ||
|
|
6c6071b939 | ||
|
|
67a7c326fc | ||
|
|
ee25b2e5b2 | ||
|
|
f9b42716d2 | ||
|
|
5a8c75e4a8 | ||
|
|
e68674bc5e | ||
|
|
ecc37c4d1f | ||
|
|
a59e098b5a | ||
|
|
268a6dc6c1 | ||
|
|
306681bc93 | ||
|
|
ac9700f261 | ||
|
|
0e60733537 | ||
|
|
f8fd636eac | ||
|
|
ada8047419 | ||
|
|
0a312295db | ||
|
|
dca272e12d | ||
|
|
a15d3d5811 | ||
|
|
246dab3375 | ||
|
|
f60148979f | ||
|
|
a83077285f | ||
|
|
9140f071f6 | ||
|
|
5dc7ef9ed1 | ||
|
|
8831ed80df | ||
|
|
5e6cb22eeb | ||
|
|
86e6745f21 | ||
|
|
667ccfad76 | ||
|
|
ba14536441 | ||
|
|
52b687dc55 | ||
|
|
fabef0334b | ||
|
|
eea4e383f9 | ||
|
|
149bcea2d8 | ||
|
|
2c1bbd5efb | ||
|
|
ca8bf22423 | ||
|
|
ab22d56735 | ||
|
|
a2e2ed1ecf | ||
|
|
b3ae282522 | ||
|
|
f430a63312 | ||
|
|
7a2c94f6e1 | ||
|
|
2d9f72c2a8 | ||
|
|
540c69897e | ||
|
|
48bff06202 | ||
|
|
7d9d2f3982 | ||
|
|
076b336b0f | ||
|
|
a3695f1cfd | ||
|
|
44416bbf7f | ||
|
|
fbeb2737bd | ||
|
|
5103ef27e6 | ||
|
|
fca9f7a458 | ||
|
|
05f20fa664 | ||
|
|
b25bb59aea | ||
|
|
af19813d99 | ||
|
|
6ad8563c16 | ||
|
|
82ea30cf3f | ||
|
|
809c8bf291 | ||
|
|
6366284385 | ||
|
|
9a50e7ea99 | ||
|
|
3dc44bafb3 | ||
|
|
9ebcb3b141 | ||
|
|
4b0dc9c0df | ||
|
|
f25e7ff004 | ||
|
|
d8a8b31eb4 | ||
|
|
385ae40646 | ||
|
|
0448b4902c | ||
|
|
418974a28a | ||
|
|
d6e06e9bc7 | ||
|
|
ca0f15a31f | ||
|
|
9bb9037e42 | ||
|
|
99670fde76 | ||
|
|
d48166be64 | ||
|
|
51976aa06b | ||
|
|
d87330fcca | ||
|
|
2409486c2d | ||
|
|
f1e2a2efbb | ||
|
|
2608673ca7 | ||
|
|
2ff231c27d | ||
|
|
a4b307a3bd | ||
|
|
397cb081c3 | ||
|
|
39ac5bff71 | ||
|
|
0fede4cb66 | ||
|
|
bab8bdfe47 | ||
|
|
2764474274 | ||
|
|
fd5378d9c1 | ||
|
|
75606fd1a9 | ||
|
|
ab0fc39520 | ||
|
|
aad5efa637 | ||
|
|
2c6805259e | ||
|
|
5f62a5752e | ||
|
|
9f41f33e86 | ||
|
|
9da0cc6a91 | ||
|
|
152d1d8ac4 | ||
|
|
8decc44476 | ||
|
|
b8f4fa0e87 | ||
|
|
e44a6dcddb | ||
|
|
c329bae403 | ||
|
|
f0cf1a36ed | ||
|
|
29c7c7291c | ||
|
|
cf05f6ca40 | ||
|
|
92171ddbaa | ||
|
|
15dfad0ebc | ||
|
|
03ba36411c | ||
|
|
1feadc186d | ||
|
|
fb29353d5d | ||
|
|
db82744553 | ||
|
|
4a1e838220 | ||
|
|
057791607b | ||
|
|
7e2ccd64e8 | ||
|
|
da3c3a828c | ||
|
|
0d1a583144 | ||
|
|
49b92d956a | ||
|
|
981cb4c22c | ||
|
|
1ea573dc54 | ||
|
|
2897494732 | ||
|
|
b62270ea2e | ||
|
|
11bb7bdff9 | ||
|
|
f5b92ecdee | ||
|
|
bd1cc9b4f4 | ||
|
|
9c17d7687a | ||
|
|
bec587164b | ||
|
|
5c88d259f5 | ||
|
|
c772b6a843 | ||
|
|
f30b66522f | ||
|
|
2c717c3cdb | ||
|
|
7ca2385da2 | ||
|
|
655748f2d9 | ||
|
|
b11ad72473 | ||
|
|
1e7b69b1ab | ||
|
|
7d917afcbb | ||
|
|
c8abed371b | ||
|
|
444f5ed515 | ||
|
|
c36c26800b | ||
|
|
faae323d9d | ||
|
|
3d3e4ec1ba | ||
|
|
f58d9e3f39 | ||
|
|
5cf2147754 | ||
|
|
a3a530adf6 | ||
|
|
7ec2eb050b | ||
|
|
1727c863fe | ||
|
|
d393116fb9 | ||
|
|
15c955c384 | ||
|
|
6dc3966be9 | ||
|
|
b0b4adea75 | ||
|
|
c5b5a3039a | ||
|
|
e8c50aaadf | ||
|
|
b6356eb5f8 | ||
|
|
cb0e422228 | ||
|
|
0ece59b710 | ||
|
|
fe8160f3ec | ||
|
|
67738a57b7 | ||
|
|
9c97092efd | ||
|
|
3d3ccbfcd7 | ||
|
|
b8c3bd4fae | ||
|
|
cf58a32583 | ||
|
|
6186676add | ||
|
|
329a1ae59d | ||
|
|
0df056ac61 | ||
|
|
1954c2ce09 | ||
|
|
b39f408afc | ||
|
|
d304261333 | ||
|
|
df9a45aa14 | ||
|
|
d2169d725b | ||
|
|
dcbb05982a | ||
|
|
b916ce6d30 | ||
|
|
1a3b532530 | ||
|
|
435b7dcd2b | ||
|
|
85c1aca70e | ||
|
|
b4185a96c7 | ||
|
|
0dbb467045 | ||
|
|
342e114de8 | ||
|
|
5e8501b5f1 | ||
|
|
0ed46c8b74 | ||
|
|
3231e79566 | ||
|
|
400ed82715 | ||
|
|
28a4d0390f | ||
|
|
14e1ecbbf6 | ||
|
|
4519e32586 | ||
|
|
8a968a0c11 | ||
|
|
566d0c846f | ||
|
|
32047c6130 | ||
|
|
bbc305d2b9 | ||
|
|
c89e9134f6 | ||
|
|
d296f0257f | ||
|
|
ed829d427c | ||
|
|
0728acaf55 | ||
|
|
b53d22ae7d | ||
|
|
1afc75d6d9 | ||
|
|
3e0ec4ebd3 | ||
|
|
a50d67e59e | ||
|
|
788a3c294c | ||
|
|
00cc4362e8 | ||
|
|
441602aee0 | ||
|
|
a0829e9a24 | ||
|
|
da5da1425b | ||
|
|
6040f8c838 | ||
|
|
74817a52ef | ||
|
|
491b6e12f7 | ||
|
|
5858f72748 | ||
|
|
21c9d9d020 | ||
|
|
0e9dcfbf31 | ||
|
|
5de82289dd | ||
|
|
aaf1fbd83e | ||
|
|
5523b02718 | ||
|
|
0ae5c89656 | ||
|
|
dcfb6a56b3 | ||
|
|
ec1656f380 | ||
|
|
669d6096d0 | ||
|
|
a60b45f481 | ||
|
|
271bec0f14 | ||
|
|
bb4efe7a34 | ||
|
|
9952bf285d | ||
|
|
e479bc923e | ||
|
|
2849776054 | ||
|
|
79f2468952 | ||
|
|
6c4ac7eb7f | ||
|
|
cb775c64b1 | ||
|
|
54bcf9a657 | ||
|
|
c4ca10258b | ||
|
|
73b02c204b | ||
|
|
551847411f | ||
|
|
2684093b5b | ||
|
|
451f4267ba | ||
|
|
93274bfa49 | ||
|
|
c1ec6337a4 | ||
|
|
27542901c8 | ||
|
|
78a899b36b | ||
|
|
00e7429c5f | ||
|
|
7f57166eea | ||
|
|
0ce4f7624f | ||
|
|
7662e22665 | ||
|
|
1ff67c6c1b | ||
|
|
bd91a571a6 | ||
|
|
e8b16bb145 | ||
|
|
fe10f23994 | ||
|
|
e1ff498a8e | ||
|
|
6f98fd4b65 | ||
|
|
385c698212 | ||
|
|
4a3e67d143 | ||
|
|
0fdef7b7d7 | ||
|
|
86639114e5 | ||
|
|
1a79e421cd | ||
|
|
2e9a32e7ec | ||
|
|
2a292fdc05 | ||
|
|
ee53bd795b | ||
|
|
ad1cdc9122 | ||
|
|
a0aaad7ff8 | ||
|
|
cd0bf66434 | ||
|
|
136b6d8098 | ||
|
|
f0179b5be6 | ||
|
|
265c9ec055 | ||
|
|
f1b1babcf7 | ||
|
|
d70309503f | ||
|
|
439ed9617c | ||
|
|
89ce774d7e | ||
|
|
86757fd36f | ||
|
|
c422aa00aa | ||
|
|
b1f0f7f2e8 | ||
|
|
1f327346f7 | ||
|
|
b46736836e | ||
|
|
4b1467ea69 | ||
|
|
f9be4286bd | ||
|
|
c4fa3e3304 | ||
|
|
fd70ddda02 | ||
|
|
4df5c0ee1e | ||
|
|
656efa5e20 | ||
|
|
2c5a23b696 | ||
|
|
029461c5ae | ||
|
|
a70bfbdaa9 | ||
|
|
0c67dc99f7 | ||
|
|
4e13c3375b | ||
|
|
11fe2619eb | ||
|
|
9936fc7f15 | ||
|
|
23dba26ba3 | ||
|
|
f881bd9bd6 | ||
|
|
5c5d3a770f | ||
|
|
975a37f209 | ||
|
|
b591c5e9ab | ||
|
|
0304b124ed | ||
|
|
74bba35765 | ||
|
|
6c80e6b93f | ||
|
|
fa894d9d48 | ||
|
|
db36dc2326 | ||
|
|
8cdd823671 | ||
|
|
413d58df57 | ||
|
|
6529fa419f | ||
|
|
c50c6034c0 | ||
|
|
fb640cbdb9 | ||
|
|
edd949583a | ||
|
|
3f99395d3b | ||
|
|
f86ea02594 | ||
|
|
dd5d1a1abb | ||
|
|
40d02400ca | ||
|
|
a5cc8efb10 | ||
|
|
645b2dc17a | ||
|
|
0bd49ad778 | ||
|
|
81ccb637f9 | ||
|
|
3fba5a2c11 | ||
|
|
359be55ce0 | ||
|
|
d7beb3cdc7 | ||
|
|
176e3609a5 | ||
|
|
07eb0770cd | ||
|
|
366e7b9dbd | ||
|
|
8d8f0f82d8 | ||
|
|
baabbc3c9f | ||
|
|
751447a028 | ||
|
|
b5e3fc97dc | ||
|
|
f7f9e30efc | ||
|
|
6229b204fa | ||
|
|
e5db98c137 | ||
|
|
dae2c31951 | ||
|
|
4d66818746 | ||
|
|
4d0650baa0 | ||
|
|
043832abdf | ||
|
|
e079604c48 | ||
|
|
6a9a61ec68 | ||
|
|
3d014d28e6 | ||
|
|
03a41fee23 | ||
|
|
4e2319c075 | ||
|
|
79cd8d2190 | ||
|
|
fe872b5caa | ||
|
|
1b6b3f692d | ||
|
|
197eaf3899 | ||
|
|
19ab48c280 | ||
|
|
27598fecce | ||
|
|
127bdb4cef | ||
|
|
fd4f9aacf0 | ||
|
|
457830d65d | ||
|
|
b633b2a2d1 | ||
|
|
a1d6cb278f | ||
|
|
19f153adf1 | ||
|
|
4ad60d5de5 | ||
|
|
53ada061d2 | ||
|
|
4629c8363c | ||
|
|
d3f4427ee9 | ||
|
|
23248b5293 | ||
|
|
6a4e93db3c | ||
|
|
a1bf677514 | ||
|
|
19f2d96d06 | ||
|
|
9c0865c0f4 | ||
|
|
6f0011ac9c | ||
|
|
87dc885a4a | ||
|
|
10aced77f0 | ||
|
|
56f2d307bc | ||
|
|
ecebaca3f0 | ||
|
|
67235e9a38 | ||
|
|
df79a17baa | ||
|
|
0354e5e710 | ||
|
|
98f87dfcc3 | ||
|
|
a06ed39151 | ||
|
|
5118aba456 | ||
|
|
9aab6ae7fa | ||
|
|
13ff9ab7db | ||
|
|
91326e1d93 | ||
|
|
35eac7c82f | ||
|
|
4bbf0eeb8b | ||
|
|
556ec932fb | ||
|
|
310648fb88 | ||
|
|
970ed11def | ||
|
|
cd813edb1b | ||
|
|
0711e0cd52 | ||
|
|
dc57270fb8 | ||
|
|
eeca29b6d3 | ||
|
|
c8042fe937 | ||
|
|
f78fa2aacf | ||
|
|
a0fe237dde | ||
|
|
dc5bfbb470 | ||
|
|
3324043d21 | ||
|
|
383fa03a34 | ||
|
|
664559b6d4 | ||
|
|
96c057466b | ||
|
|
0939c6302e | ||
|
|
ee3b153d7b | ||
|
|
86bb50b9b7 | ||
|
|
deed83a282 | ||
|
|
f6c138ca7e | ||
|
|
328e358b21 | ||
|
|
fc882c9efc | ||
|
|
35fa2253dd | ||
|
|
dc0db7c58b | ||
|
|
850efdc690 | ||
|
|
75aac90452 | ||
|
|
4f56db9f18 | ||
|
|
61f3258b96 | ||
|
|
edc701d3fc | ||
|
|
8816f4bf0d | ||
|
|
bf2904d380 | ||
|
|
543bb2270e | ||
|
|
9d6d7f7f63 | ||
|
|
b3d90537ba | ||
|
|
6794bbbd6a | ||
|
|
60e075d6c9 | ||
|
|
454704d967 | ||
|
|
c5470a7f53 | ||
|
|
9222e93c40 | ||
|
|
95b5ab5f1f | ||
|
|
0bf54aa6f6 | ||
|
|
25bf39e895 | ||
|
|
f44f676cce | ||
|
|
ef96e050f9 | ||
|
|
aee23929dc | ||
|
|
b28382632a | ||
|
|
a1acaaa50c | ||
|
|
d1af8cd806 | ||
|
|
e3f195cf5c | ||
|
|
6a067f5cd6 | ||
|
|
ee77822d22 | ||
|
|
7e52b9550f | ||
|
|
e42b9ce110 | ||
|
|
b00c603e0b | ||
|
|
8a6d56bb29 | ||
|
|
30e6a7a62a | ||
|
|
0ee3983421 | ||
|
|
389d664ffd | ||
|
|
adbb12befe | ||
|
|
54f47572af | ||
|
|
a782e03ebf | ||
|
|
e04d86ad39 | ||
|
|
105478aa6d | ||
|
|
1e1d455a4d | ||
|
|
18f5deede7 | ||
|
|
715672481b | ||
|
|
f7d84c4637 | ||
|
|
c23f3be21f | ||
|
|
257f8b1142 | ||
|
|
e0037ff709 | ||
|
|
1a1a338d68 | ||
|
|
210336d8c1 | ||
|
|
91e7c5b7f1 | ||
|
|
6afee4ae0c | ||
|
|
b45e524b2c | ||
|
|
7d35892def | ||
|
|
4102489d84 | ||
|
|
c7bc1c2cfa | ||
|
|
711314dfd8 | ||
|
|
be1c97a18b | ||
|
|
3119e0a2e7 | ||
|
|
a2c62c30ad | ||
|
|
0f1cbe7410 | ||
|
|
3269c58c8d | ||
|
|
cc3c5a8efc | ||
|
|
2365e4ff7f | ||
|
|
7de8e34963 | ||
|
|
19e872453d | ||
|
|
297f91ae7d | ||
|
|
d7118671e6 | ||
|
|
6032d91293 | ||
|
|
1426dc1fc5 | ||
|
|
e2c472baa9 | ||
|
|
5362fc9c26 | ||
|
|
5d318c9c3c | ||
|
|
dacbe78f35 | ||
|
|
8b2a3e3c10 | ||
|
|
ca9e876241 | ||
|
|
76fae2282e | ||
|
|
d05b31e91c | ||
|
|
60e8d40492 | ||
|
|
e71380b82c | ||
|
|
fb3eaa9eff | ||
|
|
ff4ba6712c | ||
|
|
c164769eec | ||
|
|
9b73c0eeec | ||
|
|
cd0a6f05a0 | ||
|
|
f2dd92b5f8 | ||
|
|
09116d8964 | ||
|
|
d648755d75 | ||
|
|
e64ae9b6bf | ||
|
|
5db24d4e4a | ||
|
|
d923432023 | ||
|
|
4e4a097240 | ||
|
|
f9f55029d1 | ||
|
|
b5625ad8b0 | ||
|
|
5d0eefeebd | ||
|
|
845a3d0ab8 | ||
|
|
33678441dc | ||
|
|
24f06187df | ||
|
|
639986faa7 | ||
|
|
4aa8b0f977 | ||
|
|
ca903b6b14 | ||
|
|
d08e49f2df | ||
|
|
30ffda406c | ||
|
|
8023183999 | ||
|
|
2a9451fed5 | ||
|
|
a9f41c6824 | ||
|
|
9cf54b8897 | ||
|
|
5903ee95fe | ||
|
|
2b115d031e | ||
|
|
3c65ddf72e | ||
|
|
0277b69ff1 | ||
|
|
08cb843180 | ||
|
|
aec8e959d9 | ||
|
|
5ab97eb873 | ||
|
|
f9771c38a6 | ||
|
|
8eb1bc1986 | ||
|
|
26a4ba360f | ||
|
|
2fed813228 | ||
|
|
f2560998c8 | ||
|
|
c8c27cbfd1 | ||
|
|
efe3bc1613 | ||
|
|
dca0c4ed79 | ||
|
|
c533a65764 | ||
|
|
f9b51e2656 | ||
|
|
1ac1bc9a95 | ||
|
|
cb96dec8a6 | ||
|
|
a30a6583c1 | ||
|
|
61c4f9399a | ||
|
|
8b1eb3b456 | ||
|
|
297459c9f6 | ||
|
|
37c0067caf | ||
|
|
a14e3c25b0 | ||
|
|
b00792d6ce | ||
|
|
2e06e960bb | ||
|
|
94e1635882 | ||
|
|
3c8d4029dd | ||
|
|
333cd61c17 | ||
|
|
c009a95d68 | ||
|
|
184f0df2c5 | ||
|
|
593d948615 | ||
|
|
e860742131 | ||
|
|
aaaf80f785 | ||
|
|
3f467cae67 | ||
|
|
95e91b8f44 | ||
|
|
6b76db2973 | ||
|
|
5a5dc7f67f | ||
|
|
9319ed1afb | ||
|
|
6ef3bfb943 | ||
|
|
9f664c5f9c | ||
|
|
b6e95fea52 | ||
|
|
8bf6ba1440 | ||
|
|
ce1955ff60 | ||
|
|
16431653e4 | ||
|
|
5c60f66890 | ||
|
|
84d090e2fd | ||
|
|
1a52179298 | ||
|
|
6f8dbe589c | ||
|
|
280553b41f | ||
|
|
0b9d68e60c | ||
|
|
2b884a7e7c | ||
|
|
1ef35e7a1e | ||
|
|
b8ed34a277 | ||
|
|
8f3b908e38 | ||
|
|
15a9a95284 | ||
|
|
56ea8c4fe6 | ||
|
|
c4c1b58108 | ||
|
|
6fd328611f | ||
|
|
18f772e71c | ||
|
|
97df1dd3b5 | ||
|
|
4ce3fdfcb2 | ||
|
|
939e576df9 | ||
|
|
1939671e7f | ||
|
|
ea52da9428 | ||
|
|
f0d08aa7d0 | ||
|
|
a7717b9ff1 | ||
|
|
ba449a524a | ||
|
|
f68bbfba60 | ||
|
|
bce30e7388 | ||
|
|
58f5a5b915 | ||
|
|
e53b2585d1 | ||
|
|
49e316e488 | ||
|
|
56b76b17a0 | ||
|
|
8d3ff9444f | ||
|
|
7b9547de3e | ||
|
|
d652d4e364 | ||
|
|
69b97dc3a6 | ||
|
|
2c294fad8e | ||
|
|
4aa594197a | ||
|
|
62dd5d980d | ||
|
|
5afa0e6d20 | ||
|
|
79db01d7ed | ||
|
|
2c4af87e13 | ||
|
|
6e22efe790 | ||
|
|
3b380148ee | ||
|
|
420f642f65 | ||
|
|
d7ae93d856 | ||
|
|
a3114a2f8d | ||
|
|
47cfbcb3fb | ||
|
|
d13f5b192b | ||
|
|
160f4fd255 | ||
|
|
9770755881 | ||
|
|
82ebf36970 | ||
|
|
9fd8d5c58c | ||
|
|
e55ad0a12e | ||
|
|
b944e54868 | ||
|
|
e45fa9b6d8 | ||
|
|
6a5795abaf | ||
|
|
4858dea259 | ||
|
|
75346f42c3 | ||
|
|
a7285ff375 | ||
|
|
63eaea26d2 | ||
|
|
c0eb053866 | ||
|
|
2b6905307d | ||
|
|
5308be3c4d | ||
|
|
654af774c8 | ||
|
|
4b72c32a09 | ||
|
|
8550cb9b1b | ||
|
|
69ae598b7e | ||
|
|
f54b79c274 | ||
|
|
9af1d3b137 | ||
|
|
46f1821046 | ||
|
|
6bcd118b62 | ||
|
|
eb2ca00e8d | ||
|
|
6ef0e94520 | ||
|
|
0c5353a709 | ||
|
|
f9e3605254 | ||
|
|
f5eeaf1baa | ||
|
|
5aef5030d7 | ||
|
|
cacaf3822b | ||
|
|
e43ba53ea9 | ||
|
|
3d06cca15c | ||
|
|
d77168f19e | ||
|
|
8e420fe39b | ||
|
|
b9c0faf51c | ||
|
|
bb5e91a377 | ||
|
|
6452ae077c | ||
|
|
96ef800777 | ||
|
|
7a83f7c8f6 | ||
|
|
df639970c6 | ||
|
|
9c12937351 | ||
|
|
80e3e00f96 | ||
|
|
d78f9fdf2b | ||
|
|
03027453c8 | ||
|
|
10dd9412a1 | ||
|
|
90b0e7af83 | ||
|
|
471a58a7a9 | ||
|
|
63a6e94444 | ||
|
|
9ff5f5de7e | ||
|
|
908049a0fb | ||
|
|
363b87b334 | ||
|
|
1dc5d07696 | ||
|
|
18fe9431e0 | ||
|
|
bbc3e36055 | ||
|
|
23cbfdcf47 | ||
|
|
2ec35f4493 | ||
|
|
92473c2ef6 | ||
|
|
02a9d73c89 | ||
|
|
9c65b73ae6 | ||
|
|
23174f3a00 | ||
|
|
aa03c83126 | ||
|
|
230c1ece35 | ||
|
|
21227cd12f | ||
|
|
2827394f3c | ||
|
|
f2da7ece5c | ||
|
|
cc62165e36 | ||
|
|
50dda75c0d | ||
|
|
f6600ec835 | ||
|
|
dbfbc333f4 | ||
|
|
89848346ae | ||
|
|
132caf7f4a | ||
|
|
3c38087e78 | ||
|
|
24be7785db | ||
|
|
5b6b386708 | ||
|
|
e7d1a58a5a | ||
|
|
b34338a500 | ||
|
|
70c2778686 | ||
|
|
293983ea71 | ||
|
|
7bf920b07c | ||
|
|
c6b8763ba6 | ||
|
|
afde59bb19 | ||
|
|
fa096cfce0 | ||
|
|
c87b8c7f49 | ||
|
|
aee571e9b2 | ||
|
|
cc52be15f3 | ||
|
|
3a15751fe9 | ||
|
|
f2a9b59aae | ||
|
|
1c66851344 | ||
|
|
fd5d80b53f | ||
|
|
d943870413 | ||
|
|
45687cd51a | ||
|
|
e506dc1457 | ||
|
|
d92e4343e3 | ||
|
|
0967f9bcfc | ||
|
|
33f4f04594 | ||
|
|
6392f79fb6 | ||
|
|
2a94dbcfe3 | ||
|
|
4db6b287cd | ||
|
|
ee05d55a51 | ||
|
|
e2d8992310 | ||
|
|
a69cb88b16 | ||
|
|
877c4358d8 | ||
|
|
159ce78680 | ||
|
|
f2b402b0cb | ||
|
|
0e84e2c438 | ||
|
|
aef0f94dcf | ||
|
|
476ccf8ac9 | ||
|
|
b44c0a3fbd | ||
|
|
d3ecec5d6c | ||
|
|
62d07c8335 | ||
|
|
99f814d376 | ||
|
|
de7a3b70c9 | ||
|
|
92aa43fe91 | ||
|
|
014753894a | ||
|
|
d048baf503 | ||
|
|
74e6c437f2 | ||
|
|
7679dcf469 | ||
|
|
03133bc539 | ||
|
|
d77d440a04 | ||
|
|
6feb59fef5 | ||
|
|
63982bf6b7 | ||
|
|
9788f6db2c | ||
|
|
33571dda42 | ||
|
|
0db14df070 | ||
|
|
c381cb90be | ||
|
|
eda1ab44ac | ||
|
|
e8fe2eeb59 | ||
|
|
fc8423e49d | ||
|
|
88a02941f6 | ||
|
|
9b651e44d0 | ||
|
|
9830b2dd98 | ||
|
|
beac776025 | ||
|
|
9e687895e1 | ||
|
|
7c42928b57 | ||
|
|
68cfc5d953 | ||
|
|
2007894ba6 | ||
|
|
dfa4680547 | ||
|
|
1f6b44d556 | ||
|
|
924156f3cb | ||
|
|
af6f040202 | ||
|
|
ed6ac00186 | ||
|
|
4e58558eb7 | ||
|
|
4c1b7086be | ||
|
|
4bb968158d | ||
|
|
c0a38b45f1 | ||
|
|
77f52cf04d | ||
|
|
c8a285dee6 | ||
|
|
7b6c2be067 | ||
|
|
c6b944753b | ||
|
|
6bc322cab1 | ||
|
|
62c1fc621a | ||
|
|
c14c23a063 | ||
|
|
b6415bf6fc | ||
|
|
73369db6c2 | ||
|
|
9dd92c1cb5 | ||
|
|
bd6261e3de | ||
|
|
b749c8ef7d | ||
|
|
317683461f | ||
|
|
0d6b9e9570 | ||
|
|
b245b06959 | ||
|
|
003046c91c | ||
|
|
66487b18e3 | ||
|
|
51ba799779 | ||
|
|
11187cff9e | ||
|
|
0814690534 | ||
|
|
c8c1429493 | ||
|
|
e79ea75ae2 | ||
|
|
55d469e7f2 | ||
|
|
ddb6aac826 | ||
|
|
fd69720d11 | ||
|
|
b48bc8e71c | ||
|
|
902b88ac1a | ||
|
|
7d1d88e408 | ||
|
|
5de92562a7 | ||
|
|
2e4e22f0a5 | ||
|
|
a4d899132c | ||
|
|
41baf1de14 | ||
|
|
91570a9e0f | ||
|
|
888897ed48 | ||
|
|
56b8612502 | ||
|
|
557f50fb4e | ||
|
|
6ccc4911c5 | ||
|
|
ee9c31317e | ||
|
|
2f8932e370 | ||
|
|
dbfe21c444 | ||
|
|
f409079864 | ||
|
|
c678627b19 | ||
|
|
a3f3e7705d | ||
|
|
b739e9187d | ||
|
|
8e3b34bce6 | ||
|
|
6f09cd9b81 | ||
|
|
96b02be1d1 | ||
|
|
9961478212 | ||
|
|
3886d72e0f | ||
|
|
d0cb0f59d9 | ||
|
|
2cd9aff867 | ||
|
|
cc1a320c61 | ||
|
|
441e786d3d | ||
|
|
7c17b9ef5b | ||
|
|
132332f9b8 | ||
|
|
fc35de02f2 | ||
|
|
7054450348 | ||
|
|
a6f7a9576e | ||
|
|
a36d5a0221 | ||
|
|
7290576a2a | ||
|
|
ba2efec983 | ||
|
|
b19804190e | ||
|
|
40929a4728 | ||
|
|
e9825dccc0 | ||
|
|
066a9aaf71 | ||
|
|
3ee72e7cec | ||
|
|
62417dae99 | ||
|
|
14178cb184 | ||
|
|
de1717c1a1 | ||
|
|
43981f5981 | ||
|
|
300f16df61 | ||
|
|
9401e52b08 | ||
|
|
61b984a6c1 | ||
|
|
11cd6b56cd | ||
|
|
1fc3516637 | ||
|
|
4195b77fa3 | ||
|
|
9acb871c7b | ||
|
|
cc6a58da18 | ||
|
|
563772fdf1 | ||
|
|
e6d42338ad | ||
|
|
e89f46139b | ||
|
|
a936cd9eb1 | ||
|
|
34bedddd5c | ||
|
|
55f4dea468 | ||
|
|
39f509feaa | ||
|
|
6a122268cb | ||
|
|
cec185fd66 | ||
|
|
0781cb65bf | ||
|
|
3228789808 | ||
|
|
6024359011 | ||
|
|
60cf62fea1 | ||
|
|
6bdd4ff186 | ||
|
|
718042e6a6 | ||
|
|
a3bf46ecd9 | ||
|
|
cd11ae1ac6 | ||
|
|
668670941c | ||
|
|
976b77f144 | ||
|
|
a1a6374709 | ||
|
|
1f1b68a9b4 | ||
|
|
fbafd44209 | ||
|
|
877a112193 | ||
|
|
8ff74fc6c2 | ||
|
|
afd5ceef7a | ||
|
|
5e043b3b6f | ||
|
|
3fb2afb51a | ||
|
|
482f1e953a | ||
|
|
ed8592b30b | ||
|
|
3289dc1cc7 | ||
|
|
fe8793081a | ||
|
|
c6fcf0aaab | ||
|
|
87808fee03 | ||
|
|
2941fd9b87 | ||
|
|
5d4ae31ba1 | ||
|
|
284880f768 | ||
|
|
2d46bc661d | ||
|
|
9a5225dfdf | ||
|
|
079baaed99 | ||
|
|
be46832c7b | ||
|
|
637f777ea9 | ||
|
|
eb0d22626f | ||
|
|
de0c4a7fc7 | ||
|
|
5a69a2f689 | ||
|
|
87f36852b6 | ||
|
|
bbce809ac9 | ||
|
|
56a976e277 | ||
|
|
b270c1bb67 | ||
|
|
6a202c9b5f | ||
|
|
d00b8081ac | ||
|
|
ff9749f6dc | ||
|
|
ead3d21bdb | ||
|
|
568b96b885 | ||
|
|
70c3c1a48f | ||
|
|
e77aac0bf1 | ||
|
|
bdcf83ca45 | ||
|
|
bb306dfe90 | ||
|
|
116a5d822c | ||
|
|
9618283217 | ||
|
|
55e95cc552 | ||
|
|
e9989a5966 | ||
|
|
a1cdeb2fd1 | ||
|
|
4e675ef6e1 | ||
|
|
ba782e90c8 | ||
|
|
16d5f477ff | ||
|
|
e8b2d036ee | ||
|
|
9e7069f374 | ||
|
|
643ed528c2 | ||
|
|
3408d1a873 | ||
|
|
a0c6c1cb9f | ||
|
|
8eab618502 | ||
|
|
34ac15f7eb | ||
|
|
7eb0b0ac65 | ||
|
|
97612edd58 | ||
|
|
6af2f7ef46 | ||
|
|
acf771edd8 | ||
|
|
7f5dc2135e | ||
|
|
c3f36ad430 | ||
|
|
d4b62444d1 | ||
|
|
6a4fa90b8f | ||
|
|
641df126c4 | ||
|
|
e72aa23436 | ||
|
|
de5e9a85bb | ||
|
|
9d60d6acfd | ||
|
|
060689d3e9 | ||
|
|
6bae2f7629 | ||
|
|
4202cbe7e8 | ||
|
|
0980c7185f | ||
|
|
ec9c97e0bf | ||
|
|
506ea4c4d2 | ||
|
|
08d923ca6f | ||
|
|
64104ca9fd | ||
|
|
c12c6ed149 | ||
|
|
eb7030cf12 | ||
|
|
270f7fd905 | ||
|
|
d7074503d8 | ||
|
|
6b3fb14339 | ||
|
|
db4ff1e8fc | ||
|
|
3d6bfacd55 | ||
|
|
8b6ccde441 | ||
|
|
cb7425c59f | ||
|
|
6e111205a2 | ||
|
|
5fefe28e39 | ||
|
|
94c160401c | ||
|
|
0021ad66e0 | ||
|
|
ddd2e3f8f0 | ||
|
|
7a03bafa27 | ||
|
|
7b79235f19 | ||
|
|
e2e882e08b | ||
|
|
bad3fa73f4 | ||
|
|
407224d29c | ||
|
|
e3333a9b8c | ||
|
|
413ba4b430 | ||
|
|
6252c7bd6a | ||
|
|
f147923555 | ||
|
|
c2a19b7be5 | ||
|
|
4d88a57f27 | ||
|
|
ac89730a4d | ||
|
|
ac1bc9d6fc | ||
|
|
f406051ed9 | ||
|
|
1414d64b18 | ||
|
|
773be7bb95 | ||
|
|
48b2383096 | ||
|
|
075a9f38ed | ||
|
|
d3ddd9b1f7 | ||
|
|
163fd2bad9 | ||
|
|
52da124a2b | ||
|
|
a58f56fa4a | ||
|
|
17ac536116 | ||
|
|
73e3072715 | ||
|
|
9332f9b1ac | ||
|
|
508a8b477e | ||
|
|
b68761fa0d | ||
|
|
bb0c0d3d27 | ||
|
|
fc5dde464f | ||
|
|
9c222f8efe | ||
|
|
5f099b1bea | ||
|
|
55112938a2 | ||
|
|
e73607395b | ||
|
|
a16fe6f016 | ||
|
|
374374fdf1 | ||
|
|
535b0d4aac | ||
|
|
0e3e9c2c59 | ||
|
|
987f783632 | ||
|
|
936f66d701 | ||
|
|
3133221fd7 | ||
|
|
d7fd3d7648 | ||
|
|
10ee832dc1 | ||
|
|
5c7084f8bf | ||
|
|
f5bf1f655d | ||
|
|
a30f642860 | ||
|
|
0d5ae808ef | ||
|
|
f8a6a3c6ef | ||
|
|
c8d4d5528e | ||
|
|
e9e7580582 | ||
|
|
3296ade983 | ||
|
|
7982e3abfe | ||
|
|
7354c1fa0d | ||
|
|
889001c026 | ||
|
|
910ef1db41 | ||
|
|
47c255be2c | ||
|
|
3155278ac7 | ||
|
|
8219bcd1b4 | ||
|
|
e36976bf86 | ||
|
|
e48ce1bc69 | ||
|
|
46e63c1f17 | ||
|
|
5c23a9fac0 | ||
|
|
5af929a387 | ||
|
|
811d8781ab | ||
|
|
8a16d96112 | ||
|
|
7106909d3f | ||
|
|
90531f8b7b | ||
|
|
425059d882 | ||
|
|
8a9abd8a1b | ||
|
|
ffe6587e62 | ||
|
|
79a38858d1 | ||
|
|
64ab2d53e1 | ||
|
|
8e8598412d | ||
|
|
930f07df4a | ||
|
|
e56f75fe9a | ||
|
|
aa2b474d1a | ||
|
|
a9c1a1c768 | ||
|
|
80f8de5e0b | ||
|
|
61c4df0375 | ||
|
|
e55fcae981 | ||
|
|
29aef04fbf | ||
|
|
12dcb701c7 | ||
|
|
6df9eb8dab | ||
|
|
9c60541f3c | ||
|
|
c6f57c0bdb | ||
|
|
8cb6d255ca | ||
|
|
6905d4d883 | ||
|
|
cc2fda6d6d | ||
|
|
c0a47c2c79 | ||
|
|
bcba2597f3 | ||
|
|
31d95448ed | ||
|
|
45dfb0dcdb | ||
|
|
90e38f68d8 | ||
|
|
ea6f9acf86 | ||
|
|
a130fcaa4e | ||
|
|
119ab90657 | ||
|
|
5a4541f2f4 | ||
|
|
12b622c9c1 | ||
|
|
19586fdd7f | ||
|
|
ca002c56e5 | ||
|
|
c898c13eb9 | ||
|
|
7406e13028 | ||
|
|
cc6ac657f8 | ||
|
|
6e49139d0e | ||
|
|
46b70a72cb | ||
|
|
8c6e4cd28b | ||
|
|
dabc99f466 | ||
|
|
b5f0959e6d | ||
|
|
a9e622357a | ||
|
|
371b52f4f3 | ||
|
|
ad0279a0ab | ||
|
|
96623acdcd | ||
|
|
6282c3d263 | ||
|
|
86a10969f3 | ||
|
|
2ea47a1d96 | ||
|
|
fa7ffcd1bf | ||
|
|
0e4c63db5d | ||
|
|
aed7ccaadf | ||
|
|
e6b0a7828e | ||
|
|
2c99a0775c | ||
|
|
8cd6f4375e | ||
|
|
cd333c2c94 | ||
|
|
8a723b3be8 | ||
|
|
4f09124f19 | ||
|
|
dbffad2aef | ||
|
|
f25fe48c9b | ||
|
|
1ae48db873 | ||
|
|
1094446862 | ||
|
|
6a52b8cdcb | ||
|
|
d71dac0918 | ||
|
|
61c68f20f0 | ||
|
|
f02c683178 | ||
|
|
ee7749452d | ||
|
|
4c477d3cd6 | ||
|
|
af64865c5d | ||
|
|
ece7d6e718 | ||
|
|
4ab29eb280 | ||
|
|
d4833a4618 | ||
|
|
744fa18d95 | ||
|
|
19b97f8684 | ||
|
|
2e2c9b14a4 | ||
|
|
224d51b0aa | ||
|
|
ac1424ad6d | ||
|
|
0e239cac66 | ||
|
|
8791d8e5b0 | ||
|
|
7b4133ac08 | ||
|
|
78f0b65e19 | ||
|
|
b9df1e643b | ||
|
|
628f5abaac | ||
|
|
2aadf0be89 | ||
|
|
55bc8e13fc | ||
|
|
8c8b1f497c | ||
|
|
468b9ded46 | ||
|
|
57824261c6 | ||
|
|
946e6046b3 | ||
|
|
548d6b31bf | ||
|
|
4ecbb750a8 | ||
|
|
7247ee1ad0 | ||
|
|
b4cb805a91 | ||
|
|
bbd8cbbcf4 | ||
|
|
85e2a0a6bb | ||
|
|
f28f03803f | ||
|
|
0c3a0da58f | ||
|
|
51fe6c20ca | ||
|
|
5fe1cab889 | ||
|
|
e429677a07 | ||
|
|
bf8dc7707a | ||
|
|
fa4ae7800b | ||
|
|
ee4d295667 | ||
|
|
e05b5d2420 | ||
|
|
25ed5857d8 | ||
|
|
3a7f2a5c0b | ||
|
|
106c678cc1 | ||
|
|
52bad3505c | ||
|
|
f5b9965910 | ||
|
|
6f01936943 | ||
|
|
9119e3110d | ||
|
|
f73de4c59c | ||
|
|
7e6c325210 | ||
|
|
86327b52a9 | ||
|
|
d17e0eba9b | ||
|
|
8a57d7f470 | ||
|
|
1b41d19016 | ||
|
|
e0877608ae | ||
|
|
fb5471f34f | ||
|
|
ea38e2eba5 | ||
|
|
f2f66c02d3 | ||
|
|
c58acd1105 | ||
|
|
54f8aca7d5 | ||
|
|
062d141cf1 | ||
|
|
67a6f31b88 | ||
|
|
4cf3328682 | ||
|
|
549b438a84 | ||
|
|
43fa7cd6c6 | ||
|
|
d55e9cbd96 | ||
|
|
ec6ac75b10 | ||
|
|
5d62e47229 | ||
|
|
eddaf71d47 | ||
|
|
e847d94062 | ||
|
|
781323ff10 | ||
|
|
01c64f1b35 | ||
|
|
7577165a97 | ||
|
|
0b72708981 | ||
|
|
d13d5aef00 | ||
|
|
a97bc2309a | ||
|
|
0ff7ea3ccc | ||
|
|
9c0bbfec1f | ||
|
|
752dbdefd2 | ||
|
|
eb7824e6ff | ||
|
|
d1c8808797 | ||
|
|
6575fe7cce | ||
|
|
d5bd5db072 | ||
|
|
b3006e2a6a | ||
|
|
a020c98421 | ||
|
|
a5564896ea | ||
|
|
e0c598f38e | ||
|
|
4076e3387e | ||
|
|
29941f3e0d | ||
|
|
e299ac1ffa | ||
|
|
59ecfb23d7 | ||
|
|
154dea1557 | ||
|
|
da76440c14 | ||
|
|
dc2eed6ca1 | ||
|
|
f6df6b350b | ||
|
|
83da33e2ab | ||
|
|
cb59794b8d | ||
|
|
1ae4b5d0ba | ||
|
|
5e9ffc4a94 | ||
|
|
bf4997b6a5 | ||
|
|
48007350b6 | ||
|
|
4644a16c5b | ||
|
|
7e8360efbc | ||
|
|
6a5bb5df83 | ||
|
|
e12447101f | ||
|
|
48b8d78139 | ||
|
|
a2f3b78bac | ||
|
|
1957cf13c2 | ||
|
|
eb000f0f41 | ||
|
|
f41b536682 | ||
|
|
11f09d4944 | ||
|
|
691eae755f | ||
|
|
02bde2f386 | ||
|
|
c23d256f02 | ||
|
|
526faf9193 | ||
|
|
606944a127 | ||
|
|
4a0697fda2 | ||
|
|
0901f0a848 | ||
|
|
e51eadaf16 | ||
|
|
a4f794f3a6 | ||
|
|
58be50d978 | ||
|
|
f8ae0f7e19 | ||
|
|
3819e22432 | ||
|
|
1b0112de22 | ||
|
|
038ae8c7fc | ||
|
|
d624927022 | ||
|
|
5e75a66f82 | ||
|
|
83d293d41c | ||
|
|
5713993777 | ||
|
|
e683ce2994 | ||
|
|
63bbf52219 | ||
|
|
cdeacafd27 | ||
|
|
8ec184d265 | ||
|
|
824473a34b | ||
|
|
d4d95e2f10 | ||
|
|
697aa5e4b7 | ||
|
|
f0fec02eec | ||
|
|
6f6e5eb325 | ||
|
|
6899fc74f9 | ||
|
|
415e27136e | ||
|
|
d9da9f4bc2 | ||
|
|
fce3918562 | ||
|
|
e091f4233a | ||
|
|
0353273733 | ||
|
|
3b11164637 | ||
|
|
1ad71a9b85 | ||
|
|
1a61148b00 | ||
|
|
0c0e0e9266 | ||
|
|
59752120d6 | ||
|
|
5527bcb13e | ||
|
|
bf0106d2bc | ||
|
|
ef0ebd6517 | ||
|
|
554b797b92 | ||
|
|
84dbdd6b18 | ||
|
|
1427d55b08 | ||
|
|
a743707728 | ||
|
|
07989a0a17 | ||
|
|
c2fd67b1cb | ||
|
|
93f1dc2804 | ||
|
|
7d938834d2 | ||
|
|
bb0f08b2c1 | ||
|
|
a8c2076d04 | ||
|
|
e87a6b9ccd | ||
|
|
a1f4d2ca3f | ||
|
|
013c47950d | ||
|
|
50b71f69da | ||
|
|
7215618621 | ||
|
|
3a9ff840cf | ||
|
|
abb1cc5fe7 | ||
|
|
c511ce80d2 | ||
|
|
c7aca64642 | ||
|
|
c8f53f32fc | ||
|
|
cd5132d201 | ||
|
|
d38bd9c950 | ||
|
|
4669e1423d | ||
|
|
0e43803562 | ||
|
|
73209c520c | ||
|
|
46989a0c6c | ||
|
|
aa5c0ebb95 | ||
|
|
b2155f82f4 | ||
|
|
fe845aee58 | ||
|
|
0a5b1eb75d | ||
|
|
f605012659 | ||
|
|
c183368d72 | ||
|
|
894ce5b7d6 | ||
|
|
c368afd6d2 | ||
|
|
e1dff69a43 | ||
|
|
774373cc65 | ||
|
|
acbe6c24a0 | ||
|
|
202945aa49 | ||
|
|
bc524d5e56 | ||
|
|
bea4e56d5d | ||
|
|
80af99bb44 | ||
|
|
0704b73c2f | ||
|
|
d05163a26f | ||
|
|
ecbd8d9f2f | ||
|
|
ade00f8a70 | ||
|
|
eb3a423f80 | ||
|
|
4328d099c4 | ||
|
|
9a5bf12c0b | ||
|
|
7928cff354 | ||
|
|
c3a1cc3801 | ||
|
|
af742a753e | ||
|
|
3a094604f6 | ||
|
|
71ac570f32 | ||
|
|
b6d06f53d6 | ||
|
|
4da3f567f4 | ||
|
|
959d652dbb | ||
|
|
38da174670 | ||
|
|
1fa68071d8 | ||
|
|
f8ec61a3fc | ||
|
|
417ba188bd | ||
|
|
e4e93bd7f5 | ||
|
|
cf97c304ac | ||
|
|
8307cfc54d | ||
|
|
8747781bdc | ||
|
|
9abe96cba4 | ||
|
|
5035869d96 | ||
|
|
f687f993cc | ||
|
|
6c34f6c334 | ||
|
|
b33418f270 | ||
|
|
31c2d2a654 | ||
|
|
f183ca12d9 | ||
|
|
584397a3fd | ||
|
|
8a04f5f52c | ||
|
|
ef9570003e | ||
|
|
9899d0d6b7 | ||
|
|
8ff0249213 | ||
|
|
9a10612f0b | ||
|
|
c8f52b0ba3 | ||
|
|
193bda164b | ||
|
|
3b96e98eac | ||
|
|
f0c064261b | ||
|
|
ee89fa5eec | ||
|
|
57a90e5fa5 | ||
|
|
3d6921d9ca | ||
|
|
651d287f1d | ||
|
|
ec6b5a12e3 | ||
|
|
252458d5bd | ||
|
|
c6abc08b5f | ||
|
|
fd7a862226 | ||
|
|
292e7a6573 | ||
|
|
a092806d38 | ||
|
|
40e9ce9036 | ||
|
|
9994111173 | ||
|
|
11ddfefb60 | ||
|
|
0161c2838e | ||
|
|
ae2642e55a | ||
|
|
d8702a9523 | ||
|
|
210829f633 | ||
|
|
cfb61c71dd | ||
|
|
2e1db411fa | ||
|
|
15733ed8cf | ||
|
|
51ceec74a3 | ||
|
|
ca68ddd0d0 | ||
|
|
42aee34482 | ||
|
|
ef3802b67a | ||
|
|
41459e6a2c | ||
|
|
63f9d419f8 | ||
|
|
a26dc73836 | ||
|
|
48d90a988a | ||
|
|
b26ed0db60 | ||
|
|
3280860ca9 | ||
|
|
292dbbb6ac | ||
|
|
1b0b89776f | ||
|
|
56fb12878e | ||
|
|
9e7b2ed153 | ||
|
|
b8b6a55952 | ||
|
|
c280d69d6f | ||
|
|
a3c6ad636b | ||
|
|
d1dc12f6b0 | ||
|
|
9fa1b290ba | ||
|
|
77a924ee7d | ||
|
|
3ccc53ee74 | ||
|
|
5faed17d21 | ||
|
|
9fdb7f6cd5 | ||
|
|
96ccdb40f1 | ||
|
|
6052614233 | ||
|
|
fd75085111 | ||
|
|
c5edd38681 | ||
|
|
8f52d82e58 | ||
|
|
fc1d9aef09 | ||
|
|
dce6d3f451 | ||
|
|
122871654e | ||
|
|
6710b0c906 | ||
|
|
0cbbf2daf9 | ||
|
|
a25f3ccdda | ||
|
|
bb5d120a3b | ||
|
|
6dca3656ed | ||
|
|
df307bed02 | ||
|
|
5ef53b4587 | ||
|
|
6ab47c934d | ||
|
|
a8e8cb9b6e | ||
|
|
411e434baf | ||
|
|
c92e76b17e | ||
|
|
322290b19c | ||
|
|
8f986828e7 | ||
|
|
77ac35058c | ||
|
|
933e43cb58 | ||
|
|
5f9ddd2f83 | ||
|
|
eb955592ee | ||
|
|
6b22450a1b | ||
|
|
06f4b77f63 | ||
|
|
21f0752ce7 | ||
|
|
49b91ea78f | ||
|
|
cb05daf437 | ||
|
|
6ad4345a39 | ||
|
|
149f30c7fa | ||
|
|
802ae36a66 | ||
|
|
70033020a3 | ||
|
|
af646895f4 | ||
|
|
a892a95af7 | ||
|
|
48d9763d26 | ||
|
|
fa53968b3c | ||
|
|
f3610b7c5c | ||
|
|
b5e8a2166b | ||
|
|
7837d69021 | ||
|
|
a84a315473 | ||
|
|
eac7527b93 | ||
|
|
54ddf5becb | ||
|
|
b360c07253 | ||
|
|
b1ca6ba528 | ||
|
|
0dcd60b524 | ||
|
|
c337ab6a66 | ||
|
|
897b17d259 | ||
|
|
1bd26f6fc9 | ||
|
|
904ffb5d20 | ||
|
|
201e7d1430 | ||
|
|
e5565d32b1 | ||
|
|
f965502187 | ||
|
|
896c9cccec | ||
|
|
f800ed9c2e | ||
|
|
e44fc33d48 | ||
|
|
4a2549ef24 | ||
|
|
8defe54e3b | ||
|
|
db18a01a7b | ||
|
|
379d9e4b88 | ||
|
|
d5700a8508 | ||
|
|
5719c6c3c0 | ||
|
|
281b6861e1 | ||
|
|
614209be2d | ||
|
|
940263d490 | ||
|
|
2d094cbc3b | ||
|
|
9d562a454b | ||
|
|
da1eb056a3 | ||
|
|
694546e870 | ||
|
|
ef29daa9d0 | ||
|
|
7641d6726f | ||
|
|
08a270a429 | ||
|
|
2aedb97796 | ||
|
|
f6ba6cc3a9 | ||
|
|
629d2bd425 | ||
|
|
92484a8416 | ||
|
|
042311a827 | ||
|
|
e90c87a8ef | ||
|
|
d632454a23 | ||
|
|
560966c539 | ||
|
|
e063be3043 | ||
|
|
a275cf8e57 | ||
|
|
3fe9ff7ac8 | ||
|
|
2f5ba10e6b | ||
|
|
728fa2c1a4 | ||
|
|
7433ee7fc1 | ||
|
|
f47321c287 | ||
|
|
8acc319a4a | ||
|
|
f3d738d771 | ||
|
|
914573a5c3 | ||
|
|
14a62c3a3f | ||
|
|
e9ae9cacd8 | ||
|
|
577bfaa8cd | ||
|
|
f40c1de919 | ||
|
|
6b52cc9829 | ||
|
|
ad143d92da | ||
|
|
9cb35a8972 | ||
|
|
6e3f41f164 | ||
|
|
d8e6ba4274 | ||
|
|
a977f1e6c1 | ||
|
|
d520f3852b | ||
|
|
50e3474b60 | ||
|
|
3c5fad7ef6 | ||
|
|
f7fb0f686b | ||
|
|
55155ca7f1 | ||
|
|
f3e78b8267 | ||
|
|
6b2fcbd070 | ||
|
|
c39dc3dd78 | ||
|
|
e1fcd569e7 | ||
|
|
96a62351ac | ||
|
|
38366c084e | ||
|
|
93d5b52df3 | ||
|
|
5b9e93c652 | ||
|
|
37d84a7148 | ||
|
|
ada5daf7c7 | ||
|
|
b374b1bca6 | ||
|
|
81faa33a38 | ||
|
|
a922a0b1f5 | ||
|
|
4dcb47d829 | ||
|
|
fcda371f9a | ||
|
|
6e3d6a1b17 | ||
|
|
bde62436fa | ||
|
|
76a75efef1 | ||
|
|
846f31851e | ||
|
|
22f1048e8f | ||
|
|
e4dd0069ca | ||
|
|
05004450a0 | ||
|
|
3e8f9ac518 | ||
|
|
4d8dea0892 | ||
|
|
eb104f60e2 | ||
|
|
b6db0a3c30 | ||
|
|
5694ef56ca | ||
|
|
8a93a71504 | ||
|
|
d09ac6d589 | ||
|
|
5a77123a15 | ||
|
|
98ac329cf5 | ||
|
|
122f730608 | ||
|
|
7963f418c1 | ||
|
|
4eaee45d1a | ||
|
|
7c33694c1a | ||
|
|
4dc4892588 | ||
|
|
0a62461515 | ||
|
|
78282c7ed7 | ||
|
|
33db759a77 | ||
|
|
10ac426fd5 | ||
|
|
4c9525c9d9 | ||
|
|
bcb7805c11 | ||
|
|
1aeec47b30 | ||
|
|
d7cdbf6f27 | ||
|
|
4060bcf9c9 | ||
|
|
f09837f939 | ||
|
|
7bcfc9827e | ||
|
|
cf222d1ccf | ||
|
|
937fee84f4 | ||
|
|
11bad7b07a | ||
|
|
6eb385fd9b | ||
|
|
188a1f1416 | ||
|
|
1498f538dd | ||
|
|
fc1d88cb51 | ||
|
|
51cf02d27b | ||
|
|
04ff2aff65 | ||
|
|
c695d6a3a3 | ||
|
|
890d7ab953 | ||
|
|
b84a2cfaf6 | ||
|
|
d258ef6275 | ||
|
|
546eac4646 | ||
|
|
8391b08e8f | ||
|
|
c28353e01f | ||
|
|
e8ed18feba | ||
|
|
39b405648a | ||
|
|
d00e0ed605 | ||
|
|
8a4cfe9b23 | ||
|
|
29eb9f05de | ||
|
|
811605fcb5 | ||
|
|
ca35e707c4 | ||
|
|
352fbf0c1f | ||
|
|
8b6ffc3f45 | ||
|
|
cdee1875a5 | ||
|
|
354b11c619 | ||
|
|
c10d6c3ed1 | ||
|
|
a0f96189d3 | ||
|
|
27d39d98d3 | ||
|
|
9255f785da | ||
|
|
6cfe287c70 | ||
|
|
f80af64a2b | ||
|
|
d9fa7f7d34 | ||
|
|
4a7304de50 | ||
|
|
8b0114596b | ||
|
|
1e0b0605a6 | ||
|
|
59ec48a120 | ||
|
|
b5d6ccace1 | ||
|
|
4e429b27be | ||
|
|
0efbd283c4 | ||
|
|
1b5f2639a0 | ||
|
|
219519b578 | ||
|
|
286e7293fa | ||
|
|
c9dbd4118b | ||
|
|
27d0995a8b | ||
|
|
126bfa3ee7 | ||
|
|
b2ae86d142 | ||
|
|
d09737dbb5 | ||
|
|
6d1d32cd83 | ||
|
|
dca7bf5edc | ||
|
|
4ebfceffd2 | ||
|
|
69888e5ab0 | ||
|
|
46662b0436 | ||
|
|
d300d85787 | ||
|
|
75264ee423 | ||
|
|
fb7c2c1837 | ||
|
|
9d4f8a322c | ||
|
|
ac7cbdf6c3 | ||
|
|
7cdec614c7 | ||
|
|
43f461cc36 | ||
|
|
ceb383628b | ||
|
|
278f6e5941 | ||
|
|
46866268ed | ||
|
|
d73741c9b8 | ||
|
|
cbf8f22b62 | ||
|
|
1fefb4897e | ||
|
|
7b8d2d1945 | ||
|
|
be4b06ef3e | ||
|
|
f41e5da94b | ||
|
|
7761ec5584 | ||
|
|
bb1c225e66 | ||
|
|
387db6d4ba | ||
|
|
5c483df3e8 | ||
|
|
2af05a92f8 | ||
|
|
f22843816b | ||
|
|
54b0edbb13 | ||
|
|
fa7822fbbf | ||
|
|
ba1689f6d6 | ||
|
|
150b1e8423 | ||
|
|
74aefcb918 | ||
|
|
abdd847fbe | ||
|
|
62b7097731 | ||
|
|
6bd5afea8f | ||
|
|
6778fa2b71 | ||
|
|
4ab97be693 | ||
|
|
83ffbc2d3d | ||
|
|
2b9c368fa8 | ||
|
|
6f4212320b | ||
|
|
bb5f989c05 | ||
|
|
af3e55af63 | ||
|
|
1c58d5acff | ||
|
|
6f2ded8222 | ||
|
|
30b722b807 | ||
|
|
a9af0ee5a0 | ||
|
|
4765770dc8 | ||
|
|
9c1224b045 | ||
|
|
140a61692d | ||
|
|
f244706cc2 | ||
|
|
ba463ed076 | ||
|
|
61406a4349 | ||
|
|
6ef793545d | ||
|
|
c78b5b706d | ||
|
|
810bec2d65 | ||
|
|
e0029270e3 | ||
|
|
823431599f | ||
|
|
342c10bd85 | ||
|
|
a6db486afe | ||
|
|
48ebfea17b | ||
|
|
dc2779b385 | ||
|
|
8c2a79ab54 | ||
|
|
6bf87d7eff | ||
|
|
d900917bfa | ||
|
|
c5f94fbced | ||
|
|
c4068e5188 | ||
|
|
ff3052935e | ||
|
|
9b82449542 | ||
|
|
290397d1af | ||
|
|
ade38d4f85 | ||
|
|
8b6751943e | ||
|
|
171e7f016d | ||
|
|
5ec5265ec4 | ||
|
|
78af562897 | ||
|
|
a17b0e5364 | ||
|
|
3a8857a782 | ||
|
|
fbc0b1849d | ||
|
|
35a2c59181 | ||
|
|
8f6a3d9fe8 | ||
|
|
15efe69e46 | ||
|
|
191219f7d8 | ||
|
|
1f21945d52 | ||
|
|
e606958a43 | ||
|
|
34a94990c4 | ||
|
|
3f916f440a | ||
|
|
4de2df2865 | ||
|
|
a3f07e6baf | ||
|
|
17027c16cd | ||
|
|
ab9bdb009b | ||
|
|
b84b2808f4 | ||
|
|
7ea0273119 | ||
|
|
dc53278163 | ||
|
|
6496e6db11 | ||
|
|
1d7cef08a7 | ||
|
|
908a37598c | ||
|
|
c8c9731262 | ||
|
|
0f5d3d2f1b | ||
|
|
011cd90fbe | ||
|
|
f99711cdc2 | ||
|
|
630177ef4c | ||
|
|
28fd47dd22 | ||
|
|
2c11acf40c | ||
|
|
230a497a12 | ||
|
|
6073a26f5d | ||
|
|
b622474adb | ||
|
|
834cd08f8c | ||
|
|
0e329347cf | ||
|
|
e27ef3c081 | ||
|
|
1292cd505e | ||
|
|
0e39caaad3 | ||
|
|
b6a73f6db3 | ||
|
|
4cb164b795 | ||
|
|
ee3038c5b7 | ||
|
|
efc1274b2c | ||
|
|
014e27bc20 | ||
|
|
312db7755b | ||
|
|
9769f19ebe | ||
|
|
0e83b89dbd | ||
|
|
2ad5db2279 | ||
|
|
99350d6caa | ||
|
|
1f0de9a1ce | ||
|
|
40f7d6c95b | ||
|
|
f6637ff958 | ||
|
|
6aaae6970e | ||
|
|
f4fa115c82 | ||
|
|
bd0947e7a3 | ||
|
|
432999fae8 | ||
|
|
6d7e2c56d9 | ||
|
|
f6e4a3081d | ||
|
|
de1584b9f2 | ||
|
|
a132d923ce | ||
|
|
73f1d7d099 | ||
|
|
a9168fed56 | ||
|
|
084530eeca | ||
|
|
fb4f274882 | ||
|
|
38aa4e1745 | ||
|
|
2be9cf060d | ||
|
|
faa4be49c7 | ||
|
|
8dfeeb354f | ||
|
|
c3dbc4e945 | ||
|
|
629bb23832 | ||
|
|
ff68ad61e7 | ||
|
|
0c20385ccf | ||
|
|
ed0fba174e | ||
|
|
b3a1345bb8 | ||
|
|
41f6337bfa | ||
|
|
333e0cc82f | ||
|
|
afd6541ca4 | ||
|
|
de0f36fe78 | ||
|
|
ee57605f77 | ||
|
|
10ebe16653 | ||
|
|
c1fd01545a | ||
|
|
768a4412d5 | ||
|
|
64442379aa | ||
|
|
4e3730f8f4 | ||
|
|
7667635752 | ||
|
|
78d4e5a3bf | ||
|
|
5aba06f354 | ||
|
|
b8257d2c58 | ||
|
|
15c9006f0d | ||
|
|
41c49faa81 | ||
|
|
c23241c5f4 | ||
|
|
785fe6b2e3 | ||
|
|
5fdc9da885 | ||
|
|
ca22aadca9 | ||
|
|
b10c357065 | ||
|
|
743caf46f2 | ||
|
|
f64488f818 | ||
|
|
75c803df11 | ||
|
|
5c158b4df9 | ||
|
|
85c59fdb5e | ||
|
|
86a8cbf402 | ||
|
|
94b822df3b | ||
|
|
a5db116d00 | ||
|
|
168402217f | ||
|
|
af74a75c54 | ||
|
|
27c45fc995 | ||
|
|
8600ada735 | ||
|
|
081676bcd8 | ||
|
|
ab44ebd7e0 | ||
|
|
eeca9f61bf | ||
|
|
79d57e2949 | ||
|
|
f7c0a910f8 | ||
|
|
63bbe55ecd | ||
|
|
24b83fd96c | ||
|
|
c749f961ef | ||
|
|
1ad6fd8297 | ||
|
|
f8e2c65cef | ||
|
|
acc9530d66 | ||
|
|
039d035952 | ||
|
|
8fff11fdee | ||
|
|
fad0a2a55f | ||
|
|
43d0bd99cb | ||
|
|
4aa25c4971 | ||
|
|
5d61f656eb | ||
|
|
57cbc901b7 | ||
|
|
fe27d3b25a | ||
|
|
9dc7930ff2 | ||
|
|
49cd6bc782 | ||
|
|
fbdd0f4394 | ||
|
|
29ef586f91 | ||
|
|
36a1c7a265 | ||
|
|
e0ec8b3be1 | ||
|
|
854246846d | ||
|
|
74282b46ff | ||
|
|
e10ac8cbec | ||
|
|
18ea36adc4 | ||
|
|
13526fc679 | ||
|
|
bea611e805 | ||
|
|
687c0b45e2 | ||
|
|
41051f3cfe | ||
|
|
5fec900861 | ||
|
|
4558dd9e28 | ||
|
|
7a71b6f3d0 | ||
|
|
bc8d9d40bd | ||
|
|
a74a5d95ab | ||
|
|
3c74f0f907 | ||
|
|
025eef63b5 | ||
|
|
c9abec7cbe | ||
|
|
0a4ff90bfb | ||
|
|
eb796a13ce | ||
|
|
be32e8940a | ||
|
|
d179efc3ea | ||
|
|
49cea778a0 | ||
|
|
6d49bf6fc6 | ||
|
|
431b4f6f17 | ||
|
|
ff30e15a4c | ||
|
|
2aea8ee696 | ||
|
|
5956493684 | ||
|
|
3b122a1ba5 | ||
|
|
b31c23b37b | ||
|
|
6299d9efa9 | ||
|
|
849c2f36d9 | ||
|
|
1cbd4c5387 | ||
|
|
574e0a7531 | ||
|
|
96b412ebb8 | ||
|
|
58f2b6c257 | ||
|
|
c783b6d7b5 | ||
|
|
9be61f83df | ||
|
|
1bcb7eccbc | ||
|
|
7a7844162d | ||
|
|
3356c63cdc | ||
|
|
af2278c3c2 | ||
|
|
e4777f6563 | ||
|
|
fe2dfdb3b9 | ||
|
|
82d1aba67f | ||
|
|
7ed360e06b | ||
|
|
0cde534e30 | ||
|
|
54c320c724 | ||
|
|
2ff67f3741 | ||
|
|
5415b7ad5b | ||
|
|
2aeb406e38 | ||
|
|
d57b812f36 | ||
|
|
ada0d57452 | ||
|
|
d158ac5ffe | ||
|
|
481a884d25 | ||
|
|
f14c78cf12 | ||
|
|
91d8e7c7c6 | ||
|
|
854f3d5b85 | ||
|
|
056cbbcdcd | ||
|
|
c02a545c7d | ||
|
|
fecf8e3ed2 | ||
|
|
12e7eac1b4 | ||
|
|
f8e89b694a | ||
|
|
a0aa585afd | ||
|
|
3300470a29 | ||
|
|
b2508dcb59 | ||
|
|
798d6a9134 | ||
|
|
965334350f | ||
|
|
676c7b89c7 | ||
|
|
b431d172b7 | ||
|
|
8fe8cad8f9 | ||
|
|
420f111611 | ||
|
|
9c8a48f38c | ||
|
|
50bb101abf | ||
|
|
21dcfc8dae | ||
|
|
24e5819f99 | ||
|
|
64c197de47 | ||
|
|
c4bf09ad32 | ||
|
|
8c37418e44 | ||
|
|
d6c27c190d | ||
|
|
0d0a54f095 | ||
|
|
590b75453c | ||
|
|
f80d17c2be | ||
|
|
58b94d5a63 | ||
|
|
1d95dbe4a1 | ||
|
|
ebe9b3368e | ||
|
|
504337d25e | ||
|
|
c53d11b2cd | ||
|
|
6de73c7ab3 | ||
|
|
83fecb46f6 | ||
|
|
20cc02c90d | ||
|
|
41bfb6e80a | ||
|
|
f5838c5178 | ||
|
|
e8636136c8 | ||
|
|
17d2d9217b | ||
|
|
2e4643a398 | ||
|
|
2204885fbb | ||
|
|
66a87ce4d0 | ||
|
|
31400b29c3 | ||
|
|
f5b4ccf741 | ||
|
|
59fa831542 | ||
|
|
4e19f7adbf | ||
|
|
bd5e54e825 | ||
|
|
1d983a6818 | ||
|
|
390568ade9 | ||
|
|
c3ff1074bb | ||
|
|
9af03035aa | ||
|
|
9e13b7da01 | ||
|
|
c5d35d434c | ||
|
|
38010432ee | ||
|
|
bab9826fb1 | ||
|
|
aaf03123f8 | ||
|
|
46ab3ee24f | ||
|
|
45ac69a1f6 | ||
|
|
b8f7e12bc0 | ||
|
|
2ced227ad3 | ||
|
|
392816fae3 | ||
|
|
36fd2b6854 | ||
|
|
1279112ac0 | ||
|
|
358954d69e | ||
|
|
f6c02262c4 | ||
|
|
6e029fc184 | ||
|
|
5c7e2d103c | ||
|
|
f88972013f | ||
|
|
f2de553d63 | ||
|
|
7d75a73105 | ||
|
|
07c69ebed4 | ||
|
|
58102a39a4 | ||
|
|
b75868cc7c | ||
|
|
4a562401dc | ||
|
|
8b245c12ad | ||
|
|
f8787ca6b9 | ||
|
|
23fa0657a7 | ||
|
|
a04d9fa388 | ||
|
|
266c114c1e | ||
|
|
11ed4de0aa | ||
|
|
742b0edaa8 | ||
|
|
a6ed698fca | ||
|
|
3912f3330f | ||
|
|
97d99632a6 | ||
|
|
b170bddad9 | ||
|
|
a26afbe9a1 | ||
|
|
49840bb621 | ||
|
|
e8f35f0bab | ||
|
|
802f1029e9 | ||
|
|
53b2fdf31c | ||
|
|
5c7d9d08e2 | ||
|
|
b51eca87b6 | ||
|
|
e043822a93 | ||
|
|
732dc881e4 | ||
|
|
b896eed5d4 | ||
|
|
5298c2016f | ||
|
|
833622c870 | ||
|
|
b7659ea3a5 | ||
|
|
5986cbcfe6 | ||
|
|
bc0b1a78e5 | ||
|
|
9cb8c70434 | ||
|
|
02861fabc8 | ||
|
|
33fb806f13 | ||
|
|
47264dc350 | ||
|
|
2ff43f2ed8 | ||
|
|
1a9a65d4d0 | ||
|
|
b951e24024 | ||
|
|
b15ab1b1cf | ||
|
|
94b50b85e7 | ||
|
|
585ccc1b24 | ||
|
|
d332bb1645 | ||
|
|
9e101c9ef0 | ||
|
|
595ad99a5b | ||
|
|
05763b3669 | ||
|
|
ec63b04719 | ||
|
|
0939424574 | ||
|
|
806ede241a | ||
|
|
984fcfda2e | ||
|
|
7a2cbfd6bf | ||
|
|
2dcc85d64c | ||
|
|
9b0b325339 | ||
|
|
7a3239cba0 | ||
|
|
5f449151a1 | ||
|
|
ecd7107ccb | ||
|
|
a71a549fa3 | ||
|
|
7597b31215 | ||
|
|
db4f28f4ca | ||
|
|
b09a82fb94 | ||
|
|
36528bb723 | ||
|
|
03899a6240 | ||
|
|
d8f88ee1e3 | ||
|
|
b9e62be3c1 | ||
|
|
756176118b | ||
|
|
6be52e435d | ||
|
|
2159245224 | ||
|
|
29eed182c2 | ||
|
|
1d364f1991 | ||
|
|
0d3f02ee34 | ||
|
|
3a04e3d003 | ||
|
|
dc00af8829 | ||
|
|
9d99889703 | ||
|
|
627212290e | ||
|
|
d9e43b5d8d | ||
|
|
98a5492e37 | ||
|
|
a3b3b4f657 | ||
|
|
413d1828eb | ||
|
|
4b5aabe6b0 | ||
|
|
5b4c948e43 | ||
|
|
f91faacc53 | ||
|
|
e408b3ab02 | ||
|
|
7d771229e2 | ||
|
|
31d8142a0d | ||
|
|
3cff588eff | ||
|
|
a50766384b | ||
|
|
c183de5662 | ||
|
|
1b369520ed | ||
|
|
2e09c7faf3 | ||
|
|
4b24cfa5ea | ||
|
|
9da843c994 | ||
|
|
35b162adbf | ||
|
|
94e19ac903 | ||
|
|
61182249f0 | ||
|
|
5c537fdbe3 | ||
|
|
9c7e9cc6f2 | ||
|
|
873ae6717e | ||
|
|
d3a3a8528f | ||
|
|
41990a6402 | ||
|
|
ffcac1bc3b | ||
|
|
adb92ce349 | ||
|
|
14bd5a4f59 | ||
|
|
6c512c1973 | ||
|
|
3cb0e3bb13 | ||
|
|
303564fd70 | ||
|
|
99180f5afb | ||
|
|
201c9cd2a4 | ||
|
|
07df39c208 | ||
|
|
b2a2a3ace1 | ||
|
|
bb35261aca | ||
|
|
2155f65478 | ||
|
|
16904d580d | ||
|
|
cca6e1dcae | ||
|
|
47c2f0a289 | ||
|
|
7392f52184 | ||
|
|
620b9b3300 | ||
|
|
92b1f3cf6d | ||
|
|
088aa2ffdc | ||
|
|
688f05ff26 | ||
|
|
c115a4cf76 | ||
|
|
ef3435441f | ||
|
|
73a879caad | ||
|
|
92aa270062 | ||
|
|
d23caa9b72 | ||
|
|
4b9d409628 | ||
|
|
a378e307b3 | ||
|
|
11aebe465f | ||
|
|
3b97137ccf | ||
|
|
24eb1627e5 | ||
|
|
2b30e7880e | ||
|
|
2d0a61fc8d | ||
|
|
38c4f5b6e7 | ||
|
|
ebae8b65f8 | ||
|
|
1cbade511d | ||
|
|
cf131b51a2 | ||
|
|
e91194994f | ||
|
|
9fa053cd88 | ||
|
|
8555b9b5ec | ||
|
|
dad4ab1980 | ||
|
|
12d2c6be56 | ||
|
|
83d83b9add | ||
|
|
820919c0a9 | ||
|
|
2940320930 | ||
|
|
ad63c13cd1 | ||
|
|
5b91dc45e0 | ||
|
|
df32564bef | ||
|
|
82405982f7 | ||
|
|
557b672232 | ||
|
|
117c249595 | ||
|
|
cb0a430aa4 | ||
|
|
df5278df72 | ||
|
|
975441dfe9 | ||
|
|
2d591182c4 | ||
|
|
41fb11d846 | ||
|
|
bcc0160103 | ||
|
|
4c84a99f68 | ||
|
|
b4001e65e7 | ||
|
|
82ad1392ef | ||
|
|
815ac8be04 | ||
|
|
ba94643f0f | ||
|
|
ae73356ecf | ||
|
|
38c2de3ae3 | ||
|
|
a18d624bcb | ||
|
|
439472d4f8 | ||
|
|
85ddf69042 | ||
|
|
a5282daf91 | ||
|
|
94f2ad9263 | ||
|
|
6977658443 | ||
|
|
2aa33e2875 | ||
|
|
b123b6df89 | ||
|
|
eb8ede38cf | ||
|
|
f1eff358da | ||
|
|
cf4194fef7 | ||
|
|
f174d71ac7 | ||
|
|
ae2e8469b4 | ||
|
|
4fff0e952c | ||
|
|
67d9436f22 | ||
|
|
178f31f4c6 | ||
|
|
e344578a01 | ||
|
|
1837d43d96 | ||
|
|
fb174b482f | ||
|
|
448ca97d93 | ||
|
|
9865270e68 | ||
|
|
f3a89f59e4 | ||
|
|
84a8fdadc5 | ||
|
|
bd45bab34a | ||
|
|
2ea078beb5 | ||
|
|
3075ec2203 | ||
|
|
a3efc77255 | ||
|
|
1a768ca438 | ||
|
|
559f64ee4f | ||
|
|
c498833c27 | ||
|
|
0af80b7c86 | ||
|
|
4227a5bb59 | ||
|
|
84222a9746 | ||
|
|
0e2d61d422 | ||
|
|
58df02e97f | ||
|
|
5c1023a332 | ||
|
|
4889e9783f | ||
|
|
f423cf73c4 | ||
|
|
7d3c850813 | ||
|
|
6d6ed1a205 | ||
|
|
611239db5c | ||
|
|
f862f5be03 | ||
|
|
b54a824abd | ||
|
|
f443804b35 | ||
|
|
b1de70c526 | ||
|
|
05a186af82 | ||
|
|
b538c8fe75 | ||
|
|
ec7781f1f9 | ||
|
|
91f805675b | ||
|
|
0a5f796c33 | ||
|
|
438fbf31cf | ||
|
|
ae8aa358e4 | ||
|
|
da2bf4e366 | ||
|
|
9ff385f6f3 | ||
|
|
714fcaaadd | ||
|
|
b3836c58d2 | ||
|
|
646c02a5e2 | ||
|
|
4a6a3af418 | ||
|
|
8f02052232 | ||
|
|
489a89ae8b | ||
|
|
6862106dee | ||
|
|
607e01690c | ||
|
|
500d2e076d | ||
|
|
17b33afd64 | ||
|
|
319b3dabdf | ||
|
|
ff89619b09 | ||
|
|
726f9d5312 | ||
|
|
f3adf4bf57 | ||
|
|
193d9f838b | ||
|
|
1ff6eec1e3 | ||
|
|
c218ef3970 | ||
|
|
674d22321a | ||
|
|
cdb71101a1 | ||
|
|
26993380b1 | ||
|
|
da1bb43618 | ||
|
|
f86ea9f19b | ||
|
|
0610690fa7 | ||
|
|
de962d3e7e | ||
|
|
213fa1c148 | ||
|
|
2a2a022792 | ||
|
|
ba91c8f0c2 | ||
|
|
c232f90d6e | ||
|
|
d0b1162b15 | ||
|
|
63944e8c43 | ||
|
|
35ed991abe | ||
|
|
23d081ab21 | ||
|
|
6d7b1f9dbd | ||
|
|
965fccaff0 | ||
|
|
dc42c65dfb | ||
|
|
eda22c241d | ||
|
|
c56ac2cf3e | ||
|
|
af38b8bf97 | ||
|
|
c65e467c83 | ||
|
|
5751e38180 | ||
|
|
cf71049bd4 | ||
|
|
da054a2aab | ||
|
|
09b8aaed71 | ||
|
|
bf10873405 | ||
|
|
a2cdcb4e4d | ||
|
|
bccc3ef253 | ||
|
|
e5e601eb75 | ||
|
|
15d66cf337 | ||
|
|
936d9edc4c | ||
|
|
de6216b37b | ||
|
|
72d54d3df6 | ||
|
|
7ff28ab5ae | ||
|
|
9393b20e13 | ||
|
|
754045b6f7 | ||
|
|
972c907ac2 | ||
|
|
f0393e50c2 | ||
|
|
625c4a9a05 | ||
|
|
56c2d20b90 | ||
|
|
8d00ae25c4 | ||
|
|
6074d60a90 | ||
|
|
6e54dfe5ba | ||
|
|
9163ed351c | ||
|
|
f8a79e5d40 | ||
|
|
1cf30584f0 | ||
|
|
1ecb5aed0f | ||
|
|
0b93aa5d12 | ||
|
|
3d4e1c1246 | ||
|
|
096c9316b8 | ||
|
|
d67b9cba14 | ||
|
|
5c7c9452d6 | ||
|
|
1e7fd83ac5 | ||
|
|
077ae2e6a0 | ||
|
|
28e1f87d9e | ||
|
|
1a5f01ca9f | ||
|
|
1d2ce62b2c | ||
|
|
d9efbfb178 | ||
|
|
6f9feee759 | ||
|
|
701743a4ec | ||
|
|
9183d1d2c6 | ||
|
|
9120c3bfb1 | ||
|
|
5d119bec31 | ||
|
|
ad7892bd15 | ||
|
|
33a7672196 | ||
|
|
44b5552231 | ||
|
|
81adc3ef4d | ||
|
|
3400d7eecc | ||
|
|
03acb22212 | ||
|
|
9b110d8c3c | ||
|
|
0ad5abbbfc | ||
|
|
cb64cb6abe | ||
|
|
6aef44271e | ||
|
|
0d659a1b46 | ||
|
|
21612cafc1 | ||
|
|
24c780c884 | ||
|
|
e3d1871f86 | ||
|
|
fff5230631 | ||
|
|
d589be9415 | ||
|
|
7b3984059a | ||
|
|
e4f4350bb4 | ||
|
|
8779583bdb | ||
|
|
725aaccf5c | ||
|
|
671a575216 | ||
|
|
253057a765 | ||
|
|
70cec30dcf | ||
|
|
240191dff8 | ||
|
|
8fe94ec07e | ||
|
|
fffd829f88 | ||
|
|
f9c2025149 | ||
|
|
87cf7b6d30 | ||
|
|
d1315b6187 | ||
|
|
87fc4c1e44 | ||
|
|
2f972b91a3 | ||
|
|
3acac3203b | ||
|
|
52ec143a92 | ||
|
|
fe1947ea48 | ||
|
|
696510d220 | ||
|
|
f5e6c82e86 | ||
|
|
8cf3a83dd7 | ||
|
|
1fbee92044 | ||
|
|
ced2dd9200 | ||
|
|
6dabc68c16 | ||
|
|
f5fbfe98bd | ||
|
|
62c21fd58f | ||
|
|
791dc84d49 | ||
|
|
6a7c38f30d | ||
|
|
da57014eb8 | ||
|
|
d42759c641 | ||
|
|
83b5bdbd29 | ||
|
|
b02cc6ecbe | ||
|
|
b0baa8d8f9 | ||
|
|
fcdc3a4745 | ||
|
|
7c4a952ee0 | ||
|
|
3fab287e8d | ||
|
|
5c6d10da96 | ||
|
|
285bcbcec0 | ||
|
|
c2e21fa30e | ||
|
|
cb2c9ce4e6 | ||
|
|
a583fafa37 | ||
|
|
b244de73ca | ||
|
|
93471d46df | ||
|
|
648cc2bb39 | ||
|
|
80be9d92ca | ||
|
|
09c72375ab | ||
|
|
98e8d93fa3 | ||
|
|
ecd00d377a | ||
|
|
f55f3b94a1 | ||
|
|
fce2814735 | ||
|
|
44e671bb0a | ||
|
|
248ad0ddde | ||
|
|
b8a84d170a | ||
|
|
4c084391fc | ||
|
|
b87881c91b | ||
|
|
048b657c8f | ||
|
|
6c521c36dd | ||
|
|
b56ff3fce7 | ||
|
|
9d1b27cde8 | ||
|
|
1be3f48017 | ||
|
|
14a76a8499 | ||
|
|
761ce60a8e | ||
|
|
7a61dc2c88 | ||
|
|
8fecd3512c | ||
|
|
c88cd1b065 | ||
|
|
af3c1fc510 | ||
|
|
c92830b103 | ||
|
|
7aa554b8eb | ||
|
|
8038ce1aa9 | ||
|
|
10eb88f6fe | ||
|
|
9b6c3bd106 | ||
|
|
5a63a62454 | ||
|
|
f2edc50675 | ||
|
|
c1160f40d0 | ||
|
|
3f89f4bd32 | ||
|
|
58e4076620 | ||
|
|
d812222061 | ||
|
|
ef75b36013 | ||
|
|
e4c2c53b19 | ||
|
|
6ae082dab2 | ||
|
|
7a33cda122 | ||
|
|
f441efd776 | ||
|
|
5c53708f43 | ||
|
|
0708d7c539 | ||
|
|
c974a0d888 | ||
|
|
2320efeb55 | ||
|
|
1a32062439 | ||
|
|
d34e99b38b | ||
|
|
555c96a941 | ||
|
|
10b3d429fe | ||
|
|
c58b04979f | ||
|
|
c368618d09 | ||
|
|
1acc81c25d | ||
|
|
3dc7dc0cdc | ||
|
|
b0b5c27fec | ||
|
|
c2587abcea | ||
|
|
632b4971de | ||
|
|
b3474b5a71 | ||
|
|
29d229264d | ||
|
|
ff98dac104 | ||
|
|
61669d1f3f | ||
|
|
b178423166 | ||
|
|
2c3fd160c3 | ||
|
|
d4a6e18c01 | ||
|
|
415090d249 | ||
|
|
afe86a5f66 | ||
|
|
a83042d5c0 | ||
|
|
83eb79c9d9 | ||
|
|
b86518ef24 | ||
|
|
f367fa5a98 | ||
|
|
259b81317d | ||
|
|
947b6b5503 | ||
|
|
872ab9d2b1 | ||
|
|
1f8608f6dd | ||
|
|
deaceb6b08 | ||
|
|
61a6fe9cd9 | ||
|
|
b9d57843eb | ||
|
|
40ac87c9bc | ||
|
|
7f64f39c05 | ||
|
|
031b6e6372 | ||
|
|
b9369e7c00 | ||
|
|
903d3595e5 | ||
|
|
0453e5cad8 | ||
|
|
07d7905896 | ||
|
|
4d39bbe329 | ||
|
|
ac78688a32 | ||
|
|
cdeed349e3 | ||
|
|
faa46bb62d | ||
|
|
592d4b024a | ||
|
|
1d634f9b44 | ||
|
|
5109687a31 | ||
|
|
cfb801345b | ||
|
|
24038f8ce7 | ||
|
|
56d0c51033 | ||
|
|
a9b63a2106 | ||
|
|
f41bb8db5e | ||
|
|
310181b97f | ||
|
|
2b8a808fe3 | ||
|
|
704776027b | ||
|
|
a95adcb999 | ||
|
|
61a7c747e1 | ||
|
|
c2229e3c0b | ||
|
|
f6cad2235b | ||
|
|
4c3e98754e | ||
|
|
9862e5d207 | ||
|
|
c9db1c6c4b | ||
|
|
4fca5f4d88 | ||
|
|
7ec8c7f9fe | ||
|
|
fadc727df4 | ||
|
|
aeef39a417 | ||
|
|
e4516ac9b8 | ||
|
|
8431299b92 | ||
|
|
3b5bc9c38d | ||
|
|
0f5529be18 | ||
|
|
c3e38e46c7 | ||
|
|
608bb5ccb2 | ||
|
|
15220c386a | ||
|
|
e3bfa2be88 | ||
|
|
211c7745de | ||
|
|
230b470a3c | ||
|
|
df96361ded | ||
|
|
417d0a3606 | ||
|
|
46fb6e9b48 | ||
|
|
483b3d6368 | ||
|
|
29c2ccb310 | ||
|
|
3919a32dc3 | ||
|
|
31b0b53394 | ||
|
|
a34942c882 | ||
|
|
bb25ce1c6a | ||
|
|
23f48e07ed | ||
|
|
008fea5d89 | ||
|
|
0d275868a5 | ||
|
|
268b4d9f9f | ||
|
|
dc85989553 | ||
|
|
37379d5d1d | ||
|
|
b76305a0d2 | ||
|
|
994274623b | ||
|
|
7c06e87d59 | ||
|
|
923c297dfc | ||
|
|
e674518c4e | ||
|
|
681c09f25c | ||
|
|
0fd5346860 | ||
|
|
2252ba1bb7 | ||
|
|
30a5922a0b | ||
|
|
58c3794ce7 | ||
|
|
ef25502491 | ||
|
|
cc6d193e1d | ||
|
|
8fd46e96aa | ||
|
|
574a2c774e | ||
|
|
6b78b8f9ce | ||
|
|
322473c295 | ||
|
|
2e20693583 | ||
|
|
e728a14c19 | ||
|
|
d58e43edbf | ||
|
|
8abf242e2c | ||
|
|
051c5c4bf7 | ||
|
|
141c9e9c86 | ||
|
|
a281bda9a6 | ||
|
|
8e29e09943 | ||
|
|
4a47224ac1 | ||
|
|
e31ce87bb3 | ||
|
|
633f7a1db9 | ||
|
|
43b4cfc215 | ||
|
|
82d12691e1 | ||
|
|
8b4da69861 | ||
|
|
0e2ec9c2cb | ||
|
|
4aa79df402 | ||
|
|
b251d47712 | ||
|
|
9c598fcd01 | ||
|
|
4ee942aba2 | ||
|
|
d64db65743 | ||
|
|
8db9a27970 | ||
|
|
259521ec3e | ||
|
|
e0cd520837 | ||
|
|
d1788ac1e9 | ||
|
|
de8d3fb1eb | ||
|
|
a3478e02f4 | ||
|
|
f513ca2a28 | ||
|
|
c5d727da39 | ||
|
|
356429d0e7 | ||
|
|
2da6cb263d | ||
|
|
5e5b927abd | ||
|
|
a7e76438b2 | ||
|
|
056ecb1c39 | ||
|
|
63c825d0e0 | ||
|
|
1fba5cb580 | ||
|
|
1053234507 | ||
|
|
49d5c4260f | ||
|
|
1530effb29 | ||
|
|
ae6f26f3ef | ||
|
|
cf739d2493 | ||
|
|
18f677d530 | ||
|
|
f6c27c2abf | ||
|
|
5596f69c0e | ||
|
|
784f549339 | ||
|
|
5b3dfc3f9e | ||
|
|
6c3a4c6927 | ||
|
|
f3e1ba5251 | ||
|
|
31b32d3b11 | ||
|
|
b3b1f3ac68 | ||
|
|
d3a748ce3a | ||
|
|
ed3052dea5 | ||
|
|
809684e9de | ||
|
|
a283e95fed | ||
|
|
16b6cc41a4 | ||
|
|
747f4dc3fe | ||
|
|
f13f50779c | ||
|
|
363b581926 | ||
|
|
1573f513ce | ||
|
|
ae0577bc16 | ||
|
|
cccf216dbb | ||
|
|
d872c0560a | ||
|
|
f8f79788e4 | ||
|
|
f678ff8cfd | ||
|
|
b1850f2465 | ||
|
|
d7866831ae | ||
|
|
5917bf31c3 | ||
|
|
59247c7838 | ||
|
|
dce3c57e6a | ||
|
|
9c440ab6b7 | ||
|
|
fc085c1758 | ||
|
|
fdd6ea3651 | ||
|
|
1834b7d0f9 | ||
|
|
95b98c5a38 | ||
|
|
327515366f | ||
|
|
1f60e3101e | ||
|
|
f8e474a1c5 | ||
|
|
8f11049c9f | ||
|
|
f314c2a4d9 | ||
|
|
5d90afe648 | ||
|
|
5ff9e94a2e | ||
|
|
107251e099 | ||
|
|
f970090577 | ||
|
|
1547dd4215 | ||
|
|
253bd1aea3 | ||
|
|
49b80a4916 | ||
|
|
8259b29896 | ||
|
|
f1c4b7d5df | ||
|
|
58ed49f3c9 | ||
|
|
ae57b960c2 | ||
|
|
758cf25888 | ||
|
|
3d65312999 | ||
|
|
437afbbbf3 | ||
|
|
b871c6b46f | ||
|
|
055f236aa5 | ||
|
|
85fe24cede | ||
|
|
8562409a92 | ||
|
|
c9974b65c4 | ||
|
|
270d7191ce | ||
|
|
aa4b2d9f3a | ||
|
|
233f66db5e | ||
|
|
d1ae298211 | ||
|
|
5d1b160fe9 | ||
|
|
ba557e20a4 | ||
|
|
7ab5cb20c8 | ||
|
|
bc7aa1a500 | ||
|
|
86951aff9a | ||
|
|
653d825083 | ||
|
|
72fc467109 | ||
|
|
86a6f5d67c | ||
|
|
852ed21e88 | ||
|
|
c023d7676a | ||
|
|
9f6c6d9917 | ||
|
|
9c643ae9ca | ||
|
|
fb3580efa1 | ||
|
|
5dfb7d63dc | ||
|
|
db4b4fb166 | ||
|
|
cedc8aae44 | ||
|
|
42b51611af | ||
|
|
820462dbc0 | ||
|
|
e80ca0fa92 | ||
|
|
885ef7a46f | ||
|
|
565cb70875 | ||
|
|
1668392988 | ||
|
|
9a51820dec | ||
|
|
01f0f436ac | ||
|
|
99c43881df | ||
|
|
d4a163e9cc | ||
|
|
1f44c4be2f | ||
|
|
8fdf973e66 | ||
|
|
b1f2d27ddf | ||
|
|
264b764d6e | ||
|
|
8958b2042f | ||
|
|
a9bc568217 | ||
|
|
c2cf8e528c | ||
|
|
604d3bac3c | ||
|
|
8945ace3f7 | ||
|
|
45be4626f6 | ||
|
|
cc4cc342c2 | ||
|
|
31248da3d1 | ||
|
|
defdd27987 | ||
|
|
f5e096a66f | ||
|
|
c284459382 | ||
|
|
7bb201a1d2 | ||
|
|
978b3eca05 | ||
|
|
24684033ca | ||
|
|
2c0a4ac906 | ||
|
|
3c30db965d | ||
|
|
37a1230c01 | ||
|
|
a4658eac24 | ||
|
|
25e76d0564 | ||
|
|
51c64fcbe6 | ||
|
|
deb2ed3d09 | ||
|
|
06055add5c | ||
|
|
317a464278 | ||
|
|
6ef5607d99 | ||
|
|
d84d30fe87 | ||
|
|
7ca9ca9465 | ||
|
|
357dcdb55e | ||
|
|
fbf7ccbdda | ||
|
|
c440c7c93a | ||
|
|
5ced9c1f19 | ||
|
|
c2777ff989 | ||
|
|
1b9b47dd6a | ||
|
|
510eccd471 | ||
|
|
a8a2db8eb1 | ||
|
|
335d7f3ae5 | ||
|
|
7ea0e90678 | ||
|
|
d185a85a07 | ||
|
|
ae441e6a2c | ||
|
|
5d593dd948 | ||
|
|
15b1d8d3f0 | ||
|
|
dbb4bdf59f | ||
|
|
76bd968c59 | ||
|
|
b695e0065a | ||
|
|
a415d59e2f | ||
|
|
733fd79f46 | ||
|
|
679f3347bb | ||
|
|
4d52c55784 | ||
|
|
039573b133 | ||
|
|
0f022da98c | ||
|
|
9a832c7bcd | ||
|
|
36631f2270 | ||
|
|
3bc847a9f0 | ||
|
|
95fe77a594 | ||
|
|
19a8ed8b25 | ||
|
|
ee05137415 | ||
|
|
1ec70f1df3 | ||
|
|
08b6edae80 | ||
|
|
3aabc1adbf | ||
|
|
9af34cc611 | ||
|
|
3b733930fe | ||
|
|
344636d88e | ||
|
|
22ebdcf1cf | ||
|
|
ab228c8484 | ||
|
|
ca59ce45c0 | ||
|
|
f45527468f | ||
|
|
db853b4462 | ||
|
|
5ca63a4e89 | ||
|
|
574a807678 | ||
|
|
8873b27eb8 | ||
|
|
79666b26c0 | ||
|
|
c66004bbb2 | ||
|
|
9cd4984f7c | ||
|
|
b36dfb356e | ||
|
|
d827497403 | ||
|
|
9b93c07339 | ||
|
|
6fd46eb36a | ||
|
|
a0629587be | ||
|
|
1c900e780a | ||
|
|
1cc696ab31 | ||
|
|
3653a7746a | ||
|
|
677f890c5c | ||
|
|
61333ecb40 | ||
|
|
1b8d6a38e7 | ||
|
|
7d165da105 | ||
|
|
354aa6831b | ||
|
|
5b72fab2e4 | ||
|
|
3be055a366 | ||
|
|
7dcf1cbf90 | ||
|
|
49c44db635 | ||
|
|
7f4791fa85 | ||
|
|
c3ac3ecbe7 | ||
|
|
dc365e066d | ||
|
|
cf13cccb1e | ||
|
|
471f33ceef | ||
|
|
744d07b8a1 | ||
|
|
59be0818e2 | ||
|
|
955a69b16e | ||
|
|
c7c6566bca | ||
|
|
b6638d4eec | ||
|
|
fd1cc2fdcb | ||
|
|
3996fbe365 | ||
|
|
c5f086b385 | ||
|
|
4612b79575 | ||
|
|
d1e07295e7 | ||
|
|
5e1064da55 | ||
|
|
f77c1900fa | ||
|
|
9c84712640 | ||
|
|
98c22b9acb | ||
|
|
d8e0b9f541 | ||
|
|
e8ab0f6e85 | ||
|
|
5d93a392e4 | ||
|
|
29c25bc375 | ||
|
|
34686394a6 | ||
|
|
df2f8684d6 | ||
|
|
8d24aa2b39 | ||
|
|
fc32b749dd | ||
|
|
7ad38057b5 | ||
|
|
a6eb615431 | ||
|
|
e511265cc9 | ||
|
|
8d4fadb3c8 | ||
|
|
90ad9cf668 | ||
|
|
adb8be3287 | ||
|
|
749037346c | ||
|
|
fea31f7422 | ||
|
|
97172f5e51 | ||
|
|
fd58ee6289 | ||
|
|
c272359f20 | ||
|
|
b34243fa7b | ||
|
|
e0961d81a0 | ||
|
|
04d82d8127 | ||
|
|
be9995bd1e | ||
|
|
43f5b5e2a6 | ||
|
|
ebb2a8ad5a | ||
|
|
ca4f265ce6 | ||
|
|
013940250b | ||
|
|
fdf5e7ab2a | ||
|
|
ef9a144437 | ||
|
|
78b2848622 | ||
|
|
ccd9ce1728 | ||
|
|
e229dc1549 | ||
|
|
307c4a22ed | ||
|
|
ad8a84a532 | ||
|
|
7f871b0cc6 | ||
|
|
1e343084e2 | ||
|
|
6c6ed5f443 | ||
|
|
5e460c57f8 | ||
|
|
277b8f3503 | ||
|
|
43e8796b2c | ||
|
|
4047e34050 | ||
|
|
35fa20d965 | ||
|
|
95be7cf505 | ||
|
|
f22a8126ed | ||
|
|
236c0c78c3 | ||
|
|
58fe959f85 | ||
|
|
280b036b91 | ||
|
|
6e2bf98d5f | ||
|
|
719982e4a3 | ||
|
|
76494e5f9c | ||
|
|
e38aba0dff | ||
|
|
f26842faa7 | ||
|
|
816e38db8e | ||
|
|
2734f53a79 | ||
|
|
71601b88ff | ||
|
|
97a8cc7ce5 | ||
|
|
0b83b849e7 | ||
|
|
d89b09427f | ||
|
|
b00ae974d2 | ||
|
|
c64e8f944e | ||
|
|
57d029f34a | ||
|
|
0ca36e8943 | ||
|
|
a61aa8ff0b | ||
|
|
49cd751acf | ||
|
|
2967d5d3f1 | ||
|
|
60da39712c | ||
|
|
52fbfdc5ab | ||
|
|
b91bd3ea01 | ||
|
|
6966e08306 | ||
|
|
38b77397e0 | ||
|
|
6558317a7e | ||
|
|
7a40b27931 | ||
|
|
0f387a8e3c | ||
|
|
15fbd6fbf4 | ||
|
|
310f13a2f7 | ||
|
|
2a60264e40 | ||
|
|
6e6eae7844 | ||
|
|
b3d31869d6 | ||
|
|
c448c2becb | ||
|
|
d39f17bda3 | ||
|
|
9648e25018 | ||
|
|
64d499af6e | ||
|
|
02da178d5c | ||
|
|
35cf2638e8 | ||
|
|
b1d446895b | ||
|
|
f0a54bf6e3 | ||
|
|
a5a2298c7d | ||
|
|
796b2d4970 | ||
|
|
ac1b3845b2 | ||
|
|
5ef2d538a0 | ||
|
|
a0c1719695 | ||
|
|
ebdf54a60b | ||
|
|
3546d54e3b | ||
|
|
639aafda12 | ||
|
|
4d5e051387 | ||
|
|
91b2e5bdbb | ||
|
|
7b9654f164 | ||
|
|
07d54587bd | ||
|
|
55b0be36cd | ||
|
|
5420fcaf3a | ||
|
|
6589feaacd | ||
|
|
3994141d40 | ||
|
|
1a1d6ab478 | ||
|
|
4796803c33 | ||
|
|
95063a7b65 | ||
|
|
f2a0f9f61a | ||
|
|
77e128aa11 | ||
|
|
72d3e4e03f | ||
|
|
751fdb96da | ||
|
|
4ebe739b44 | ||
|
|
c8e9207879 | ||
|
|
ccf198a80b | ||
|
|
8c1722faa2 | ||
|
|
64a97483fb | ||
|
|
de480ec0f5 | ||
|
|
d540dbec79 | ||
|
|
303996818c | ||
|
|
d27d2dd520 | ||
|
|
c2b67ccb78 | ||
|
|
c03b388786 | ||
|
|
ac14db7b19 | ||
|
|
36d2f96519 | ||
|
|
e503534ff4 | ||
|
|
d6ae5bfafa | ||
|
|
f06f44c30a | ||
|
|
0abf686406 | ||
|
|
1f8a0db290 | ||
|
|
a678ae2529 | ||
|
|
f9d8cb97c0 | ||
|
|
6ee841319f | ||
|
|
b282909c9e | ||
|
|
aba0c733cd | ||
|
|
029d74f855 | ||
|
|
bcb951077d | ||
|
|
a6c25b7bff | ||
|
|
cac822f785 | ||
|
|
145d6e29c2 | ||
|
|
c638e5ec87 | ||
|
|
6abd806539 | ||
|
|
244bb555f9 | ||
|
|
cedc4f241d | ||
|
|
bb50b3419e | ||
|
|
022e650dc6 | ||
|
|
dc874a99cd | ||
|
|
7e5bca3dfd | ||
|
|
52a2bb5524 | ||
|
|
79209c31bf | ||
|
|
4d10eda308 | ||
|
|
a123e65185 | ||
|
|
d01194da0b | ||
|
|
6323268f40 | ||
|
|
774d98991c | ||
|
|
3d8be787a2 | ||
|
|
b47c50ae5d | ||
|
|
1ee0526e41 | ||
|
|
bdc29dbbbf | ||
|
|
c9a1558c60 | ||
|
|
b546d096bd | ||
|
|
448fee76c1 | ||
|
|
165bcf5662 | ||
|
|
19a9d639b1 | ||
|
|
da688114f4 | ||
|
|
e4337b6631 | ||
|
|
a1cdf7189a | ||
|
|
c71ef6fa4c | ||
|
|
e5c6b2e952 | ||
|
|
7103707aeb | ||
|
|
d78d515acb | ||
|
|
2b925e0103 | ||
|
|
b6693c4345 | ||
|
|
7b222768d4 | ||
|
|
c6d42c09d8 | ||
|
|
411a25b610 | ||
|
|
601c828562 | ||
|
|
5a1cb00a07 | ||
|
|
eb18a2ac0f | ||
|
|
6613862aed | ||
|
|
25b0b63216 | ||
|
|
e61d14168a | ||
|
|
e3a2ad03bc | ||
|
|
67e7d63f0f | ||
|
|
b246d13bae | ||
|
|
18941f1b80 | ||
|
|
16f12bcfa5 | ||
|
|
2ec0f26122 | ||
|
|
c1f45dafa5 | ||
|
|
de32691b4e | ||
|
|
1fb2c66a21 | ||
|
|
018895067b | ||
|
|
f3d14dadc7 | ||
|
|
1a8825b374 | ||
|
|
8ee2d3d367 | ||
|
|
b2984cd3d0 | ||
|
|
27ea9c22bb | ||
|
|
b45adb6e6a | ||
|
|
6bc6d20a87 | ||
|
|
95d70db153 | ||
|
|
a0b014ecfc | ||
|
|
fc996951cb | ||
|
|
2ae133e993 | ||
|
|
a02937a67b | ||
|
|
0f4cc3231a | ||
|
|
2b2042e1c2 | ||
|
|
57090e8ec5 | ||
|
|
d6b834e8af | ||
|
|
fa826b3167 | ||
|
|
a49b3c9bf6 | ||
|
|
cdfbff9af0 | ||
|
|
87eed3965e | ||
|
|
c5cd716c20 | ||
|
|
02cfe9aeeb | ||
|
|
d87452ed21 | ||
|
|
029468e7b4 | ||
|
|
c9a1097579 | ||
|
|
f338ffea74 | ||
|
|
765b68458a | ||
|
|
15a4d1f0a9 | ||
|
|
bf0e5dc5bd | ||
|
|
19ceea4f1e | ||
|
|
cc68776069 | ||
|
|
d36002a02a | ||
|
|
fa5effafcd | ||
|
|
fa249a3f78 | ||
|
|
c8f6d68d68 | ||
|
|
44bbdbe49d | ||
|
|
252c043409 | ||
|
|
07e21427b9 | ||
|
|
0f1c10230a | ||
|
|
deb7121fde | ||
|
|
534e01e2d6 | ||
|
|
5c7e2432bd | ||
|
|
5fbf702500 | ||
|
|
b62859ffa2 | ||
|
|
2700f06fe7 | ||
|
|
63ec74ebea | ||
|
|
9d8135cf1c | ||
|
|
2cc98191f0 | ||
|
|
0417a10483 | ||
|
|
2e7fab7813 | ||
|
|
ef7530af29 | ||
|
|
e8e66ec4b5 | ||
|
|
90707f8d4e | ||
|
|
cc15a9480b | ||
|
|
447e0d0336 | ||
|
|
15db7eeb81 | ||
|
|
0a1454ff6c | ||
|
|
dc2864ad7a | ||
|
|
2d2fdd6e44 | ||
|
|
f38cd9d80d | ||
|
|
1a09712f89 | ||
|
|
c41cf6c444 | ||
|
|
39bf84a13c | ||
|
|
2d8a0dc59c | ||
|
|
61eddca39d | ||
|
|
8fe65ec371 | ||
|
|
24ff2482a4 | ||
|
|
6f64fc9f84 | ||
|
|
41afd85a5d | ||
|
|
5ad4cbace7 | ||
|
|
88b7470c07 | ||
|
|
f28ab4c280 | ||
|
|
214253c579 | ||
|
|
823670e4c5 | ||
|
|
276bd01fcc | ||
|
|
19e992869a | ||
|
|
078577c7c5 | ||
|
|
332ef5892b | ||
|
|
8b94320524 | ||
|
|
866173a481 | ||
|
|
1fa9e3fc93 | ||
|
|
74822d6ba3 | ||
|
|
9a188a87c2 | ||
|
|
fb2182dd9b | ||
|
|
59a4442880 | ||
|
|
0b86aad059 | ||
|
|
efb5c85c76 | ||
|
|
5d6f9a316a | ||
|
|
5a75906ce7 | ||
|
|
f35c5f1c91 | ||
|
|
0dcce91a6e | ||
|
|
0ff7076d84 | ||
|
|
bc54e3d01b | ||
|
|
e738acbe3c | ||
|
|
8e8b8f8ed5 | ||
|
|
84f1b08033 | ||
|
|
bc24e90070 | ||
|
|
005f63d455 | ||
|
|
e7f66900fa | ||
|
|
0477e03965 | ||
|
|
a8286e7458 | ||
|
|
af60501fb6 | ||
|
|
869f4d1898 | ||
|
|
e9e1b33884 | ||
|
|
ac9f2ed284 | ||
|
|
41bede60eb | ||
|
|
27f313ee16 | ||
|
|
f978f9a07d | ||
|
|
4eda5fb924 | ||
|
|
16affc9ef4 | ||
|
|
2844facae5 | ||
|
|
87d73684fa | ||
|
|
4096e72835 | ||
|
|
f19da94bfd | ||
|
|
44f90efb93 | ||
|
|
e329b6ffd0 | ||
|
|
6db1844656 | ||
|
|
2aac8d875a | ||
|
|
92ae8a5be7 | ||
|
|
1ea83ba3a7 | ||
|
|
6376e8d6e7 | ||
|
|
5e3c2f0c6a | ||
|
|
460b7be47a | ||
|
|
67dc3eef4b | ||
|
|
140fe74ca2 | ||
|
|
e8e6d3bc77 | ||
|
|
c782b6222c | ||
|
|
242ac26299 | ||
|
|
55599e1802 | ||
|
|
11cdb070c0 | ||
|
|
eacd789a88 | ||
|
|
02b0451d3c | ||
|
|
91e07727e3 | ||
|
|
1068208887 | ||
|
|
27e7ecce65 | ||
|
|
defbdcc2b8 | ||
|
|
dbad57b8e8 | ||
|
|
47f69f694a | ||
|
|
620876e0e7 | ||
|
|
76f38d3da0 | ||
|
|
d714a2a393 | ||
|
|
55bc7a678a | ||
|
|
64e8e02f54 | ||
|
|
48c4d54a6c | ||
|
|
a9f9c1406c | ||
|
|
7e30d16797 | ||
|
|
46ba9aa117 | ||
|
|
9f53987e3b | ||
|
|
e5ea4cc5d4 | ||
|
|
d726d4d4aa | ||
|
|
7fa55c39f1 | ||
|
|
cff8cb137c | ||
|
|
eb1e890278 | ||
|
|
67aee8a19c | ||
|
|
56adb85a87 | ||
|
|
62aff1f2a1 | ||
|
|
d6383e6c21 | ||
|
|
d3ebd4b318 | ||
|
|
c592ccb3e5 | ||
|
|
20aee23edc | ||
|
|
0937526aac | ||
|
|
77b9f2c15e | ||
|
|
dbf6b38a2e | ||
|
|
38c802a4ef | ||
|
|
ed47dca8a1 | ||
|
|
b8c1fa9b43 | ||
|
|
043d2926fa | ||
|
|
f04dfe43a8 | ||
|
|
8387de09e2 | ||
|
|
ac7e7a79c3 | ||
|
|
768ed80ece | ||
|
|
f40b2e641b | ||
|
|
5719bddbb5 | ||
|
|
aea75f51bd | ||
|
|
d58c07d697 | ||
|
|
fa12743c8e | ||
|
|
5cf2688c0c | ||
|
|
7d35e15fea | ||
|
|
0f62bccb0b | ||
|
|
9182a287e2 | ||
|
|
8e2b19ada7 | ||
|
|
55a408edad | ||
|
|
fee374b0e9 | ||
|
|
259a39ef0c | ||
|
|
53a70d9018 | ||
|
|
1e3c46a6bb | ||
|
|
b6a55f50ab | ||
|
|
b322ef286e | ||
|
|
3c0a97354c | ||
|
|
8b91aefd49 | ||
|
|
11e5fe8879 | ||
|
|
dbda9292d8 | ||
|
|
e271932f41 | ||
|
|
e25e8bc580 | ||
|
|
f8605dda61 | ||
|
|
97e268e5a5 | ||
|
|
7c3cee0624 | ||
|
|
296ef4184f | ||
|
|
7277074d9e | ||
|
|
5a17b95901 | ||
|
|
1e92c24847 | ||
|
|
ddc68626d8 | ||
|
|
e680a90e90 | ||
|
|
6e306ee44f | ||
|
|
e872552fdc | ||
|
|
c56ca4a0fa | ||
|
|
f9ebc0ba70 | ||
|
|
25bc2dff07 | ||
|
|
f76bf9dddc | ||
|
|
10ea05bc6f | ||
|
|
812e41d578 | ||
|
|
086dfc8a14 | ||
|
|
567976e822 | ||
|
|
3f0655c821 | ||
|
|
ca46921796 | ||
|
|
3b4c357aaa | ||
|
|
4cdf05efac | ||
|
|
5913ff1bd8 | ||
|
|
6fb7beb58a | ||
|
|
d855bc5ca8 | ||
|
|
abc9f7d096 | ||
|
|
2c74ff1e54 | ||
|
|
093704f073 | ||
|
|
b491f5cdc5 | ||
|
|
e642bbc426 | ||
|
|
91eccb7bab | ||
|
|
85fb55a0e1 | ||
|
|
2ed67f6d65 | ||
|
|
78bf5ad88e | ||
|
|
e7d4bc4506 | ||
|
|
a1fdf1e625 | ||
|
|
a37cd40ce3 | ||
|
|
a2086ed458 | ||
|
|
82d83ca579 | ||
|
|
3f03f7333c | ||
|
|
8b3e04d1b6 | ||
|
|
eefe3e8d4f | ||
|
|
df4645a84a | ||
|
|
d6e447a89c | ||
|
|
d8050634f6 | ||
|
|
7e2b3da928 | ||
|
|
f450056626 | ||
|
|
a735e2b58f | ||
|
|
29c97a9bf2 | ||
|
|
16c2baa0df | ||
|
|
6b6821d0c6 | ||
|
|
309a8283b2 | ||
|
|
31a74abebe | ||
|
|
5c614bceba | ||
|
|
6085da91e2 | ||
|
|
7e91eb6616 | ||
|
|
8aa70f05ad | ||
|
|
a1a5f470f7 | ||
|
|
cc62e8c785 | ||
|
|
d69f2b6cc5 | ||
|
|
1bcb5e0cc1 | ||
|
|
264eb52d61 | ||
|
|
11eeeb6ab1 | ||
|
|
4cfb2b248e | ||
|
|
72661e7c16 | ||
|
|
a065a1d918 | ||
|
|
1e3e343e43 | ||
|
|
a5671f016a | ||
|
|
79d019b5bb | ||
|
|
1f4f55bcc9 | ||
|
|
4ec941440d | ||
|
|
d7c1faf563 | ||
|
|
ce20544a4f | ||
|
|
79587215bb | ||
|
|
36dd50005a | ||
|
|
1a085788de | ||
|
|
896730ceda | ||
|
|
dce67351f9 | ||
|
|
185012b2b7 | ||
|
|
b8ac54052c | ||
|
|
1c398c2b77 | ||
|
|
36e82abd12 | ||
|
|
41c522104e | ||
|
|
e05e7bee82 | ||
|
|
ce8b9c153c | ||
|
|
4318b83414 | ||
|
|
113c78b67e | ||
|
|
eddabf9dbc | ||
|
|
0ecee3deda | ||
|
|
ab1ab7b6f1 | ||
|
|
2436480d9b | ||
|
|
3904c67e6e | ||
|
|
c10728319b | ||
|
|
7ac47676e2 | ||
|
|
aee0d4c0c8 | ||
|
|
2112e38886 | ||
|
|
4a0656e903 | ||
|
|
cf48e9d640 | ||
|
|
5aa3d71eaf | ||
|
|
52a88a7bdf | ||
|
|
08579021c5 | ||
|
|
3234c8241b | ||
|
|
1c8de02c8d | ||
|
|
5ffc911a69 | ||
|
|
bbf046033c | ||
|
|
c13fd1923b | ||
|
|
d736dc1a0a | ||
|
|
60ece1ee72 | ||
|
|
8c4d8cfdca | ||
|
|
df45c99f96 | ||
|
|
fca2661e05 | ||
|
|
ff3d9bd373 | ||
|
|
415ce93425 | ||
|
|
61075febae | ||
|
|
1132230674 | ||
|
|
7ece9b823d | ||
|
|
399ad3f450 | ||
|
|
fdc10e13ec | ||
|
|
f5675fc0fe | ||
|
|
ec07571069 | ||
|
|
d482c5de91 | ||
|
|
f1ba9c9d6a | ||
|
|
e6e8e2e4d5 | ||
|
|
9e9505a732 | ||
|
|
c530858df3 | ||
|
|
7c205d7a1e | ||
|
|
292c6810ad | ||
|
|
2b00447a43 | ||
|
|
e6bf77d148 | ||
|
|
c7940856ce | ||
|
|
8dd16b1fdb | ||
|
|
471722482e | ||
|
|
f9b56bc354 | ||
|
|
1a41053c76 | ||
|
|
3b2b6a20aa | ||
|
|
4768f912b8 | ||
|
|
8418d54ac7 | ||
|
|
2b2412ca20 | ||
|
|
7202cac7d0 | ||
|
|
08a8bfa76c | ||
|
|
17988fc7de | ||
|
|
405f312fe8 | ||
|
|
5672d2b39e | ||
|
|
538bb418ce | ||
|
|
5d49a6b685 | ||
|
|
959abe64f8 | ||
|
|
3d192b7f8d | ||
|
|
c6e1753803 | ||
|
|
6d2196125d | ||
|
|
564bf8a089 | ||
|
|
43a1c48f75 | ||
|
|
c2b31c0987 | ||
|
|
6bc02cbb45 | ||
|
|
9c8b5e37a4 | ||
|
|
12512f767b | ||
|
|
38a511e3e1 | ||
|
|
e7745d13f4 | ||
|
|
5344c3f121 | ||
|
|
de56e30bba | ||
|
|
c8162df936 | ||
|
|
5ea80b86db | ||
|
|
8b74c108a4 | ||
|
|
67288b4735 | ||
|
|
bbecc3d0c2 | ||
|
|
b20433c0be | ||
|
|
fb26254fbb | ||
|
|
f7ddd488e1 | ||
|
|
6f19d928f6 | ||
|
|
fa15d7fd26 | ||
|
|
be7af60ab5 | ||
|
|
c6ed5ee9c6 | ||
|
|
36cd1ae3cc | ||
|
|
58f04975e1 | ||
|
|
179681ef18 | ||
|
|
7682bf9b49 | ||
|
|
a648e2db70 | ||
|
|
c61e09e36a | ||
|
|
453ac88dce | ||
|
|
a9c18c57e4 | ||
|
|
03a6f2093e | ||
|
|
05818d70f4 | ||
|
|
f888aa61fb | ||
|
|
2aeceafb36 | ||
|
|
4f24d22a68 | ||
|
|
d33bdc7da1 | ||
|
|
9150747df1 | ||
|
|
2409817556 | ||
|
|
06dba2d258 | ||
|
|
9ae6c2673a | ||
|
|
352b61c741 | ||
|
|
db81925c4b | ||
|
|
60e0f3b9b5 | ||
|
|
68eb3774b9 | ||
|
|
b6da1bcb15 | ||
|
|
0c3324b6ef | ||
|
|
1f4439a89e | ||
|
|
d2e5c32c83 | ||
|
|
bde5960581 | ||
|
|
eaa4abea45 | ||
|
|
5c02636dd9 | ||
|
|
571432a7aa | ||
|
|
57cdf0bf16 | ||
|
|
da2046e90e | ||
|
|
6362b9c9b2 | ||
|
|
e10ed744bc | ||
|
|
5f6658ae9a | ||
|
|
7aa6564dcc | ||
|
|
280ca1dd85 | ||
|
|
e23b6e3484 | ||
|
|
f95c38f632 | ||
|
|
f963fcfa66 | ||
|
|
a7ba779ba8 | ||
|
|
1c21ea955c | ||
|
|
247d33a627 | ||
|
|
2166980f91 | ||
|
|
58b43dbb6c | ||
|
|
9537accb51 | ||
|
|
e258f3e2fa | ||
|
|
7b27be1306 | ||
|
|
203fb71851 | ||
|
|
899784cbdc | ||
|
|
3a274e85f0 | ||
|
|
ad61503d83 | ||
|
|
14fa797235 | ||
|
|
156f1b70c3 | ||
|
|
a4c7541092 | ||
|
|
df5035d975 | ||
|
|
37c049425d | ||
|
|
f5b174f985 | ||
|
|
fa921215d9 | ||
|
|
e02753df46 | ||
|
|
37e4d2bd48 | ||
|
|
96b5170d8c | ||
|
|
ed0adf61d3 | ||
|
|
30ce6b0a6a | ||
|
|
99476f4b13 | ||
|
|
08f7bd2dc3 | ||
|
|
1522cba5b0 | ||
|
|
e776118de9 | ||
|
|
3ab12cef2f | ||
|
|
025be70c42 | ||
|
|
5b061e062c | ||
|
|
82060320ef | ||
|
|
c054b097e9 | ||
|
|
caacb1dc9f | ||
|
|
d47d9e5017 | ||
|
|
913e3d65d2 | ||
|
|
cd9ee3c468 | ||
|
|
4065730e36 | ||
|
|
2fc244a3eb | ||
|
|
24a673c482 | ||
|
|
b57b97eb3c | ||
|
|
92d4d93fce | ||
|
|
5871874f70 | ||
|
|
32aab3366d | ||
|
|
156b6425d2 | ||
|
|
c019f86529 | ||
|
|
25b29a2864 | ||
|
|
4effc70792 | ||
|
|
23782b5c24 | ||
|
|
5ecbc2889b | ||
|
|
5b04672ba2 | ||
|
|
48d962e15a | ||
|
|
fb6a6f73c4 | ||
|
|
ecbcc566fe | ||
|
|
fc86620327 | ||
|
|
30b452543a | ||
|
|
d41613c46a | ||
|
|
d5681ba01c | ||
|
|
70ee8c5bc4 | ||
|
|
91c164ecca | ||
|
|
265ea82780 | ||
|
|
c540840cd4 | ||
|
|
f34e77f08c | ||
|
|
c94fecdadb | ||
|
|
f97b556e23 | ||
|
|
e890ce989c | ||
|
|
d58b71688b | ||
|
|
37c7fa7663 | ||
|
|
c8dddfed06 | ||
|
|
21d1bd48ec | ||
|
|
7b0427e86e | ||
|
|
8424eeb4ee | ||
|
|
055b9c57e7 | ||
|
|
5948c2d8cd | ||
|
|
f712c5c6d0 | ||
|
|
642cc50ac4 | ||
|
|
7c430c9d3c | ||
|
|
b8b0a0d662 | ||
|
|
f4566acfa5 | ||
|
|
6defe6e07d | ||
|
|
ad652706d6 | ||
|
|
90af611fdb | ||
|
|
e190841d67 | ||
|
|
3077cc82cc | ||
|
|
7435e6e7b3 | ||
|
|
6430e41fb5 | ||
|
|
9b58b3fb6e | ||
|
|
21e6a344a2 | ||
|
|
826b38c47a | ||
|
|
9cacfee8c7 | ||
|
|
7add3d1018 | ||
|
|
4bf484c881 | ||
|
|
6b5761dfa4 | ||
|
|
424e7d65e5 | ||
|
|
5676acaef9 | ||
|
|
e0581ee771 | ||
|
|
14e1ed06df | ||
|
|
7d191ebf8e | ||
|
|
12b8704502 | ||
|
|
b4c7d32741 | ||
|
|
1011a757a8 | ||
|
|
b78c772a14 | ||
|
|
2160d7da81 | ||
|
|
02dff2653a | ||
|
|
60267790a1 | ||
|
|
7a5e1d4154 | ||
|
|
a9d25efcde | ||
|
|
e45f90fac3 | ||
|
|
e195e67a48 | ||
|
|
35e17127af | ||
|
|
4227477fc4 | ||
|
|
f78d1a4018 | ||
|
|
d89043d8ac | ||
|
|
5e5069423b | ||
|
|
cb19451418 | ||
|
|
c445a14c46 | ||
|
|
eaa4fd41e2 | ||
|
|
0aa8fe0f20 | ||
|
|
f946f38f26 | ||
|
|
04a578495f | ||
|
|
f63e38a59e | ||
|
|
45bfe2ad58 | ||
|
|
5b04f4dab9 | ||
|
|
4808d89449 | ||
|
|
f7495c6867 | ||
|
|
de6b7752d4 | ||
|
|
a6ba7a19b9 | ||
|
|
5d81fa70ff | ||
|
|
91161b37dd | ||
|
|
0de8f4a3a6 | ||
|
|
0d43de516c | ||
|
|
ab31915ce9 | ||
|
|
aeb92592e7 | ||
|
|
df70b8bb0e | ||
|
|
726b901dc5 | ||
|
|
c7f0a85d41 | ||
|
|
49d175b677 | ||
|
|
ad08701cb1 | ||
|
|
1960d51e60 | ||
|
|
de38963904 | ||
|
|
fda511a949 | ||
|
|
583de1bf0b | ||
|
|
9ee090a36e | ||
|
|
8ec1461842 | ||
|
|
b4b878ac24 | ||
|
|
9d2cd8490c | ||
|
|
a0eca54f96 | ||
|
|
da1b032793 | ||
|
|
4281b8630b | ||
|
|
d610a6aac4 | ||
|
|
d027ed2092 | ||
|
|
1558220f74 | ||
|
|
8ee0783bd3 | ||
|
|
fa1377a8ee | ||
|
|
67e955919f | ||
|
|
a149d6b26f | ||
|
|
dd98a0b913 | ||
|
|
5035c8bd48 | ||
|
|
dda44519c1 | ||
|
|
87867beb0e | ||
|
|
3709b5aecc | ||
|
|
b5ec683318 | ||
|
|
821e3ff294 | ||
|
|
8217c717f6 | ||
|
|
9598417f42 | ||
|
|
99bccc6dff | ||
|
|
cb8088216b | ||
|
|
59ef668fd2 | ||
|
|
8b247bde35 | ||
|
|
994c9147f5 | ||
|
|
943e000c41 | ||
|
|
c44f605b5e | ||
|
|
5b68415173 | ||
|
|
0f226939aa | ||
|
|
25fb54e959 | ||
|
|
dcb676765e | ||
|
|
2e567d6d55 | ||
|
|
d129aedfe8 | ||
|
|
5035e7417d | ||
|
|
2c02094281 | ||
|
|
8a7184be3f | ||
|
|
04a72381e6 | ||
|
|
6a09fa56fb | ||
|
|
4611264ce3 | ||
|
|
00aa07ad97 | ||
|
|
22a40b65ae | ||
|
|
fdae698f07 | ||
|
|
d158d4de51 | ||
|
|
847b57907e | ||
|
|
2941adf364 | ||
|
|
95e3dcb448 | ||
|
|
395e2f31d0 | ||
|
|
3f404c8edb | ||
|
|
53690cf9d0 | ||
|
|
9e6cb79f4e | ||
|
|
12443da00c | ||
|
|
c2a9118186 | ||
|
|
7aaf36d24d | ||
|
|
7cc13ce99c | ||
|
|
d533c393b2 | ||
|
|
fb97de7f79 | ||
|
|
23289c09bb | ||
|
|
7c34982528 | ||
|
|
5de16001e2 | ||
|
|
b9e8384c11 | ||
|
|
121e92a829 | ||
|
|
4475c4fe7c | ||
|
|
cef76de547 | ||
|
|
a62019a3fd | ||
|
|
52e3c3516d | ||
|
|
f751f70b1e | ||
|
|
dfb4b5a339 | ||
|
|
1208dbe8c7 | ||
|
|
8751203986 | ||
|
|
8ccdc05c08 | ||
|
|
17886a9808 | ||
|
|
69a84a2782 | ||
|
|
9ad33012ad | ||
|
|
a1b0ae467e | ||
|
|
69c9a3d793 | ||
|
|
5736b5e9eb | ||
|
|
0ab7b6340d | ||
|
|
e16b367e6e | ||
|
|
da9577076c | ||
|
|
3dd8574e33 | ||
|
|
af1b6f4b42 | ||
|
|
b8a023d158 | ||
|
|
decac5fd12 | ||
|
|
cb279ef321 | ||
|
|
e3787b6b3c | ||
|
|
771583c559 | ||
|
|
8943a9db4a | ||
|
|
063d2e568a | ||
|
|
eec74fd963 | ||
|
|
72d43b2e56 | ||
|
|
2ca624c8c6 | ||
|
|
d922225e69 | ||
|
|
9aea76b0e8 | ||
|
|
8ee9295f39 | ||
|
|
c4ebdd1f37 | ||
|
|
00643dbdfb | ||
|
|
ee08a6fc53 | ||
|
|
5bdadbc089 | ||
|
|
97a68becb9 | ||
|
|
7736c90457 | ||
|
|
3b7ba39590 | ||
|
|
eec3d02737 | ||
|
|
cc1756b8e5 | ||
|
|
16ef7ca5fd | ||
|
|
b42ddba13c | ||
|
|
8dee7daeb9 | ||
|
|
856a12f94f | ||
|
|
a4d0c23071 | ||
|
|
e96b29f84f | ||
|
|
eb2c61ccc0 | ||
|
|
27400b0be1 | ||
|
|
cf722fdf50 | ||
|
|
459aebe8bf | ||
|
|
beadc0e69b | ||
|
|
0fb249284f | ||
|
|
791a0ce702 | ||
|
|
37de84d55f | ||
|
|
1bd8113f66 | ||
|
|
f010f9458b | ||
|
|
3a8164ac4e | ||
|
|
e347c8b0b1 | ||
|
|
b243e2532b | ||
|
|
2ec8d88d80 | ||
|
|
8f4823d604 | ||
|
|
80b6140a3e | ||
|
|
7f3f6e96d8 | ||
|
|
f1b3d7d036 | ||
|
|
de24ce0a8f | ||
|
|
cb29585e84 | ||
|
|
f6ee94589f | ||
|
|
587c0ea339 | ||
|
|
a99750ae87 | ||
|
|
181d8f52d5 | ||
|
|
261ef9ab6a | ||
|
|
8ca212d142 | ||
|
|
791a14bec0 | ||
|
|
a80a7175f3 | ||
|
|
13bb7cf30a | ||
|
|
b866055264 | ||
|
|
c163b845eb | ||
|
|
3f9ea4fc79 | ||
|
|
93067ee30f | ||
|
|
205b496d5c | ||
|
|
8e5e770fd1 | ||
|
|
c87e4a4582 | ||
|
|
72699bc988 | ||
|
|
c59406e9e4 | ||
|
|
9f8e4bcef4 | ||
|
|
722448c97b | ||
|
|
007c46eedd | ||
|
|
5d303c793b | ||
|
|
6649f43069 | ||
|
|
c43b1ac201 | ||
|
|
be34b963e9 | ||
|
|
3f67fac085 | ||
|
|
ade2c23fb5 | ||
|
|
e344ec46a5 | ||
|
|
0fdaf659d6 | ||
|
|
d998ca2f0f | ||
|
|
d4b79754ad | ||
|
|
46ff5dccff | ||
|
|
a83b8d62ec | ||
|
|
7eb242d3ad | ||
|
|
68aa182b16 | ||
|
|
46a4d2dc47 | ||
|
|
eb69522641 | ||
|
|
da741e294e | ||
|
|
adb17bb071 | ||
|
|
02ea7d390c | ||
|
|
834652922a | ||
|
|
490cb757bf | ||
|
|
e760a9566a | ||
|
|
a487aaf952 | ||
|
|
c829826870 | ||
|
|
bfbc6de7b5 | ||
|
|
2213564977 | ||
|
|
9e2f309e30 | ||
|
|
ba458c1391 | ||
|
|
643db78cc4 | ||
|
|
41986f4307 | ||
|
|
0b3542a573 | ||
|
|
0ef8ddb2a2 | ||
|
|
7292955600 | ||
|
|
5db0d682b8 | ||
|
|
d07076b9d4 | ||
|
|
9b0ecdf43f | ||
|
|
b516c1001a | ||
|
|
9ed9b2d8cd | ||
|
|
4ff1f31ecd | ||
|
|
653998e005 | ||
|
|
de7d127c52 | ||
|
|
95ef4e20f8 | ||
|
|
56c2e94daf | ||
|
|
01b7f1ae18 | ||
|
|
a3788c4e98 | ||
|
|
e7581f4e15 | ||
|
|
b508a07d74 | ||
|
|
afa375f220 | ||
|
|
997f0535f5 | ||
|
|
d378021dee | ||
|
|
ec57f1305a | ||
|
|
bc73195193 | ||
|
|
696d95b112 | ||
|
|
0b10ea6e36 | ||
|
|
3e278a2e75 | ||
|
|
236e5fcf9d | ||
|
|
8e83564ce9 | ||
|
|
dadbebd3ea | ||
|
|
88900ed0d5 | ||
|
|
7b8616ac7b | ||
|
|
5abacd3667 | ||
|
|
34ea33f237 | ||
|
|
ba706b6dab | ||
|
|
6b950d0408 | ||
|
|
a97cbf038c | ||
|
|
d865efceb9 | ||
|
|
cf939620ea | ||
|
|
aa3f4c74dc | ||
|
|
97215008c9 | ||
|
|
ee5861efc8 | ||
|
|
38edd77034 | ||
|
|
87dcfbc645 | ||
|
|
edef3ad8c3 | ||
|
|
af01e95164 | ||
|
|
883963232f | ||
|
|
3d5c1b4ef8 | ||
|
|
4b00ec9d4f | ||
|
|
2e3a7386e9 | ||
|
|
e57a75ac55 | ||
|
|
610bf8a277 | ||
|
|
5ca92ecd67 | ||
|
|
ca8955daf3 | ||
|
|
3a4787dd98 | ||
|
|
40b1a3996a | ||
|
|
8555a87380 | ||
|
|
5a84a0d8d2 | ||
|
|
410922a943 | ||
|
|
3a9bd90a3b | ||
|
|
92078b1c58 | ||
|
|
34826c9506 | ||
|
|
97cc468509 | ||
|
|
e5d4f2c24f | ||
|
|
60fe26ff2f | ||
|
|
89fad4d3ad | ||
|
|
db379ad7b5 | ||
|
|
2d4e2fb8cb | ||
|
|
66050db322 | ||
|
|
bfeb3e801a | ||
|
|
6c7cfe9e4d | ||
|
|
de5f7f70e2 | ||
|
|
0b0e2a3f34 | ||
|
|
02b5d80bb9 | ||
|
|
0e602ab50b | ||
|
|
e98eedb16a | ||
|
|
72a5425c3c | ||
|
|
234bf8af34 | ||
|
|
85489d05e0 | ||
|
|
6fa7a8989c | ||
|
|
fd8c762772 | ||
|
|
3d38cdb609 | ||
|
|
1103f9046a | ||
|
|
b07b06a9fb | ||
|
|
cb776d2f50 | ||
|
|
e1febf7ec1 | ||
|
|
35f599833c | ||
|
|
c0e58e48ae | ||
|
|
f9b4ff17a5 | ||
|
|
a601991f91 | ||
|
|
f904cd6c4a | ||
|
|
729218ec4b | ||
|
|
9bbb0fe1f6 | ||
|
|
1db5e0c0bf | ||
|
|
a66c911fed | ||
|
|
8987ca61a1 | ||
|
|
ef9b8b792f | ||
|
|
1e018d8a8a | ||
|
|
9ba470fc63 | ||
|
|
d53ed5bbee | ||
|
|
a788173534 | ||
|
|
eee10a10d8 | ||
|
|
bef8447447 | ||
|
|
6002719c8c | ||
|
|
f569606475 | ||
|
|
e3867ffa41 | ||
|
|
5b5655c989 | ||
|
|
fe45975f43 | ||
|
|
1853d0d16d | ||
|
|
8637516565 | ||
|
|
f8c442cf76 | ||
|
|
0dadc124d3 | ||
|
|
1e549b0ab4 | ||
|
|
30d1c0e0b5 | ||
|
|
44e6445180 | ||
|
|
b910e20413 | ||
|
|
909584d473 | ||
|
|
aff75131e4 | ||
|
|
999166fa58 | ||
|
|
2b558a9606 | ||
|
|
823a37aed7 | ||
|
|
5b287deca2 | ||
|
|
2b61edb80d | ||
|
|
4061539e1b | ||
|
|
1718d07f94 | ||
|
|
d7b40433db | ||
|
|
fd4997ab94 | ||
|
|
8ae7f60b04 | ||
|
|
85cf009f80 | ||
|
|
dc347e4854 | ||
|
|
81a4ca5667 | ||
|
|
7236ed93e9 | ||
|
|
fc0cebe7c5 | ||
|
|
c47501d228 | ||
|
|
f423549257 | ||
|
|
77f9113301 | ||
|
|
c843130854 | ||
|
|
38b9198dba | ||
|
|
32182fe126 | ||
|
|
255a62dd21 | ||
|
|
c05195a47b | ||
|
|
eec86488e8 | ||
|
|
5ace5a5d8e | ||
|
|
b2b0cf11eb | ||
|
|
8ab46827de | ||
|
|
0a60e504b6 | ||
|
|
e2c5236706 | ||
|
|
a20edc1783 | ||
|
|
e810428c86 | ||
|
|
465cfb4fad | ||
|
|
67a7a63a36 | ||
|
|
1445bf7fb1 | ||
|
|
f67cb001df | ||
|
|
b1404cff37 | ||
|
|
50caca4002 | ||
|
|
122baa17a2 | ||
|
|
83a877c3dc | ||
|
|
253e801f51 | ||
|
|
e92636ab1a | ||
|
|
a74677acf7 | ||
|
|
499fed40f2 | ||
|
|
8889f4fdcc | ||
|
|
92bb849e7c | ||
|
|
115b14bc94 | ||
|
|
5b74374bb2 | ||
|
|
0b362fd866 | ||
|
|
fe0229aed0 | ||
|
|
5611333c29 | ||
|
|
5140a2e107 | ||
|
|
0f81482ed1 | ||
|
|
278411898a | ||
|
|
9af112b38f | ||
|
|
095437d0c7 | ||
|
|
45443b48ef | ||
|
|
6f561d6bd7 | ||
|
|
c3afcffc50 | ||
|
|
e1651c752a | ||
|
|
054d8c4c9f | ||
|
|
a0e619bcd7 | ||
|
|
15390cd966 | ||
|
|
ea1a9943fc | ||
|
|
51b40c6b18 | ||
|
|
c2aa56ac38 | ||
|
|
fd4bc63854 | ||
|
|
a9a955f8b9 | ||
|
|
119f6deb24 | ||
|
|
6ac76c86d7 | ||
|
|
224370e866 | ||
|
|
98de0d4351 | ||
|
|
d6e702a9eb | ||
|
|
93dc772565 | ||
|
|
d59e4ca4d1 | ||
|
|
8c5c4608d2 | ||
|
|
85f64b8c08 | ||
|
|
c20dc61f16 | ||
|
|
3ec458ef4f | ||
|
|
6391b00c00 | ||
|
|
35a1c9a133 | ||
|
|
64001c9643 | ||
|
|
da347aa077 | ||
|
|
326d50b686 | ||
|
|
ec3170752a | ||
|
|
8e17f915c6 | ||
|
|
62e4423f30 | ||
|
|
3329bc1748 | ||
|
|
91e46a94f5 | ||
|
|
c889659ad7 | ||
|
|
7407162dfe | ||
|
|
2ffdbe781f | ||
|
|
e5e0f85b50 | ||
|
|
766b5514f0 | ||
|
|
eaa211212d | ||
|
|
cf993c2a36 | ||
|
|
edfda74e9c | ||
|
|
2662809900 | ||
|
|
65daf74d0e | ||
|
|
fdbe018cdf | ||
|
|
841df74010 | ||
|
|
5efbf2a802 | ||
|
|
b2fbbddfa0 | ||
|
|
e983be4060 | ||
|
|
3544b84632 | ||
|
|
d5e56c7e76 | ||
|
|
04a8efd8c3 | ||
|
|
0f11838d93 | ||
|
|
50c7775e47 | ||
|
|
2939abd8de | ||
|
|
1d4e2cedf8 | ||
|
|
5d1e5df205 | ||
|
|
c959424957 | ||
|
|
c037686a26 | ||
|
|
b21ce8c9fb | ||
|
|
11f59ada16 | ||
|
|
135cdfca46 | ||
|
|
41157ee3e9 | ||
|
|
ba62ce9e93 | ||
|
|
bfd1bcec69 | ||
|
|
53e24a8e30 | ||
|
|
ebea587465 | ||
|
|
7185927e7e | ||
|
|
522149f503 | ||
|
|
f5d71352ca | ||
|
|
75ec16fd72 | ||
|
|
d0a23a7d73 | ||
|
|
0147e6cb8d | ||
|
|
fea95c2951 | ||
|
|
af855bc295 | ||
|
|
393e56a604 | ||
|
|
8485a8c654 | ||
|
|
95be13bc4a | ||
|
|
411010e6e6 | ||
|
|
64718e576f | ||
|
|
3f5ac02697 | ||
|
|
8b1c465bf6 | ||
|
|
00dea566f2 | ||
|
|
e8f8d55010 | ||
|
|
e985488471 | ||
|
|
5a20d629ab | ||
|
|
90c5f0e1ae | ||
|
|
91362f938d | ||
|
|
82fe0148f2 | ||
|
|
b174f4736f | ||
|
|
e0ac3cfb12 | ||
|
|
8ff78378cd | ||
|
|
e36f1d3128 | ||
|
|
c00b427efa | ||
|
|
117c3414f2 | ||
|
|
724542d870 | ||
|
|
2ff611137e | ||
|
|
2c3f9e35ac | ||
|
|
8c127a8193 | ||
|
|
da4d3562f5 | ||
|
|
3f3141c186 | ||
|
|
3ea98b0c00 | ||
|
|
69d585e867 | ||
|
|
6dd83d3cba | ||
|
|
9e773ff980 | ||
|
|
a2a23579bd | ||
|
|
fb184da86e | ||
|
|
72327802d6 | ||
|
|
09817b24f0 | ||
|
|
6b513239f8 | ||
|
|
7b2dc697fb | ||
|
|
1a700145ec | ||
|
|
162bf3d22d | ||
|
|
d78f887d1c | ||
|
|
8a9a56707c | ||
|
|
22fccd5143 | ||
|
|
ebb6e34196 | ||
|
|
30c4456b85 | ||
|
|
9ac6cd503d | ||
|
|
71c440862c | ||
|
|
961abd823f | ||
|
|
fd412c2938 | ||
|
|
fd237244a2 | ||
|
|
39f661c5f5 | ||
|
|
e86e472d4f | ||
|
|
dafec4642c | ||
|
|
27f6fb1ff1 | ||
|
|
807ec04229 | ||
|
|
44f1281915 | ||
|
|
c6794733ca | ||
|
|
157b68a29f | ||
|
|
00dde7d2cf | ||
|
|
68daf5f0ad | ||
|
|
72e8d083b7 | ||
|
|
b9c5ab08a8 | ||
|
|
a569a2e166 | ||
|
|
3c7e45ccc8 | ||
|
|
e7ca031d1e | ||
|
|
e472713c62 | ||
|
|
f3f0d743ff | ||
|
|
e8596f0430 | ||
|
|
8a61c7d336 | ||
|
|
87138c9854 | ||
|
|
05b8ec97e9 | ||
|
|
fa9981b1ca | ||
|
|
bdfe8a224a | ||
|
|
41a80fce20 | ||
|
|
40438cf2bd | ||
|
|
9ac22ee9aa | ||
|
|
5bf12519da | ||
|
|
42783279ff | ||
|
|
522ca27243 | ||
|
|
254081e3ad | ||
|
|
fc5e293ef6 | ||
|
|
25cd35147e | ||
|
|
a9864a5619 | ||
|
|
d2436fa86d | ||
|
|
16057d8b04 | ||
|
|
f2ecfc99ad | ||
|
|
e50e9a5e65 | ||
|
|
395d43fd9c | ||
|
|
968af6148e | ||
|
|
4bc9cbc24f | ||
|
|
eb4db2152c | ||
|
|
ef21a8dbd0 | ||
|
|
39a6bda52d | ||
|
|
e285036455 | ||
|
|
fdaf0e9979 | ||
|
|
e2602b3967 | ||
|
|
41f509873d | ||
|
|
39dc8368fa | ||
|
|
be0b8cf2f5 | ||
|
|
53b5ecf34a | ||
|
|
366f793cf0 | ||
|
|
1328865279 | ||
|
|
a865ba8cf5 | ||
|
|
2fea78a6c4 | ||
|
|
37deeb0d52 | ||
|
|
14dffa762b | ||
|
|
2fc3ef8124 | ||
|
|
38c548854e | ||
|
|
20c8b89bb7 | ||
|
|
35568f6425 | ||
|
|
76230c1305 | ||
|
|
e23ba2340c | ||
|
|
022cd9cd64 | ||
|
|
6ec7d2c340 | ||
|
|
8c3798e96b | ||
|
|
d623453451 | ||
|
|
aafa333355 | ||
|
|
9bcd9f0a73 | ||
|
|
a7a8c542f5 | ||
|
|
74ace74d50 | ||
|
|
f3b6829c74 | ||
|
|
c73d626757 | ||
|
|
4ac17428ac | ||
|
|
c8da280a19 | ||
|
|
d4b30620a7 | ||
|
|
46a2f6ed24 | ||
|
|
28cfd50f08 | ||
|
|
f06d055372 | ||
|
|
7fae220f18 | ||
|
|
7b48923a2c | ||
|
|
22de865582 | ||
|
|
5f680141b4 | ||
|
|
3c528f0fdd | ||
|
|
812a2e4850 | ||
|
|
e3d5eb5a4e | ||
|
|
859d62d2a7 | ||
|
|
6e66bea152 | ||
|
|
a6eb871b42 | ||
|
|
a09b42e046 | ||
|
|
c85713850d | ||
|
|
3823b1a6fc | ||
|
|
52b4604d3b | ||
|
|
aade5278d8 | ||
|
|
afdf5cdfe2 | ||
|
|
41d13dc2c6 | ||
|
|
9bcd34349f | ||
|
|
1c4b430984 | ||
|
|
92d7639267 | ||
|
|
8977673fdf | ||
|
|
25a4636d0a | ||
|
|
80589dfeb2 | ||
|
|
76ca2aab29 | ||
|
|
429005559d | ||
|
|
e193a48b75 | ||
|
|
09b975ab46 | ||
|
|
582a834b89 | ||
|
|
1ae9c0858a | ||
|
|
5211c95b81 | ||
|
|
e75d3f759f | ||
|
|
5b08bda5b8 | ||
|
|
0e1188565e | ||
|
|
50c7cb1717 | ||
|
|
9e13a7bdaa | ||
|
|
29b0b17f50 | ||
|
|
d57466608e | ||
|
|
c80037bb2f | ||
|
|
dd097fe361 | ||
|
|
fd56195b2d | ||
|
|
5c0c9a60e9 | ||
|
|
834cc3f2c5 | ||
|
|
b09295fc7c | ||
|
|
4ddc4778e4 | ||
|
|
3570467838 | ||
|
|
9b7b9bc407 | ||
|
|
9eb73e1ef0 | ||
|
|
743e615224 | ||
|
|
6291910b02 | ||
|
|
8737db97e7 | ||
|
|
60a9463e7a | ||
|
|
fcdbae6806 | ||
|
|
bd1d3724c1 | ||
|
|
a9a26b93f9 | ||
|
|
c121bccb03 | ||
|
|
39b77c6fd3 | ||
|
|
3f17898bf5 | ||
|
|
fbffa507b8 | ||
|
|
e392212e67 | ||
|
|
de2b97c640 | ||
|
|
74db92bee4 | ||
|
|
4f28403c03 | ||
|
|
963be27b75 | ||
|
|
19b0f604b4 | ||
|
|
7c7de87fcf | ||
|
|
58ba6789cc | ||
|
|
3451f7e760 | ||
|
|
b50a777437 | ||
|
|
4852d255c7 | ||
|
|
ae18127409 | ||
|
|
165d2860e4 | ||
|
|
4ff5b9e7ce | ||
|
|
12650610aa | ||
|
|
d770a048aa | ||
|
|
4626e48980 | ||
|
|
e8b653ddf3 | ||
|
|
6300a47c15 | ||
|
|
8c5c73ea4b | ||
|
|
24be4b4969 | ||
|
|
bb15e54438 | ||
|
|
0d25a0592a | ||
|
|
73b22cac56 | ||
|
|
6140fde60c | ||
|
|
ddc657a073 | ||
|
|
f14797e64f | ||
|
|
bb37d1c339 | ||
|
|
12e80c271b | ||
|
|
c6b60d5376 | ||
|
|
a3dea9b243 | ||
|
|
fc98fc9781 | ||
|
|
8b5e22dd7d | ||
|
|
7aae0ce394 | ||
|
|
6e34f183ea | ||
|
|
93e26f8117 | ||
|
|
ec453c32a1 | ||
|
|
cbd7aed0f3 | ||
|
|
80db2abe3d | ||
|
|
de1f3d0df7 | ||
|
|
be0ad9be2f | ||
|
|
1fe15c16cc | ||
|
|
11bcb328f8 | ||
|
|
902e295089 | ||
|
|
bfa53af50f | ||
|
|
d84d765aeb | ||
|
|
8e3aec8aaf | ||
|
|
df0dd10c9f | ||
|
|
191453d89a | ||
|
|
a595a09fbd | ||
|
|
c36fccdd8e | ||
|
|
90ad6e89ad | ||
|
|
ef62d753d1 | ||
|
|
3042648ed4 | ||
|
|
4c36c12fb1 | ||
|
|
0c4b25bcec | ||
|
|
ac0d7f74cf | ||
|
|
20e36f8adf | ||
|
|
b66cd84b9a | ||
|
|
df356694c5 | ||
|
|
22c9d882a8 | ||
|
|
6dda879e63 | ||
|
|
3fc9643460 | ||
|
|
361e261997 | ||
|
|
062212952d | ||
|
|
6edd8834dd | ||
|
|
1ee8130ffa | ||
|
|
21c6fa5f1b | ||
|
|
f4dcb35bc8 | ||
|
|
acb82389c8 | ||
|
|
e5535ccc8f | ||
|
|
e34b509b20 | ||
|
|
816dc65262 | ||
|
|
05f1dca151 | ||
|
|
81891ac109 | ||
|
|
49123cca59 | ||
|
|
05e45b196b | ||
|
|
5e67276b6c | ||
|
|
3fd0b10762 | ||
|
|
3210740872 | ||
|
|
d008de7b37 | ||
|
|
7493570a0d | ||
|
|
ba8f34a594 | ||
|
|
3bf86618fc | ||
|
|
000f4984cf | ||
|
|
077f06562f | ||
|
|
9092be3a52 | ||
|
|
16231f599b | ||
|
|
43b9caf735 | ||
|
|
cae0ac2d3f | ||
|
|
9170d2902c | ||
|
|
c73f87ac71 | ||
|
|
279fc2ac79 | ||
|
|
58aaea6277 | ||
|
|
6698c5760b | ||
|
|
9f87fb16a2 | ||
|
|
1111e03901 | ||
|
|
0f1fec40cf | ||
|
|
3820bf16fd | ||
|
|
b1d7f0e3fd | ||
|
|
c8a7a709dc | ||
|
|
d3ec74be2b | ||
|
|
b5b5a51897 | ||
|
|
60426a5dec | ||
|
|
0bd7cb1ebe | ||
|
|
f67f3a3010 | ||
|
|
6a94a7d49a | ||
|
|
601d18272b | ||
|
|
ff2845b2d2 | ||
|
|
ab962bf5c6 | ||
|
|
74c309b4ff | ||
|
|
31e80c1321 | ||
|
|
184deec510 | ||
|
|
e97b65c320 | ||
|
|
4b25865108 | ||
|
|
2e1ea22532 | ||
|
|
6e5b8c25dd | ||
|
|
0f2cb4e2f5 | ||
|
|
e01c1784f3 | ||
|
|
fb1a19f157 | ||
|
|
3684c26cbc | ||
|
|
9b19dfd562 | ||
|
|
255b592489 | ||
|
|
5dfe7ffc47 | ||
|
|
21445fe0d0 | ||
|
|
c72400e927 | ||
|
|
b56197d30b | ||
|
|
ade57809c1 | ||
|
|
4fa8834de4 | ||
|
|
592aacb25a | ||
|
|
7edf747e84 | ||
|
|
4c765a04f7 | ||
|
|
332995096b | ||
|
|
3cefa54789 | ||
|
|
1f374e4b92 | ||
|
|
e06d45c07d | ||
|
|
1c6a717e93 | ||
|
|
5761eba529 | ||
|
|
ba4d5b0b95 | ||
|
|
fc3ff48777 | ||
|
|
5252edcd0e | ||
|
|
d9591b819d | ||
|
|
52be531b8e | ||
|
|
57ad97d212 | ||
|
|
4d97089990 | ||
|
|
7055e29670 | ||
|
|
61067e9c3f | ||
|
|
9aec4229d5 | ||
|
|
02186d5a54 | ||
|
|
d5efd6eacb | ||
|
|
a026a1979f | ||
|
|
609442318a | ||
|
|
cfc8fc4e9b | ||
|
|
be7806b051 | ||
|
|
6a0f185335 | ||
|
|
8a26a6e34c | ||
|
|
a59a90c734 | ||
|
|
4a73a157e1 | ||
|
|
31d6e05811 | ||
|
|
59dc0e8612 | ||
|
|
f7a8ec7ee9 | ||
|
|
8b6ad4ff85 | ||
|
|
9f2fa79fe3 | ||
|
|
80bdbb5f24 | ||
|
|
a2887d1536 | ||
|
|
df87b64ca5 | ||
|
|
a41308e8c3 | ||
|
|
19c9a0b441 | ||
|
|
a46204ef9e | ||
|
|
004ef3d451 | ||
|
|
f90eeb7861 | ||
|
|
791cd3055b | ||
|
|
1437640bc5 | ||
|
|
5865c030cb | ||
|
|
25064e86b8 | ||
|
|
4cbe9ad5ef | ||
|
|
63acc148dc | ||
|
|
4a24b434ce | ||
|
|
f813b9e25b | ||
|
|
c15958f3c2 | ||
|
|
be720b96c1 | ||
|
|
186d58af01 | ||
|
|
7a69812b17 | ||
|
|
96c921c776 | ||
|
|
e347ad7723 | ||
|
|
21857ec12d | ||
|
|
11e67c9db0 | ||
|
|
91b2fd3c4a | ||
|
|
d5830ef708 | ||
|
|
837b62d5e8 | ||
|
|
07ec92175f | ||
|
|
2a0cd77eef | ||
|
|
67551f31fd | ||
|
|
7eb0f3564b | ||
|
|
967cc0b37b | ||
|
|
3fea5779df | ||
|
|
c68714fd64 | ||
|
|
736656f7d6 | ||
|
|
f4a76c48c2 | ||
|
|
9b2b024721 | ||
|
|
ef3aa17025 | ||
|
|
d67ba015c5 | ||
|
|
dfba17c7dc | ||
|
|
a658609ae3 | ||
|
|
d68d378a48 | ||
|
|
f2f28d1794 | ||
|
|
b53be72c6e | ||
|
|
c12958bf10 | ||
|
|
abb4cb4810 | ||
|
|
6180515212 | ||
|
|
4bfb60865c | ||
|
|
50ee00cfe5 | ||
|
|
2a850cd5ad | ||
|
|
e4f407ae7c | ||
|
|
ef063b07b4 | ||
|
|
26774a2fe0 | ||
|
|
a4a0b42f8f | ||
|
|
7565bcc789 | ||
|
|
330704a5e9 | ||
|
|
71c8adcfb2 | ||
|
|
4eb57cde0e | ||
|
|
d952811ec8 | ||
|
|
739faac264 | ||
|
|
90b11b2fb9 | ||
|
|
916c80d53f | ||
|
|
52802371e4 | ||
|
|
ac0e40a2b7 | ||
|
|
d62d2abf59 | ||
|
|
9245d3ed7e | ||
|
|
fa1199ac24 | ||
|
|
321193cf44 | ||
|
|
44d89308c9 | ||
|
|
d5ba546d2e | ||
|
|
b6f78d8d95 | ||
|
|
9bb990e9ed | ||
|
|
2ef9b732e2 | ||
|
|
dfd52282a7 | ||
|
|
545e47aacc | ||
|
|
85a1817ecc | ||
|
|
49ff324882 | ||
|
|
a45f3ac5d6 | ||
|
|
8ed56bd971 | ||
|
|
d9610d25e5 | ||
|
|
870e799baa | ||
|
|
ff77708e0e | ||
|
|
30866833ef | ||
|
|
0029956221 | ||
|
|
8fb6f0f328 | ||
|
|
e5f9923f76 | ||
|
|
2b02a7433f | ||
|
|
83d578f39a | ||
|
|
43390ec240 | ||
|
|
4ef0572ceb | ||
|
|
345a538c84 | ||
|
|
3e4c3353ce | ||
|
|
9f1649ae57 | ||
|
|
e4e68a6179 | ||
|
|
7c6d2361af | ||
|
|
f3394b16b8 | ||
|
|
1aa6749956 | ||
|
|
d4e088b726 | ||
|
|
0eb771c2a6 | ||
|
|
4ab092d011 | ||
|
|
754a7eb7de | ||
|
|
d866b5592e | ||
|
|
372db4b539 | ||
|
|
5f5556ee69 | ||
|
|
fa487474d2 | ||
|
|
41081e1b40 | ||
|
|
45fb0ebcdf | ||
|
|
d0ea904cdf | ||
|
|
6e7962e06a | ||
|
|
8ab9cea3f7 | ||
|
|
82520555b3 | ||
|
|
5ba41306ea | ||
|
|
6a38e1d06e | ||
|
|
a9af374be6 | ||
|
|
83549e6f61 | ||
|
|
6bf901faee | ||
|
|
c3d8cc0978 | ||
|
|
08dfa20da1 | ||
|
|
49688e2b0d | ||
|
|
36361f04c6 | ||
|
|
e31cb8cbcd | ||
|
|
491efd91a5 | ||
|
|
2f0077a081 | ||
|
|
9c75c84e83 | ||
|
|
b215885188 | ||
|
|
66259dee17 | ||
|
|
2a68c3585c | ||
|
|
84c6455c95 | ||
|
|
fee3d7c151 | ||
|
|
618ef8b549 | ||
|
|
96fc260488 | ||
|
|
6f4ba08d4a | ||
|
|
17e3c570ba | ||
|
|
2194685d76 | ||
|
|
344d6c201e | ||
|
|
dc5885790a | ||
|
|
156f573842 | ||
|
|
d81481a974 | ||
|
|
b7c51922e8 | ||
|
|
9dff864de8 | ||
|
|
59be6c8710 | ||
|
|
f1fc9dce36 | ||
|
|
b87cda94c5 | ||
|
|
6547881920 | ||
|
|
bba67fbd83 | ||
|
|
1659d5974e | ||
|
|
50e6306331 | ||
|
|
03bf1ec7b3 | ||
|
|
fba5a8017c | ||
|
|
e4490694f1 | ||
|
|
f6f8dc1a22 | ||
|
|
cfd02bff53 | ||
|
|
b2ee732321 | ||
|
|
1512b3ba6c | ||
|
|
f95664e846 | ||
|
|
55a88688a3 | ||
|
|
589e838fa0 | ||
|
|
c912064c8d | ||
|
|
578b75aa76 | ||
|
|
61e1686da3 | ||
|
|
79075282e5 | ||
|
|
295f867118 | ||
|
|
5d13dfee25 | ||
|
|
0cc4287b59 | ||
|
|
286769dc03 | ||
|
|
5cbd0cf42a | ||
|
|
9ba949c2d9 | ||
|
|
c26f2cc80a | ||
|
|
e8fdd99962 | ||
|
|
6ab6473cd7 | ||
|
|
8d22006165 | ||
|
|
e64bdbdb2c | ||
|
|
1f2d95db7e | ||
|
|
b07621f1a1 | ||
|
|
ccea764556 | ||
|
|
40b5195f0e | ||
|
|
464aeecef8 | ||
|
|
3d5393a0e7 | ||
|
|
c1f1646dab | ||
|
|
87001326f6 | ||
|
|
a8968257db | ||
|
|
c0d0e2e89d | ||
|
|
56f2e74ff4 | ||
|
|
92553add8e | ||
|
|
059d4a1306 | ||
|
|
6561fbc831 | ||
|
|
b13a1ff3dd | ||
|
|
ffdc914c71 | ||
|
|
b6d9ea86ee | ||
|
|
53c38ef2cc | ||
|
|
281c5e4c66 | ||
|
|
96bf714d85 | ||
|
|
2b06d34279 | ||
|
|
826319ce34 | ||
|
|
d7afd7aae0 | ||
|
|
aff1467ea3 | ||
|
|
ccb261a8a3 | ||
|
|
9d23fc222a | ||
|
|
e5015faafa | ||
|
|
a4c37d7f51 | ||
|
|
8cf51c5cf4 | ||
|
|
2a21224ab8 | ||
|
|
78890f925c | ||
|
|
796f831296 | ||
|
|
5f78644bb6 | ||
|
|
c42f46eba4 | ||
|
|
369a6a30da | ||
|
|
395b4c25f3 | ||
|
|
26de185f54 | ||
|
|
7fac189ab3 | ||
|
|
d5e0899955 | ||
|
|
f99882c61c | ||
|
|
42a4c7d368 | ||
|
|
179a4cead5 | ||
|
|
b132557f04 | ||
|
|
294b8d3c6e | ||
|
|
0958b9db8e | ||
|
|
1c8f8a00b8 | ||
|
|
eb387e16f4 | ||
|
|
706bbcf8a9 | ||
|
|
4f86cca306 | ||
|
|
9b796d0f27 | ||
|
|
fedd07e4a8 | ||
|
|
b8caab5f3d | ||
|
|
04b765a674 | ||
|
|
d7155f839f | ||
|
|
fb0d7139f2 | ||
|
|
9ab554af5b | ||
|
|
096e5e1fef | ||
|
|
03bc304ecf | ||
|
|
9a2212c86e | ||
|
|
d01f8f9252 | ||
|
|
f7e10ed53e | ||
|
|
bbd74e5a7e | ||
|
|
71dbe3e4c4 | ||
|
|
4d680b73dc | ||
|
|
7c69958c92 | ||
|
|
3027b4b694 | ||
|
|
4560620210 | ||
|
|
b3d9feb1f2 | ||
|
|
90df78c9e0 | ||
|
|
63889d3bea | ||
|
|
5379b89dbd | ||
|
|
69a978fe05 | ||
|
|
efeb66c852 | ||
|
|
a76914a4b1 | ||
|
|
302bf29b6a | ||
|
|
68b4d54f18 | ||
|
|
31ee576d6a | ||
|
|
9b988ee12d | ||
|
|
4e22dc4987 | ||
|
|
d3ddf55df1 | ||
|
|
80727aa4cc | ||
|
|
919bdf05fe | ||
|
|
abdb8266b6 | ||
|
|
31813c29af | ||
|
|
75b2406997 | ||
|
|
addf3d5331 | ||
|
|
76e61d4ef1 | ||
|
|
7d6a73ab27 | ||
|
|
fa04f0970e | ||
|
|
9c1688a39a | ||
|
|
4522418890 | ||
|
|
2cd0829a8d | ||
|
|
e4d8af0c97 | ||
|
|
5f2e60d751 | ||
|
|
31b1e34ae8 | ||
|
|
f11596fabc | ||
|
|
84b17765c2 | ||
|
|
5856d77371 | ||
|
|
1093c816d0 | ||
|
|
9eadf353d9 | ||
|
|
2eefc135e5 | ||
|
|
15907fcda0 | ||
|
|
560b57f812 | ||
|
|
d7391badf4 | ||
|
|
1cbae66bb3 | ||
|
|
c17eacec04 | ||
|
|
ad784a56ec | ||
|
|
3618983aaa | ||
|
|
4a056fe55a | ||
|
|
99095c0529 | ||
|
|
5b4eb65e68 | ||
|
|
39dc23e83b | ||
|
|
64cccda076 | ||
|
|
379adf3a8e | ||
|
|
a57b2a059a | ||
|
|
133fd3113b | ||
|
|
c0137227e6 | ||
|
|
df98c766e5 | ||
|
|
fabd6075ef | ||
|
|
c7000355fe | ||
|
|
8e34af5b5e | ||
|
|
cbd2417833 | ||
|
|
953804c429 | ||
|
|
84bdd0ef45 | ||
|
|
3dd3ed2602 | ||
|
|
b63590152a | ||
|
|
4b63847e04 | ||
|
|
a89307c5ba | ||
|
|
00e37224ed | ||
|
|
457362ba84 | ||
|
|
166818670e | ||
|
|
f201aac946 | ||
|
|
406c56e3d8 | ||
|
|
931fdf0bcd | ||
|
|
070afe57af | ||
|
|
037bd3109e | ||
|
|
78b73ba585 | ||
|
|
421043ed12 | ||
|
|
927dd827ce | ||
|
|
bb6b792d06 | ||
|
|
ffebefb65e | ||
|
|
2eb73644e9 | ||
|
|
0bb62bb0fd | ||
|
|
4d8a23c1fc | ||
|
|
e41f786c72 | ||
|
|
5b4ba02012 | ||
|
|
1c14389c7f | ||
|
|
78ed0495ce | ||
|
|
8083b2c754 | ||
|
|
2c914b9b8f | ||
|
|
a6c29a5061 | ||
|
|
3064d0c300 | ||
|
|
23591deb81 | ||
|
|
5fb8c7e65c | ||
|
|
c4a3d57499 | ||
|
|
7bec15b99f | ||
|
|
4184d6eef5 | ||
|
|
b9e00ab611 | ||
|
|
d256ecb6db | ||
|
|
cee0b795ee | ||
|
|
4474d4391b | ||
|
|
3f81fc98dd | ||
|
|
4208267966 | ||
|
|
c088039394 | ||
|
|
2c2c61920e | ||
|
|
b0803a4bc6 | ||
|
|
39c5cd4f84 | ||
|
|
69d27dfb4b | ||
|
|
130a84d2af | ||
|
|
d42cef891c | ||
|
|
9b69afe541 | ||
|
|
b60dd9d1fe | ||
|
|
94c5eab776 | ||
|
|
d4f6894e1b | ||
|
|
28191baa80 | ||
|
|
a9b0cfc519 | ||
|
|
051a7f3451 | ||
|
|
56452481e2 | ||
|
|
54afd377ee | ||
|
|
ddb87027f9 | ||
|
|
ef9016e363 | ||
|
|
e576f259e4 | ||
|
|
f5a38ab954 | ||
|
|
dfe08e3c96 | ||
|
|
9eb5f36ecc | ||
|
|
ece9c7f2d2 | ||
|
|
a6737b87fd | ||
|
|
ca5e9d872f | ||
|
|
304fc990a1 | ||
|
|
d10bbb73f7 | ||
|
|
2d97f6dd53 | ||
|
|
f8104137ce | ||
|
|
d78dd0c8d0 | ||
|
|
e11cc951de | ||
|
|
b97018932d | ||
|
|
67dc65ea91 | ||
|
|
4760d71a86 | ||
|
|
3df5c2835e | ||
|
|
f062b0f671 | ||
|
|
f1cb2cfa35 | ||
|
|
53680d538d | ||
|
|
5c6915f633 | ||
|
|
8312e21f00 | ||
|
|
239306e9a2 | ||
|
|
49072d6e02 | ||
|
|
fc67e372d2 | ||
|
|
0422854384 | ||
|
|
bfe1236d98 | ||
|
|
0a7eed686c | ||
|
|
cee0fde940 | ||
|
|
78569ee833 | ||
|
|
6c7ce3465e | ||
|
|
8928c3e7f1 | ||
|
|
113c0aa411 | ||
|
|
2430abed33 | ||
|
|
e6d1a4cccf | ||
|
|
2934a15902 | ||
|
|
f092f9045c | ||
|
|
ac8f4e69d6 | ||
|
|
0260c9119e | ||
|
|
1baa6be6de | ||
|
|
b082147c4d | ||
|
|
f4f08b9c99 | ||
|
|
c687c73edd | ||
|
|
0bcaff4214 | ||
|
|
5e8f899620 | ||
|
|
5c933a7faf | ||
|
|
8b2de15096 | ||
|
|
2a8bae187f | ||
|
|
26e2b4a5be | ||
|
|
d8a7bfd438 | ||
|
|
bcc125ceb6 | ||
|
|
59ffed85ba | ||
|
|
5cf94e5a15 | ||
|
|
2263961d4d | ||
|
|
ddc03cbccf | ||
|
|
1ae0fed83b | ||
|
|
81e056e79a | ||
|
|
3706cfe908 | ||
|
|
ca9b5ce11d | ||
|
|
4eed4ca3a1 | ||
|
|
9d4a8688c1 | ||
|
|
1d2d8cd38b | ||
|
|
5e9ba64db8 | ||
|
|
ca0aeb8e62 | ||
|
|
d87b34ab36 | ||
|
|
e2f1bafeef | ||
|
|
31a505768d | ||
|
|
9052930ebc | ||
|
|
2b6d44a043 | ||
|
|
288931ddc3 | ||
|
|
b5aceceef2 | ||
|
|
8ebe03a89d | ||
|
|
e5f045c375 | ||
|
|
55adc7e728 | ||
|
|
b687b106f1 | ||
|
|
c72b4d6e8a | ||
|
|
fcc8a941b0 | ||
|
|
e6b9805167 | ||
|
|
48bba4d581 | ||
|
|
9929962d54 | ||
|
|
149b7fc347 | ||
|
|
cc1d50a06c | ||
|
|
4a743ac2fb | ||
|
|
287672d3c1 | ||
|
|
f29dd8b927 | ||
|
|
45fc9603e3 | ||
|
|
9e7a2bf1b9 | ||
|
|
bdc8038e7e | ||
|
|
a1957a685d | ||
|
|
c97c4f878a | ||
|
|
05500bf759 | ||
|
|
70aba9d3ff | ||
|
|
6b11497cdc | ||
|
|
995a09a2a6 | ||
|
|
94d8d3217c | ||
|
|
37cfdf6fe2 | ||
|
|
48745a3bc5 | ||
|
|
3f39741d0a | ||
|
|
1800770c94 | ||
|
|
6f6a7b92e4 | ||
|
|
e65a223c91 | ||
|
|
9565aaf469 | ||
|
|
5ffc6e0558 | ||
|
|
09c8a41294 | ||
|
|
bfadd884c9 | ||
|
|
a46c11b088 | ||
|
|
7002ff3ec3 | ||
|
|
9f2642a714 | ||
|
|
3ef69c7fe9 | ||
|
|
499206f0ea | ||
|
|
d9cf326879 | ||
|
|
5761e475ee | ||
|
|
8223b09f60 | ||
|
|
a002e5ff0a | ||
|
|
6e826d5193 | ||
|
|
111653833f | ||
|
|
3c9ca799a6 | ||
|
|
55eebb5fd2 | ||
|
|
60a90aa51c | ||
|
|
d2e4dac9ab | ||
|
|
579507a6d1 | ||
|
|
37f9bcf9cb | ||
|
|
c5a786ed2c | ||
|
|
53d1fdd8f1 | ||
|
|
78dd957717 | ||
|
|
42c08e6123 | ||
|
|
a0527fc53b | ||
|
|
1039df5077 | ||
|
|
9f291a6666 | ||
|
|
a5a510656f | ||
|
|
561fa8a95e | ||
|
|
70990002d8 | ||
|
|
b55d6539b5 | ||
|
|
96df56ca8e | ||
|
|
157565eaa0 | ||
|
|
fd78b7bbf8 | ||
|
|
6cddd04518 | ||
|
|
03ee62971e | ||
|
|
3193eb5106 | ||
|
|
69b056e121 | ||
|
|
fd813a002c | ||
|
|
b07608d438 | ||
|
|
683c003622 | ||
|
|
dab37e0fe2 | ||
|
|
223eb44f19 | ||
|
|
4dd53a732f | ||
|
|
fd7d05d003 | ||
|
|
6b84a89b6a | ||
|
|
ed21d88735 | ||
|
|
8539805691 | ||
|
|
a4f8c6d5b3 | ||
|
|
37661f3a86 | ||
|
|
961e0b5d28 | ||
|
|
5997e680d0 | ||
|
|
a1de0614d7 | ||
|
|
f22bc63fee | ||
|
|
51bd9fe40e | ||
|
|
a1e56518a5 | ||
|
|
277217353e | ||
|
|
1fe5aceded | ||
|
|
f52988b93c | ||
|
|
42d64b027e | ||
|
|
21c4e6caa6 | ||
|
|
9e97742a95 | ||
|
|
b2831ac2fd | ||
|
|
f9e6a02346 | ||
|
|
260c12756a | ||
|
|
6580f4922f | ||
|
|
92dae56ff8 | ||
|
|
c32f1dfc23 | ||
|
|
0e3491bd58 | ||
|
|
c7b2f9d1d2 | ||
|
|
87f497af0a | ||
|
|
2e9ff045e1 | ||
|
|
3145031c05 | ||
|
|
9c7d4171e8 | ||
|
|
f9fe2ee2d4 | ||
|
|
63c26c45ec | ||
|
|
1915bf1a61 | ||
|
|
87dcb9336f | ||
|
|
84744d429e | ||
|
|
2f9d5334ee | ||
|
|
84e6fb45e8 | ||
|
|
52e12baca2 | ||
|
|
3415da216f | ||
|
|
6664936529 | ||
|
|
6046d6c417 | ||
|
|
68de5228a8 | ||
|
|
7a388c73c5 | ||
|
|
cb01523677 | ||
|
|
879d0c601f | ||
|
|
30eb292b48 | ||
|
|
98c74879bf | ||
|
|
1e4bc7dc18 | ||
|
|
2798cadb78 | ||
|
|
67c3587c0b | ||
|
|
0663501d6f | ||
|
|
0a0008cf97 | ||
|
|
76d84bf6a5 | ||
|
|
1cb47f3c80 | ||
|
|
9f92f63194 | ||
|
|
61694013a5 | ||
|
|
df3ade896b | ||
|
|
68379802cd | ||
|
|
ddc9c394a2 | ||
|
|
0e783f0003 | ||
|
|
e1272dc2f9 | ||
|
|
ca22c1bdae | ||
|
|
bf7ae3a53e | ||
|
|
5b57405517 | ||
|
|
4d12410707 | ||
|
|
bd0de8fbaf | ||
|
|
8a4c0e9782 | ||
|
|
1557f82b11 | ||
|
|
d822b6bd1a | ||
|
|
b17803bb34 | ||
|
|
99d81868fc | ||
|
|
b3919fde95 | ||
|
|
0e533e1630 | ||
|
|
2c4cda1e0a | ||
|
|
26226e2094 | ||
|
|
44bb093438 | ||
|
|
5a860d87c7 | ||
|
|
c17667971c | ||
|
|
0d344605e1 | ||
|
|
1db74162e6 | ||
|
|
8a87981d94 | ||
|
|
d826d925db | ||
|
|
241367ec5c | ||
|
|
7bb506c5bb | ||
|
|
c09501ad9a | ||
|
|
68a89bbac8 | ||
|
|
cecdc64f51 | ||
|
|
c62cbbfa97 | ||
|
|
2ea51dd594 | ||
|
|
fb14f81f64 | ||
|
|
02077821d4 | ||
|
|
d38d046f7a | ||
|
|
adf01ec668 | ||
|
|
39ce8835f7 | ||
|
|
921b22ac31 | ||
|
|
b7e16b5989 | ||
|
|
717f0fcb4d | ||
|
|
49b3acea72 | ||
|
|
73e2ff6ff6 | ||
|
|
a1a5b25b91 | ||
|
|
3a14a63b0f | ||
|
|
6462393aaf | ||
|
|
a42a236961 | ||
|
|
30c6389ed9 | ||
|
|
d45676b478 | ||
|
|
41094ac22e | ||
|
|
e20768d257 | ||
|
|
9d1674db99 | ||
|
|
36554c3375 | ||
|
|
45bb27d6db | ||
|
|
c6ff7531fb | ||
|
|
d80aa0b0bd | ||
|
|
744f9ebc09 | ||
|
|
6cb0443227 | ||
|
|
3784ea768f | ||
|
|
42f51591df | ||
|
|
d631030608 | ||
|
|
762930516a | ||
|
|
c0f85de17f | ||
|
|
e010004f1f | ||
|
|
85117ecbdd | ||
|
|
6e1cd077a9 | ||
|
|
e972f4f4dd | ||
|
|
cabd7409e5 | ||
|
|
59cdf77784 | ||
|
|
1da611fb75 | ||
|
|
542dd33169 | ||
|
|
a1a842b07f | ||
|
|
8424c18e9f | ||
|
|
1f402b1b56 | ||
|
|
ec007ac8d0 | ||
|
|
4a3c145c72 | ||
|
|
eb0fa8c7dc | ||
|
|
8452d2ccfe | ||
|
|
fff59f547d | ||
|
|
0c86dd5763 | ||
|
|
a0edcb58af | ||
|
|
97b38d9e1b | ||
|
|
8554f32086 | ||
|
|
cfd0fd6cc8 | ||
|
|
93c47feb7c | ||
|
|
83f874db93 | ||
|
|
25298c70f7 | ||
|
|
25bd5f5e85 | ||
|
|
2901e94ebc | ||
|
|
1fe3e04ce3 | ||
|
|
8f27a5a92b | ||
|
|
a346ce7640 | ||
|
|
1f6a1241f4 | ||
|
|
9efb8a341d | ||
|
|
71180504e9 | ||
|
|
def2d3f19b | ||
|
|
83dfc6b633 | ||
|
|
e026f1bac6 | ||
|
|
aa8f5848d1 | ||
|
|
28fbae4791 | ||
|
|
88bd0996f5 | ||
|
|
350e373e3f | ||
|
|
68833e10d1 | ||
|
|
d191ae4aba | ||
|
|
7b9fa8fbe5 | ||
|
|
46a1525668 | ||
|
|
ee9edb0b19 | ||
|
|
ae8df002af | ||
|
|
12fdc37599 | ||
|
|
caadc73e1b | ||
|
|
95c374bbcc | ||
|
|
01a1b1a5e6 | ||
|
|
a85894e159 | ||
|
|
b632b2a478 | ||
|
|
5c1b8986c6 | ||
|
|
8c8fe633a5 | ||
|
|
8da63cf95a | ||
|
|
f4e881ad30 | ||
|
|
7aa36133de | ||
|
|
5c58bd2092 | ||
|
|
2af021129f | ||
|
|
2c05426db1 | ||
|
|
41cc153bff | ||
|
|
c6c7d99fd2 | ||
|
|
e4ab71abf3 | ||
|
|
6f681743ca | ||
|
|
83a4b37bcf | ||
|
|
000e11e270 | ||
|
|
14534fbcf8 | ||
|
|
07648d9ea6 | ||
|
|
83076af25a | ||
|
|
f2c77ffa08 | ||
|
|
f5f3bc4e60 | ||
|
|
107a96c1bc | ||
|
|
8879866b32 | ||
|
|
94443afbfc | ||
|
|
9ffb76798d | ||
|
|
786944098a | ||
|
|
2ea1f03b79 | ||
|
|
25b9b24f77 | ||
|
|
150c53af0f | ||
|
|
cb4af8fe83 | ||
|
|
7ca463bf75 | ||
|
|
539a1767a3 | ||
|
|
d331d59a9f | ||
|
|
223b7daa1d | ||
|
|
a54e636364 | ||
|
|
5c740ff41e | ||
|
|
759e75091a | ||
|
|
6719fc89a6 | ||
|
|
7f76883b98 | ||
|
|
063f42be81 | ||
|
|
66c84f769b | ||
|
|
38c086008d | ||
|
|
88cd333839 | ||
|
|
c4e165067d | ||
|
|
c701ab4368 | ||
|
|
57394a03e0 | ||
|
|
5f5266ba45 | ||
|
|
036cb229a3 | ||
|
|
6c1c857024 | ||
|
|
37897eb922 | ||
|
|
69ce2a1de6 | ||
|
|
2deb0f3e46 | ||
|
|
7c4f3d28ce | ||
|
|
1da4232138 | ||
|
|
698dda2310 | ||
|
|
36e83b42ce | ||
|
|
5f247a6e16 | ||
|
|
ea9e608288 | ||
|
|
b4c04ed00a | ||
|
|
e3751f6cd9 | ||
|
|
784822a5c2 | ||
|
|
e245b27c97 | ||
|
|
344030cbe4 | ||
|
|
6c300288f9 | ||
|
|
39e1de4d13 | ||
|
|
837046218e | ||
|
|
db6a32ac33 | ||
|
|
6ed137dc9c | ||
|
|
45e0cfae01 | ||
|
|
363a3100c0 | ||
|
|
854403af81 | ||
|
|
ebafb24099 | ||
|
|
820323bc1e | ||
|
|
c9d6ce3b63 | ||
|
|
8be32e4661 | ||
|
|
f6f28042bd | ||
|
|
6bd578ccbe | ||
|
|
03a6be28c0 | ||
|
|
3a55360572 | ||
|
|
8e92d25b75 | ||
|
|
798ec3eb9c | ||
|
|
c0cc91fd0a | ||
|
|
c4570750ea | ||
|
|
fbc8d30b67 | ||
|
|
65058df3da | ||
|
|
40e6a5c515 | ||
|
|
a886f6e7e1 | ||
|
|
eab49dbfa3 | ||
|
|
c651d28cc0 | ||
|
|
e774011d71 | ||
|
|
af3dfd39b0 | ||
|
|
0976e124e8 | ||
|
|
50ad3a8bf5 | ||
|
|
92c794f03b | ||
|
|
385bdfb869 | ||
|
|
80feb1087c | ||
|
|
bee4f0578d | ||
|
|
c3694c4ad1 | ||
|
|
541a254c60 | ||
|
|
f731e3dc1b | ||
|
|
41c3eacb6f | ||
|
|
f73db1a572 | ||
|
|
5f8391f9f1 | ||
|
|
7e194f1a26 | ||
|
|
d19facfb43 | ||
|
|
8029412fb7 | ||
|
|
f40b679653 | ||
|
|
72dcb9b94c | ||
|
|
f32f42678c | ||
|
|
b4b55289d6 | ||
|
|
02ae12c555 | ||
|
|
bcb71ae368 | ||
|
|
98012f82aa | ||
|
|
2ee1cb81dd | ||
|
|
880be6f602 | ||
|
|
139e28988d | ||
|
|
f15c07653c | ||
|
|
1d46800888 | ||
|
|
875be67a7e | ||
|
|
c660ea858b | ||
|
|
5f8d3b9e4b | ||
|
|
a4bad8fdbc | ||
|
|
15b934eb2a | ||
|
|
91fbe6f108 | ||
|
|
5e7ce63ed1 | ||
|
|
2ccf108534 | ||
|
|
b46f159ff2 | ||
|
|
67807908ca | ||
|
|
7f7f6c3b51 | ||
|
|
5ed45b6806 | ||
|
|
ec61ad3667 | ||
|
|
5888913052 | ||
|
|
6f9a89dcf2 | ||
|
|
babb5480ce | ||
|
|
a749367300 | ||
|
|
350db223d3 | ||
|
|
22f11958e9 | ||
|
|
ad86bb5faa | ||
|
|
08d0946b78 | ||
|
|
bff1b2a3bf | ||
|
|
badfcb6e3f | ||
|
|
4fcf460447 | ||
|
|
3debd3ae12 | ||
|
|
a02a9aac8f | ||
|
|
345efed473 | ||
|
|
1d10383924 | ||
|
|
f39aa181cc | ||
|
|
986754bde7 | ||
|
|
edc9d23566 | ||
|
|
e1144d7a18 | ||
|
|
95e1cd9ea8 | ||
|
|
8640b44e02 | ||
|
|
0a07762f6b | ||
|
|
b9bc5b5c60 | ||
|
|
621d1d93db | ||
|
|
82ed6eac13 | ||
|
|
abec4bd760 | ||
|
|
d71b2c1ded | ||
|
|
4dbe71cba8 | ||
|
|
705c88f193 | ||
|
|
c6f026ee68 | ||
|
|
bb4a155c73 | ||
|
|
c3755b82a4 | ||
|
|
1bada25a79 | ||
|
|
253f635f56 | ||
|
|
2ab97aaa49 | ||
|
|
f1547c14e0 | ||
|
|
9a9e93da83 | ||
|
|
24d5e59c32 | ||
|
|
2e791c762b | ||
|
|
29ccbfe140 | ||
|
|
0c12f232ca | ||
|
|
193f47ebb1 | ||
|
|
28815db7cc | ||
|
|
6f515b220e | ||
|
|
de644c5437 | ||
|
|
cd8e31d85f | ||
|
|
831c24de51 | ||
|
|
074881228d | ||
|
|
76f96ddbb6 | ||
|
|
50c9988018 | ||
|
|
a9f49ab9ab | ||
|
|
d46e41533d | ||
|
|
be1403cdc2 | ||
|
|
beafbd9768 | ||
|
|
6121677aa1 | ||
|
|
2ecca529d1 | ||
|
|
e2727f10ba | ||
|
|
2af7dcbda2 | ||
|
|
6ca7a802bf | ||
|
|
d29e375f72 | ||
|
|
a8bcc760b4 | ||
|
|
3f6edc39cf | ||
|
|
db5468afcf | ||
|
|
61a717db14 | ||
|
|
99b03b4632 | ||
|
|
e66aac8ab7 | ||
|
|
a751db5f2b | ||
|
|
85543db094 | ||
|
|
4a65e5e723 | ||
|
|
a588f61a8a | ||
|
|
9802ba6621 | ||
|
|
77e718c61f | ||
|
|
ae3b768de9 | ||
|
|
839003467e | ||
|
|
87f54ae0ff | ||
|
|
82818dab3c | ||
|
|
3b127f663b | ||
|
|
33c9e9da0a | ||
|
|
42e911c78f | ||
|
|
05c72980fc | ||
|
|
b62a2d6a3c | ||
|
|
6b5a3dedd9 | ||
|
|
955fc3aa35 | ||
|
|
af09d7e063 | ||
|
|
7ee3dbd615 | ||
|
|
de189b67a2 | ||
|
|
2dc4e2a04c | ||
|
|
c925b1d135 | ||
|
|
4bc8bfc23e | ||
|
|
58ce7d4bb8 | ||
|
|
2d812deb84 | ||
|
|
76160505f7 | ||
|
|
74d84aafb5 | ||
|
|
b59a347ad7 | ||
|
|
49516cbbca | ||
|
|
35081f922a | ||
|
|
e3adf823b3 | ||
|
|
b96609cb51 | ||
|
|
c659b1aa18 | ||
|
|
c753f0d206 | ||
|
|
15944feea1 | ||
|
|
f9ea013b60 | ||
|
|
0b42db11bd | ||
|
|
2e4c3c9a17 | ||
|
|
59a66f87c3 | ||
|
|
f4c22ce932 | ||
|
|
0c2dcf26f2 | ||
|
|
acc6ad59ba | ||
|
|
bfa46b7f54 | ||
|
|
9a171a5928 | ||
|
|
2a4bd85f53 | ||
|
|
4b472bb461 | ||
|
|
d9447de492 | ||
|
|
d6d4a1a983 | ||
|
|
1d4dff9e42 | ||
|
|
f3c0c1bb88 | ||
|
|
42b1f81b8e | ||
|
|
cc6ebff48e | ||
|
|
8393ba56d6 | ||
|
|
cd4c8b5ce4 | ||
|
|
819133ee45 | ||
|
|
ee9b1caaa4 | ||
|
|
85c4184ea5 | ||
|
|
ad71ca4cc8 | ||
|
|
eb0f6eb953 | ||
|
|
dcd477f2b6 | ||
|
|
98a7058794 | ||
|
|
7135867119 | ||
|
|
e0da81a44e | ||
|
|
3e69113f48 | ||
|
|
8de94a3714 | ||
|
|
cde4670cbd | ||
|
|
fbf71218f1 | ||
|
|
283d4fa57c | ||
|
|
2a7d7b54d3 | ||
|
|
760de9915b | ||
|
|
0be0f13acf | ||
|
|
0d04ee440d | ||
|
|
cfff229977 | ||
|
|
b44bccec6a | ||
|
|
ac99735b5b | ||
|
|
5bc8f046b2 | ||
|
|
d8cf4f83d0 | ||
|
|
4d1ca4bb76 | ||
|
|
ab6f26ff4d | ||
|
|
f5e8503fa5 | ||
|
|
c31c04d3db | ||
|
|
0b5e0df35d | ||
|
|
fc24f039a8 | ||
|
|
e182251fbc | ||
|
|
1d84af573d | ||
|
|
b2f8fe3593 | ||
|
|
5f068ec46a | ||
|
|
263583ebcc | ||
|
|
c1d39a5f57 | ||
|
|
29463b9e52 | ||
|
|
62beb3aaf4 | ||
|
|
f765a195e2 | ||
|
|
1699289162 | ||
|
|
1be8d07f85 | ||
|
|
c6220bf836 | ||
|
|
5cab4f8b35 | ||
|
|
b6375686ff | ||
|
|
93168069db | ||
|
|
d0af2033e9 | ||
|
|
c11ac928ba | ||
|
|
237ffcf796 | ||
|
|
343ecca6ba | ||
|
|
72b828ef0d | ||
|
|
cbcb7962ce | ||
|
|
809ccc2479 | ||
|
|
bbf4b58306 | ||
|
|
b1acc08c58 | ||
|
|
206d2008f3 | ||
|
|
d71be88f6a | ||
|
|
d608d97ab7 | ||
|
|
ed9dbd9fae | ||
|
|
3636ebda3c | ||
|
|
430f2159ff | ||
|
|
51671e9391 | ||
|
|
5f201e21ee | ||
|
|
4e82073bfc | ||
|
|
4e7e7f2dd5 | ||
|
|
2503d9698c | ||
|
|
ce5ccf8a4b | ||
|
|
f180b2731a | ||
|
|
649b46bdfe | ||
|
|
548396b3e5 | ||
|
|
2f20e6da65 | ||
|
|
95c2622b7f | ||
|
|
b5171dfe5d | ||
|
|
0946958acf | ||
|
|
c3c29945b2 | ||
|
|
5daf7aa98f | ||
|
|
5bf5b5bca4 | ||
|
|
0518aaedc9 | ||
|
|
23f8203a22 | ||
|
|
a5fe8478ae | ||
|
|
1bd15a0d2b | ||
|
|
0a467291f9 | ||
|
|
1e83145c0c | ||
|
|
7ff36afd35 | ||
|
|
51fbb2c313 | ||
|
|
0e3349f953 | ||
|
|
1de58349c5 | ||
|
|
8d61ab2af2 | ||
|
|
1fa13163e4 | ||
|
|
93a9ba8b6f | ||
|
|
b7ad408773 | ||
|
|
c3dc51826f | ||
|
|
97467f9e30 | ||
|
|
68e44fd354 | ||
|
|
8361369008 | ||
|
|
4577f2f0a5 | ||
|
|
151fe43551 | ||
|
|
ce2b87343b | ||
|
|
7e662c50d4 | ||
|
|
091f0d5ee9 | ||
|
|
467e40fa81 | ||
|
|
a2a9b6252a | ||
|
|
4feeaac7d1 | ||
|
|
e774fecb77 | ||
|
|
868d82a22b | ||
|
|
6c8f7a0147 | ||
|
|
46b0a790d4 | ||
|
|
b49d65295f | ||
|
|
7d124e6a83 | ||
|
|
65b83a36a7 | ||
|
|
91f775f3f0 | ||
|
|
6f4ec98bc3 | ||
|
|
f8f6117ea9 | ||
|
|
880900d306 | ||
|
|
979ea92754 | ||
|
|
bd2c04a0ec | ||
|
|
cf6eae7bab | ||
|
|
2ea049b5a5 | ||
|
|
c2e851b3a5 | ||
|
|
dd5868f9ba | ||
|
|
ba5b367ae8 | ||
|
|
85266abd71 | ||
|
|
e34477a497 | ||
|
|
0d5d94f56e | ||
|
|
3dd3bf6e2b | ||
|
|
cd6c93cd9e | ||
|
|
c9e9df95ac | ||
|
|
f2d193edcf | ||
|
|
995ae51bf4 | ||
|
|
9fe13f7a6b | ||
|
|
b906217504 | ||
|
|
4914620178 | ||
|
|
2cbde89084 | ||
|
|
f81cf360bc | ||
|
|
d793ef85df | ||
|
|
9fa473a57d | ||
|
|
9d69ff1f91 | ||
|
|
d301848848 | ||
|
|
2f2ae2bc89 | ||
|
|
009dd103ae | ||
|
|
a639634769 | ||
|
|
92d68b70d3 | ||
|
|
426fcf3afc | ||
|
|
01e4a5148d | ||
|
|
0cb6c37f14 | ||
|
|
97b237712c | ||
|
|
02274601b3 | ||
|
|
e5326d1bd2 | ||
|
|
7ac533a4d1 | ||
|
|
da0b77e09b | ||
|
|
ef420e41fe | ||
|
|
8f54da5fd3 | ||
|
|
910dcfafdd | ||
|
|
5d00c00826 | ||
|
|
d8343cea2a | ||
|
|
66b08c0b2f | ||
|
|
31ffdd8c53 | ||
|
|
cbca0692ed | ||
|
|
8e32d71c07 | ||
|
|
5f7e09268c | ||
|
|
bf743fec17 | ||
|
|
83afc0622c | ||
|
|
f1b5948fae | ||
|
|
87bcb465c6 | ||
|
|
db37d37ed9 | ||
|
|
c43ddaec4f | ||
|
|
419dfe0544 | ||
|
|
ef3247c233 | ||
|
|
99f9407c24 | ||
|
|
9ee3a173d0 | ||
|
|
d31bd97d59 | ||
|
|
93c0d5a268 | ||
|
|
6326f72ed4 | ||
|
|
a3bbe68d56 | ||
|
|
3be5a6036b | ||
|
|
b84a462798 | ||
|
|
ff7aeb7808 | ||
|
|
e31a2c0733 | ||
|
|
2704a65f57 | ||
|
|
580d177951 | ||
|
|
99d7434671 | ||
|
|
11708486d8 | ||
|
|
b0af54d33e | ||
|
|
951a1fed94 | ||
|
|
a70c3bf5de | ||
|
|
c82fd94c6c | ||
|
|
c01686d252 | ||
|
|
7f614401a6 | ||
|
|
c507e816c2 | ||
|
|
b884e0c0c0 | ||
|
|
f665180d11 | ||
|
|
7609fdc576 | ||
|
|
b52ee6f1f6 | ||
|
|
183af4ece6 | ||
|
|
3d35e4f8ec | ||
|
|
2d54d59add | ||
|
|
d3d5a436ea | ||
|
|
a4c74ef872 | ||
|
|
8d3e3e6c5b | ||
|
|
c5341a2711 | ||
|
|
358e0d445b | ||
|
|
18a6403852 | ||
|
|
ac38ebbf29 | ||
|
|
ec45090358 | ||
|
|
a12acc0d24 | ||
|
|
1837001e75 | ||
|
|
9554b5dd56 | ||
|
|
fa761a129d | ||
|
|
4c7b151851 | ||
|
|
1518a57284 | ||
|
|
19febdad06 | ||
|
|
19391b71cc | ||
|
|
34202933da | ||
|
|
388f46b577 | ||
|
|
a4d6722b26 | ||
|
|
e7665ee7dd | ||
|
|
cff168e002 | ||
|
|
012f1b4f05 | ||
|
|
19d9349b0b | ||
|
|
c9508298b4 | ||
|
|
70b8772bb4 | ||
|
|
503459798a | ||
|
|
2783da4a22 | ||
|
|
79a9254894 | ||
|
|
f2e8785cb0 | ||
|
|
8d6d8067fd | ||
|
|
5bd724e651 | ||
|
|
432a73e039 | ||
|
|
bf0213ca47 | ||
|
|
4787565e14 | ||
|
|
540717b295 | ||
|
|
eb59f8b72c | ||
|
|
5c046180a1 | ||
|
|
98dde32dc0 | ||
|
|
e93f780268 | ||
|
|
86e3c18c33 | ||
|
|
5cfb496700 | ||
|
|
7979dec5b0 | ||
|
|
6ced837360 | ||
|
|
818412ba26 | ||
|
|
b1ea081fc3 | ||
|
|
b8aa5f8f80 | ||
|
|
3bd3ba4faf | ||
|
|
bbf7153acd | ||
|
|
8a73849531 | ||
|
|
c567198967 | ||
|
|
62e0e6a067 | ||
|
|
2165c68938 | ||
|
|
02b478dfbc | ||
|
|
8cd533304c | ||
|
|
cab59587e8 | ||
|
|
3f278382a1 | ||
|
|
8341055f3e | ||
|
|
a2d605be0b | ||
|
|
cfddcb7a93 | ||
|
|
0f01ba4c46 | ||
|
|
a1bfb237e6 | ||
|
|
534fa65ecf | ||
|
|
28bb64aae8 | ||
|
|
445c28fe97 | ||
|
|
d566bb2a23 | ||
|
|
6a9e425308 | ||
|
|
d870188d21 | ||
|
|
27d485a940 | ||
|
|
6166c95325 | ||
|
|
a5e424512c | ||
|
|
84c3592fbe | ||
|
|
08291aed0c | ||
|
|
613e215c73 | ||
|
|
5628bfb20c | ||
|
|
7f2bbdceb9 | ||
|
|
88a714327a | ||
|
|
ff4cf51494 | ||
|
|
6d8695127f | ||
|
|
a0ec633c46 | ||
|
|
bd96a73580 | ||
|
|
5e9a3a424e | ||
|
|
b7a9465963 | ||
|
|
3e784d57e8 | ||
|
|
2e34d48e97 | ||
|
|
e0012811ae | ||
|
|
4e222f18cd | ||
|
|
f37f3cb3cf | ||
|
|
4e2e9aa56c | ||
|
|
cb6e8a7d6a | ||
|
|
643b1647c4 | ||
|
|
921fa3bab8 | ||
|
|
f0de7d6386 | ||
|
|
b3d8981a22 | ||
|
|
eff4ac3e4a | ||
|
|
59f7e4d2dc | ||
|
|
d77e252873 | ||
|
|
2dcffe7fa4 | ||
|
|
286fe4db8c | ||
|
|
797e3d81da | ||
|
|
30e3956ea7 | ||
|
|
1523b9534f | ||
|
|
51ed3e63e9 | ||
|
|
5565544ba6 | ||
|
|
b89f0cfa4c | ||
|
|
390811f414 | ||
|
|
3c7a3a3d83 | ||
|
|
7fac25edb0 | ||
|
|
f029e4763f | ||
|
|
472608b879 | ||
|
|
1e8aea033c | ||
|
|
625d65d4b4 | ||
|
|
bc5de8df6b | ||
|
|
380e420cdd | ||
|
|
9023f5f0db | ||
|
|
8e1db43431 | ||
|
|
3c66da4d82 | ||
|
|
1addae1993 | ||
|
|
b490085214 | ||
|
|
4c91bab00e | ||
|
|
6d31124d3a | ||
|
|
e87d129b09 | ||
|
|
d6448183d7 | ||
|
|
544a923e32 | ||
|
|
51a67029cf | ||
|
|
7518b2ef21 | ||
|
|
d20501739f | ||
|
|
fda746ff93 | ||
|
|
d69ffa9b8b | ||
|
|
b39b9c9f55 | ||
|
|
d428e0d19d | ||
|
|
917a6c28e5 | ||
|
|
ba21879059 | ||
|
|
e6560f348e | ||
|
|
c02eadab3f | ||
|
|
8f1d00292b | ||
|
|
6095f40baf | ||
|
|
c4b96c3c53 | ||
|
|
9a083d5506 | ||
|
|
97fad356b8 | ||
|
|
cc4713d379 | ||
|
|
530e4ce776 | ||
|
|
6d65867b26 | ||
|
|
3fcac07120 | ||
|
|
6fca3b421d | ||
|
|
24e37d2dea | ||
|
|
5d4bc5c8fe | ||
|
|
5f5b901bca | ||
|
|
8032e2c369 | ||
|
|
302ce51efe | ||
|
|
7bfee7e377 | ||
|
|
c1ddad2d25 | ||
|
|
ae70344fbc | ||
|
|
14a1925de0 | ||
|
|
f37ef105c5 | ||
|
|
b1ec8a5a42 | ||
|
|
73d04e33e9 | ||
|
|
335695bd0e | ||
|
|
e17ba1c143 | ||
|
|
2ff3d17f67 | ||
|
|
a0c17ae0a4 | ||
|
|
004fa7aea4 | ||
|
|
c8a3db114c | ||
|
|
f96a653d05 | ||
|
|
71c26a829e | ||
|
|
c76e66f8d2 | ||
|
|
de52ce956a | ||
|
|
7367b22e03 | ||
|
|
71e517108d | ||
|
|
25997647f2 | ||
|
|
39a5d4c839 | ||
|
|
b65a62096f | ||
|
|
8a52fdab57 | ||
|
|
ee19a2789c | ||
|
|
2bd9043657 | ||
|
|
7887d7b5a5 | ||
|
|
f0181d98fd | ||
|
|
0ab0c6cfba | ||
|
|
eaa0dae305 | ||
|
|
46ff4dc3d3 | ||
|
|
301fe869c7 | ||
|
|
768ae342c3 | ||
|
|
346ef1eec2 | ||
|
|
6a3250cad2 | ||
|
|
ee244071fa | ||
|
|
00e62919c5 | ||
|
|
47a0026b60 | ||
|
|
f2f59544d2 | ||
|
|
15ae9996bb | ||
|
|
757726bb91 | ||
|
|
75817bb27b | ||
|
|
eb257d9295 | ||
|
|
baf84b98c4 | ||
|
|
b12eb45bb7 | ||
|
|
f0182f9a66 | ||
|
|
7b0775d887 | ||
|
|
36514bd95f | ||
|
|
c207632e49 | ||
|
|
795ae50ecd | ||
|
|
672e3f9533 | ||
|
|
6d31d1e0d0 | ||
|
|
f71eb171cf | ||
|
|
6e386df535 | ||
|
|
03e72781aa | ||
|
|
89d5e5637c | ||
|
|
56836561f4 | ||
|
|
4bb8d15228 | ||
|
|
258b73409c | ||
|
|
f6652e9a50 | ||
|
|
b32f808fd4 | ||
|
|
bd6ea17bdc | ||
|
|
15dcf07b3b | ||
|
|
8386b427ea | ||
|
|
19eb1f00d1 | ||
|
|
ce98276322 | ||
|
|
62489f42f1 | ||
|
|
6d253c0b8f | ||
|
|
31f8c065db | ||
|
|
6124eb844e | ||
|
|
16e6d0d305 | ||
|
|
55fdf26898 | ||
|
|
15264c6c63 | ||
|
|
6fc9afb175 | ||
|
|
1d70865f09 | ||
|
|
e605ed1d09 | ||
|
|
fa243afbab | ||
|
|
d91e989abb | ||
|
|
84b33d2ddb | ||
|
|
90794c302a | ||
|
|
c9194301a0 | ||
|
|
0aac47ca59 | ||
|
|
9682061472 | ||
|
|
a75d78bd7e | ||
|
|
9ad5933120 | ||
|
|
8deee6afbc | ||
|
|
9ce7f515bc | ||
|
|
1cb047687f | ||
|
|
5c8ea74cb9 | ||
|
|
75a3abc225 | ||
|
|
8e3dab7e11 | ||
|
|
e16cb9a00e | ||
|
|
c456764342 | ||
|
|
545c1d387c | ||
|
|
aff999cf69 | ||
|
|
85cbe285f0 | ||
|
|
670bcc1818 | ||
|
|
41e5be0673 | ||
|
|
2c3b3eafbe | ||
|
|
ce8626150e | ||
|
|
7b1214849a | ||
|
|
427fa039ba | ||
|
|
49cfc3424b | ||
|
|
080459e7f4 | ||
|
|
17a58103e2 | ||
|
|
8e89418f45 | ||
|
|
e8698a9c0c | ||
|
|
65a84b9f64 | ||
|
|
5bfd4c7bf8 | ||
|
|
334f648eaa | ||
|
|
4ffbd3765b | ||
|
|
8edffd32c8 | ||
|
|
2da4a5e6bc | ||
|
|
cde72300a5 | ||
|
|
418f2e69a8 | ||
|
|
50bac01d89 | ||
|
|
815c99b6e4 | ||
|
|
399ddbd74a | ||
|
|
1d0deb5ffe | ||
|
|
46aecb3748 | ||
|
|
5c263ff84c | ||
|
|
e397fe105e | ||
|
|
1aebca3740 | ||
|
|
c4fef0256e | ||
|
|
06ee41957e | ||
|
|
781c1df5d0 | ||
|
|
7e89247bf4 | ||
|
|
d2156c86eb | ||
|
|
f5eeb2024e | ||
|
|
05eb1641f2 | ||
|
|
98d8ad7484 | ||
|
|
3077de3637 | ||
|
|
defb57178f | ||
|
|
a5ac81b593 | ||
|
|
506648bd6b | ||
|
|
91f0730373 | ||
|
|
c6fb098703 | ||
|
|
d989dea64a | ||
|
|
9a7d83989b | ||
|
|
8a5c8ab91c | ||
|
|
3c84e6848b | ||
|
|
183b5d4def | ||
|
|
53ab390e72 | ||
|
|
fbaa84e691 | ||
|
|
e40a26be19 | ||
|
|
5269e54f02 | ||
|
|
bb728ea186 | ||
|
|
d4b7410e3e | ||
|
|
e1a5736583 | ||
|
|
22710d9b44 | ||
|
|
22baaf228a | ||
|
|
55ee181092 | ||
|
|
2ac30e7bde | ||
|
|
45e2fd9204 | ||
|
|
fd71fc4fc9 | ||
|
|
b2efa85a3f | ||
|
|
45930ecbf3 | ||
|
|
b20deb0752 | ||
|
|
0fbe94eb41 | ||
|
|
9521b0021b | ||
|
|
5ed3f5f1a4 | ||
|
|
3b5367c5b7 | ||
|
|
1222bcbf6e | ||
|
|
c1604c4b38 | ||
|
|
7f1e907616 | ||
|
|
b68270ded1 | ||
|
|
05eff696d3 | ||
|
|
4587a1e64e | ||
|
|
13c0e6f5ef | ||
|
|
4211d51f07 | ||
|
|
283f5236a5 | ||
|
|
4bb41bc267 | ||
|
|
b2738fdd5b | ||
|
|
f254d44030 | ||
|
|
fb100e05f2 | ||
|
|
b5612ec622 | ||
|
|
6b48784709 | ||
|
|
5e88afe978 | ||
|
|
329953ebc3 | ||
|
|
9b572d2d47 | ||
|
|
56b2c009cd | ||
|
|
330d14941f | ||
|
|
8d76586dec | ||
|
|
642371996a | ||
|
|
3a2e8f38df | ||
|
|
8350dc2c68 | ||
|
|
13bb1ae028 | ||
|
|
349bb810f0 | ||
|
|
7985f5114c | ||
|
|
42b9932bd0 | ||
|
|
3096e94616 | ||
|
|
aec43f0bee | ||
|
|
087f252909 | ||
|
|
4f013a2960 | ||
|
|
156f66ef62 | ||
|
|
3661f51bcb | ||
|
|
147353a177 | ||
|
|
76ff56a4e3 | ||
|
|
2471306fc4 | ||
|
|
1655055f61 | ||
|
|
2c481113ad | ||
|
|
a9430bb25e | ||
|
|
e0f56282de | ||
|
|
866f052e34 | ||
|
|
5c6b5374af | ||
|
|
f2657ae450 | ||
|
|
9a60050e93 | ||
|
|
aa7e745b43 | ||
|
|
f3bb434b27 | ||
|
|
6440a011bc | ||
|
|
f88bea5caf | ||
|
|
c14a4f274f | ||
|
|
6a63a92a1f | ||
|
|
b2576cd8bb | ||
|
|
8cb20c5d19 | ||
|
|
4a29c268fd | ||
|
|
1b4d10b58c | ||
|
|
41f07bfed0 | ||
|
|
dacadcdf2f | ||
|
|
267ff7d196 | ||
|
|
80b24f8055 | ||
|
|
2da3e15aaa | ||
|
|
6305d8d61e | ||
|
|
9495b8e3e0 | ||
|
|
29ef99d2d1 | ||
|
|
6d4039cc85 | ||
|
|
8da5817f8f | ||
|
|
4cf1b6068f | ||
|
|
c5e6013d75 | ||
|
|
0bdeb8d411 | ||
|
|
6bb945f6c8 | ||
|
|
1295b46a49 | ||
|
|
149940ffda | ||
|
|
70ad09f6ef | ||
|
|
abb005e6e2 | ||
|
|
079ed2c7a9 | ||
|
|
ad8e800aa5 | ||
|
|
6c750b19b3 | ||
|
|
c0f1738bb9 | ||
|
|
f160c39814 | ||
|
|
a5ff4aca80 | ||
|
|
446977d126 | ||
|
|
90c4322fc5 | ||
|
|
3b83d6d302 | ||
|
|
7b7a977d11 | ||
|
|
cc9b6fa5a4 | ||
|
|
a3cd81c1bb | ||
|
|
3c11e759a2 | ||
|
|
ed317360ef | ||
|
|
f392493245 | ||
|
|
b03162747c | ||
|
|
e0add8003d | ||
|
|
678c8a5cd6 | ||
|
|
14d4b3fe7a | ||
|
|
a0d54df522 | ||
|
|
3f521cc7a0 | ||
|
|
04ca7f4a2b | ||
|
|
e447ffc8b2 | ||
|
|
aba0a09816 | ||
|
|
305942c78b | ||
|
|
90d27bf5f6 | ||
|
|
0346da2fa0 | ||
|
|
7c766e66ad | ||
|
|
8440d263cd | ||
|
|
e23e2ac327 | ||
|
|
6e28a8e694 | ||
|
|
5933db386a | ||
|
|
aea421cc8e | ||
|
|
cdd6598e65 | ||
|
|
a11286bbc5 | ||
|
|
798fa11c57 | ||
|
|
c2cba0d4ae | ||
|
|
be1842f4e9 | ||
|
|
c8c22cf6a0 | ||
|
|
b42c9defb1 | ||
|
|
bed7a4f92e | ||
|
|
553536f9cb | ||
|
|
b03ca5fcf4 | ||
|
|
d6d06d243c | ||
|
|
8ea0766773 | ||
|
|
e548ada1e9 | ||
|
|
b18b0fdf28 | ||
|
|
806cefb0c6 | ||
|
|
f33027f24d | ||
|
|
b07aeb892a | ||
|
|
e525f95f22 | ||
|
|
1c869450c1 | ||
|
|
7082102631 | ||
|
|
10040f82e0 | ||
|
|
2b567e51ff | ||
|
|
576513a6d0 | ||
|
|
25382d471d | ||
|
|
c4bd50c04c | ||
|
|
1779ee42c2 | ||
|
|
95e00e0edf | ||
|
|
6dd3094802 | ||
|
|
9060eadfe7 | ||
|
|
d4793cc6b6 | ||
|
|
c5b6216032 | ||
|
|
ee34bd724f | ||
|
|
59847c964c | ||
|
|
d22a2c7961 | ||
|
|
f037a42309 | ||
|
|
fbb64c4ce7 | ||
|
|
003ac1b762 | ||
|
|
d00666a4d9 | ||
|
|
767b841fea | ||
|
|
fd89d2145a | ||
|
|
6830962c3a | ||
|
|
0c17d67fa5 | ||
|
|
bc4eff88a7 | ||
|
|
93cbce82f9 | ||
|
|
8123b5090a | ||
|
|
da969ffaeb | ||
|
|
b24c76f12a | ||
|
|
0b77f93154 | ||
|
|
2bc4686afa | ||
|
|
dc1cd3eb25 | ||
|
|
7ab320b5d5 | ||
|
|
4074f1b1ed | ||
|
|
f7ffe391f6 | ||
|
|
82c3a5ad5a | ||
|
|
1f54bb73aa | ||
|
|
66d7aa75e2 | ||
|
|
a99f3ea321 | ||
|
|
4773bcf0ea | ||
|
|
532cc7755c | ||
|
|
4f957feacd | ||
|
|
43e854fece | ||
|
|
03a88aab0b | ||
|
|
ff24a5f702 | ||
|
|
b9297c6158 | ||
|
|
316efecaea | ||
|
|
f0a9f0ff29 | ||
|
|
63ba78b664 | ||
|
|
09ec6ebd8e | ||
|
|
62bda675e0 | ||
|
|
7d21497c11 | ||
|
|
768362852e | ||
|
|
c5efdb9df9 | ||
|
|
c7c8b70b22 | ||
|
|
01b0556419 | ||
|
|
18405e2598 | ||
|
|
cb73ed4737 | ||
|
|
e6de35f5ac | ||
|
|
a8ad598153 | ||
|
|
2cfbc6e5ef | ||
|
|
8d8aa87457 | ||
|
|
bf9fc521cb | ||
|
|
cebccea81c | ||
|
|
35f26f00bc | ||
|
|
534b7041f4 | ||
|
|
3d071e50ad | ||
|
|
feca2e3faf | ||
|
|
5d8b2d8044 | ||
|
|
e9233f4698 | ||
|
|
7fb548d7c5 | ||
|
|
d1389db2f4 | ||
|
|
ba9e998ff5 | ||
|
|
cdd09a2616 | ||
|
|
800262fc14 | ||
|
|
4991f9412d | ||
|
|
87f1e8f77d | ||
|
|
5ce4b85edd | ||
|
|
a52f598369 | ||
|
|
0a4f9e43d9 | ||
|
|
9e8b0b59ba | ||
|
|
29a14f5667 | ||
|
|
49d98a4429 | ||
|
|
c945aead54 | ||
|
|
16284d0a59 | ||
|
|
4b6632edf4 | ||
|
|
070dce4c83 | ||
|
|
8afd2edd1d | ||
|
|
7328e55ee9 | ||
|
|
1f5fe7a1db | ||
|
|
ec976743d6 | ||
|
|
c9aa04c679 | ||
|
|
9c92a30dbb | ||
|
|
8a899c4c7b | ||
|
|
a30bd86311 | ||
|
|
374048e1c6 | ||
|
|
4238261784 | ||
|
|
76f719e5d0 | ||
|
|
b9b02cf749 | ||
|
|
ba59036a97 | ||
|
|
7b466a98d0 | ||
|
|
e3ba15de94 | ||
|
|
6f5cd1cd4d | ||
|
|
3d2b0e3766 | ||
|
|
72cfc6a6ef | ||
|
|
9e20387595 | ||
|
|
263c097d13 | ||
|
|
c64f9ad9b1 | ||
|
|
ba1e522bbb | ||
|
|
881735b562 | ||
|
|
db7c26cde7 | ||
|
|
1b555ea3b5 | ||
|
|
b259a46ab7 | ||
|
|
0f2f25845d | ||
|
|
732cbc3ad5 | ||
|
|
5d89454d25 | ||
|
|
fda48f3d55 | ||
|
|
09c13777d8 | ||
|
|
60c0eb7179 | ||
|
|
d21e6ff45f | ||
|
|
60f7ec03c2 | ||
|
|
7964933507 | ||
|
|
8f42b36a42 | ||
|
|
c72af82f73 | ||
|
|
5b3867dd60 | ||
|
|
276e3d9d1b | ||
|
|
3311336d0e | ||
|
|
1b5ea0651c | ||
|
|
75c96c08f7 | ||
|
|
b6a951a9fa | ||
|
|
0ca9bab8b6 | ||
|
|
ab4eaea757 | ||
|
|
30240b4cbf | ||
|
|
06f53b2689 | ||
|
|
4991ef608d | ||
|
|
1b836ac4a7 | ||
|
|
e73d8f383b | ||
|
|
0e636ce411 | ||
|
|
e8a92ae731 | ||
|
|
b60e5a62fc | ||
|
|
7adc7c4833 | ||
|
|
cf5da56390 | ||
|
|
d228ad3ddd | ||
|
|
e6e534c13a | ||
|
|
48b3d91768 | ||
|
|
cbf2e740e3 | ||
|
|
8c90e7cafc | ||
|
|
ff39dffe23 | ||
|
|
920ac6695f | ||
|
|
ec1da2805c | ||
|
|
84f844767c | ||
|
|
58bd645d49 | ||
|
|
16377f7249 | ||
|
|
47f40ed79a | ||
|
|
e62af05496 | ||
|
|
bd9df9a6ec | ||
|
|
b7e5e41afe | ||
|
|
a908d1ab93 | ||
|
|
8434d6c397 | ||
|
|
3d05d706f4 | ||
|
|
df0a9c4683 | ||
|
|
ed6bf53547 | ||
|
|
a64d641a50 | ||
|
|
69e88ffed0 | ||
|
|
937e475169 | ||
|
|
fc480e9bea | ||
|
|
d6ba55eebf | ||
|
|
d55aa66751 | ||
|
|
f0d85d7dcc | ||
|
|
a28d2878e0 | ||
|
|
a0056f4e05 | ||
|
|
6af09d8a09 | ||
|
|
4d818f6cd9 | ||
|
|
f25e056914 | ||
|
|
679fa65b84 | ||
|
|
33967649b1 | ||
|
|
ea6e78ab0d | ||
|
|
a1a1c7d0fb | ||
|
|
1f734a69a0 | ||
|
|
7e89477e6c | ||
|
|
8b45caf611 | ||
|
|
fa3db52cf7 | ||
|
|
6fe9ee387d | ||
|
|
a573ce185c | ||
|
|
ccc1137e12 | ||
|
|
10c7be8c50 | ||
|
|
d37cc8e1e7 | ||
|
|
aaf3fe8b19 | ||
|
|
b98e53e059 | ||
|
|
79e8a912cd | ||
|
|
f46e8cc6ac | ||
|
|
594f6c33a2 | ||
|
|
1c501047f5 | ||
|
|
8833afc2fa | ||
|
|
fa43018d10 | ||
|
|
1e86e3cb08 | ||
|
|
b7601a9add | ||
|
|
9d8d702aa6 | ||
|
|
4659184cc1 | ||
|
|
104688e3ee | ||
|
|
cc24da128c | ||
|
|
d720cc16a6 | ||
|
|
0118d578a2 | ||
|
|
1ea86eedc0 | ||
|
|
5297bd7b2c | ||
|
|
7f57692ee3 | ||
|
|
20b9dbadda | ||
|
|
c85221c64f | ||
|
|
962d136cbc | ||
|
|
728840b7c5 | ||
|
|
c66ea9f740 | ||
|
|
5b3f031654 | ||
|
|
cee80eb5f4 | ||
|
|
60297403a2 | ||
|
|
58a8683d7d | ||
|
|
d51f008c72 | ||
|
|
9656fad0f5 | ||
|
|
fd7b692d00 | ||
|
|
39491f789b | ||
|
|
c4eca8b3cc | ||
|
|
47cafaaa7c | ||
|
|
1b6188ee1d | ||
|
|
9ee88ad070 | ||
|
|
a95e55dc54 | ||
|
|
9fd2f3dd8a | ||
|
|
7b1d3ba7ea | ||
|
|
e59c9b0e65 | ||
|
|
12e8f7d0b4 | ||
|
|
bf7c29e4cd | ||
|
|
4f2c9a05fb | ||
|
|
f287754477 | ||
|
|
2bc2047770 | ||
|
|
73433c25f2 | ||
|
|
9c81272278 | ||
|
|
efa4a50cf5 | ||
|
|
27992b16c2 | ||
|
|
e101a1d77a | ||
|
|
20243ff6fb | ||
|
|
98d22f8b2e | ||
|
|
b9e6024fe9 | ||
|
|
31a62c18be | ||
|
|
2d4b6273f0 | ||
|
|
8dba78abce | ||
|
|
d3ffd13c25 | ||
|
|
4768f293bf | ||
|
|
57b09c371a | ||
|
|
b9fba8005a | ||
|
|
270fc13e2a | ||
|
|
f67941d03b | ||
|
|
c89e703bed | ||
|
|
d0100548d4 | ||
|
|
f7192b82b1 | ||
|
|
08dc8b40e4 | ||
|
|
b875f81be3 | ||
|
|
e8d13090b0 | ||
|
|
f3a50a01a7 | ||
|
|
1290d0b1a3 | ||
|
|
82dfed1512 | ||
|
|
53e57766c9 | ||
|
|
dde94da94f | ||
|
|
5f4fc4701f | ||
|
|
20716e13e4 | ||
|
|
bf52a4c737 | ||
|
|
82ee28fa39 | ||
|
|
f5435f5ba5 | ||
|
|
b717691901 | ||
|
|
7094cc7693 | ||
|
|
80df352711 | ||
|
|
5287de930b | ||
|
|
378556c0c2 | ||
|
|
b47a4da81f | ||
|
|
1d116cc23b | ||
|
|
ad3b76c4d8 | ||
|
|
3f7cb991e4 | ||
|
|
9102e40f9c | ||
|
|
9168c344b1 | ||
|
|
4d4f7ac112 | ||
|
|
884876572b | ||
|
|
ec7fb80a5b | ||
|
|
c52c378f49 | ||
|
|
60efb3c4b4 | ||
|
|
d694a3a166 | ||
|
|
90e59b2704 | ||
|
|
999eb83de8 | ||
|
|
e019979749 | ||
|
|
15c487e547 | ||
|
|
d8f3e22f14 | ||
|
|
3fa5816aab | ||
|
|
e5f7057539 | ||
|
|
259a699613 | ||
|
|
d1619af18c | ||
|
|
bddb2504b5 | ||
|
|
769cb6a369 | ||
|
|
4512306207 | ||
|
|
430c617a95 | ||
|
|
9fde236512 | ||
|
|
72c2158b17 | ||
|
|
f7ac17b6be | ||
|
|
1e3e5c92a8 | ||
|
|
5f7a3a8ca9 | ||
|
|
5b14f7de64 | ||
|
|
dc4e75a61c | ||
|
|
f484f35d85 | ||
|
|
9e6fac5faa | ||
|
|
b72963ee5f | ||
|
|
a696bf0d02 | ||
|
|
b0cef1b143 | ||
|
|
02b19b7686 | ||
|
|
795211dba6 | ||
|
|
630f869f7f | ||
|
|
7a260c9885 | ||
|
|
6eb0ecbe7c | ||
|
|
071fbb92df | ||
|
|
357c3160bb | ||
|
|
2ba0b1b76b | ||
|
|
a8c5454724 | ||
|
|
c963e0b62b | ||
|
|
05b33012b7 | ||
|
|
91fcad0a93 | ||
|
|
fb344fb646 | ||
|
|
f5fe75a73b | ||
|
|
df0fb9551f | ||
|
|
7e5b6dee9c | ||
|
|
174e121034 | ||
|
|
9ebd9c4447 | ||
|
|
4400b56fb5 | ||
|
|
4de63714ce | ||
|
|
0ca72a7d60 | ||
|
|
2aa34186e1 | ||
|
|
adc76243dc | ||
|
|
565e72d9d7 | ||
|
|
2d7ef30e59 | ||
|
|
9284a01346 | ||
|
|
b574d06f5f | ||
|
|
1c29874541 | ||
|
|
08d8026fa3 | ||
|
|
2286ac1c49 | ||
|
|
8d616133d6 | ||
|
|
7197017e74 | ||
|
|
f542c7232e | ||
|
|
7568f6f2ec | ||
|
|
3271048ab6 | ||
|
|
791bfc181b | ||
|
|
1facc8efbc | ||
|
|
b2d8e7137f | ||
|
|
ba63fca9d8 | ||
|
|
655c0efb31 | ||
|
|
52fe7a9f2a | ||
|
|
fb9c24b900 | ||
|
|
05d5f06bb5 | ||
|
|
9dd9448d02 | ||
|
|
cb2593f2bb | ||
|
|
4c7db9e62d | ||
|
|
466e6008ad | ||
|
|
396e42e17c | ||
|
|
f808593b2d | ||
|
|
7de0065216 | ||
|
|
285e07be76 | ||
|
|
66765d827b | ||
|
|
19ea90aff5 | ||
|
|
ad58118df0 | ||
|
|
2a0be7e91e | ||
|
|
fbdc364329 | ||
|
|
54798d4743 | ||
|
|
5aed2b379a | ||
|
|
6f5e0f96b4 | ||
|
|
9dea86068a | ||
|
|
af3482b7cd | ||
|
|
707d32536c | ||
|
|
d247a79e48 | ||
|
|
5820eea1cb | ||
|
|
b6e0ed43de | ||
|
|
72b28ac2fc | ||
|
|
2ae3dd970a | ||
|
|
a3bc6a73a3 | ||
|
|
e1bf7daf59 | ||
|
|
f0af6460a1 | ||
|
|
9dcaaedf06 | ||
|
|
9c58537078 | ||
|
|
c46749f236 | ||
|
|
c09469a71c | ||
|
|
afbb5e2721 | ||
|
|
9a702cd0c4 | ||
|
|
77599bec1c | ||
|
|
a5f54b5ec1 | ||
|
|
b2df6152af | ||
|
|
98aad6ef76 | ||
|
|
730d7ec528 | ||
|
|
c911ba4747 | ||
|
|
9fdb318776 | ||
|
|
d92a621a70 | ||
|
|
7734f2eed8 | ||
|
|
10dc0bcfa2 | ||
|
|
5d1f224794 | ||
|
|
d876ff522a | ||
|
|
8f2b51c461 | ||
|
|
cd8d21cf8e | ||
|
|
3d37a6ce27 | ||
|
|
82c7bcd761 | ||
|
|
3c9367825c | ||
|
|
e99540554a | ||
|
|
86152668c3 | ||
|
|
61088b71c6 | ||
|
|
1bb15fd2cc | ||
|
|
67f934a902 | ||
|
|
a0a54bdd05 | ||
|
|
ed65172308 | ||
|
|
0a35a2fac9 | ||
|
|
a1d2c85d88 | ||
|
|
7d49f75317 | ||
|
|
3e883e4be4 | ||
|
|
3e65c1d0a3 | ||
|
|
e25ad9759a | ||
|
|
06ccc0121f | ||
|
|
03bfffea23 | ||
|
|
de5a55c03e | ||
|
|
b4771030d3 | ||
|
|
4d06f982db | ||
|
|
1fb057462a | ||
|
|
93374facb8 | ||
|
|
e862047142 | ||
|
|
90eb776310 | ||
|
|
9c77b2dfeb | ||
|
|
6abfd601ba | ||
|
|
38738b2a18 | ||
|
|
99b5f7badf | ||
|
|
ac558afc8a | ||
|
|
d555656a41 | ||
|
|
10fd86fd68 | ||
|
|
af58734826 | ||
|
|
08a6ff6e6c | ||
|
|
7d13f96e28 | ||
|
|
e726f82344 | ||
|
|
5c054fb486 | ||
|
|
904f5de1ea | ||
|
|
c79fe9a1e7 | ||
|
|
15943eddb1 | ||
|
|
8d1e294b32 | ||
|
|
c4e89bea32 | ||
|
|
b37f6e9df1 | ||
|
|
30a5e31b66 | ||
|
|
5415fb361f | ||
|
|
34010c5605 | ||
|
|
41d2ea4306 | ||
|
|
36ea4658f1 | ||
|
|
cc0b9bbca9 | ||
|
|
f38c6d0995 | ||
|
|
bfa2bbef85 | ||
|
|
7a9f4161ea | ||
|
|
5c0702092a | ||
|
|
0706564215 | ||
|
|
6485bd89d9 | ||
|
|
38f617233d | ||
|
|
9e774eb41c | ||
|
|
6f101c0a0c | ||
|
|
1d5b250b58 | ||
|
|
e7d0a0345e | ||
|
|
50868f14f6 | ||
|
|
79701aa613 | ||
|
|
ac41ba1f73 | ||
|
|
deb69c4c72 | ||
|
|
76237955c7 | ||
|
|
cfa8e94e95 | ||
|
|
01de778831 | ||
|
|
1fda2a611c | ||
|
|
d5d19acb3f | ||
|
|
fded22e1b3 | ||
|
|
91afc2079c | ||
|
|
d09fee90ad | ||
|
|
e1dbdce91e | ||
|
|
28227ea4c4 | ||
|
|
97ad04dfd0 | ||
|
|
4ada08c690 | ||
|
|
84ee81aba9 | ||
|
|
32a70a6552 | ||
|
|
ae88702e00 | ||
|
|
384fe14ac6 | ||
|
|
c52228278f | ||
|
|
8c07d4e7b9 | ||
|
|
fb5b7a34e3 | ||
|
|
1e951605fb | ||
|
|
82dd025860 | ||
|
|
f1d5a0a1b3 | ||
|
|
8a43789db5 | ||
|
|
ef0e3fe6c6 | ||
|
|
41d12130c2 | ||
|
|
b23062c54a | ||
|
|
455a20d852 | ||
|
|
a3498c506f | ||
|
|
2505291065 | ||
|
|
81458912f9 | ||
|
|
da93a960af | ||
|
|
cea03d91e4 | ||
|
|
320d22f2a7 | ||
|
|
8ff0f9e869 | ||
|
|
74dd2553a6 | ||
|
|
85bb789ffa | ||
|
|
06dfc4e6ef | ||
|
|
ba7b0612dc | ||
|
|
c8c4ff39de | ||
|
|
d12e5104e2 | ||
|
|
90515fdbb0 | ||
|
|
cb9fc6fa3e | ||
|
|
152f04c0a7 | ||
|
|
527d58c9c3 | ||
|
|
839c0af088 | ||
|
|
3db06d7426 | ||
|
|
ae607e56ca | ||
|
|
d6b042f9fe | ||
|
|
735e441afc | ||
|
|
48d00e817f | ||
|
|
ce4dc4ae21 | ||
|
|
0c1087a2e5 | ||
|
|
abd605a066 | ||
|
|
5bd06d3a02 | ||
|
|
391cf379ae | ||
|
|
264cce2003 | ||
|
|
79dd0958d0 | ||
|
|
2c6188b73f | ||
|
|
33adabb035 | ||
|
|
616500b8f3 | ||
|
|
2f98f5a6d6 | ||
|
|
2a6656050c | ||
|
|
80b22ca2be | ||
|
|
53159a81cf | ||
|
|
6f0f7ce948 | ||
|
|
c21dd828d5 | ||
|
|
97bed8e710 | ||
|
|
aaf70d652b | ||
|
|
54c21b30c9 | ||
|
|
91f23938b5 | ||
|
|
0af0db6593 | ||
|
|
7a1ebd22ed | ||
|
|
c2e96a081f | ||
|
|
1d56035a56 | ||
|
|
0e68a9e0fc | ||
|
|
a143a8b1f6 | ||
|
|
5114b37bfa | ||
|
|
8c746302a2 | ||
|
|
a1d6ca2298 | ||
|
|
d6a617c225 | ||
|
|
69f57351b2 | ||
|
|
c4d5267107 | ||
|
|
6b1ee680a2 | ||
|
|
d3ebdae159 | ||
|
|
86a0d3faff | ||
|
|
3f62ad08e1 | ||
|
|
1a483a7d88 | ||
|
|
3daff15f34 | ||
|
|
1736c1e32e | ||
|
|
764ca25f8d | ||
|
|
79ee48d91b | ||
|
|
e2f4fc245a | ||
|
|
f26319a2b0 | ||
|
|
637c99a362 | ||
|
|
a1a0ed0563 | ||
|
|
0a825a1aa4 | ||
|
|
b5f805fc6c | ||
|
|
55c8633f9a | ||
|
|
1fa95de554 | ||
|
|
a1080f4853 | ||
|
|
48d178886e | ||
|
|
673bac12a6 | ||
|
|
b0a0508c85 | ||
|
|
69ecdd3236 | ||
|
|
9a950cdca6 | ||
|
|
7ec3cf46d6 | ||
|
|
ba0d3d1a6a | ||
|
|
b9ff3b6c81 | ||
|
|
f4178e41b3 | ||
|
|
d648227e3d | ||
|
|
3d0094b611 | ||
|
|
f85a4c0467 | ||
|
|
b24d4cce8d | ||
|
|
a235da9cc5 | ||
|
|
fa45ea32dc | ||
|
|
a594c444da | ||
|
|
210f06d990 | ||
|
|
899156435c | ||
|
|
1303b4950f | ||
|
|
a24deadb54 | ||
|
|
4b55e6e68e | ||
|
|
0121366f65 | ||
|
|
c60fefa1a6 | ||
|
|
8c03d50421 | ||
|
|
7318814474 | ||
|
|
afc4f3386a | ||
|
|
c6c6171841 | ||
|
|
47bf88ed3f | ||
|
|
492d67c6e8 | ||
|
|
58b63cb58c | ||
|
|
d4a76b979c | ||
|
|
4fdfd04d3c | ||
|
|
79f6aacc85 | ||
|
|
c73ce3d02d | ||
|
|
f3d03b025a | ||
|
|
a1ac59a48a | ||
|
|
f401f817ed | ||
|
|
23c76075e5 | ||
|
|
d132e6bce4 | ||
|
|
1f188b2610 | ||
|
|
a6d8b3b847 | ||
|
|
0de6e80093 | ||
|
|
3d0f8c986f | ||
|
|
d41edf21e4 | ||
|
|
06167087b3 | ||
|
|
a3d5d9112a | ||
|
|
1cb5ba3efd | ||
|
|
b56d9c9e31 | ||
|
|
a48369dc41 | ||
|
|
6800753f09 | ||
|
|
e9e08c6576 | ||
|
|
5907bbea6e | ||
|
|
cb5b265dcd | ||
|
|
f9baf3eb1c | ||
|
|
1dba4aceca | ||
|
|
e8b3532658 | ||
|
|
35979bb5a6 | ||
|
|
182e826dc5 | ||
|
|
08ef4bfbff | ||
|
|
1bc3f346b1 | ||
|
|
6dff0b13a4 | ||
|
|
76796c76cd | ||
|
|
c5d2343f51 | ||
|
|
e6e7c95e94 | ||
|
|
f4cb9de8d9 | ||
|
|
6f19551a77 | ||
|
|
efce449550 | ||
|
|
ffa216d958 | ||
|
|
ecb42cad9b | ||
|
|
0ddb77c048 | ||
|
|
5bd806ada6 | ||
|
|
2582649490 | ||
|
|
2084ead56c | ||
|
|
f2e50d4ffd | ||
|
|
6faa7a060c | ||
|
|
f998b72e99 | ||
|
|
fe30f2e48e | ||
|
|
9a82bed3a5 | ||
|
|
a00b8ecc55 | ||
|
|
9452444a9f | ||
|
|
2e8f56fc86 | ||
|
|
8148148932 | ||
|
|
e000eeaafb | ||
|
|
9ac9307b44 | ||
|
|
cdba010794 | ||
|
|
eb947dc325 | ||
|
|
9e22135f35 | ||
|
|
5c42ced8d3 | ||
|
|
b5e9a9d451 | ||
|
|
cd3cfb27de | ||
|
|
f7d35ff619 | ||
|
|
81dd3b46c5 | ||
|
|
96d3b41989 | ||
|
|
ff837a767b | ||
|
|
002dc80d48 | ||
|
|
c64d7483db | ||
|
|
ef0f473199 | ||
|
|
fd8161c523 | ||
|
|
53e2824937 | ||
|
|
71ebb2493e | ||
|
|
ad9ec44228 | ||
|
|
8775e51ebd | ||
|
|
f11877e72c | ||
|
|
66785be691 | ||
|
|
1fb3de2960 | ||
|
|
654343f875 | ||
|
|
0bf7a35a53 | ||
|
|
3a46634f4a | ||
|
|
67f7eaabc7 | ||
|
|
d28669761f | ||
|
|
8684596d66 | ||
|
|
460ee7f5de | ||
|
|
b7536ca94b | ||
|
|
58077c63a7 | ||
|
|
22b65489e2 | ||
|
|
2816188c83 | ||
|
|
4d78b6be31 | ||
|
|
5087d13de8 | ||
|
|
4d6d5c870c | ||
|
|
dd8666036c | ||
|
|
27a4bc5a39 | ||
|
|
88f4d1e3a7 | ||
|
|
c6d8b52d26 | ||
|
|
14efa6fbda | ||
|
|
e859d3f3d1 | ||
|
|
0f26be85b5 | ||
|
|
49505ab93f | ||
|
|
86a6fcddc0 | ||
|
|
c92de149a2 | ||
|
|
36fe83afcc | ||
|
|
5771e6eae8 | ||
|
|
7d491cb230 | ||
|
|
a86f2615be | ||
|
|
c37d9c10f7 | ||
|
|
e39db3f9ad | ||
|
|
82f347403a | ||
|
|
916d7502c8 | ||
|
|
42651c1500 | ||
|
|
da4a785fae | ||
|
|
c2b78c6fdf | ||
|
|
c260decf58 | ||
|
|
17eb468f38 | ||
|
|
75c64e12aa | ||
|
|
ea25d12405 | ||
|
|
ca8c5b041d | ||
|
|
414ce3589a | ||
|
|
37b1d3ae42 | ||
|
|
f984339404 | ||
|
|
86895cbf45 | ||
|
|
18953e81bc | ||
|
|
bae75d234a | ||
|
|
2f634bddd3 | ||
|
|
187f0bea3b | ||
|
|
605afeff74 | ||
|
|
0d45e6d70e | ||
|
|
4362cc0e9a | ||
|
|
5af88a3e2b | ||
|
|
9628700ced | ||
|
|
32ed98a9a5 | ||
|
|
ea032b4b3e | ||
|
|
449192e565 | ||
|
|
9d1840e37a | ||
|
|
ec0f9e49c3 | ||
|
|
390245806a | ||
|
|
22e02b545e | ||
|
|
b020bd76c6 | ||
|
|
483b5a75e8 | ||
|
|
70d1719b7d | ||
|
|
30ba964f9d | ||
|
|
3ef93addd0 | ||
|
|
0980591fa2 | ||
|
|
e59b252cc0 | ||
|
|
4496093cf8 | ||
|
|
8b78551b92 | ||
|
|
bde2e3956d | ||
|
|
c85ba4c259 | ||
|
|
403518e852 | ||
|
|
41091f8ebf | ||
|
|
f78c39cc98 | ||
|
|
39a9b7b721 | ||
|
|
9d2b6cb589 | ||
|
|
87c42c8c5d | ||
|
|
e31afb5885 | ||
|
|
2fbac107ca | ||
|
|
a1239ee6a8 | ||
|
|
15ac8d9ffc | ||
|
|
f57be52061 | ||
|
|
f68918c5a9 | ||
|
|
1b481f1946 | ||
|
|
127c1ef8bf | ||
|
|
189c8701d7 | ||
|
|
f7c1b6e060 | ||
|
|
c25020765c | ||
|
|
10c3928eef | ||
|
|
100fe404a5 | ||
|
|
0ade0a44b5 | ||
|
|
7a20d94536 | ||
|
|
4e2e178417 | ||
|
|
aad9ea0e05 | ||
|
|
074da1fedf | ||
|
|
c8a760832b | ||
|
|
b69dcb51a0 | ||
|
|
e55229db40 | ||
|
|
d8abd04a8e | ||
|
|
5935572458 | ||
|
|
807521f91b | ||
|
|
8ee14a8039 | ||
|
|
8cd45189c3 | ||
|
|
fbb0a77ce3 | ||
|
|
854574af66 | ||
|
|
1f7d6461c5 | ||
|
|
30d5135fdd | ||
|
|
192c5d2c4a | ||
|
|
6c87673e57 | ||
|
|
ba46b25e2f | ||
|
|
d044147698 | ||
|
|
689405732c | ||
|
|
bae54f312d | ||
|
|
8fbe363f3c | ||
|
|
141c5e60c5 | ||
|
|
9d41fe251b | ||
|
|
6ccebbf7a8 | ||
|
|
ef27358a82 | ||
|
|
fb13a502d2 | ||
|
|
e6b363ef54 | ||
|
|
8fd3fd7259 | ||
|
|
3f2f799248 | ||
|
|
b460019846 | ||
|
|
35b5e6a923 | ||
|
|
e24f3585d4 | ||
|
|
220f55d760 | ||
|
|
c374343ae9 | ||
|
|
ca3035fe07 | ||
|
|
5af621056a | ||
|
|
44d43495a7 | ||
|
|
8a92ad1434 | ||
|
|
182d51eb34 | ||
|
|
22dc1e7f86 | ||
|
|
babd8868d9 | ||
|
|
038d3bea87 | ||
|
|
f3399ead26 | ||
|
|
888f0a27da | ||
|
|
c979181bd7 | ||
|
|
916537b0f8 | ||
|
|
65152066ca | ||
|
|
0651e45460 | ||
|
|
7d96af950e | ||
|
|
82d5194a4f | ||
|
|
9d479ab64b | ||
|
|
1922598f0f | ||
|
|
3d7b86660a | ||
|
|
907964a7d1 | ||
|
|
384c0c12ea | ||
|
|
749568f290 | ||
|
|
0403bd8c3c | ||
|
|
eafadaf15a | ||
|
|
ea06e2e403 | ||
|
|
11a15ca58a | ||
|
|
93cb647091 | ||
|
|
42b879e6b8 | ||
|
|
b8f8459275 | ||
|
|
3bc5779f68 | ||
|
|
644f0e61ba | ||
|
|
5a8f01edf4 | ||
|
|
02afca3bb6 | ||
|
|
1fb3d7dd17 |
90
.clang-format
Normal file
90
.clang-format
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
Language: Cpp
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveDeclarations: false
|
||||
AlignEscapedNewlines: DontAlign
|
||||
AlignOperands: true
|
||||
AlignTrailingComments: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: true
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: true
|
||||
AfterClass: true
|
||||
AfterControlStatement: true
|
||||
AfterEnum: true
|
||||
AfterFunction: true
|
||||
AfterNamespace: true
|
||||
AfterObjCDeclaration: true
|
||||
AfterStruct: true
|
||||
AfterUnion: true
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
IndentBraces: false
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Custom
|
||||
BreakBeforeTernaryOperators: false
|
||||
BreakConstructorInitializers: BeforeComma
|
||||
ColumnLimit: 0
|
||||
CommentPragmas: '^ (IWYU pragma:|NOLINT)'
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
ForEachMacros: []
|
||||
IncludeCategories:
|
||||
- Regex: '^"(stdafx|PrecompiledHeader)'
|
||||
Priority: -2
|
||||
- Regex: '^".*Common'
|
||||
Priority: -1
|
||||
- Regex: '^<'
|
||||
Priority: 1
|
||||
- Regex: '^"'
|
||||
Priority: 2
|
||||
IndentCaseLabels: true
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 3
|
||||
NamespaceIndentation: All
|
||||
ObjCBlockIndentWidth: 2
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
PointerAlignment: Left
|
||||
ReflowComments: false
|
||||
SortIncludes: false
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Cpp11
|
||||
TabWidth: 4
|
||||
UseTab: ForContinuationAndIndentation
|
||||
...
|
||||
3
.codacy.yaml
Normal file
3
.codacy.yaml
Normal file
@@ -0,0 +1,3 @@
|
||||
---
|
||||
exclude_paths:
|
||||
- '3rdparty/**'
|
||||
8
.gitattributes
vendored
Normal file
8
.gitattributes
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||
* text=auto
|
||||
|
||||
# Declare files that will always have CRLF line endings on checkout.
|
||||
*.sln text eol=crlf
|
||||
*.props text eol=crlf
|
||||
*.vcxproj text eol=crlf
|
||||
*.vcxproj.filters text eol=crlf
|
||||
52
.github/CONTRIBUTING.md
vendored
Normal file
52
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
# So you want to contribute to PCSX2? Great
|
||||
|
||||
As a first step, please review these links as they'll help you understand how the development of PCSX2 works.
|
||||
|
||||
* [Just Starting Out](#just-starting-out)
|
||||
* [Issue Reporting](#issue-reporting)
|
||||
* [Pull Request Guidelines](#pull-request-guidelines)
|
||||
* [General Documentation And Coding Strategies](#general-documentation-and-coding-strategies)
|
||||
* [Tasks](#tasks)
|
||||
|
||||
## Just Starting Out
|
||||
|
||||
* If you're unfamilar with git, check out this [brief introduction to Git](https://github.com/PCSX2/pcsx2/wiki/Git-survival-guide)
|
||||
* [How to build PCSX2 for Windows](https://github.com/PCSX2/pcsx2/wiki/Setting-up-the-PCSX2-repository-on-Windows-\(WIP---maybe-more-useful-as-a-manpage-instead%3F\))
|
||||
* [How to build PCSX2 for Linux](https://github.com/PCSX2/pcsx2/wiki/Installing-on-Linux)
|
||||
|
||||
## Issue Reporting
|
||||
|
||||
* [How to write a useful issue](https://github.com/PCSX2/pcsx2/wiki/How-to-create-useful-and-valid-issues)
|
||||
|
||||
## Pull Request Guidelines
|
||||
|
||||
The following is a list of *general* style recommendations that will make reviewing and merging easier:
|
||||
|
||||
* Commit Messages
|
||||
* Please try to prefix your commit message, indicating what area of the project was modified.
|
||||
* For example `gs: message...`.
|
||||
* Looking at the project's commit history will help with keeping prefixes consistent overtime, *there is no strictly enforced list*.
|
||||
* Try to keep messages brief and informative
|
||||
* Remove unnecessary commits and squash commits together when appropriate.
|
||||
* If you are not familiar with rebasing with git, check out the following resources:
|
||||
* CLI - https://thoughtbot.com/blog/git-interactive-rebase-squash-amend-rewriting-history
|
||||
* GUI (SourceTree) - https://www.atlassian.com/blog/sourcetree/interactive-rebase-sourcetree
|
||||
* Code Styling and Formatting
|
||||
* [Consult the style guide](https://github.com/tadanokojin/pcsx2/blob/coding-guide/pcsx2/Docs/Coding_Guidelines.md)
|
||||
* Run `clang-format` using the configuration file in the root of the repository
|
||||
* Visual Studio Setup - https://devblogs.microsoft.com/cppblog/clangformat-support-in-visual-studio-2017-15-7-preview-1/
|
||||
* IMPORTANT - if you are running `clang-format` on unrelated changes (ie. formatting an entire file), please do so in a separate commit.
|
||||
* If you cannot scope your `clang-format` to just your changes and do not want to format unrelated code. Try your best to stick with the existing formatting already established in the file in question.
|
||||
|
||||
## General Documentation And Coding Strategies
|
||||
|
||||
* [Commenting Etiquette](https://github.com/PCSX2/pcsx2/wiki/Commenting-Etiquette)
|
||||
* [Coding style](https://github.com/PCSX2/pcsx2/wiki/Code-Formatting-Guidelines)
|
||||
* [More comprehensive style-guide (Currently in Draft)](https://github.com/tadanokojin/pcsx2/blob/coding-guide/pcsx2/Docs/Coding_Guidelines.md)
|
||||
* [wxWidgets coding strategies](https://github.com/PCSX2/pcsx2/wiki/wxWidgets-Coding-Strategies)
|
||||
|
||||
## Tasks
|
||||
|
||||
* [Todo List](https://github.com/PCSX2/pcsx2/wiki/Contributing-\(TODO-List\))
|
||||
* [Issues](https://github.com/PCSX2/pcsx2/issues)
|
||||
* [A collection of ideas to improve GS OGL](https://github.com/PCSX2/pcsx2/wiki/Todo-List)
|
||||
81
.github/ISSUE_TEMPLATE/app_bug_report.yaml
vendored
Normal file
81
.github/ISSUE_TEMPLATE/app_bug_report.yaml
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
|
||||
name: Application Bug Report
|
||||
description: Found a problem with the application itself (ie. bad file path handling, UX issue)? Help us improve it.
|
||||
title: "[BUG]: "
|
||||
labels: [Bug]
|
||||
# assignees:
|
||||
# - octocat
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## Important: Read First
|
||||
|
||||
Please do not make support requests on GitHub. Our issue tracker is for tracking bugs and feature requests only
|
||||
If you need help configuring the emulator please make a request on our forums or contact us on discord
|
||||
|
||||
If you are unsure, start with [discord](https://discord.com/invite/TCz3t9k) or the [forums](https://forums.pcsx2.net/index.php)
|
||||
|
||||
Please make an effort to make sure your issue isn't already reported
|
||||
|
||||
### Please Avoid Issues Pertaining to the Following:
|
||||
- We are **not** accepting bug reports for **PSX mode** at this time
|
||||
- If you are interested in helping contribute to PSX mode please do so on the forums. Otherwise our recommendation is that you use a [proper PSX emulator](https://emulation.gametechwiki.com/index.php/PlayStation_emulators)
|
||||
- We do **not** accept issues relating to **upscaling** at this time
|
||||
- We are aware of the various problems with upscaling. The issue spans many games and having hundreds of issues for the same fundamental issues isn't particularly helpful. There are several workarounds for graphical problems that come as a result of upscaling
|
||||
- Please try your game at native resolution before creating an issue
|
||||
- If your bug is the result of upscaling please use the forums or discord for assistance with various upscaling workarounds. Additionally, the unofficial PCSX2 [Wiki](https://wiki.pcsx2.net/Main_Page) often lists various fixes for upscaling issues
|
||||
- type: textarea
|
||||
id: desc
|
||||
attributes:
|
||||
label: Describe the Bug
|
||||
description: "A clear and concise description of what the bug is"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: repro
|
||||
attributes:
|
||||
label: Reproduction Steps
|
||||
description: "Steps to reproduce the behavior"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expect
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: "A clear and concise description of what you expected to happen"
|
||||
validations:
|
||||
required: false
|
||||
- type: input
|
||||
id: rev
|
||||
attributes:
|
||||
label: PCSX2 Revision
|
||||
description: "Please ensure you are on the latest version before making an issue"
|
||||
placeholder: "Example: v1.7.1337"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: os
|
||||
attributes:
|
||||
label: Operating System
|
||||
options:
|
||||
- Windows 11
|
||||
- Windows 10 (32bit)
|
||||
- Windows 10 (64bit)
|
||||
- Windows 8.1 (32bit)
|
||||
- Windows 8.1 (64bit)
|
||||
- Linux (32bit) - Specify Distro Below
|
||||
- Linux (64bit) - Specify Distro Below
|
||||
- macOS (Monteray)
|
||||
- macOS (BigSur)
|
||||
- macOS (Catalina)
|
||||
- macOS (Mojave)
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: os-distro
|
||||
attributes:
|
||||
label: If Linux - Specify Distro
|
||||
placeholder: "Example: Arch"
|
||||
validations:
|
||||
required: false
|
||||
11
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
11
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Support Forums
|
||||
url: https://forums.pcsx2.net/index.php
|
||||
about: For community support and answers
|
||||
- name: Discord
|
||||
url: https://discord.com/invite/TCz3t9k
|
||||
about: Get direct support and hang out with us
|
||||
- name: Wiki
|
||||
url: https://wiki.pcsx2.net/Main_Page
|
||||
about: For user provided information and reports
|
||||
149
.github/ISSUE_TEMPLATE/emu_bug_report.yaml
vendored
Normal file
149
.github/ISSUE_TEMPLATE/emu_bug_report.yaml
vendored
Normal file
@@ -0,0 +1,149 @@
|
||||
# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
|
||||
name: Emulation Bug Report
|
||||
description: Problem in a game (ie. graphical artifacts, crashes)? Help us improve it.
|
||||
title: "[BUG]: "
|
||||
labels: [Bug]
|
||||
# assignees:
|
||||
# - octocat
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## Important: Read First
|
||||
|
||||
Please do not make support requests on GitHub. Our issue tracker is for tracking bugs and feature requests only
|
||||
If you need help configuring the emulator please make a request on our forums or contact us on discord
|
||||
|
||||
If you are unsure, start with [discord](https://discord.com/invite/TCz3t9k) or the [forums](https://forums.pcsx2.net/index.php)
|
||||
|
||||
Please make an effort to make sure your issue isn't already reported
|
||||
|
||||
### Please Avoid Issues Pertaining to the Following:
|
||||
- We are **not** accepting bug reports for **PSX mode** at this time
|
||||
- If you are interested in helping contribute to PSX mode please do so on the forums. Otherwise our recommendation is that you use a [proper PSX emulator](https://emulation.gametechwiki.com/index.php/PlayStation_emulators)
|
||||
- We do **not** accept issues relating to **upscaling** at this time
|
||||
- We are aware of the various problems with upscaling. The issue spans many games and having hundreds of issues for the same fundamental issues isn't particularly helpful. There are several workarounds for graphical problems that come as a result of upscaling
|
||||
- Please try your game at native resolution before creating an issue
|
||||
- If your bug is the result of upscaling please use the forums or discord for assistance with various upscaling workarounds. Additionally, the unofficial PCSX2 [Wiki](https://wiki.pcsx2.net/Main_Page) often lists various fixes for upscaling issues
|
||||
- type: textarea
|
||||
id: desc
|
||||
attributes:
|
||||
label: Describe the Bug
|
||||
description: "A clear and concise description of what the bug is"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: repro
|
||||
attributes:
|
||||
label: Reproduction Steps
|
||||
description: "Steps to reproduce the behavior"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expect
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: "A clear and concise description of what you expected to happen"
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## System Info
|
||||
|
||||
Please make sure your system meets our requirements for OS version, CPU and GPU
|
||||
- [System Requirements](https://github.com/PCSX2/pcsx2#system-requirements)
|
||||
|
||||
We **do not** accept bug reports for **unsupported operating systems**.
|
||||
- [For macOS Support](https://forums.pcsx2.net/Thread-Native-Mac-Testing-Build)
|
||||
|
||||
Performance issues as a result of not meeting our hardware requirements are not valid
|
||||
|
||||
Please read our known issues pages for AMD and Intel drivers.
|
||||
- [Intel Drivers](https://github.com/PCSX2/pcsx2/wiki/OpenGL-and-Intel-GPUs-All-you-need-to-know)
|
||||
- [AMD Drivers](https://github.com/PCSX2/pcsx2/wiki/OpenGL-and-AMD-GPUs---All-you-need-to-know)
|
||||
|
||||
We are **not** accepting issues related to the **libretro** core. The libretro core is being maintained separately at this time
|
||||
- type: input
|
||||
id: rev
|
||||
attributes:
|
||||
label: PCSX2 Revision
|
||||
description: "We only accept bug reports for the latest dev version. Please try upgrading before making an issue."
|
||||
placeholder: "Example: v1.7.1337"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: os
|
||||
attributes:
|
||||
label: Operating System
|
||||
options:
|
||||
- Windows 11
|
||||
- Windows 10 (32bit)
|
||||
- Windows 10 (64bit)
|
||||
- Windows 8.1 (32bit)
|
||||
- Windows 8.1 (64bit)
|
||||
- Linux (32bit) - Specify Distro Below
|
||||
- Linux (64bit) - Specify Distro Below
|
||||
- macOS (Monteray)
|
||||
- macOS (BigSur)
|
||||
- macOS (Catalina)
|
||||
- macOS (Mojave)
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: os-distro
|
||||
attributes:
|
||||
label: If Linux - Specify Distro
|
||||
placeholder: "Example: Arch"
|
||||
validations:
|
||||
required: false
|
||||
- type: input
|
||||
id: cpu
|
||||
attributes:
|
||||
label: CPU
|
||||
placeholder: "Example: i5-7600"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: gpu
|
||||
attributes:
|
||||
label: GPU
|
||||
placeholder: "Example: GTX 1070"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: gsSettings
|
||||
attributes:
|
||||
label: GS Settings
|
||||
description: "Any **non-default** settings for GS. If you don't want to list them out, please provide screenshots of your configuration window (including hw hacks if enabled)."
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: emuSettings
|
||||
attributes:
|
||||
label: Emulation Settings
|
||||
description: |
|
||||
Any non-default core settings. If you don't want to list them out, please provide screenshots of your configuration window
|
||||
|
||||
Please note that the safe preset works for most games. MTVU can have some compatibility issues so please disable it before making a report
|
||||
|
||||
If you need to modify the settings manually because a game requires you to do so to work, please state that explicitly
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: gsScreens
|
||||
attributes:
|
||||
label: GS Window Screenshots
|
||||
description: "If your issue is graphical in nature and you think screenshots will help illustrate your issue, you may do that here."
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: logsDumps
|
||||
attributes:
|
||||
label: "Logs & Dumps"
|
||||
description: |
|
||||
Please feel free to attach any logs, block dumps, GSdump, etc here
|
||||
|
||||
If your problem is graphical in nature it is highly recommended that you provide a GSdump. [GSdump Guide](https://forums.pcsx2.net/Thread-How-to-create-a-proper-GS-dump)
|
||||
validations:
|
||||
required: false
|
||||
41
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
Normal file
41
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
|
||||
name: Feature request
|
||||
description: Suggest a new feature or improve an existing one
|
||||
title: "[Feature Request]: "
|
||||
labels: ["Enhancement / Feature Request"]
|
||||
# assignees:
|
||||
# - octocat
|
||||
body:
|
||||
- type: textarea
|
||||
id: desc
|
||||
attributes:
|
||||
label: Description
|
||||
description: |
|
||||
A concise description of the feature you want
|
||||
|
||||
Include step by step examples of how the feature should work under various circumstances
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reason
|
||||
attributes:
|
||||
label: Reason
|
||||
description: |
|
||||
Give a reason why you want this feature
|
||||
- How will it make things easier for you?
|
||||
- How does this feature help your enjoyment of the emulator?
|
||||
- What does it provide that isn't being provided currently?
|
||||
|
||||
We are not accepting feature requests related to the libretro core as it's being maintained separately at this time
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: examples
|
||||
attributes:
|
||||
label: Examples
|
||||
description: |
|
||||
Provide examples of the feature as implemented by other software
|
||||
|
||||
Include screenshots or video if you like to help demonstrate how you'd like this feature to work
|
||||
validations:
|
||||
required: true
|
||||
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
### Description of Changes
|
||||
<!-- Brief description or overview on what was changed in the PR -->
|
||||
|
||||
### Rationale behind Changes
|
||||
<!-- Why were these changes made? What problem does it solve / area does it improve? -->
|
||||
|
||||
### Suggested Testing Steps
|
||||
<!-- If applicable, including examples you've already tested with / recommendations for how to test further is very helpful! -->
|
||||
8
.github/dependabot.yml
vendored
Normal file
8
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Set update schedule for GitHub Actions
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
# Check for updates to GitHub Actions every week
|
||||
interval: "weekly"
|
||||
111
.github/labeler.yml
vendored
Normal file
111
.github/labeler.yml
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
# Documentation - https://github.com/actions/labeler
|
||||
|
||||
# General Labels
|
||||
'Build | Project System':
|
||||
- '.github/*'
|
||||
- '.github/**/*'
|
||||
- '*.sln'
|
||||
- '**/*.sln'
|
||||
- '*.vcxproj*'
|
||||
- '**/*.vcxproj*'
|
||||
- 'cmake/*'
|
||||
- 'cmake/**/*'
|
||||
- 'CMakeLists.txt'
|
||||
- '**/CMakeLists.txt'
|
||||
- 'buildbot.xml'
|
||||
- 'build.sh'
|
||||
'Dependencies':
|
||||
- '3rdparty/*'
|
||||
- '3rdparty/**/*'
|
||||
- '**/3rdpartyDeps.props'
|
||||
- '.gitmodules'
|
||||
'Documentation':
|
||||
- '*.md'
|
||||
- '**/*.md'
|
||||
- '*.pdf'
|
||||
- '**/*.pdf'
|
||||
'GUI/WX':
|
||||
- 'pcsx2/gui/*'
|
||||
- 'pcsx2/gui/**/*'
|
||||
'GameDB':
|
||||
- '**/GameIndex.*'
|
||||
'Installer | Package':
|
||||
- 'nsis/*'
|
||||
- 'nsis/**/*'
|
||||
- 'build.sh'
|
||||
|
||||
# Tools / Features
|
||||
'Debugger':
|
||||
- 'pcsx2/DebugTools/*'
|
||||
- 'pcsx2/DebugTools/**/*'
|
||||
- 'pcsx2/gui/Debugger/*'
|
||||
- 'pcsx2/gui/Debugger/**/*'
|
||||
'IPC':
|
||||
- 'pcsx2/IPC*'
|
||||
- 'pcsx2/**/IPC*'
|
||||
'TAS Functionality':
|
||||
- 'pcsx2/Recording/*'
|
||||
- 'pcsx2/Recording/**/*'
|
||||
|
||||
# Emulation Components
|
||||
'Counters':
|
||||
- 'pcsx2/Counters.*'
|
||||
'Vector Units':
|
||||
- 'pcsx2/VU*'
|
||||
- 'pcsx2/**/VU*'
|
||||
- 'pcsx2/*VU*'
|
||||
- 'pcsx2/**/*VU*'
|
||||
'VIF':
|
||||
- 'pcsx2/Vif*'
|
||||
- 'pcsx2/**/Vif*'
|
||||
- 'pcsx2/VIF*'
|
||||
- 'pcsx2/**/VIF*'
|
||||
|
||||
# GS Related Labels
|
||||
'GS':
|
||||
- 'pcsx2/GS/*'
|
||||
- 'pcsx2/GS/**/*'
|
||||
'GS: Direct3D':
|
||||
- 'pcsx2/GS/Renderers/DX11/*'
|
||||
- 'pcsx2/GS/Renderers/DX11/**/*'
|
||||
'GS: Hardware':
|
||||
- 'pcsx2/GS/Renderers/HW/*'
|
||||
- 'pcsx2/GS/Renderers/HW/**/*'
|
||||
'GS: OpenGL':
|
||||
- 'pcsx2/GS/Renderers/OpenGL/*'
|
||||
- 'pcsx2/GS/Renderers/OpenGL/**/*'
|
||||
'GS: Vulkan':
|
||||
- 'pcsx2/GS/Renderers/Vulkan/*'
|
||||
- 'pcsx2/GS/Renderers/Vulkan/**/*'
|
||||
'GS: Texture Cache':
|
||||
- 'pcsx2/GS/Renderers/*TextureCache*.*'
|
||||
- 'pcsx2/GS/Renderers/**/*TextureCache*.*'
|
||||
'GS: Software':
|
||||
- 'pcsx2/GS/Renderers/SW/*'
|
||||
- 'pcsx2/GS/Renderers/SW/**/*'
|
||||
|
||||
# Other Core Components
|
||||
'CDVD':
|
||||
- 'pcsx2/CDVD/*'
|
||||
- 'pcsx2/CDVD/**/*'
|
||||
'DEV9':
|
||||
- 'pcsx2/DEV9/*'
|
||||
- 'pcsx2/DEV9/**/*'
|
||||
'IPU':
|
||||
- 'pcsx2/IPU/*'
|
||||
- 'pcsx2/IPU/**/*'
|
||||
'Memory Card':
|
||||
- 'pcsx2/gui/MemoryCard*'
|
||||
- 'pcsx2/gui/**/MemoryCard*'
|
||||
'PAD: Linux/Mac':
|
||||
- 'pcsx2/PAD/Linux/*'
|
||||
- 'pcsx2/PAD/Linux/**/*'
|
||||
'PAD: Windows':
|
||||
- 'pcsx2/PAD/Windows/*'
|
||||
- 'pcsx2/PAD/Windows/**/*'
|
||||
'SPU2':
|
||||
- 'pcsx2/SPU2/*'
|
||||
- 'pcsx2/SPU2/**/*'
|
||||
'USB':
|
||||
- 'pcsx2/USB/*'
|
||||
- 'pcsx2/USB/**/*'
|
||||
BIN
.github/workflows/architecture/release-process.png
vendored
Normal file
BIN
.github/workflows/architecture/release-process.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 82 KiB |
47
.github/workflows/architecture/release-process.puml
vendored
Normal file
47
.github/workflows/architecture/release-process.puml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
@startuml
|
||||
participant User as user
|
||||
participant Github as github
|
||||
participant "Create Release WF" as create
|
||||
participant "Build WFs" as build
|
||||
participant "Finalize Release WF" as finalize
|
||||
participant Discord as discord
|
||||
|
||||
==Nightly Release==
|
||||
|
||||
user -> github : New Commit on master (from PR, or directly)
|
||||
...waiting for commit push event to fire...
|
||||
github -> create : Push a new git tag, patch incrementing latest Version
|
||||
alt from-pr? case
|
||||
create -> create : Use links to the PR as a description
|
||||
else was a commit
|
||||
create -> create : Use Commit Message as Description
|
||||
end
|
||||
create -> create : Generate release notes
|
||||
create -> github : Create new draft release, associated with tag and with the notes
|
||||
note right
|
||||
Draft releases are not public facing, only those with write access can see them!
|
||||
end note
|
||||
...waiting for push tag event to fire...
|
||||
loop for all build workflows
|
||||
github -> build : Build the tag commit
|
||||
build -> build : .exe will use the git tag for it's title and such
|
||||
build -> build : Upload the generated artifact to the associated release
|
||||
alt all-artifacts-uploaded? case
|
||||
build -> github : Publish the release
|
||||
user -> github : Can now download the artifacts on the published release
|
||||
end
|
||||
note right
|
||||
This is the only area where an eventual consistency issue is apparent
|
||||
It is because GitHub does not fire events for when draft releases are edited
|
||||
This is glossed over in the initial impl and can be improved and be made eventually consistent as well
|
||||
end note
|
||||
|
||||
|
||||
...waiting for release publish event to fire...
|
||||
github -> finalize : Announce the Release
|
||||
finalize -> github : Gather all asset links, and format message embed.
|
||||
finalize -> discord : Announce new build via a WebHook
|
||||
|
||||
...waiting for announcement...
|
||||
user -> discord : Can download artifacts from links via the discord
|
||||
@enduml
|
||||
27
.github/workflows/lint-gamedb.yml
vendored
Normal file
27
.github/workflows/lint-gamedb.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
name: 📝 Validate GameDB
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '**/GameIndex.yaml'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '**/GameIndex.yaml'
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Validate GameDB
|
||||
env:
|
||||
SCRIPT_DIR: .github/workflows/scripts/validation/lint-gamedb
|
||||
run: |
|
||||
pip install -r "${SCRIPT_DIR}/requirements.txt"
|
||||
python "${SCRIPT_DIR}/lint-gamedb.py"
|
||||
239
.github/workflows/linux-workflow.yml
vendored
Normal file
239
.github/workflows/linux-workflow.yml
vendored
Normal file
@@ -0,0 +1,239 @@
|
||||
name: 🐧 Linux Builds
|
||||
|
||||
# Controls when the action will run. Triggers the workflow on push or pull request
|
||||
# events but only for the master branch
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- v*
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths-ignore:
|
||||
- "**/*.md"
|
||||
- "**/*.bat"
|
||||
- "**/*.cmd"
|
||||
- "**/*.props"
|
||||
- "**/*.sln"
|
||||
- ".clang-format"
|
||||
- ".codacy.yaml"
|
||||
- ".github/*"
|
||||
- ".github/workflows/lint-gamedb.yml"
|
||||
- ".github/workflows/macos-workflow.yml"
|
||||
- ".github/workflows/pr-triage.yml"
|
||||
- ".github/workflows/scripts/windows/**"
|
||||
- ".github/workflows/scripts/validation/**"
|
||||
- ".github/workflows/windows-workflow.yml"
|
||||
- ".gitignore"
|
||||
- "bin/PCSX2_keys.ini.default"
|
||||
- "build.sh"
|
||||
- "buildbot.xml"
|
||||
- "pcsx2/CDVD/Windows/**"
|
||||
- "pcsx2/DEV9/Win32/**"
|
||||
- "pcsx2/PAD/Windows/**"
|
||||
- "pcsx2/SPU2/Windows/**"
|
||||
- "pcsx2/USB/Win32/**"
|
||||
- "pcsx2/windows/**"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
# Prevent one build from failing everything (although maybe those should be included as experimental builds instead)
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: ubuntu-18.04
|
||||
platform: x86
|
||||
compiler: gcc
|
||||
cmakeflags: -DLTO_PCSX2_CORE=ON
|
||||
appimage: true
|
||||
experimental: false
|
||||
- os: ubuntu-18.04
|
||||
platform: x64
|
||||
compiler: gcc
|
||||
cmakeflags: -DLTO_PCSX2_CORE=ON
|
||||
appimage: true
|
||||
experimental: false
|
||||
- os: ubuntu-18.04
|
||||
platform: x86
|
||||
compiler: clang
|
||||
# Need to disable PCH until cmake 3.17
|
||||
# (PCH conflicts with ccache, fixed by https://gitlab.kitware.com/cmake/cmake/-/merge_requests/4400)
|
||||
cmakeflags: -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON
|
||||
detail: " nopch"
|
||||
appimage: false
|
||||
experimental: false
|
||||
- os: ubuntu-18.04
|
||||
platform: x86
|
||||
compiler: gcc
|
||||
cmakeflags: -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON
|
||||
detail: " nopch"
|
||||
appimage: false
|
||||
experimental: false
|
||||
- os: ubuntu-18.04
|
||||
platform: x86
|
||||
compiler: gcc
|
||||
cmakeflags: -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON -DARCH_FLAG=-march=haswell
|
||||
detail: " avx2 nopch"
|
||||
appimage: false
|
||||
experimental: false
|
||||
|
||||
name: ${{ matrix.platform }} | ${{ matrix.compiler }}${{ matrix.detail }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
continue-on-error: ${{ matrix.experimental }}
|
||||
# Set some sort of timeout in the event of run-away builds. We are limited on concurrent jobs so, get rid of them.
|
||||
timeout-minutes: 60
|
||||
|
||||
env:
|
||||
CCACHE_BASEDIR: ${{ github.workspace }}
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
CCACHE_COMPRESS: true
|
||||
CCACHE_COMPRESSLEVEL: 9
|
||||
CCACHE_MAXSIZE: 100M
|
||||
SDL: SDL2-2.0.16
|
||||
PATCHELF_VERSION: 0.12
|
||||
|
||||
steps:
|
||||
# NOTE - useful for debugging
|
||||
# - name: Dump GitHub context
|
||||
# env:
|
||||
# GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
# run: |
|
||||
# echo "$GITHUB_CONTEXT"
|
||||
# echo ${{ github.event.pull_request.title }}
|
||||
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Checkout Submodules
|
||||
if: steps.cache-submodules.outputs.cache-hit != 'true'
|
||||
run: git submodule update --init --recursive -j $(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
# -- SETUP CCACHE - https://cristianadam.eu/20200113/speeding-up-c-plus-plus-github-actions-using-ccache/
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_timestamp
|
||||
shell: cmake -P {0}
|
||||
run: |
|
||||
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
|
||||
message("::set-output name=timestamp::${current_date}")
|
||||
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v2.1.7
|
||||
with:
|
||||
path: .ccache
|
||||
key: ${{ matrix.os }} ${{ matrix.platform }} ${{ matrix.compiler }}${{ matrix.detail }} ccache ${{ steps.ccache_cache_timestamp.outputs.timestamp }}
|
||||
restore-keys: ${{ matrix.os }} ${{ matrix.platform }} ${{ matrix.compiler }}${{ matrix.detail }} ccache
|
||||
|
||||
- name: Prepare Artifact Metadata
|
||||
id: artifact-metadata
|
||||
shell: bash
|
||||
run: |
|
||||
ARCH=$([ "${{ matrix.platform }}" == x86 ] && echo "32bit" || echo "64bit")
|
||||
ARTIFACT_NAME=""
|
||||
if [ ${{ github.event_name }} == "pull_request" ]; then
|
||||
PR_SHA=$(git rev-parse --short "${{ github.event.pull_request.head.sha }}")
|
||||
ARTIFACT_NAME="PCSX2-${ARCH}"
|
||||
if [ ! -z "${{ github.event.pull_request.number }}" ]; then
|
||||
PR_NUM=${{ github.event.pull_request.number }}
|
||||
ARTIFACT_NAME="${ARTIFACT_NAME}-pr[${PR_NUM}]"
|
||||
fi
|
||||
ARTIFACT_NAME="${ARTIFACT_NAME}-sha[${PR_SHA}]"
|
||||
if [ ! -z "${{ github.event.pull_request.title }}" ]; then
|
||||
PR_TITLE=$(echo "${{ github.event.pull_request.title }}" | tr -cd '[a-zA-Z0-9[:space:]]_-')
|
||||
ARTIFACT_NAME="${ARTIFACT_NAME}-title["${PR_TITLE}""
|
||||
fi
|
||||
else
|
||||
SHA=$(git rev-parse --short "$GITHUB_SHA")
|
||||
ARTIFACT_NAME="PCSX2-${ARCH}-sha[${SHA}"
|
||||
fi
|
||||
TRIMMED_ARTIFACT_NAME=$(printf "%.199s]" "$ARTIFACT_NAME")
|
||||
echo "name=$TRIMMED_ARTIFACT_NAME"
|
||||
echo "##[set-output name=name;]${TRIMMED_ARTIFACT_NAME}"
|
||||
echo "##[set-output name=arch;]${ARCH}"
|
||||
|
||||
- name: Install Packages
|
||||
env:
|
||||
PLATFORM: ${{ matrix.platform }}
|
||||
COMPILER: ${{ matrix.compiler }}
|
||||
run: .github/workflows/scripts/linux/install-packages.sh
|
||||
|
||||
- name: Cache Dependencies
|
||||
uses: actions/cache@v2.1.7
|
||||
with:
|
||||
path: |
|
||||
3rdparty/${{ env.SDL }}
|
||||
3rdparty/patchelf-${{ env.PATCHELF_VERSION }}
|
||||
key: ${{ matrix.os }} ${{ matrix.platform }} ${{ env.SDL }} patchelf-${{ env.PATCHELF_VERSION }}
|
||||
|
||||
- name: Build Dependencies
|
||||
run: |
|
||||
if [[ ! -e 3rdparty/patchelf-${{ env.PATCHELF_VERSION }} ]]; then
|
||||
curl -sSfL https://github.com/NixOS/patchelf/releases/download/${{ env.PATCHELF_VERSION }}/patchelf-${{ env.PATCHELF_VERSION }}.tar.bz2 | tar -xjC 3rdparty
|
||||
mv 3rdparty/patchelf-${{ env.PATCHELF_VERSION }}* 3rdparty/patchelf-${{ env.PATCHELF_VERSION }}
|
||||
cd 3rdparty/patchelf-${{ env.PATCHELF_VERSION }}
|
||||
./configure
|
||||
make && cd ../../
|
||||
fi
|
||||
sudo make -C 3rdparty/patchelf-${{ env.PATCHELF_VERSION }} install
|
||||
if [[ ! -e 3rdparty/${{ env.SDL }} ]]; then
|
||||
curl -sL https://libsdl.org/release/${{ env.SDL }}.tar.gz | tar -xzC 3rdparty
|
||||
cd 3rdparty/${{ env.SDL }}
|
||||
if [ "${{ matrix.platform }}" == "x86" ]; then
|
||||
./configure --build=i686-pc-linux-gnu CC=${{ matrix.compiler }} CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --prefix=/usr --libdir=/usr/lib/i386-linux-gnu
|
||||
else
|
||||
./configure --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
|
||||
fi
|
||||
make -j $(getconf _NPROCESSORS_ONLN) && cd ../../
|
||||
fi
|
||||
sudo make -C 3rdparty/${{ env.SDL }} install
|
||||
|
||||
- name: Generate CMake
|
||||
env:
|
||||
PLATFORM: ${{ matrix.platform }}
|
||||
COMPILER: ${{ matrix.compiler }}
|
||||
ADDITIONAL_CMAKE_ARGS: ${{ matrix.cmakeflags }}
|
||||
run: .github/workflows/scripts/linux/generate-cmake.sh
|
||||
|
||||
- name: Build PCSX2
|
||||
working-directory: build
|
||||
run: ../.github/workflows/scripts/linux/compile.sh
|
||||
|
||||
- name: Run Tests
|
||||
working-directory: ./build
|
||||
run: ninja unittests
|
||||
|
||||
- name: Package AppImage
|
||||
if: matrix.appimage == true
|
||||
env:
|
||||
PLATFORM: ${{ matrix.platform }}
|
||||
COMPILER: ${{ matrix.compiler }}
|
||||
name: ${{ steps.artifact-metadata.outputs.name }}
|
||||
run: .github/workflows/scripts/linux/appimage.sh
|
||||
|
||||
- name: Upload artifact
|
||||
if: matrix.appimage == true
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ${{ steps.artifact-metadata.outputs.name }}
|
||||
path: ci-artifacts
|
||||
|
||||
# ---- Release / Tagging related steps ----
|
||||
- name: Prepare Build Artifacts
|
||||
if: github.repository == 'PCSX2/pcsx2' && startsWith(github.ref, 'refs/tags/') && matrix.appimage == true
|
||||
run: |
|
||||
mv ./ci-artifacts/*.AppImage ./ci-artifacts/linux-AppImage-${{ steps.artifact-metadata.outputs.arch }}.AppImage
|
||||
ls ./ci-artifacts/
|
||||
|
||||
- name: Upload Assets and Potential Publish Release
|
||||
if: github.repository == 'PCSX2/pcsx2' && startsWith(github.ref, 'refs/tags/') && matrix.appimage == true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.BOT_PAT }}
|
||||
ASSET_DIR: ${{ github.WORKSPACE }}/ci-artifacts
|
||||
ASSET_EXTENSION: AppImage
|
||||
TAG_TO_SEARCH_FOR: ${{ github.REF }}
|
||||
run: |
|
||||
cd ./.github/workflows/scripts/releases/upload-release-artifacts
|
||||
npm ci
|
||||
node index.js
|
||||
118
.github/workflows/macos-workflow.yml
vendored
Normal file
118
.github/workflows/macos-workflow.yml
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
name: 🍎 MacOS Builds
|
||||
|
||||
# Controls when the action will run. Triggers the workflow on push or pull request
|
||||
# events but only for the master branch
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.bat'
|
||||
- '**/*.cmd'
|
||||
- '**/*.props'
|
||||
- '**/*.sln'
|
||||
- '.clang-format'
|
||||
- '.codacy.yaml'
|
||||
- '.github/*'
|
||||
- '.github/workflows/lint-gamedb.yml'
|
||||
- '.github/workflows/linux-workflow.yml'
|
||||
- '.github/workflows/pr-triage.yml'
|
||||
- '.github/workflows/scripts/windows/**'
|
||||
- '.github/workflows/scripts/validation/**'
|
||||
- '.github/workflows/windows-workflow.yml'
|
||||
- '.gitignore'
|
||||
- 'bin/PCSX2_keys.ini.default'
|
||||
- 'build.sh'
|
||||
- 'buildbot.xml'
|
||||
- 'pcsx2/CDVD/Windows/**'
|
||||
- 'pcsx2/DEV9/Win32/**'
|
||||
- 'pcsx2/PAD/Windows/**'
|
||||
- 'pcsx2/SPU2/Windows/**'
|
||||
- 'pcsx2/USB/Win32/**'
|
||||
- 'pcsx2/windows/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '**/*.bat'
|
||||
- '**/*.cmd'
|
||||
- '**/*.props'
|
||||
- '**/*.sln'
|
||||
- '.clang-format'
|
||||
- '.codacy.yaml'
|
||||
- '.github/*'
|
||||
- '.github/workflows/lint-gamedb.yml'
|
||||
- '.github/workflows/linux-workflow.yml'
|
||||
- '.github/workflows/pr-triage.yml'
|
||||
- '.github/workflows/scripts/windows/**'
|
||||
- '.github/workflows/scripts/validation/**'
|
||||
- '.github/workflows/windows-workflow.yml'
|
||||
- '.gitignore'
|
||||
- 'bin/PCSX2_keys.ini.default'
|
||||
- 'build.sh'
|
||||
- 'buildbot.xml'
|
||||
- 'pcsx2/CDVD/Windows/**'
|
||||
- 'pcsx2/DEV9/Win32/**'
|
||||
- 'pcsx2/PAD/Windows/**'
|
||||
- 'pcsx2/SPU2/Windows/**'
|
||||
- 'pcsx2/USB/Win32/**'
|
||||
- 'pcsx2/windows/**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
# Prevent one build from failing everything (although maybe those should be included as experimental builds instead)
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-11.0]
|
||||
platform: [x64]
|
||||
experimental: [false]
|
||||
|
||||
name: ${{ matrix.platform }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
continue-on-error: ${{ matrix.experimental }}
|
||||
# Set some sort of timeout in the event of run-away builds. We are limited on concurrent jobs so, get rid of them.
|
||||
timeout-minutes: 30
|
||||
|
||||
steps:
|
||||
# NOTE - useful for debugging
|
||||
# - name: Dump GitHub context
|
||||
# env:
|
||||
# GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
# run: |
|
||||
# echo "$GITHUB_CONTEXT"
|
||||
# echo ${{ github.event.pull_request.title }}
|
||||
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Checkout Submodules
|
||||
run: git submodule update --init --recursive -j $(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
- name: Install Packages
|
||||
env:
|
||||
PLATFORM: ${{ matrix.platform }}
|
||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
||||
HOMEBREW_NO_ANALYTICS: 1
|
||||
run: |
|
||||
# To save time, only brew update if running the install without it fails
|
||||
function do-install() {
|
||||
brew install sound-touch portaudio wxwidgets sdl2 libsamplerate
|
||||
}
|
||||
if ! do-install; then
|
||||
brew update
|
||||
do-install
|
||||
fi
|
||||
|
||||
- name: Generate CMake Files
|
||||
run: cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_BUILD_PO=FALSE -DLTO_PCSX2_CORE=ON -B build .
|
||||
|
||||
- name: Build PCSX2
|
||||
working-directory: build
|
||||
run: make -j$(getconf _NPROCESSORS_ONLN) # macOS doesn't use make install
|
||||
|
||||
- name: Run Tests
|
||||
working-directory: build
|
||||
run: make -j$(getconf _NPROCESSORS_ONLN) unittests
|
||||
27
.github/workflows/pr-triage.yml
vendored
Normal file
27
.github/workflows/pr-triage.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# Runs steps to triage an incoming Pull Request, for example - applying labels.
|
||||
name: 🤔 Pull Request Triage
|
||||
|
||||
on: pull_request_target
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
if: github.repository == 'PCSX2/pcsx2'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/labeler@main
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- uses: xTVaser/first-interaction@v1.2.4
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
debug-mode: false
|
||||
pr-message: |-
|
||||
## Thank you for submitting a contribution to PCSX2
|
||||
|
||||
As this is your first pull request, [please be aware of the contributing guidelines](https://github.com/PCSX2/pcsx2/blob/master/.github/CONTRIBUTING.md).
|
||||
|
||||
Additionally, as per recent changes in GitHub Actions, your pull request will need to be approved by a maintainer before GitHub Actions can run against it. [You can find more information about this change here.](https://github.blog/2021-04-22-github-actions-update-helping-maintainers-combat-bad-actors/)
|
||||
|
||||
Please be patient until this happens. In the meantime if you'd like to confirm the builds are passing, you have the option of opening a PR on your own fork, just make sure your fork's master branch is up to date!
|
||||
pr-labels: "First Time Contribution"
|
||||
24
.github/workflows/release-announce.yml
vendored
Normal file
24
.github/workflows/release-announce.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: 📢 Announce Release
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
announce:
|
||||
if: github.repository == 'PCSX2/pcsx2'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
- name: Announce Release
|
||||
env:
|
||||
DISCORD_BUILD_WEBHOOK: ${{ secrets.DISCORD_BUILD_WEBHOOK }}
|
||||
run: |
|
||||
cd ./.github/workflows/scripts/releases/announce-release
|
||||
npm ci
|
||||
node index.js
|
||||
62
.github/workflows/release-push-tag-and-draft.yml
vendored
Normal file
62
.github/workflows/release-push-tag-and-draft.yml
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
# Whenever a commit is pushed to master (ideally via a pull-request!)
|
||||
# this action will create the next release, which means:
|
||||
# 1. tag master with the proper version
|
||||
# 2. create a new draft release (pre-released if a nightly build)
|
||||
# 3. add release notes
|
||||
|
||||
name: 🏭 Create Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# TODO - future work
|
||||
# workflow_dispatch:
|
||||
# inputs:
|
||||
# isStable:
|
||||
# description: 'Should it be a stable release?'
|
||||
# required: true
|
||||
# default: 'false'
|
||||
# versionTag:
|
||||
# description: 'The version to tag with'
|
||||
# required: true
|
||||
|
||||
jobs:
|
||||
cut-release:
|
||||
if: github.repository == 'PCSX2/pcsx2'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
# Docs - https://github.com/mathieudutour/github-tag-action
|
||||
# Workflows cannot trigger other workflows implicitly
|
||||
# - https://github.community/t/github-actions-workflow-not-triggering-with-tag-push/17053/7
|
||||
- name: Bump Version and Push Tag
|
||||
id: tag_version
|
||||
uses: mathieudutour/github-tag-action@v6.0
|
||||
with:
|
||||
github_token: ${{ secrets.BOT_PAT }}
|
||||
tag_prefix: v
|
||||
default_bump: patch
|
||||
|
||||
# Generate the Release Notes
|
||||
- name: Generate Release Notes
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
COMMIT_SHA: ${{ github.SHA }}
|
||||
run: |
|
||||
cd ./.github/workflows/scripts/releases/generate-release-notes
|
||||
npm ci
|
||||
node index.js
|
||||
mv ./release-notes.md ${GITHUB_WORKSPACE}/release-notes.md
|
||||
ls
|
||||
|
||||
# Docs - https://github.com/softprops/action-gh-release
|
||||
- name: Create a GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: steps.tag_version.outputs.new_tag
|
||||
with:
|
||||
body_path: ./release-notes.md
|
||||
draft: true
|
||||
prerelease: true
|
||||
tag_name: ${{ steps.tag_version.outputs.new_tag }}
|
||||
1
.github/workflows/scripts/controller-db/.gitignore
vendored
Normal file
1
.github/workflows/scripts/controller-db/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.txt
|
||||
38
.github/workflows/scripts/controller-db/update-db.py
vendored
Normal file
38
.github/workflows/scripts/controller-db/update-db.py
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
import os
|
||||
|
||||
relevant_categories = [
|
||||
"# Mac OS X",
|
||||
"# Linux"
|
||||
]
|
||||
|
||||
header_lines = []
|
||||
new_db_contents = []
|
||||
|
||||
def is_relevant_category(line):
|
||||
for category in relevant_categories:
|
||||
if category in line:
|
||||
return True
|
||||
return False
|
||||
|
||||
with open("./game_controller_db.txt") as file:
|
||||
lines = file.readlines()
|
||||
finished_header = False
|
||||
processing_section = False
|
||||
for line in lines:
|
||||
if finished_header is False:
|
||||
header_lines.append(line)
|
||||
if line == "\n":
|
||||
finished_header = True
|
||||
if processing_section and line == "\n":
|
||||
processing_section = False
|
||||
new_db_contents.append("\n")
|
||||
if is_relevant_category(line) and processing_section is False:
|
||||
processing_section = True
|
||||
new_db_contents.append(line)
|
||||
elif processing_section:
|
||||
new_db_contents.append(line)
|
||||
|
||||
os.remove("./game_controller_db.txt")
|
||||
with open("./game_controller_db.txt", "w") as f:
|
||||
f.writelines(header_lines)
|
||||
f.writelines(new_db_contents)
|
||||
7
.github/workflows/scripts/linux/AppRun
vendored
Executable file
7
.github/workflows/scripts/linux/AppRun
vendored
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
ln -sf $APPDIR/usr/bin/app /tmp/PCSX2
|
||||
|
||||
$APPDIR/AppRun-patched
|
||||
|
||||
unlink /tmp/PCSX2
|
||||
10
.github/workflows/scripts/linux/app-variables.sh
vendored
Normal file
10
.github/workflows/scripts/linux/app-variables.sh
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
export LD_LIBRARY_PATH="$APPDIR/usr/lib:$LD_LIBRARY_PATH"
|
||||
export BINARY_NAME=$(basename "$ARGV0")
|
||||
if [[ ! -e "$PWD/$BINARY_NAME.config" ]]; then
|
||||
mkdir "$PWD/$BINARY_NAME.config"
|
||||
fi
|
||||
export XDG_CONFIG_HOME="$PWD/$BINARY_NAME.config"
|
||||
|
||||
mkdir -p "$HOME"/.local/share/icons/hicolor/scalable/apps && cp "$APPDIR"/PCSX2.png "$HOME"/.local/share/icons/hicolor/scalable/apps
|
||||
68
.github/workflows/scripts/linux/appimage.sh
vendored
Executable file
68
.github/workflows/scripts/linux/appimage.sh
vendored
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
echo "${PLATFORM}"
|
||||
if [ "${PLATFORM}" == "x86" ]; then
|
||||
APPARCH="i686"
|
||||
ARCH="i386"
|
||||
LIBARCH="i386-linux-gnu"
|
||||
else
|
||||
APPARCH="x86_64"
|
||||
ARCH="x86_64"
|
||||
LIBARCH="x86_64-linux-gnu"
|
||||
fi
|
||||
BUILDPATH="$GITHUB_WORKSPACE"/build
|
||||
BUILDBIN="$BUILDPATH"/pcsx2
|
||||
cd /tmp
|
||||
curl -sSfLO "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-$ARCH.AppImage"
|
||||
chmod a+x linuxdeploy*.AppImage
|
||||
./linuxdeploy-"$ARCH".AppImage --appimage-extract
|
||||
curl -sSfL "https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh" -o /tmp/squashfs-root/usr/bin/linuxdeploy-plugin-gtk.sh
|
||||
chmod a+x /tmp/squashfs-root/usr/bin/linuxdeploy-plugin-gtk.sh
|
||||
mv /tmp/squashfs-root/usr/bin/patchelf /tmp/squashfs-root/usr/bin/patchelf.orig
|
||||
sudo cp /usr/local/bin/patchelf /tmp/squashfs-root/usr/bin/patchelf
|
||||
cd "$GITHUB_WORKSPACE"
|
||||
mkdir -p squashfs-root/usr/bin
|
||||
ls -al "$BUILDBIN"
|
||||
cp -P "$BUILDBIN"/pcsx2 "$GITHUB_WORKSPACE"/squashfs-root/usr/bin/
|
||||
patchelf --set-rpath /tmp/PCSX2 "$GITHUB_WORKSPACE"/squashfs-root/usr/bin/pcsx2
|
||||
cp ./pcsx2/gui/Resources/AppIcon64.png ./squashfs-root/PCSX2.png
|
||||
cp ./linux_various/PCSX2.desktop.in ./squashfs-root/PCSX2.desktop
|
||||
sed -i -e 's|Categories=@PCSX2_MENU_CATEGORIES@|Categories=Game;Emulator;|g' ./squashfs-root/PCSX2.desktop
|
||||
sed -i -e 's|__GL_THREADED_OPTIMIZATIONS=1|__GL_THREADED_OPTIMIZATIONS=0|g' ./squashfs-root/PCSX2.desktop
|
||||
curl -sSfL "https://github.com/AppImage/AppImageKit/releases/download/continuous/runtime-$APPARCH" -o ./squashfs-root/runtime
|
||||
mkdir -p squashfs-root/usr/share/applications && cp ./squashfs-root/PCSX2.desktop ./squashfs-root/usr/share/applications
|
||||
mkdir -p squashfs-root/usr/share/icons && cp ./squashfs-root/PCSX2.png ./squashfs-root/usr/share/icons
|
||||
mkdir -p squashfs-root/usr/share/icons/hicolor/scalable/apps && cp ./squashfs-root/PCSX2.png ./squashfs-root/usr/share/icons/hicolor/scalable/apps
|
||||
mkdir -p squashfs-root/usr/share/pixmaps && cp ./squashfs-root/PCSX2.png ./squashfs-root/usr/share/pixmaps
|
||||
mkdir -p squashfs-root/usr/lib/
|
||||
mkdir -p squashfs-root/usr/optional/libstdc++
|
||||
mkdir -p squashfs-root/usr/optional/libgcc_s
|
||||
cp ./.github/workflows/scripts/linux/AppRun "$GITHUB_WORKSPACE"/squashfs-root/AppRun
|
||||
curl -sSfL "https://github.com/darealshinji/AppImageKit-checkrt/releases/download/continuous/AppRun-patched-$APPARCH" -o "$GITHUB_WORKSPACE"/squashfs-root/AppRun-patched
|
||||
curl -sSfL "https://github.com/darealshinji/AppImageKit-checkrt/releases/download/continuous/exec-$APPARCH.so" -o "$GITHUB_WORKSPACE"/squashfs-root/usr/optional/exec.so
|
||||
chmod a+x ./squashfs-root/AppRun
|
||||
chmod a+x ./squashfs-root/runtime
|
||||
chmod a+x ./squashfs-root/AppRun-patched
|
||||
chmod a+x ./squashfs-root/usr/optional/exec.so
|
||||
echo "$name" > "$GITHUB_WORKSPACE"/squashfs-root/version.txt
|
||||
mkdir -p "$GITHUB_WORKSPACE"/squashfs-root/usr/bin/app
|
||||
mkdir -p "$GITHUB_WORKSPACE"/squashfs-root/apprun-hooks
|
||||
cp -r "$GITHUB_WORKSPACE"/bin/Langs "$GITHUB_WORKSPACE"/squashfs-root/usr/bin/
|
||||
cp -r "$GITHUB_WORKSPACE"/bin/resources "$GITHUB_WORKSPACE"/squashfs-root/usr/bin/app/
|
||||
cp "$GITHUB_WORKSPACE"/bin/docs/{Configuration_Guide.pdf,PCSX2_FAQ.pdf} "$GITHUB_WORKSPACE"/squashfs-root/usr/bin/app
|
||||
cp /usr/lib/$LIBARCH/libthai.so.0 "$GITHUB_WORKSPACE"/squashfs-root/usr/lib/
|
||||
cp --dereference /usr/lib/"$LIBARCH"/libstdc++.so.6 "$GITHUB_WORKSPACE"/squashfs-root/usr/optional/libstdc++/libstdc++.so.6
|
||||
cp --dereference /lib/"$LIBARCH"/libgcc_s.so.1 "$GITHUB_WORKSPACE"/squashfs-root/usr/optional/libgcc_s/libgcc_s.so.1
|
||||
chmod +x .github/workflows/scripts/linux/app-variables.sh
|
||||
cp .github/workflows/scripts/linux/app-variables.sh "$GITHUB_WORKSPACE"/squashfs-root/apprun-hooks
|
||||
export UPD_INFO="gh-releases-zsync|PCSX2|pcsx2|latest|$name.AppImage.zsync"
|
||||
export OUTPUT="$name.AppImage"
|
||||
/tmp/squashfs-root/AppRun --appdir="$GITHUB_WORKSPACE"/squashfs-root/ --plugin gtk -d "$GITHUB_WORKSPACE"/squashfs-root/PCSX2.desktop -i "$GITHUB_WORKSPACE"/squashfs-root/PCSX2.png --output appimage
|
||||
mkdir -p "$GITHUB_WORKSPACE"/ci-artifacts/
|
||||
ls -al .
|
||||
mv "$name.AppImage" "$GITHUB_WORKSPACE"/ci-artifacts # && mv "$name.AppImage.zsync" "$GITHUB_WORKSPACE"/ci-artifacts
|
||||
chmod -R 777 ./ci-artifacts
|
||||
cd ./ci-artifacts
|
||||
ls -al .
|
||||
15
.github/workflows/scripts/linux/compile.sh
vendored
Executable file
15
.github/workflows/scripts/linux/compile.sh
vendored
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ -n "${GITHUB_ACTIONS}" ]; then
|
||||
echo "Warning: Running this script outside of GitHub Actions isn't recommended."
|
||||
fi
|
||||
|
||||
# Prepare the Cache
|
||||
ccache -p
|
||||
ccache -z
|
||||
# Build
|
||||
ninja
|
||||
# Save the Cache
|
||||
ccache -s
|
||||
33
.github/workflows/scripts/linux/generate-cmake.sh
vendored
Executable file
33
.github/workflows/scripts/linux/generate-cmake.sh
vendored
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "${COMPILER}" = "gcc" ]; then
|
||||
export CC=gcc-10
|
||||
export CXX=g++-10
|
||||
else
|
||||
export CC=clang
|
||||
export CXX=clang++
|
||||
fi
|
||||
|
||||
if [ "${PLATFORM}" = x86 ]; then
|
||||
ADDITIONAL_CMAKE_ARGS="$ADDITIONAL_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=cmake/linux-compiler-i386-multilib.cmake"
|
||||
fi
|
||||
echo "Additional CMake Args - ${ADDITIONAL_CMAKE_ARGS}"
|
||||
|
||||
# Generate CMake into ./build
|
||||
cmake \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DPACKAGE_MODE=TRUE \
|
||||
-DWAYLAND_API=TRUE \
|
||||
-DDISABLE_ADVANCE_SIMD=TRUE \
|
||||
-DCMAKE_INSTALL_LIBDIR="/tmp/" \
|
||||
-DCMAKE_INSTALL_DATADIR="/tmp/" \
|
||||
-DCMAKE_INSTALL_DOCDIR="/tmp/PCSX2" \
|
||||
-DOpenGL_GL_PREFERENCE="LEGACY" \
|
||||
-DOPENGL_opengl_LIBRARY="" \
|
||||
-DXDG_STD=TRUE \
|
||||
$ADDITIONAL_CMAKE_ARGS \
|
||||
-GNinja \
|
||||
-B build
|
||||
63
.github/workflows/scripts/linux/install-packages.sh
vendored
Executable file
63
.github/workflows/scripts/linux/install-packages.sh
vendored
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Packages - Build Environment
|
||||
declare -a BUILD_PACKAGES=(
|
||||
"ccache"
|
||||
"cmake"
|
||||
"ninja-build"
|
||||
)
|
||||
|
||||
# Packages - PCSX2
|
||||
declare -a PCSX2_PACKAGES=(
|
||||
"libaio-dev"
|
||||
"libbz2-dev"
|
||||
"libegl1-mesa-dev"
|
||||
"libgdk-pixbuf2.0-dev"
|
||||
"libgl1-mesa-dev"
|
||||
"libgtk-3-dev"
|
||||
"libharfbuzz-dev"
|
||||
"libjpeg-dev"
|
||||
"liblzma-dev"
|
||||
"libpcap0.8-dev"
|
||||
"libpng-dev"
|
||||
"libpulse-dev"
|
||||
"librsvg2-dev"
|
||||
"libsamplerate0-dev"
|
||||
"libsoundtouch-dev"
|
||||
"libudev-dev"
|
||||
"libwxgtk3.0-gtk3-dev"
|
||||
"libx11-xcb-dev"
|
||||
"libxml2-dev"
|
||||
"pkg-config"
|
||||
"portaudio19-dev"
|
||||
"zlib1g-dev"
|
||||
)
|
||||
|
||||
if [ "${COMPILER}" = "gcc" ]; then
|
||||
BUILD_PACKAGES+=("g++-10-multilib")
|
||||
else
|
||||
BUILD_PACKAGES+=("clang-9")
|
||||
PCSX2_PACKAGES+=("libstdc++-10-dev")
|
||||
fi
|
||||
|
||||
# - https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md
|
||||
ARCH=""
|
||||
echo "${PLATFORM}"
|
||||
if [ "${PLATFORM}" == "x86" ]; then
|
||||
ARCH=":i386"
|
||||
sudo dpkg --add-architecture i386
|
||||
fi
|
||||
|
||||
sudo apt-get -qq update
|
||||
|
||||
# Install packages needed for building
|
||||
echo "Will install the following packages for building - ${BUILD_PACKAGES[*]}"
|
||||
#sudo apt remove gcc-9 g++-9
|
||||
sudo apt-get -y install "${BUILD_PACKAGES[@]}"
|
||||
|
||||
# Install packages needed by pcsx2
|
||||
PCSX2_PACKAGES=("${PCSX2_PACKAGES[@]/%/"${ARCH}"}")
|
||||
echo "Will install the following packages for pcsx2 - ${PCSX2_PACKAGES[*]}"
|
||||
sudo apt-get -y install "${PCSX2_PACKAGES[@]}"
|
||||
2
.github/workflows/scripts/releases/announce-release/.gitignore
vendored
Normal file
2
.github/workflows/scripts/releases/announce-release/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
*.md
|
||||
60
.github/workflows/scripts/releases/announce-release/index.js
vendored
Normal file
60
.github/workflows/scripts/releases/announce-release/index.js
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
import { MessageEmbed, WebhookClient } from "discord.js";
|
||||
import * as github from '@actions/github';
|
||||
|
||||
const releaseInfo = github.context.payload.release;
|
||||
|
||||
if (!releaseInfo.prerelease) {
|
||||
console.log("Not announcing - release was not a pre-release (aka a Nightly)");
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
const assets = releaseInfo.assets;
|
||||
let windowsAssetLinks = "";
|
||||
let linuxAssetLinks = "";
|
||||
|
||||
for (var i = 0; i < assets.length; i++) {
|
||||
let asset = assets[i];
|
||||
if (asset.name.includes("symbols")) {
|
||||
continue;
|
||||
}
|
||||
if (asset.name.includes("windows")) {
|
||||
let friendlyName = asset.name;
|
||||
try {
|
||||
friendlyName = asset.name.split("windows-")[1].split(".7z")[0].replace("-", " ");
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
windowsAssetLinks += `- [${friendlyName}](${asset.browser_download_url})\n`
|
||||
} else if (asset.name.includes("linux")) {
|
||||
let friendlyName = asset.name;
|
||||
try {
|
||||
friendlyName = asset.name.split("linux-")[1].split(".AppImage")[0].replace("-", " ");
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
linuxAssetLinks += `- [${friendlyName}](${asset.browser_download_url})\n`
|
||||
}
|
||||
}
|
||||
|
||||
// Publish Webhook
|
||||
const embed = new MessageEmbed()
|
||||
.setColor('#FF8000')
|
||||
.setTitle('New PCSX2 Nightly Build Available!')
|
||||
.addFields(
|
||||
{ name: 'Version', value: releaseInfo.tag_name, inline: true },
|
||||
{ name: 'Release Link', value: `[Github Release](${releaseInfo.html_url})`, inline: true },
|
||||
{ name: 'Installation Steps', value: '[See Here](https://github.com/PCSX2/pcsx2/wiki/Nightly-Build-Usage-Guide)', inline: true },
|
||||
{ name: 'Included Changes', value: releaseInfo.body, inline: false }
|
||||
);
|
||||
|
||||
if (windowsAssetLinks != "") {
|
||||
embed.addField('Windows Downloads', windowsAssetLinks, false);
|
||||
}
|
||||
if (linuxAssetLinks != "") {
|
||||
embed.addField('Linux Downloads', linuxAssetLinks, false);
|
||||
}
|
||||
|
||||
const webhookClient = new WebhookClient({ url: process.env.DISCORD_BUILD_WEBHOOK });
|
||||
await webhookClient.send({
|
||||
embeds: [embed],
|
||||
});
|
||||
806
.github/workflows/scripts/releases/announce-release/package-lock.json
generated
vendored
Normal file
806
.github/workflows/scripts/releases/announce-release/package-lock.json
generated
vendored
Normal file
@@ -0,0 +1,806 @@
|
||||
{
|
||||
"name": "announce-release",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@actions/github": "^5.0.0",
|
||||
"discord.js": "^13.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/github": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.0.tgz",
|
||||
"integrity": "sha512-QvE9eAAfEsS+yOOk0cylLBIO/d6WyWIOvsxxzdrPFaud39G6BOkUwScXZn1iBzQzHyu9SBkkLSWlohDWdsasAQ==",
|
||||
"dependencies": {
|
||||
"@actions/http-client": "^1.0.11",
|
||||
"@octokit/core": "^3.4.0",
|
||||
"@octokit/plugin-paginate-rest": "^2.13.3",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/http-client": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz",
|
||||
"integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==",
|
||||
"dependencies": {
|
||||
"tunnel": "0.0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/builders": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz",
|
||||
"integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==",
|
||||
"dependencies": {
|
||||
"@sindresorhus/is": "^4.0.1",
|
||||
"discord-api-types": "^0.22.0",
|
||||
"ow": "^0.27.0",
|
||||
"ts-mixer": "^6.0.0",
|
||||
"tslib": "^2.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/builders/node_modules/discord-api-types": {
|
||||
"version": "0.22.0",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz",
|
||||
"integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/collection": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz",
|
||||
"integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/form-data": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
|
||||
"integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/auth-token": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
|
||||
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/core": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
|
||||
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
|
||||
"dependencies": {
|
||||
"@octokit/auth-token": "^2.4.4",
|
||||
"@octokit/graphql": "^4.5.8",
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/request-error": "^2.0.5",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"before-after-hook": "^2.2.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/endpoint": {
|
||||
"version": "6.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
|
||||
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/graphql": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
|
||||
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
|
||||
"dependencies": {
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/openapi-types": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz",
|
||||
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
|
||||
},
|
||||
"node_modules/@octokit/plugin-paginate-rest": {
|
||||
"version": "2.16.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz",
|
||||
"integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.33.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-rest-endpoint-methods": {
|
||||
"version": "5.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz",
|
||||
"integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.33.0",
|
||||
"deprecation": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz",
|
||||
"integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==",
|
||||
"dependencies": {
|
||||
"@octokit/endpoint": "^6.0.1",
|
||||
"@octokit/request-error": "^2.1.0",
|
||||
"@octokit/types": "^6.16.1",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request-error": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
|
||||
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"deprecation": "^2.0.0",
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/types": {
|
||||
"version": "6.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.33.0.tgz",
|
||||
"integrity": "sha512-0zffZ048M0UhthyPXQHLz4038Ak46nMWZXkzlXvXB/M/L1jYPBceq4iZj4qjKVrvveaJrrgKdJ9+3yUuITfcCw==",
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@sapphire/async-queue": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.6.tgz",
|
||||
"integrity": "sha512-M5CbgMgesemMUCQo5G/InGHvp+GZx6uuJNV1iwvSWD8EFNVrfxaTcqhcAXM3MPYkjlxvNnoDNk0R1lfzvca6LA==",
|
||||
"engines": {
|
||||
"node": ">=v14.18.0",
|
||||
"npm": ">=7.24.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@sindresorhus/is": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
|
||||
"integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sindresorhus/is?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "16.10.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz",
|
||||
"integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ=="
|
||||
},
|
||||
"node_modules/@types/ws": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz",
|
||||
"integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"node_modules/before-after-hook": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
|
||||
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
|
||||
},
|
||||
"node_modules/callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/deprecation": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
|
||||
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
|
||||
},
|
||||
"node_modules/discord-api-types": {
|
||||
"version": "0.23.1",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz",
|
||||
"integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/discord.js": {
|
||||
"version": "13.2.0",
|
||||
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.2.0.tgz",
|
||||
"integrity": "sha512-nyxUvL8wuQG38zx13wUMkpcA8koFszyiXdkSLwwM9opKW2LC2H5gD0cTZxImeJ6GtEnKPWT8xBiE8lLBmbNIhw==",
|
||||
"dependencies": {
|
||||
"@discordjs/builders": "^0.6.0",
|
||||
"@discordjs/collection": "^0.2.1",
|
||||
"@discordjs/form-data": "^3.0.1",
|
||||
"@sapphire/async-queue": "^1.1.5",
|
||||
"@types/ws": "^8.2.0",
|
||||
"discord-api-types": "^0.23.1",
|
||||
"node-fetch": "^2.6.1",
|
||||
"ws": "^8.2.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.6.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/dot-prop": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
|
||||
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
|
||||
"dependencies": {
|
||||
"is-obj": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/is-obj": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
|
||||
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-plain-object": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
|
||||
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash.isequal": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
|
||||
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.50.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
|
||||
"integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-types": {
|
||||
"version": "2.1.33",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
|
||||
"integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
|
||||
"dependencies": {
|
||||
"mime-db": "1.50.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.6.5",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"dependencies": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/ow": {
|
||||
"version": "0.27.0",
|
||||
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
|
||||
"integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==",
|
||||
"dependencies": {
|
||||
"@sindresorhus/is": "^4.0.1",
|
||||
"callsites": "^3.1.0",
|
||||
"dot-prop": "^6.0.1",
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"type-fest": "^1.2.1",
|
||||
"vali-date": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
||||
},
|
||||
"node_modules/ts-mixer": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz",
|
||||
"integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ=="
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
||||
},
|
||||
"node_modules/tunnel": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
|
||||
"engines": {
|
||||
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
|
||||
}
|
||||
},
|
||||
"node_modules/type-fest": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
|
||||
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/universal-user-agent": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
|
||||
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
|
||||
},
|
||||
"node_modules/vali-date": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
|
||||
"integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||
"dependencies": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "8.2.3",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": "^5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/github": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.0.tgz",
|
||||
"integrity": "sha512-QvE9eAAfEsS+yOOk0cylLBIO/d6WyWIOvsxxzdrPFaud39G6BOkUwScXZn1iBzQzHyu9SBkkLSWlohDWdsasAQ==",
|
||||
"requires": {
|
||||
"@actions/http-client": "^1.0.11",
|
||||
"@octokit/core": "^3.4.0",
|
||||
"@octokit/plugin-paginate-rest": "^2.13.3",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"@actions/http-client": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz",
|
||||
"integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==",
|
||||
"requires": {
|
||||
"tunnel": "0.0.6"
|
||||
}
|
||||
},
|
||||
"@discordjs/builders": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz",
|
||||
"integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==",
|
||||
"requires": {
|
||||
"@sindresorhus/is": "^4.0.1",
|
||||
"discord-api-types": "^0.22.0",
|
||||
"ow": "^0.27.0",
|
||||
"ts-mixer": "^6.0.0",
|
||||
"tslib": "^2.3.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"discord-api-types": {
|
||||
"version": "0.22.0",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz",
|
||||
"integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@discordjs/collection": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz",
|
||||
"integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog=="
|
||||
},
|
||||
"@discordjs/form-data": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
|
||||
"integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"@octokit/auth-token": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
|
||||
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3"
|
||||
}
|
||||
},
|
||||
"@octokit/core": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
|
||||
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
|
||||
"requires": {
|
||||
"@octokit/auth-token": "^2.4.4",
|
||||
"@octokit/graphql": "^4.5.8",
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/request-error": "^2.0.5",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"before-after-hook": "^2.2.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/endpoint": {
|
||||
"version": "6.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
|
||||
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/graphql": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
|
||||
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
|
||||
"requires": {
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/openapi-types": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz",
|
||||
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
|
||||
},
|
||||
"@octokit/plugin-paginate-rest": {
|
||||
"version": "2.16.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz",
|
||||
"integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.33.0"
|
||||
}
|
||||
},
|
||||
"@octokit/plugin-rest-endpoint-methods": {
|
||||
"version": "5.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz",
|
||||
"integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.33.0",
|
||||
"deprecation": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"@octokit/request": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz",
|
||||
"integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==",
|
||||
"requires": {
|
||||
"@octokit/endpoint": "^6.0.1",
|
||||
"@octokit/request-error": "^2.1.0",
|
||||
"@octokit/types": "^6.16.1",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/request-error": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
|
||||
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"deprecation": "^2.0.0",
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"@octokit/types": {
|
||||
"version": "6.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.33.0.tgz",
|
||||
"integrity": "sha512-0zffZ048M0UhthyPXQHLz4038Ak46nMWZXkzlXvXB/M/L1jYPBceq4iZj4qjKVrvveaJrrgKdJ9+3yUuITfcCw==",
|
||||
"requires": {
|
||||
"@octokit/openapi-types": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"@sapphire/async-queue": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.6.tgz",
|
||||
"integrity": "sha512-M5CbgMgesemMUCQo5G/InGHvp+GZx6uuJNV1iwvSWD8EFNVrfxaTcqhcAXM3MPYkjlxvNnoDNk0R1lfzvca6LA=="
|
||||
},
|
||||
"@sindresorhus/is": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
|
||||
"integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "16.10.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz",
|
||||
"integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ=="
|
||||
},
|
||||
"@types/ws": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz",
|
||||
"integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==",
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"before-after-hook": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
|
||||
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
|
||||
},
|
||||
"callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||
},
|
||||
"deprecation": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
|
||||
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
|
||||
},
|
||||
"discord-api-types": {
|
||||
"version": "0.23.1",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz",
|
||||
"integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ=="
|
||||
},
|
||||
"discord.js": {
|
||||
"version": "13.2.0",
|
||||
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.2.0.tgz",
|
||||
"integrity": "sha512-nyxUvL8wuQG38zx13wUMkpcA8koFszyiXdkSLwwM9opKW2LC2H5gD0cTZxImeJ6GtEnKPWT8xBiE8lLBmbNIhw==",
|
||||
"requires": {
|
||||
"@discordjs/builders": "^0.6.0",
|
||||
"@discordjs/collection": "^0.2.1",
|
||||
"@discordjs/form-data": "^3.0.1",
|
||||
"@sapphire/async-queue": "^1.1.5",
|
||||
"@types/ws": "^8.2.0",
|
||||
"discord-api-types": "^0.23.1",
|
||||
"node-fetch": "^2.6.1",
|
||||
"ws": "^8.2.3"
|
||||
}
|
||||
},
|
||||
"dot-prop": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
|
||||
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
|
||||
"requires": {
|
||||
"is-obj": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"is-obj": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
|
||||
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
|
||||
},
|
||||
"is-plain-object": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
|
||||
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
|
||||
},
|
||||
"lodash.isequal": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
|
||||
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.50.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
|
||||
"integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.33",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
|
||||
"integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
|
||||
"requires": {
|
||||
"mime-db": "1.50.0"
|
||||
}
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.5",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
||||
"requires": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"ow": {
|
||||
"version": "0.27.0",
|
||||
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
|
||||
"integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==",
|
||||
"requires": {
|
||||
"@sindresorhus/is": "^4.0.1",
|
||||
"callsites": "^3.1.0",
|
||||
"dot-prop": "^6.0.1",
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"type-fest": "^1.2.1",
|
||||
"vali-date": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
||||
},
|
||||
"ts-mixer": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz",
|
||||
"integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ=="
|
||||
},
|
||||
"tslib": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
||||
},
|
||||
"tunnel": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
|
||||
},
|
||||
"type-fest": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
|
||||
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="
|
||||
},
|
||||
"universal-user-agent": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
|
||||
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
|
||||
},
|
||||
"vali-date": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
|
||||
"integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY="
|
||||
},
|
||||
"webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
||||
},
|
||||
"whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||
"requires": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"ws": {
|
||||
"version": "8.2.3",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
|
||||
"requires": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
.github/workflows/scripts/releases/announce-release/package.json
vendored
Normal file
16
.github/workflows/scripts/releases/announce-release/package.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "announce-release",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@actions/github": "^5.0.0",
|
||||
"discord.js": "^13.2.0"
|
||||
}
|
||||
}
|
||||
2
.github/workflows/scripts/releases/generate-release-notes/.gitignore
vendored
Normal file
2
.github/workflows/scripts/releases/generate-release-notes/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
*.md
|
||||
64
.github/workflows/scripts/releases/generate-release-notes/index.js
vendored
Normal file
64
.github/workflows/scripts/releases/generate-release-notes/index.js
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
import { Octokit } from "@octokit/rest";
|
||||
import { throttling } from "@octokit/plugin-throttling";
|
||||
import { retry } from "@octokit/plugin-retry";
|
||||
Octokit.plugin(throttling);
|
||||
Octokit.plugin(retry);
|
||||
const octokit = new Octokit({
|
||||
auth: process.env.GITHUB_TOKEN,
|
||||
userAgent: 'PCSX2/pcsx2',
|
||||
log: {
|
||||
debug: () => { },
|
||||
info: () => { },
|
||||
warn: console.warn,
|
||||
error: console.error
|
||||
},
|
||||
throttle: {
|
||||
onRateLimit: (retryAfter, options) => {
|
||||
octokit.log.warn(
|
||||
`Request quota exhausted for request ${options.method} ${options.url}`
|
||||
);
|
||||
|
||||
// Retry twice after hitting a rate limit error, then give up
|
||||
if (options.request.retryCount <= 2) {
|
||||
console.log(`Retrying after ${retryAfter} seconds!`);
|
||||
return true;
|
||||
}
|
||||
},
|
||||
onAbuseLimit: (retryAfter, options) => {
|
||||
// does not retry, only logs a warning
|
||||
octokit.log.warn(
|
||||
`Abuse detected for request ${options.method} ${options.url}`
|
||||
);
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
var args = process.argv.slice(2);
|
||||
let commitSha = process.env.COMMIT_SHA;
|
||||
|
||||
console.log(`Searching for Commit - ${commitSha}`);
|
||||
|
||||
const { data: commit } = await octokit.rest.repos.getCommit({
|
||||
owner: "PCSX2",
|
||||
repo: "pcsx2",
|
||||
ref: commitSha,
|
||||
});
|
||||
|
||||
const { data: associatedPulls } = await octokit.rest.repos.listPullRequestsAssociatedWithCommit({
|
||||
owner: "PCSX2",
|
||||
repo: "pcsx2",
|
||||
commit_sha: commit.sha,
|
||||
});
|
||||
|
||||
let releaseNotes = ``;
|
||||
|
||||
if (associatedPulls.length === 0) {
|
||||
releaseNotes += `- ${commit.commit.message}\n`;
|
||||
} else {
|
||||
for (var j = 0; j < associatedPulls.length; j++) {
|
||||
releaseNotes += `- [${associatedPulls[j].title}](${associatedPulls[j].html_url})\n`;
|
||||
}
|
||||
}
|
||||
|
||||
import * as fs from 'fs';
|
||||
fs.writeFileSync('./release-notes.md', releaseNotes);
|
||||
202
.github/workflows/scripts/releases/generate-release-notes/package-lock.json
generated
vendored
Normal file
202
.github/workflows/scripts/releases/generate-release-notes/package-lock.json
generated
vendored
Normal file
@@ -0,0 +1,202 @@
|
||||
{
|
||||
"name": "generate-release-notes",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@octokit/auth-token": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
|
||||
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3"
|
||||
}
|
||||
},
|
||||
"@octokit/core": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
|
||||
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
|
||||
"requires": {
|
||||
"@octokit/auth-token": "^2.4.4",
|
||||
"@octokit/graphql": "^4.5.8",
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/request-error": "^2.0.5",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"before-after-hook": "^2.2.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/endpoint": {
|
||||
"version": "6.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
|
||||
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/graphql": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
|
||||
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
|
||||
"requires": {
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/openapi-types": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz",
|
||||
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
|
||||
},
|
||||
"@octokit/plugin-paginate-rest": {
|
||||
"version": "2.16.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz",
|
||||
"integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.33.0"
|
||||
}
|
||||
},
|
||||
"@octokit/plugin-request-log": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
|
||||
"integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA=="
|
||||
},
|
||||
"@octokit/plugin-rest-endpoint-methods": {
|
||||
"version": "5.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz",
|
||||
"integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.33.0",
|
||||
"deprecation": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"@octokit/plugin-retry": {
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz",
|
||||
"integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"bottleneck": "^2.15.3"
|
||||
}
|
||||
},
|
||||
"@octokit/plugin-throttling": {
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz",
|
||||
"integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.1",
|
||||
"bottleneck": "^2.15.3"
|
||||
}
|
||||
},
|
||||
"@octokit/request": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz",
|
||||
"integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==",
|
||||
"requires": {
|
||||
"@octokit/endpoint": "^6.0.1",
|
||||
"@octokit/request-error": "^2.1.0",
|
||||
"@octokit/types": "^6.16.1",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/request-error": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
|
||||
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"deprecation": "^2.0.0",
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"@octokit/rest": {
|
||||
"version": "18.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
|
||||
"integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
|
||||
"requires": {
|
||||
"@octokit/core": "^3.5.1",
|
||||
"@octokit/plugin-paginate-rest": "^2.16.8",
|
||||
"@octokit/plugin-request-log": "^1.0.4",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^5.12.0"
|
||||
}
|
||||
},
|
||||
"@octokit/types": {
|
||||
"version": "6.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.33.0.tgz",
|
||||
"integrity": "sha512-0zffZ048M0UhthyPXQHLz4038Ak46nMWZXkzlXvXB/M/L1jYPBceq4iZj4qjKVrvveaJrrgKdJ9+3yUuITfcCw==",
|
||||
"requires": {
|
||||
"@octokit/openapi-types": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"before-after-hook": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
|
||||
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
|
||||
},
|
||||
"bottleneck": {
|
||||
"version": "2.19.5",
|
||||
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
|
||||
"integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
|
||||
},
|
||||
"deprecation": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
|
||||
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
|
||||
},
|
||||
"is-plain-object": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
|
||||
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.5",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
||||
"requires": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
||||
},
|
||||
"universal-user-agent": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
|
||||
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
|
||||
},
|
||||
"webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
||||
},
|
||||
"whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||
"requires": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
}
|
||||
}
|
||||
}
|
||||
17
.github/workflows/scripts/releases/generate-release-notes/package.json
vendored
Normal file
17
.github/workflows/scripts/releases/generate-release-notes/package.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "generate-release-notes",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@octokit/plugin-retry": "^3.0.9",
|
||||
"@octokit/plugin-throttling": "^3.5.2",
|
||||
"@octokit/rest": "^18.12.0"
|
||||
}
|
||||
}
|
||||
2
.github/workflows/scripts/releases/upload-release-artifacts/.gitignore
vendored
Normal file
2
.github/workflows/scripts/releases/upload-release-artifacts/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
*.md
|
||||
145
.github/workflows/scripts/releases/upload-release-artifacts/index.js
vendored
Normal file
145
.github/workflows/scripts/releases/upload-release-artifacts/index.js
vendored
Normal file
@@ -0,0 +1,145 @@
|
||||
import { Octokit } from "@octokit/rest";
|
||||
import { throttling } from "@octokit/plugin-throttling";
|
||||
import { retry } from "@octokit/plugin-retry";
|
||||
Octokit.plugin(throttling);
|
||||
Octokit.plugin(retry);
|
||||
const octokit = new Octokit({
|
||||
auth: process.env.GITHUB_TOKEN,
|
||||
userAgent: 'PCSX2/pcsx2',
|
||||
log: {
|
||||
debug: () => { },
|
||||
info: () => { },
|
||||
warn: console.warn,
|
||||
error: console.error
|
||||
},
|
||||
throttle: {
|
||||
onRateLimit: (retryAfter, options) => {
|
||||
octokit.log.warn(
|
||||
`Request quota exhausted for request ${options.method} ${options.url}`
|
||||
);
|
||||
|
||||
// Retry twice after hitting a rate limit error, then give up
|
||||
if (options.request.retryCount <= 2) {
|
||||
console.log(`Retrying after ${retryAfter} seconds!`);
|
||||
return true;
|
||||
}
|
||||
},
|
||||
onAbuseLimit: (retryAfter, options) => {
|
||||
// does not retry, only logs a warning
|
||||
octokit.log.warn(
|
||||
`Abuse detected for request ${options.method} ${options.url}`
|
||||
);
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
let assetDir = process.env.ASSET_DIR;
|
||||
let tagToSearchFor = process.env.TAG_TO_SEARCH_FOR.split("refs/tags/")[1];
|
||||
|
||||
console.log(`Searching in - ${assetDir}`);
|
||||
console.log(`Searching for tag - ${tagToSearchFor}`);
|
||||
|
||||
const { data: recentReleases } = await octokit.rest.repos.listReleases({
|
||||
owner: "PCSX2",
|
||||
repo: "pcsx2",
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
let release = undefined;
|
||||
for (var i = 0; i < recentReleases.length; i++) {
|
||||
if (recentReleases[i].tag_name == tagToSearchFor) {
|
||||
release = recentReleases[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (release == undefined) {
|
||||
console.log(`Unable to find release with tag - ${tagToSearchFor}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Upload any assets we need to, don't upload assets that are already there!
|
||||
const { data: releaseAssetsPre } = await octokit.rest.repos.listReleaseAssets({
|
||||
owner: "PCSX2",
|
||||
repo: "pcsx2",
|
||||
release_id: release.id,
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
import glob from 'glob';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
glob(assetDir + `/**/*${process.env.ASSET_EXTENSION}`, {}, async (err, files) => {
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
let foundDuplicate = false;
|
||||
for (var j = 0; j < releaseAssetsPre.length; j++) {
|
||||
let existingAsset = releaseAssetsPre[j];
|
||||
if (existingAsset.name == `pcsx2-${release.tag_name}-${path.basename(files[i])}`) {
|
||||
foundDuplicate = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (foundDuplicate) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var assetBytes = fs.readFileSync(files[i], null);
|
||||
const { data: uploadAsset } = await octokit.rest.repos.uploadReleaseAsset({
|
||||
owner: "PCSX2",
|
||||
repo: "pcsx2",
|
||||
release_id: release.id,
|
||||
name: `pcsx2-${release.tag_name}-${path.basename(files[i])}`,
|
||||
data: assetBytes,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Ideally there would be a webhook event for when an artifact is added to a draft release
|
||||
// unfortunately, such a thing does not exist yet. Therefore, we have to wait a bit
|
||||
// for the API to become consistent
|
||||
// TODO - future work - we could check previous draft releases to become eventually consistent as well
|
||||
// - draft releases should only be a temporary state, so anything that remains a draft had a problem
|
||||
await new Promise(resolve => setTimeout(resolve, 10 * 1000));
|
||||
|
||||
// Poll the release, and check to see if it's ready to be published
|
||||
const { data: releaseAssetsPost } = await octokit.rest.repos.listReleaseAssets({
|
||||
owner: "PCSX2",
|
||||
repo: "pcsx2",
|
||||
release_id: release.id,
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
// Expected Assets, if we have all of them, we will publish it
|
||||
let expectedAssets = {
|
||||
"windows-32bit-sse4": false,
|
||||
"windows-32bit-avx2": false,
|
||||
"windows-64bit-sse4": false,
|
||||
"windows-64bit-avx2": false,
|
||||
"linux-appimage-32bit": false,
|
||||
"linux-appimage-64bit": false
|
||||
}
|
||||
|
||||
for (var i = 0; i < releaseAssetsPost.length; i++) {
|
||||
let asset = releaseAssetsPost[i];
|
||||
if (asset.name.includes("symbols")) {
|
||||
continue;
|
||||
}
|
||||
for (var j = 0; j < Object.keys(expectedAssets).length; j++) {
|
||||
let expectedNamePrefix = Object.keys(expectedAssets)[j];
|
||||
if (asset.name.toLowerCase().includes(expectedNamePrefix)) {
|
||||
expectedAssets[expectedNamePrefix] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(expectedAssets);
|
||||
|
||||
if (Object.values(expectedAssets).every(Boolean)) {
|
||||
await octokit.rest.repos.updateRelease({
|
||||
owner: "PCSX2",
|
||||
repo: "pcsx2",
|
||||
release_id: release.id,
|
||||
draft: false
|
||||
});
|
||||
}
|
||||
973
.github/workflows/scripts/releases/upload-release-artifacts/package-lock.json
generated
vendored
Normal file
973
.github/workflows/scripts/releases/upload-release-artifacts/package-lock.json
generated
vendored
Normal file
@@ -0,0 +1,973 @@
|
||||
{
|
||||
"name": "upload-release-artifacts",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@octokit/plugin-retry": "^3.0.9",
|
||||
"@octokit/plugin-throttling": "^3.5.2",
|
||||
"@octokit/rest": "^18.12.0",
|
||||
"discord.js": "^13.2.0",
|
||||
"glob": "^7.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/builders": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz",
|
||||
"integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==",
|
||||
"dependencies": {
|
||||
"@sindresorhus/is": "^4.0.1",
|
||||
"discord-api-types": "^0.22.0",
|
||||
"ow": "^0.27.0",
|
||||
"ts-mixer": "^6.0.0",
|
||||
"tslib": "^2.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/builders/node_modules/discord-api-types": {
|
||||
"version": "0.22.0",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz",
|
||||
"integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/collection": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz",
|
||||
"integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/form-data": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
|
||||
"integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/auth-token": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
|
||||
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/core": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
|
||||
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
|
||||
"dependencies": {
|
||||
"@octokit/auth-token": "^2.4.4",
|
||||
"@octokit/graphql": "^4.5.8",
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/request-error": "^2.0.5",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"before-after-hook": "^2.2.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/endpoint": {
|
||||
"version": "6.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
|
||||
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/graphql": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
|
||||
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
|
||||
"dependencies": {
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/openapi-types": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz",
|
||||
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
|
||||
},
|
||||
"node_modules/@octokit/plugin-paginate-rest": {
|
||||
"version": "2.16.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz",
|
||||
"integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.33.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-request-log": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
|
||||
"integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA=="
|
||||
},
|
||||
"node_modules/@octokit/plugin-rest-endpoint-methods": {
|
||||
"version": "5.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz",
|
||||
"integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.33.0",
|
||||
"deprecation": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-retry": {
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz",
|
||||
"integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"bottleneck": "^2.15.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-throttling": {
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz",
|
||||
"integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.1",
|
||||
"bottleneck": "^2.15.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz",
|
||||
"integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==",
|
||||
"dependencies": {
|
||||
"@octokit/endpoint": "^6.0.1",
|
||||
"@octokit/request-error": "^2.1.0",
|
||||
"@octokit/types": "^6.16.1",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request-error": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
|
||||
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"deprecation": "^2.0.0",
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest": {
|
||||
"version": "18.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
|
||||
"integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
|
||||
"dependencies": {
|
||||
"@octokit/core": "^3.5.1",
|
||||
"@octokit/plugin-paginate-rest": "^2.16.8",
|
||||
"@octokit/plugin-request-log": "^1.0.4",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^5.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/types": {
|
||||
"version": "6.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.33.0.tgz",
|
||||
"integrity": "sha512-0zffZ048M0UhthyPXQHLz4038Ak46nMWZXkzlXvXB/M/L1jYPBceq4iZj4qjKVrvveaJrrgKdJ9+3yUuITfcCw==",
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@sapphire/async-queue": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.6.tgz",
|
||||
"integrity": "sha512-M5CbgMgesemMUCQo5G/InGHvp+GZx6uuJNV1iwvSWD8EFNVrfxaTcqhcAXM3MPYkjlxvNnoDNk0R1lfzvca6LA==",
|
||||
"engines": {
|
||||
"node": ">=v14.18.0",
|
||||
"npm": ">=7.24.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@sindresorhus/is": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
|
||||
"integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sindresorhus/is?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "16.10.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz",
|
||||
"integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ=="
|
||||
},
|
||||
"node_modules/@types/ws": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz",
|
||||
"integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"node_modules/balanced-match": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||
},
|
||||
"node_modules/before-after-hook": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
|
||||
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
|
||||
},
|
||||
"node_modules/bottleneck": {
|
||||
"version": "2.19.5",
|
||||
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
|
||||
"integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/deprecation": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
|
||||
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
|
||||
},
|
||||
"node_modules/discord-api-types": {
|
||||
"version": "0.23.1",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz",
|
||||
"integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/discord.js": {
|
||||
"version": "13.2.0",
|
||||
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.2.0.tgz",
|
||||
"integrity": "sha512-nyxUvL8wuQG38zx13wUMkpcA8koFszyiXdkSLwwM9opKW2LC2H5gD0cTZxImeJ6GtEnKPWT8xBiE8lLBmbNIhw==",
|
||||
"dependencies": {
|
||||
"@discordjs/builders": "^0.6.0",
|
||||
"@discordjs/collection": "^0.2.1",
|
||||
"@discordjs/form-data": "^3.0.1",
|
||||
"@sapphire/async-queue": "^1.1.5",
|
||||
"@types/ws": "^8.2.0",
|
||||
"discord-api-types": "^0.23.1",
|
||||
"node-fetch": "^2.6.1",
|
||||
"ws": "^8.2.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.6.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/dot-prop": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
|
||||
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
|
||||
"dependencies": {
|
||||
"is-obj": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
||||
},
|
||||
"node_modules/glob": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
|
||||
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
|
||||
"dependencies": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/inflight": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||
"dependencies": {
|
||||
"once": "^1.3.0",
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"node_modules/is-obj": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
|
||||
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-plain-object": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
|
||||
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash.isequal": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
|
||||
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.50.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
|
||||
"integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-types": {
|
||||
"version": "2.1.33",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
|
||||
"integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
|
||||
"dependencies": {
|
||||
"mime-db": "1.50.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.6.5",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"dependencies": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/ow": {
|
||||
"version": "0.27.0",
|
||||
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
|
||||
"integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==",
|
||||
"dependencies": {
|
||||
"@sindresorhus/is": "^4.0.1",
|
||||
"callsites": "^3.1.0",
|
||||
"dot-prop": "^6.0.1",
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"type-fest": "^1.2.1",
|
||||
"vali-date": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
||||
},
|
||||
"node_modules/ts-mixer": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz",
|
||||
"integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ=="
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
||||
},
|
||||
"node_modules/type-fest": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
|
||||
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/universal-user-agent": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
|
||||
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
|
||||
},
|
||||
"node_modules/vali-date": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
|
||||
"integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||
"dependencies": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "8.2.3",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": "^5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@discordjs/builders": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz",
|
||||
"integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==",
|
||||
"requires": {
|
||||
"@sindresorhus/is": "^4.0.1",
|
||||
"discord-api-types": "^0.22.0",
|
||||
"ow": "^0.27.0",
|
||||
"ts-mixer": "^6.0.0",
|
||||
"tslib": "^2.3.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"discord-api-types": {
|
||||
"version": "0.22.0",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz",
|
||||
"integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@discordjs/collection": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz",
|
||||
"integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog=="
|
||||
},
|
||||
"@discordjs/form-data": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
|
||||
"integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"@octokit/auth-token": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
|
||||
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3"
|
||||
}
|
||||
},
|
||||
"@octokit/core": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
|
||||
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
|
||||
"requires": {
|
||||
"@octokit/auth-token": "^2.4.4",
|
||||
"@octokit/graphql": "^4.5.8",
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/request-error": "^2.0.5",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"before-after-hook": "^2.2.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/endpoint": {
|
||||
"version": "6.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
|
||||
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/graphql": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
|
||||
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
|
||||
"requires": {
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/openapi-types": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz",
|
||||
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
|
||||
},
|
||||
"@octokit/plugin-paginate-rest": {
|
||||
"version": "2.16.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz",
|
||||
"integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.33.0"
|
||||
}
|
||||
},
|
||||
"@octokit/plugin-request-log": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
|
||||
"integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA=="
|
||||
},
|
||||
"@octokit/plugin-rest-endpoint-methods": {
|
||||
"version": "5.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz",
|
||||
"integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.33.0",
|
||||
"deprecation": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"@octokit/plugin-retry": {
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz",
|
||||
"integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"bottleneck": "^2.15.3"
|
||||
}
|
||||
},
|
||||
"@octokit/plugin-throttling": {
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz",
|
||||
"integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.1",
|
||||
"bottleneck": "^2.15.3"
|
||||
}
|
||||
},
|
||||
"@octokit/request": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz",
|
||||
"integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==",
|
||||
"requires": {
|
||||
"@octokit/endpoint": "^6.0.1",
|
||||
"@octokit/request-error": "^2.1.0",
|
||||
"@octokit/types": "^6.16.1",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@octokit/request-error": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
|
||||
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
|
||||
"requires": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"deprecation": "^2.0.0",
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"@octokit/rest": {
|
||||
"version": "18.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
|
||||
"integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
|
||||
"requires": {
|
||||
"@octokit/core": "^3.5.1",
|
||||
"@octokit/plugin-paginate-rest": "^2.16.8",
|
||||
"@octokit/plugin-request-log": "^1.0.4",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^5.12.0"
|
||||
}
|
||||
},
|
||||
"@octokit/types": {
|
||||
"version": "6.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.33.0.tgz",
|
||||
"integrity": "sha512-0zffZ048M0UhthyPXQHLz4038Ak46nMWZXkzlXvXB/M/L1jYPBceq4iZj4qjKVrvveaJrrgKdJ9+3yUuITfcCw==",
|
||||
"requires": {
|
||||
"@octokit/openapi-types": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"@sapphire/async-queue": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.6.tgz",
|
||||
"integrity": "sha512-M5CbgMgesemMUCQo5G/InGHvp+GZx6uuJNV1iwvSWD8EFNVrfxaTcqhcAXM3MPYkjlxvNnoDNk0R1lfzvca6LA=="
|
||||
},
|
||||
"@sindresorhus/is": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
|
||||
"integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "16.10.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz",
|
||||
"integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ=="
|
||||
},
|
||||
"@types/ws": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz",
|
||||
"integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==",
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||
},
|
||||
"before-after-hook": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
|
||||
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
|
||||
},
|
||||
"bottleneck": {
|
||||
"version": "2.19.5",
|
||||
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
|
||||
"integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||
},
|
||||
"deprecation": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
|
||||
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
|
||||
},
|
||||
"discord-api-types": {
|
||||
"version": "0.23.1",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz",
|
||||
"integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ=="
|
||||
},
|
||||
"discord.js": {
|
||||
"version": "13.2.0",
|
||||
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.2.0.tgz",
|
||||
"integrity": "sha512-nyxUvL8wuQG38zx13wUMkpcA8koFszyiXdkSLwwM9opKW2LC2H5gD0cTZxImeJ6GtEnKPWT8xBiE8lLBmbNIhw==",
|
||||
"requires": {
|
||||
"@discordjs/builders": "^0.6.0",
|
||||
"@discordjs/collection": "^0.2.1",
|
||||
"@discordjs/form-data": "^3.0.1",
|
||||
"@sapphire/async-queue": "^1.1.5",
|
||||
"@types/ws": "^8.2.0",
|
||||
"discord-api-types": "^0.23.1",
|
||||
"node-fetch": "^2.6.1",
|
||||
"ws": "^8.2.3"
|
||||
}
|
||||
},
|
||||
"dot-prop": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
|
||||
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
|
||||
"requires": {
|
||||
"is-obj": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
|
||||
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"inflight": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||
"requires": {
|
||||
"once": "^1.3.0",
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"is-obj": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
|
||||
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
|
||||
},
|
||||
"is-plain-object": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
|
||||
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
|
||||
},
|
||||
"lodash.isequal": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
|
||||
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.50.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
|
||||
"integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.33",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
|
||||
"integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
|
||||
"requires": {
|
||||
"mime-db": "1.50.0"
|
||||
}
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.5",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
|
||||
"integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
|
||||
"requires": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"ow": {
|
||||
"version": "0.27.0",
|
||||
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
|
||||
"integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==",
|
||||
"requires": {
|
||||
"@sindresorhus/is": "^4.0.1",
|
||||
"callsites": "^3.1.0",
|
||||
"dot-prop": "^6.0.1",
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"type-fest": "^1.2.1",
|
||||
"vali-date": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
||||
},
|
||||
"tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
||||
},
|
||||
"ts-mixer": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz",
|
||||
"integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ=="
|
||||
},
|
||||
"tslib": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
||||
},
|
||||
"type-fest": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
|
||||
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="
|
||||
},
|
||||
"universal-user-agent": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
|
||||
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
|
||||
},
|
||||
"vali-date": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
|
||||
"integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY="
|
||||
},
|
||||
"webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
||||
},
|
||||
"whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||
"requires": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"ws": {
|
||||
"version": "8.2.3",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
|
||||
"requires": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
18
.github/workflows/scripts/releases/upload-release-artifacts/package.json
vendored
Normal file
18
.github/workflows/scripts/releases/upload-release-artifacts/package.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "upload-release-artifacts",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@octokit/plugin-retry": "^3.0.9",
|
||||
"@octokit/plugin-throttling": "^3.5.2",
|
||||
"@octokit/rest": "^18.12.0",
|
||||
"glob": "^7.2.0"
|
||||
}
|
||||
}
|
||||
199
.github/workflows/scripts/validation/lint-gamedb/lint-gamedb.py
vendored
Normal file
199
.github/workflows/scripts/validation/lint-gamedb/lint-gamedb.py
vendored
Normal file
@@ -0,0 +1,199 @@
|
||||
import yaml
|
||||
|
||||
# Assumes this is ran from the root of the repository
|
||||
file_path = "./bin/resources/GameIndex.yaml"
|
||||
|
||||
# These settings have to be manually kept in sync with the emulator code unfortunately.
|
||||
# up to date validation should ALWAYS be provided via the application!
|
||||
allowed_game_options = [
|
||||
"name",
|
||||
"region",
|
||||
"compat",
|
||||
"roundModes",
|
||||
"clampModes",
|
||||
"gameFixes",
|
||||
"speedHacks",
|
||||
"memcardFilters",
|
||||
"patches",
|
||||
]
|
||||
allowed_round_modes = ["eeRoundMode", "vuRoundMode"]
|
||||
allowed_clamp_modes = ["eeClampMode", "vuClampMode"]
|
||||
allowed_game_fixes = [
|
||||
"VuAddSubHack",
|
||||
"FpuCompareHack",
|
||||
"FpuMulHack",
|
||||
"FpuNegDivHack",
|
||||
"XGKickHack",
|
||||
"EETimingHack",
|
||||
"SkipMPEGHack",
|
||||
"OPHFlagHack",
|
||||
"DMABusyHack",
|
||||
"VIFFIFOHack",
|
||||
"VIF1StallHack",
|
||||
"GIFFIFOHack",
|
||||
"GoemonTlbHack",
|
||||
"VUKickstartHack",
|
||||
"IbitHack",
|
||||
"VUOverflowHack",
|
||||
]
|
||||
allowed_speed_hacks = ["mvuFlagSpeedHack", "InstantVU1SpeedHack"]
|
||||
# Patches are allowed to have a 'default' key or a crc-32 key, followed by
|
||||
allowed_patch_options = ["author", "content"]
|
||||
|
||||
issue_list = []
|
||||
|
||||
|
||||
def is_hex_number(string):
|
||||
try:
|
||||
int(string, 16)
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def validate_string_option(serial, key, value):
|
||||
if not isinstance(value, str):
|
||||
issue_list.append("[{}]: '{}' must be a string".format(serial, key))
|
||||
|
||||
|
||||
def validate_int_option(serial, key, value, low, high):
|
||||
if not isinstance(value, int) or (value < low or value > high):
|
||||
issue_list.append(
|
||||
"[{}]: '{}' must be an int and between {}-{} (inclusive)".format(
|
||||
serial, key, low, high
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def validate_list_of_strings(serial, key, value):
|
||||
if not isinstance(value, list) or not all(isinstance(item, str) for item in value):
|
||||
issue_list.append("[{}]: '{}' must be a list of strings".format(serial, key))
|
||||
|
||||
|
||||
def validate_valid_options(serial, key, value, allowed_values):
|
||||
if value not in allowed_values:
|
||||
issue_list.append("[{}]: Invalid '{}' option [{}]".format(serial, key, value))
|
||||
|
||||
|
||||
def validate_clamp_round_modes(serial, key, value, allowed_values):
|
||||
if not isinstance(value, dict):
|
||||
issue_list.append("[{}]: '{}' must be a valid object".format(serial, key))
|
||||
return
|
||||
for mode_key, mode_value in value.items():
|
||||
validate_valid_options(serial, key, mode_key, allowed_values)
|
||||
validate_int_option(serial, key, mode_value, 0, 3)
|
||||
|
||||
|
||||
def validate_game_fixes(serial, key, value):
|
||||
if not isinstance(value, list):
|
||||
issue_list.append(
|
||||
"[{}]: 'gameFixes' must be a list of valid gameFixes".format(serial)
|
||||
)
|
||||
return
|
||||
for gamefix in value:
|
||||
validate_valid_options(serial, key, gamefix, allowed_game_fixes)
|
||||
|
||||
|
||||
def validate_speed_hacks(serial, key, value):
|
||||
if not isinstance(value, dict):
|
||||
issue_list.append("[{}]: 'speedHacks' must be a valid object".format(serial))
|
||||
return
|
||||
for speedhack, speedhack_value in value.items():
|
||||
validate_valid_options(serial, key, speedhack, allowed_speed_hacks)
|
||||
validate_int_option(serial, speedhack, speedhack_value, 0, 1)
|
||||
|
||||
|
||||
def validate_patches(serial, key, value):
|
||||
if not isinstance(value, dict):
|
||||
issue_list.append(
|
||||
"[{}]: 'patches' must be valid mapping of CRC32 -> Patch Objects".format(
|
||||
serial
|
||||
)
|
||||
)
|
||||
return
|
||||
for crc, patch in value.items():
|
||||
if crc != "default" and not is_hex_number(str(crc)):
|
||||
issue_list.append(
|
||||
"[{}]: Patches must either be key'd with 'default' or a valid CRC-32 Hex String".format(
|
||||
serial
|
||||
)
|
||||
)
|
||||
continue
|
||||
for patch_option, option_value in patch.items():
|
||||
validate_valid_options(serial, key, patch_option, allowed_patch_options)
|
||||
if patch_option == "author":
|
||||
validate_string_option(serial, patch_option, option_value)
|
||||
if patch_option == "content":
|
||||
validate_string_option(serial, patch_option, option_value)
|
||||
|
||||
|
||||
# pylint:disable=unnecessary-lambda
|
||||
option_validation_handlers = {
|
||||
"name": (lambda serial, key, value: validate_string_option(serial, key, value)),
|
||||
"region": (lambda serial, key, value: validate_string_option(serial, key, value)),
|
||||
"compat": (
|
||||
lambda serial, key, value: validate_int_option(serial, key, value, 0, 6)
|
||||
),
|
||||
"roundModes": (
|
||||
lambda serial, key, value: validate_clamp_round_modes(
|
||||
serial, key, value, allowed_round_modes
|
||||
)
|
||||
),
|
||||
"clampModes": (
|
||||
lambda serial, key, value: validate_clamp_round_modes(
|
||||
serial, key, value, allowed_clamp_modes
|
||||
)
|
||||
),
|
||||
"gameFixes": (lambda serial, key, value: validate_game_fixes(serial, key, value)),
|
||||
"speedHacks": (lambda serial, key, value: validate_speed_hacks(serial, key, value)),
|
||||
"memcardFilters": (
|
||||
lambda serial, key, value: validate_list_of_strings(serial, key, value)
|
||||
),
|
||||
"patches": (lambda serial, key, value: validate_patches(serial, key, value)),
|
||||
}
|
||||
|
||||
print("Opening {}...".format(file_path))
|
||||
with open(file_path) as f:
|
||||
try:
|
||||
print("Attempting to parse GameDB file...")
|
||||
gamedb = yaml.load(f, Loader=yaml.FullLoader)
|
||||
except Exception as err:
|
||||
print(err)
|
||||
print(
|
||||
"Unable to parse GameDB. Exiting, verify that the file indeed is valid YAML."
|
||||
)
|
||||
exit(1)
|
||||
|
||||
print("File loaded successfully, validating schema...")
|
||||
progress_counter = 0
|
||||
for serial, game_options in gamedb.items():
|
||||
progress_counter = progress_counter + 1
|
||||
if progress_counter % 500 == 0 or progress_counter >= len(gamedb.items()):
|
||||
print(
|
||||
"[{}/{}] Processing GameDB Entries...".format(
|
||||
progress_counter, len(gamedb.items())
|
||||
)
|
||||
)
|
||||
|
||||
# Check for required values
|
||||
if not "name" in game_options.keys():
|
||||
issue_list.append("[{}]: 'name' is a required value".format(serial))
|
||||
if not "region" in game_options.keys():
|
||||
issue_list.append("[{}]: 'region' is a required value".format(serial))
|
||||
|
||||
# Check the options
|
||||
for key, value in game_options.items():
|
||||
if key not in allowed_game_options:
|
||||
issue_list.append("[{}]: Invalid option [{}]".format(serial, key))
|
||||
continue
|
||||
|
||||
if key in option_validation_handlers:
|
||||
option_validation_handlers[key](serial, key, value)
|
||||
|
||||
if len(issue_list) > 0:
|
||||
print("Issues found during validation:")
|
||||
print(*issue_list, sep="\n")
|
||||
exit(1)
|
||||
else:
|
||||
print("GameDB Validated Successfully!")
|
||||
exit(0)
|
||||
1
.github/workflows/scripts/validation/lint-gamedb/requirements.txt
vendored
Normal file
1
.github/workflows/scripts/validation/lint-gamedb/requirements.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
PyYAML==5.4.1
|
||||
19
.github/workflows/scripts/windows/validate-vs-filters.ps1
vendored
Normal file
19
.github/workflows/scripts/windows/validate-vs-filters.ps1
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
$filterFiles = Get-ChildItem $PWD -name -recurse *.vcxproj.filters
|
||||
|
||||
$failed = $FALSE
|
||||
foreach ($file in $filterFiles) {
|
||||
# Skip 3rdparty files
|
||||
if ($file -NotMatch "^3rdparty") {
|
||||
$expression = "python -c `"import sys, xml.dom.minidom as d; d.parse(sys.argv[1])`" $($file)"
|
||||
$expression += ';$LastExitCode'
|
||||
$exitCode = Invoke-Expression $expression
|
||||
if($exitCode -ne 0){
|
||||
Write-Host -foregroundColor red "$($file) - Invalid VS filters file. Likely missing tags"
|
||||
$failed = $TRUE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($failed) {
|
||||
exit 1
|
||||
}
|
||||
29
.github/workflows/update-controller-db.yml
vendored
Normal file
29
.github/workflows/update-controller-db.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
name: 🏭 Update Controller Database
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 16 * * 1" # every monday @ 12pm EST - https://crontab.guru/#0_16_*_*_1
|
||||
|
||||
jobs:
|
||||
update-controller-db:
|
||||
if: github.repository == 'PCSX2/pcsx2'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Get Latest DB and Prepare DB File
|
||||
run: |
|
||||
cd .github/workflows/scripts/controller-db/
|
||||
wget -O game_controller_db.txt https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt
|
||||
python ./update-db.py
|
||||
mv ./game_controller_db.txt ${{github.workspace}}/bin/resources/game_controller_db.txt
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v3
|
||||
with:
|
||||
title: "pad-linux: Update to latest controller database"
|
||||
commit-message: "pad-linux: Update to latest controller database."
|
||||
committer: "PCSX2 Bot <PCSX2Bot@users.noreply.github.com>"
|
||||
author: "PCSX2 Bot <PCSX2Bot@users.noreply.github.com>"
|
||||
body: "Weekly automatic update of SDL Controller DB for Linux / Mac OS"
|
||||
reviewers: lightningterror
|
||||
191
.github/workflows/windows-workflow.yml
vendored
Normal file
191
.github/workflows/windows-workflow.yml
vendored
Normal file
@@ -0,0 +1,191 @@
|
||||
name: 🖥️ Windows Builds
|
||||
|
||||
# Controls when the action will run. Triggers the workflow on push or pull request
|
||||
# events but only for the master branch
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- v*
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths-ignore:
|
||||
- '**/*.md'
|
||||
- '.clang-format'
|
||||
- '.codacy.yaml'
|
||||
- '.github/*'
|
||||
- '.github/workflows/lint-gamedb.yml'
|
||||
- '.github/workflows/linux-workflow.yml'
|
||||
- '.github/workflows/macos-workflow.yml'
|
||||
- '.github/workflows/scripts/linux/**'
|
||||
- '.github/workflows/scripts/validation/**'
|
||||
- '.gitignore'
|
||||
- 'bin/PCSX2_keys.ini.default'
|
||||
- 'build.sh'
|
||||
- 'buildbot.xml'
|
||||
- 'linux_various/**'
|
||||
- 'mscompile.cmd'
|
||||
- 'pcsx2/CDVD/Linux/**'
|
||||
- 'pcsx2/DEV9/Linux/**'
|
||||
- 'pcsx2/Linux/**'
|
||||
- 'pcsx2/PAD/Linux/**'
|
||||
- 'pcsx2/SPU2/Linux/**'
|
||||
- 'pcsx2/USB/linux/**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
# Prevent one build from failing everything (although maybe those should be included as experimental builds instead)
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [windows-2019]
|
||||
platform: [Win32, x64]
|
||||
configuration: [Release, Release AVX2, CMake]
|
||||
experimental: [false]
|
||||
|
||||
name: ${{ matrix.platform }} | ${{ matrix.configuration }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
continue-on-error: ${{ matrix.experimental }}
|
||||
# Set some sort of timeout in the event of run-away builds. We are limited on concurrent jobs so, get rid of them.
|
||||
timeout-minutes: 60
|
||||
|
||||
env:
|
||||
POWERSHELL_TELEMETRY_OPTOUT: 1
|
||||
BUILDCACHE_COMPRESS_FORMAT: ZSTD
|
||||
BUILDCACHE_COMPRESS_LEVEL: 9
|
||||
BUILDCACHE_MAX_CACHE_SIZE: 536870912 # 512MB
|
||||
BUILDCACHE_DIRECT_MODE: true
|
||||
BUILDCACHE_LOG_FILE: ${{ github.workspace }}\buildcache.log
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Checkout Submodules
|
||||
run: git submodule update --init --recursive -j $env:NUMBER_OF_PROCESSORS
|
||||
|
||||
- name: Setup Buildcache
|
||||
uses: mikehardy/buildcache-action@v1.2.2
|
||||
with:
|
||||
cache_key: ${{ matrix.os }} ${{ matrix.platform }} ${{ matrix.configuration }}
|
||||
if: matrix.configuration == 'CMake' # TODO: buildcache on VS
|
||||
|
||||
- name: Verify VS Project Files
|
||||
run: .github\workflows\scripts\windows\validate-vs-filters.ps1
|
||||
if: matrix.configuration != 'CMake'
|
||||
|
||||
- name: Setup msbuild
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
if: matrix.configuration != 'CMake'
|
||||
|
||||
- name: Generate CMake
|
||||
id: cmake
|
||||
shell: cmd
|
||||
run: |
|
||||
if "${{ github.event.inputs.retainDebugArtifacts }}"=="true" (SET type=RelWithDebInfo) else (SET type=Release)
|
||||
if "${{ matrix.platform }}"=="Win32" (SET vcvars=vcvarsamd64_x86.bat) else (SET vcvars=vcvars64.bat)
|
||||
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\%vcvars%"
|
||||
echo ::set-output name=buildtype::%type%
|
||||
echo ::set-output name=vcvars::%vcvars%
|
||||
cmake . -B build -DCMAKE_BUILD_TYPE=%type% -DLTO_PCSX2_CORE=ON -G Ninja -DCMAKE_C_COMPILER_LAUNCHER=..\buildcache\bin\buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER=..\buildcache\bin\buildcache.exe -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON
|
||||
if: matrix.configuration == 'CMake'
|
||||
|
||||
- name: Build PCSX2
|
||||
shell: cmd
|
||||
env:
|
||||
# Set to 'true' to retain the .pdb / .exp / .lib, etc files which can be useful for repro'ing issues that only occur in the compiled .exe
|
||||
RetainDebuggingArtifacts: ${{ github.event.inputs.retainDebugArtifacts == 'true' }}
|
||||
run: |
|
||||
if "${{ matrix.configuration }}"=="CMake" (
|
||||
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\${{ steps.cmake.outputs.vcvars }}"
|
||||
cmake --build build --config ${{ steps.cmake.outputs.buildtype }}
|
||||
) else (
|
||||
msbuild "PCSX2_suite.sln" /m /v:m /p:Configuration="${{ matrix.configuration }}" /p:Platform="${{ matrix.platform }}"
|
||||
)
|
||||
|
||||
- name: Run Tests
|
||||
shell: cmd
|
||||
run: |
|
||||
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\${{ steps.cmake.outputs.vcvars }}"
|
||||
cmake --build build --config ${{ steps.cmake.outputs.buildtype }} --target unittests
|
||||
if: matrix.configuration == 'CMake'
|
||||
|
||||
- name: Prepare Artifact Metadata
|
||||
id: artifact-metadata
|
||||
shell: bash
|
||||
run: |
|
||||
ARCH=$([ "${{ matrix.platform }}" == Win32 ] && echo "32bit" || echo "64bit")
|
||||
case "${{ matrix.configuration }}" in
|
||||
Release) SIMD="SSE4";;
|
||||
*AVX2) SIMD="AVX2";;
|
||||
CMake) SIMD="CMake"
|
||||
cp build/pcsx2/pcsx2* bin/ ;;
|
||||
*) SIMD="UNKNOWN";;
|
||||
esac
|
||||
if [ ${{ github.event_name }} == "pull_request" ]; then
|
||||
PR_SHA=$(git rev-parse --short "${{ github.event.pull_request.head.sha }}")
|
||||
ARTIFACT_NAME="PCSX2-${ARCH}-${SIMD}"
|
||||
if [ ! -z "${{ github.event.pull_request.number }}" ]; then
|
||||
PR_NUM=${{ github.event.pull_request.number }}
|
||||
ARTIFACT_NAME="${ARTIFACT_NAME}-pr[${PR_NUM}]"
|
||||
fi
|
||||
ARTIFACT_NAME="${ARTIFACT_NAME}-sha[${PR_SHA}]"
|
||||
if [ ! -z "${{ github.event.pull_request.title }}" ]; then
|
||||
PR_TITLE=$(echo "${{ github.event.pull_request.title }}" | tr -cd '[a-zA-Z0-9[:space:]]_-')
|
||||
ARTIFACT_NAME="${ARTIFACT_NAME}-title["${PR_TITLE}""
|
||||
fi
|
||||
else
|
||||
SHA=$(git rev-parse --short "$GITHUB_SHA")
|
||||
ARTIFACT_NAME="PCSX2-${ARCH}-${SIMD}-sha[${SHA}"
|
||||
fi
|
||||
TRIMMED_ARTIFACT_NAME=$(printf "%.199s]" "$ARTIFACT_NAME")
|
||||
echo "name=$TRIMMED_ARTIFACT_NAME"
|
||||
echo "##[set-output name=name;]${TRIMMED_ARTIFACT_NAME}"
|
||||
echo "##[set-output name=arch;]${ARCH}"
|
||||
echo "##[set-output name=simd;]${SIMD}"
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: ${{ steps.artifact-metadata.outputs.name }}
|
||||
path: |
|
||||
./bin
|
||||
!./bin/**/*.bsc
|
||||
!./bin/**/*.exp
|
||||
!./bin/**/*.ilk
|
||||
!./bin/**/*.iobj
|
||||
!./bin/**/*.ipdb
|
||||
!./bin/**/*.pdb
|
||||
!./bin/**/*.lib
|
||||
|
||||
- name: Upload artifact - with symbols
|
||||
if: matrix.configuration != 'CMake'
|
||||
uses: actions/upload-artifact@v2
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: ${{ steps.artifact-metadata.outputs.name }}-symbols
|
||||
path: ./bin/**/*.pdb
|
||||
|
||||
# ---- Release / Tagging related steps ----
|
||||
- name: Prepare Build Artifacts
|
||||
if: github.repository == 'PCSX2/pcsx2' && startsWith(github.ref, 'refs/tags/') && matrix.configuration != 'CMake'
|
||||
run: |
|
||||
mkdir -p ./ci-artifacts/
|
||||
7z a ./ci-artifacts/windows-${{ steps.artifact-metadata.outputs.arch }}-${{ steps.artifact-metadata.outputs.simd }}.7z ./bin/* '-xr!*bsc' '-xr!*.exp' '-xr!*.ilk' '-xr!*.iobj' '-xr!*.ipdb' '-xr!*.pdb' '-xr!*.lib'
|
||||
7z a ./ci-artifacts/windows-${{ steps.artifact-metadata.outputs.arch }}-${{ steps.artifact-metadata.outputs.simd }}-symbols.7z ./bin/*.pdb
|
||||
ls ./ci-artifacts/
|
||||
|
||||
- name: Upload Assets and Potential Publish Release
|
||||
if: github.repository == 'PCSX2/pcsx2' && startsWith(github.ref, 'refs/tags/') && matrix.configuration != 'CMake'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.BOT_PAT }}
|
||||
ASSET_DIR: ${{ github.WORKSPACE }}/ci-artifacts
|
||||
ASSET_EXTENSION: 7z
|
||||
TAG_TO_SEARCH_FOR: ${{ github.REF }}
|
||||
run: |
|
||||
cd ./.github/workflows/scripts/releases/upload-release-artifacts
|
||||
npm ci
|
||||
node index.js
|
||||
117
.gitignore
vendored
Normal file
117
.gitignore
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
.*.swp
|
||||
.*.swn
|
||||
.*.swo
|
||||
|
||||
*.suo
|
||||
*.ncb
|
||||
*.sdf
|
||||
*.opensdf
|
||||
*.user
|
||||
*.log
|
||||
*.dsp
|
||||
*.dsw
|
||||
*.bsc
|
||||
*.aps
|
||||
*.exe
|
||||
*.wav
|
||||
|
||||
*.trace
|
||||
*.dump
|
||||
|
||||
*.asm
|
||||
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
**/Win32/Release*
|
||||
**/Win32/Debug*
|
||||
**/Win32/Devel*
|
||||
**/x64/Release*
|
||||
**/x64/Debug*
|
||||
**/x64/Devel*
|
||||
|
||||
**/bin/PCSX2-linux.sh
|
||||
|
||||
_ReSharper.*
|
||||
pcsx2.snapshot_*
|
||||
svnrev.h
|
||||
|
||||
/build
|
||||
/build_dev
|
||||
/build_dbg
|
||||
/obj-*
|
||||
*.obj
|
||||
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
Debug.txt
|
||||
install_log.txt
|
||||
padLog.txt
|
||||
GS_opengl_debug.txt
|
||||
|
||||
Debug
|
||||
Release
|
||||
Devel
|
||||
|
||||
oprofile_data/
|
||||
|
||||
# Recording Specific Ignores (pcsx2-rr)
|
||||
*.p2s
|
||||
*.p2m2
|
||||
*.p2m2_backup
|
||||
*.p2m2_SaveState.p2s
|
||||
|
||||
# Visual Studio upgrades
|
||||
/Backup*
|
||||
/UpgradeLog*.htm
|
||||
/.vscode*
|
||||
|
||||
/bin/**/*.dll
|
||||
/bin/**/*.exp
|
||||
/bin/**/*.ilk
|
||||
/bin/**/*.lib
|
||||
/bin/**/*.pdb
|
||||
/bin/pcsx2
|
||||
/bin/PCSX2-linux.sh
|
||||
/bin/*ReplayLoader
|
||||
/bin/GS*.txt
|
||||
/bin/bios
|
||||
/bin/cache
|
||||
/bin/dumps
|
||||
/bin/help
|
||||
/bin/inis
|
||||
/bin/logs
|
||||
/bin/memcards
|
||||
/bin/plugins
|
||||
/bin/snaps
|
||||
/bin/sstates
|
||||
/deps
|
||||
/ipch
|
||||
|
||||
!/3rdparty/libjpeg/change.log
|
||||
/3rdparty/portaudio/portaudio-2.0.pc
|
||||
/3rdparty/portaudio/bin
|
||||
/3rdparty/portaudio/bin-*
|
||||
/3rdparty/portaudio/autom4te.cache
|
||||
/3rdparty/portaudio/libtool
|
||||
/3rdparty/portaudio/config.*
|
||||
/3rdparty/portaudio/lib-stamp
|
||||
/3rdparty/portaudio/Makefile
|
||||
/3rdparty/portaudio/bindings
|
||||
/3rdparty/portaudio/test
|
||||
/3rdparty/portaudio/testcvs
|
||||
/3rdparty/portaudio/src/hostapi/asio/ASIOSDK/common
|
||||
/3rdparty/portaudio/src/hostapi/asio/ASIOSDK/host
|
||||
/3rdparty/portaudio/src/hostapi/wasapi/mingw-include
|
||||
/3rdparty/**/include/wx/setup.h
|
||||
/3rdparty/**/wx/msw/rcdefs.h
|
||||
/pcsx2/gui/Resources/*.h
|
||||
!/pcsx2/gui/Resources/EmbeddedImage.h
|
||||
/tools/bin
|
||||
.vs
|
||||
|
||||
/out/build/x64-Debug (default)
|
||||
CMakeSettings.json
|
||||
/ci-artifacts/
|
||||
/out/
|
||||
32
.gitmodules
vendored
Normal file
32
.gitmodules
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
[submodule "3rdparty/xz/xz"]
|
||||
path = 3rdparty/xz/xz
|
||||
url = https://github.com/PCSX2/xz.git
|
||||
[submodule "3rdparty/gtest"]
|
||||
path = 3rdparty/gtest
|
||||
url = https://github.com/google/googletest.git
|
||||
[submodule "3rdparty/fmt/fmt"]
|
||||
path = 3rdparty/fmt/fmt
|
||||
url = https://github.com/fmtlib/fmt.git
|
||||
[submodule "3rdparty/libchdr/libchdr"]
|
||||
path = 3rdparty/libchdr/libchdr
|
||||
url = https://github.com/rtissera/libchdr.git
|
||||
[submodule "3rdparty/wil"]
|
||||
path = 3rdparty/wil
|
||||
url = https://github.com/microsoft/wil.git
|
||||
branch = master
|
||||
[submodule "3rdparty/cubeb/cubeb"]
|
||||
path = 3rdparty/cubeb/cubeb
|
||||
url = https://github.com/mozilla/cubeb.git
|
||||
[submodule "3rdparty/rapidyaml/rapidyaml"]
|
||||
path = 3rdparty/rapidyaml/rapidyaml
|
||||
url = https://github.com/biojppm/rapidyaml.git
|
||||
branch = master
|
||||
[submodule "3rdparty/imgui/imgui"]
|
||||
path = 3rdparty/imgui/imgui
|
||||
url = https://github.com/ocornut/imgui.git
|
||||
[submodule "3rdparty/glslang/glslang"]
|
||||
path = 3rdparty/glslang/glslang
|
||||
url = https://github.com/KhronosGroup/glslang.git
|
||||
[submodule "3rdparty/vulkan-headers"]
|
||||
path = 3rdparty/vulkan-headers
|
||||
url = https://github.com/KhronosGroup/Vulkan-Headers.git
|
||||
42
3rdparty/3rdparty.props
vendored
42
3rdparty/3rdparty.props
vendored
@@ -1,21 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
|
||||
<OutDir>$(SvnRootDir)\deps\$(PlatformName)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(PlatformName)\$(Configuration)\</IntDir>
|
||||
<ExtensionsToDeleteOnClean>*.bsc;*.idb;*.sbr;*.res;*.pch;*.pdb;*.obj;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;$(TargetPath);$(ExtensionsToDeleteOnClean)</ExtensionsToDeleteOnClean>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StructMemberAlignment>16Bytes</StructMemberAlignment>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
</Project>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
|
||||
<OutDir>$(SolutionDir)deps\$(PlatformName)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(PlatformName)\$(Configuration)\</IntDir>
|
||||
<ExtensionsToDeleteOnClean>*.bsc;*.idb;*.sbr;*.res;*.pch;*.pdb;*.obj;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;$(TargetPath);$(ExtensionsToDeleteOnClean)</ExtensionsToDeleteOnClean>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StructMemberAlignment>16Bytes</StructMemberAlignment>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
</Project>
|
||||
|
||||
26
3rdparty/3rdparty.vsprops
vendored
26
3rdparty/3rdparty.vsprops
vendored
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="windows-1250"?>
|
||||
<VisualStudioPropertySheet
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="3rdparty"
|
||||
OutputDirectory="$(SvnRootDir)\deps\$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
DeleteExtensionsOnClean="*.bsc;*.idb;*.sbr;*.res;*.pch;*.pdb;*.obj;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;$(TargetPath)"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""$(ProjectDir)""
|
||||
PreprocessorDefinitions="__WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"
|
||||
StructMemberAlignment="5"
|
||||
EnableFunctionLevelLinking="true"
|
||||
RuntimeTypeInfo="false"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
CompileAs="0"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
/>
|
||||
</VisualStudioPropertySheet>
|
||||
28
3rdparty/3rdpartyDLL.props
vendored
28
3rdparty/3rdpartyDLL.props
vendored
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
|
||||
<OutDir>$(SvnRootDir)\deps\$(PlatformName)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(PlatformName)\$(Configuration)\</IntDir>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StructMemberAlignment>16Bytes</StructMemberAlignment>
|
||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<OutputFile>$(SolutionDir)bin\$(ProjectName).dll</OutputFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>$(SvnRootDir)/common/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
</Project>
|
||||
30
3rdparty/3rdpartyDLL.vsprops
vendored
30
3rdparty/3rdpartyDLL.vsprops
vendored
@@ -1,30 +0,0 @@
|
||||
<?xml version="1.0" encoding="windows-1250"?>
|
||||
<VisualStudioPropertySheet
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="3rdpartyDLL"
|
||||
OutputDirectory="$(SvnRootDir)\deps\$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""$(ProjectDir)""
|
||||
PreprocessorDefinitions="__WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"
|
||||
StructMemberAlignment="5"
|
||||
RuntimeTypeInfo="false"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(SolutionDir)\bin\$(ProjectName).dll"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(OutDir)\$(ProjectName).lib"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
AdditionalIncludeDirectories=""$(SvnRootDir)/common/include""
|
||||
/>
|
||||
</VisualStudioPropertySheet>
|
||||
8
3rdparty/CMakeLists.txt
vendored
8
3rdparty/CMakeLists.txt
vendored
@@ -1,8 +0,0 @@
|
||||
# Check that people use the good file
|
||||
if(NOT TOP_CMAKE_WAS_SOURCED)
|
||||
message(FATAL_ERROR "
|
||||
You did not 'cmake' the good CMakeLists.txt file. Use the one in the top dir.
|
||||
It is advice to delete all wrongly generated cmake stuff => CMakeFiles & CMakeCache.txt")
|
||||
endif(NOT TOP_CMAKE_WAS_SOURCED)
|
||||
|
||||
### 3rd party was dropped
|
||||
34
3rdparty/DefaultProjectRootDir.props
vendored
34
3rdparty/DefaultProjectRootDir.props
vendored
@@ -1,18 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Label="UserMacros">
|
||||
<ProjectRootDir>$(ProjectDir)</ProjectRootDir>
|
||||
<SvnRootDir>$(ProjectRootDir)\..\..</SvnRootDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<BuildMacro Include="ProjectRootDir">
|
||||
<Value>$(ProjectRootDir)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="SvnRootDir">
|
||||
<Value>$(SvnRootDir)</Value>
|
||||
</BuildMacro>
|
||||
</ItemGroup>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Label="UserMacros">
|
||||
<ProjectRootDir>$(ProjectDir)</ProjectRootDir>
|
||||
<SvnRootDir>$(ProjectRootDir)\..\..</SvnRootDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<BuildMacro Include="ProjectRootDir">
|
||||
<Value>$(ProjectRootDir)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="SvnRootDir">
|
||||
<Value>$(SvnRootDir)</Value>
|
||||
</BuildMacro>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
15
3rdparty/DefaultProjectRootDir.vsprops
vendored
15
3rdparty/DefaultProjectRootDir.vsprops
vendored
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioPropertySheet
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="DefaultProjectRootDir"
|
||||
>
|
||||
<UserMacro
|
||||
Name="ProjectRootDir"
|
||||
Value="$(ProjectDir)"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="SvnRootDir"
|
||||
Value="$(ProjectRootDir)\..\.."
|
||||
/>
|
||||
</VisualStudioPropertySheet>
|
||||
14435
3rdparty/GL/glew.h
vendored
14435
3rdparty/GL/glew.h
vendored
File diff suppressed because it is too large
Load Diff
11011
3rdparty/GL/glext.h
vendored
11011
3rdparty/GL/glext.h
vendored
File diff suppressed because it is too large
Load Diff
1476
3rdparty/GL/glxew.h
vendored
1476
3rdparty/GL/glxew.h
vendored
File diff suppressed because it is too large
Load Diff
282
3rdparty/GL/khrplatform.h
vendored
Normal file
282
3rdparty/GL/khrplatform.h
vendored
Normal file
@@ -0,0 +1,282 @@
|
||||
#ifndef __khrplatform_h_
|
||||
#define __khrplatform_h_
|
||||
|
||||
/*
|
||||
** Copyright (c) 2008-2018 The Khronos Group Inc.
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||
** copy of this software and/or associated documentation files (the
|
||||
** "Materials"), to deal in the Materials without restriction, including
|
||||
** without limitation the rights to use, copy, modify, merge, publish,
|
||||
** distribute, sublicense, and/or sell copies of the Materials, and to
|
||||
** permit persons to whom the Materials are furnished to do so, subject to
|
||||
** the following conditions:
|
||||
**
|
||||
** The above copyright notice and this permission notice shall be included
|
||||
** in all copies or substantial portions of the Materials.
|
||||
**
|
||||
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
*/
|
||||
|
||||
/* Khronos platform-specific types and definitions.
|
||||
*
|
||||
* The master copy of khrplatform.h is maintained in the Khronos EGL
|
||||
* Registry repository at https://github.com/KhronosGroup/EGL-Registry
|
||||
* The last semantic modification to khrplatform.h was at commit ID:
|
||||
* 67a3e0864c2d75ea5287b9f3d2eb74a745936692
|
||||
*
|
||||
* Adopters may modify this file to suit their platform. Adopters are
|
||||
* encouraged to submit platform specific modifications to the Khronos
|
||||
* group so that they can be included in future versions of this file.
|
||||
* Please submit changes by filing pull requests or issues on
|
||||
* the EGL Registry repository linked above.
|
||||
*
|
||||
*
|
||||
* See the Implementer's Guidelines for information about where this file
|
||||
* should be located on your system and for more details of its use:
|
||||
* http://www.khronos.org/registry/implementers_guide.pdf
|
||||
*
|
||||
* This file should be included as
|
||||
* #include <KHR/khrplatform.h>
|
||||
* by Khronos client API header files that use its types and defines.
|
||||
*
|
||||
* The types in khrplatform.h should only be used to define API-specific types.
|
||||
*
|
||||
* Types defined in khrplatform.h:
|
||||
* khronos_int8_t signed 8 bit
|
||||
* khronos_uint8_t unsigned 8 bit
|
||||
* khronos_int16_t signed 16 bit
|
||||
* khronos_uint16_t unsigned 16 bit
|
||||
* khronos_int32_t signed 32 bit
|
||||
* khronos_uint32_t unsigned 32 bit
|
||||
* khronos_int64_t signed 64 bit
|
||||
* khronos_uint64_t unsigned 64 bit
|
||||
* khronos_intptr_t signed same number of bits as a pointer
|
||||
* khronos_uintptr_t unsigned same number of bits as a pointer
|
||||
* khronos_ssize_t signed size
|
||||
* khronos_usize_t unsigned size
|
||||
* khronos_float_t signed 32 bit floating point
|
||||
* khronos_time_ns_t unsigned 64 bit time in nanoseconds
|
||||
* khronos_utime_nanoseconds_t unsigned time interval or absolute time in
|
||||
* nanoseconds
|
||||
* khronos_stime_nanoseconds_t signed time interval in nanoseconds
|
||||
* khronos_boolean_enum_t enumerated boolean type. This should
|
||||
* only be used as a base type when a client API's boolean type is
|
||||
* an enum. Client APIs which use an integer or other type for
|
||||
* booleans cannot use this as the base type for their boolean.
|
||||
*
|
||||
* Tokens defined in khrplatform.h:
|
||||
*
|
||||
* KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
|
||||
*
|
||||
* KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
|
||||
* KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
|
||||
*
|
||||
* Calling convention macros defined in this file:
|
||||
* KHRONOS_APICALL
|
||||
* KHRONOS_APIENTRY
|
||||
* KHRONOS_APIATTRIBUTES
|
||||
*
|
||||
* These may be used in function prototypes as:
|
||||
*
|
||||
* KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
|
||||
* int arg1,
|
||||
* int arg2) KHRONOS_APIATTRIBUTES;
|
||||
*/
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Definition of KHRONOS_APICALL
|
||||
*-------------------------------------------------------------------------
|
||||
* This precedes the return type of the function in the function prototype.
|
||||
*/
|
||||
#if defined(_WIN32) && !defined(__SCITECH_SNAP__)
|
||||
# define KHRONOS_APICALL __declspec(dllimport)
|
||||
#elif defined (__SYMBIAN32__)
|
||||
# define KHRONOS_APICALL IMPORT_C
|
||||
#elif defined(__ANDROID__)
|
||||
# define KHRONOS_APICALL __attribute__((visibility("default")))
|
||||
#else
|
||||
# define KHRONOS_APICALL
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Definition of KHRONOS_APIENTRY
|
||||
*-------------------------------------------------------------------------
|
||||
* This follows the return type of the function and precedes the function
|
||||
* name in the function prototype.
|
||||
*/
|
||||
#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
|
||||
/* Win32 but not WinCE */
|
||||
# define KHRONOS_APIENTRY __stdcall
|
||||
#else
|
||||
# define KHRONOS_APIENTRY
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Definition of KHRONOS_APIATTRIBUTES
|
||||
*-------------------------------------------------------------------------
|
||||
* This follows the closing parenthesis of the function prototype arguments.
|
||||
*/
|
||||
#if defined (__ARMCC_2__)
|
||||
#define KHRONOS_APIATTRIBUTES __softfp
|
||||
#else
|
||||
#define KHRONOS_APIATTRIBUTES
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* basic type definitions
|
||||
*-----------------------------------------------------------------------*/
|
||||
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
|
||||
|
||||
|
||||
/*
|
||||
* Using <stdint.h>
|
||||
*/
|
||||
#include <stdint.h>
|
||||
typedef int32_t khronos_int32_t;
|
||||
typedef uint32_t khronos_uint32_t;
|
||||
typedef int64_t khronos_int64_t;
|
||||
typedef uint64_t khronos_uint64_t;
|
||||
#define KHRONOS_SUPPORT_INT64 1
|
||||
#define KHRONOS_SUPPORT_FLOAT 1
|
||||
|
||||
#elif defined(__VMS ) || defined(__sgi)
|
||||
|
||||
/*
|
||||
* Using <inttypes.h>
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
typedef int32_t khronos_int32_t;
|
||||
typedef uint32_t khronos_uint32_t;
|
||||
typedef int64_t khronos_int64_t;
|
||||
typedef uint64_t khronos_uint64_t;
|
||||
#define KHRONOS_SUPPORT_INT64 1
|
||||
#define KHRONOS_SUPPORT_FLOAT 1
|
||||
|
||||
#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
|
||||
|
||||
/*
|
||||
* Win32
|
||||
*/
|
||||
typedef __int32 khronos_int32_t;
|
||||
typedef unsigned __int32 khronos_uint32_t;
|
||||
typedef __int64 khronos_int64_t;
|
||||
typedef unsigned __int64 khronos_uint64_t;
|
||||
#define KHRONOS_SUPPORT_INT64 1
|
||||
#define KHRONOS_SUPPORT_FLOAT 1
|
||||
|
||||
#elif defined(__sun__) || defined(__digital__)
|
||||
|
||||
/*
|
||||
* Sun or Digital
|
||||
*/
|
||||
typedef int khronos_int32_t;
|
||||
typedef unsigned int khronos_uint32_t;
|
||||
#if defined(__arch64__) || defined(_LP64)
|
||||
typedef long int khronos_int64_t;
|
||||
typedef unsigned long int khronos_uint64_t;
|
||||
#else
|
||||
typedef long long int khronos_int64_t;
|
||||
typedef unsigned long long int khronos_uint64_t;
|
||||
#endif /* __arch64__ */
|
||||
#define KHRONOS_SUPPORT_INT64 1
|
||||
#define KHRONOS_SUPPORT_FLOAT 1
|
||||
|
||||
#elif 0
|
||||
|
||||
/*
|
||||
* Hypothetical platform with no float or int64 support
|
||||
*/
|
||||
typedef int khronos_int32_t;
|
||||
typedef unsigned int khronos_uint32_t;
|
||||
#define KHRONOS_SUPPORT_INT64 0
|
||||
#define KHRONOS_SUPPORT_FLOAT 0
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
* Generic fallback
|
||||
*/
|
||||
#include <stdint.h>
|
||||
typedef int32_t khronos_int32_t;
|
||||
typedef uint32_t khronos_uint32_t;
|
||||
typedef int64_t khronos_int64_t;
|
||||
typedef uint64_t khronos_uint64_t;
|
||||
#define KHRONOS_SUPPORT_INT64 1
|
||||
#define KHRONOS_SUPPORT_FLOAT 1
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Types that are (so far) the same on all platforms
|
||||
*/
|
||||
typedef signed char khronos_int8_t;
|
||||
typedef unsigned char khronos_uint8_t;
|
||||
typedef signed short int khronos_int16_t;
|
||||
typedef unsigned short int khronos_uint16_t;
|
||||
|
||||
/*
|
||||
* Types that differ between LLP64 and LP64 architectures - in LLP64,
|
||||
* pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
|
||||
* to be the only LLP64 architecture in current use.
|
||||
*/
|
||||
#ifdef _WIN64
|
||||
typedef signed long long int khronos_intptr_t;
|
||||
typedef unsigned long long int khronos_uintptr_t;
|
||||
typedef signed long long int khronos_ssize_t;
|
||||
typedef unsigned long long int khronos_usize_t;
|
||||
#else
|
||||
typedef signed long int khronos_intptr_t;
|
||||
typedef unsigned long int khronos_uintptr_t;
|
||||
typedef signed long int khronos_ssize_t;
|
||||
typedef unsigned long int khronos_usize_t;
|
||||
#endif
|
||||
|
||||
#if KHRONOS_SUPPORT_FLOAT
|
||||
/*
|
||||
* Float type
|
||||
*/
|
||||
typedef float khronos_float_t;
|
||||
#endif
|
||||
|
||||
#if KHRONOS_SUPPORT_INT64
|
||||
/* Time types
|
||||
*
|
||||
* These types can be used to represent a time interval in nanoseconds or
|
||||
* an absolute Unadjusted System Time. Unadjusted System Time is the number
|
||||
* of nanoseconds since some arbitrary system event (e.g. since the last
|
||||
* time the system booted). The Unadjusted System Time is an unsigned
|
||||
* 64 bit value that wraps back to 0 every 584 years. Time intervals
|
||||
* may be either signed or unsigned.
|
||||
*/
|
||||
typedef khronos_uint64_t khronos_utime_nanoseconds_t;
|
||||
typedef khronos_int64_t khronos_stime_nanoseconds_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Dummy value used to pad enum types to 32 bits.
|
||||
*/
|
||||
#ifndef KHRONOS_MAX_ENUM
|
||||
#define KHRONOS_MAX_ENUM 0x7FFFFFFF
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Enumerated boolean type
|
||||
*
|
||||
* Values other than zero should be considered to be true. Therefore
|
||||
* comparisons should not be made against KHRONOS_TRUE.
|
||||
*/
|
||||
typedef enum {
|
||||
KHRONOS_FALSE = 0,
|
||||
KHRONOS_TRUE = 1,
|
||||
KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
|
||||
} khronos_boolean_enum_t;
|
||||
|
||||
#endif /* __khrplatform_h_ */
|
||||
1247
3rdparty/GL/wglew.h
vendored
1247
3rdparty/GL/wglew.h
vendored
File diff suppressed because it is too large
Load Diff
901
3rdparty/GL/wglext.h
vendored
901
3rdparty/GL/wglext.h
vendored
@@ -1,901 +0,0 @@
|
||||
#ifndef __wglext_h_
|
||||
#define __wglext_h_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2007-2010 The Khronos Group Inc.
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||
** copy of this software and/or associated documentation files (the
|
||||
** "Materials"), to deal in the Materials without restriction, including
|
||||
** without limitation the rights to use, copy, modify, merge, publish,
|
||||
** distribute, sublicense, and/or sell copies of the Materials, and to
|
||||
** permit persons to whom the Materials are furnished to do so, subject to
|
||||
** the following conditions:
|
||||
**
|
||||
** The above copyright notice and this permission notice shall be included
|
||||
** in all copies or substantial portions of the Materials.
|
||||
**
|
||||
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
*/
|
||||
|
||||
/* Function declaration macros - to move into glplatform.h */
|
||||
|
||||
#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
|
||||
#define WIN32_LEAN_AND_MEAN 1
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifndef APIENTRY
|
||||
#define APIENTRY
|
||||
#endif
|
||||
#ifndef APIENTRYP
|
||||
#define APIENTRYP APIENTRY *
|
||||
#endif
|
||||
#ifndef GLAPI
|
||||
#define GLAPI extern
|
||||
#endif
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
/* Header file version number */
|
||||
/* wglext.h last updated 2010/08/06 */
|
||||
/* Current version at http://www.opengl.org/registry/ */
|
||||
#define WGL_WGLEXT_VERSION 22
|
||||
|
||||
#ifndef WGL_ARB_buffer_region
|
||||
#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
|
||||
#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002
|
||||
#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004
|
||||
#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_multisample
|
||||
#define WGL_SAMPLE_BUFFERS_ARB 0x2041
|
||||
#define WGL_SAMPLES_ARB 0x2042
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_extensions_string
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_pixel_format
|
||||
#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
|
||||
#define WGL_DRAW_TO_WINDOW_ARB 0x2001
|
||||
#define WGL_DRAW_TO_BITMAP_ARB 0x2002
|
||||
#define WGL_ACCELERATION_ARB 0x2003
|
||||
#define WGL_NEED_PALETTE_ARB 0x2004
|
||||
#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
|
||||
#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
|
||||
#define WGL_SWAP_METHOD_ARB 0x2007
|
||||
#define WGL_NUMBER_OVERLAYS_ARB 0x2008
|
||||
#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
|
||||
#define WGL_TRANSPARENT_ARB 0x200A
|
||||
#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
|
||||
#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
|
||||
#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
|
||||
#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
|
||||
#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
|
||||
#define WGL_SHARE_DEPTH_ARB 0x200C
|
||||
#define WGL_SHARE_STENCIL_ARB 0x200D
|
||||
#define WGL_SHARE_ACCUM_ARB 0x200E
|
||||
#define WGL_SUPPORT_GDI_ARB 0x200F
|
||||
#define WGL_SUPPORT_OPENGL_ARB 0x2010
|
||||
#define WGL_DOUBLE_BUFFER_ARB 0x2011
|
||||
#define WGL_STEREO_ARB 0x2012
|
||||
#define WGL_PIXEL_TYPE_ARB 0x2013
|
||||
#define WGL_COLOR_BITS_ARB 0x2014
|
||||
#define WGL_RED_BITS_ARB 0x2015
|
||||
#define WGL_RED_SHIFT_ARB 0x2016
|
||||
#define WGL_GREEN_BITS_ARB 0x2017
|
||||
#define WGL_GREEN_SHIFT_ARB 0x2018
|
||||
#define WGL_BLUE_BITS_ARB 0x2019
|
||||
#define WGL_BLUE_SHIFT_ARB 0x201A
|
||||
#define WGL_ALPHA_BITS_ARB 0x201B
|
||||
#define WGL_ALPHA_SHIFT_ARB 0x201C
|
||||
#define WGL_ACCUM_BITS_ARB 0x201D
|
||||
#define WGL_ACCUM_RED_BITS_ARB 0x201E
|
||||
#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
|
||||
#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
|
||||
#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
|
||||
#define WGL_DEPTH_BITS_ARB 0x2022
|
||||
#define WGL_STENCIL_BITS_ARB 0x2023
|
||||
#define WGL_AUX_BUFFERS_ARB 0x2024
|
||||
#define WGL_NO_ACCELERATION_ARB 0x2025
|
||||
#define WGL_GENERIC_ACCELERATION_ARB 0x2026
|
||||
#define WGL_FULL_ACCELERATION_ARB 0x2027
|
||||
#define WGL_SWAP_EXCHANGE_ARB 0x2028
|
||||
#define WGL_SWAP_COPY_ARB 0x2029
|
||||
#define WGL_SWAP_UNDEFINED_ARB 0x202A
|
||||
#define WGL_TYPE_RGBA_ARB 0x202B
|
||||
#define WGL_TYPE_COLORINDEX_ARB 0x202C
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_make_current_read
|
||||
#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043
|
||||
#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_pbuffer
|
||||
#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
|
||||
#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
|
||||
#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
|
||||
#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
|
||||
#define WGL_PBUFFER_LARGEST_ARB 0x2033
|
||||
#define WGL_PBUFFER_WIDTH_ARB 0x2034
|
||||
#define WGL_PBUFFER_HEIGHT_ARB 0x2035
|
||||
#define WGL_PBUFFER_LOST_ARB 0x2036
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_render_texture
|
||||
#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070
|
||||
#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071
|
||||
#define WGL_TEXTURE_FORMAT_ARB 0x2072
|
||||
#define WGL_TEXTURE_TARGET_ARB 0x2073
|
||||
#define WGL_MIPMAP_TEXTURE_ARB 0x2074
|
||||
#define WGL_TEXTURE_RGB_ARB 0x2075
|
||||
#define WGL_TEXTURE_RGBA_ARB 0x2076
|
||||
#define WGL_NO_TEXTURE_ARB 0x2077
|
||||
#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078
|
||||
#define WGL_TEXTURE_1D_ARB 0x2079
|
||||
#define WGL_TEXTURE_2D_ARB 0x207A
|
||||
#define WGL_MIPMAP_LEVEL_ARB 0x207B
|
||||
#define WGL_CUBE_MAP_FACE_ARB 0x207C
|
||||
#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
|
||||
#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
|
||||
#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
|
||||
#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
|
||||
#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
|
||||
#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
|
||||
#define WGL_FRONT_LEFT_ARB 0x2083
|
||||
#define WGL_FRONT_RIGHT_ARB 0x2084
|
||||
#define WGL_BACK_LEFT_ARB 0x2085
|
||||
#define WGL_BACK_RIGHT_ARB 0x2086
|
||||
#define WGL_AUX0_ARB 0x2087
|
||||
#define WGL_AUX1_ARB 0x2088
|
||||
#define WGL_AUX2_ARB 0x2089
|
||||
#define WGL_AUX3_ARB 0x208A
|
||||
#define WGL_AUX4_ARB 0x208B
|
||||
#define WGL_AUX5_ARB 0x208C
|
||||
#define WGL_AUX6_ARB 0x208D
|
||||
#define WGL_AUX7_ARB 0x208E
|
||||
#define WGL_AUX8_ARB 0x208F
|
||||
#define WGL_AUX9_ARB 0x2090
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_pixel_format_float
|
||||
#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_framebuffer_sRGB
|
||||
#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_create_context
|
||||
#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001
|
||||
#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
|
||||
#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
|
||||
#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
|
||||
#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
|
||||
#define WGL_CONTEXT_FLAGS_ARB 0x2094
|
||||
#define ERROR_INVALID_VERSION_ARB 0x2095
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_create_context_profile
|
||||
#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
|
||||
#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
|
||||
#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
|
||||
#define ERROR_INVALID_PROFILE_ARB 0x2096
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_create_context_robustness
|
||||
#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
|
||||
#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
|
||||
#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
|
||||
#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_make_current_read
|
||||
#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_pixel_format
|
||||
#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000
|
||||
#define WGL_DRAW_TO_WINDOW_EXT 0x2001
|
||||
#define WGL_DRAW_TO_BITMAP_EXT 0x2002
|
||||
#define WGL_ACCELERATION_EXT 0x2003
|
||||
#define WGL_NEED_PALETTE_EXT 0x2004
|
||||
#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005
|
||||
#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006
|
||||
#define WGL_SWAP_METHOD_EXT 0x2007
|
||||
#define WGL_NUMBER_OVERLAYS_EXT 0x2008
|
||||
#define WGL_NUMBER_UNDERLAYS_EXT 0x2009
|
||||
#define WGL_TRANSPARENT_EXT 0x200A
|
||||
#define WGL_TRANSPARENT_VALUE_EXT 0x200B
|
||||
#define WGL_SHARE_DEPTH_EXT 0x200C
|
||||
#define WGL_SHARE_STENCIL_EXT 0x200D
|
||||
#define WGL_SHARE_ACCUM_EXT 0x200E
|
||||
#define WGL_SUPPORT_GDI_EXT 0x200F
|
||||
#define WGL_SUPPORT_OPENGL_EXT 0x2010
|
||||
#define WGL_DOUBLE_BUFFER_EXT 0x2011
|
||||
#define WGL_STEREO_EXT 0x2012
|
||||
#define WGL_PIXEL_TYPE_EXT 0x2013
|
||||
#define WGL_COLOR_BITS_EXT 0x2014
|
||||
#define WGL_RED_BITS_EXT 0x2015
|
||||
#define WGL_RED_SHIFT_EXT 0x2016
|
||||
#define WGL_GREEN_BITS_EXT 0x2017
|
||||
#define WGL_GREEN_SHIFT_EXT 0x2018
|
||||
#define WGL_BLUE_BITS_EXT 0x2019
|
||||
#define WGL_BLUE_SHIFT_EXT 0x201A
|
||||
#define WGL_ALPHA_BITS_EXT 0x201B
|
||||
#define WGL_ALPHA_SHIFT_EXT 0x201C
|
||||
#define WGL_ACCUM_BITS_EXT 0x201D
|
||||
#define WGL_ACCUM_RED_BITS_EXT 0x201E
|
||||
#define WGL_ACCUM_GREEN_BITS_EXT 0x201F
|
||||
#define WGL_ACCUM_BLUE_BITS_EXT 0x2020
|
||||
#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021
|
||||
#define WGL_DEPTH_BITS_EXT 0x2022
|
||||
#define WGL_STENCIL_BITS_EXT 0x2023
|
||||
#define WGL_AUX_BUFFERS_EXT 0x2024
|
||||
#define WGL_NO_ACCELERATION_EXT 0x2025
|
||||
#define WGL_GENERIC_ACCELERATION_EXT 0x2026
|
||||
#define WGL_FULL_ACCELERATION_EXT 0x2027
|
||||
#define WGL_SWAP_EXCHANGE_EXT 0x2028
|
||||
#define WGL_SWAP_COPY_EXT 0x2029
|
||||
#define WGL_SWAP_UNDEFINED_EXT 0x202A
|
||||
#define WGL_TYPE_RGBA_EXT 0x202B
|
||||
#define WGL_TYPE_COLORINDEX_EXT 0x202C
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_pbuffer
|
||||
#define WGL_DRAW_TO_PBUFFER_EXT 0x202D
|
||||
#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E
|
||||
#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F
|
||||
#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030
|
||||
#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031
|
||||
#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
|
||||
#define WGL_PBUFFER_LARGEST_EXT 0x2033
|
||||
#define WGL_PBUFFER_WIDTH_EXT 0x2034
|
||||
#define WGL_PBUFFER_HEIGHT_EXT 0x2035
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_depth_float
|
||||
#define WGL_DEPTH_FLOAT_EXT 0x2040
|
||||
#endif
|
||||
|
||||
#ifndef WGL_3DFX_multisample
|
||||
#define WGL_SAMPLE_BUFFERS_3DFX 0x2060
|
||||
#define WGL_SAMPLES_3DFX 0x2061
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_multisample
|
||||
#define WGL_SAMPLE_BUFFERS_EXT 0x2041
|
||||
#define WGL_SAMPLES_EXT 0x2042
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_digital_video_control
|
||||
#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
|
||||
#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
|
||||
#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
|
||||
#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_gamma
|
||||
#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E
|
||||
#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_genlock
|
||||
#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
|
||||
#define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045
|
||||
#define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046
|
||||
#define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047
|
||||
#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
|
||||
#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
|
||||
#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
|
||||
#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
|
||||
#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_image_buffer
|
||||
#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
|
||||
#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_swap_frame_lock
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_render_depth_texture
|
||||
#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3
|
||||
#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
|
||||
#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5
|
||||
#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
|
||||
#define WGL_DEPTH_COMPONENT_NV 0x20A7
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_render_texture_rectangle
|
||||
#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
|
||||
#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
|
||||
#define WGL_TEXTURE_RECTANGLE_NV 0x20A2
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ATI_pixel_format_float
|
||||
#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_float_buffer
|
||||
#define WGL_FLOAT_COMPONENTS_NV 0x20B0
|
||||
#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
|
||||
#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
|
||||
#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
|
||||
#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
|
||||
#define WGL_TEXTURE_FLOAT_R_NV 0x20B5
|
||||
#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6
|
||||
#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7
|
||||
#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8
|
||||
#endif
|
||||
|
||||
#ifndef WGL_3DL_stereo_control
|
||||
#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055
|
||||
#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056
|
||||
#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057
|
||||
#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_pixel_format_packed_float
|
||||
#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_framebuffer_sRGB
|
||||
#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_present_video
|
||||
#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_video_out
|
||||
#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0
|
||||
#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1
|
||||
#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2
|
||||
#define WGL_VIDEO_OUT_COLOR_NV 0x20C3
|
||||
#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4
|
||||
#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5
|
||||
#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
|
||||
#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
|
||||
#define WGL_VIDEO_OUT_FRAME 0x20C8
|
||||
#define WGL_VIDEO_OUT_FIELD_1 0x20C9
|
||||
#define WGL_VIDEO_OUT_FIELD_2 0x20CA
|
||||
#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB
|
||||
#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_swap_group
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_gpu_affinity
|
||||
#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0
|
||||
#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_AMD_gpu_association
|
||||
#define WGL_GPU_VENDOR_AMD 0x1F00
|
||||
#define WGL_GPU_RENDERER_STRING_AMD 0x1F01
|
||||
#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
|
||||
#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
|
||||
#define WGL_GPU_RAM_AMD 0x21A3
|
||||
#define WGL_GPU_CLOCK_AMD 0x21A4
|
||||
#define WGL_GPU_NUM_PIPES_AMD 0x21A5
|
||||
#define WGL_GPU_NUM_SIMD_AMD 0x21A6
|
||||
#define WGL_GPU_NUM_RB_AMD 0x21A7
|
||||
#define WGL_GPU_NUM_SPI_AMD 0x21A8
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_video_capture
|
||||
#define WGL_UNIQUE_ID_NV 0x20CE
|
||||
#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_copy_image
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_multisample_coverage
|
||||
#define WGL_COVERAGE_SAMPLES_NV 0x2042
|
||||
#define WGL_COLOR_SAMPLES_NV 0x20B9
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_create_context_es2_profile
|
||||
#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
#ifndef WGL_ARB_pbuffer
|
||||
DECLARE_HANDLE(HPBUFFERARB);
|
||||
#endif
|
||||
#ifndef WGL_EXT_pbuffer
|
||||
DECLARE_HANDLE(HPBUFFEREXT);
|
||||
#endif
|
||||
#ifndef WGL_NV_present_video
|
||||
DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
|
||||
#endif
|
||||
#ifndef WGL_NV_video_output
|
||||
DECLARE_HANDLE(HPVIDEODEV);
|
||||
#endif
|
||||
#ifndef WGL_NV_gpu_affinity
|
||||
DECLARE_HANDLE(HPGPUNV);
|
||||
DECLARE_HANDLE(HGPUNV);
|
||||
|
||||
typedef struct _GPU_DEVICE {
|
||||
DWORD cb;
|
||||
CHAR DeviceName[32];
|
||||
CHAR DeviceString[128];
|
||||
DWORD Flags;
|
||||
RECT rcVirtualScreen;
|
||||
} GPU_DEVICE, *PGPU_DEVICE;
|
||||
#endif
|
||||
#ifndef WGL_NV_video_capture
|
||||
DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_buffer_region
|
||||
#define WGL_ARB_buffer_region 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType);
|
||||
extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion);
|
||||
extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height);
|
||||
extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
|
||||
typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
|
||||
typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
|
||||
typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_multisample
|
||||
#define WGL_ARB_multisample 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_extensions_string
|
||||
#define WGL_ARB_extensions_string 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern const char * WINAPI wglGetExtensionsStringARB (HDC hdc);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_pixel_format
|
||||
#define WGL_ARB_pixel_format 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
|
||||
extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
|
||||
extern BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
|
||||
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
|
||||
typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_make_current_read
|
||||
#define WGL_ARB_make_current_read 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
|
||||
extern HDC WINAPI wglGetCurrentReadDCARB (void);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
|
||||
typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_pbuffer
|
||||
#define WGL_ARB_pbuffer 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
|
||||
extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer);
|
||||
extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC);
|
||||
extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer);
|
||||
extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
|
||||
typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
|
||||
typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
|
||||
typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_render_texture
|
||||
#define WGL_ARB_render_texture 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
|
||||
extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
|
||||
extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
|
||||
typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
|
||||
typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_pixel_format_float
|
||||
#define WGL_ARB_pixel_format_float 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_framebuffer_sRGB
|
||||
#define WGL_ARB_framebuffer_sRGB 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_create_context
|
||||
#define WGL_ARB_create_context 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_create_context_profile
|
||||
#define WGL_ARB_create_context_profile 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_create_context_robustness
|
||||
#define WGL_ARB_create_context_robustness 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_display_color_table
|
||||
#define WGL_EXT_display_color_table 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id);
|
||||
extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length);
|
||||
extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id);
|
||||
extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
|
||||
typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);
|
||||
typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
|
||||
typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_extensions_string
|
||||
#define WGL_EXT_extensions_string 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern const char * WINAPI wglGetExtensionsStringEXT (void);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_make_current_read
|
||||
#define WGL_EXT_make_current_read 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
|
||||
extern HDC WINAPI wglGetCurrentReadDCEXT (void);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
|
||||
typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_pbuffer
|
||||
#define WGL_EXT_pbuffer 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
|
||||
extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer);
|
||||
extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC);
|
||||
extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer);
|
||||
extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
|
||||
typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
|
||||
typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
|
||||
typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_pixel_format
|
||||
#define WGL_EXT_pixel_format 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
|
||||
extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
|
||||
extern BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
|
||||
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
|
||||
typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_swap_control
|
||||
#define WGL_EXT_swap_control 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglSwapIntervalEXT (int interval);
|
||||
extern int WINAPI wglGetSwapIntervalEXT (void);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
|
||||
typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_depth_float
|
||||
#define WGL_EXT_depth_float 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_vertex_array_range
|
||||
#define WGL_NV_vertex_array_range 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern void* WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
|
||||
extern void WINAPI wglFreeMemoryNV (void *pointer);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
|
||||
typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_3DFX_multisample
|
||||
#define WGL_3DFX_multisample 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_multisample
|
||||
#define WGL_EXT_multisample 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_OML_sync_control
|
||||
#define WGL_OML_sync_control 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||
extern BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator);
|
||||
extern INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
|
||||
extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
|
||||
extern BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||
extern BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||
typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);
|
||||
typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
|
||||
typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
|
||||
typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||
typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_digital_video_control
|
||||
#define WGL_I3D_digital_video_control 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue);
|
||||
extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
|
||||
typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_gamma
|
||||
#define WGL_I3D_gamma 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue);
|
||||
extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue);
|
||||
extern BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
|
||||
extern BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
|
||||
typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
|
||||
typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
|
||||
typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_genlock
|
||||
#define WGL_I3D_genlock 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglEnableGenlockI3D (HDC hDC);
|
||||
extern BOOL WINAPI wglDisableGenlockI3D (HDC hDC);
|
||||
extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag);
|
||||
extern BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource);
|
||||
extern BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource);
|
||||
extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge);
|
||||
extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge);
|
||||
extern BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate);
|
||||
extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate);
|
||||
extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay);
|
||||
extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay);
|
||||
extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
|
||||
typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
|
||||
typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);
|
||||
typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
|
||||
typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);
|
||||
typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
|
||||
typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);
|
||||
typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
|
||||
typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);
|
||||
typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
|
||||
typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_image_buffer
|
||||
#define WGL_I3D_image_buffer 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags);
|
||||
extern BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress);
|
||||
extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
|
||||
extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
|
||||
typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
|
||||
typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
|
||||
typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_swap_frame_lock
|
||||
#define WGL_I3D_swap_frame_lock 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglEnableFrameLockI3D (void);
|
||||
extern BOOL WINAPI wglDisableFrameLockI3D (void);
|
||||
extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag);
|
||||
extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);
|
||||
typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);
|
||||
typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_I3D_swap_frame_usage
|
||||
#define WGL_I3D_swap_frame_usage 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglGetFrameUsageI3D (float *pUsage);
|
||||
extern BOOL WINAPI wglBeginFrameTrackingI3D (void);
|
||||
extern BOOL WINAPI wglEndFrameTrackingI3D (void);
|
||||
extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);
|
||||
typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
|
||||
typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ATI_pixel_format_float
|
||||
#define WGL_ATI_pixel_format_float 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_float_buffer
|
||||
#define WGL_NV_float_buffer 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_3DL_stereo_control
|
||||
#define WGL_3DL_stereo_control 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_pixel_format_packed_float
|
||||
#define WGL_EXT_pixel_format_packed_float 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_EXT_framebuffer_sRGB
|
||||
#define WGL_EXT_framebuffer_sRGB 1
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_present_video
|
||||
#define WGL_NV_present_video 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern int WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
|
||||
extern BOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
|
||||
extern BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
|
||||
typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_video_output
|
||||
#define WGL_NV_video_output 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
|
||||
extern BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice);
|
||||
extern BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
|
||||
extern BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer);
|
||||
extern BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
|
||||
extern BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
|
||||
typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice);
|
||||
typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
|
||||
typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer);
|
||||
typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
|
||||
typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_swap_group
|
||||
#define WGL_NV_swap_group 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group);
|
||||
extern BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier);
|
||||
extern BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier);
|
||||
extern BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
|
||||
extern BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count);
|
||||
extern BOOL WINAPI wglResetFrameCountNV (HDC hDC);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);
|
||||
typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count);
|
||||
typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_gpu_affinity
|
||||
#define WGL_NV_gpu_affinity 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu);
|
||||
extern BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
|
||||
extern HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList);
|
||||
extern BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
|
||||
extern BOOL WINAPI wglDeleteDCNV (HDC hdc);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu);
|
||||
typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
|
||||
typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList);
|
||||
typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
|
||||
typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_AMD_gpu_association
|
||||
#define WGL_AMD_gpu_association 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids);
|
||||
extern INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data);
|
||||
extern UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc);
|
||||
extern HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id);
|
||||
extern HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList);
|
||||
extern BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc);
|
||||
extern BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc);
|
||||
extern HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void);
|
||||
extern VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids);
|
||||
typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data);
|
||||
typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc);
|
||||
typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id);
|
||||
typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList);
|
||||
typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc);
|
||||
typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc);
|
||||
typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
|
||||
typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_video_capture
|
||||
#define WGL_NV_video_capture 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
|
||||
extern UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
|
||||
extern BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
|
||||
extern BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
|
||||
extern BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
|
||||
typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
|
||||
typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
|
||||
typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_copy_image
|
||||
#define WGL_NV_copy_image 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_multisample_coverage
|
||||
#define WGL_NV_multisample_coverage 1
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
349
3rdparty/SoundTouch/3dnow_win.cpp
vendored
349
3rdparty/SoundTouch/3dnow_win.cpp
vendored
@@ -1,349 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Win32 version of the AMD 3DNow! optimized routines for AMD K6-2/Athlon
|
||||
/// processors. All 3DNow! optimized functions have been gathered into this
|
||||
/// single source code file, regardless to their class or original source code
|
||||
/// file, in order to ease porting the library to other compiler and processor
|
||||
/// platforms.
|
||||
///
|
||||
/// By the way; the performance gain depends heavily on the CPU generation: On
|
||||
/// K6-2 these routines provided speed-up of even 2.4 times, while on Athlon the
|
||||
/// difference to the original routines stayed at unremarkable 8%! Such a small
|
||||
/// improvement on Athlon is due to 3DNow can perform only two operations in
|
||||
/// parallel, and obviously also the Athlon FPU is doing a very good job with
|
||||
/// the standard C floating point routines! Here these routines are anyway,
|
||||
/// although it might not be worth the effort to convert these to GCC platform,
|
||||
/// for Athlon CPU at least. The situation is different regarding the SSE
|
||||
/// optimizations though, thanks to the four parallel operations of SSE that
|
||||
/// already make a difference.
|
||||
///
|
||||
/// This file is to be compiled in Windows platform with Microsoft Visual C++
|
||||
/// Compiler. Please see '3dnow_gcc.cpp' for the gcc compiler version for all
|
||||
/// GNU platforms (if file supplied).
|
||||
///
|
||||
/// NOTICE: If using Visual Studio 6.0, you'll need to install the "Visual C++
|
||||
/// 6.0 processor pack" update to support 3DNow! instruction set. The update is
|
||||
/// available for download at Microsoft Developers Network, see here:
|
||||
/// http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx
|
||||
///
|
||||
/// If the above URL is expired or removed, go to "http://msdn.microsoft.com" and
|
||||
/// perform a search with keywords "processor pack".
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2009-02-21 18:00:14 +0200 (Sat, 21 Feb 2009) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: 3dnow_win.cpp 63 2009-02-21 16:00:14Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "cpu_detect.h"
|
||||
#include "STTypes.h"
|
||||
|
||||
#ifndef WIN32
|
||||
#error "wrong platform - this source code file is exclusively for Win32 platform"
|
||||
#endif
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
#ifdef ALLOW_3DNOW
|
||||
// 3DNow! routines available only with float sample type
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// implementation of 3DNow! optimized functions of class 'TDStretch3DNow'
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "TDStretch.h"
|
||||
|
||||
|
||||
// Calculates cross correlation of two buffers
|
||||
double TDStretch3DNow::calcCrossCorrStereo(const float *pV1, const float *pV2) const
|
||||
{
|
||||
int overlapLengthLocal = overlapLength;
|
||||
float corr = 0;
|
||||
|
||||
// Calculates the cross-correlation value between 'pV1' and 'pV2' vectors
|
||||
/*
|
||||
c-pseudocode:
|
||||
|
||||
corr = 0;
|
||||
for (i = 0; i < overlapLength / 4; i ++)
|
||||
{
|
||||
corr += pV1[0] * pV2[0];
|
||||
pV1[1] * pV2[1];
|
||||
pV1[2] * pV2[2];
|
||||
pV1[3] * pV2[3];
|
||||
pV1[4] * pV2[4];
|
||||
pV1[5] * pV2[5];
|
||||
pV1[6] * pV2[6];
|
||||
pV1[7] * pV2[7];
|
||||
|
||||
pV1 += 8;
|
||||
pV2 += 8;
|
||||
}
|
||||
*/
|
||||
|
||||
_asm
|
||||
{
|
||||
// give prefetch hints to CPU of what data are to be needed soonish.
|
||||
// give more aggressive hints on pV1 as that changes more between different calls
|
||||
// while pV2 stays the same.
|
||||
prefetch [pV1]
|
||||
prefetch [pV2]
|
||||
prefetch [pV1 + 32]
|
||||
|
||||
mov eax, dword ptr pV2
|
||||
mov ebx, dword ptr pV1
|
||||
|
||||
pxor mm0, mm0
|
||||
|
||||
mov ecx, overlapLengthLocal
|
||||
shr ecx, 2 // div by four
|
||||
|
||||
loop1:
|
||||
movq mm1, [eax]
|
||||
prefetch [eax + 32] // give a prefetch hint to CPU what data are to be needed soonish
|
||||
pfmul mm1, [ebx]
|
||||
prefetch [ebx + 64] // give a prefetch hint to CPU what data are to be needed soonish
|
||||
|
||||
movq mm2, [eax + 8]
|
||||
pfadd mm0, mm1
|
||||
pfmul mm2, [ebx + 8]
|
||||
|
||||
movq mm3, [eax + 16]
|
||||
pfadd mm0, mm2
|
||||
pfmul mm3, [ebx + 16]
|
||||
|
||||
movq mm4, [eax + 24]
|
||||
pfadd mm0, mm3
|
||||
pfmul mm4, [ebx + 24]
|
||||
|
||||
add eax, 32
|
||||
pfadd mm0, mm4
|
||||
add ebx, 32
|
||||
|
||||
dec ecx
|
||||
jnz loop1
|
||||
|
||||
// add halfs of mm0 together and return the result.
|
||||
// note: mm1 is used as a dummy parameter only, we actually don't care about it's value
|
||||
pfacc mm0, mm1
|
||||
movd corr, mm0
|
||||
femms
|
||||
}
|
||||
|
||||
return corr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// implementation of 3DNow! optimized functions of class 'FIRFilter'
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "FIRFilter.h"
|
||||
|
||||
FIRFilter3DNow::FIRFilter3DNow() : FIRFilter()
|
||||
{
|
||||
filterCoeffsUnalign = NULL;
|
||||
filterCoeffsAlign = NULL;
|
||||
}
|
||||
|
||||
|
||||
FIRFilter3DNow::~FIRFilter3DNow()
|
||||
{
|
||||
delete[] filterCoeffsUnalign;
|
||||
filterCoeffsUnalign = NULL;
|
||||
filterCoeffsAlign = NULL;
|
||||
}
|
||||
|
||||
|
||||
// (overloaded) Calculates filter coefficients for 3DNow! routine
|
||||
void FIRFilter3DNow::setCoefficients(const float *coeffs, uint newLength, uint uResultDivFactor)
|
||||
{
|
||||
uint i;
|
||||
float fDivider;
|
||||
|
||||
FIRFilter::setCoefficients(coeffs, newLength, uResultDivFactor);
|
||||
|
||||
// Scale the filter coefficients so that it won't be necessary to scale the filtering result
|
||||
// also rearrange coefficients suitably for 3DNow!
|
||||
// Ensure that filter coeffs array is aligned to 16-byte boundary
|
||||
delete[] filterCoeffsUnalign;
|
||||
filterCoeffsUnalign = new float[2 * newLength + 4];
|
||||
filterCoeffsAlign = (float *)(((uint)filterCoeffsUnalign + 15) & (uint)-16);
|
||||
|
||||
fDivider = (float)resultDivider;
|
||||
|
||||
// rearrange the filter coefficients for mmx routines
|
||||
for (i = 0; i < newLength; i ++)
|
||||
{
|
||||
filterCoeffsAlign[2 * i + 0] =
|
||||
filterCoeffsAlign[2 * i + 1] = coeffs[i + 0] / fDivider;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 3DNow!-optimized version of the filter routine for stereo sound
|
||||
uint FIRFilter3DNow::evaluateFilterStereo(float *dest, const float *src, uint numSamples) const
|
||||
{
|
||||
float *filterCoeffsLocal = filterCoeffsAlign;
|
||||
uint count = (numSamples - length) & (uint)-2;
|
||||
uint lengthLocal = length / 4;
|
||||
|
||||
assert(length != 0);
|
||||
assert(count % 2 == 0);
|
||||
|
||||
/* original code:
|
||||
|
||||
double suml1, suml2;
|
||||
double sumr1, sumr2;
|
||||
uint i, j;
|
||||
|
||||
for (j = 0; j < count; j += 2)
|
||||
{
|
||||
const float *ptr;
|
||||
|
||||
suml1 = sumr1 = 0.0;
|
||||
suml2 = sumr2 = 0.0;
|
||||
ptr = src;
|
||||
filterCoeffsLocal = filterCoeffs;
|
||||
for (i = 0; i < lengthLocal; i ++)
|
||||
{
|
||||
// unroll loop for efficiency.
|
||||
|
||||
suml1 += ptr[0] * filterCoeffsLocal[0] +
|
||||
ptr[2] * filterCoeffsLocal[2] +
|
||||
ptr[4] * filterCoeffsLocal[4] +
|
||||
ptr[6] * filterCoeffsLocal[6];
|
||||
|
||||
sumr1 += ptr[1] * filterCoeffsLocal[1] +
|
||||
ptr[3] * filterCoeffsLocal[3] +
|
||||
ptr[5] * filterCoeffsLocal[5] +
|
||||
ptr[7] * filterCoeffsLocal[7];
|
||||
|
||||
suml2 += ptr[8] * filterCoeffsLocal[0] +
|
||||
ptr[10] * filterCoeffsLocal[2] +
|
||||
ptr[12] * filterCoeffsLocal[4] +
|
||||
ptr[14] * filterCoeffsLocal[6];
|
||||
|
||||
sumr2 += ptr[9] * filterCoeffsLocal[1] +
|
||||
ptr[11] * filterCoeffsLocal[3] +
|
||||
ptr[13] * filterCoeffsLocal[5] +
|
||||
ptr[15] * filterCoeffsLocal[7];
|
||||
|
||||
ptr += 16;
|
||||
filterCoeffsLocal += 8;
|
||||
}
|
||||
dest[0] = (float)suml1;
|
||||
dest[1] = (float)sumr1;
|
||||
dest[2] = (float)suml2;
|
||||
dest[3] = (float)sumr2;
|
||||
|
||||
src += 4;
|
||||
dest += 4;
|
||||
}
|
||||
|
||||
*/
|
||||
_asm
|
||||
{
|
||||
mov eax, dword ptr dest
|
||||
mov ebx, dword ptr src
|
||||
mov edx, count
|
||||
shr edx, 1
|
||||
|
||||
loop1:
|
||||
// "outer loop" : during each round 2*2 output samples are calculated
|
||||
prefetch [ebx] // give a prefetch hint to CPU what data are to be needed soonish
|
||||
prefetch [filterCoeffsLocal] // give a prefetch hint to CPU what data are to be needed soonish
|
||||
|
||||
mov esi, ebx
|
||||
mov edi, filterCoeffsLocal
|
||||
pxor mm0, mm0
|
||||
pxor mm1, mm1
|
||||
mov ecx, lengthLocal
|
||||
|
||||
loop2:
|
||||
// "inner loop" : during each round four FIR filter taps are evaluated for 2*2 output samples
|
||||
movq mm2, [edi]
|
||||
movq mm3, mm2
|
||||
prefetch [edi + 32] // give a prefetch hint to CPU what data are to be needed soonish
|
||||
pfmul mm2, [esi]
|
||||
prefetch [esi + 32] // give a prefetch hint to CPU what data are to be needed soonish
|
||||
pfmul mm3, [esi + 8]
|
||||
|
||||
movq mm4, [edi + 8]
|
||||
movq mm5, mm4
|
||||
pfadd mm0, mm2
|
||||
pfmul mm4, [esi + 8]
|
||||
pfadd mm1, mm3
|
||||
pfmul mm5, [esi + 16]
|
||||
|
||||
movq mm2, [edi + 16]
|
||||
movq mm6, mm2
|
||||
pfadd mm0, mm4
|
||||
pfmul mm2, [esi + 16]
|
||||
pfadd mm1, mm5
|
||||
pfmul mm6, [esi + 24]
|
||||
|
||||
movq mm3, [edi + 24]
|
||||
movq mm7, mm3
|
||||
pfadd mm0, mm2
|
||||
pfmul mm3, [esi + 24]
|
||||
pfadd mm1, mm6
|
||||
pfmul mm7, [esi + 32]
|
||||
add esi, 32
|
||||
pfadd mm0, mm3
|
||||
add edi, 32
|
||||
pfadd mm1, mm7
|
||||
|
||||
dec ecx
|
||||
jnz loop2
|
||||
|
||||
movq [eax], mm0
|
||||
add ebx, 16
|
||||
movq [eax + 8], mm1
|
||||
add eax, 16
|
||||
|
||||
dec edx
|
||||
jnz loop1
|
||||
|
||||
femms
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
#endif // ALLOW_3DNOW
|
||||
184
3rdparty/SoundTouch/AAFilter.cpp
vendored
184
3rdparty/SoundTouch/AAFilter.cpp
vendored
@@ -1,184 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// FIR low-pass (anti-alias) filter with filter coefficient design routine and
|
||||
/// MMX optimization.
|
||||
///
|
||||
/// Anti-alias filter is used to prevent folding of high frequencies when
|
||||
/// transposing the sample rate with interpolation.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2009-01-11 09:34:24 -0200 (dom, 11 jan 2009) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: AAFilter.cpp 45 2009-01-11 11:34:24Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <memory.h>
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include "AAFilter.h"
|
||||
#include "FIRFilter.h"
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
#define PI 3.141592655357989
|
||||
#define TWOPI (2 * PI)
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Implementation of the class 'AAFilter'
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
AAFilter::AAFilter(uint len)
|
||||
{
|
||||
pFIR = FIRFilter::newInstance();
|
||||
cutoffFreq = 0.5;
|
||||
setLength(len);
|
||||
}
|
||||
|
||||
|
||||
|
||||
AAFilter::~AAFilter()
|
||||
{
|
||||
delete pFIR;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets new anti-alias filter cut-off edge frequency, scaled to
|
||||
// sampling frequency (nyquist frequency = 0.5).
|
||||
// The filter will cut frequencies higher than the given frequency.
|
||||
void AAFilter::setCutoffFreq(double newCutoffFreq)
|
||||
{
|
||||
cutoffFreq = newCutoffFreq;
|
||||
calculateCoeffs();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets number of FIR filter taps
|
||||
void AAFilter::setLength(uint newLength)
|
||||
{
|
||||
length = newLength;
|
||||
calculateCoeffs();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Calculates coefficients for a low-pass FIR filter using Hamming window
|
||||
void AAFilter::calculateCoeffs()
|
||||
{
|
||||
uint i;
|
||||
double cntTemp, temp, tempCoeff,h, w;
|
||||
double fc2, wc;
|
||||
double scaleCoeff, sum;
|
||||
double *work;
|
||||
SAMPLETYPE *coeffs;
|
||||
|
||||
assert(length >= 2);
|
||||
assert(length % 4 == 0);
|
||||
assert(cutoffFreq >= 0);
|
||||
assert(cutoffFreq <= 0.5);
|
||||
|
||||
work = new double[length];
|
||||
coeffs = new SAMPLETYPE[length];
|
||||
|
||||
fc2 = 2.0 * cutoffFreq;
|
||||
wc = PI * fc2;
|
||||
tempCoeff = TWOPI / (double)length;
|
||||
|
||||
sum = 0;
|
||||
for (i = 0; i < length; i ++)
|
||||
{
|
||||
cntTemp = (double)i - (double)(length / 2);
|
||||
|
||||
temp = cntTemp * wc;
|
||||
if (temp != 0)
|
||||
{
|
||||
h = fc2 * sin(temp) / temp; // sinc function
|
||||
}
|
||||
else
|
||||
{
|
||||
h = 1.0;
|
||||
}
|
||||
w = 0.54 + 0.46 * cos(tempCoeff * cntTemp); // hamming window
|
||||
|
||||
temp = w * h;
|
||||
work[i] = temp;
|
||||
|
||||
// calc net sum of coefficients
|
||||
sum += temp;
|
||||
}
|
||||
|
||||
// ensure the sum of coefficients is larger than zero
|
||||
assert(sum > 0);
|
||||
|
||||
// ensure we've really designed a lowpass filter...
|
||||
assert(work[length/2] > 0);
|
||||
assert(work[length/2 + 1] > -1e-6);
|
||||
assert(work[length/2 - 1] > -1e-6);
|
||||
|
||||
// Calculate a scaling coefficient in such a way that the result can be
|
||||
// divided by 16384
|
||||
scaleCoeff = 16384.0f / sum;
|
||||
|
||||
for (i = 0; i < length; i ++)
|
||||
{
|
||||
// scale & round to nearest integer
|
||||
temp = work[i] * scaleCoeff;
|
||||
temp += (temp >= 0) ? 0.5 : -0.5;
|
||||
// ensure no overfloods
|
||||
assert(temp >= -32768 && temp <= 32767);
|
||||
coeffs[i] = (SAMPLETYPE)temp;
|
||||
}
|
||||
|
||||
// Set coefficients. Use divide factor 14 => divide result by 2^14 = 16384
|
||||
pFIR->setCoefficients(coeffs, length, 14);
|
||||
|
||||
delete[] work;
|
||||
delete[] coeffs;
|
||||
}
|
||||
|
||||
|
||||
// Applies the filter to the given sequence of samples.
|
||||
// Note : The amount of outputted samples is by value of 'filter length'
|
||||
// smaller than the amount of input samples.
|
||||
uint AAFilter::evaluate(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples, uint numChannels) const
|
||||
{
|
||||
return pFIR->evaluate(dest, src, numSamples, numChannels);
|
||||
}
|
||||
|
||||
|
||||
uint AAFilter::getLength() const
|
||||
{
|
||||
return pFIR->getLength();
|
||||
}
|
||||
370
3rdparty/SoundTouch/BPMDetect.cpp
vendored
370
3rdparty/SoundTouch/BPMDetect.cpp
vendored
@@ -1,370 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Beats-per-minute (BPM) detection routine.
|
||||
///
|
||||
/// The beat detection algorithm works as follows:
|
||||
/// - Use function 'inputSamples' to input a chunks of samples to the class for
|
||||
/// analysis. It's a good idea to enter a large sound file or stream in smallish
|
||||
/// chunks of around few kilosamples in order not to extinguish too much RAM memory.
|
||||
/// - Inputted sound data is decimated to approx 500 Hz to reduce calculation burden,
|
||||
/// which is basically ok as low (bass) frequencies mostly determine the beat rate.
|
||||
/// Simple averaging is used for anti-alias filtering because the resulting signal
|
||||
/// quality isn't of that high importance.
|
||||
/// - Decimated sound data is enveloped, i.e. the amplitude shape is detected by
|
||||
/// taking absolute value that's smoothed by sliding average. Signal levels that
|
||||
/// are below a couple of times the general RMS amplitude level are cut away to
|
||||
/// leave only notable peaks there.
|
||||
/// - Repeating sound patterns (e.g. beats) are detected by calculating short-term
|
||||
/// autocorrelation function of the enveloped signal.
|
||||
/// - After whole sound data file has been analyzed as above, the bpm level is
|
||||
/// detected by function 'getBpm' that finds the highest peak of the autocorrelation
|
||||
/// function, calculates it's precise location and converts this reading to bpm's.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2012-08-30 16:45:25 -0300 (qui, 30 ago 2012) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: BPMDetect.cpp 149 2012-08-30 19:45:25Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <math.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include "FIFOSampleBuffer.h"
|
||||
#include "PeakFinder.h"
|
||||
#include "BPMDetect.h"
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
#define INPUT_BLOCK_SAMPLES 2048
|
||||
#define DECIMATED_BLOCK_SAMPLES 256
|
||||
|
||||
/// decay constant for calculating RMS volume sliding average approximation
|
||||
/// (time constant is about 10 sec)
|
||||
const float avgdecay = 0.99986f;
|
||||
|
||||
/// Normalization coefficient for calculating RMS sliding average approximation.
|
||||
const float avgnorm = (1 - avgdecay);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Enable following define to create bpm analysis file:
|
||||
|
||||
// #define _CREATE_BPM_DEBUG_FILE
|
||||
|
||||
#ifdef _CREATE_BPM_DEBUG_FILE
|
||||
|
||||
#define DEBUGFILE_NAME "c:\\temp\\soundtouch-bpm-debug.txt"
|
||||
|
||||
static void _SaveDebugData(const float *data, int minpos, int maxpos, double coeff)
|
||||
{
|
||||
FILE *fptr = fopen(DEBUGFILE_NAME, "wt");
|
||||
int i;
|
||||
|
||||
if (fptr)
|
||||
{
|
||||
printf("\n\nWriting BPM debug data into file " DEBUGFILE_NAME "\n\n");
|
||||
for (i = minpos; i < maxpos; i ++)
|
||||
{
|
||||
fprintf(fptr, "%d\t%.1lf\t%f\n", i, coeff / (double)i, data[i]);
|
||||
}
|
||||
fclose(fptr);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define _SaveDebugData(a,b,c,d)
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
BPMDetect::BPMDetect(int numChannels, int aSampleRate)
|
||||
{
|
||||
this->sampleRate = aSampleRate;
|
||||
this->channels = numChannels;
|
||||
|
||||
decimateSum = 0;
|
||||
decimateCount = 0;
|
||||
|
||||
envelopeAccu = 0;
|
||||
|
||||
// Initialize RMS volume accumulator to RMS level of 1500 (out of 32768) that's
|
||||
// safe initial RMS signal level value for song data. This value is then adapted
|
||||
// to the actual level during processing.
|
||||
#ifdef SOUNDTOUCH_INTEGER_SAMPLES
|
||||
// integer samples
|
||||
RMSVolumeAccu = (1500 * 1500) / avgnorm;
|
||||
#else
|
||||
// float samples, scaled to range [-1..+1[
|
||||
RMSVolumeAccu = (0.045f * 0.045f) / avgnorm;
|
||||
#endif
|
||||
|
||||
// choose decimation factor so that result is approx. 1000 Hz
|
||||
decimateBy = sampleRate / 1000;
|
||||
assert(decimateBy > 0);
|
||||
assert(INPUT_BLOCK_SAMPLES < decimateBy * DECIMATED_BLOCK_SAMPLES);
|
||||
|
||||
// Calculate window length & starting item according to desired min & max bpms
|
||||
windowLen = (60 * sampleRate) / (decimateBy * MIN_BPM);
|
||||
windowStart = (60 * sampleRate) / (decimateBy * MAX_BPM);
|
||||
|
||||
assert(windowLen > windowStart);
|
||||
|
||||
// allocate new working objects
|
||||
xcorr = new float[windowLen];
|
||||
memset(xcorr, 0, windowLen * sizeof(float));
|
||||
|
||||
// allocate processing buffer
|
||||
buffer = new FIFOSampleBuffer();
|
||||
// we do processing in mono mode
|
||||
buffer->setChannels(1);
|
||||
buffer->clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
BPMDetect::~BPMDetect()
|
||||
{
|
||||
delete[] xcorr;
|
||||
delete buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// convert to mono, low-pass filter & decimate to about 500 Hz.
|
||||
/// return number of outputted samples.
|
||||
///
|
||||
/// Decimation is used to remove the unnecessary frequencies and thus to reduce
|
||||
/// the amount of data needed to be processed as calculating autocorrelation
|
||||
/// function is a very-very heavy operation.
|
||||
///
|
||||
/// Anti-alias filtering is done simply by averaging the samples. This is really a
|
||||
/// poor-man's anti-alias filtering, but it's not so critical in this kind of application
|
||||
/// (it'd also be difficult to design a high-quality filter with steep cut-off at very
|
||||
/// narrow band)
|
||||
int BPMDetect::decimate(SAMPLETYPE *dest, const SAMPLETYPE *src, int numsamples)
|
||||
{
|
||||
int count, outcount;
|
||||
LONG_SAMPLETYPE out;
|
||||
|
||||
assert(channels > 0);
|
||||
assert(decimateBy > 0);
|
||||
outcount = 0;
|
||||
for (count = 0; count < numsamples; count ++)
|
||||
{
|
||||
int j;
|
||||
|
||||
// convert to mono and accumulate
|
||||
for (j = 0; j < channels; j ++)
|
||||
{
|
||||
decimateSum += src[j];
|
||||
}
|
||||
src += j;
|
||||
|
||||
decimateCount ++;
|
||||
if (decimateCount >= decimateBy)
|
||||
{
|
||||
// Store every Nth sample only
|
||||
out = (LONG_SAMPLETYPE)(decimateSum / (decimateBy * channels));
|
||||
decimateSum = 0;
|
||||
decimateCount = 0;
|
||||
#ifdef SOUNDTOUCH_INTEGER_SAMPLES
|
||||
// check ranges for sure (shouldn't actually be necessary)
|
||||
if (out > 32767)
|
||||
{
|
||||
out = 32767;
|
||||
}
|
||||
else if (out < -32768)
|
||||
{
|
||||
out = -32768;
|
||||
}
|
||||
#endif // SOUNDTOUCH_INTEGER_SAMPLES
|
||||
dest[outcount] = (SAMPLETYPE)out;
|
||||
outcount ++;
|
||||
}
|
||||
}
|
||||
return outcount;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Calculates autocorrelation function of the sample history buffer
|
||||
void BPMDetect::updateXCorr(int process_samples)
|
||||
{
|
||||
int offs;
|
||||
SAMPLETYPE *pBuffer;
|
||||
|
||||
assert(buffer->numSamples() >= (uint)(process_samples + windowLen));
|
||||
|
||||
pBuffer = buffer->ptrBegin();
|
||||
for (offs = windowStart; offs < windowLen; offs ++)
|
||||
{
|
||||
LONG_SAMPLETYPE sum;
|
||||
int i;
|
||||
|
||||
sum = 0;
|
||||
for (i = 0; i < process_samples; i ++)
|
||||
{
|
||||
sum += pBuffer[i] * pBuffer[i + offs]; // scaling the sub-result shouldn't be necessary
|
||||
}
|
||||
// xcorr[offs] *= xcorr_decay; // decay 'xcorr' here with suitable coefficients
|
||||
// if it's desired that the system adapts automatically to
|
||||
// various bpms, e.g. in processing continouos music stream.
|
||||
// The 'xcorr_decay' should be a value that's smaller than but
|
||||
// close to one, and should also depend on 'process_samples' value.
|
||||
|
||||
xcorr[offs] += (float)sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Calculates envelope of the sample data
|
||||
void BPMDetect::calcEnvelope(SAMPLETYPE *samples, int numsamples)
|
||||
{
|
||||
const static double decay = 0.7f; // decay constant for smoothing the envelope
|
||||
const static double norm = (1 - decay);
|
||||
|
||||
int i;
|
||||
LONG_SAMPLETYPE out;
|
||||
double val;
|
||||
|
||||
for (i = 0; i < numsamples; i ++)
|
||||
{
|
||||
// calc average RMS volume
|
||||
RMSVolumeAccu *= avgdecay;
|
||||
val = (float)fabs((float)samples[i]);
|
||||
RMSVolumeAccu += val * val;
|
||||
|
||||
// cut amplitudes that are below cutoff ~2 times RMS volume
|
||||
// (we're interested in peak values, not the silent moments)
|
||||
if (val < 0.5 * sqrt(RMSVolumeAccu * avgnorm))
|
||||
{
|
||||
val = 0;
|
||||
}
|
||||
|
||||
// smooth amplitude envelope
|
||||
envelopeAccu *= decay;
|
||||
envelopeAccu += val;
|
||||
out = (LONG_SAMPLETYPE)(envelopeAccu * norm);
|
||||
|
||||
#ifdef SOUNDTOUCH_INTEGER_SAMPLES
|
||||
// cut peaks (shouldn't be necessary though)
|
||||
if (out > 32767) out = 32767;
|
||||
#endif // SOUNDTOUCH_INTEGER_SAMPLES
|
||||
samples[i] = (SAMPLETYPE)out;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void BPMDetect::inputSamples(const SAMPLETYPE *samples, int numSamples)
|
||||
{
|
||||
SAMPLETYPE decimated[DECIMATED_BLOCK_SAMPLES];
|
||||
|
||||
// iterate so that max INPUT_BLOCK_SAMPLES processed per iteration
|
||||
while (numSamples > 0)
|
||||
{
|
||||
int block;
|
||||
int decSamples;
|
||||
|
||||
block = (numSamples > INPUT_BLOCK_SAMPLES) ? INPUT_BLOCK_SAMPLES : numSamples;
|
||||
|
||||
// decimate. note that converts to mono at the same time
|
||||
decSamples = decimate(decimated, samples, block);
|
||||
samples += block * channels;
|
||||
numSamples -= block;
|
||||
|
||||
// envelope new samples and add them to buffer
|
||||
calcEnvelope(decimated, decSamples);
|
||||
buffer->putSamples(decimated, decSamples);
|
||||
}
|
||||
|
||||
// when the buffer has enought samples for processing...
|
||||
if ((int)buffer->numSamples() > windowLen)
|
||||
{
|
||||
int processLength;
|
||||
|
||||
// how many samples are processed
|
||||
processLength = (int)buffer->numSamples() - windowLen;
|
||||
|
||||
// ... calculate autocorrelations for oldest samples...
|
||||
updateXCorr(processLength);
|
||||
// ... and remove them from the buffer
|
||||
buffer->receiveSamples(processLength);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void BPMDetect::removeBias()
|
||||
{
|
||||
int i;
|
||||
float minval = 1e12f; // arbitrary large number
|
||||
|
||||
for (i = windowStart; i < windowLen; i ++)
|
||||
{
|
||||
if (xcorr[i] < minval)
|
||||
{
|
||||
minval = xcorr[i];
|
||||
}
|
||||
}
|
||||
|
||||
for (i = windowStart; i < windowLen; i ++)
|
||||
{
|
||||
xcorr[i] -= minval;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float BPMDetect::getBpm()
|
||||
{
|
||||
double peakPos;
|
||||
double coeff;
|
||||
PeakFinder peakFinder;
|
||||
|
||||
coeff = 60.0 * ((double)sampleRate / (double)decimateBy);
|
||||
|
||||
// save bpm debug analysis data if debug data enabled
|
||||
_SaveDebugData(xcorr, windowStart, windowLen, coeff);
|
||||
|
||||
// remove bias from xcorr data
|
||||
removeBias();
|
||||
|
||||
// find peak position
|
||||
peakPos = peakFinder.detectPeak(xcorr, windowStart, windowLen);
|
||||
|
||||
assert(decimateBy != 0);
|
||||
if (peakPos < 1e-9) return 0.0; // detection failed.
|
||||
|
||||
// calculate BPM
|
||||
return (float) (coeff / peakPos);
|
||||
}
|
||||
164
3rdparty/SoundTouch/BPMDetect.h
vendored
164
3rdparty/SoundTouch/BPMDetect.h
vendored
@@ -1,164 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Beats-per-minute (BPM) detection routine.
|
||||
///
|
||||
/// The beat detection algorithm works as follows:
|
||||
/// - Use function 'inputSamples' to input a chunks of samples to the class for
|
||||
/// analysis. It's a good idea to enter a large sound file or stream in smallish
|
||||
/// chunks of around few kilosamples in order not to extinguish too much RAM memory.
|
||||
/// - Input sound data is decimated to approx 500 Hz to reduce calculation burden,
|
||||
/// which is basically ok as low (bass) frequencies mostly determine the beat rate.
|
||||
/// Simple averaging is used for anti-alias filtering because the resulting signal
|
||||
/// quality isn't of that high importance.
|
||||
/// - Decimated sound data is enveloped, i.e. the amplitude shape is detected by
|
||||
/// taking absolute value that's smoothed by sliding average. Signal levels that
|
||||
/// are below a couple of times the general RMS amplitude level are cut away to
|
||||
/// leave only notable peaks there.
|
||||
/// - Repeating sound patterns (e.g. beats) are detected by calculating short-term
|
||||
/// autocorrelation function of the enveloped signal.
|
||||
/// - After whole sound data file has been analyzed as above, the bpm level is
|
||||
/// detected by function 'getBpm' that finds the highest peak of the autocorrelation
|
||||
/// function, calculates it's precise location and converts this reading to bpm's.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2012-08-30 16:53:44 -0300 (qui, 30 ago 2012) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: BPMDetect.h 150 2012-08-30 19:53:44Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _BPMDetect_H_
|
||||
#define _BPMDetect_H_
|
||||
|
||||
#include "STTypes.h"
|
||||
#include "FIFOSampleBuffer.h"
|
||||
|
||||
namespace soundtouch
|
||||
{
|
||||
|
||||
/// Minimum allowed BPM rate. Used to restrict accepted result above a reasonable limit.
|
||||
#define MIN_BPM 29
|
||||
|
||||
/// Maximum allowed BPM rate. Used to restrict accepted result below a reasonable limit.
|
||||
#define MAX_BPM 200
|
||||
|
||||
|
||||
/// Class for calculating BPM rate for audio data.
|
||||
class BPMDetect
|
||||
{
|
||||
protected:
|
||||
/// Auto-correlation accumulator bins.
|
||||
float *xcorr;
|
||||
|
||||
/// Amplitude envelope sliding average approximation level accumulator
|
||||
double envelopeAccu;
|
||||
|
||||
/// RMS volume sliding average approximation level accumulator
|
||||
double RMSVolumeAccu;
|
||||
|
||||
/// Sample average counter.
|
||||
int decimateCount;
|
||||
|
||||
/// Sample average accumulator for FIFO-like decimation.
|
||||
soundtouch::LONG_SAMPLETYPE decimateSum;
|
||||
|
||||
/// Decimate sound by this coefficient to reach approx. 500 Hz.
|
||||
int decimateBy;
|
||||
|
||||
/// Auto-correlation window length
|
||||
int windowLen;
|
||||
|
||||
/// Number of channels (1 = mono, 2 = stereo)
|
||||
int channels;
|
||||
|
||||
/// sample rate
|
||||
int sampleRate;
|
||||
|
||||
/// Beginning of auto-correlation window: Autocorrelation isn't being updated for
|
||||
/// the first these many correlation bins.
|
||||
int windowStart;
|
||||
|
||||
/// FIFO-buffer for decimated processing samples.
|
||||
soundtouch::FIFOSampleBuffer *buffer;
|
||||
|
||||
/// Updates auto-correlation function for given number of decimated samples that
|
||||
/// are read from the internal 'buffer' pipe (samples aren't removed from the pipe
|
||||
/// though).
|
||||
void updateXCorr(int process_samples /// How many samples are processed.
|
||||
);
|
||||
|
||||
/// Decimates samples to approx. 500 Hz.
|
||||
///
|
||||
/// \return Number of output samples.
|
||||
int decimate(soundtouch::SAMPLETYPE *dest, ///< Destination buffer
|
||||
const soundtouch::SAMPLETYPE *src, ///< Source sample buffer
|
||||
int numsamples ///< Number of source samples.
|
||||
);
|
||||
|
||||
/// Calculates amplitude envelope for the buffer of samples.
|
||||
/// Result is output to 'samples'.
|
||||
void calcEnvelope(soundtouch::SAMPLETYPE *samples, ///< Pointer to input/output data buffer
|
||||
int numsamples ///< Number of samples in buffer
|
||||
);
|
||||
|
||||
/// remove constant bias from xcorr data
|
||||
void removeBias();
|
||||
|
||||
public:
|
||||
/// Constructor.
|
||||
BPMDetect(int numChannels, ///< Number of channels in sample data.
|
||||
int sampleRate ///< Sample rate in Hz.
|
||||
);
|
||||
|
||||
/// Destructor.
|
||||
virtual ~BPMDetect();
|
||||
|
||||
/// Inputs a block of samples for analyzing: Envelopes the samples and then
|
||||
/// updates the autocorrelation estimation. When whole song data has been input
|
||||
/// in smaller blocks using this function, read the resulting bpm with 'getBpm'
|
||||
/// function.
|
||||
///
|
||||
/// Notice that data in 'samples' array can be disrupted in processing.
|
||||
void inputSamples(const soundtouch::SAMPLETYPE *samples, ///< Pointer to input/working data buffer
|
||||
int numSamples ///< Number of samples in buffer
|
||||
);
|
||||
|
||||
|
||||
/// Analyzes the results and returns the BPM rate. Use this function to read result
|
||||
/// after whole song data has been input to the class by consecutive calls of
|
||||
/// 'inputSamples' function.
|
||||
///
|
||||
/// \return Beats-per-minute rate, or zero if detection failed.
|
||||
float getBpm();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // _BPMDetect_H_
|
||||
67
3rdparty/SoundTouch/CMakeLists.txt
vendored
67
3rdparty/SoundTouch/CMakeLists.txt
vendored
@@ -1,67 +0,0 @@
|
||||
# SoundTouch library
|
||||
|
||||
# library name
|
||||
set(Output pcsx2_SoundTouch)
|
||||
|
||||
set(CommonFlags
|
||||
-march=athlon-xp
|
||||
-march=prescott
|
||||
)
|
||||
|
||||
set(OptimizationFlags
|
||||
-Os
|
||||
-W
|
||||
)
|
||||
|
||||
# Debug - Build
|
||||
if(CMAKE_BUILD_TYPE STREQUAL Debug)
|
||||
# add defines
|
||||
add_definitions(${CommonFlags} -g)
|
||||
endif(CMAKE_BUILD_TYPE STREQUAL Debug)
|
||||
|
||||
# Devel - Build
|
||||
if(CMAKE_BUILD_TYPE STREQUAL Devel)
|
||||
# add defines
|
||||
add_definitions(${CommonFlags} ${OptimizationFlags})
|
||||
endif(CMAKE_BUILD_TYPE STREQUAL Devel)
|
||||
|
||||
# Release - Build
|
||||
if(CMAKE_BUILD_TYPE STREQUAL Release)
|
||||
# add defines
|
||||
add_definitions(${CommonFlags} ${OptimizationFlags})
|
||||
endif(CMAKE_BUILD_TYPE STREQUAL Release)
|
||||
|
||||
# variable with all sources of this library
|
||||
set(SoundTouchSources
|
||||
AAFilter.cpp
|
||||
FIFOSampleBuffer.cpp
|
||||
FIRFilter.cpp
|
||||
RateTransposer.cpp
|
||||
SoundTouch.cpp
|
||||
TDStretch.cpp
|
||||
# WavFile.cpp # directly include in spu2x
|
||||
cpu_detect_x86_gcc.cpp
|
||||
mmx_optimized.cpp
|
||||
sse_optimized.cpp)
|
||||
|
||||
# variable with all headers of this library
|
||||
set(SoundTouchHeaders
|
||||
AAFilter.h
|
||||
BPMDetect.h
|
||||
FIFOSampleBuffer.h
|
||||
FIFOSamplePipe.h
|
||||
FIRFilter.h
|
||||
RateTransposer.h
|
||||
STTypes.h
|
||||
SoundTouch.h
|
||||
TDStretch.h
|
||||
# WavFile.h # directly include in spu2x
|
||||
cpu_detect.h)
|
||||
|
||||
# add library
|
||||
add_library(${Output} STATIC ${SoundTouchSources} ${SoundTouchHeaders})
|
||||
|
||||
# User flags options
|
||||
if(NOT USER_CMAKE_LD_FLAGS STREQUAL "")
|
||||
target_link_libraries(${Output} "${USER_CMAKE_LD_FLAGS}")
|
||||
endif(NOT USER_CMAKE_LD_FLAGS STREQUAL "")
|
||||
259
3rdparty/SoundTouch/FIRFilter.cpp
vendored
259
3rdparty/SoundTouch/FIRFilter.cpp
vendored
@@ -1,259 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// General FIR digital filter routines with MMX optimization.
|
||||
///
|
||||
/// Note : MMX optimized functions reside in a separate, platform-specific file,
|
||||
/// e.g. 'mmx_win.cpp' or 'mmx_gcc.cpp'
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2011-09-02 15:56:11 -0300 (sex, 02 set 2011) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: FIRFilter.cpp 131 2011-09-02 18:56:11Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <memory.h>
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include "FIRFilter.h"
|
||||
#include "cpu_detect.h"
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Implementation of the class 'FIRFilter'
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
FIRFilter::FIRFilter()
|
||||
{
|
||||
resultDivFactor = 0;
|
||||
resultDivider = 0;
|
||||
length = 0;
|
||||
lengthDiv8 = 0;
|
||||
filterCoeffs = NULL;
|
||||
}
|
||||
|
||||
|
||||
FIRFilter::~FIRFilter()
|
||||
{
|
||||
delete[] filterCoeffs;
|
||||
}
|
||||
|
||||
// Usual C-version of the filter routine for stereo sound
|
||||
uint FIRFilter::evaluateFilterStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples) const
|
||||
{
|
||||
uint i, j, end;
|
||||
LONG_SAMPLETYPE suml, sumr;
|
||||
#ifdef SOUNDTOUCH_FLOAT_SAMPLES
|
||||
// when using floating point samples, use a scaler instead of a divider
|
||||
// because division is much slower operation than multiplying.
|
||||
double dScaler = 1.0 / (double)resultDivider;
|
||||
#endif
|
||||
|
||||
assert(length != 0);
|
||||
assert(src != NULL);
|
||||
assert(dest != NULL);
|
||||
assert(filterCoeffs != NULL);
|
||||
|
||||
end = 2 * (numSamples - length);
|
||||
|
||||
for (j = 0; j < end; j += 2)
|
||||
{
|
||||
const SAMPLETYPE *ptr;
|
||||
|
||||
suml = sumr = 0;
|
||||
ptr = src + j;
|
||||
|
||||
for (i = 0; i < length; i += 4)
|
||||
{
|
||||
// loop is unrolled by factor of 4 here for efficiency
|
||||
suml += ptr[2 * i + 0] * filterCoeffs[i + 0] +
|
||||
ptr[2 * i + 2] * filterCoeffs[i + 1] +
|
||||
ptr[2 * i + 4] * filterCoeffs[i + 2] +
|
||||
ptr[2 * i + 6] * filterCoeffs[i + 3];
|
||||
sumr += ptr[2 * i + 1] * filterCoeffs[i + 0] +
|
||||
ptr[2 * i + 3] * filterCoeffs[i + 1] +
|
||||
ptr[2 * i + 5] * filterCoeffs[i + 2] +
|
||||
ptr[2 * i + 7] * filterCoeffs[i + 3];
|
||||
}
|
||||
|
||||
#ifdef SOUNDTOUCH_INTEGER_SAMPLES
|
||||
suml >>= resultDivFactor;
|
||||
sumr >>= resultDivFactor;
|
||||
// saturate to 16 bit integer limits
|
||||
suml = (suml < -32768) ? -32768 : (suml > 32767) ? 32767 : suml;
|
||||
// saturate to 16 bit integer limits
|
||||
sumr = (sumr < -32768) ? -32768 : (sumr > 32767) ? 32767 : sumr;
|
||||
#else
|
||||
suml *= dScaler;
|
||||
sumr *= dScaler;
|
||||
#endif // SOUNDTOUCH_INTEGER_SAMPLES
|
||||
dest[j] = (SAMPLETYPE)suml;
|
||||
dest[j + 1] = (SAMPLETYPE)sumr;
|
||||
}
|
||||
return numSamples - length;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Usual C-version of the filter routine for mono sound
|
||||
uint FIRFilter::evaluateFilterMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples) const
|
||||
{
|
||||
uint i, j, end;
|
||||
LONG_SAMPLETYPE sum;
|
||||
#ifdef SOUNDTOUCH_FLOAT_SAMPLES
|
||||
// when using floating point samples, use a scaler instead of a divider
|
||||
// because division is much slower operation than multiplying.
|
||||
double dScaler = 1.0 / (double)resultDivider;
|
||||
#endif
|
||||
|
||||
|
||||
assert(length != 0);
|
||||
|
||||
end = numSamples - length;
|
||||
for (j = 0; j < end; j ++)
|
||||
{
|
||||
sum = 0;
|
||||
for (i = 0; i < length; i += 4)
|
||||
{
|
||||
// loop is unrolled by factor of 4 here for efficiency
|
||||
sum += src[i + 0] * filterCoeffs[i + 0] +
|
||||
src[i + 1] * filterCoeffs[i + 1] +
|
||||
src[i + 2] * filterCoeffs[i + 2] +
|
||||
src[i + 3] * filterCoeffs[i + 3];
|
||||
}
|
||||
#ifdef SOUNDTOUCH_INTEGER_SAMPLES
|
||||
sum >>= resultDivFactor;
|
||||
// saturate to 16 bit integer limits
|
||||
sum = (sum < -32768) ? -32768 : (sum > 32767) ? 32767 : sum;
|
||||
#else
|
||||
sum *= dScaler;
|
||||
#endif // SOUNDTOUCH_INTEGER_SAMPLES
|
||||
dest[j] = (SAMPLETYPE)sum;
|
||||
src ++;
|
||||
}
|
||||
return end;
|
||||
}
|
||||
|
||||
|
||||
// Set filter coeffiecients and length.
|
||||
//
|
||||
// Throws an exception if filter length isn't divisible by 8
|
||||
void FIRFilter::setCoefficients(const SAMPLETYPE *coeffs, uint newLength, uint uResultDivFactor)
|
||||
{
|
||||
assert(newLength > 0);
|
||||
if (newLength % 8) ST_THROW_RT_ERROR("FIR filter length not divisible by 8");
|
||||
|
||||
lengthDiv8 = newLength / 8;
|
||||
length = lengthDiv8 * 8;
|
||||
assert(length == newLength);
|
||||
|
||||
resultDivFactor = uResultDivFactor;
|
||||
resultDivider = (SAMPLETYPE)::pow(2.0, (int)resultDivFactor);
|
||||
|
||||
delete[] filterCoeffs;
|
||||
filterCoeffs = new SAMPLETYPE[length];
|
||||
memcpy(filterCoeffs, coeffs, length * sizeof(SAMPLETYPE));
|
||||
}
|
||||
|
||||
|
||||
uint FIRFilter::getLength() const
|
||||
{
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Applies the filter to the given sequence of samples.
|
||||
//
|
||||
// Note : The amount of outputted samples is by value of 'filter_length'
|
||||
// smaller than the amount of input samples.
|
||||
uint FIRFilter::evaluate(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples, uint numChannels) const
|
||||
{
|
||||
assert(numChannels == 1 || numChannels == 2);
|
||||
|
||||
assert(length > 0);
|
||||
assert(lengthDiv8 * 8 == length);
|
||||
if (numSamples < length) return 0;
|
||||
if (numChannels == 2)
|
||||
{
|
||||
return evaluateFilterStereo(dest, src, numSamples);
|
||||
} else {
|
||||
return evaluateFilterMono(dest, src, numSamples);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Operator 'new' is overloaded so that it automatically creates a suitable instance
|
||||
// depending on if we've a MMX-capable CPU available or not.
|
||||
void * FIRFilter::operator new(size_t s)
|
||||
{
|
||||
// Notice! don't use "new FIRFilter" directly, use "newInstance" to create a new instance instead!
|
||||
ST_THROW_RT_ERROR("Error in FIRFilter::new: Don't use 'new FIRFilter', use 'newInstance' member instead!");
|
||||
return newInstance();
|
||||
}
|
||||
|
||||
|
||||
FIRFilter * FIRFilter::newInstance()
|
||||
{
|
||||
uint uExtensions;
|
||||
|
||||
uExtensions = detectCPUextensions();
|
||||
|
||||
// Check if MMX/SSE instruction set extensions supported by CPU
|
||||
|
||||
#ifdef SOUNDTOUCH_ALLOW_MMX
|
||||
// MMX routines available only with integer sample types
|
||||
if (uExtensions & SUPPORT_MMX)
|
||||
{
|
||||
return ::new FIRFilterMMX;
|
||||
}
|
||||
else
|
||||
#endif // SOUNDTOUCH_ALLOW_MMX
|
||||
|
||||
#ifdef SOUNDTOUCH_ALLOW_SSE
|
||||
if (uExtensions & SUPPORT_SSE)
|
||||
{
|
||||
// SSE support
|
||||
return ::new FIRFilterSSE;
|
||||
}
|
||||
else
|
||||
#endif // SOUNDTOUCH_ALLOW_SSE
|
||||
|
||||
{
|
||||
// ISA optimizations not supported, use plain C version
|
||||
return ::new FIRFilter;
|
||||
}
|
||||
}
|
||||
71
3rdparty/SoundTouch/Makefile.am
vendored
71
3rdparty/SoundTouch/Makefile.am
vendored
@@ -1,71 +0,0 @@
|
||||
## Process this file with automake to create Makefile.in
|
||||
##
|
||||
## $Id: Makefile.am 138 2012-04-01 20:00:09Z oparviai $
|
||||
##
|
||||
## This file is part of SoundTouch, an audio processing library for pitch/time adjustments
|
||||
##
|
||||
## SoundTouch is free software; you can redistribute it and/or modify it under the
|
||||
## terms of the GNU General Public License as published by the Free Software
|
||||
## Foundation; either version 2 of the License, or (at your option) any later
|
||||
## version.
|
||||
##
|
||||
## SoundTouch is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
## WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
## A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License along with
|
||||
## this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
## Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
|
||||
|
||||
include $(top_srcdir)/config/am_include.mk
|
||||
|
||||
|
||||
# set to something if you want other stuff to be included in the distribution tarball
|
||||
EXTRA_DIST=SoundTouch.dsp SoundTouch.dsw SoundTouch.sln SoundTouch.vcproj
|
||||
|
||||
noinst_HEADERS=AAFilter.h cpu_detect.h cpu_detect_x86.cpp FIRFilter.h RateTransposer.h TDStretch.h PeakFinder.h
|
||||
|
||||
lib_LTLIBRARIES=libSoundTouch.la
|
||||
#
|
||||
libSoundTouch_la_SOURCES=AAFilter.cpp FIRFilter.cpp FIFOSampleBuffer.cpp RateTransposer.cpp SoundTouch.cpp TDStretch.cpp cpu_detect_x86.cpp BPMDetect.cpp PeakFinder.cpp
|
||||
|
||||
|
||||
# Compiler flags
|
||||
AM_CXXFLAGS=-O3 -fcheck-new -I../../include
|
||||
|
||||
# Compile the files that need MMX and SSE individually.
|
||||
libSoundTouch_la_LIBADD=libSoundTouchMMX.la libSoundTouchSSE.la
|
||||
noinst_LTLIBRARIES=libSoundTouchMMX.la libSoundTouchSSE.la
|
||||
libSoundTouchMMX_la_SOURCES=mmx_optimized.cpp
|
||||
libSoundTouchSSE_la_SOURCES=sse_optimized.cpp
|
||||
|
||||
# We enable optimizations by default.
|
||||
# If MMX is supported compile with -mmmx.
|
||||
# Do not assume -msse is also supported.
|
||||
if HAVE_MMX
|
||||
libSoundTouchMMX_la_CXXFLAGS = -mmmx $(AM_CXXFLAGS)
|
||||
else
|
||||
libSoundTouchMMX_la_CXXFLAGS = $(AM_CXXFLAGS)
|
||||
endif
|
||||
|
||||
# We enable optimizations by default.
|
||||
# If SSE is supported compile with -msse.
|
||||
if HAVE_SSE
|
||||
libSoundTouchSSE_la_CXXFLAGS = -msse $(AM_CXXFLAGS)
|
||||
else
|
||||
libSoundTouchSSE_la_CXXFLAGS = $(AM_CXXFLAGS)
|
||||
endif
|
||||
|
||||
# Let the user disable optimizations if he wishes to.
|
||||
if !X86_OPTIMIZATIONS
|
||||
libSoundTouchMMX_la_CXXFLAGS = $(AM_CXXFLAGS)
|
||||
libSoundTouchSSE_la_CXXFLAGS = $(AM_CXXFLAGS)
|
||||
endif
|
||||
|
||||
|
||||
# other linking flags to add
|
||||
# noinst_LTLIBRARIES = libSoundTouchOpt.la
|
||||
# libSoundTouch_la_LIBADD = libSoundTouchOpt.la
|
||||
# libSoundTouchOpt_la_SOURCES = mmx_optimized.cpp sse_optimized.cpp
|
||||
# libSoundTouchOpt_la_CXXFLAGS = -O3 -msse -fcheck-new -I../../include
|
||||
777
3rdparty/SoundTouch/README.html
vendored
777
3rdparty/SoundTouch/README.html
vendored
@@ -1,777 +0,0 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>SoundTouch library README</title>
|
||||
<meta http-equiv="Content-Type"
|
||||
content="text/html; charset=windows-1252">
|
||||
<meta http-equiv="Content-Language" content="en-us">
|
||||
<meta name="author" content="Olli Parviainen">
|
||||
<meta name="description"
|
||||
content="Readme file for SoundTouch audio processing library">
|
||||
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
|
||||
<meta name="ProgId" content="FrontPage.Editor.Document">
|
||||
<style> <!-- .normal { font-family: Arial }
|
||||
--></style>
|
||||
</head>
|
||||
<body class="normal">
|
||||
<hr>
|
||||
<h1>SoundTouch audio processing library v1.7.1</h1>
|
||||
<p class="normal">SoundTouch library Copyright <20> Olli Parviainen 2001-2012 </p>
|
||||
<hr>
|
||||
<h2>1. Introduction </h2>
|
||||
<p>SoundTouch is an open-source audio processing library that allows
|
||||
changing the sound tempo, pitch and playback rate parameters
|
||||
independently from each other, i.e.:</p>
|
||||
<ul>
|
||||
<li> Sound tempo can be increased or decreased while maintaining the
|
||||
original pitch </li>
|
||||
<li> Sound pitch can be increased or decreased while maintaining the
|
||||
original tempo </li>
|
||||
<li> Change playback rate that affects both tempo and pitch at the
|
||||
same time </li>
|
||||
<li> Choose any combination of tempo/pitch/rate</li>
|
||||
</ul>
|
||||
<h3>1.1 Contact information </h3>
|
||||
<p>Author email: oparviai 'at' iki.fi </p>
|
||||
<p>SoundTouch WWW page: <a href="http://www.surina.net/soundtouch">http://www.surina.net/soundtouch</a></p>
|
||||
<hr>
|
||||
<h2>2. Compiling SoundTouch</h2>
|
||||
<p>Before compiling, notice that you can choose the sample data format
|
||||
if it's desirable to use floating point sample data instead of 16bit
|
||||
integers. See section "sample data format" for more information.</p>
|
||||
<h3>2.1. Building in Microsoft Windows</h3>
|
||||
<p>Project files for Microsoft Visual C++ 6.0 and Visual C++ .NET are
|
||||
supplied with the source code package.<br>
|
||||
</p>
|
||||
<p> Please notice that SoundTouch library uses processor-specific
|
||||
optimizations for Pentium III and AMD processors. Visual Studio .NET
|
||||
and later versions supports the required instructions by default, but
|
||||
Visual Studio 6.0 requires a processor pack upgrade to be installed in
|
||||
order to support these optimizations. The processor pack upgrade can be
|
||||
downloaded from Microsoft site at this URL:</p>
|
||||
<p><a href="http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx">http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx</a></p>
|
||||
<p>If the above URL is unavailable or removed, go to <a
|
||||
href="http://msdn.microsoft.com/"> http://msdn.microsoft.com</a> and
|
||||
perform a search with keywords "processor pack". </p>
|
||||
<p>To build the binaries with Visual C++ compiler, either run
|
||||
"make-win.bat" script, or open the appropriate project files in source
|
||||
code directories with Visual Studio. The final executable will appear
|
||||
under the "SoundTouch\bin" directory. If using the Visual Studio IDE
|
||||
instead of the make-win.bat script, directories bin and lib may need to
|
||||
be created manually to the SoundTouch package root for the final
|
||||
executables. The make-win.bat script creates these directories
|
||||
automatically. </p>
|
||||
<h3>2.2. Building in Gnu platforms</h3>
|
||||
<p>The SoundTouch library compiles in practically any platform
|
||||
supporting GNU compiler (GCC) tools. SoundTouch requires GCC version 4.3 or later.</p>
|
||||
<p>To build and install the binaries, run the following commands in
|
||||
/soundtouch directory:</p>
|
||||
<table border="0" cellpadding="0" cellspacing="4">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="vertical-align: top;">
|
||||
<pre>./bootstrap -</pre>
|
||||
</td>
|
||||
<td style="vertical-align: top;">Creates "configure" file with
|
||||
local autoconf/automake toolset.<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<pre>./configure -</pre>
|
||||
</td>
|
||||
<td>
|
||||
<p>Configures the SoundTouch package for the local environment.
|
||||
Notice that "configure" file is not available before running the
|
||||
"./bootstrap" command as above.<br>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<pre>make -</pre>
|
||||
</td>
|
||||
<td>
|
||||
<p>Builds the SoundTouch library & SoundStretch utility.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<pre>make install -</pre>
|
||||
</td>
|
||||
<td>
|
||||
<p>Installs the SoundTouch & BPM libraries to <b>/usr/local/lib</b>
|
||||
and SoundStretch utility to <b>/usr/local/bin</b>. Please notice that
|
||||
'root' privileges may be required to install the binaries to the
|
||||
destination locations.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h4><b>2.2.1 Required GNU tools</b> </h4>
|
||||
<p> <span style="font-weight: bold;">Bash shell</span>, <span
|
||||
style="font-weight: bold;">GNU C++ compiler</span>, <span
|
||||
style="font-weight: bold;">libtool</span>, <span
|
||||
style="font-weight: bold;">autoconf</span> and <span
|
||||
style="font-weight: bold;">automake</span> tools
|
||||
are required for compiling the SoundTouch library. These are usually
|
||||
included with the GNU/Linux distribution, but if not, install these
|
||||
packages first. For example, Ubuntu Linux can acquire and install
|
||||
these with the following command:</p>
|
||||
<pre><b>sudo apt-get install automake autoconf libtool build-essential</b></pre>
|
||||
<h4><b>2.2.2 Problems with GCC compiler compatibility</b></h4>
|
||||
<p>At the release time the SoundTouch package has been tested to
|
||||
compile in GNU/Linux platform. However, If you have problems getting the
|
||||
SoundTouch library compiled, try disabling optimizations that are specific for
|
||||
x86 processors by running <b>./configure</b> script with switch
|
||||
<blockquote>
|
||||
<pre>--enable-x86-optimizations=no</pre>
|
||||
</blockquote>
|
||||
|
||||
Alternatively, if you don't use GNU Configure system, edit file "include/STTypes.h"
|
||||
directly and remove the following definition:<blockquote>
|
||||
<pre>#define SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS 1</pre>
|
||||
</blockquote>
|
||||
|
||||
<h4><b>2.2.3 Compiling Shared Library / DLL version</b></h4>
|
||||
<p>
|
||||
The GNU compilation does not automatically create a shared-library version of
|
||||
SoundTouch (.so or .dll). If such is desired, then you can create it as follows
|
||||
after running the usual compilation:</p>
|
||||
<blockquote>
|
||||
<pre>g++ -shared -static -DDLL_EXPORTS -I../../include -o SoundTouch.dll \
|
||||
SoundTouchDLL.cpp ../SoundTouch/.libs/libSoundTouch.a
|
||||
sstrip SoundTouch.dll</pre>
|
||||
</blockquote>
|
||||
|
||||
<h3>2.1. Building in Android</h3>
|
||||
<p>Android compilation instructions are within the
|
||||
source code package, see file "<b>source/Android-lib/README-SoundTouch-Android.html</b>"
|
||||
in the package.</p>
|
||||
|
||||
<hr>
|
||||
<h2>3. About implementation & Usage tips <h3>3.1. Supported sample data formats</h3>
|
||||
<p>The sample data format can be chosen between 16bit signed integer
|
||||
and 32bit floating point values, the default is 32bit floating point. </p>
|
||||
<p> In Windows environment, the sample data format is chosen in file
|
||||
"STTypes.h" by choosing one of the following defines:</p>
|
||||
<ul>
|
||||
<li> <span style="font-weight: bold;">#define
|
||||
SOUNDTOUCH_INTEGER_SAMPLES</span> for 16bit signed integer </li>
|
||||
<li> <span style="font-weight: bold;">#define </span><span
|
||||
style="font-weight: bold;">SOUNDTOUCH_</span><span
|
||||
style="font-weight: bold;">FLOAT_SAMPLES</span> for 32bit floating
|
||||
point</li>
|
||||
</ul>
|
||||
<p> In GNU environment, the floating sample format is used by default,
|
||||
but integer sample format can be chosen by giving the following switch
|
||||
to the configure script: </p>
|
||||
<blockquote>
|
||||
<pre>./configure --enable-integer-samples</pre>
|
||||
</blockquote>
|
||||
<p>The sample data can have either single (mono) or double (stereo)
|
||||
audio channel. Stereo data is interleaved so that every other data
|
||||
value is for left channel and every second for right channel. Notice
|
||||
that while it'd be possible in theory to process stereo sound as two
|
||||
separate mono channels, this isn't recommended because processing the
|
||||
channels separately would result in losing the phase coherency between
|
||||
the channels, which consequently would ruin the stereo effect.</p>
|
||||
<p>Sample rates between 8000-48000H are supported.</p>
|
||||
<h3>3.2. Processing latency</h3>
|
||||
<p>The processing and latency constraints of the SoundTouch library are:</p>
|
||||
<ul>
|
||||
<li> Input/output processing latency for the SoundTouch processor is
|
||||
around 100 ms. This is when time-stretching is used. If the rate
|
||||
transposing effect alone is used, the latency requirement is much
|
||||
shorter, see section 'About algorithms'. </li>
|
||||
<li> Processing CD-quality sound (16bit stereo sound with 44100H
|
||||
sample rate) in real-time or faster is possible starting from
|
||||
processors equivalent to Intel Pentium 133Mh or better, if using the
|
||||
"quick" processing algorithm. If not using the "quick" mode or if
|
||||
floating point sample data are being used, several times more CPU power
|
||||
is typically required.</li>
|
||||
</ul>
|
||||
<h3>3.3. About algorithms</h3>
|
||||
<p>SoundTouch provides three seemingly independent effects: tempo,
|
||||
pitch and playback rate control. These three controls are implemented
|
||||
as combination of two primary effects, <em>sample rate transposing</em>
|
||||
and <em>time-stretching</em>.</p>
|
||||
<p><em>Sample rate transposing</em> affects both the audio stream
|
||||
duration and pitch. It's implemented simply by converting the original
|
||||
audio sample stream to the desired duration by interpolating from
|
||||
the original audio samples. In SoundTouch, linear interpolation with
|
||||
anti-alias filtering is used. Theoretically a higher-order
|
||||
interpolation provide better result than 1st order linear
|
||||
interpolation, but in audio application linear interpolation together
|
||||
with anti-alias filtering performs subjectively about as well as
|
||||
higher-order filtering would.</p>
|
||||
<p><em>Time-stretching </em>means changing the audio stream duration
|
||||
without affecting it's pitch. SoundTouch uses WSOLA-like
|
||||
time-stretching routines that operate in the time domain. Compared to
|
||||
sample rate transposing, time-stretching is a much heavier operation
|
||||
and also requires a longer processing "window" of sound samples used by
|
||||
the processing algorithm, thus increasing the algorithm input/output
|
||||
latency. Typical i/o latency for the SoundTouch time-stretch algorithm
|
||||
is around 100 ms.</p>
|
||||
<p>Sample rate transposing and time-stretching are then used together
|
||||
to produce the tempo, pitch and rate controls:</p>
|
||||
<ul>
|
||||
<li> <strong>'Tempo'</strong> control is implemented purely by
|
||||
time-stretching. </li>
|
||||
<li> <strong>'Rate</strong>' control is implemented purely by sample
|
||||
rate transposing. </li>
|
||||
<li> <strong>'Pitch</strong>' control is implemented as a
|
||||
combination of time-stretching and sample rate transposing. For
|
||||
example, to increase pitch the audio stream is first time-stretched to
|
||||
longer duration (without affecting pitch) and then transposed back to
|
||||
original duration by sample rate transposing, which simultaneously
|
||||
reduces duration and increases pitch. The result is original duration
|
||||
but increased pitch.</li>
|
||||
</ul>
|
||||
<h3>3.4 Tuning the algorithm parameters</h3>
|
||||
<p>The time-stretch algorithm has few parameters that can be tuned to
|
||||
optimize sound quality for certain application. The current default
|
||||
parameters have been chosen by iterative if-then analysis (read: "trial
|
||||
and error") to obtain best subjective sound quality in pop/rock music
|
||||
processing, but in applications processing different kind of sound the
|
||||
default parameter set may result into a sub-optimal result.</p>
|
||||
<p>The time-stretch algorithm default parameter values are set by the
|
||||
following #defines in file "TDStretch.h":</p>
|
||||
<blockquote>
|
||||
<pre>#define DEFAULT_SEQUENCE_MS AUTOMATIC<br>#define DEFAULT_SEEKWINDOW_MS AUTOMATIC<br>#define DEFAULT_OVERLAP_MS 8</pre>
|
||||
</blockquote>
|
||||
<p>These parameters affect to the time-stretch algorithm as follows:</p>
|
||||
<ul>
|
||||
<li> <strong>DEFAULT_SEQUENCE_MS</strong>: This is the default
|
||||
length of a single processing sequence in milliseconds which determines
|
||||
the how the original sound is chopped in the time-stretch algorithm.
|
||||
Larger values mean fewer sequences are used in processing. In principle
|
||||
a larger value sounds better when slowing down the tempo, but worse
|
||||
when increasing the tempo and vice versa. <br>
|
||||
<br>
|
||||
By default, this setting value is calculated automatically according to
|
||||
tempo value.<br>
|
||||
</li>
|
||||
<li> <strong>DEFAULT_SEEKWINDOW_MS</strong>: The seeking window
|
||||
default length in milliseconds is for the algorithm that seeks the best
|
||||
possible overlapping location. This determines from how wide a sample
|
||||
"window" the algorithm can use to find an optimal mixing location when
|
||||
the sound sequences are to be linked back together. <br>
|
||||
<br>
|
||||
The bigger this window setting is, the higher the possibility to find a
|
||||
better mixing position becomes, but at the same time large values may
|
||||
cause a "drifting" sound artifact because neighboring sequences can be
|
||||
chosen at more uneven intervals. If there's a disturbing artifact that
|
||||
sounds as if a constant frequency was drifting around, try reducing
|
||||
this setting.<br>
|
||||
<br>
|
||||
By default, this setting value is calculated automatically according to
|
||||
tempo value.<br>
|
||||
</li>
|
||||
<li> <strong>DEFAULT_OVERLAP_MS</strong>: Overlap length in
|
||||
milliseconds. When the sound sequences are mixed back together to form
|
||||
again a continuous sound stream, this parameter defines how much the
|
||||
ends of the consecutive sequences will overlap with each other.<br>
|
||||
<br>
|
||||
This shouldn't be that critical parameter. If you reduce the
|
||||
DEFAULT_SEQUENCE_MS setting by a large amount, you might wish to try a
|
||||
smaller value on this.</li>
|
||||
</ul>
|
||||
<p>Notice that these parameters can also be set during execution time
|
||||
with functions "<strong>TDStretch::setParameters()</strong>" and "<strong>SoundTouch::setSetting()</strong>".</p>
|
||||
<p>The table below summaries how the parameters can be adjusted for
|
||||
different applications:</p>
|
||||
<table border="1">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td valign="top"><strong>Parameter name</strong></td>
|
||||
<td valign="top"><strong>Default value magnitude</strong></td>
|
||||
<td valign="top"><strong>Larger value affects...</strong></td>
|
||||
<td valign="top"><strong>Smaller value affects...</strong></td>
|
||||
<td valign="top"><strong>Effect to CPU burden</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>SEQUENCE_MS</pre>
|
||||
</td>
|
||||
<td valign="top">Default value is relatively large, chosen for
|
||||
slowing down music tempo</td>
|
||||
<td valign="top">Larger value is usually better for slowing down
|
||||
tempo. Growing the value decelerates the "echoing" artifact when
|
||||
slowing down the tempo.</td>
|
||||
<td valign="top">Smaller value might be better for speeding up
|
||||
tempo. Reducing the value accelerates the "echoing" artifact when
|
||||
slowing down the tempo </td>
|
||||
<td valign="top">Increasing the parameter value reduces
|
||||
computation burden</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>SEEKWINDOW_MS</pre>
|
||||
</td>
|
||||
<td valign="top">Default value is relatively large, chosen for
|
||||
slowing down music tempo</td>
|
||||
<td valign="top">Larger value eases finding a good mixing
|
||||
position, but may cause a "drifting" artifact</td>
|
||||
<td valign="top">Smaller reduce possibility to find a good mixing
|
||||
position, but reduce the "drifting" artifact.</td>
|
||||
<td valign="top">Increasing the parameter value increases
|
||||
computation burden</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>OVERLAP_MS</pre>
|
||||
</td>
|
||||
<td valign="top">Default value is relatively large, chosen to
|
||||
suit with above parameters.</td>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top">If you reduce the "sequence ms" setting, you
|
||||
might wish to try a smaller value.</td>
|
||||
<td valign="top">Increasing the parameter value increases
|
||||
computation burden</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>3.5 Performance Optimizations </h3>
|
||||
<p><strong>General optimizations:</strong></p>
|
||||
<p>The time-stretch routine has a 'quick' mode that substantially
|
||||
speeds up the algorithm but may degrade the sound quality by a small
|
||||
amount. This mode is activated by calling SoundTouch::setSetting()
|
||||
function with parameter id of SETTING_USE_QUICKSEEK and value
|
||||
"1", i.e. </p>
|
||||
<blockquote>
|
||||
<p>setSetting(SETTING_USE_QUICKSEEK, 1);</p>
|
||||
</blockquote>
|
||||
<p><strong>CPU-specific optimizations:</strong></p>
|
||||
<ul>
|
||||
<li> Intel MMX optimized routines are used with compatible CPUs when
|
||||
16bit integer sample type is used. MMX optimizations are available both
|
||||
in Win32 and Gnu/x86 platforms. Compatible processors are Intel
|
||||
PentiumMMX and later; AMD K6-2, Athlon and later. </li>
|
||||
<li> Intel SSE optimized routines are used with compatible CPUs when
|
||||
floating point sample type is used. SSE optimizations are currently
|
||||
implemented for Win32 platform only. Processors compatible with SSE
|
||||
extension are Intel processors starting from Pentium-III, and AMD
|
||||
processors starting from Athlon XP. </li>
|
||||
<li> AMD 3DNow! optimized routines are used with compatible CPUs when
|
||||
floating point sample type is used, but SSE extension isn't supported .
|
||||
3DNow! optimizations are currently implemented for Win32 platform only.
|
||||
These optimizations are used in AMD K6-2 and Athlon (classic) CPU's;
|
||||
better performing SSE routines are used with AMD processor starting
|
||||
from Athlon XP. </li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2><a name="SoundStretch"></a>4. SoundStretch audio processing utility
|
||||
</h2>
|
||||
<p>SoundStretch audio processing utility<br>
|
||||
Copyright (c) Olli Parviainen 2002-2012</p>
|
||||
<p>SoundStretch is a simple command-line application that can change
|
||||
tempo, pitch and playback rates of WAV sound files. This program is
|
||||
intended primarily to demonstrate how the "SoundTouch" library can be
|
||||
used to process sound in your own program, but it can as well be used
|
||||
for processing sound files.</p>
|
||||
<h3>4.1. SoundStretch Usage Instructions</h3>
|
||||
<p>SoundStretch Usage syntax:</p>
|
||||
<blockquote>
|
||||
<pre>soundstretch infilename outfilename [switches]</pre>
|
||||
</blockquote>
|
||||
<p>Where: </p>
|
||||
<table width="100%" border="0" cellpadding="2">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>"infilename"</pre>
|
||||
</td>
|
||||
<td valign="top">Name of the input sound data file (in .WAV audio
|
||||
file format). Give "stdin" as filename to use standard input pipe. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>"outfilename"</pre>
|
||||
</td>
|
||||
<td valign="top">Name of the output sound file where the
|
||||
resulting sound is saved (in .WAV audio file format). This parameter
|
||||
may be omitted if you don't want to save the output (e.g. when
|
||||
only calculating BPM rate with '-bpm' switch). Give "stdout" as
|
||||
filename to use standard output pipe.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre> [switches]</pre>
|
||||
</td>
|
||||
<td valign="top">Are one or more control switches.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Available control switches are:</p>
|
||||
<table width="100%" border="0" cellpadding="2">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>-tempo=n </pre>
|
||||
</td>
|
||||
<td valign="top">Change the sound tempo by n percents (n = -95.0
|
||||
.. +5000.0 %) </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>-pitch=n</pre>
|
||||
</td>
|
||||
<td valign="top">Change the sound pitch by n semitones (n = -60.0
|
||||
.. + 60.0 semitones) </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>-rate=n</pre>
|
||||
</td>
|
||||
<td valign="top">Change the sound playback rate by n percents (n
|
||||
= -95.0 .. +5000.0 %) </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>-bpm=n</pre>
|
||||
</td>
|
||||
<td valign="top">Detect the Beats-Per-Minute (BPM) rate of the
|
||||
sound and adjust the tempo to meet 'n' BPMs. When this switch is
|
||||
applied, the "-tempo" switch is ignored. If "=n" is omitted, i.e.
|
||||
switch "-bpm" is used alone, then the BPM rate is estimated and
|
||||
displayed, but tempo not adjusted according to the BPM value. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>-quick</pre>
|
||||
</td>
|
||||
<td valign="top">Use quicker tempo change algorithm. Gains speed
|
||||
but loses sound quality. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>-naa</pre>
|
||||
</td>
|
||||
<td valign="top">Don't use anti-alias filtering in sample rate
|
||||
transposing. Gains speed but loses sound quality. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<pre>-license</pre>
|
||||
</td>
|
||||
<td valign="top">Displays the program license text (LGPL)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Notes:</p>
|
||||
<ul>
|
||||
<li> To use standard input/output pipes for processing, give "stdin"
|
||||
and "stdout" as input/output filenames correspondingly. The standard
|
||||
input/output pipes will still carry the audio data in .wav audio file
|
||||
format. </li>
|
||||
<li> The numerical switches allow both integer (e.g. "-tempo=123")
|
||||
and decimal (e.g. "-tempo=123.45") numbers. </li>
|
||||
<li> The "-naa" and/or "-quick" switches can be used to reduce CPU
|
||||
usage while compromising some sound quality </li>
|
||||
<li> The BPM detection algorithm works by detecting repeating bass or
|
||||
drum patterns at low frequencies of <250Hz. A lower-than-expected
|
||||
BPM figure may be reported for music with uneven or complex bass
|
||||
patterns. </li>
|
||||
</ul>
|
||||
<h3>4.2. SoundStretch usage examples </h3>
|
||||
<p><strong>Example 1</strong></p>
|
||||
<p>The following command increases tempo of the sound file
|
||||
"originalfile.wav" by 12.5% and stores result to file
|
||||
"destinationfile.wav":</p>
|
||||
<blockquote>
|
||||
<pre>soundstretch originalfile.wav destinationfile.wav -tempo=12.5</pre>
|
||||
</blockquote>
|
||||
<p><strong>Example 2</strong></p>
|
||||
<p>The following command decreases the sound pitch (key) of the sound
|
||||
file "orig.wav" by two semitones and stores the result to file
|
||||
"dest.wav":</p>
|
||||
<blockquote>
|
||||
<pre>soundstretch orig.wav dest.wav -pitch=-2</pre>
|
||||
</blockquote>
|
||||
<p><strong>Example 3</strong></p>
|
||||
<p>The following command processes the file "orig.wav" by decreasing
|
||||
the sound tempo by 25.3% and increasing the sound pitch (key) by 1.5
|
||||
semitones. Resulting .wav audio data is directed to standard output
|
||||
pipe:</p>
|
||||
<blockquote>
|
||||
<pre>soundstretch orig.wav stdout -tempo=-25.3 -pitch=1.5</pre>
|
||||
</blockquote>
|
||||
<p><strong>Example 4</strong></p>
|
||||
<p>The following command detects the BPM rate of the file "orig.wav"
|
||||
and adjusts the tempo to match 100 beats per minute. Result is stored
|
||||
to file "dest.wav":</p>
|
||||
<blockquote>
|
||||
<pre>soundstretch orig.wav dest.wav -bpm=100</pre>
|
||||
</blockquote>
|
||||
<p><strong>Example 5</strong></p>
|
||||
<p>The following command reads .wav sound data from standard input pipe
|
||||
and estimates the BPM rate:</p>
|
||||
<blockquote>
|
||||
<pre>soundstretch stdin -bpm</pre>
|
||||
</blockquote>
|
||||
<hr>
|
||||
<h2>5. Change History</h2>
|
||||
<h3>5.1. SoundTouch library Change History </h3>
|
||||
<p><b>1.7.1:</b></p>
|
||||
<ul>
|
||||
<li>Added files for Android compilation
|
||||
</ul>
|
||||
<p><b>1.7.0:</b></p>
|
||||
<ul>
|
||||
<li>Sound quality improvements/li>
|
||||
<li>Improved flush() to adjust output sound stream duration to match better with
|
||||
ideal duration</li>
|
||||
<li>Rewrote x86 cpu feature check to resolve compatibility problems</li>
|
||||
<li>Configure script automatically checks if CPU supports mmx & sse compatibility for GNU platform, and
|
||||
the script support now "--enable-x86-optimizations" switch to allow disabling x86-specific optimizations.</li>
|
||||
<li>Revised #define conditions for 32bit/64bit compatibility</li>
|
||||
<li>gnu autoconf/automake script compatibility fixes</li>
|
||||
<li>Tuned beat-per-minute detection algorithm</li>
|
||||
</ul>
|
||||
<p><b>1.6.0:</b></p>
|
||||
<ul>
|
||||
<li> Added automatic cutoff threshold adaptation to beat detection
|
||||
routine to better adapt BPM calculation to different types of music </li>
|
||||
<li> Retired 3DNow! optimization support as 3DNow! is nowadays
|
||||
obsoleted and assembler code is nuisance to maintain</li>
|
||||
<li>Retired "configure" file from source code package due to
|
||||
autoconf/automake versio conflicts, so that it is from now on to be
|
||||
generated by invoking "boostrap" script that uses locally available
|
||||
toolchain version for generating the "configure" file</li>
|
||||
<li>Resolved namespace/label naming conflicts with other libraries by
|
||||
replacing global labels such as INTEGER_SAMPLES with more specific
|
||||
SOUNDTOUCH_INTEGER_SAMPLES etc.<br>
|
||||
</li>
|
||||
<li>Updated windows build scripts & project files for Visual
|
||||
Studio 2008 support</li>
|
||||
<li> Updated SoundTouch.dll API for .NET compatibility</li>
|
||||
<li> Added API for querying nominal processing input & output
|
||||
sample batch sizes</li>
|
||||
</ul>
|
||||
<p><strong>1.5.0:</strong></p>
|
||||
<ul>
|
||||
<li> Added normalization to correlation calculation and improvement
|
||||
automatic seek/sequence parameter calculation to improve sound quality </li>
|
||||
<li> Bugfixes:
|
||||
<ul>
|
||||
<li> Fixed negative array indexing in quick seek algorithm </li>
|
||||
<li> FIR autoalias filter running too far in processing buffer </li>
|
||||
<li> Check against zero sample count in rate transposing </li>
|
||||
<li> Fix for x86-64 support: Removed pop/push instructions from
|
||||
the cpu detection algorithm. </li>
|
||||
<li> Check against empty buffers in FIFOSampleBuffer </li>
|
||||
<li> Other minor fixes & code cleanup</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li> Fixes in compilation scripts for non-Intel platforms </li>
|
||||
<li> Added Dynamic-Link-Library (DLL) version of SoundTouch library
|
||||
build, provided with Delphi/Pascal wrapper for calling the dll routines
|
||||
</li>
|
||||
<li> Added #define PREVENT_CLICK_AT_RATE_CROSSOVER that prevents a
|
||||
click artifact when crossing the nominal pitch from either positive to
|
||||
negative side or vice versa</li>
|
||||
</ul>
|
||||
<p><strong>1.4.1:</strong></p>
|
||||
<ul>
|
||||
<li> Fixed a buffer overflow bug in BPM detect algorithm routines if
|
||||
processing more than 2048 samples at one call </li>
|
||||
</ul>
|
||||
<p><strong>1.4.0:</strong></p>
|
||||
<ul>
|
||||
<li> Improved sound quality by automatic calculation of time stretch
|
||||
algorithm processing parameters according to tempo setting </li>
|
||||
<li> Moved BPM detection routines from SoundStretch application into
|
||||
SoundTouch library </li>
|
||||
<li> Bugfixes: Usage of uninitialied variables, GNU build scripts,
|
||||
compiler errors due to 'const' keyword mismatch. </li>
|
||||
<li> Source code cleanup</li>
|
||||
</ul>
|
||||
<p><strong>1.3.1: </strong> </p>
|
||||
<ul>
|
||||
<li> Changed static class declaration to GCC 4.x compiler compatible
|
||||
syntax. </li>
|
||||
<li> Enabled MMX/SSE-optimized routines also for GCC compilers.
|
||||
Earlier the MMX/SSE-optimized routines were written in
|
||||
compiler-specific inline assembler, now these routines are migrated to
|
||||
use compiler intrinsic syntax which allows compiling the same
|
||||
MMX/SSE-optimized source code with both Visual C++ and GCC compilers. </li>
|
||||
<li> Set floating point as the default sample format and added switch
|
||||
to the GNU configure script for selecting the other sample format.</li>
|
||||
</ul>
|
||||
<p><strong>1.3.0: </strong> </p>
|
||||
<ul>
|
||||
<li> Fixed tempo routine output duration inaccuracy due to rounding
|
||||
error </li>
|
||||
<li> Implemented separate processing routines for integer and
|
||||
floating arithmetic to allow improvements to floating point routines
|
||||
(earlier used algorithms mostly optimized for integer arithmetic also
|
||||
for floating point samples) </li>
|
||||
<li> Fixed a bug that distorts sound if sample rate changes during
|
||||
the sound stream </li>
|
||||
<li> Fixed a memory leak that appeared in MMX/SSE/3DNow! optimized
|
||||
routines </li>
|
||||
<li> Reduced redundant code pieces in MMX/SSE/3DNow! optimized
|
||||
routines vs. the standard C routines. </li>
|
||||
<li> MMX routine incompatibility with new gcc compiler versions </li>
|
||||
<li> Other miscellaneous bug fixes </li>
|
||||
</ul>
|
||||
<p><strong>1.2.1: </strong> </p>
|
||||
<ul>
|
||||
<li> Added automake/autoconf scripts for GNU platforms (in courtesy
|
||||
of David Durham) </li>
|
||||
<li> Fixed SCALE overflow bug in rate transposer routine. </li>
|
||||
<li> Fixed 64bit address space bugs. </li>
|
||||
<li> Created a 'soundtouch' namespace for SAMPLETYPE definitions.</li>
|
||||
</ul>
|
||||
<p><strong>1.2.0: </strong> </p>
|
||||
<ul>
|
||||
<li> Added support for 32bit floating point sample data type with
|
||||
SSE/3DNow! optimizations for Win32 platform (SSE/3DNow! optimizations
|
||||
currently not supported in GCC environment) </li>
|
||||
<li> Replaced 'make-gcc' script for GNU environment by master
|
||||
Makefile </li>
|
||||
<li> Added time-stretch routine configurability to SoundTouch main
|
||||
class </li>
|
||||
<li> Bugfixes</li>
|
||||
</ul>
|
||||
<p><strong>1.1.1: </strong> </p>
|
||||
<ul>
|
||||
<li> Moved SoundTouch under lesser GPL license (LGPL). This allows
|
||||
using SoundTouch library in programs that aren't released under GPL
|
||||
license. </li>
|
||||
<li> Changed MMX routine organiation so that MMX optimized routines
|
||||
are now implemented in classes that are derived from the basic classes
|
||||
having the standard non-mmx routines. </li>
|
||||
<li> MMX routines to support gcc version 3. </li>
|
||||
<li> Replaced windows makefiles by script using the .dsw files </li>
|
||||
</ul>
|
||||
<p><strong>1.0.1: </strong> </p>
|
||||
<ul>
|
||||
<li> "mmx_gcc.cpp": Added "using namespace std" and removed "return
|
||||
0" from a function with void return value to fix compiler errors when
|
||||
compiling the library in Solaris environment. </li>
|
||||
<li> Moved file "FIFOSampleBuffer.h" to "include" directory to allow
|
||||
accessing the FIFOSampleBuffer class from external files. </li>
|
||||
</ul>
|
||||
<p><strong>1.0: </strong> </p>
|
||||
<ul>
|
||||
<li> Initial release </li>
|
||||
</ul>
|
||||
<p> </p>
|
||||
<h3>5.2. SoundStretch application Change History </h3>
|
||||
<p><b>1.7.0:</b></p>
|
||||
<ul>
|
||||
<li>Bugfixes in Wavfile: exception string formatting, avoid getLengthMs() integer
|
||||
precision overflow, support WAV files using 24/32bit sample format.</li>
|
||||
</ul>
|
||||
<p><b>1.5.0:</b></p>
|
||||
<ul>
|
||||
<li> Added "-speech" switch to activate algorithm parameters more
|
||||
suitable for speech processing than the default parameters tuned for
|
||||
music processing.</li>
|
||||
</ul>
|
||||
<p><strong>1.4.0:</strong></p>
|
||||
<ul>
|
||||
<li> Moved BPM detection routines from SoundStretch application into
|
||||
SoundTouch library </li>
|
||||
<li> Allow using standard input/output pipes as audio processing
|
||||
input/output streams</li>
|
||||
</ul>
|
||||
<p><strong>1.3.0:</strong></p>
|
||||
<ul>
|
||||
<li> Simplified accessing WAV files with floating point sample
|
||||
format. </li>
|
||||
</ul>
|
||||
<p><strong>1.2.1: </strong> </p>
|
||||
<ul>
|
||||
<li> Fixed 64bit address space bugs.</li>
|
||||
</ul>
|
||||
<p><strong>1.2.0: </strong> </p>
|
||||
<ul>
|
||||
<li> Added support for 32bit floating point sample data type </li>
|
||||
<li> Restructured the BPM routines into separate library </li>
|
||||
<li> Fixed big-endian conversion bugs in WAV file routines (hopefully
|
||||
:)</li>
|
||||
</ul>
|
||||
<p><strong>1.1.1: </strong> </p>
|
||||
<ul>
|
||||
<li> Fixed bugs in WAV file reading & added byte-order conversion
|
||||
for big-endian processors. </li>
|
||||
<li> Moved SoundStretch source code under 'example' directory to
|
||||
highlight difference from SoundTouch stuff. </li>
|
||||
<li> Replaced windows makefiles by script using the .dsw files </li>
|
||||
<li> Output file name isn't required if output isn't desired (e.g. if
|
||||
using the switch '-bpm' in plain format only) </li>
|
||||
</ul>
|
||||
<p><strong>1.1:</strong></p>
|
||||
<ul>
|
||||
<li> Fixed "Release" settings in Microsoft Visual C++ project file
|
||||
(.dsp) </li>
|
||||
<li> Added beats-per-minute (BPM) detection routine and command-line
|
||||
switch "-bpm" </li>
|
||||
</ul>
|
||||
<p><strong>1.01: </strong> </p>
|
||||
<ul>
|
||||
<li> Initial release </li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>6. Acknowledgements </h2>
|
||||
<p>Kudos for these people who have contributed to development or
|
||||
submitted bugfixes since SoundTouch v1.3.1: </p>
|
||||
<ul>
|
||||
<li> Arthur A</li>
|
||||
<li> Richard Ash</li>
|
||||
<li> Stanislav Brabec</li>
|
||||
<li> Christian Budde</li>
|
||||
<li> Jacek Caban</li>
|
||||
<li> Brian Cameron</li>
|
||||
<li> Jason Champion</li>
|
||||
<li> David Clark</li>
|
||||
<li> Patrick Colis</li>
|
||||
<li> Miquel Colon</li>
|
||||
<li> Justin Frankel</li>
|
||||
<li> Jason Garland</li>
|
||||
<li> Takashi Iwai</li>
|
||||
<li> Yuval Naveh</li>
|
||||
<li> Paulo Pizarro</li>
|
||||
<li> Blaise Potard</li>
|
||||
<li> RJ Ryan</li>
|
||||
<li> Patrick Colis </li>
|
||||
<li> Miquel Colon </li>
|
||||
<li> Sandro Cumerlato</li>
|
||||
<li> Justin Frankel </li>
|
||||
<li> Jason Garland </li>
|
||||
<li> Takashi Iwai </li>
|
||||
<li> Mathias M<>hl</li>
|
||||
<li> Yuval Naveh </li>
|
||||
<li> Paulo Pizarro </li>
|
||||
<li> Blaise Potard</li>
|
||||
<li> RJ Ryan </li>
|
||||
<li> John Sheehy</li>
|
||||
<li> Tim Shuttleworth</li>
|
||||
<li> John Stumpo</li>
|
||||
<li> Tim Shuttleworth</li>
|
||||
<li> Katja Vetter</li>
|
||||
</ul>
|
||||
<p>Moral greetings to all other contributors and users also!</p>
|
||||
<hr>
|
||||
<h2>7. LICENSE </h2>
|
||||
<p>SoundTouch audio processing library<br>
|
||||
Copyright (c) Olli Parviainen</p>
|
||||
<p>This library is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1
|
||||
as published by the Free Software Foundation.</p>
|
||||
<p>This library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
|
||||
General Public License for more details.</p>
|
||||
<p>You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>
|
||||
<hr><!--
|
||||
$Id: README.html 168 2012-12-28 20:55:19Z oparviai $
|
||||
-->
|
||||
<p>
|
||||
<i>RREADME.html file updated on 28-Dec-2012</i></p>
|
||||
</body>
|
||||
626
3rdparty/SoundTouch/RateTransposer.cpp
vendored
626
3rdparty/SoundTouch/RateTransposer.cpp
vendored
@@ -1,626 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Sample rate transposer. Changes sample rate by using linear interpolation
|
||||
/// together with anti-alias filtering (first order interpolation with anti-
|
||||
/// alias filtering should be quite adequate for this application)
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2011-09-02 15:56:11 -0300 (sex, 02 set 2011) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: RateTransposer.cpp 131 2011-09-02 18:56:11Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <memory.h>
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "RateTransposer.h"
|
||||
#include "AAFilter.h"
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
|
||||
/// A linear samplerate transposer class that uses integer arithmetics.
|
||||
/// for the transposing.
|
||||
class RateTransposerInteger : public RateTransposer
|
||||
{
|
||||
protected:
|
||||
int iSlopeCount;
|
||||
int iRate;
|
||||
SAMPLETYPE sPrevSampleL, sPrevSampleR;
|
||||
|
||||
virtual void resetRegisters();
|
||||
|
||||
virtual uint transposeStereo(SAMPLETYPE *dest,
|
||||
const SAMPLETYPE *src,
|
||||
uint numSamples);
|
||||
virtual uint transposeMono(SAMPLETYPE *dest,
|
||||
const SAMPLETYPE *src,
|
||||
uint numSamples);
|
||||
|
||||
public:
|
||||
RateTransposerInteger();
|
||||
virtual ~RateTransposerInteger();
|
||||
|
||||
/// Sets new target rate. Normal rate = 1.0, smaller values represent slower
|
||||
/// rate, larger faster rates.
|
||||
virtual void setRate(float newRate);
|
||||
|
||||
};
|
||||
|
||||
|
||||
/// A linear samplerate transposer class that uses floating point arithmetics
|
||||
/// for the transposing.
|
||||
class RateTransposerFloat : public RateTransposer
|
||||
{
|
||||
protected:
|
||||
float fSlopeCount;
|
||||
SAMPLETYPE sPrevSampleL, sPrevSampleR;
|
||||
|
||||
virtual void resetRegisters();
|
||||
|
||||
virtual uint transposeStereo(SAMPLETYPE *dest,
|
||||
const SAMPLETYPE *src,
|
||||
uint numSamples);
|
||||
virtual uint transposeMono(SAMPLETYPE *dest,
|
||||
const SAMPLETYPE *src,
|
||||
uint numSamples);
|
||||
|
||||
public:
|
||||
RateTransposerFloat();
|
||||
virtual ~RateTransposerFloat();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
// Operator 'new' is overloaded so that it automatically creates a suitable instance
|
||||
// depending on if we've a MMX/SSE/etc-capable CPU available or not.
|
||||
void * RateTransposer::operator new(size_t s)
|
||||
{
|
||||
ST_THROW_RT_ERROR("Error in RateTransoser::new: don't use \"new TDStretch\" directly, use \"newInstance\" to create a new instance instead!");
|
||||
return newInstance();
|
||||
}
|
||||
|
||||
|
||||
RateTransposer *RateTransposer::newInstance()
|
||||
{
|
||||
#ifdef SOUNDTOUCH_INTEGER_SAMPLES
|
||||
return ::new RateTransposerInteger;
|
||||
#else
|
||||
return ::new RateTransposerFloat;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// Constructor
|
||||
RateTransposer::RateTransposer() : FIFOProcessor(&outputBuffer)
|
||||
{
|
||||
numChannels = 2;
|
||||
bUseAAFilter = TRUE;
|
||||
fRate = 0;
|
||||
|
||||
// Instantiates the anti-alias filter with default tap length
|
||||
// of 32
|
||||
pAAFilter = new AAFilter(32);
|
||||
}
|
||||
|
||||
|
||||
|
||||
RateTransposer::~RateTransposer()
|
||||
{
|
||||
delete pAAFilter;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Enables/disables the anti-alias filter. Zero to disable, nonzero to enable
|
||||
void RateTransposer::enableAAFilter(BOOL newMode)
|
||||
{
|
||||
bUseAAFilter = newMode;
|
||||
}
|
||||
|
||||
|
||||
/// Returns nonzero if anti-alias filter is enabled.
|
||||
BOOL RateTransposer::isAAFilterEnabled() const
|
||||
{
|
||||
return bUseAAFilter;
|
||||
}
|
||||
|
||||
|
||||
AAFilter *RateTransposer::getAAFilter()
|
||||
{
|
||||
return pAAFilter;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets new target iRate. Normal iRate = 1.0, smaller values represent slower
|
||||
// iRate, larger faster iRates.
|
||||
void RateTransposer::setRate(float newRate)
|
||||
{
|
||||
double fCutoff;
|
||||
|
||||
fRate = newRate;
|
||||
|
||||
// design a new anti-alias filter
|
||||
if (newRate > 1.0f)
|
||||
{
|
||||
fCutoff = 0.5f / newRate;
|
||||
}
|
||||
else
|
||||
{
|
||||
fCutoff = 0.5f * newRate;
|
||||
}
|
||||
pAAFilter->setCutoffFreq(fCutoff);
|
||||
}
|
||||
|
||||
|
||||
// Outputs as many samples of the 'outputBuffer' as possible, and if there's
|
||||
// any room left, outputs also as many of the incoming samples as possible.
|
||||
// The goal is to drive the outputBuffer empty.
|
||||
//
|
||||
// It's allowed for 'output' and 'input' parameters to point to the same
|
||||
// memory position.
|
||||
/*
|
||||
void RateTransposer::flushStoreBuffer()
|
||||
{
|
||||
if (storeBuffer.isEmpty()) return;
|
||||
|
||||
outputBuffer.moveSamples(storeBuffer);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// Adds 'nSamples' pcs of samples from the 'samples' memory position into
|
||||
// the input of the object.
|
||||
void RateTransposer::putSamples(const SAMPLETYPE *samples, uint nSamples)
|
||||
{
|
||||
processSamples(samples, nSamples);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Transposes up the sample rate, causing the observed playback 'rate' of the
|
||||
// sound to decrease
|
||||
void RateTransposer::upsample(const SAMPLETYPE *src, uint nSamples)
|
||||
{
|
||||
uint count, sizeTemp, num;
|
||||
|
||||
// If the parameter 'uRate' value is smaller than 'SCALE', first transpose
|
||||
// the samples and then apply the anti-alias filter to remove aliasing.
|
||||
|
||||
// First check that there's enough room in 'storeBuffer'
|
||||
// (+16 is to reserve some slack in the destination buffer)
|
||||
sizeTemp = (uint)((float)nSamples / fRate + 16.0f);
|
||||
|
||||
// Transpose the samples, store the result into the end of "storeBuffer"
|
||||
count = transpose(storeBuffer.ptrEnd(sizeTemp), src, nSamples);
|
||||
storeBuffer.putSamples(count);
|
||||
|
||||
// Apply the anti-alias filter to samples in "store output", output the
|
||||
// result to "dest"
|
||||
num = storeBuffer.numSamples();
|
||||
count = pAAFilter->evaluate(outputBuffer.ptrEnd(num),
|
||||
storeBuffer.ptrBegin(), num, (uint)numChannels);
|
||||
outputBuffer.putSamples(count);
|
||||
|
||||
// Remove the processed samples from "storeBuffer"
|
||||
storeBuffer.receiveSamples(count);
|
||||
}
|
||||
|
||||
|
||||
// Transposes down the sample rate, causing the observed playback 'rate' of the
|
||||
// sound to increase
|
||||
void RateTransposer::downsample(const SAMPLETYPE *src, uint nSamples)
|
||||
{
|
||||
uint count, sizeTemp;
|
||||
|
||||
// If the parameter 'uRate' value is larger than 'SCALE', first apply the
|
||||
// anti-alias filter to remove high frequencies (prevent them from folding
|
||||
// over the lover frequencies), then transpose.
|
||||
|
||||
// Add the new samples to the end of the storeBuffer
|
||||
storeBuffer.putSamples(src, nSamples);
|
||||
|
||||
// Anti-alias filter the samples to prevent folding and output the filtered
|
||||
// data to tempBuffer. Note : because of the FIR filter length, the
|
||||
// filtering routine takes in 'filter_length' more samples than it outputs.
|
||||
assert(tempBuffer.isEmpty());
|
||||
sizeTemp = storeBuffer.numSamples();
|
||||
|
||||
count = pAAFilter->evaluate(tempBuffer.ptrEnd(sizeTemp),
|
||||
storeBuffer.ptrBegin(), sizeTemp, (uint)numChannels);
|
||||
|
||||
if (count == 0) return;
|
||||
|
||||
// Remove the filtered samples from 'storeBuffer'
|
||||
storeBuffer.receiveSamples(count);
|
||||
|
||||
// Transpose the samples (+16 is to reserve some slack in the destination buffer)
|
||||
sizeTemp = (uint)((float)nSamples / fRate + 16.0f);
|
||||
count = transpose(outputBuffer.ptrEnd(sizeTemp), tempBuffer.ptrBegin(), count);
|
||||
outputBuffer.putSamples(count);
|
||||
}
|
||||
|
||||
|
||||
// Transposes sample rate by applying anti-alias filter to prevent folding.
|
||||
// Returns amount of samples returned in the "dest" buffer.
|
||||
// The maximum amount of samples that can be returned at a time is set by
|
||||
// the 'set_returnBuffer_size' function.
|
||||
void RateTransposer::processSamples(const SAMPLETYPE *src, uint nSamples)
|
||||
{
|
||||
uint count;
|
||||
uint sizeReq;
|
||||
|
||||
if (nSamples == 0) return;
|
||||
assert(pAAFilter);
|
||||
|
||||
// If anti-alias filter is turned off, simply transpose without applying
|
||||
// the filter
|
||||
if (bUseAAFilter == FALSE)
|
||||
{
|
||||
sizeReq = (uint)((float)nSamples / fRate + 1.0f);
|
||||
count = transpose(outputBuffer.ptrEnd(sizeReq), src, nSamples);
|
||||
outputBuffer.putSamples(count);
|
||||
return;
|
||||
}
|
||||
|
||||
// Transpose with anti-alias filter
|
||||
if (fRate < 1.0f)
|
||||
{
|
||||
upsample(src, nSamples);
|
||||
}
|
||||
else
|
||||
{
|
||||
downsample(src, nSamples);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Transposes the sample rate of the given samples using linear interpolation.
|
||||
// Returns the number of samples returned in the "dest" buffer
|
||||
inline uint RateTransposer::transpose(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples)
|
||||
{
|
||||
if (numChannels == 2)
|
||||
{
|
||||
return transposeStereo(dest, src, nSamples);
|
||||
}
|
||||
else
|
||||
{
|
||||
return transposeMono(dest, src, nSamples);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Sets the number of channels, 1 = mono, 2 = stereo
|
||||
void RateTransposer::setChannels(int nChannels)
|
||||
{
|
||||
assert(nChannels > 0);
|
||||
if (numChannels == nChannels) return;
|
||||
|
||||
assert(nChannels == 1 || nChannels == 2);
|
||||
numChannels = nChannels;
|
||||
|
||||
storeBuffer.setChannels(numChannels);
|
||||
tempBuffer.setChannels(numChannels);
|
||||
outputBuffer.setChannels(numChannels);
|
||||
|
||||
// Inits the linear interpolation registers
|
||||
resetRegisters();
|
||||
}
|
||||
|
||||
|
||||
// Clears all the samples in the object
|
||||
void RateTransposer::clear()
|
||||
{
|
||||
outputBuffer.clear();
|
||||
storeBuffer.clear();
|
||||
}
|
||||
|
||||
|
||||
// Returns nonzero if there aren't any samples available for outputting.
|
||||
int RateTransposer::isEmpty() const
|
||||
{
|
||||
int res;
|
||||
|
||||
res = FIFOProcessor::isEmpty();
|
||||
if (res == 0) return 0;
|
||||
return storeBuffer.isEmpty();
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RateTransposerInteger - integer arithmetic implementation
|
||||
//
|
||||
|
||||
/// fixed-point interpolation routine precision
|
||||
#define SCALE 65536
|
||||
|
||||
// Constructor
|
||||
RateTransposerInteger::RateTransposerInteger() : RateTransposer()
|
||||
{
|
||||
// Notice: use local function calling syntax for sake of clarity,
|
||||
// to indicate the fact that C++ constructor can't call virtual functions.
|
||||
RateTransposerInteger::resetRegisters();
|
||||
RateTransposerInteger::setRate(1.0f);
|
||||
}
|
||||
|
||||
|
||||
RateTransposerInteger::~RateTransposerInteger()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void RateTransposerInteger::resetRegisters()
|
||||
{
|
||||
iSlopeCount = 0;
|
||||
sPrevSampleL =
|
||||
sPrevSampleR = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Transposes the sample rate of the given samples using linear interpolation.
|
||||
// 'Mono' version of the routine. Returns the number of samples returned in
|
||||
// the "dest" buffer
|
||||
uint RateTransposerInteger::transposeMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples)
|
||||
{
|
||||
unsigned int i, used;
|
||||
LONG_SAMPLETYPE temp, vol1;
|
||||
|
||||
if (nSamples == 0) return 0; // no samples, no work
|
||||
|
||||
used = 0;
|
||||
i = 0;
|
||||
|
||||
// Process the last sample saved from the previous call first...
|
||||
while (iSlopeCount <= SCALE)
|
||||
{
|
||||
vol1 = (LONG_SAMPLETYPE)(SCALE - iSlopeCount);
|
||||
temp = vol1 * sPrevSampleL + iSlopeCount * src[0];
|
||||
dest[i] = (SAMPLETYPE)(temp / SCALE);
|
||||
i++;
|
||||
iSlopeCount += iRate;
|
||||
}
|
||||
// now always (iSlopeCount > SCALE)
|
||||
iSlopeCount -= SCALE;
|
||||
|
||||
while (1)
|
||||
{
|
||||
while (iSlopeCount > SCALE)
|
||||
{
|
||||
iSlopeCount -= SCALE;
|
||||
used ++;
|
||||
if (used >= nSamples - 1) goto end;
|
||||
}
|
||||
vol1 = (LONG_SAMPLETYPE)(SCALE - iSlopeCount);
|
||||
temp = src[used] * vol1 + iSlopeCount * src[used + 1];
|
||||
dest[i] = (SAMPLETYPE)(temp / SCALE);
|
||||
|
||||
i++;
|
||||
iSlopeCount += iRate;
|
||||
}
|
||||
end:
|
||||
// Store the last sample for the next round
|
||||
sPrevSampleL = src[nSamples - 1];
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
// Transposes the sample rate of the given samples using linear interpolation.
|
||||
// 'Stereo' version of the routine. Returns the number of samples returned in
|
||||
// the "dest" buffer
|
||||
uint RateTransposerInteger::transposeStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples)
|
||||
{
|
||||
unsigned int srcPos, i, used;
|
||||
LONG_SAMPLETYPE temp, vol1;
|
||||
|
||||
if (nSamples == 0) return 0; // no samples, no work
|
||||
|
||||
used = 0;
|
||||
i = 0;
|
||||
|
||||
// Process the last sample saved from the sPrevSampleLious call first...
|
||||
while (iSlopeCount <= SCALE)
|
||||
{
|
||||
vol1 = (LONG_SAMPLETYPE)(SCALE - iSlopeCount);
|
||||
temp = vol1 * sPrevSampleL + iSlopeCount * src[0];
|
||||
dest[2 * i] = (SAMPLETYPE)(temp / SCALE);
|
||||
temp = vol1 * sPrevSampleR + iSlopeCount * src[1];
|
||||
dest[2 * i + 1] = (SAMPLETYPE)(temp / SCALE);
|
||||
i++;
|
||||
iSlopeCount += iRate;
|
||||
}
|
||||
// now always (iSlopeCount > SCALE)
|
||||
iSlopeCount -= SCALE;
|
||||
|
||||
while (1)
|
||||
{
|
||||
while (iSlopeCount > SCALE)
|
||||
{
|
||||
iSlopeCount -= SCALE;
|
||||
used ++;
|
||||
if (used >= nSamples - 1) goto end;
|
||||
}
|
||||
srcPos = 2 * used;
|
||||
vol1 = (LONG_SAMPLETYPE)(SCALE - iSlopeCount);
|
||||
temp = src[srcPos] * vol1 + iSlopeCount * src[srcPos + 2];
|
||||
dest[2 * i] = (SAMPLETYPE)(temp / SCALE);
|
||||
temp = src[srcPos + 1] * vol1 + iSlopeCount * src[srcPos + 3];
|
||||
dest[2 * i + 1] = (SAMPLETYPE)(temp / SCALE);
|
||||
|
||||
i++;
|
||||
iSlopeCount += iRate;
|
||||
}
|
||||
end:
|
||||
// Store the last sample for the next round
|
||||
sPrevSampleL = src[2 * nSamples - 2];
|
||||
sPrevSampleR = src[2 * nSamples - 1];
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
// Sets new target iRate. Normal iRate = 1.0, smaller values represent slower
|
||||
// iRate, larger faster iRates.
|
||||
void RateTransposerInteger::setRate(float newRate)
|
||||
{
|
||||
iRate = (int)(newRate * SCALE + 0.5f);
|
||||
RateTransposer::setRate(newRate);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RateTransposerFloat - floating point arithmetic implementation
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Constructor
|
||||
RateTransposerFloat::RateTransposerFloat() : RateTransposer()
|
||||
{
|
||||
// Notice: use local function calling syntax for sake of clarity,
|
||||
// to indicate the fact that C++ constructor can't call virtual functions.
|
||||
RateTransposerFloat::resetRegisters();
|
||||
RateTransposerFloat::setRate(1.0f);
|
||||
}
|
||||
|
||||
|
||||
RateTransposerFloat::~RateTransposerFloat()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void RateTransposerFloat::resetRegisters()
|
||||
{
|
||||
fSlopeCount = 0;
|
||||
sPrevSampleL =
|
||||
sPrevSampleR = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Transposes the sample rate of the given samples using linear interpolation.
|
||||
// 'Mono' version of the routine. Returns the number of samples returned in
|
||||
// the "dest" buffer
|
||||
uint RateTransposerFloat::transposeMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples)
|
||||
{
|
||||
unsigned int i, used;
|
||||
|
||||
used = 0;
|
||||
i = 0;
|
||||
|
||||
// Process the last sample saved from the previous call first...
|
||||
while (fSlopeCount <= 1.0f)
|
||||
{
|
||||
dest[i] = (SAMPLETYPE)((1.0f - fSlopeCount) * sPrevSampleL + fSlopeCount * src[0]);
|
||||
i++;
|
||||
fSlopeCount += fRate;
|
||||
}
|
||||
fSlopeCount -= 1.0f;
|
||||
|
||||
if (nSamples > 1)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
while (fSlopeCount > 1.0f)
|
||||
{
|
||||
fSlopeCount -= 1.0f;
|
||||
used ++;
|
||||
if (used >= nSamples - 1) goto end;
|
||||
}
|
||||
dest[i] = (SAMPLETYPE)((1.0f - fSlopeCount) * src[used] + fSlopeCount * src[used + 1]);
|
||||
i++;
|
||||
fSlopeCount += fRate;
|
||||
}
|
||||
}
|
||||
end:
|
||||
// Store the last sample for the next round
|
||||
sPrevSampleL = src[nSamples - 1];
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
// Transposes the sample rate of the given samples using linear interpolation.
|
||||
// 'Mono' version of the routine. Returns the number of samples returned in
|
||||
// the "dest" buffer
|
||||
uint RateTransposerFloat::transposeStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples)
|
||||
{
|
||||
unsigned int srcPos, i, used;
|
||||
|
||||
if (nSamples == 0) return 0; // no samples, no work
|
||||
|
||||
used = 0;
|
||||
i = 0;
|
||||
|
||||
// Process the last sample saved from the sPrevSampleLious call first...
|
||||
while (fSlopeCount <= 1.0f)
|
||||
{
|
||||
dest[2 * i] = (SAMPLETYPE)((1.0f - fSlopeCount) * sPrevSampleL + fSlopeCount * src[0]);
|
||||
dest[2 * i + 1] = (SAMPLETYPE)((1.0f - fSlopeCount) * sPrevSampleR + fSlopeCount * src[1]);
|
||||
i++;
|
||||
fSlopeCount += fRate;
|
||||
}
|
||||
// now always (iSlopeCount > 1.0f)
|
||||
fSlopeCount -= 1.0f;
|
||||
|
||||
if (nSamples > 1)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
while (fSlopeCount > 1.0f)
|
||||
{
|
||||
fSlopeCount -= 1.0f;
|
||||
used ++;
|
||||
if (used >= nSamples - 1) goto end;
|
||||
}
|
||||
srcPos = 2 * used;
|
||||
|
||||
dest[2 * i] = (SAMPLETYPE)((1.0f - fSlopeCount) * src[srcPos]
|
||||
+ fSlopeCount * src[srcPos + 2]);
|
||||
dest[2 * i + 1] = (SAMPLETYPE)((1.0f - fSlopeCount) * src[srcPos + 1]
|
||||
+ fSlopeCount * src[srcPos + 3]);
|
||||
|
||||
i++;
|
||||
fSlopeCount += fRate;
|
||||
}
|
||||
}
|
||||
end:
|
||||
// Store the last sample for the next round
|
||||
sPrevSampleL = src[2 * nSamples - 2];
|
||||
sPrevSampleR = src[2 * nSamples - 1];
|
||||
|
||||
return i;
|
||||
}
|
||||
159
3rdparty/SoundTouch/RateTransposer.h
vendored
159
3rdparty/SoundTouch/RateTransposer.h
vendored
@@ -1,159 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Sample rate transposer. Changes sample rate by using linear interpolation
|
||||
/// together with anti-alias filtering (first order interpolation with anti-
|
||||
/// alias filtering should be quite adequate for this application).
|
||||
///
|
||||
/// Use either of the derived classes of 'RateTransposerInteger' or
|
||||
/// 'RateTransposerFloat' for corresponding integer/floating point tranposing
|
||||
/// algorithm implementation.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2009-02-21 13:00:14 -0300 (sáb, 21 fev 2009) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: RateTransposer.h 63 2009-02-21 16:00:14Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef RateTransposer_H
|
||||
#define RateTransposer_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include "AAFilter.h"
|
||||
#include "FIFOSamplePipe.h"
|
||||
#include "FIFOSampleBuffer.h"
|
||||
|
||||
#include "STTypes.h"
|
||||
|
||||
namespace soundtouch
|
||||
{
|
||||
|
||||
/// A common linear samplerate transposer class.
|
||||
///
|
||||
/// Note: Use function "RateTransposer::newInstance()" to create a new class
|
||||
/// instance instead of the "new" operator; that function automatically
|
||||
/// chooses a correct implementation depending on if integer or floating
|
||||
/// arithmetics are to be used.
|
||||
class RateTransposer : public FIFOProcessor
|
||||
{
|
||||
protected:
|
||||
/// Anti-alias filter object
|
||||
AAFilter *pAAFilter;
|
||||
|
||||
float fRate;
|
||||
|
||||
int numChannels;
|
||||
|
||||
/// Buffer for collecting samples to feed the anti-alias filter between
|
||||
/// two batches
|
||||
FIFOSampleBuffer storeBuffer;
|
||||
|
||||
/// Buffer for keeping samples between transposing & anti-alias filter
|
||||
FIFOSampleBuffer tempBuffer;
|
||||
|
||||
/// Output sample buffer
|
||||
FIFOSampleBuffer outputBuffer;
|
||||
|
||||
BOOL bUseAAFilter;
|
||||
|
||||
virtual void resetRegisters() = 0;
|
||||
|
||||
virtual uint transposeStereo(SAMPLETYPE *dest,
|
||||
const SAMPLETYPE *src,
|
||||
uint numSamples) = 0;
|
||||
virtual uint transposeMono(SAMPLETYPE *dest,
|
||||
const SAMPLETYPE *src,
|
||||
uint numSamples) = 0;
|
||||
inline uint transpose(SAMPLETYPE *dest,
|
||||
const SAMPLETYPE *src,
|
||||
uint numSamples);
|
||||
|
||||
void downsample(const SAMPLETYPE *src,
|
||||
uint numSamples);
|
||||
void upsample(const SAMPLETYPE *src,
|
||||
uint numSamples);
|
||||
|
||||
/// Transposes sample rate by applying anti-alias filter to prevent folding.
|
||||
/// Returns amount of samples returned in the "dest" buffer.
|
||||
/// The maximum amount of samples that can be returned at a time is set by
|
||||
/// the 'set_returnBuffer_size' function.
|
||||
void processSamples(const SAMPLETYPE *src,
|
||||
uint numSamples);
|
||||
|
||||
|
||||
public:
|
||||
RateTransposer();
|
||||
virtual ~RateTransposer();
|
||||
|
||||
/// Operator 'new' is overloaded so that it automatically creates a suitable instance
|
||||
/// depending on if we're to use integer or floating point arithmetics.
|
||||
static void *operator new(size_t s);
|
||||
|
||||
/// Use this function instead of "new" operator to create a new instance of this class.
|
||||
/// This function automatically chooses a correct implementation, depending on if
|
||||
/// integer ot floating point arithmetics are to be used.
|
||||
static RateTransposer *newInstance();
|
||||
|
||||
/// Returns the output buffer object
|
||||
FIFOSamplePipe *getOutput() { return &outputBuffer; };
|
||||
|
||||
/// Returns the store buffer object
|
||||
FIFOSamplePipe *getStore() { return &storeBuffer; };
|
||||
|
||||
/// Return anti-alias filter object
|
||||
AAFilter *getAAFilter();
|
||||
|
||||
/// Enables/disables the anti-alias filter. Zero to disable, nonzero to enable
|
||||
void enableAAFilter(BOOL newMode);
|
||||
|
||||
/// Returns nonzero if anti-alias filter is enabled.
|
||||
BOOL isAAFilterEnabled() const;
|
||||
|
||||
/// Sets new target rate. Normal rate = 1.0, smaller values represent slower
|
||||
/// rate, larger faster rates.
|
||||
virtual void setRate(float newRate);
|
||||
|
||||
/// Sets the number of channels, 1 = mono, 2 = stereo
|
||||
void setChannels(int channels);
|
||||
|
||||
/// Adds 'numSamples' pcs of samples from the 'samples' memory position into
|
||||
/// the input of the object.
|
||||
void putSamples(const SAMPLETYPE *samples, uint numSamples);
|
||||
|
||||
/// Clears all the samples in the object
|
||||
void clear();
|
||||
|
||||
/// Returns nonzero if there aren't any samples available for outputting.
|
||||
int isEmpty() const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
86
3rdparty/SoundTouch/SoundTouch.cbp
vendored
86
3rdparty/SoundTouch/SoundTouch.cbp
vendored
@@ -1,86 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<CodeBlocks_project_file>
|
||||
<FileVersion major="1" minor="6" />
|
||||
<Project>
|
||||
<Option title="SoundTouch" />
|
||||
<Option pch_mode="2" />
|
||||
<Option compiler="gcc" />
|
||||
<Build>
|
||||
<Target title="Debug">
|
||||
<Option output="../../deps/debug/libsoundtouch-dbg" prefix_auto="1" extension_auto="1" />
|
||||
<Option working_dir="" />
|
||||
<Option object_output="./.objs/debug" />
|
||||
<Option type="2" />
|
||||
<Option compiler="gcc" />
|
||||
<Option createDefFile="1" />
|
||||
<Compiler>
|
||||
<Add option="-g" />
|
||||
<Add option="-O0" />
|
||||
</Compiler>
|
||||
</Target>
|
||||
<Target title="Devel">
|
||||
<Option output="../../deps/devel/libsoundtouch-dev" prefix_auto="1" extension_auto="1" />
|
||||
<Option working_dir="" />
|
||||
<Option object_output="./.objs/devel" />
|
||||
<Option type="2" />
|
||||
<Option compiler="gcc" />
|
||||
<Option createDefFile="1" />
|
||||
<Compiler>
|
||||
<Add option="-O1" />
|
||||
<Add option="-W" />
|
||||
<Add option="-g" />
|
||||
<Add option="-DNDEBUG" />
|
||||
</Compiler>
|
||||
</Target>
|
||||
<Target title="Release">
|
||||
<Option output="../../deps/libsoundtouch" prefix_auto="1" extension_auto="1" />
|
||||
<Option working_dir="" />
|
||||
<Option object_output="./.objs/release" />
|
||||
<Option type="2" />
|
||||
<Option compiler="gcc" />
|
||||
<Option createDefFile="1" />
|
||||
<Compiler>
|
||||
<Add option="-fexpensive-optimizations" />
|
||||
<Add option="-O3" />
|
||||
<Add option="-W" />
|
||||
<Add option="-DNDEBUG" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add option="-s" />
|
||||
</Linker>
|
||||
</Target>
|
||||
</Build>
|
||||
<Compiler>
|
||||
<Add option="-march=athlon-xp" />
|
||||
<Add option="-march=prescott" />
|
||||
</Compiler>
|
||||
<Unit filename="AAFilter.cpp" />
|
||||
<Unit filename="AAFilter.h" />
|
||||
<Unit filename="BPMDetect.h" />
|
||||
<Unit filename="FIFOSampleBuffer.cpp" />
|
||||
<Unit filename="FIFOSampleBuffer.h" />
|
||||
<Unit filename="FIFOSamplePipe.h" />
|
||||
<Unit filename="FIRFilter.cpp" />
|
||||
<Unit filename="FIRFilter.h" />
|
||||
<Unit filename="RateTransposer.cpp" />
|
||||
<Unit filename="RateTransposer.h" />
|
||||
<Unit filename="STTypes.h" />
|
||||
<Unit filename="SoundTouch.cpp" />
|
||||
<Unit filename="SoundTouch.h" />
|
||||
<Unit filename="TDStretch.cpp" />
|
||||
<Unit filename="TDStretch.h" />
|
||||
<Unit filename="WavFile.cpp" />
|
||||
<Unit filename="WavFile.h" />
|
||||
<Unit filename="cpu_detect.h" />
|
||||
<Unit filename="cpu_detect_x86_gcc.cpp" />
|
||||
<Unit filename="mmx_optimized.cpp" />
|
||||
<Unit filename="soundtouch_config.h" />
|
||||
<Unit filename="sse_optimized.cpp" />
|
||||
<Extensions>
|
||||
<envvars />
|
||||
<code_completion />
|
||||
<lib_finder disable_auto="1" />
|
||||
<debugger />
|
||||
</Extensions>
|
||||
</Project>
|
||||
</CodeBlocks_project_file>
|
||||
501
3rdparty/SoundTouch/SoundTouch.cpp
vendored
501
3rdparty/SoundTouch/SoundTouch.cpp
vendored
@@ -1,501 +0,0 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// SoundTouch - main class for tempo/pitch/rate adjusting routines.
|
||||
///
|
||||
/// Notes:
|
||||
/// - Initialize the SoundTouch object instance by setting up the sound stream
|
||||
/// parameters with functions 'setSampleRate' and 'setChannels', then set
|
||||
/// desired tempo/pitch/rate settings with the corresponding functions.
|
||||
///
|
||||
/// - The SoundTouch class behaves like a first-in-first-out pipeline: The
|
||||
/// samples that are to be processed are fed into one of the pipe by calling
|
||||
/// function 'putSamples', while the ready processed samples can be read
|
||||
/// from the other end of the pipeline with function 'receiveSamples'.
|
||||
///
|
||||
/// - The SoundTouch processing classes require certain sized 'batches' of
|
||||
/// samples in order to process the sound. For this reason the classes buffer
|
||||
/// incoming samples until there are enough of samples available for
|
||||
/// processing, then they carry out the processing step and consequently
|
||||
/// make the processed samples available for outputting.
|
||||
///
|
||||
/// - For the above reason, the processing routines introduce a certain
|
||||
/// 'latency' between the input and output, so that the samples input to
|
||||
/// SoundTouch may not be immediately available in the output, and neither
|
||||
/// the amount of outputtable samples may not immediately be in direct
|
||||
/// relationship with the amount of previously input samples.
|
||||
///
|
||||
/// - The tempo/pitch/rate control parameters can be altered during processing.
|
||||
/// Please notice though that they aren't currently protected by semaphores,
|
||||
/// so in multi-thread application external semaphore protection may be
|
||||
/// required.
|
||||
///
|
||||
/// - This class utilizes classes 'TDStretch' for tempo change (without modifying
|
||||
/// pitch) and 'RateTransposer' for changing the playback rate (that is, both
|
||||
/// tempo and pitch in the same ratio) of the sound. The third available control
|
||||
/// 'pitch' (change pitch but maintain tempo) is produced by a combination of
|
||||
/// combining the two other controls.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2012-06-13 16:29:53 -0300 (qua, 13 jun 2012) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: SoundTouch.cpp 143 2012-06-13 19:29:53Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "SoundTouch.h"
|
||||
#include "TDStretch.h"
|
||||
#include "RateTransposer.h"
|
||||
#include "cpu_detect.h"
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
/// test if two floating point numbers are equal
|
||||
#define TEST_FLOAT_EQUAL(a, b) (fabs(a - b) < 1e-10)
|
||||
|
||||
|
||||
/// Print library version string for autoconf
|
||||
extern "C" void soundtouch_ac_test()
|
||||
{
|
||||
printf("SoundTouch Version: %s\n",SOUNDTOUCH_VERSION);
|
||||
}
|
||||
|
||||
|
||||
SoundTouch::SoundTouch()
|
||||
{
|
||||
// Initialize rate transposer and tempo changer instances
|
||||
|
||||
pRateTransposer = RateTransposer::newInstance();
|
||||
pTDStretch = TDStretch::newInstance();
|
||||
|
||||
setOutPipe(pTDStretch);
|
||||
|
||||
rate = tempo = 0;
|
||||
|
||||
virtualPitch =
|
||||
virtualRate =
|
||||
virtualTempo = 1.0;
|
||||
|
||||
calcEffectiveRateAndTempo();
|
||||
|
||||
channels = 0;
|
||||
bSrateSet = FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
SoundTouch::~SoundTouch()
|
||||
{
|
||||
delete pRateTransposer;
|
||||
delete pTDStretch;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Get SoundTouch library version string
|
||||
const char *SoundTouch::getVersionString()
|
||||
{
|
||||
static const char *_version = SOUNDTOUCH_VERSION;
|
||||
|
||||
return _version;
|
||||
}
|
||||
|
||||
|
||||
/// Get SoundTouch library version Id
|
||||
uint SoundTouch::getVersionId()
|
||||
{
|
||||
return SOUNDTOUCH_VERSION_ID;
|
||||
}
|
||||
|
||||
|
||||
// Sets the number of channels, 1 = mono, 2 = stereo
|
||||
void SoundTouch::setChannels(uint numChannels)
|
||||
{
|
||||
if (numChannels != 1 && numChannels != 2)
|
||||
{
|
||||
ST_THROW_RT_ERROR("Illegal number of channels");
|
||||
}
|
||||
channels = numChannels;
|
||||
pRateTransposer->setChannels((int)numChannels);
|
||||
pTDStretch->setChannels((int)numChannels);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets new rate control value. Normal rate = 1.0, smaller values
|
||||
// represent slower rate, larger faster rates.
|
||||
void SoundTouch::setRate(float newRate)
|
||||
{
|
||||
virtualRate = newRate;
|
||||
calcEffectiveRateAndTempo();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets new rate control value as a difference in percents compared
|
||||
// to the original rate (-50 .. +100 %)
|
||||
void SoundTouch::setRateChange(float newRate)
|
||||
{
|
||||
virtualRate = 1.0f + 0.01f * newRate;
|
||||
calcEffectiveRateAndTempo();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets new tempo control value. Normal tempo = 1.0, smaller values
|
||||
// represent slower tempo, larger faster tempo.
|
||||
void SoundTouch::setTempo(float newTempo)
|
||||
{
|
||||
virtualTempo = newTempo;
|
||||
calcEffectiveRateAndTempo();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets new tempo control value as a difference in percents compared
|
||||
// to the original tempo (-50 .. +100 %)
|
||||
void SoundTouch::setTempoChange(float newTempo)
|
||||
{
|
||||
virtualTempo = 1.0f + 0.01f * newTempo;
|
||||
calcEffectiveRateAndTempo();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets new pitch control value. Original pitch = 1.0, smaller values
|
||||
// represent lower pitches, larger values higher pitch.
|
||||
void SoundTouch::setPitch(float newPitch)
|
||||
{
|
||||
virtualPitch = newPitch;
|
||||
calcEffectiveRateAndTempo();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets pitch change in octaves compared to the original pitch
|
||||
// (-1.00 .. +1.00)
|
||||
void SoundTouch::setPitchOctaves(float newPitch)
|
||||
{
|
||||
virtualPitch = (float)exp(0.69314718056f * newPitch);
|
||||
calcEffectiveRateAndTempo();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets pitch change in semi-tones compared to the original pitch
|
||||
// (-12 .. +12)
|
||||
void SoundTouch::setPitchSemiTones(int newPitch)
|
||||
{
|
||||
setPitchOctaves((float)newPitch / 12.0f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SoundTouch::setPitchSemiTones(float newPitch)
|
||||
{
|
||||
setPitchOctaves(newPitch / 12.0f);
|
||||
}
|
||||
|
||||
|
||||
// Calculates 'effective' rate and tempo values from the
|
||||
// nominal control values.
|
||||
void SoundTouch::calcEffectiveRateAndTempo()
|
||||
{
|
||||
float oldTempo = tempo;
|
||||
float oldRate = rate;
|
||||
|
||||
tempo = virtualTempo / virtualPitch;
|
||||
rate = virtualPitch * virtualRate;
|
||||
|
||||
if (!TEST_FLOAT_EQUAL(rate,oldRate)) pRateTransposer->setRate(rate);
|
||||
if (!TEST_FLOAT_EQUAL(tempo, oldTempo)) pTDStretch->setTempo(tempo);
|
||||
|
||||
#ifndef SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER
|
||||
if (rate <= 1.0f)
|
||||
{
|
||||
if (output != pTDStretch)
|
||||
{
|
||||
FIFOSamplePipe *tempoOut;
|
||||
|
||||
assert(output == pRateTransposer);
|
||||
// move samples in the current output buffer to the output of pTDStretch
|
||||
tempoOut = pTDStretch->getOutput();
|
||||
tempoOut->moveSamples(*output);
|
||||
// move samples in pitch transposer's store buffer to tempo changer's input
|
||||
pTDStretch->moveSamples(*pRateTransposer->getStore());
|
||||
|
||||
output = pTDStretch;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if (output != pRateTransposer)
|
||||
{
|
||||
FIFOSamplePipe *transOut;
|
||||
|
||||
assert(output == pTDStretch);
|
||||
// move samples in the current output buffer to the output of pRateTransposer
|
||||
transOut = pRateTransposer->getOutput();
|
||||
transOut->moveSamples(*output);
|
||||
// move samples in tempo changer's input to pitch transposer's input
|
||||
pRateTransposer->moveSamples(*pTDStretch->getInput());
|
||||
|
||||
output = pRateTransposer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Sets sample rate.
|
||||
void SoundTouch::setSampleRate(uint srate)
|
||||
{
|
||||
bSrateSet = TRUE;
|
||||
// set sample rate, leave other tempo changer parameters as they are.
|
||||
pTDStretch->setParameters((int)srate);
|
||||
}
|
||||
|
||||
|
||||
// Adds 'numSamples' pcs of samples from the 'samples' memory position into
|
||||
// the input of the object.
|
||||
void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples)
|
||||
{
|
||||
if (bSrateSet == FALSE)
|
||||
{
|
||||
ST_THROW_RT_ERROR("SoundTouch : Sample rate not defined");
|
||||
}
|
||||
else if (channels == 0)
|
||||
{
|
||||
ST_THROW_RT_ERROR("SoundTouch : Number of channels not defined");
|
||||
}
|
||||
|
||||
// Transpose the rate of the new samples if necessary
|
||||
/* Bypass the nominal setting - can introduce a click in sound when tempo/pitch control crosses the nominal value...
|
||||
if (rate == 1.0f)
|
||||
{
|
||||
// The rate value is same as the original, simply evaluate the tempo changer.
|
||||
assert(output == pTDStretch);
|
||||
if (pRateTransposer->isEmpty() == 0)
|
||||
{
|
||||
// yet flush the last samples in the pitch transposer buffer
|
||||
// (may happen if 'rate' changes from a non-zero value to zero)
|
||||
pTDStretch->moveSamples(*pRateTransposer);
|
||||
}
|
||||
pTDStretch->putSamples(samples, nSamples);
|
||||
}
|
||||
*/
|
||||
#ifndef SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER
|
||||
else if (rate <= 1.0f)
|
||||
{
|
||||
// transpose the rate down, output the transposed sound to tempo changer buffer
|
||||
assert(output == pTDStretch);
|
||||
pRateTransposer->putSamples(samples, nSamples);
|
||||
pTDStretch->moveSamples(*pRateTransposer);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
// evaluate the tempo changer, then transpose the rate up,
|
||||
assert(output == pRateTransposer);
|
||||
pTDStretch->putSamples(samples, nSamples);
|
||||
pRateTransposer->moveSamples(*pTDStretch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Flushes the last samples from the processing pipeline to the output.
|
||||
// Clears also the internal processing buffers.
|
||||
//
|
||||
// Note: This function is meant for extracting the last samples of a sound
|
||||
// stream. This function may introduce additional blank samples in the end
|
||||
// of the sound stream, and thus it's not recommended to call this function
|
||||
// in the middle of a sound stream.
|
||||
void SoundTouch::flush()
|
||||
{
|
||||
int i;
|
||||
int nUnprocessed;
|
||||
int nOut;
|
||||
SAMPLETYPE buff[64*2]; // note: allocate 2*64 to cater 64 sample frames of stereo sound
|
||||
|
||||
// check how many samples still await processing, and scale
|
||||
// that by tempo & rate to get expected output sample count
|
||||
nUnprocessed = numUnprocessedSamples();
|
||||
nUnprocessed = (int)((double)nUnprocessed / (tempo * rate) + 0.5);
|
||||
|
||||
nOut = numSamples(); // ready samples currently in buffer ...
|
||||
nOut += nUnprocessed; // ... and how many we expect there to be in the end
|
||||
|
||||
memset(buff, 0, 64 * channels * sizeof(SAMPLETYPE));
|
||||
// "Push" the last active samples out from the processing pipeline by
|
||||
// feeding blank samples into the processing pipeline until new,
|
||||
// processed samples appear in the output (not however, more than
|
||||
// 8ksamples in any case)
|
||||
for (i = 0; i < 128; i ++)
|
||||
{
|
||||
putSamples(buff, 64);
|
||||
if ((int)numSamples() >= nOut)
|
||||
{
|
||||
// Enough new samples have appeared into the output!
|
||||
// As samples come from processing with bigger chunks, now truncate it
|
||||
// back to maximum "nOut" samples to improve duration accuracy
|
||||
adjustAmountOfSamples(nOut);
|
||||
|
||||
// finish
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Clear working buffers
|
||||
pRateTransposer->clear();
|
||||
pTDStretch->clearInput();
|
||||
// yet leave the 'tempoChanger' output intouched as that's where the
|
||||
// flushed samples are!
|
||||
}
|
||||
|
||||
|
||||
// Changes a setting controlling the processing system behaviour. See the
|
||||
// 'SETTING_...' defines for available setting ID's.
|
||||
BOOL SoundTouch::setSetting(int settingId, int value)
|
||||
{
|
||||
int sampleRate, sequenceMs, seekWindowMs, overlapMs;
|
||||
|
||||
// read current tdstretch routine parameters
|
||||
pTDStretch->getParameters(&sampleRate, &sequenceMs, &seekWindowMs, &overlapMs);
|
||||
|
||||
switch (settingId)
|
||||
{
|
||||
case SETTING_USE_AA_FILTER :
|
||||
// enables / disabless anti-alias filter
|
||||
pRateTransposer->enableAAFilter((value != 0) ? TRUE : FALSE);
|
||||
return TRUE;
|
||||
|
||||
case SETTING_AA_FILTER_LENGTH :
|
||||
// sets anti-alias filter length
|
||||
pRateTransposer->getAAFilter()->setLength(value);
|
||||
return TRUE;
|
||||
|
||||
case SETTING_USE_QUICKSEEK :
|
||||
// enables / disables tempo routine quick seeking algorithm
|
||||
pTDStretch->enableQuickSeek((value != 0) ? TRUE : FALSE);
|
||||
return TRUE;
|
||||
|
||||
case SETTING_SEQUENCE_MS:
|
||||
// change time-stretch sequence duration parameter
|
||||
pTDStretch->setParameters(sampleRate, value, seekWindowMs, overlapMs);
|
||||
return TRUE;
|
||||
|
||||
case SETTING_SEEKWINDOW_MS:
|
||||
// change time-stretch seek window length parameter
|
||||
pTDStretch->setParameters(sampleRate, sequenceMs, value, overlapMs);
|
||||
return TRUE;
|
||||
|
||||
case SETTING_OVERLAP_MS:
|
||||
// change time-stretch overlap length parameter
|
||||
pTDStretch->setParameters(sampleRate, sequenceMs, seekWindowMs, value);
|
||||
return TRUE;
|
||||
|
||||
default :
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Reads a setting controlling the processing system behaviour. See the
|
||||
// 'SETTING_...' defines for available setting ID's.
|
||||
//
|
||||
// Returns the setting value.
|
||||
int SoundTouch::getSetting(int settingId) const
|
||||
{
|
||||
int temp;
|
||||
|
||||
switch (settingId)
|
||||
{
|
||||
case SETTING_USE_AA_FILTER :
|
||||
return (uint)pRateTransposer->isAAFilterEnabled();
|
||||
|
||||
case SETTING_AA_FILTER_LENGTH :
|
||||
return pRateTransposer->getAAFilter()->getLength();
|
||||
|
||||
case SETTING_USE_QUICKSEEK :
|
||||
return (uint) pTDStretch->isQuickSeekEnabled();
|
||||
|
||||
case SETTING_SEQUENCE_MS:
|
||||
pTDStretch->getParameters(NULL, &temp, NULL, NULL);
|
||||
return temp;
|
||||
|
||||
case SETTING_SEEKWINDOW_MS:
|
||||
pTDStretch->getParameters(NULL, NULL, &temp, NULL);
|
||||
return temp;
|
||||
|
||||
case SETTING_OVERLAP_MS:
|
||||
pTDStretch->getParameters(NULL, NULL, NULL, &temp);
|
||||
return temp;
|
||||
|
||||
case SETTING_NOMINAL_INPUT_SEQUENCE :
|
||||
return pTDStretch->getInputSampleReq();
|
||||
|
||||
case SETTING_NOMINAL_OUTPUT_SEQUENCE :
|
||||
return pTDStretch->getOutputBatchSize();
|
||||
|
||||
default :
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Clears all the samples in the object's output and internal processing
|
||||
// buffers.
|
||||
void SoundTouch::clear()
|
||||
{
|
||||
pRateTransposer->clear();
|
||||
pTDStretch->clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Returns number of samples currently unprocessed.
|
||||
uint SoundTouch::numUnprocessedSamples() const
|
||||
{
|
||||
FIFOSamplePipe * psp;
|
||||
if (pTDStretch)
|
||||
{
|
||||
psp = pTDStretch->getInput();
|
||||
if (psp)
|
||||
{
|
||||
return psp->numSamples();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
277
3rdparty/SoundTouch/SoundTouch.h
vendored
277
3rdparty/SoundTouch/SoundTouch.h
vendored
@@ -1,277 +0,0 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// SoundTouch - main class for tempo/pitch/rate adjusting routines.
|
||||
///
|
||||
/// Notes:
|
||||
/// - Initialize the SoundTouch object instance by setting up the sound stream
|
||||
/// parameters with functions 'setSampleRate' and 'setChannels', then set
|
||||
/// desired tempo/pitch/rate settings with the corresponding functions.
|
||||
///
|
||||
/// - The SoundTouch class behaves like a first-in-first-out pipeline: The
|
||||
/// samples that are to be processed are fed into one of the pipe by calling
|
||||
/// function 'putSamples', while the ready processed samples can be read
|
||||
/// from the other end of the pipeline with function 'receiveSamples'.
|
||||
///
|
||||
/// - The SoundTouch processing classes require certain sized 'batches' of
|
||||
/// samples in order to process the sound. For this reason the classes buffer
|
||||
/// incoming samples until there are enough of samples available for
|
||||
/// processing, then they carry out the processing step and consequently
|
||||
/// make the processed samples available for outputting.
|
||||
///
|
||||
/// - For the above reason, the processing routines introduce a certain
|
||||
/// 'latency' between the input and output, so that the samples input to
|
||||
/// SoundTouch may not be immediately available in the output, and neither
|
||||
/// the amount of outputtable samples may not immediately be in direct
|
||||
/// relationship with the amount of previously input samples.
|
||||
///
|
||||
/// - The tempo/pitch/rate control parameters can be altered during processing.
|
||||
/// Please notice though that they aren't currently protected by semaphores,
|
||||
/// so in multi-thread application external semaphore protection may be
|
||||
/// required.
|
||||
///
|
||||
/// - This class utilizes classes 'TDStretch' for tempo change (without modifying
|
||||
/// pitch) and 'RateTransposer' for changing the playback rate (that is, both
|
||||
/// tempo and pitch in the same ratio) of the sound. The third available control
|
||||
/// 'pitch' (change pitch but maintain tempo) is produced by a combination of
|
||||
/// combining the two other controls.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2012-12-28 17:32:59 -0200 (sex, 28 dez 2012) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: SoundTouch.h 163 2012-12-28 19:32:59Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef SoundTouch_H
|
||||
#define SoundTouch_H
|
||||
|
||||
#include "FIFOSamplePipe.h"
|
||||
#include "STTypes.h"
|
||||
|
||||
namespace soundtouch
|
||||
{
|
||||
|
||||
/// Soundtouch library version string
|
||||
#define SOUNDTOUCH_VERSION "1.7.1"
|
||||
|
||||
/// SoundTouch library version id
|
||||
#define SOUNDTOUCH_VERSION_ID (10701)
|
||||
|
||||
//
|
||||
// Available setting IDs for the 'setSetting' & 'get_setting' functions:
|
||||
|
||||
/// Enable/disable anti-alias filter in pitch transposer (0 = disable)
|
||||
#define SETTING_USE_AA_FILTER 0
|
||||
|
||||
/// Pitch transposer anti-alias filter length (8 .. 128 taps, default = 32)
|
||||
#define SETTING_AA_FILTER_LENGTH 1
|
||||
|
||||
/// Enable/disable quick seeking algorithm in tempo changer routine
|
||||
/// (enabling quick seeking lowers CPU utilization but causes a minor sound
|
||||
/// quality compromising)
|
||||
#define SETTING_USE_QUICKSEEK 2
|
||||
|
||||
/// Time-stretch algorithm single processing sequence length in milliseconds. This determines
|
||||
/// to how long sequences the original sound is chopped in the time-stretch algorithm.
|
||||
/// See "STTypes.h" or README for more information.
|
||||
#define SETTING_SEQUENCE_MS 3
|
||||
|
||||
/// Time-stretch algorithm seeking window length in milliseconds for algorithm that finds the
|
||||
/// best possible overlapping location. This determines from how wide window the algorithm
|
||||
/// may look for an optimal joining location when mixing the sound sequences back together.
|
||||
/// See "STTypes.h" or README for more information.
|
||||
#define SETTING_SEEKWINDOW_MS 4
|
||||
|
||||
/// Time-stretch algorithm overlap length in milliseconds. When the chopped sound sequences
|
||||
/// are mixed back together, to form a continuous sound stream, this parameter defines over
|
||||
/// how long period the two consecutive sequences are let to overlap each other.
|
||||
/// See "STTypes.h" or README for more information.
|
||||
#define SETTING_OVERLAP_MS 5
|
||||
|
||||
|
||||
/// Call "getSetting" with this ID to query nominal average processing sequence
|
||||
/// size in samples. This value tells approcimate value how many input samples
|
||||
/// SoundTouch needs to gather before it does DSP processing run for the sample batch.
|
||||
///
|
||||
/// Notices:
|
||||
/// - This is read-only parameter, i.e. setSetting ignores this parameter
|
||||
/// - Returned value is approximate average value, exact processing batch
|
||||
/// size may wary from time to time
|
||||
/// - This parameter value is not constant but may change depending on
|
||||
/// tempo/pitch/rate/samplerate settings.
|
||||
#define SETTING_NOMINAL_INPUT_SEQUENCE 6
|
||||
|
||||
|
||||
/// Call "getSetting" with this ID to query nominal average processing output
|
||||
/// size in samples. This value tells approcimate value how many output samples
|
||||
/// SoundTouch outputs once it does DSP processing run for a batch of input samples.
|
||||
///
|
||||
/// Notices:
|
||||
/// - This is read-only parameter, i.e. setSetting ignores this parameter
|
||||
/// - Returned value is approximate average value, exact processing batch
|
||||
/// size may wary from time to time
|
||||
/// - This parameter value is not constant but may change depending on
|
||||
/// tempo/pitch/rate/samplerate settings.
|
||||
#define SETTING_NOMINAL_OUTPUT_SEQUENCE 7
|
||||
|
||||
class SoundTouch : public FIFOProcessor
|
||||
{
|
||||
private:
|
||||
/// Rate transposer class instance
|
||||
class RateTransposer *pRateTransposer;
|
||||
|
||||
/// Time-stretch class instance
|
||||
class TDStretch *pTDStretch;
|
||||
|
||||
/// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.
|
||||
float virtualRate;
|
||||
|
||||
/// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.
|
||||
float virtualTempo;
|
||||
|
||||
/// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.
|
||||
float virtualPitch;
|
||||
|
||||
/// Flag: Has sample rate been set?
|
||||
BOOL bSrateSet;
|
||||
|
||||
/// Calculates effective rate & tempo valuescfrom 'virtualRate', 'virtualTempo' and
|
||||
/// 'virtualPitch' parameters.
|
||||
void calcEffectiveRateAndTempo();
|
||||
|
||||
protected :
|
||||
/// Number of channels
|
||||
uint channels;
|
||||
|
||||
/// Effective 'rate' value calculated from 'virtualRate', 'virtualTempo' and 'virtualPitch'
|
||||
float rate;
|
||||
|
||||
/// Effective 'tempo' value calculated from 'virtualRate', 'virtualTempo' and 'virtualPitch'
|
||||
float tempo;
|
||||
|
||||
public:
|
||||
SoundTouch();
|
||||
virtual ~SoundTouch();
|
||||
|
||||
/// Get SoundTouch library version string
|
||||
static const char *getVersionString();
|
||||
|
||||
/// Get SoundTouch library version Id
|
||||
static uint getVersionId();
|
||||
|
||||
/// Sets new rate control value. Normal rate = 1.0, smaller values
|
||||
/// represent slower rate, larger faster rates.
|
||||
void setRate(float newRate);
|
||||
|
||||
/// Sets new tempo control value. Normal tempo = 1.0, smaller values
|
||||
/// represent slower tempo, larger faster tempo.
|
||||
void setTempo(float newTempo);
|
||||
|
||||
/// Sets new rate control value as a difference in percents compared
|
||||
/// to the original rate (-50 .. +100 %)
|
||||
void setRateChange(float newRate);
|
||||
|
||||
/// Sets new tempo control value as a difference in percents compared
|
||||
/// to the original tempo (-50 .. +100 %)
|
||||
void setTempoChange(float newTempo);
|
||||
|
||||
/// Sets new pitch control value. Original pitch = 1.0, smaller values
|
||||
/// represent lower pitches, larger values higher pitch.
|
||||
void setPitch(float newPitch);
|
||||
|
||||
/// Sets pitch change in octaves compared to the original pitch
|
||||
/// (-1.00 .. +1.00)
|
||||
void setPitchOctaves(float newPitch);
|
||||
|
||||
/// Sets pitch change in semi-tones compared to the original pitch
|
||||
/// (-12 .. +12)
|
||||
void setPitchSemiTones(int newPitch);
|
||||
void setPitchSemiTones(float newPitch);
|
||||
|
||||
/// Sets the number of channels, 1 = mono, 2 = stereo
|
||||
void setChannels(uint numChannels);
|
||||
|
||||
/// Sets sample rate.
|
||||
void setSampleRate(uint srate);
|
||||
|
||||
/// Flushes the last samples from the processing pipeline to the output.
|
||||
/// Clears also the internal processing buffers.
|
||||
//
|
||||
/// Note: This function is meant for extracting the last samples of a sound
|
||||
/// stream. This function may introduce additional blank samples in the end
|
||||
/// of the sound stream, and thus it's not recommended to call this function
|
||||
/// in the middle of a sound stream.
|
||||
void flush();
|
||||
|
||||
/// Adds 'numSamples' pcs of samples from the 'samples' memory position into
|
||||
/// the input of the object. Notice that sample rate _has_to_ be set before
|
||||
/// calling this function, otherwise throws a runtime_error exception.
|
||||
virtual void putSamples(
|
||||
const SAMPLETYPE *samples, ///< Pointer to sample buffer.
|
||||
uint numSamples ///< Number of samples in buffer. Notice
|
||||
///< that in case of stereo-sound a single sample
|
||||
///< contains data for both channels.
|
||||
);
|
||||
|
||||
/// Clears all the samples in the object's output and internal processing
|
||||
/// buffers.
|
||||
virtual void clear();
|
||||
|
||||
/// Changes a setting controlling the processing system behaviour. See the
|
||||
/// 'SETTING_...' defines for available setting ID's.
|
||||
///
|
||||
/// \return 'TRUE' if the setting was succesfully changed
|
||||
BOOL setSetting(int settingId, ///< Setting ID number. see SETTING_... defines.
|
||||
int value ///< New setting value.
|
||||
);
|
||||
|
||||
/// Reads a setting controlling the processing system behaviour. See the
|
||||
/// 'SETTING_...' defines for available setting ID's.
|
||||
///
|
||||
/// \return the setting value.
|
||||
int getSetting(int settingId ///< Setting ID number, see SETTING_... defines.
|
||||
) const;
|
||||
|
||||
/// Returns number of samples currently unprocessed.
|
||||
virtual uint numUnprocessedSamples() const;
|
||||
|
||||
|
||||
/// Other handy functions that are implemented in the ancestor classes (see
|
||||
/// classes 'FIFOProcessor' and 'FIFOSamplePipe')
|
||||
///
|
||||
/// - receiveSamples() : Use this function to receive 'ready' processed samples from SoundTouch.
|
||||
/// - numSamples() : Get number of 'ready' samples that can be received with
|
||||
/// function 'receiveSamples()'
|
||||
/// - isEmpty() : Returns nonzero if there aren't any 'ready' samples.
|
||||
/// - clear() : Clears all samples from ready/processing buffers.
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
||||
285
3rdparty/SoundTouch/SoundTouch.vcproj
vendored
285
3rdparty/SoundTouch/SoundTouch.vcproj
vendored
@@ -1,285 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="SoundTouch"
|
||||
ProjectGUID="{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}"
|
||||
RootNamespace="SoundTouch"
|
||||
TargetFrameworkVersion="0"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
ConfigurationType="4"
|
||||
InheritedPropertySheets="..\DefaultProjectRootDir.vsprops;..\3rdparty.vsprops;..\..\common\vsprops\CodeGen_Debug.vsprops;..\..\common\vsprops\IncrementalLinking.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
WarningLevel="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
ConfigurationType="4"
|
||||
InheritedPropertySheets="..\DefaultProjectRootDir.vsprops;..\3rdparty.vsprops;..\..\common\vsprops\CodeGen_Release.vsprops"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
WarningLevel="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Devel|Win32"
|
||||
ConfigurationType="4"
|
||||
InheritedPropertySheets="..\DefaultProjectRootDir.vsprops;..\3rdparty.vsprops;..\..\common\vsprops\CodeGen_Devel.vsprops;..\..\common\vsprops\IncrementalLinking.vsprops"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\3dnow_win.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\AAFilter.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\cpu_detect_x86_win.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\FIFOSampleBuffer.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\FIRFilter.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\mmx_optimized.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RateTransposer.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\SoundTouch.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sse_optimized.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TDStretch.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\WavFile.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\AAFilter.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\BPMDetect.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\cpu_detect.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\FIFOSampleBuffer.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\FIFOSamplePipe.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\FIRFilter.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RateTransposer.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\SoundTouch.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\STTypes.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TDStretch.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\WavFile.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
112
3rdparty/SoundTouch/SoundTouch.vcxproj
vendored
112
3rdparty/SoundTouch/SoundTouch.vcxproj
vendored
@@ -1,112 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Devel|Win32">
|
||||
<Configuration>Devel</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}</ProjectGuid>
|
||||
<RootNamespace>SoundTouch</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Devel.props" />
|
||||
<Import Project="..\..\common\vsprops\IncrementalLinking.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Release.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Debug.props" />
|
||||
<Import Project="..\..\common\vsprops\IncrementalLinking.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(ProjectName)-dev</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="3dnow_win.cpp" />
|
||||
<ClCompile Include="AAFilter.cpp" />
|
||||
<ClCompile Include="cpu_detect_x86_win.cpp" />
|
||||
<ClCompile Include="FIFOSampleBuffer.cpp" />
|
||||
<ClCompile Include="FIRFilter.cpp" />
|
||||
<ClCompile Include="mmx_optimized.cpp" />
|
||||
<ClCompile Include="RateTransposer.cpp" />
|
||||
<ClCompile Include="SoundTouch.cpp" />
|
||||
<ClCompile Include="sse_optimized.cpp" />
|
||||
<ClCompile Include="TDStretch.cpp" />
|
||||
<ClCompile Include="WavFile.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AAFilter.h" />
|
||||
<ClInclude Include="BPMDetect.h" />
|
||||
<ClInclude Include="cpu_detect.h" />
|
||||
<ClInclude Include="FIFOSampleBuffer.h" />
|
||||
<ClInclude Include="FIFOSamplePipe.h" />
|
||||
<ClInclude Include="FIRFilter.h" />
|
||||
<ClInclude Include="RateTransposer.h" />
|
||||
<ClInclude Include="SoundTouch.h" />
|
||||
<ClInclude Include="STTypes.h" />
|
||||
<ClInclude Include="TDStretch.h" />
|
||||
<ClInclude Include="WavFile.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
83
3rdparty/SoundTouch/SoundTouch.vcxproj.filters
vendored
83
3rdparty/SoundTouch/SoundTouch.vcxproj.filters
vendored
@@ -1,83 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="3dnow_win.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AAFilter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="cpu_detect_x86_win.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FIFOSampleBuffer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FIRFilter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mmx_optimized.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="RateTransposer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SoundTouch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="sse_optimized.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="TDStretch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="WavFile.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AAFilter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="BPMDetect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="cpu_detect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIFOSampleBuffer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIFOSamplePipe.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIRFilter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="RateTransposer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SoundTouch.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="STTypes.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="TDStretch.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="WavFile.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
116
3rdparty/SoundTouch/SoundTouch_vs2012.vcxproj
vendored
116
3rdparty/SoundTouch/SoundTouch_vs2012.vcxproj
vendored
@@ -1,116 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Devel|Win32">
|
||||
<Configuration>Devel</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}</ProjectGuid>
|
||||
<RootNamespace>SoundTouch</RootNamespace>
|
||||
<ProjectName>SoundTouch</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v110_xp</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v110_xp</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<PlatformToolset>v110_xp</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Devel.props" />
|
||||
<Import Project="..\..\common\vsprops\IncrementalLinking.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Release.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Debug.props" />
|
||||
<Import Project="..\..\common\vsprops\IncrementalLinking.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(ProjectName)-dev</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="3dnow_win.cpp" />
|
||||
<ClCompile Include="AAFilter.cpp" />
|
||||
<ClCompile Include="cpu_detect_x86_win.cpp" />
|
||||
<ClCompile Include="FIFOSampleBuffer.cpp" />
|
||||
<ClCompile Include="FIRFilter.cpp" />
|
||||
<ClCompile Include="mmx_optimized.cpp" />
|
||||
<ClCompile Include="RateTransposer.cpp" />
|
||||
<ClCompile Include="SoundTouch.cpp" />
|
||||
<ClCompile Include="sse_optimized.cpp" />
|
||||
<ClCompile Include="TDStretch.cpp" />
|
||||
<ClCompile Include="WavFile.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AAFilter.h" />
|
||||
<ClInclude Include="BPMDetect.h" />
|
||||
<ClInclude Include="cpu_detect.h" />
|
||||
<ClInclude Include="FIFOSampleBuffer.h" />
|
||||
<ClInclude Include="FIFOSamplePipe.h" />
|
||||
<ClInclude Include="FIRFilter.h" />
|
||||
<ClInclude Include="RateTransposer.h" />
|
||||
<ClInclude Include="SoundTouch.h" />
|
||||
<ClInclude Include="STTypes.h" />
|
||||
<ClInclude Include="TDStretch.h" />
|
||||
<ClInclude Include="WavFile.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -1,83 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="3dnow_win.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AAFilter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="cpu_detect_x86_win.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FIFOSampleBuffer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FIRFilter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mmx_optimized.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="RateTransposer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SoundTouch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="sse_optimized.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="TDStretch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="WavFile.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AAFilter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="BPMDetect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="cpu_detect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIFOSampleBuffer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIFOSamplePipe.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIRFilter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="RateTransposer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SoundTouch.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="STTypes.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="TDStretch.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="WavFile.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
116
3rdparty/SoundTouch/SoundTouch_vs2013.vcxproj
vendored
116
3rdparty/SoundTouch/SoundTouch_vs2013.vcxproj
vendored
@@ -1,116 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Devel|Win32">
|
||||
<Configuration>Devel</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}</ProjectGuid>
|
||||
<RootNamespace>SoundTouch</RootNamespace>
|
||||
<ProjectName>SoundTouch</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<PlatformToolset>v120_xp</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Devel.props" />
|
||||
<Import Project="..\..\common\vsprops\IncrementalLinking.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Release.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\3rdparty.props" />
|
||||
<Import Project="..\..\common\vsprops\CodeGen_Debug.props" />
|
||||
<Import Project="..\..\common\vsprops\IncrementalLinking.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(ProjectName)-dev</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="3dnow_win.cpp" />
|
||||
<ClCompile Include="AAFilter.cpp" />
|
||||
<ClCompile Include="cpu_detect_x86_win.cpp" />
|
||||
<ClCompile Include="FIFOSampleBuffer.cpp" />
|
||||
<ClCompile Include="FIRFilter.cpp" />
|
||||
<ClCompile Include="mmx_optimized.cpp" />
|
||||
<ClCompile Include="RateTransposer.cpp" />
|
||||
<ClCompile Include="SoundTouch.cpp" />
|
||||
<ClCompile Include="sse_optimized.cpp" />
|
||||
<ClCompile Include="TDStretch.cpp" />
|
||||
<ClCompile Include="WavFile.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AAFilter.h" />
|
||||
<ClInclude Include="BPMDetect.h" />
|
||||
<ClInclude Include="cpu_detect.h" />
|
||||
<ClInclude Include="FIFOSampleBuffer.h" />
|
||||
<ClInclude Include="FIFOSamplePipe.h" />
|
||||
<ClInclude Include="FIRFilter.h" />
|
||||
<ClInclude Include="RateTransposer.h" />
|
||||
<ClInclude Include="SoundTouch.h" />
|
||||
<ClInclude Include="STTypes.h" />
|
||||
<ClInclude Include="TDStretch.h" />
|
||||
<ClInclude Include="WavFile.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -1,83 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="3dnow_win.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AAFilter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="cpu_detect_x86_win.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FIFOSampleBuffer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FIRFilter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mmx_optimized.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="RateTransposer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SoundTouch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="sse_optimized.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="TDStretch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="WavFile.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AAFilter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="BPMDetect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="cpu_detect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIFOSampleBuffer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIFOSamplePipe.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FIRFilter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="RateTransposer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SoundTouch.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="STTypes.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="TDStretch.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="WavFile.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
808
3rdparty/SoundTouch/TDStretch.cpp
vendored
808
3rdparty/SoundTouch/TDStretch.cpp
vendored
@@ -1,808 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Sampled sound tempo changer/time stretch algorithm. Changes the sound tempo
|
||||
/// while maintaining the original pitch by using a time domain WSOLA-like
|
||||
/// method with several performance-increasing tweaks.
|
||||
///
|
||||
/// Note : MMX optimized functions reside in a separate, platform-specific
|
||||
/// file, e.g. 'mmx_win.cpp' or 'mmx_gcc.cpp'
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2012-11-08 16:53:01 -0200 (qui, 08 nov 2012) $
|
||||
// File revision : $Revision: 1.12 $
|
||||
//
|
||||
// $Id: TDStretch.cpp 160 2012-11-08 18:53:01Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#include "STTypes.h"
|
||||
#include "cpu_detect.h"
|
||||
#include "TDStretch.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
#define max(x, y) (((x) > (y)) ? (x) : (y))
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Constant definitions
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// Table for the hierarchical mixing position seeking algorithm
|
||||
static const short _scanOffsets[5][24]={
|
||||
{ 124, 186, 248, 310, 372, 434, 496, 558, 620, 682, 744, 806,
|
||||
868, 930, 992, 1054, 1116, 1178, 1240, 1302, 1364, 1426, 1488, 0},
|
||||
{-100, -75, -50, -25, 25, 50, 75, 100, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{ -20, -15, -10, -5, 5, 10, 15, 20, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{ -4, -3, -2, -1, 1, 2, 3, 4, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{ 121, 114, 97, 114, 98, 105, 108, 32, 104, 99, 117, 111,
|
||||
116, 100, 110, 117, 111, 115, 0, 0, 0, 0, 0, 0}};
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Implementation of the class 'TDStretch'
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
TDStretch::TDStretch() : FIFOProcessor(&outputBuffer)
|
||||
{
|
||||
bQuickSeek = FALSE;
|
||||
channels = 2;
|
||||
|
||||
pMidBuffer = NULL;
|
||||
pMidBufferUnaligned = NULL;
|
||||
overlapLength = 0;
|
||||
|
||||
bAutoSeqSetting = TRUE;
|
||||
bAutoSeekSetting = TRUE;
|
||||
|
||||
// outDebt = 0;
|
||||
skipFract = 0;
|
||||
|
||||
tempo = 1.0f;
|
||||
setParameters(44100, DEFAULT_SEQUENCE_MS, DEFAULT_SEEKWINDOW_MS, DEFAULT_OVERLAP_MS);
|
||||
setTempo(1.0f);
|
||||
|
||||
clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
TDStretch::~TDStretch()
|
||||
{
|
||||
delete[] pMidBufferUnaligned;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets routine control parameters. These control are certain time constants
|
||||
// defining how the sound is stretched to the desired duration.
|
||||
//
|
||||
// 'sampleRate' = sample rate of the sound
|
||||
// 'sequenceMS' = one processing sequence length in milliseconds (default = 82 ms)
|
||||
// 'seekwindowMS' = seeking window length for scanning the best overlapping
|
||||
// position (default = 28 ms)
|
||||
// 'overlapMS' = overlapping length (default = 12 ms)
|
||||
|
||||
void TDStretch::setParameters(int aSampleRate, int aSequenceMS,
|
||||
int aSeekWindowMS, int aOverlapMS)
|
||||
{
|
||||
// accept only positive parameter values - if zero or negative, use old values instead
|
||||
if (aSampleRate > 0) this->sampleRate = aSampleRate;
|
||||
if (aOverlapMS > 0) this->overlapMs = aOverlapMS;
|
||||
|
||||
if (aSequenceMS > 0)
|
||||
{
|
||||
this->sequenceMs = aSequenceMS;
|
||||
bAutoSeqSetting = FALSE;
|
||||
}
|
||||
else if (aSequenceMS == 0)
|
||||
{
|
||||
// if zero, use automatic setting
|
||||
bAutoSeqSetting = TRUE;
|
||||
}
|
||||
|
||||
if (aSeekWindowMS > 0)
|
||||
{
|
||||
this->seekWindowMs = aSeekWindowMS;
|
||||
bAutoSeekSetting = FALSE;
|
||||
}
|
||||
else if (aSeekWindowMS == 0)
|
||||
{
|
||||
// if zero, use automatic setting
|
||||
bAutoSeekSetting = TRUE;
|
||||
}
|
||||
|
||||
calcSeqParameters();
|
||||
|
||||
calculateOverlapLength(overlapMs);
|
||||
|
||||
// set tempo to recalculate 'sampleReq'
|
||||
setTempo(tempo);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Get routine control parameters, see setParameters() function.
|
||||
/// Any of the parameters to this function can be NULL, in such case corresponding parameter
|
||||
/// value isn't returned.
|
||||
void TDStretch::getParameters(int *pSampleRate, int *pSequenceMs, int *pSeekWindowMs, int *pOverlapMs) const
|
||||
{
|
||||
if (pSampleRate)
|
||||
{
|
||||
*pSampleRate = sampleRate;
|
||||
}
|
||||
|
||||
if (pSequenceMs)
|
||||
{
|
||||
*pSequenceMs = (bAutoSeqSetting) ? (USE_AUTO_SEQUENCE_LEN) : sequenceMs;
|
||||
}
|
||||
|
||||
if (pSeekWindowMs)
|
||||
{
|
||||
*pSeekWindowMs = (bAutoSeekSetting) ? (USE_AUTO_SEEKWINDOW_LEN) : seekWindowMs;
|
||||
}
|
||||
|
||||
if (pOverlapMs)
|
||||
{
|
||||
*pOverlapMs = overlapMs;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Overlaps samples in 'midBuffer' with the samples in 'pInput'
|
||||
void TDStretch::overlapMono(SAMPLETYPE *pOutput, const SAMPLETYPE *pInput) const
|
||||
{
|
||||
int i;
|
||||
SAMPLETYPE m1, m2;
|
||||
|
||||
m1 = (SAMPLETYPE)0;
|
||||
m2 = (SAMPLETYPE)overlapLength;
|
||||
|
||||
for (i = 0; i < overlapLength ; i ++)
|
||||
{
|
||||
pOutput[i] = (pInput[i] * m1 + pMidBuffer[i] * m2 ) / overlapLength;
|
||||
m1 += 1;
|
||||
m2 -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TDStretch::clearMidBuffer()
|
||||
{
|
||||
memset(pMidBuffer, 0, 2 * sizeof(SAMPLETYPE) * overlapLength);
|
||||
}
|
||||
|
||||
|
||||
void TDStretch::clearInput()
|
||||
{
|
||||
inputBuffer.clear();
|
||||
clearMidBuffer();
|
||||
}
|
||||
|
||||
|
||||
// Clears the sample buffers
|
||||
void TDStretch::clear()
|
||||
{
|
||||
outputBuffer.clear();
|
||||
clearInput();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Enables/disables the quick position seeking algorithm. Zero to disable, nonzero
|
||||
// to enable
|
||||
void TDStretch::enableQuickSeek(BOOL enable)
|
||||
{
|
||||
bQuickSeek = enable;
|
||||
}
|
||||
|
||||
|
||||
// Returns nonzero if the quick seeking algorithm is enabled.
|
||||
BOOL TDStretch::isQuickSeekEnabled() const
|
||||
{
|
||||
return bQuickSeek;
|
||||
}
|
||||
|
||||
|
||||
// Seeks for the optimal overlap-mixing position.
|
||||
int TDStretch::seekBestOverlapPosition(const SAMPLETYPE *refPos)
|
||||
{
|
||||
if (bQuickSeek)
|
||||
{
|
||||
return seekBestOverlapPositionQuick(refPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
return seekBestOverlapPositionFull(refPos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Overlaps samples in 'midBuffer' with the samples in 'pInputBuffer' at position
|
||||
// of 'ovlPos'.
|
||||
inline void TDStretch::overlap(SAMPLETYPE *pOutput, const SAMPLETYPE *pInput, uint ovlPos) const
|
||||
{
|
||||
if (channels == 2)
|
||||
{
|
||||
// stereo sound
|
||||
overlapStereo(pOutput, pInput + 2 * ovlPos);
|
||||
} else {
|
||||
// mono sound.
|
||||
overlapMono(pOutput, pInput + ovlPos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Seeks for the optimal overlap-mixing position. The 'stereo' version of the
|
||||
// routine
|
||||
//
|
||||
// The best position is determined as the position where the two overlapped
|
||||
// sample sequences are 'most alike', in terms of the highest cross-correlation
|
||||
// value over the overlapping period
|
||||
int TDStretch::seekBestOverlapPositionFull(const SAMPLETYPE *refPos)
|
||||
{
|
||||
int bestOffs;
|
||||
double bestCorr, corr;
|
||||
int i;
|
||||
|
||||
bestCorr = FLT_MIN;
|
||||
bestOffs = 0;
|
||||
|
||||
// Scans for the best correlation value by testing each possible position
|
||||
// over the permitted range.
|
||||
for (i = 0; i < seekLength; i ++)
|
||||
{
|
||||
// Calculates correlation value for the mixing position corresponding
|
||||
// to 'i'
|
||||
corr = calcCrossCorr(refPos + channels * i, pMidBuffer);
|
||||
// heuristic rule to slightly favour values close to mid of the range
|
||||
double tmp = (double)(2 * i - seekLength) / (double)seekLength;
|
||||
corr = ((corr + 0.1) * (1.0 - 0.25 * tmp * tmp));
|
||||
|
||||
// Checks for the highest correlation value
|
||||
if (corr > bestCorr)
|
||||
{
|
||||
bestCorr = corr;
|
||||
bestOffs = i;
|
||||
}
|
||||
}
|
||||
// clear cross correlation routine state if necessary (is so e.g. in MMX routines).
|
||||
clearCrossCorrState();
|
||||
|
||||
return bestOffs;
|
||||
}
|
||||
|
||||
|
||||
// Seeks for the optimal overlap-mixing position. The 'stereo' version of the
|
||||
// routine
|
||||
//
|
||||
// The best position is determined as the position where the two overlapped
|
||||
// sample sequences are 'most alike', in terms of the highest cross-correlation
|
||||
// value over the overlapping period
|
||||
int TDStretch::seekBestOverlapPositionQuick(const SAMPLETYPE *refPos)
|
||||
{
|
||||
int j;
|
||||
int bestOffs;
|
||||
double bestCorr, corr;
|
||||
int scanCount, corrOffset, tempOffset;
|
||||
|
||||
bestCorr = FLT_MIN;
|
||||
bestOffs = _scanOffsets[0][0];
|
||||
corrOffset = 0;
|
||||
tempOffset = 0;
|
||||
|
||||
// Scans for the best correlation value using four-pass hierarchical search.
|
||||
//
|
||||
// The look-up table 'scans' has hierarchical position adjusting steps.
|
||||
// In first pass the routine searhes for the highest correlation with
|
||||
// relatively coarse steps, then rescans the neighbourhood of the highest
|
||||
// correlation with better resolution and so on.
|
||||
for (scanCount = 0;scanCount < 4; scanCount ++)
|
||||
{
|
||||
j = 0;
|
||||
while (_scanOffsets[scanCount][j])
|
||||
{
|
||||
tempOffset = corrOffset + _scanOffsets[scanCount][j];
|
||||
if (tempOffset >= seekLength) break;
|
||||
|
||||
// Calculates correlation value for the mixing position corresponding
|
||||
// to 'tempOffset'
|
||||
corr = (double)calcCrossCorr(refPos + channels * tempOffset, pMidBuffer);
|
||||
// heuristic rule to slightly favour values close to mid of the range
|
||||
double tmp = (double)(2 * tempOffset - seekLength) / seekLength;
|
||||
corr = ((corr + 0.1) * (1.0 - 0.25 * tmp * tmp));
|
||||
|
||||
// Checks for the highest correlation value
|
||||
if (corr > bestCorr)
|
||||
{
|
||||
bestCorr = corr;
|
||||
bestOffs = tempOffset;
|
||||
}
|
||||
j ++;
|
||||
}
|
||||
corrOffset = bestOffs;
|
||||
}
|
||||
// clear cross correlation routine state if necessary (is so e.g. in MMX routines).
|
||||
clearCrossCorrState();
|
||||
|
||||
return bestOffs;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// clear cross correlation routine state if necessary
|
||||
void TDStretch::clearCrossCorrState()
|
||||
{
|
||||
// default implementation is empty.
|
||||
}
|
||||
|
||||
|
||||
/// Calculates processing sequence length according to tempo setting
|
||||
void TDStretch::calcSeqParameters()
|
||||
{
|
||||
// Adjust tempo param according to tempo, so that variating processing sequence length is used
|
||||
// at varius tempo settings, between the given low...top limits
|
||||
#define AUTOSEQ_TEMPO_LOW 0.5 // auto setting low tempo range (-50%)
|
||||
#define AUTOSEQ_TEMPO_TOP 2.0 // auto setting top tempo range (+100%)
|
||||
|
||||
// sequence-ms setting values at above low & top tempo
|
||||
#define AUTOSEQ_AT_MIN 125.0
|
||||
#define AUTOSEQ_AT_MAX 50.0
|
||||
#define AUTOSEQ_K ((AUTOSEQ_AT_MAX - AUTOSEQ_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW))
|
||||
#define AUTOSEQ_C (AUTOSEQ_AT_MIN - (AUTOSEQ_K) * (AUTOSEQ_TEMPO_LOW))
|
||||
|
||||
// seek-window-ms setting values at above low & top tempo
|
||||
#define AUTOSEEK_AT_MIN 25.0
|
||||
#define AUTOSEEK_AT_MAX 15.0
|
||||
#define AUTOSEEK_K ((AUTOSEEK_AT_MAX - AUTOSEEK_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW))
|
||||
#define AUTOSEEK_C (AUTOSEEK_AT_MIN - (AUTOSEEK_K) * (AUTOSEQ_TEMPO_LOW))
|
||||
|
||||
#define CHECK_LIMITS(x, mi, ma) (((x) < (mi)) ? (mi) : (((x) > (ma)) ? (ma) : (x)))
|
||||
|
||||
double seq, seek;
|
||||
|
||||
if (bAutoSeqSetting)
|
||||
{
|
||||
seq = AUTOSEQ_C + AUTOSEQ_K * tempo;
|
||||
seq = CHECK_LIMITS(seq, AUTOSEQ_AT_MAX, AUTOSEQ_AT_MIN);
|
||||
sequenceMs = (int)(seq + 0.5);
|
||||
}
|
||||
|
||||
if (bAutoSeekSetting)
|
||||
{
|
||||
seek = AUTOSEEK_C + AUTOSEEK_K * tempo;
|
||||
seek = CHECK_LIMITS(seek, AUTOSEEK_AT_MAX, AUTOSEEK_AT_MIN);
|
||||
seekWindowMs = (int)(seek + 0.5);
|
||||
}
|
||||
|
||||
// Update seek window lengths
|
||||
seekWindowLength = (sampleRate * sequenceMs) / 1000;
|
||||
if (seekWindowLength < 2 * overlapLength)
|
||||
{
|
||||
seekWindowLength = 2 * overlapLength;
|
||||
}
|
||||
seekLength = (sampleRate * seekWindowMs) / 1000;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets new target tempo. Normal tempo = 'SCALE', smaller values represent slower
|
||||
// tempo, larger faster tempo.
|
||||
void TDStretch::setTempo(float newTempo)
|
||||
{
|
||||
int intskip;
|
||||
|
||||
tempo = newTempo;
|
||||
|
||||
// Calculate new sequence duration
|
||||
calcSeqParameters();
|
||||
|
||||
// Calculate ideal skip length (according to tempo value)
|
||||
nominalSkip = tempo * (seekWindowLength - overlapLength);
|
||||
intskip = (int)(nominalSkip + 0.5f);
|
||||
|
||||
// Calculate how many samples are needed in the 'inputBuffer' to
|
||||
// process another batch of samples
|
||||
//sampleReq = max(intskip + overlapLength, seekWindowLength) + seekLength / 2;
|
||||
sampleReq = max(intskip + overlapLength, seekWindowLength) + seekLength;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Sets the number of channels, 1 = mono, 2 = stereo
|
||||
void TDStretch::setChannels(int numChannels)
|
||||
{
|
||||
assert(numChannels > 0);
|
||||
if (channels == numChannels) return;
|
||||
assert(numChannels == 1 || numChannels == 2);
|
||||
|
||||
channels = numChannels;
|
||||
inputBuffer.setChannels(channels);
|
||||
outputBuffer.setChannels(channels);
|
||||
}
|
||||
|
||||
|
||||
// nominal tempo, no need for processing, just pass the samples through
|
||||
// to outputBuffer
|
||||
/*
|
||||
void TDStretch::processNominalTempo()
|
||||
{
|
||||
assert(tempo == 1.0f);
|
||||
|
||||
if (bMidBufferDirty)
|
||||
{
|
||||
// If there are samples in pMidBuffer waiting for overlapping,
|
||||
// do a single sliding overlapping with them in order to prevent a
|
||||
// clicking distortion in the output sound
|
||||
if (inputBuffer.numSamples() < overlapLength)
|
||||
{
|
||||
// wait until we've got overlapLength input samples
|
||||
return;
|
||||
}
|
||||
// Mix the samples in the beginning of 'inputBuffer' with the
|
||||
// samples in 'midBuffer' using sliding overlapping
|
||||
overlap(outputBuffer.ptrEnd(overlapLength), inputBuffer.ptrBegin(), 0);
|
||||
outputBuffer.putSamples(overlapLength);
|
||||
inputBuffer.receiveSamples(overlapLength);
|
||||
clearMidBuffer();
|
||||
// now we've caught the nominal sample flow and may switch to
|
||||
// bypass mode
|
||||
}
|
||||
|
||||
// Simply bypass samples from input to output
|
||||
outputBuffer.moveSamples(inputBuffer);
|
||||
}
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
// Processes as many processing frames of the samples 'inputBuffer', store
|
||||
// the result into 'outputBuffer'
|
||||
void TDStretch::processSamples()
|
||||
{
|
||||
int ovlSkip, offset;
|
||||
int temp;
|
||||
|
||||
/* Removed this small optimization - can introduce a click to sound when tempo setting
|
||||
crosses the nominal value
|
||||
if (tempo == 1.0f)
|
||||
{
|
||||
// tempo not changed from the original, so bypass the processing
|
||||
processNominalTempo();
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
// Process samples as long as there are enough samples in 'inputBuffer'
|
||||
// to form a processing frame.
|
||||
while ((int)inputBuffer.numSamples() >= sampleReq)
|
||||
{
|
||||
// If tempo differs from the normal ('SCALE'), scan for the best overlapping
|
||||
// position
|
||||
offset = seekBestOverlapPosition(inputBuffer.ptrBegin());
|
||||
|
||||
// Mix the samples in the 'inputBuffer' at position of 'offset' with the
|
||||
// samples in 'midBuffer' using sliding overlapping
|
||||
// ... first partially overlap with the end of the previous sequence
|
||||
// (that's in 'midBuffer')
|
||||
overlap(outputBuffer.ptrEnd((uint)overlapLength), inputBuffer.ptrBegin(), (uint)offset);
|
||||
outputBuffer.putSamples((uint)overlapLength);
|
||||
|
||||
// ... then copy sequence samples from 'inputBuffer' to output:
|
||||
|
||||
// length of sequence
|
||||
temp = (seekWindowLength - 2 * overlapLength);
|
||||
|
||||
// crosscheck that we don't have buffer overflow...
|
||||
if ((int)inputBuffer.numSamples() < (offset + temp + overlapLength * 2))
|
||||
{
|
||||
continue; // just in case, shouldn't really happen
|
||||
}
|
||||
|
||||
outputBuffer.putSamples(inputBuffer.ptrBegin() + channels * (offset + overlapLength), (uint)temp);
|
||||
|
||||
// Copies the end of the current sequence from 'inputBuffer' to
|
||||
// 'midBuffer' for being mixed with the beginning of the next
|
||||
// processing sequence and so on
|
||||
assert((offset + temp + overlapLength * 2) <= (int)inputBuffer.numSamples());
|
||||
memcpy(pMidBuffer, inputBuffer.ptrBegin() + channels * (offset + temp + overlapLength),
|
||||
channels * sizeof(SAMPLETYPE) * overlapLength);
|
||||
|
||||
// Remove the processed samples from the input buffer. Update
|
||||
// the difference between integer & nominal skip step to 'skipFract'
|
||||
// in order to prevent the error from accumulating over time.
|
||||
skipFract += nominalSkip; // real skip size
|
||||
ovlSkip = (int)skipFract; // rounded to integer skip
|
||||
skipFract -= ovlSkip; // maintain the fraction part, i.e. real vs. integer skip
|
||||
inputBuffer.receiveSamples((uint)ovlSkip);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Adds 'numsamples' pcs of samples from the 'samples' memory position into
|
||||
// the input of the object.
|
||||
void TDStretch::putSamples(const SAMPLETYPE *samples, uint nSamples)
|
||||
{
|
||||
// Add the samples into the input buffer
|
||||
inputBuffer.putSamples(samples, nSamples);
|
||||
// Process the samples in input buffer
|
||||
processSamples();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Set new overlap length parameter & reallocate RefMidBuffer if necessary.
|
||||
void TDStretch::acceptNewOverlapLength(int newOverlapLength)
|
||||
{
|
||||
int prevOvl;
|
||||
|
||||
assert(newOverlapLength >= 0);
|
||||
prevOvl = overlapLength;
|
||||
overlapLength = newOverlapLength;
|
||||
|
||||
if (overlapLength > prevOvl)
|
||||
{
|
||||
delete[] pMidBufferUnaligned;
|
||||
|
||||
pMidBufferUnaligned = new SAMPLETYPE[overlapLength * 2 + 16 / sizeof(SAMPLETYPE)];
|
||||
// ensure that 'pMidBuffer' is aligned to 16 byte boundary for efficiency
|
||||
pMidBuffer = (SAMPLETYPE *)SOUNDTOUCH_ALIGN_POINTER_16(pMidBufferUnaligned);
|
||||
|
||||
clearMidBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Operator 'new' is overloaded so that it automatically creates a suitable instance
|
||||
// depending on if we've a MMX/SSE/etc-capable CPU available or not.
|
||||
void * TDStretch::operator new(size_t s)
|
||||
{
|
||||
// Notice! don't use "new TDStretch" directly, use "newInstance" to create a new instance instead!
|
||||
ST_THROW_RT_ERROR("Error in TDStretch::new: Don't use 'new TDStretch' directly, use 'newInstance' member instead!");
|
||||
return newInstance();
|
||||
}
|
||||
|
||||
|
||||
TDStretch * TDStretch::newInstance()
|
||||
{
|
||||
uint uExtensions;
|
||||
|
||||
uExtensions = detectCPUextensions();
|
||||
|
||||
// Check if MMX/SSE instruction set extensions supported by CPU
|
||||
|
||||
#ifdef SOUNDTOUCH_ALLOW_MMX
|
||||
// MMX routines available only with integer sample types
|
||||
if (uExtensions & SUPPORT_MMX)
|
||||
{
|
||||
return ::new TDStretchMMX;
|
||||
}
|
||||
else
|
||||
#endif // SOUNDTOUCH_ALLOW_MMX
|
||||
|
||||
|
||||
#ifdef SOUNDTOUCH_ALLOW_SSE
|
||||
if (uExtensions & SUPPORT_SSE)
|
||||
{
|
||||
// SSE support
|
||||
return ::new TDStretchSSE;
|
||||
}
|
||||
else
|
||||
#endif // SOUNDTOUCH_ALLOW_SSE
|
||||
|
||||
{
|
||||
// ISA optimizations not supported, use plain C version
|
||||
return ::new TDStretch;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Integer arithmetics specific algorithm implementations.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef SOUNDTOUCH_INTEGER_SAMPLES
|
||||
|
||||
// Overlaps samples in 'midBuffer' with the samples in 'input'. The 'Stereo'
|
||||
// version of the routine.
|
||||
void TDStretch::overlapStereo(short *poutput, const short *input) const
|
||||
{
|
||||
int i;
|
||||
short temp;
|
||||
int cnt2;
|
||||
|
||||
for (i = 0; i < overlapLength ; i ++)
|
||||
{
|
||||
temp = (short)(overlapLength - i);
|
||||
cnt2 = 2 * i;
|
||||
poutput[cnt2] = (input[cnt2] * i + pMidBuffer[cnt2] * temp ) / overlapLength;
|
||||
poutput[cnt2 + 1] = (input[cnt2 + 1] * i + pMidBuffer[cnt2 + 1] * temp ) / overlapLength;
|
||||
}
|
||||
}
|
||||
|
||||
// Calculates the x having the closest 2^x value for the given value
|
||||
static int _getClosest2Power(double value)
|
||||
{
|
||||
return (int)(log(value) / log(2.0) + 0.5);
|
||||
}
|
||||
|
||||
|
||||
/// Calculates overlap period length in samples.
|
||||
/// Integer version rounds overlap length to closest power of 2
|
||||
/// for a divide scaling operation.
|
||||
void TDStretch::calculateOverlapLength(int aoverlapMs)
|
||||
{
|
||||
int newOvl;
|
||||
|
||||
assert(aoverlapMs >= 0);
|
||||
|
||||
// calculate overlap length so that it's power of 2 - thus it's easy to do
|
||||
// integer division by right-shifting. Term "-1" at end is to account for
|
||||
// the extra most significatnt bit left unused in result by signed multiplication
|
||||
overlapDividerBits = _getClosest2Power((sampleRate * aoverlapMs) / 1000.0) - 1;
|
||||
if (overlapDividerBits > 9) overlapDividerBits = 9;
|
||||
if (overlapDividerBits < 3) overlapDividerBits = 3;
|
||||
newOvl = (int)pow(2.0, (int)overlapDividerBits + 1); // +1 => account for -1 above
|
||||
|
||||
acceptNewOverlapLength(newOvl);
|
||||
|
||||
// calculate sloping divider so that crosscorrelation operation won't
|
||||
// overflow 32-bit register. Max. sum of the crosscorrelation sum without
|
||||
// divider would be 2^30*(N^3-N)/3, where N = overlap length
|
||||
slopingDivider = (newOvl * newOvl - 1) / 3;
|
||||
}
|
||||
|
||||
|
||||
double TDStretch::calcCrossCorr(const short *mixingPos, const short *compare) const
|
||||
{
|
||||
long corr;
|
||||
long norm;
|
||||
int i;
|
||||
|
||||
corr = norm = 0;
|
||||
// Same routine for stereo and mono. For stereo, unroll loop for better
|
||||
// efficiency and gives slightly better resolution against rounding.
|
||||
// For mono it same routine, just unrolls loop by factor of 4
|
||||
for (i = 0; i < channels * overlapLength; i += 4)
|
||||
{
|
||||
corr += (mixingPos[i] * compare[i] +
|
||||
mixingPos[i + 1] * compare[i + 1] +
|
||||
mixingPos[i + 2] * compare[i + 2] +
|
||||
mixingPos[i + 3] * compare[i + 3]) >> overlapDividerBits;
|
||||
norm += (mixingPos[i] * mixingPos[i] +
|
||||
mixingPos[i + 1] * mixingPos[i + 1] +
|
||||
mixingPos[i + 2] * mixingPos[i + 2] +
|
||||
mixingPos[i + 3] * mixingPos[i + 3]) >> overlapDividerBits;
|
||||
}
|
||||
|
||||
// Normalize result by dividing by sqrt(norm) - this step is easiest
|
||||
// done using floating point operation
|
||||
if (norm == 0) norm = 1; // to avoid div by zero
|
||||
return (double)corr / sqrt((double)norm);
|
||||
}
|
||||
|
||||
#endif // SOUNDTOUCH_INTEGER_SAMPLES
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Floating point arithmetics specific algorithm implementations.
|
||||
//
|
||||
|
||||
#ifdef SOUNDTOUCH_FLOAT_SAMPLES
|
||||
|
||||
// Overlaps samples in 'midBuffer' with the samples in 'pInput'
|
||||
void TDStretch::overlapStereo(float *pOutput, const float *pInput) const
|
||||
{
|
||||
int i;
|
||||
float fScale;
|
||||
float f1;
|
||||
float f2;
|
||||
|
||||
fScale = 1.0f / (float)overlapLength;
|
||||
|
||||
f1 = 0;
|
||||
f2 = 1.0f;
|
||||
|
||||
for (i = 0; i < 2 * (int)overlapLength ; i += 2)
|
||||
{
|
||||
pOutput[i + 0] = pInput[i + 0] * f1 + pMidBuffer[i + 0] * f2;
|
||||
pOutput[i + 1] = pInput[i + 1] * f1 + pMidBuffer[i + 1] * f2;
|
||||
|
||||
f1 += fScale;
|
||||
f2 -= fScale;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Calculates overlapInMsec period length in samples.
|
||||
void TDStretch::calculateOverlapLength(int overlapInMsec)
|
||||
{
|
||||
int newOvl;
|
||||
|
||||
assert(overlapInMsec >= 0);
|
||||
newOvl = (sampleRate * overlapInMsec) / 1000;
|
||||
if (newOvl < 16) newOvl = 16;
|
||||
|
||||
// must be divisible by 8
|
||||
newOvl -= newOvl % 8;
|
||||
|
||||
acceptNewOverlapLength(newOvl);
|
||||
}
|
||||
|
||||
|
||||
double TDStretch::calcCrossCorr(const float *mixingPos, const float *compare) const
|
||||
{
|
||||
double corr;
|
||||
double norm;
|
||||
int i;
|
||||
|
||||
corr = norm = 0;
|
||||
// Same routine for stereo and mono. For Stereo, unroll by factor of 2.
|
||||
// For mono it's same routine yet unrollsd by factor of 4.
|
||||
for (i = 0; i < channels * overlapLength; i += 4)
|
||||
{
|
||||
corr += mixingPos[i] * compare[i] +
|
||||
mixingPos[i + 1] * compare[i + 1];
|
||||
|
||||
norm += mixingPos[i] * mixingPos[i] +
|
||||
mixingPos[i + 1] * mixingPos[i + 1];
|
||||
|
||||
// unroll the loop for better CPU efficiency:
|
||||
corr += mixingPos[i + 2] * compare[i + 2] +
|
||||
mixingPos[i + 3] * compare[i + 3];
|
||||
|
||||
norm += mixingPos[i + 2] * mixingPos[i + 2] +
|
||||
mixingPos[i + 3] * mixingPos[i + 3];
|
||||
}
|
||||
|
||||
if (norm < 1e-9) norm = 1.0; // to avoid div by zero
|
||||
return corr / sqrt(norm);
|
||||
}
|
||||
|
||||
#endif // SOUNDTOUCH_FLOAT_SAMPLES
|
||||
745
3rdparty/SoundTouch/WavFile.cpp
vendored
745
3rdparty/SoundTouch/WavFile.cpp
vendored
@@ -1,745 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Classes for easy reading & writing of WAV sound files.
|
||||
///
|
||||
/// For big-endian CPU, define _BIG_ENDIAN_ during compile-time to correctly
|
||||
/// parse the WAV files with such processors.
|
||||
///
|
||||
/// Admittingly, more complete WAV reader routines may exist in public domain,
|
||||
/// but the reason for 'yet another' one is that those generic WAV reader
|
||||
/// libraries are exhaustingly large and cumbersome! Wanted to have something
|
||||
/// simpler here, i.e. something that's not already larger than rest of the
|
||||
/// SoundTouch/SoundStretch program...
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2009-02-21 18:00:14 +0200 (Sat, 21 Feb 2009) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: WavFile.cpp 63 2009-02-21 16:00:14Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <assert.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "WavFile.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
static const char riffStr[] = "RIFF";
|
||||
static const char waveStr[] = "WAVE";
|
||||
static const char fmtStr[] = "fmt ";
|
||||
static const char dataStr[] = "data";
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Helper functions for swapping byte order to correctly read/write WAV files
|
||||
// with big-endian CPU's: Define compile-time definition _BIG_ENDIAN_ to
|
||||
// turn-on the conversion if it appears necessary.
|
||||
//
|
||||
// For example, Intel x86 is little-endian and doesn't require conversion,
|
||||
// while PowerPC of Mac's and many other RISC cpu's are big-endian.
|
||||
|
||||
#ifdef BYTE_ORDER
|
||||
// In gcc compiler detect the byte order automatically
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
// big-endian platform.
|
||||
#define _BIG_ENDIAN_
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _BIG_ENDIAN_
|
||||
// big-endian CPU, swap bytes in 16 & 32 bit words
|
||||
|
||||
// helper-function to swap byte-order of 32bit integer
|
||||
static inline void _swap32(unsigned int &dwData)
|
||||
{
|
||||
dwData = ((dwData >> 24) & 0x000000FF) |
|
||||
((dwData >> 8) & 0x0000FF00) |
|
||||
((dwData << 8) & 0x00FF0000) |
|
||||
((dwData << 24) & 0xFF000000);
|
||||
}
|
||||
|
||||
// helper-function to swap byte-order of 16bit integer
|
||||
static inline void _swap16(unsigned short &wData)
|
||||
{
|
||||
wData = ((wData >> 8) & 0x00FF) |
|
||||
((wData << 8) & 0xFF00);
|
||||
}
|
||||
|
||||
// helper-function to swap byte-order of buffer of 16bit integers
|
||||
static inline void _swap16Buffer(unsigned short *pData, unsigned int dwNumWords)
|
||||
{
|
||||
unsigned long i;
|
||||
|
||||
for (i = 0; i < dwNumWords; i ++)
|
||||
{
|
||||
_swap16(pData[i]);
|
||||
}
|
||||
}
|
||||
|
||||
#else // BIG_ENDIAN
|
||||
// little-endian CPU, WAV file is ok as such
|
||||
|
||||
// dummy helper-function
|
||||
static inline void _swap32(unsigned int &dwData)
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// dummy helper-function
|
||||
static inline void _swap16(unsigned short &wData)
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
// dummy helper-function
|
||||
static inline void _swap16Buffer(unsigned short *pData, unsigned int dwNumBytes)
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
#endif // BIG_ENDIAN
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Class WavInFile
|
||||
//
|
||||
|
||||
WavInFile::WavInFile(const char *fileName)
|
||||
{
|
||||
// Try to open the file for reading
|
||||
fptr = fopen(fileName, "rb");
|
||||
if (fptr == NULL)
|
||||
{
|
||||
// didn't succeed
|
||||
string msg = "Error : Unable to open file \"";
|
||||
msg += fileName;
|
||||
msg += "\" for reading.";
|
||||
throw runtime_error(msg);
|
||||
}
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
WavInFile::WavInFile(FILE *file)
|
||||
{
|
||||
// Try to open the file for reading
|
||||
fptr = file;
|
||||
if (!file)
|
||||
{
|
||||
// didn't succeed
|
||||
string msg = "Error : Unable to access input stream for reading";
|
||||
throw runtime_error(msg);
|
||||
}
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
/// Init the WAV file stream
|
||||
void WavInFile::init()
|
||||
{
|
||||
int hdrsOk;
|
||||
|
||||
// assume file stream is already open
|
||||
assert(fptr);
|
||||
|
||||
// Read the file headers
|
||||
hdrsOk = readWavHeaders();
|
||||
if (hdrsOk != 0)
|
||||
{
|
||||
// Something didn't match in the wav file headers
|
||||
string msg = "Input file is corrupt or not a WAV file";
|
||||
throw runtime_error(msg);
|
||||
}
|
||||
|
||||
if (header.format.fixed != 1)
|
||||
{
|
||||
string msg = "Input file uses unsupported encoding.";
|
||||
throw runtime_error(msg);
|
||||
}
|
||||
|
||||
dataRead = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
WavInFile::~WavInFile()
|
||||
{
|
||||
if (fptr) fclose(fptr);
|
||||
fptr = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void WavInFile::rewind()
|
||||
{
|
||||
int hdrsOk;
|
||||
|
||||
fseek(fptr, 0, SEEK_SET);
|
||||
hdrsOk = readWavHeaders();
|
||||
assert(hdrsOk == 0);
|
||||
dataRead = 0;
|
||||
}
|
||||
|
||||
|
||||
int WavInFile::checkCharTags() const
|
||||
{
|
||||
// header.format.fmt should equal to 'fmt '
|
||||
if (memcmp(fmtStr, header.format.fmt, 4) != 0) return -1;
|
||||
// header.data.data_field should equal to 'data'
|
||||
if (memcmp(dataStr, header.data.data_field, 4) != 0) return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int WavInFile::read(char *buffer, int maxElems)
|
||||
{
|
||||
int numBytes;
|
||||
uint afterDataRead;
|
||||
|
||||
// ensure it's 8 bit format
|
||||
if (header.format.bits_per_sample != 8)
|
||||
{
|
||||
throw runtime_error("Error: WavInFile::read(char*, int) works only with 8bit samples.");
|
||||
}
|
||||
assert(sizeof(char) == 1);
|
||||
|
||||
numBytes = maxElems;
|
||||
afterDataRead = dataRead + numBytes;
|
||||
if (afterDataRead > header.data.data_len)
|
||||
{
|
||||
// Don't read more samples than are marked available in header
|
||||
numBytes = (int)header.data.data_len - (int)dataRead;
|
||||
assert(numBytes >= 0);
|
||||
}
|
||||
|
||||
assert(buffer);
|
||||
numBytes = fread(buffer, 1, numBytes, fptr);
|
||||
dataRead += numBytes;
|
||||
|
||||
return numBytes;
|
||||
}
|
||||
|
||||
|
||||
int WavInFile::read(short *buffer, int maxElems)
|
||||
{
|
||||
unsigned int afterDataRead;
|
||||
int numBytes;
|
||||
int numElems;
|
||||
|
||||
assert(buffer);
|
||||
if (header.format.bits_per_sample == 8)
|
||||
{
|
||||
// 8 bit format
|
||||
char *temp = new char[maxElems];
|
||||
int i;
|
||||
|
||||
numElems = read(temp, maxElems);
|
||||
// convert from 8 to 16 bit
|
||||
for (i = 0; i < numElems; i ++)
|
||||
{
|
||||
buffer[i] = temp[i] << 8;
|
||||
}
|
||||
delete[] temp;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 16 bit format
|
||||
assert(header.format.bits_per_sample == 16);
|
||||
assert(sizeof(short) == 2);
|
||||
|
||||
numBytes = maxElems * 2;
|
||||
afterDataRead = dataRead + numBytes;
|
||||
if (afterDataRead > header.data.data_len)
|
||||
{
|
||||
// Don't read more samples than are marked available in header
|
||||
numBytes = (int)header.data.data_len - (int)dataRead;
|
||||
assert(numBytes >= 0);
|
||||
}
|
||||
|
||||
numBytes = fread(buffer, 1, numBytes, fptr);
|
||||
dataRead += numBytes;
|
||||
numElems = numBytes / 2;
|
||||
|
||||
// 16bit samples, swap byte order if necessary
|
||||
_swap16Buffer((unsigned short *)buffer, numElems);
|
||||
}
|
||||
|
||||
return numElems;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int WavInFile::read(float *buffer, int maxElems)
|
||||
{
|
||||
short *temp = new short[maxElems];
|
||||
int num;
|
||||
int i;
|
||||
double fscale;
|
||||
|
||||
num = read(temp, maxElems);
|
||||
|
||||
fscale = 1.0 / 32768.0;
|
||||
// convert to floats, scale to range [-1..+1[
|
||||
for (i = 0; i < num; i ++)
|
||||
{
|
||||
buffer[i] = (float)(fscale * (double)temp[i]);
|
||||
}
|
||||
|
||||
delete[] temp;
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
|
||||
int WavInFile::eof() const
|
||||
{
|
||||
// return true if all data has been read or file eof has reached
|
||||
return (dataRead == header.data.data_len || feof(fptr));
|
||||
}
|
||||
|
||||
|
||||
|
||||
// test if character code is between a white space ' ' and little 'z'
|
||||
static int isAlpha(char c)
|
||||
{
|
||||
return (c >= ' ' && c <= 'z') ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
// test if all characters are between a white space ' ' and little 'z'
|
||||
static int isAlphaStr(const char *str)
|
||||
{
|
||||
char c;
|
||||
|
||||
c = str[0];
|
||||
while (c)
|
||||
{
|
||||
if (isAlpha(c) == 0) return 0;
|
||||
str ++;
|
||||
c = str[0];
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int WavInFile::readRIFFBlock()
|
||||
{
|
||||
if (fread(&(header.riff), sizeof(WavRiff), 1, fptr) != 1) return -1;
|
||||
|
||||
// swap 32bit data byte order if necessary
|
||||
_swap32((unsigned int &)header.riff.package_len);
|
||||
|
||||
// header.riff.riff_char should equal to 'RIFF');
|
||||
if (memcmp(riffStr, header.riff.riff_char, 4) != 0) return -1;
|
||||
// header.riff.wave should equal to 'WAVE'
|
||||
if (memcmp(waveStr, header.riff.wave, 4) != 0) return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int WavInFile::readHeaderBlock()
|
||||
{
|
||||
char label[5];
|
||||
string sLabel;
|
||||
|
||||
// lead label string
|
||||
if (fread(label, 1, 4, fptr) !=4) return -1;
|
||||
label[4] = 0;
|
||||
|
||||
if (isAlphaStr(label) == 0) return -1; // not a valid label
|
||||
|
||||
// Decode blocks according to their label
|
||||
if (strcmp(label, fmtStr) == 0)
|
||||
{
|
||||
int nLen, nDump;
|
||||
|
||||
// 'fmt ' block
|
||||
memcpy(header.format.fmt, fmtStr, 4);
|
||||
|
||||
// read length of the format field
|
||||
if (fread(&nLen, sizeof(int), 1, fptr) != 1) return -1;
|
||||
// swap byte order if necessary
|
||||
_swap32((unsigned int &)nLen); // int format_len;
|
||||
header.format.format_len = nLen;
|
||||
|
||||
// calculate how much length differs from expected
|
||||
nDump = nLen - ((int)sizeof(header.format) - 8);
|
||||
|
||||
// if format_len is larger than expected, read only as much data as we've space for
|
||||
if (nDump > 0)
|
||||
{
|
||||
nLen = sizeof(header.format) - 8;
|
||||
}
|
||||
|
||||
// read data
|
||||
if (fread(&(header.format.fixed), nLen, 1, fptr) != 1) return -1;
|
||||
|
||||
// swap byte order if necessary
|
||||
_swap16((unsigned short &)header.format.fixed); // short int fixed;
|
||||
_swap16((unsigned short &)header.format.channel_number); // short int channel_number;
|
||||
_swap32((unsigned int &)header.format.sample_rate); // int sample_rate;
|
||||
_swap32((unsigned int &)header.format.byte_rate); // int byte_rate;
|
||||
_swap16((unsigned short &)header.format.byte_per_sample); // short int byte_per_sample;
|
||||
_swap16((unsigned short &)header.format.bits_per_sample); // short int bits_per_sample;
|
||||
|
||||
// if format_len is larger than expected, skip the extra data
|
||||
if (nDump > 0)
|
||||
{
|
||||
fseek(fptr, nDump, SEEK_CUR);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
else if (strcmp(label, dataStr) == 0)
|
||||
{
|
||||
// 'data' block
|
||||
memcpy(header.data.data_field, dataStr, 4);
|
||||
if (fread(&(header.data.data_len), sizeof(uint), 1, fptr) != 1) return -1;
|
||||
|
||||
// swap byte order if necessary
|
||||
_swap32((unsigned int &)header.data.data_len);
|
||||
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint len, i;
|
||||
uint temp;
|
||||
// unknown block
|
||||
|
||||
// read length
|
||||
if (fread(&len, sizeof(len), 1, fptr) != 1) return -1;
|
||||
// scan through the block
|
||||
for (i = 0; i < len; i ++)
|
||||
{
|
||||
if (fread(&temp, 1, 1, fptr) != 1) return -1;
|
||||
if (feof(fptr)) return -1; // unexpected eof
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int WavInFile::readWavHeaders()
|
||||
{
|
||||
int res;
|
||||
|
||||
memset(&header, 0, sizeof(header));
|
||||
|
||||
res = readRIFFBlock();
|
||||
if (res) return 1;
|
||||
// read header blocks until data block is found
|
||||
do
|
||||
{
|
||||
// read header blocks
|
||||
res = readHeaderBlock();
|
||||
if (res < 0) return 1; // error in file structure
|
||||
} while (res == 0);
|
||||
// check that all required tags are legal
|
||||
return checkCharTags();
|
||||
}
|
||||
|
||||
|
||||
uint WavInFile::getNumChannels() const
|
||||
{
|
||||
return header.format.channel_number;
|
||||
}
|
||||
|
||||
|
||||
uint WavInFile::getNumBits() const
|
||||
{
|
||||
return header.format.bits_per_sample;
|
||||
}
|
||||
|
||||
|
||||
uint WavInFile::getBytesPerSample() const
|
||||
{
|
||||
return getNumChannels() * getNumBits() / 8;
|
||||
}
|
||||
|
||||
|
||||
uint WavInFile::getSampleRate() const
|
||||
{
|
||||
return header.format.sample_rate;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint WavInFile::getDataSizeInBytes() const
|
||||
{
|
||||
return header.data.data_len;
|
||||
}
|
||||
|
||||
|
||||
uint WavInFile::getNumSamples() const
|
||||
{
|
||||
if (header.format.byte_per_sample == 0) return 0;
|
||||
return header.data.data_len / (unsigned short)header.format.byte_per_sample;
|
||||
}
|
||||
|
||||
|
||||
uint WavInFile::getLengthMS() const
|
||||
{
|
||||
uint numSamples;
|
||||
uint sampleRate;
|
||||
|
||||
numSamples = getNumSamples();
|
||||
sampleRate = getSampleRate();
|
||||
|
||||
assert(numSamples < UINT_MAX / 1000);
|
||||
return (1000 * numSamples / sampleRate);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Class WavOutFile
|
||||
//
|
||||
|
||||
WavOutFile::WavOutFile(const char *fileName, int sampleRate, int bits, int channels)
|
||||
{
|
||||
bytesWritten = 0;
|
||||
fptr = fopen(fileName, "wb");
|
||||
if (fptr == NULL)
|
||||
{
|
||||
string msg = "Error : Unable to open file \"";
|
||||
msg += fileName;
|
||||
msg += "\" for writing.";
|
||||
//pmsg = msg.c_str;
|
||||
throw runtime_error(msg);
|
||||
}
|
||||
|
||||
fillInHeader(sampleRate, bits, channels);
|
||||
writeHeader();
|
||||
}
|
||||
|
||||
|
||||
WavOutFile::WavOutFile(FILE *file, int sampleRate, int bits, int channels)
|
||||
{
|
||||
bytesWritten = 0;
|
||||
fptr = file;
|
||||
if (fptr == NULL)
|
||||
{
|
||||
string msg = "Error : Unable to access output file stream.";
|
||||
throw runtime_error(msg);
|
||||
}
|
||||
|
||||
fillInHeader(sampleRate, bits, channels);
|
||||
writeHeader();
|
||||
}
|
||||
|
||||
|
||||
|
||||
WavOutFile::~WavOutFile()
|
||||
{
|
||||
finishHeader();
|
||||
if (fptr) fclose(fptr);
|
||||
fptr = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void WavOutFile::fillInHeader(uint sampleRate, uint bits, uint channels)
|
||||
{
|
||||
// fill in the 'riff' part..
|
||||
|
||||
// copy string 'RIFF' to riff_char
|
||||
memcpy(&(header.riff.riff_char), riffStr, 4);
|
||||
// package_len unknown so far
|
||||
header.riff.package_len = 0;
|
||||
// copy string 'WAVE' to wave
|
||||
memcpy(&(header.riff.wave), waveStr, 4);
|
||||
|
||||
|
||||
// fill in the 'format' part..
|
||||
|
||||
// copy string 'fmt ' to fmt
|
||||
memcpy(&(header.format.fmt), fmtStr, 4);
|
||||
|
||||
header.format.format_len = 0x10;
|
||||
header.format.fixed = 1;
|
||||
header.format.channel_number = (short)channels;
|
||||
header.format.sample_rate = (int)sampleRate;
|
||||
header.format.bits_per_sample = (short)bits;
|
||||
header.format.byte_per_sample = (short)(bits * channels / 8);
|
||||
header.format.byte_rate = header.format.byte_per_sample * (int)sampleRate;
|
||||
header.format.sample_rate = (int)sampleRate;
|
||||
|
||||
// fill in the 'data' part..
|
||||
|
||||
// copy string 'data' to data_field
|
||||
memcpy(&(header.data.data_field), dataStr, 4);
|
||||
// data_len unknown so far
|
||||
header.data.data_len = 0;
|
||||
}
|
||||
|
||||
|
||||
void WavOutFile::finishHeader()
|
||||
{
|
||||
// supplement the file length into the header structure
|
||||
header.riff.package_len = bytesWritten + 36;
|
||||
header.data.data_len = bytesWritten;
|
||||
|
||||
writeHeader();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void WavOutFile::writeHeader()
|
||||
{
|
||||
WavHeader hdrTemp;
|
||||
int res;
|
||||
|
||||
// swap byte order if necessary
|
||||
hdrTemp = header;
|
||||
_swap32((unsigned int &)hdrTemp.riff.package_len);
|
||||
_swap32((unsigned int &)hdrTemp.format.format_len);
|
||||
_swap16((unsigned short &)hdrTemp.format.fixed);
|
||||
_swap16((unsigned short &)hdrTemp.format.channel_number);
|
||||
_swap32((unsigned int &)hdrTemp.format.sample_rate);
|
||||
_swap32((unsigned int &)hdrTemp.format.byte_rate);
|
||||
_swap16((unsigned short &)hdrTemp.format.byte_per_sample);
|
||||
_swap16((unsigned short &)hdrTemp.format.bits_per_sample);
|
||||
_swap32((unsigned int &)hdrTemp.data.data_len);
|
||||
|
||||
// write the supplemented header in the beginning of the file
|
||||
fseek(fptr, 0, SEEK_SET);
|
||||
res = fwrite(&hdrTemp, sizeof(hdrTemp), 1, fptr);
|
||||
if (res != 1)
|
||||
{
|
||||
throw runtime_error("Error while writing to a wav file.");
|
||||
}
|
||||
|
||||
// jump back to the end of the file
|
||||
fseek(fptr, 0, SEEK_END);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void WavOutFile::write(const char *buffer, int numElems)
|
||||
{
|
||||
int res;
|
||||
|
||||
if (header.format.bits_per_sample != 8)
|
||||
{
|
||||
throw runtime_error("Error: WavOutFile::write(const char*, int) accepts only 8bit samples.");
|
||||
}
|
||||
assert(sizeof(char) == 1);
|
||||
|
||||
res = fwrite(buffer, 1, numElems, fptr);
|
||||
if (res != numElems)
|
||||
{
|
||||
throw runtime_error("Error while writing to a wav file.");
|
||||
}
|
||||
|
||||
bytesWritten += numElems;
|
||||
}
|
||||
|
||||
|
||||
void WavOutFile::write(const short *buffer, int numElems)
|
||||
{
|
||||
int res;
|
||||
|
||||
// 16 bit samples
|
||||
if (numElems < 1) return; // nothing to do
|
||||
|
||||
if (header.format.bits_per_sample == 8)
|
||||
{
|
||||
int i;
|
||||
char *temp = new char[numElems];
|
||||
// convert from 16bit format to 8bit format
|
||||
for (i = 0; i < numElems; i ++)
|
||||
{
|
||||
temp[i] = buffer[i] >> 8;
|
||||
}
|
||||
// write in 8bit format
|
||||
write(temp, numElems);
|
||||
delete[] temp;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 16bit format
|
||||
unsigned short *pTemp = new unsigned short[numElems];
|
||||
|
||||
assert(header.format.bits_per_sample == 16);
|
||||
|
||||
// allocate temp buffer to swap byte order if necessary
|
||||
memcpy(pTemp, buffer, numElems * 2);
|
||||
_swap16Buffer(pTemp, numElems);
|
||||
|
||||
res = fwrite(pTemp, 2, numElems, fptr);
|
||||
|
||||
delete[] pTemp;
|
||||
|
||||
if (res != numElems)
|
||||
{
|
||||
throw runtime_error("Error while writing to a wav file.");
|
||||
}
|
||||
bytesWritten += 2 * numElems;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void WavOutFile::write(const float *buffer, int numElems)
|
||||
{
|
||||
int i;
|
||||
short *temp = new short[numElems];
|
||||
int iTemp;
|
||||
|
||||
// convert to 16 bit integer
|
||||
for (i = 0; i < numElems; i ++)
|
||||
{
|
||||
// convert to integer
|
||||
iTemp = (int)(32768.0f * buffer[i]);
|
||||
|
||||
// saturate
|
||||
if (iTemp < -32768) iTemp = -32768;
|
||||
if (iTemp > 32767) iTemp = 32767;
|
||||
temp[i] = (short)iTemp;
|
||||
}
|
||||
|
||||
write(temp, numElems);
|
||||
|
||||
delete[] temp;
|
||||
}
|
||||
250
3rdparty/SoundTouch/WavFile.h
vendored
250
3rdparty/SoundTouch/WavFile.h
vendored
@@ -1,250 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Classes for easy reading & writing of WAV sound files.
|
||||
///
|
||||
/// For big-endian CPU, define BIG_ENDIAN during compile-time to correctly
|
||||
/// parse the WAV files with such processors.
|
||||
///
|
||||
/// Admittingly, more complete WAV reader routines may exist in public domain, but
|
||||
/// the reason for 'yet another' one is that those generic WAV reader libraries are
|
||||
/// exhaustingly large and cumbersome! Wanted to have something simpler here, i.e.
|
||||
/// something that's not already larger than rest of the SoundTouch/SoundStretch program...
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2009-02-21 18:00:14 +0200 (Sat, 21 Feb 2009) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: WavFile.h 63 2009-02-21 16:00:14Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef WAVFILE_H
|
||||
#define WAVFILE_H
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifndef uint
|
||||
typedef unsigned int uint;
|
||||
#endif
|
||||
|
||||
|
||||
/// WAV audio file 'riff' section header
|
||||
typedef struct
|
||||
{
|
||||
char riff_char[4];
|
||||
int package_len;
|
||||
char wave[4];
|
||||
} WavRiff;
|
||||
|
||||
/// WAV audio file 'format' section header
|
||||
typedef struct
|
||||
{
|
||||
char fmt[4];
|
||||
int format_len;
|
||||
short fixed;
|
||||
short channel_number;
|
||||
int sample_rate;
|
||||
int byte_rate;
|
||||
short byte_per_sample;
|
||||
short bits_per_sample;
|
||||
} WavFormat;
|
||||
|
||||
/// WAV audio file 'data' section header
|
||||
typedef struct
|
||||
{
|
||||
char data_field[4];
|
||||
uint data_len;
|
||||
} WavData;
|
||||
|
||||
|
||||
/// WAV audio file header
|
||||
typedef struct
|
||||
{
|
||||
WavRiff riff;
|
||||
WavFormat format;
|
||||
WavData data;
|
||||
} WavHeader;
|
||||
|
||||
|
||||
/// Class for reading WAV audio files.
|
||||
class WavInFile
|
||||
{
|
||||
private:
|
||||
/// File pointer.
|
||||
FILE *fptr;
|
||||
|
||||
/// Counter of how many bytes of sample data have been read from the file.
|
||||
uint dataRead;
|
||||
|
||||
/// WAV header information
|
||||
WavHeader header;
|
||||
|
||||
/// Init the WAV file stream
|
||||
void init();
|
||||
|
||||
/// Read WAV file headers.
|
||||
/// \return zero if all ok, nonzero if file format is invalid.
|
||||
int readWavHeaders();
|
||||
|
||||
/// Checks WAV file header tags.
|
||||
/// \return zero if all ok, nonzero if file format is invalid.
|
||||
int checkCharTags() const;
|
||||
|
||||
/// Reads a single WAV file header block.
|
||||
/// \return zero if all ok, nonzero if file format is invalid.
|
||||
int readHeaderBlock();
|
||||
|
||||
/// Reads WAV file 'riff' block
|
||||
int readRIFFBlock();
|
||||
|
||||
public:
|
||||
/// Constructor: Opens the given WAV file. If the file can't be opened,
|
||||
/// throws 'runtime_error' exception.
|
||||
WavInFile(const char *filename);
|
||||
|
||||
WavInFile(FILE *file);
|
||||
|
||||
/// Destructor: Closes the file.
|
||||
~WavInFile();
|
||||
|
||||
/// Rewind to beginning of the file
|
||||
void rewind();
|
||||
|
||||
/// Get sample rate.
|
||||
uint getSampleRate() const;
|
||||
|
||||
/// Get number of bits per sample, i.e. 8 or 16.
|
||||
uint getNumBits() const;
|
||||
|
||||
/// Get sample data size in bytes. Ahem, this should return same information as
|
||||
/// 'getBytesPerSample'...
|
||||
uint getDataSizeInBytes() const;
|
||||
|
||||
/// Get total number of samples in file.
|
||||
uint getNumSamples() const;
|
||||
|
||||
/// Get number of bytes per audio sample (e.g. 16bit stereo = 4 bytes/sample)
|
||||
uint getBytesPerSample() const;
|
||||
|
||||
/// Get number of audio channels in the file (1=mono, 2=stereo)
|
||||
uint getNumChannels() const;
|
||||
|
||||
/// Get the audio file length in milliseconds
|
||||
uint getLengthMS() const;
|
||||
|
||||
/// Reads audio samples from the WAV file. This routine works only for 8 bit samples.
|
||||
/// Reads given number of elements from the file or if end-of-file reached, as many
|
||||
/// elements as are left in the file.
|
||||
///
|
||||
/// \return Number of 8-bit integers read from the file.
|
||||
int read(char *buffer, int maxElems);
|
||||
|
||||
/// Reads audio samples from the WAV file to 16 bit integer format. Reads given number
|
||||
/// of elements from the file or if end-of-file reached, as many elements as are
|
||||
/// left in the file.
|
||||
///
|
||||
/// \return Number of 16-bit integers read from the file.
|
||||
int read(short *buffer, ///< Pointer to buffer where to read data.
|
||||
int maxElems ///< Size of 'buffer' array (number of array elements).
|
||||
);
|
||||
|
||||
/// Reads audio samples from the WAV file to floating point format, converting
|
||||
/// sample values to range [-1,1[. Reads given number of elements from the file
|
||||
/// or if end-of-file reached, as many elements as are left in the file.
|
||||
///
|
||||
/// \return Number of elements read from the file.
|
||||
int read(float *buffer, ///< Pointer to buffer where to read data.
|
||||
int maxElems ///< Size of 'buffer' array (number of array elements).
|
||||
);
|
||||
|
||||
/// Check end-of-file.
|
||||
///
|
||||
/// \return Nonzero if end-of-file reached.
|
||||
int eof() const;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/// Class for writing WAV audio files.
|
||||
class WavOutFile
|
||||
{
|
||||
private:
|
||||
/// Pointer to the WAV file
|
||||
FILE *fptr;
|
||||
|
||||
/// WAV file header data.
|
||||
WavHeader header;
|
||||
|
||||
/// Counter of how many bytes have been written to the file so far.
|
||||
int bytesWritten;
|
||||
|
||||
/// Fills in WAV file header information.
|
||||
void fillInHeader(const uint sampleRate, const uint bits, const uint channels);
|
||||
|
||||
/// Finishes the WAV file header by supplementing information of amount of
|
||||
/// data written to file etc
|
||||
void finishHeader();
|
||||
|
||||
/// Writes the WAV file header.
|
||||
void writeHeader();
|
||||
|
||||
public:
|
||||
/// Constructor: Creates a new WAV file. Throws a 'runtime_error' exception
|
||||
/// if file creation fails.
|
||||
WavOutFile(const char *fileName, ///< Filename
|
||||
int sampleRate, ///< Sample rate (e.g. 44100 etc)
|
||||
int bits, ///< Bits per sample (8 or 16 bits)
|
||||
int channels ///< Number of channels (1=mono, 2=stereo)
|
||||
);
|
||||
|
||||
WavOutFile(FILE *file, int sampleRate, int bits, int channels);
|
||||
|
||||
/// Destructor: Finalizes & closes the WAV file.
|
||||
~WavOutFile();
|
||||
|
||||
/// Write data to WAV file. This function works only with 8bit samples.
|
||||
/// Throws a 'runtime_error' exception if writing to file fails.
|
||||
void write(const char *buffer, ///< Pointer to sample data buffer.
|
||||
int numElems ///< How many array items are to be written to file.
|
||||
);
|
||||
|
||||
/// Write data to WAV file. Throws a 'runtime_error' exception if writing to
|
||||
/// file fails.
|
||||
void write(const short *buffer, ///< Pointer to sample data buffer.
|
||||
int numElems ///< How many array items are to be written to file.
|
||||
);
|
||||
|
||||
/// Write data to WAV file in floating point format, saturating sample values to range
|
||||
/// [-1..+1[. Throws a 'runtime_error' exception if writing to file fails.
|
||||
void write(const float *buffer, ///< Pointer to sample data buffer.
|
||||
int numElems ///< How many array items are to be written to file.
|
||||
);
|
||||
};
|
||||
|
||||
#endif
|
||||
28
3rdparty/SoundTouch/build.sh
vendored
28
3rdparty/SoundTouch/build.sh
vendored
@@ -1,28 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
curdir=`pwd`
|
||||
|
||||
echo -----------------
|
||||
echo Building SoundTouch
|
||||
echo -----------------
|
||||
|
||||
if [ $# -gt 0 ] && [ $1 = "all" ]
|
||||
then
|
||||
|
||||
aclocal
|
||||
automake -a
|
||||
autoconf
|
||||
./configure
|
||||
make clean
|
||||
make install
|
||||
|
||||
else
|
||||
make $@
|
||||
fi
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#cp libZeroSPU2*.so* ${PCSX2PLUGINS}
|
||||
37
3rdparty/SoundTouch/configure.ac
vendored
37
3rdparty/SoundTouch/configure.ac
vendored
@@ -1,37 +0,0 @@
|
||||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
#AC_PREREQ([2.63])
|
||||
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
|
||||
AM_INIT_AUTOMAKE
|
||||
AC_CONFIG_SRCDIR([BPMDetect.h])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CC
|
||||
AC_PROG_RANLIB
|
||||
|
||||
CFLAGS=
|
||||
CPPFLAGS=
|
||||
CXXFLAGS=
|
||||
CCASFLAGS=
|
||||
|
||||
CFLAGS+=" -m32 "
|
||||
CPPFLAGS+=" -m32 "
|
||||
CXXFLAGS+=" -m32 "
|
||||
CCASFLAGS+=" -m32 "
|
||||
|
||||
# Checks for header files.
|
||||
AC_CHECK_HEADERS([limits.h memory.h stdlib.h string.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_INLINE
|
||||
AC_C_RESTRICT
|
||||
AC_TYPE_SIZE_T
|
||||
AC_HEADER_STDBOOL
|
||||
|
||||
# Checks for library functions.
|
||||
AC_CHECK_FUNCS([memmove memset])
|
||||
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT
|
||||
134
3rdparty/SoundTouch/cpu_detect_x86_gcc.cpp
vendored
134
3rdparty/SoundTouch/cpu_detect_x86_gcc.cpp
vendored
@@ -1,134 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Generic version of the x86 CPU extension detection routine.
|
||||
///
|
||||
/// This file is for GNU & other non-Windows compilers, see 'cpu_detect_x86_win.cpp'
|
||||
/// for the Microsoft compiler version.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2011-09-02 15:56:11 -0300 (sex, 02 set 2011) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: cpu_detect_x86_gcc.cpp 131 2011-09-02 18:56:11Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "cpu_detect.h"
|
||||
#include "STTypes.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// processor instructions extension detection routines
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Flag variable indicating whick ISA extensions are disabled (for debugging)
|
||||
static uint _dwDisabledISA = 0x00; // 0xffffffff; //<- use this to disable all extensions
|
||||
|
||||
// Disables given set of instruction extensions. See SUPPORT_... defines.
|
||||
void disableExtensions(uint dwDisableMask)
|
||||
{
|
||||
_dwDisabledISA = dwDisableMask;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Checks which instruction set extensions are supported by the CPU.
|
||||
uint detectCPUextensions(void)
|
||||
{
|
||||
#if (!(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS) || !(__GNUC__))
|
||||
|
||||
return 0; // always disable extensions on non-x86 platforms.
|
||||
|
||||
#else
|
||||
uint res = 0;
|
||||
|
||||
if (_dwDisabledISA == 0xffffffff) return 0;
|
||||
|
||||
asm volatile(
|
||||
#ifndef __x86_64__
|
||||
// Check if 'cpuid' instructions is available by toggling eflags bit 21.
|
||||
// Skip this for x86-64 as they always have cpuid while stack manipulation
|
||||
// differs from 16/32bit ISA.
|
||||
"\n\txor %%esi, %%esi" // clear %%esi = result register
|
||||
|
||||
"\n\tpushf" // save eflags to stack
|
||||
"\n\tmovl (%%esp), %%eax" // load eax from stack (with eflags)
|
||||
"\n\tmovl %%eax, %%ecx" // save the original eflags values to ecx
|
||||
"\n\txor $0x00200000, %%eax" // toggle bit 21
|
||||
"\n\tmovl %%eax, (%%esp)" // store toggled eflags to stack
|
||||
"\n\tpopf" // load eflags from stack
|
||||
"\n\tpushf" // save updated eflags to stack
|
||||
"\n\tmovl (%%esp), %%eax" // load eax from stack
|
||||
"\n\tpopf" // pop stack to restore esp
|
||||
"\n\txor %%edx, %%edx" // clear edx for defaulting no mmx
|
||||
"\n\tcmp %%ecx, %%eax" // compare to original eflags values
|
||||
"\n\tjz end" // jumps to 'end' if cpuid not present
|
||||
#endif // __x86_64__
|
||||
|
||||
// cpuid instruction available, test for presence of mmx instructions
|
||||
|
||||
"\n\tmovl $1, %%eax"
|
||||
"\n\tcpuid"
|
||||
"\n\ttest $0x00800000, %%edx"
|
||||
"\n\tjz end" // branch if MMX not available
|
||||
|
||||
"\n\tor $0x01, %%esi" // otherwise add MMX support bit
|
||||
|
||||
"\n\ttest $0x02000000, %%edx"
|
||||
"\n\tjz test3DNow" // branch if SSE not available
|
||||
|
||||
"\n\tor $0x08, %%esi" // otherwise add SSE support bit
|
||||
|
||||
"\n\ttest3DNow:"
|
||||
// test for precense of AMD extensions
|
||||
"\n\tmov $0x80000000, %%eax"
|
||||
"\n\tcpuid"
|
||||
"\n\tcmp $0x80000000, %%eax"
|
||||
"\n\tjbe end" // branch if no AMD extensions detected
|
||||
|
||||
// test for precense of 3DNow! extension
|
||||
"\n\tmov $0x80000001, %%eax"
|
||||
"\n\tcpuid"
|
||||
"\n\ttest $0x80000000, %%edx"
|
||||
"\n\tjz end" // branch if 3DNow! not detected
|
||||
|
||||
"\n\tor $0x02, %%esi" // otherwise add 3DNow support bit
|
||||
|
||||
"\n\tend:"
|
||||
|
||||
"\n\tmov %%esi, %0"
|
||||
|
||||
: "=r" (res)
|
||||
: /* no inputs */
|
||||
: "%edx", "%eax", "%ecx", "%esi" );
|
||||
|
||||
return res & ~_dwDisabledISA;
|
||||
#endif
|
||||
}
|
||||
137
3rdparty/SoundTouch/cpu_detect_x86_win.cpp
vendored
137
3rdparty/SoundTouch/cpu_detect_x86_win.cpp
vendored
@@ -1,137 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Win32 version of the x86 CPU detect routine.
|
||||
///
|
||||
/// This file is to be compiled in Windows platform with Microsoft Visual C++
|
||||
/// Compiler. Please see 'cpu_detect_x86_gcc.cpp' for the gcc compiler version
|
||||
/// for all GNU platforms.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2011-07-17 07:58:40 -0300 (dom, 17 jul 2011) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: cpu_detect_x86_win.cpp 127 2011-07-17 10:58:40Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "cpu_detect.h"
|
||||
|
||||
#include "STTypes.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// processor instructions extension detection routines
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Flag variable indicating whick ISA extensions are disabled (for debugging)
|
||||
static uint _dwDisabledISA = 0x00; // 0xffffffff; //<- use this to disable all extensions
|
||||
|
||||
|
||||
// Disables given set of instruction extensions. See SUPPORT_... defines.
|
||||
void disableExtensions(uint dwDisableMask)
|
||||
{
|
||||
_dwDisabledISA = dwDisableMask;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Checks which instruction set extensions are supported by the CPU.
|
||||
uint detectCPUextensions(void)
|
||||
{
|
||||
uint res = 0;
|
||||
|
||||
if (_dwDisabledISA == 0xffffffff) return 0;
|
||||
|
||||
#ifndef _M_X64
|
||||
// 32bit compilation, detect CPU capabilities with inline assembler.
|
||||
__asm
|
||||
{
|
||||
; check if 'cpuid' instructions is available by toggling eflags bit 21
|
||||
;
|
||||
xor esi, esi ; clear esi = result register
|
||||
|
||||
pushfd ; save eflags to stack
|
||||
mov eax,dword ptr [esp] ; load eax from stack (with eflags)
|
||||
mov ecx, eax ; save the original eflags values to ecx
|
||||
xor eax, 0x00200000 ; toggle bit 21
|
||||
mov dword ptr [esp],eax ; store toggled eflags to stack
|
||||
popfd ; load eflags from stack
|
||||
|
||||
pushfd ; save updated eflags to stack
|
||||
mov eax,dword ptr [esp] ; load eax from stack
|
||||
popfd ; pop stack to restore stack pointer
|
||||
|
||||
xor edx, edx ; clear edx for defaulting no mmx
|
||||
cmp eax, ecx ; compare to original eflags values
|
||||
jz end ; jumps to 'end' if cpuid not present
|
||||
|
||||
; cpuid instruction available, test for presence of mmx instructions
|
||||
mov eax, 1
|
||||
cpuid
|
||||
test edx, 0x00800000
|
||||
jz end ; branch if MMX not available
|
||||
|
||||
or esi, SUPPORT_MMX ; otherwise add MMX support bit
|
||||
|
||||
test edx, 0x02000000
|
||||
jz test3DNow ; branch if SSE not available
|
||||
|
||||
or esi, SUPPORT_SSE ; otherwise add SSE support bit
|
||||
|
||||
test3DNow:
|
||||
; test for precense of AMD extensions
|
||||
mov eax, 0x80000000
|
||||
cpuid
|
||||
cmp eax, 0x80000000
|
||||
jbe end ; branch if no AMD extensions detected
|
||||
|
||||
; test for precense of 3DNow! extension
|
||||
mov eax, 0x80000001
|
||||
cpuid
|
||||
test edx, 0x80000000
|
||||
jz end ; branch if 3DNow! not detected
|
||||
|
||||
or esi, SUPPORT_3DNOW ; otherwise add 3DNow support bit
|
||||
|
||||
end:
|
||||
|
||||
mov res, esi
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
// Visual C++ 64bit compilation doesn't support inline assembler. However,
|
||||
// all x64 compatible CPUs support MMX & SSE extensions.
|
||||
res = SUPPORT_MMX | SUPPORT_SSE | SUPPORT_SSE2;
|
||||
|
||||
#endif
|
||||
|
||||
return res & ~_dwDisabledISA;
|
||||
}
|
||||
1
3rdparty/SoundTouch/depcomp
vendored
1
3rdparty/SoundTouch/depcomp
vendored
@@ -1 +0,0 @@
|
||||
/usr/share/automake-1.10/depcomp
|
||||
1
3rdparty/SoundTouch/install-sh
vendored
1
3rdparty/SoundTouch/install-sh
vendored
@@ -1 +0,0 @@
|
||||
/usr/share/automake-1.10/install-sh
|
||||
1
3rdparty/SoundTouch/missing
vendored
1
3rdparty/SoundTouch/missing
vendored
@@ -1 +0,0 @@
|
||||
/usr/share/automake-1.10/missing
|
||||
317
3rdparty/SoundTouch/mmx_optimized.cpp
vendored
317
3rdparty/SoundTouch/mmx_optimized.cpp
vendored
@@ -1,317 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// MMX optimized routines. All MMX optimized functions have been gathered into
|
||||
/// this single source code file, regardless to their class or original source
|
||||
/// code file, in order to ease porting the library to other compiler and
|
||||
/// processor platforms.
|
||||
///
|
||||
/// The MMX-optimizations are programmed using MMX compiler intrinsics that
|
||||
/// are supported both by Microsoft Visual C++ and GCC compilers, so this file
|
||||
/// should compile with both toolsets.
|
||||
///
|
||||
/// NOTICE: If using Visual Studio 6.0, you'll need to install the "Visual C++
|
||||
/// 6.0 processor pack" update to support compiler intrinsic syntax. The update
|
||||
/// is available for download at Microsoft Developers Network, see here:
|
||||
/// http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// SoundTouch WWW: http://www.surina.net/soundtouch
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Last changed : $Date: 2012-11-08 16:53:01 -0200 (qui, 08 nov 2012) $
|
||||
// File revision : $Revision: 4 $
|
||||
//
|
||||
// $Id: mmx_optimized.cpp 160 2012-11-08 18:53:01Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// License :
|
||||
//
|
||||
// SoundTouch audio processing library
|
||||
// Copyright (c) Olli Parviainen
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "STTypes.h"
|
||||
|
||||
#ifdef SOUNDTOUCH_ALLOW_MMX
|
||||
// MMX routines available only with integer sample type
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// implementation of MMX optimized functions of class 'TDStretchMMX'
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "TDStretch.h"
|
||||
#include <mmintrin.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
|
||||
|
||||
// Calculates cross correlation of two buffers
|
||||
double TDStretchMMX::calcCrossCorr(const short *pV1, const short *pV2) const
|
||||
{
|
||||
const __m64 *pVec1, *pVec2;
|
||||
__m64 shifter;
|
||||
__m64 accu, normaccu;
|
||||
long corr, norm;
|
||||
int i;
|
||||
|
||||
pVec1 = (__m64*)pV1;
|
||||
pVec2 = (__m64*)pV2;
|
||||
|
||||
shifter = _m_from_int(overlapDividerBits);
|
||||
normaccu = accu = _mm_setzero_si64();
|
||||
|
||||
// Process 4 parallel sets of 2 * stereo samples or 4 * mono samples
|
||||
// during each round for improved CPU-level parallellization.
|
||||
for (i = 0; i < channels * overlapLength / 16; i ++)
|
||||
{
|
||||
__m64 temp, temp2;
|
||||
|
||||
// dictionary of instructions:
|
||||
// _m_pmaddwd : 4*16bit multiply-add, resulting two 32bits = [a0*b0+a1*b1 ; a2*b2+a3*b3]
|
||||
// _mm_add_pi32 : 2*32bit add
|
||||
// _m_psrad : 32bit right-shift
|
||||
|
||||
temp = _mm_add_pi32(_mm_madd_pi16(pVec1[0], pVec2[0]),
|
||||
_mm_madd_pi16(pVec1[1], pVec2[1]));
|
||||
temp2 = _mm_add_pi32(_mm_madd_pi16(pVec1[0], pVec1[0]),
|
||||
_mm_madd_pi16(pVec1[1], pVec1[1]));
|
||||
accu = _mm_add_pi32(accu, _mm_sra_pi32(temp, shifter));
|
||||
normaccu = _mm_add_pi32(normaccu, _mm_sra_pi32(temp2, shifter));
|
||||
|
||||
temp = _mm_add_pi32(_mm_madd_pi16(pVec1[2], pVec2[2]),
|
||||
_mm_madd_pi16(pVec1[3], pVec2[3]));
|
||||
temp2 = _mm_add_pi32(_mm_madd_pi16(pVec1[2], pVec1[2]),
|
||||
_mm_madd_pi16(pVec1[3], pVec1[3]));
|
||||
accu = _mm_add_pi32(accu, _mm_sra_pi32(temp, shifter));
|
||||
normaccu = _mm_add_pi32(normaccu, _mm_sra_pi32(temp2, shifter));
|
||||
|
||||
pVec1 += 4;
|
||||
pVec2 += 4;
|
||||
}
|
||||
|
||||
// copy hi-dword of mm0 to lo-dword of mm1, then sum mmo+mm1
|
||||
// and finally store the result into the variable "corr"
|
||||
|
||||
accu = _mm_add_pi32(accu, _mm_srli_si64(accu, 32));
|
||||
corr = _m_to_int(accu);
|
||||
|
||||
normaccu = _mm_add_pi32(normaccu, _mm_srli_si64(normaccu, 32));
|
||||
norm = _m_to_int(normaccu);
|
||||
|
||||
// Clear MMS state
|
||||
_m_empty();
|
||||
|
||||
// Normalize result by dividing by sqrt(norm) - this step is easiest
|
||||
// done using floating point operation
|
||||
if (norm == 0) norm = 1; // to avoid div by zero
|
||||
|
||||
return (double)corr / sqrt((double)norm);
|
||||
// Note: Warning about the missing EMMS instruction is harmless
|
||||
// as it'll be called elsewhere.
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TDStretchMMX::clearCrossCorrState()
|
||||
{
|
||||
// Clear MMS state
|
||||
_m_empty();
|
||||
//_asm EMMS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MMX-optimized version of the function overlapStereo
|
||||
void TDStretchMMX::overlapStereo(short *output, const short *input) const
|
||||
{
|
||||
const __m64 *pVinput, *pVMidBuf;
|
||||
__m64 *pVdest;
|
||||
__m64 mix1, mix2, adder, shifter;
|
||||
int i;
|
||||
|
||||
pVinput = (const __m64*)input;
|
||||
pVMidBuf = (const __m64*)pMidBuffer;
|
||||
pVdest = (__m64*)output;
|
||||
|
||||
// mix1 = mixer values for 1st stereo sample
|
||||
// mix1 = mixer values for 2nd stereo sample
|
||||
// adder = adder for updating mixer values after each round
|
||||
|
||||
mix1 = _mm_set_pi16(0, overlapLength, 0, overlapLength);
|
||||
adder = _mm_set_pi16(1, -1, 1, -1);
|
||||
mix2 = _mm_add_pi16(mix1, adder);
|
||||
adder = _mm_add_pi16(adder, adder);
|
||||
|
||||
// Overlaplength-division by shifter. "+1" is to account for "-1" deduced in
|
||||
// overlapDividerBits calculation earlier.
|
||||
shifter = _m_from_int(overlapDividerBits + 1);
|
||||
|
||||
for (i = 0; i < overlapLength / 4; i ++)
|
||||
{
|
||||
__m64 temp1, temp2;
|
||||
|
||||
// load & shuffle data so that input & mixbuffer data samples are paired
|
||||
temp1 = _mm_unpacklo_pi16(pVMidBuf[0], pVinput[0]); // = i0l m0l i0r m0r
|
||||
temp2 = _mm_unpackhi_pi16(pVMidBuf[0], pVinput[0]); // = i1l m1l i1r m1r
|
||||
|
||||
// temp = (temp .* mix) >> shifter
|
||||
temp1 = _mm_sra_pi32(_mm_madd_pi16(temp1, mix1), shifter);
|
||||
temp2 = _mm_sra_pi32(_mm_madd_pi16(temp2, mix2), shifter);
|
||||
pVdest[0] = _mm_packs_pi32(temp1, temp2); // pack 2*2*32bit => 4*16bit
|
||||
|
||||
// update mix += adder
|
||||
mix1 = _mm_add_pi16(mix1, adder);
|
||||
mix2 = _mm_add_pi16(mix2, adder);
|
||||
|
||||
// --- second round begins here ---
|
||||
|
||||
// load & shuffle data so that input & mixbuffer data samples are paired
|
||||
temp1 = _mm_unpacklo_pi16(pVMidBuf[1], pVinput[1]); // = i2l m2l i2r m2r
|
||||
temp2 = _mm_unpackhi_pi16(pVMidBuf[1], pVinput[1]); // = i3l m3l i3r m3r
|
||||
|
||||
// temp = (temp .* mix) >> shifter
|
||||
temp1 = _mm_sra_pi32(_mm_madd_pi16(temp1, mix1), shifter);
|
||||
temp2 = _mm_sra_pi32(_mm_madd_pi16(temp2, mix2), shifter);
|
||||
pVdest[1] = _mm_packs_pi32(temp1, temp2); // pack 2*2*32bit => 4*16bit
|
||||
|
||||
// update mix += adder
|
||||
mix1 = _mm_add_pi16(mix1, adder);
|
||||
mix2 = _mm_add_pi16(mix2, adder);
|
||||
|
||||
pVinput += 2;
|
||||
pVMidBuf += 2;
|
||||
pVdest += 2;
|
||||
}
|
||||
|
||||
_m_empty(); // clear MMS state
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// implementation of MMX optimized functions of class 'FIRFilter'
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "FIRFilter.h"
|
||||
|
||||
|
||||
FIRFilterMMX::FIRFilterMMX() : FIRFilter()
|
||||
{
|
||||
filterCoeffsUnalign = NULL;
|
||||
}
|
||||
|
||||
|
||||
FIRFilterMMX::~FIRFilterMMX()
|
||||
{
|
||||
delete[] filterCoeffsUnalign;
|
||||
}
|
||||
|
||||
|
||||
// (overloaded) Calculates filter coefficients for MMX routine
|
||||
void FIRFilterMMX::setCoefficients(const short *coeffs, uint newLength, uint uResultDivFactor)
|
||||
{
|
||||
uint i;
|
||||
FIRFilter::setCoefficients(coeffs, newLength, uResultDivFactor);
|
||||
|
||||
// Ensure that filter coeffs array is aligned to 16-byte boundary
|
||||
delete[] filterCoeffsUnalign;
|
||||
filterCoeffsUnalign = new short[2 * newLength + 8];
|
||||
filterCoeffsAlign = (short *)SOUNDTOUCH_ALIGN_POINTER_16(filterCoeffsUnalign);
|
||||
|
||||
// rearrange the filter coefficients for mmx routines
|
||||
for (i = 0;i < length; i += 4)
|
||||
{
|
||||
filterCoeffsAlign[2 * i + 0] = coeffs[i + 0];
|
||||
filterCoeffsAlign[2 * i + 1] = coeffs[i + 2];
|
||||
filterCoeffsAlign[2 * i + 2] = coeffs[i + 0];
|
||||
filterCoeffsAlign[2 * i + 3] = coeffs[i + 2];
|
||||
|
||||
filterCoeffsAlign[2 * i + 4] = coeffs[i + 1];
|
||||
filterCoeffsAlign[2 * i + 5] = coeffs[i + 3];
|
||||
filterCoeffsAlign[2 * i + 6] = coeffs[i + 1];
|
||||
filterCoeffsAlign[2 * i + 7] = coeffs[i + 3];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// mmx-optimized version of the filter routine for stereo sound
|
||||
uint FIRFilterMMX::evaluateFilterStereo(short *dest, const short *src, uint numSamples) const
|
||||
{
|
||||
// Create stack copies of the needed member variables for asm routines :
|
||||
uint i, j;
|
||||
__m64 *pVdest = (__m64*)dest;
|
||||
|
||||
if (length < 2) return 0;
|
||||
|
||||
for (i = 0; i < (numSamples - length) / 2; i ++)
|
||||
{
|
||||
__m64 accu1;
|
||||
__m64 accu2;
|
||||
const __m64 *pVsrc = (const __m64*)src;
|
||||
const __m64 *pVfilter = (const __m64*)filterCoeffsAlign;
|
||||
|
||||
accu1 = accu2 = _mm_setzero_si64();
|
||||
for (j = 0; j < lengthDiv8 * 2; j ++)
|
||||
{
|
||||
__m64 temp1, temp2;
|
||||
|
||||
temp1 = _mm_unpacklo_pi16(pVsrc[0], pVsrc[1]); // = l2 l0 r2 r0
|
||||
temp2 = _mm_unpackhi_pi16(pVsrc[0], pVsrc[1]); // = l3 l1 r3 r1
|
||||
|
||||
accu1 = _mm_add_pi32(accu1, _mm_madd_pi16(temp1, pVfilter[0])); // += l2*f2+l0*f0 r2*f2+r0*f0
|
||||
accu1 = _mm_add_pi32(accu1, _mm_madd_pi16(temp2, pVfilter[1])); // += l3*f3+l1*f1 r3*f3+r1*f1
|
||||
|
||||
temp1 = _mm_unpacklo_pi16(pVsrc[1], pVsrc[2]); // = l4 l2 r4 r2
|
||||
|
||||
accu2 = _mm_add_pi32(accu2, _mm_madd_pi16(temp2, pVfilter[0])); // += l3*f2+l1*f0 r3*f2+r1*f0
|
||||
accu2 = _mm_add_pi32(accu2, _mm_madd_pi16(temp1, pVfilter[1])); // += l4*f3+l2*f1 r4*f3+r2*f1
|
||||
|
||||
// accu1 += l2*f2+l0*f0 r2*f2+r0*f0
|
||||
// += l3*f3+l1*f1 r3*f3+r1*f1
|
||||
|
||||
// accu2 += l3*f2+l1*f0 r3*f2+r1*f0
|
||||
// l4*f3+l2*f1 r4*f3+r2*f1
|
||||
|
||||
pVfilter += 2;
|
||||
pVsrc += 2;
|
||||
}
|
||||
// accu >>= resultDivFactor
|
||||
accu1 = _mm_srai_pi32(accu1, resultDivFactor);
|
||||
accu2 = _mm_srai_pi32(accu2, resultDivFactor);
|
||||
|
||||
// pack 2*2*32bits => 4*16 bits
|
||||
pVdest[0] = _mm_packs_pi32(accu1, accu2);
|
||||
src += 4;
|
||||
pVdest ++;
|
||||
}
|
||||
|
||||
_m_empty(); // clear emms state
|
||||
|
||||
return (numSamples & 0xfffffffe) - length;
|
||||
}
|
||||
|
||||
#endif // SOUNDTOUCH_ALLOW_MMX
|
||||
7
3rdparty/SoundTouch/soundtouch_config.h
vendored
7
3rdparty/SoundTouch/soundtouch_config.h
vendored
@@ -1,7 +0,0 @@
|
||||
|
||||
#ifndef SOUNDTOUCH_CONFIG_H_INCLUDED
|
||||
#define SOUNDTOUCH_CONFIG_H_INCLUDED
|
||||
|
||||
|
||||
|
||||
#endif // SOUNDTOUCH_CONFIG_H_INCLUDED
|
||||
55
3rdparty/baseclasses/CMakeLists.txt
vendored
Normal file
55
3rdparty/baseclasses/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
add_library(baseclasses
|
||||
amextra.cpp
|
||||
amfilter.cpp
|
||||
amvideo.cpp
|
||||
combase.cpp
|
||||
ctlutil.cpp
|
||||
ddmm.cpp
|
||||
mtype.cpp
|
||||
outputq.cpp
|
||||
pstream.cpp
|
||||
pullpin.cpp
|
||||
refclock.cpp
|
||||
renbase.cpp
|
||||
schedule.cpp
|
||||
seekpt.cpp
|
||||
source.cpp
|
||||
strmctl.cpp
|
||||
sysclock.cpp
|
||||
transfrm.cpp
|
||||
transip.cpp
|
||||
vtrans.cpp
|
||||
wxdebug.cpp
|
||||
wxlist.cpp
|
||||
wxutil.cpp
|
||||
amextra.h
|
||||
amfilter.h
|
||||
cache.h
|
||||
combase.h
|
||||
ctlutil.h
|
||||
ddmm.h
|
||||
fourcc.h
|
||||
measure.h
|
||||
msgthrd.h
|
||||
mtype.h
|
||||
outputq.h
|
||||
pstream.h
|
||||
pullpin.h
|
||||
refclock.h
|
||||
reftime.h
|
||||
renbase.h
|
||||
schedule.h
|
||||
seekpt.h
|
||||
source.h
|
||||
streams.h
|
||||
strmctl.h
|
||||
sysclock.h
|
||||
transfrm.h
|
||||
transip.h
|
||||
vtrans.h
|
||||
wxdebug.h
|
||||
wxlist.h
|
||||
wxutil.h
|
||||
)
|
||||
target_include_directories(baseclasses PUBLIC .)
|
||||
target_precompile_headers(baseclasses PRIVATE streams.h)
|
||||
21
3rdparty/baseclasses/LICENSE
vendored
Normal file
21
3rdparty/baseclasses/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Microsoft Corporation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
111
3rdparty/baseclasses/amextra.cpp
vendored
Normal file
111
3rdparty/baseclasses/amextra.cpp
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// File: AMExtra.cpp
|
||||
//
|
||||
// Desc: DirectShow base classes - implements CRenderedInputPin class.
|
||||
//
|
||||
// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#include <streams.h> // DirectShow base class definitions
|
||||
#include <mmsystem.h> // Needed for definition of timeGetTime
|
||||
#include <limits.h> // Standard data type limit definitions
|
||||
#include <measure.h> // Used for time critical log functions
|
||||
|
||||
#include "amextra.h"
|
||||
|
||||
#pragma warning(disable:4355)
|
||||
|
||||
// Implements CRenderedInputPin class
|
||||
|
||||
CRenderedInputPin::CRenderedInputPin(__in_opt LPCTSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName) :
|
||||
CBaseInputPin(pObjectName, pFilter, pLock, phr, pName),
|
||||
m_bAtEndOfStream(FALSE),
|
||||
m_bCompleteNotified(FALSE)
|
||||
{
|
||||
}
|
||||
#ifdef UNICODE
|
||||
CRenderedInputPin::CRenderedInputPin(__in_opt LPCSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName) :
|
||||
CBaseInputPin(pObjectName, pFilter, pLock, phr, pName),
|
||||
m_bAtEndOfStream(FALSE),
|
||||
m_bCompleteNotified(FALSE)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
// Flush end of stream condition - caller should do any
|
||||
// necessary stream level locking before calling this
|
||||
|
||||
STDMETHODIMP CRenderedInputPin::EndOfStream()
|
||||
{
|
||||
HRESULT hr = CheckStreaming();
|
||||
|
||||
// Do EC_COMPLETE handling for rendered pins
|
||||
if (S_OK == hr && !m_bAtEndOfStream) {
|
||||
m_bAtEndOfStream = TRUE;
|
||||
FILTER_STATE fs;
|
||||
EXECUTE_ASSERT(SUCCEEDED(m_pFilter->GetState(0, &fs)));
|
||||
if (fs == State_Running) {
|
||||
DoCompleteHandling();
|
||||
}
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
// Called to complete the flush
|
||||
|
||||
STDMETHODIMP CRenderedInputPin::EndFlush()
|
||||
{
|
||||
CAutoLock lck(m_pLock);
|
||||
|
||||
// Clean up renderer state
|
||||
m_bAtEndOfStream = FALSE;
|
||||
m_bCompleteNotified = FALSE;
|
||||
|
||||
return CBaseInputPin::EndFlush();
|
||||
}
|
||||
|
||||
|
||||
// Notify of Run() from filter
|
||||
|
||||
HRESULT CRenderedInputPin::Run(REFERENCE_TIME tStart)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(tStart);
|
||||
m_bCompleteNotified = FALSE;
|
||||
if (m_bAtEndOfStream) {
|
||||
DoCompleteHandling();
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
// Clear status on going into paused state
|
||||
|
||||
HRESULT CRenderedInputPin::Active()
|
||||
{
|
||||
m_bAtEndOfStream = FALSE;
|
||||
m_bCompleteNotified = FALSE;
|
||||
return CBaseInputPin::Active();
|
||||
}
|
||||
|
||||
|
||||
// Do stuff to deliver end of stream
|
||||
|
||||
void CRenderedInputPin::DoCompleteHandling()
|
||||
{
|
||||
ASSERT(m_bAtEndOfStream);
|
||||
if (!m_bCompleteNotified) {
|
||||
m_bCompleteNotified = TRUE;
|
||||
m_pFilter->NotifyEvent(EC_COMPLETE, S_OK, (LONG_PTR)(IBaseFilter *)m_pFilter);
|
||||
}
|
||||
}
|
||||
|
||||
56
3rdparty/baseclasses/amextra.h
vendored
Normal file
56
3rdparty/baseclasses/amextra.h
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// File: AMExtra.h
|
||||
//
|
||||
// Desc: DirectShow base classes.
|
||||
//
|
||||
// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#ifndef __AMEXTRA__
|
||||
#define __AMEXTRA__
|
||||
|
||||
// Simple rendered input pin
|
||||
//
|
||||
// NOTE if your filter queues stuff before rendering then it may not be
|
||||
// appropriate to use this class
|
||||
//
|
||||
// In that case queue the end of stream condition until the last sample
|
||||
// is actually rendered and flush the condition appropriately
|
||||
|
||||
class CRenderedInputPin : public CBaseInputPin
|
||||
{
|
||||
public:
|
||||
|
||||
CRenderedInputPin(__in_opt LPCTSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName);
|
||||
#ifdef UNICODE
|
||||
CRenderedInputPin(__in_opt LPCSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName);
|
||||
#endif
|
||||
|
||||
// Override methods to track end of stream state
|
||||
STDMETHODIMP EndOfStream();
|
||||
STDMETHODIMP EndFlush();
|
||||
|
||||
HRESULT Active();
|
||||
HRESULT Run(REFERENCE_TIME tStart);
|
||||
|
||||
protected:
|
||||
|
||||
// Member variables to track state
|
||||
BOOL m_bAtEndOfStream; // Set by EndOfStream
|
||||
BOOL m_bCompleteNotified; // Set when we notify for EC_COMPLETE
|
||||
|
||||
private:
|
||||
void DoCompleteHandling();
|
||||
};
|
||||
|
||||
#endif // __AMEXTRA__
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
||||
// Desc: DirectShow base classes - efines class hierarchy for streams
|
||||
// architecture.
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -73,9 +73,9 @@ protected:
|
||||
public:
|
||||
|
||||
CBaseMediaFilter(
|
||||
const TCHAR *pName,
|
||||
LPUNKNOWN pUnk,
|
||||
CCritSec *pLock,
|
||||
__in_opt LPCTSTR pName,
|
||||
__inout_opt LPUNKNOWN pUnk,
|
||||
__in CCritSec *pLock,
|
||||
REFCLSID clsid);
|
||||
|
||||
virtual ~CBaseMediaFilter();
|
||||
@@ -83,21 +83,21 @@ public:
|
||||
DECLARE_IUNKNOWN
|
||||
|
||||
// override this to say what interfaces we support where
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, __deref_out void ** ppv);
|
||||
|
||||
//
|
||||
// --- IPersist method ---
|
||||
//
|
||||
|
||||
STDMETHODIMP GetClassID(CLSID *pClsID);
|
||||
STDMETHODIMP GetClassID(__out CLSID *pClsID);
|
||||
|
||||
// --- IMediaFilter methods ---
|
||||
|
||||
STDMETHODIMP GetState(DWORD dwMSecs, FILTER_STATE *State);
|
||||
STDMETHODIMP GetState(DWORD dwMSecs, __out FILTER_STATE *State);
|
||||
|
||||
STDMETHODIMP SetSyncSource(IReferenceClock *pClock);
|
||||
STDMETHODIMP SetSyncSource(__inout_opt IReferenceClock *pClock);
|
||||
|
||||
STDMETHODIMP GetSyncSource(IReferenceClock **pClock);
|
||||
STDMETHODIMP GetSyncSource(__deref_out_opt IReferenceClock **pClock);
|
||||
|
||||
// default implementation of Stop and Pause just record the
|
||||
// state. Override to activate or de-activate your filter.
|
||||
@@ -168,37 +168,37 @@ protected:
|
||||
public:
|
||||
|
||||
CBaseFilter(
|
||||
const TCHAR *pName, // Object description
|
||||
LPUNKNOWN pUnk, // IUnknown of delegating object
|
||||
CCritSec *pLock, // Object who maintains lock
|
||||
REFCLSID clsid); // The clsid to be used to serialize this filter
|
||||
__in_opt LPCTSTR pName, // Object description
|
||||
__inout_opt LPUNKNOWN pUnk, // IUnknown of delegating object
|
||||
__in CCritSec *pLock, // Object who maintains lock
|
||||
REFCLSID clsid); // The clsid to be used to serialize this filter
|
||||
|
||||
CBaseFilter(
|
||||
TCHAR *pName, // Object description
|
||||
LPUNKNOWN pUnk, // IUnknown of delegating object
|
||||
CCritSec *pLock, // Object who maintains lock
|
||||
REFCLSID clsid, // The clsid to be used to serialize this filter
|
||||
HRESULT *phr); // General OLE return code
|
||||
__in_opt LPCTSTR pName, // Object description
|
||||
__in_opt LPUNKNOWN pUnk, // IUnknown of delegating object
|
||||
__in CCritSec *pLock, // Object who maintains lock
|
||||
REFCLSID clsid, // The clsid to be used to serialize this filter
|
||||
__inout HRESULT *phr); // General OLE return code
|
||||
#ifdef UNICODE
|
||||
CBaseFilter(
|
||||
const CHAR *pName, // Object description
|
||||
LPUNKNOWN pUnk, // IUnknown of delegating object
|
||||
CCritSec *pLock, // Object who maintains lock
|
||||
REFCLSID clsid); // The clsid to be used to serialize this filter
|
||||
__in_opt LPCSTR pName, // Object description
|
||||
__in_opt LPUNKNOWN pUnk, // IUnknown of delegating object
|
||||
__in CCritSec *pLock, // Object who maintains lock
|
||||
REFCLSID clsid); // The clsid to be used to serialize this filter
|
||||
|
||||
CBaseFilter(
|
||||
CHAR *pName, // Object description
|
||||
LPUNKNOWN pUnk, // IUnknown of delegating object
|
||||
CCritSec *pLock, // Object who maintains lock
|
||||
REFCLSID clsid, // The clsid to be used to serialize this filter
|
||||
HRESULT *phr); // General OLE return code
|
||||
__in_opt LPCSTR pName, // Object description
|
||||
__in_opt LPUNKNOWN pUnk, // IUnknown of delegating object
|
||||
__in CCritSec *pLock, // Object who maintains lock
|
||||
REFCLSID clsid, // The clsid to be used to serialize this filter
|
||||
__inout HRESULT *phr); // General OLE return code
|
||||
#endif
|
||||
~CBaseFilter();
|
||||
|
||||
DECLARE_IUNKNOWN
|
||||
|
||||
// override this to say what interfaces we support where
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, __deref_out void ** ppv);
|
||||
#ifdef DEBUG
|
||||
STDMETHODIMP_(ULONG) NonDelegatingRelease();
|
||||
#endif
|
||||
@@ -207,15 +207,15 @@ public:
|
||||
// --- IPersist method ---
|
||||
//
|
||||
|
||||
STDMETHODIMP GetClassID(CLSID *pClsID);
|
||||
STDMETHODIMP GetClassID(__out CLSID *pClsID);
|
||||
|
||||
// --- IMediaFilter methods ---
|
||||
|
||||
STDMETHODIMP GetState(DWORD dwMSecs, FILTER_STATE *State);
|
||||
STDMETHODIMP GetState(DWORD dwMSecs, __out FILTER_STATE *State);
|
||||
|
||||
STDMETHODIMP SetSyncSource(IReferenceClock *pClock);
|
||||
STDMETHODIMP SetSyncSource(__in_opt IReferenceClock *pClock);
|
||||
|
||||
STDMETHODIMP GetSyncSource(IReferenceClock **pClock);
|
||||
STDMETHODIMP GetSyncSource(__deref_out_opt IReferenceClock **pClock);
|
||||
|
||||
|
||||
// override Stop and Pause so we can activate the pins.
|
||||
@@ -253,27 +253,27 @@ public:
|
||||
|
||||
// pin enumerator
|
||||
STDMETHODIMP EnumPins(
|
||||
IEnumPins ** ppEnum);
|
||||
__deref_out IEnumPins ** ppEnum);
|
||||
|
||||
|
||||
// default behaviour of FindPin assumes pin ids are their names
|
||||
STDMETHODIMP FindPin(
|
||||
LPCWSTR Id,
|
||||
IPin ** ppPin
|
||||
__deref_out IPin ** ppPin
|
||||
);
|
||||
|
||||
STDMETHODIMP QueryFilterInfo(
|
||||
FILTER_INFO * pInfo);
|
||||
__out FILTER_INFO * pInfo);
|
||||
|
||||
STDMETHODIMP JoinFilterGraph(
|
||||
IFilterGraph * pGraph,
|
||||
LPCWSTR pName);
|
||||
__inout_opt IFilterGraph * pGraph,
|
||||
__in_opt LPCWSTR pName);
|
||||
|
||||
// return a Vendor information string. Optional - may return E_NOTIMPL.
|
||||
// memory returned should be freed using CoTaskMemFree
|
||||
// default implementation returns E_NOTIMPL
|
||||
STDMETHODIMP QueryVendorInfo(
|
||||
LPWSTR* pVendorInfo
|
||||
__deref_out LPWSTR* pVendorInfo
|
||||
);
|
||||
|
||||
// --- helper methods ---
|
||||
@@ -287,7 +287,7 @@ public:
|
||||
LONG_PTR EventParam2);
|
||||
|
||||
// return the filter graph we belong to
|
||||
IFilterGraph *GetFilterGraph() {
|
||||
__out_opt IFilterGraph *GetFilterGraph() {
|
||||
return m_pGraph;
|
||||
}
|
||||
|
||||
@@ -295,7 +295,7 @@ public:
|
||||
// pPin is the pin to reconnect
|
||||
// pmt is the type to reconnect with - can be NULL
|
||||
// Calls ReconnectEx on the filter graph
|
||||
HRESULT ReconnectPin(IPin *pPin, AM_MEDIA_TYPE const *pmt);
|
||||
HRESULT ReconnectPin(IPin *pPin, __in_opt AM_MEDIA_TYPE const *pmt);
|
||||
|
||||
// find out the current pin version (used by enumerators)
|
||||
virtual LONG GetPinVersion();
|
||||
@@ -314,7 +314,7 @@ public:
|
||||
// --- setup helper methods ---
|
||||
// (override to return filters setup data)
|
||||
|
||||
virtual LPAMOVIESETUP_FILTER GetSetupData(){ return NULL; }
|
||||
virtual __out_opt LPAMOVIESETUP_FILTER GetSetupData(){ return NULL; }
|
||||
|
||||
};
|
||||
|
||||
@@ -376,8 +376,8 @@ protected:
|
||||
// try all the media types in this enumerator - for each that
|
||||
// we accept, try to connect using ReceiveConnection.
|
||||
HRESULT TryMediaTypes(
|
||||
IPin *pReceivePin, // connect to this pin
|
||||
const CMediaType *pmt, // proposed type from Connect
|
||||
IPin *pReceivePin, // connect to this pin
|
||||
__in_opt const CMediaType *pmt, // proposed type from Connect
|
||||
IEnumMediaTypes *pEnum); // try this enumerator
|
||||
|
||||
// establish a connection with a suitable mediatype. Needs to
|
||||
@@ -386,31 +386,31 @@ protected:
|
||||
// enumerator until we find one that works.
|
||||
HRESULT AgreeMediaType(
|
||||
IPin *pReceivePin, // connect to this pin
|
||||
const CMediaType *pmt); // proposed type from Connect
|
||||
const CMediaType *pmt); // proposed type from Connect
|
||||
|
||||
public:
|
||||
|
||||
CBasePin(
|
||||
TCHAR *pObjectName, // Object description
|
||||
CBaseFilter *pFilter, // Owning filter who knows about pins
|
||||
CCritSec *pLock, // Object who implements the lock
|
||||
HRESULT *phr, // General OLE return code
|
||||
LPCWSTR pName, // Pin name for us
|
||||
__in_opt LPCTSTR pObjectName, // Object description
|
||||
__in CBaseFilter *pFilter, // Owning filter who knows about pins
|
||||
__in CCritSec *pLock, // Object who implements the lock
|
||||
__inout HRESULT *phr, // General OLE return code
|
||||
__in_opt LPCWSTR pName, // Pin name for us
|
||||
PIN_DIRECTION dir); // Either PINDIR_INPUT or PINDIR_OUTPUT
|
||||
#ifdef UNICODE
|
||||
CBasePin(
|
||||
CHAR *pObjectName, // Object description
|
||||
CBaseFilter *pFilter, // Owning filter who knows about pins
|
||||
CCritSec *pLock, // Object who implements the lock
|
||||
HRESULT *phr, // General OLE return code
|
||||
LPCWSTR pName, // Pin name for us
|
||||
__in_opt LPCSTR pObjectName, // Object description
|
||||
__in CBaseFilter *pFilter, // Owning filter who knows about pins
|
||||
__in CCritSec *pLock, // Object who implements the lock
|
||||
__inout HRESULT *phr, // General OLE return code
|
||||
__in_opt LPCWSTR pName, // Pin name for us
|
||||
PIN_DIRECTION dir); // Either PINDIR_INPUT or PINDIR_OUTPUT
|
||||
#endif
|
||||
virtual ~CBasePin();
|
||||
|
||||
DECLARE_IUNKNOWN
|
||||
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, __deref_out void ** ppv);
|
||||
STDMETHODIMP_(ULONG) NonDelegatingRelease();
|
||||
STDMETHODIMP_(ULONG) NonDelegatingAddRef();
|
||||
|
||||
@@ -421,7 +421,7 @@ public:
|
||||
// (subtype or format type may be GUID_NULL).
|
||||
STDMETHODIMP Connect(
|
||||
IPin * pReceivePin,
|
||||
const AM_MEDIA_TYPE *pmt // optional media type
|
||||
__in_opt const AM_MEDIA_TYPE *pmt // optional media type
|
||||
);
|
||||
|
||||
// (passive) accept a connection from another pin
|
||||
@@ -432,20 +432,20 @@ public:
|
||||
|
||||
STDMETHODIMP Disconnect();
|
||||
|
||||
STDMETHODIMP ConnectedTo(IPin **pPin);
|
||||
STDMETHODIMP ConnectedTo(__deref_out IPin **pPin);
|
||||
|
||||
STDMETHODIMP ConnectionMediaType(AM_MEDIA_TYPE *pmt);
|
||||
STDMETHODIMP ConnectionMediaType(__out AM_MEDIA_TYPE *pmt);
|
||||
|
||||
STDMETHODIMP QueryPinInfo(
|
||||
PIN_INFO * pInfo
|
||||
__out PIN_INFO * pInfo
|
||||
);
|
||||
|
||||
STDMETHODIMP QueryDirection(
|
||||
PIN_DIRECTION * pPinDir
|
||||
__out PIN_DIRECTION * pPinDir
|
||||
);
|
||||
|
||||
STDMETHODIMP QueryId(
|
||||
LPWSTR * Id
|
||||
__deref_out LPWSTR * Id
|
||||
);
|
||||
|
||||
// does the pin support this media type
|
||||
@@ -455,7 +455,7 @@ public:
|
||||
|
||||
// return an enumerator for this pins preferred media types
|
||||
STDMETHODIMP EnumMediaTypes(
|
||||
IEnumMediaTypes **ppEnum
|
||||
__deref_out IEnumMediaTypes **ppEnum
|
||||
);
|
||||
|
||||
// return an array of IPin* - the pins that this pin internally connects to
|
||||
@@ -466,9 +466,9 @@ public:
|
||||
// all visible output pins and vice versa.
|
||||
// apPin can be NULL if nPin==0 (not otherwise).
|
||||
STDMETHODIMP QueryInternalConnections(
|
||||
IPin* *apPin, // array of IPin*
|
||||
ULONG *nPin // on input, the number of slots
|
||||
// on output the number of pins
|
||||
__out_ecount_part(*nPin,*nPin) IPin* *apPin, // array of IPin*
|
||||
__inout ULONG *nPin // on input, the number of slots
|
||||
// on output the number of pins
|
||||
) { return E_NOTIMPL; }
|
||||
|
||||
// Called when no more data will be sent
|
||||
@@ -534,7 +534,7 @@ public:
|
||||
virtual HRESULT CompleteConnect(IPin *pReceivePin);
|
||||
|
||||
// returns the preferred formats for a pin
|
||||
virtual HRESULT GetMediaType(int iPosition,CMediaType *pMediaType);
|
||||
virtual HRESULT GetMediaType(int iPosition, __inout CMediaType *pMediaType);
|
||||
|
||||
// access to NewSegment values
|
||||
REFERENCE_TIME CurrentStopTime() {
|
||||
@@ -616,26 +616,26 @@ class CEnumPins : public IEnumPins // The interface we support
|
||||
public:
|
||||
|
||||
CEnumPins(
|
||||
CBaseFilter *pFilter,
|
||||
CEnumPins *pEnumPins);
|
||||
__in CBaseFilter *pFilter,
|
||||
__in_opt CEnumPins *pEnumPins);
|
||||
|
||||
virtual ~CEnumPins();
|
||||
|
||||
// IUnknown
|
||||
STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
STDMETHODIMP QueryInterface(REFIID riid, __deref_out void **ppv);
|
||||
STDMETHODIMP_(ULONG) AddRef();
|
||||
STDMETHODIMP_(ULONG) Release();
|
||||
|
||||
// IEnumPins
|
||||
STDMETHODIMP Next(
|
||||
ULONG cPins, // place this many pins...
|
||||
IPin ** ppPins, // ...in this array of IPin*
|
||||
ULONG * pcFetched // actual count passed returned here
|
||||
__out_ecount(cPins) IPin ** ppPins, // ...in this array of IPin*
|
||||
__out_opt ULONG * pcFetched // actual count passed returned here
|
||||
);
|
||||
|
||||
STDMETHODIMP Skip(ULONG cPins);
|
||||
STDMETHODIMP Reset();
|
||||
STDMETHODIMP Clone(IEnumPins **ppEnum);
|
||||
STDMETHODIMP Clone(__deref_out IEnumPins **ppEnum);
|
||||
|
||||
|
||||
};
|
||||
@@ -672,26 +672,26 @@ class CEnumMediaTypes : public IEnumMediaTypes // The interface we support
|
||||
public:
|
||||
|
||||
CEnumMediaTypes(
|
||||
CBasePin *pPin,
|
||||
CEnumMediaTypes *pEnumMediaTypes);
|
||||
__in CBasePin *pPin,
|
||||
__in_opt CEnumMediaTypes *pEnumMediaTypes);
|
||||
|
||||
virtual ~CEnumMediaTypes();
|
||||
|
||||
// IUnknown
|
||||
STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
STDMETHODIMP QueryInterface(REFIID riid, __deref_out void **ppv);
|
||||
STDMETHODIMP_(ULONG) AddRef();
|
||||
STDMETHODIMP_(ULONG) Release();
|
||||
|
||||
// IEnumMediaTypes
|
||||
STDMETHODIMP Next(
|
||||
ULONG cMediaTypes, // place this many pins...
|
||||
AM_MEDIA_TYPE ** ppMediaTypes, // ...in this array
|
||||
ULONG * pcFetched // actual count passed
|
||||
__out_ecount(cMediaTypes) AM_MEDIA_TYPE ** ppMediaTypes, // ...in this array
|
||||
__out_opt ULONG * pcFetched // actual count passed
|
||||
);
|
||||
|
||||
STDMETHODIMP Skip(ULONG cMediaTypes);
|
||||
STDMETHODIMP Reset();
|
||||
STDMETHODIMP Clone(IEnumMediaTypes **ppEnum);
|
||||
STDMETHODIMP Clone(__deref_out IEnumMediaTypes **ppEnum);
|
||||
};
|
||||
|
||||
|
||||
@@ -721,25 +721,25 @@ protected:
|
||||
public:
|
||||
|
||||
CBaseOutputPin(
|
||||
TCHAR *pObjectName,
|
||||
CBaseFilter *pFilter,
|
||||
CCritSec *pLock,
|
||||
HRESULT *phr,
|
||||
LPCWSTR pName);
|
||||
__in_opt LPCTSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName);
|
||||
#ifdef UNICODE
|
||||
CBaseOutputPin(
|
||||
CHAR *pObjectName,
|
||||
CBaseFilter *pFilter,
|
||||
CCritSec *pLock,
|
||||
HRESULT *phr,
|
||||
LPCWSTR pName);
|
||||
__in_opt LPCSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName);
|
||||
#endif
|
||||
// override CompleteConnect() so we can negotiate an allocator
|
||||
virtual HRESULT CompleteConnect(IPin *pReceivePin);
|
||||
|
||||
// negotiate the allocator and its buffer size/count and other properties
|
||||
// Calls DecideBufferSize to set properties
|
||||
virtual HRESULT DecideAllocator(IMemInputPin * pPin, IMemAllocator ** pAlloc);
|
||||
virtual HRESULT DecideAllocator(IMemInputPin * pPin, __deref_out IMemAllocator ** pAlloc);
|
||||
|
||||
// override this to set the buffer size and count. Return an error
|
||||
// if the size/count is not to your liking.
|
||||
@@ -748,13 +748,13 @@ public:
|
||||
// no preference on these.
|
||||
virtual HRESULT DecideBufferSize(
|
||||
IMemAllocator * pAlloc,
|
||||
ALLOCATOR_PROPERTIES * ppropInputRequest
|
||||
__inout ALLOCATOR_PROPERTIES * ppropInputRequest
|
||||
) PURE;
|
||||
|
||||
// returns an empty sample buffer from the allocator
|
||||
virtual HRESULT GetDeliveryBuffer(IMediaSample ** ppSample,
|
||||
REFERENCE_TIME * pStartTime,
|
||||
REFERENCE_TIME * pEndTime,
|
||||
virtual HRESULT GetDeliveryBuffer(__deref_out IMediaSample ** ppSample,
|
||||
__in_opt REFERENCE_TIME * pStartTime,
|
||||
__in_opt REFERENCE_TIME * pEndTime,
|
||||
DWORD dwFlags);
|
||||
|
||||
// deliver a filled-in sample to the connected input pin
|
||||
@@ -764,7 +764,7 @@ public:
|
||||
virtual HRESULT Deliver(IMediaSample *);
|
||||
|
||||
// override this to control the connection
|
||||
virtual HRESULT InitAllocator(IMemAllocator **ppAlloc);
|
||||
virtual HRESULT InitAllocator(__deref_out IMemAllocator **ppAlloc);
|
||||
HRESULT CheckConnect(IPin *pPin);
|
||||
HRESULT BreakConnect();
|
||||
|
||||
@@ -839,29 +839,29 @@ protected:
|
||||
public:
|
||||
|
||||
CBaseInputPin(
|
||||
TCHAR *pObjectName,
|
||||
CBaseFilter *pFilter,
|
||||
CCritSec *pLock,
|
||||
HRESULT *phr,
|
||||
LPCWSTR pName);
|
||||
__in_opt LPCTSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName);
|
||||
#ifdef UNICODE
|
||||
CBaseInputPin(
|
||||
CHAR *pObjectName,
|
||||
CBaseFilter *pFilter,
|
||||
CCritSec *pLock,
|
||||
HRESULT *phr,
|
||||
LPCWSTR pName);
|
||||
__in_opt LPCSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName);
|
||||
#endif
|
||||
virtual ~CBaseInputPin();
|
||||
|
||||
DECLARE_IUNKNOWN
|
||||
|
||||
// override this to publicise our interfaces
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, __deref_out void **ppv);
|
||||
|
||||
// return the allocator interface that this input pin
|
||||
// would like the output pin to use
|
||||
STDMETHODIMP GetAllocator(IMemAllocator ** ppAllocator);
|
||||
STDMETHODIMP GetAllocator(__deref_out IMemAllocator ** ppAllocator);
|
||||
|
||||
// tell the input pin which allocator the output pin is actually
|
||||
// going to use.
|
||||
@@ -874,9 +874,9 @@ public:
|
||||
|
||||
// do something with these media samples
|
||||
STDMETHODIMP ReceiveMultiple (
|
||||
IMediaSample **pSamples,
|
||||
__in_ecount(nSamples) IMediaSample **pSamples,
|
||||
long nSamples,
|
||||
long *nSamplesProcessed);
|
||||
__out long *nSamplesProcessed);
|
||||
|
||||
// See if Receive() blocks
|
||||
STDMETHODIMP ReceiveCanBlock();
|
||||
@@ -898,7 +898,7 @@ public:
|
||||
// default implementation returns E_NOTIMPL. Override if you have
|
||||
// specific alignment or prefix needs, but could use an upstream
|
||||
// allocator
|
||||
STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES*pProps);
|
||||
STDMETHODIMP GetAllocatorRequirements(__out ALLOCATOR_PROPERTIES*pProps);
|
||||
|
||||
// Release the pin's allocator.
|
||||
HRESULT BreakConnect();
|
||||
@@ -952,25 +952,25 @@ class CDynamicOutputPin : public CBaseOutputPin,
|
||||
public:
|
||||
#ifdef UNICODE
|
||||
CDynamicOutputPin(
|
||||
CHAR *pObjectName,
|
||||
CBaseFilter *pFilter,
|
||||
CCritSec *pLock,
|
||||
HRESULT *phr,
|
||||
LPCWSTR pName);
|
||||
__in_opt LPCSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName);
|
||||
#endif
|
||||
|
||||
CDynamicOutputPin(
|
||||
TCHAR *pObjectName,
|
||||
CBaseFilter *pFilter,
|
||||
CCritSec *pLock,
|
||||
HRESULT *phr,
|
||||
LPCWSTR pName);
|
||||
__in_opt LPCTSTR pObjectName,
|
||||
__in CBaseFilter *pFilter,
|
||||
__in CCritSec *pLock,
|
||||
__inout HRESULT *phr,
|
||||
__in_opt LPCWSTR pName);
|
||||
|
||||
~CDynamicOutputPin();
|
||||
|
||||
// IUnknown Methods
|
||||
DECLARE_IUNKNOWN
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, __deref_out void **ppv);
|
||||
|
||||
// IPin Methods
|
||||
STDMETHODIMP Disconnect(void);
|
||||
@@ -1083,14 +1083,14 @@ private:
|
||||
class CAutoUsingOutputPin
|
||||
{
|
||||
public:
|
||||
CAutoUsingOutputPin( CDynamicOutputPin* pOutputPin, HRESULT* phr );
|
||||
CAutoUsingOutputPin( __in CDynamicOutputPin* pOutputPin, __inout HRESULT* phr );
|
||||
~CAutoUsingOutputPin();
|
||||
|
||||
private:
|
||||
CDynamicOutputPin* m_pOutputPin;
|
||||
};
|
||||
|
||||
inline CAutoUsingOutputPin::CAutoUsingOutputPin( CDynamicOutputPin* pOutputPin, HRESULT* phr ) :
|
||||
inline CAutoUsingOutputPin::CAutoUsingOutputPin( __in CDynamicOutputPin* pOutputPin, __inout HRESULT* phr ) :
|
||||
m_pOutputPin(NULL)
|
||||
{
|
||||
// The caller should always pass in valid pointers.
|
||||
@@ -1213,7 +1213,7 @@ protected:
|
||||
into the top word
|
||||
*/
|
||||
DWORD m_dwTypeSpecificFlags; /* Media type specific flags */
|
||||
LPBYTE m_pBuffer; /* Pointer to the complete buffer */
|
||||
__field_ecount_opt(m_cbBuffer) LPBYTE m_pBuffer; /* Pointer to the complete buffer */
|
||||
LONG m_lActual; /* Length of data in this sample */
|
||||
LONG m_cbBuffer; /* Size of the buffer */
|
||||
CBaseAllocator *m_pAllocator; /* The allocator who owns us */
|
||||
@@ -1231,17 +1231,17 @@ public:
|
||||
public:
|
||||
|
||||
CMediaSample(
|
||||
TCHAR *pName,
|
||||
CBaseAllocator *pAllocator,
|
||||
HRESULT *phr,
|
||||
LPBYTE pBuffer = NULL,
|
||||
__in_opt LPCTSTR pName,
|
||||
__in_opt CBaseAllocator *pAllocator,
|
||||
__inout_opt HRESULT *phr,
|
||||
__in_bcount_opt(length) LPBYTE pBuffer = NULL,
|
||||
LONG length = 0);
|
||||
#ifdef UNICODE
|
||||
CMediaSample(
|
||||
CHAR *pName,
|
||||
CBaseAllocator *pAllocator,
|
||||
HRESULT *phr,
|
||||
LPBYTE pBuffer = NULL,
|
||||
__in_opt LPCSTR pName,
|
||||
__in_opt CBaseAllocator *pAllocator,
|
||||
__inout_opt HRESULT *phr,
|
||||
__in_bcount_opt(length) LPBYTE pBuffer = NULL,
|
||||
LONG length = 0);
|
||||
#endif
|
||||
|
||||
@@ -1249,7 +1249,7 @@ public:
|
||||
|
||||
/* Note the media sample does not delegate to its owner */
|
||||
|
||||
STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
STDMETHODIMP QueryInterface(REFIID riid, __deref_out void **ppv);
|
||||
STDMETHODIMP_(ULONG) AddRef();
|
||||
STDMETHODIMP_(ULONG) Release();
|
||||
|
||||
@@ -1257,23 +1257,23 @@ public:
|
||||
// want variable sized pointers or pointers into already-read data.
|
||||
// This is only available through a CMediaSample* not an IMediaSample*
|
||||
// and so cannot be changed by clients.
|
||||
HRESULT SetPointer(BYTE * ptr, LONG cBytes);
|
||||
HRESULT SetPointer(__in_bcount(cBytes) BYTE * ptr, LONG cBytes);
|
||||
|
||||
// Get me a read/write pointer to this buffer's memory.
|
||||
STDMETHODIMP GetPointer(BYTE ** ppBuffer);
|
||||
STDMETHODIMP GetPointer(__deref_out BYTE ** ppBuffer);
|
||||
|
||||
STDMETHODIMP_(LONG) GetSize(void);
|
||||
|
||||
// get the stream time at which this sample should start and finish.
|
||||
STDMETHODIMP GetTime(
|
||||
REFERENCE_TIME * pTimeStart, // put time here
|
||||
REFERENCE_TIME * pTimeEnd
|
||||
__out REFERENCE_TIME * pTimeStart, // put time here
|
||||
__out REFERENCE_TIME * pTimeEnd
|
||||
);
|
||||
|
||||
// Set the stream time at which this sample should start and finish.
|
||||
STDMETHODIMP SetTime(
|
||||
REFERENCE_TIME * pTimeStart, // put time here
|
||||
REFERENCE_TIME * pTimeEnd
|
||||
__in_opt REFERENCE_TIME * pTimeStart, // put time here
|
||||
__in_opt REFERENCE_TIME * pTimeEnd
|
||||
);
|
||||
STDMETHODIMP IsSyncPoint(void);
|
||||
STDMETHODIMP SetSyncPoint(BOOL bIsSyncPoint);
|
||||
@@ -1285,8 +1285,8 @@ public:
|
||||
|
||||
// these allow for limited format changes in band
|
||||
|
||||
STDMETHODIMP GetMediaType(AM_MEDIA_TYPE **ppMediaType);
|
||||
STDMETHODIMP SetMediaType(AM_MEDIA_TYPE *pMediaType);
|
||||
STDMETHODIMP GetMediaType(__deref_out AM_MEDIA_TYPE **ppMediaType);
|
||||
STDMETHODIMP SetMediaType(__in_opt AM_MEDIA_TYPE *pMediaType);
|
||||
|
||||
// returns S_OK if there is a discontinuity in the data (this same is
|
||||
// not a continuation of the previous stream of data
|
||||
@@ -1298,25 +1298,25 @@ public:
|
||||
|
||||
// get the media times for this sample
|
||||
STDMETHODIMP GetMediaTime(
|
||||
LONGLONG * pTimeStart,
|
||||
LONGLONG * pTimeEnd
|
||||
__out LONGLONG * pTimeStart,
|
||||
__out LONGLONG * pTimeEnd
|
||||
);
|
||||
|
||||
// Set the media times for this sample
|
||||
STDMETHODIMP SetMediaTime(
|
||||
LONGLONG * pTimeStart,
|
||||
LONGLONG * pTimeEnd
|
||||
__in_opt LONGLONG * pTimeStart,
|
||||
__in_opt LONGLONG * pTimeEnd
|
||||
);
|
||||
|
||||
// Set and get properties (IMediaSample2)
|
||||
STDMETHODIMP GetProperties(
|
||||
DWORD cbProperties,
|
||||
BYTE * pbProperties
|
||||
__out_bcount(cbProperties) BYTE * pbProperties
|
||||
);
|
||||
|
||||
STDMETHODIMP SetProperties(
|
||||
DWORD cbProperties,
|
||||
const BYTE * pbProperties
|
||||
__in_bcount(cbProperties) const BYTE * pbProperties
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1344,7 +1344,7 @@ class AM_NOVTABLE CBaseAllocator : public CUnknown,// A non delegating IUnknown
|
||||
friend class CSampleList;
|
||||
|
||||
/* Trick to get at protected member in CMediaSample */
|
||||
static CMediaSample * &NextSample(CMediaSample *pSample)
|
||||
static CMediaSample * &NextSample(__in CMediaSample *pSample)
|
||||
{
|
||||
return pSample->m_pNext;
|
||||
};
|
||||
@@ -1361,9 +1361,9 @@ class AM_NOVTABLE CBaseAllocator : public CUnknown,// A non delegating IUnknown
|
||||
};
|
||||
#endif
|
||||
CMediaSample *Head() const { return m_List; };
|
||||
CMediaSample *Next(CMediaSample *pSample) const { return CBaseAllocator::NextSample(pSample); };
|
||||
CMediaSample *Next(__in CMediaSample *pSample) const { return CBaseAllocator::NextSample(pSample); };
|
||||
int GetCount() const { return m_nOnList; };
|
||||
void Add(CMediaSample *pSample)
|
||||
void Add(__inout CMediaSample *pSample)
|
||||
{
|
||||
ASSERT(pSample != NULL);
|
||||
CBaseAllocator::NextSample(pSample) = m_List;
|
||||
@@ -1379,7 +1379,7 @@ class AM_NOVTABLE CBaseAllocator : public CUnknown,// A non delegating IUnknown
|
||||
}
|
||||
return pSample;
|
||||
};
|
||||
void Remove(CMediaSample *pSample);
|
||||
void Remove(__inout CMediaSample *pSample);
|
||||
|
||||
public:
|
||||
CMediaSample *m_List;
|
||||
@@ -1455,11 +1455,11 @@ protected:
|
||||
public:
|
||||
|
||||
CBaseAllocator(
|
||||
TCHAR *, LPUNKNOWN, HRESULT *,
|
||||
__in_opt LPCTSTR , __inout_opt LPUNKNOWN, __inout HRESULT *,
|
||||
BOOL bEvent = TRUE, BOOL fEnableReleaseCallback = FALSE);
|
||||
#ifdef UNICODE
|
||||
CBaseAllocator(
|
||||
CHAR *, LPUNKNOWN, HRESULT *,
|
||||
__in_opt LPCSTR , __inout_opt LPUNKNOWN, __inout HRESULT *,
|
||||
BOOL bEvent = TRUE, BOOL fEnableReleaseCallback = FALSE);
|
||||
#endif
|
||||
virtual ~CBaseAllocator();
|
||||
@@ -1467,15 +1467,15 @@ public:
|
||||
DECLARE_IUNKNOWN
|
||||
|
||||
// override this to publicise our interfaces
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
|
||||
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, __deref_out void **ppv);
|
||||
|
||||
STDMETHODIMP SetProperties(
|
||||
ALLOCATOR_PROPERTIES* pRequest,
|
||||
ALLOCATOR_PROPERTIES* pActual);
|
||||
__in ALLOCATOR_PROPERTIES* pRequest,
|
||||
__out ALLOCATOR_PROPERTIES* pActual);
|
||||
|
||||
// return the properties actually being used on this allocator
|
||||
STDMETHODIMP GetProperties(
|
||||
ALLOCATOR_PROPERTIES* pProps);
|
||||
__out ALLOCATOR_PROPERTIES* pProps);
|
||||
|
||||
// override Commit to allocate memory. We handle the GetBuffer
|
||||
//state changes
|
||||
@@ -1494,9 +1494,9 @@ public:
|
||||
// bPrevFramesSkipped is not used (used only by the video renderer's
|
||||
// allocator where it affects quality management in direct draw).
|
||||
|
||||
STDMETHODIMP GetBuffer(IMediaSample **ppBuffer,
|
||||
REFERENCE_TIME * pStartTime,
|
||||
REFERENCE_TIME * pEndTime,
|
||||
STDMETHODIMP GetBuffer(__deref_out IMediaSample **ppBuffer,
|
||||
__in_opt REFERENCE_TIME * pStartTime,
|
||||
__in_opt REFERENCE_TIME * pEndTime,
|
||||
DWORD dwFlags);
|
||||
|
||||
// final release of a CMediaSample will call this
|
||||
@@ -1505,7 +1505,7 @@ public:
|
||||
|
||||
STDMETHODIMP SetNotify(IMemAllocatorNotifyCallbackTemp *pNotify);
|
||||
|
||||
STDMETHODIMP GetFreeCount(LONG *plBuffersFree);
|
||||
STDMETHODIMP GetFreeCount(__out LONG *plBuffersFree);
|
||||
|
||||
// Notify that a sample is available
|
||||
void NotifySample();
|
||||
@@ -1532,7 +1532,7 @@ public:
|
||||
//=====================================================================
|
||||
|
||||
// Make me one from quartz.dll
|
||||
STDAPI CreateMemoryAllocator(IMemAllocator **ppAllocator);
|
||||
STDAPI CreateMemoryAllocator(__deref_out IMemAllocator **ppAllocator);
|
||||
|
||||
class CMemAllocator : public CBaseAllocator
|
||||
{
|
||||
@@ -1554,15 +1554,15 @@ protected:
|
||||
|
||||
public:
|
||||
/* This goes in the factory template table to create new instances */
|
||||
static CUnknown *CreateInstance(LPUNKNOWN, HRESULT *);
|
||||
static CUnknown *CreateInstance(__inout_opt LPUNKNOWN, __inout HRESULT *);
|
||||
|
||||
STDMETHODIMP SetProperties(
|
||||
ALLOCATOR_PROPERTIES* pRequest,
|
||||
ALLOCATOR_PROPERTIES* pActual);
|
||||
__in ALLOCATOR_PROPERTIES* pRequest,
|
||||
__out ALLOCATOR_PROPERTIES* pActual);
|
||||
|
||||
CMemAllocator(TCHAR *, LPUNKNOWN, HRESULT *);
|
||||
CMemAllocator(__in_opt LPCTSTR , __inout_opt LPUNKNOWN, __inout HRESULT *);
|
||||
#ifdef UNICODE
|
||||
CMemAllocator(CHAR *, LPUNKNOWN, HRESULT *);
|
||||
CMemAllocator(__in_opt LPCSTR , __inout_opt LPUNKNOWN, __inout HRESULT *);
|
||||
#endif
|
||||
~CMemAllocator();
|
||||
};
|
||||
@@ -4,11 +4,11 @@
|
||||
// Desc: DirectShow base classes - implements helper functions for
|
||||
// bitmap formats.
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#include "streams.h"
|
||||
#include <streams.h>
|
||||
#include <limits.h>
|
||||
|
||||
// These are bit field masks for true colour devices
|
||||
97
3rdparty/baseclasses/baseclasses.vcxproj
vendored
Normal file
97
3rdparty/baseclasses/baseclasses.vcxproj
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(SolutionDir)common\vsprops\BaseProjectConfig.props" />
|
||||
<Import Project="$(SolutionDir)common\vsprops\WinSDK.props" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{27F17499-A372-4408-8AFA-4F9F4584FBD3}</ProjectGuid>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization Condition="$(Configuration.Contains(Release))">true</WholeProgramOptimization>
|
||||
<UseDebugLibraries Condition="$(Configuration.Contains(Debug))">true</UseDebugLibraries>
|
||||
<UseDebugLibraries Condition="!$(Configuration.Contains(Debug))">false</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings" />
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="..\..\3rdparty\DefaultProjectRootDir.props" />
|
||||
<Import Project="..\..\3rdparty\3rdparty.props" />
|
||||
<Import Condition="$(Configuration.Contains(Debug))" Project="..\..\common\vsprops\CodeGen_Debug.props" />
|
||||
<Import Condition="$(Configuration.Contains(Release))" Project="..\..\common\vsprops\CodeGen_Release.props" />
|
||||
<Import Condition="!$(Configuration.Contains(Release))" Project="..\..\common\vsprops\IncrementalLinking.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>streams.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="amextra.h" />
|
||||
<ClInclude Include="amfilter.h" />
|
||||
<ClInclude Include="cache.h" />
|
||||
<ClInclude Include="combase.h" />
|
||||
<ClInclude Include="ctlutil.h" />
|
||||
<ClInclude Include="ddmm.h" />
|
||||
<ClInclude Include="fourcc.h" />
|
||||
<ClInclude Include="measure.h" />
|
||||
<ClInclude Include="msgthrd.h" />
|
||||
<ClInclude Include="mtype.h" />
|
||||
<ClInclude Include="outputq.h" />
|
||||
<ClInclude Include="pstream.h" />
|
||||
<ClInclude Include="pullpin.h" />
|
||||
<ClInclude Include="refclock.h" />
|
||||
<ClInclude Include="reftime.h" />
|
||||
<ClInclude Include="renbase.h" />
|
||||
<ClInclude Include="schedule.h" />
|
||||
<ClInclude Include="seekpt.h" />
|
||||
<ClInclude Include="source.h" />
|
||||
<ClInclude Include="streams.h" />
|
||||
<ClInclude Include="strmctl.h" />
|
||||
<ClInclude Include="sysclock.h" />
|
||||
<ClInclude Include="transfrm.h" />
|
||||
<ClInclude Include="transip.h" />
|
||||
<ClInclude Include="vtrans.h" />
|
||||
<ClInclude Include="wxdebug.h" />
|
||||
<ClInclude Include="wxlist.h" />
|
||||
<ClInclude Include="wxutil.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="amextra.cpp" />
|
||||
<ClCompile Include="amfilter.cpp" />
|
||||
<ClCompile Include="amvideo.cpp" />
|
||||
<ClCompile Include="combase.cpp" />
|
||||
<ClCompile Include="ctlutil.cpp" />
|
||||
<ClCompile Include="ddmm.cpp">
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mtype.cpp" />
|
||||
<ClCompile Include="outputq.cpp" />
|
||||
<ClCompile Include="pstream.cpp" />
|
||||
<ClCompile Include="pullpin.cpp" />
|
||||
<ClCompile Include="refclock.cpp" />
|
||||
<ClCompile Include="renbase.cpp" />
|
||||
<ClCompile Include="schedule.cpp" />
|
||||
<ClCompile Include="seekpt.cpp">
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source.cpp" />
|
||||
<ClCompile Include="strmctl.cpp" />
|
||||
<ClCompile Include="sysclock.cpp" />
|
||||
<ClCompile Include="transfrm.cpp" />
|
||||
<ClCompile Include="transip.cpp" />
|
||||
<ClCompile Include="vtrans.cpp" />
|
||||
<ClCompile Include="wxdebug.cpp" />
|
||||
<ClCompile Include="wxlist.cpp" />
|
||||
<ClCompile Include="wxutil.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets" />
|
||||
</Project>
|
||||
174
3rdparty/baseclasses/baseclasses.vcxproj.filters
vendored
Normal file
174
3rdparty/baseclasses/baseclasses.vcxproj.filters
vendored
Normal file
@@ -0,0 +1,174 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="amextra.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="amfilter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="cache.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="combase.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ctlutil.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ddmm.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="fourcc.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="msgthrd.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="reftime.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="refclock.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="pullpin.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="pstream.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="outputq.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="mtype.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="measure.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="renbase.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="schedule.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="seekpt.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="streams.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="strmctl.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="sysclock.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="transfrm.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="transip.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="vtrans.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="wxdebug.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="wxlist.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="wxutil.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="amextra.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="amfilter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="amvideo.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="combase.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ctlutil.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ddmm.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mtype.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="outputq.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="pstream.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="pullpin.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="refclock.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="renbase.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="schedule.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="seekpt.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="strmctl.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="sysclock.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="transfrm.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="transip.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="vtrans.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="wxdebug.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="wxlist.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="wxutil.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user