mirror of
https://github.com/ares-emulator/ares.git
synced 2026-11-09 17:03:16 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04c608a21e | ||
|
|
8a75015d7e | ||
|
|
330a329abc | ||
|
|
a21f8c074c | ||
|
|
c899461cf1 | ||
|
|
512b53f808 | ||
|
|
2fb2da047c | ||
|
|
cdbd9e0d2c | ||
|
|
745e41a6ee | ||
|
|
ab40ecbb9b | ||
|
|
72ead4d2a6 | ||
|
|
aef110f35d | ||
|
|
e99c9c57b0 | ||
|
|
9c273abec3 | ||
|
|
6cc9f5a416 | ||
|
|
69c20711fc | ||
|
|
539aa9b7d6 | ||
|
|
5d7dbb7eed | ||
|
|
6176287392 | ||
|
|
ce2e6f8c19 | ||
|
|
76ab41c69c | ||
|
|
928d76b0b5 | ||
|
|
c1949d8eb5 | ||
|
|
6946437115 | ||
|
|
76a5f8e1da | ||
|
|
bf9aae53d0 | ||
|
|
1a5559a24b | ||
|
|
af5fa1a1c8 | ||
|
|
4c367fd32f | ||
|
|
2d714d1a9c | ||
|
|
8dbd2135b7 | ||
|
|
c62e2a254c | ||
|
|
dfcd7d4fce | ||
|
|
fa1c21ba3d | ||
|
|
a584782a86 | ||
|
|
6185edc43b | ||
|
|
7772fdbf0a | ||
|
|
fd8bcad5a1 | ||
|
|
da7a79b21e | ||
|
|
639ebe6285 | ||
|
|
9be2f9bb92 | ||
|
|
ce71fff00c | ||
|
|
a91b24acf1 | ||
|
|
c5d316274a | ||
|
|
8444f52843 | ||
|
|
d775c0968b | ||
|
|
c76b87cdb2 | ||
|
|
2197df8cca | ||
|
|
324a192109 | ||
|
|
4a9b77a5e1 | ||
|
|
a27c2a2b3a | ||
|
|
34124fd1cc | ||
|
|
f6b58b076b | ||
|
|
b4b026db28 | ||
|
|
05898a6a04 | ||
|
|
331c4956b0 | ||
|
|
d6c42e59e4 | ||
|
|
58661451ed | ||
|
|
e808d2c5ab | ||
|
|
445acba894 | ||
|
|
07fa6bc265 | ||
|
|
3e5ed40801 | ||
|
|
10b747c305 | ||
|
|
2ed2ed34bc | ||
|
|
41b61ee6d5 | ||
|
|
a960aeef52 | ||
|
|
1eb0a1659a | ||
|
|
c19a2ac1b2 | ||
|
|
8642d35e5f | ||
|
|
80db392140 | ||
|
|
a2400ad43a | ||
|
|
e8cd9b3e04 | ||
|
|
e04922c4d5 | ||
|
|
69795d578a | ||
|
|
8433666dc2 | ||
|
|
ecdce5e92b | ||
|
|
0b4fea8ce5 | ||
|
|
5bcef4741a | ||
|
|
3b18a3f808 | ||
|
|
7d327a2c8a | ||
|
|
07bafb6a51 | ||
|
|
1bb1669b03 | ||
|
|
a752b85d6f | ||
|
|
a02c0f80de | ||
|
|
50ceb088ef | ||
|
|
65618ce1e2 | ||
|
|
4691971416 | ||
|
|
98d9eb7786 | ||
|
|
431aba5a1a | ||
|
|
78e5332361 | ||
|
|
687bfe8efc | ||
|
|
7cc6d517a2 | ||
|
|
3bd385e4a8 | ||
|
|
de2d7d86c9 | ||
|
|
a0d8ce25c5 | ||
|
|
557ecb5319 | ||
|
|
8cc98f94ae | ||
|
|
7e5d749adc | ||
|
|
675d57b6fa | ||
|
|
28cfa89970 | ||
|
|
8668f98fa5 | ||
|
|
8f772cdb01 | ||
|
|
229e16df98 | ||
|
|
36290b9705 | ||
|
|
014d0130f5 | ||
|
|
d6465d0daa | ||
|
|
802a902cd3 | ||
|
|
2bf4e28db5 | ||
|
|
1469299363 | ||
|
|
1e6e9fd36e | ||
|
|
8111bf3163 | ||
|
|
c287c1b225 | ||
|
|
863593ed7f | ||
|
|
c20d405006 | ||
|
|
e1e1bedb2d | ||
|
|
9f060c769b | ||
|
|
e7f9af4bbd | ||
|
|
65c34c2ea4 | ||
|
|
9babe6a02b | ||
|
|
7e5292cd16 | ||
|
|
a8274cd127 | ||
|
|
d99b0a3725 | ||
|
|
e43f3f75f7 | ||
|
|
f894a85253 | ||
|
|
09fbcc4e65 | ||
|
|
38dd6defa9 | ||
|
|
73d90e6e7c | ||
|
|
b2175473f0 | ||
|
|
030488aba7 | ||
|
|
bc2a54800f | ||
|
|
6e182d8542 | ||
|
|
38f64fa70c | ||
|
|
7eb1b28671 | ||
|
|
42c16831b7 | ||
|
|
5982fa8ae3 | ||
|
|
5f435345f1 | ||
|
|
8343f8136c | ||
|
|
4dcba42240 | ||
|
|
81d5cdba32 | ||
|
|
5151003fa4 | ||
|
|
349f1d281c | ||
|
|
c6a838d6ee | ||
|
|
cac4aab301 | ||
|
|
5911338cac | ||
|
|
c0af33d4ce | ||
|
|
ea77623238 | ||
|
|
033752679f | ||
|
|
025fc6450a | ||
|
|
d6858ad821 | ||
|
|
0b46609e95 | ||
|
|
b5a8edc5d0 | ||
|
|
757a7dd670 | ||
|
|
950573df14 | ||
|
|
f43da416fd | ||
|
|
18f45ddc85 | ||
|
|
7135646c44 | ||
|
|
4ab8472a53 | ||
|
|
a47e793b57 | ||
|
|
1ffb4f6d5a | ||
|
|
aa350116d4 | ||
|
|
e8a5579cb7 | ||
|
|
f091fcfacd | ||
|
|
fa9d350a66 | ||
|
|
5ff5df0e2e | ||
|
|
efb7f61f04 | ||
|
|
3cd82c8cfe | ||
|
|
ace4115c86 | ||
|
|
31ca4552ea | ||
|
|
873aded84b | ||
|
|
4dc46976ef | ||
|
|
156603ceff | ||
|
|
12f0d04709 | ||
|
|
693447d0e0 | ||
|
|
27719b391b | ||
|
|
3455da48df | ||
|
|
dac6a2069f | ||
|
|
39174a2a79 | ||
|
|
23e322fd57 | ||
|
|
5c0c1fb4aa | ||
|
|
c27a62b624 | ||
|
|
9c93735045 | ||
|
|
9e03af99d9 | ||
|
|
eec5104909 | ||
|
|
00a67f1671 | ||
|
|
a76847dbd6 | ||
|
|
f209d544b0 | ||
|
|
5453fe084a | ||
|
|
426fb79639 | ||
|
|
33c645a441 | ||
|
|
ba9a291784 | ||
|
|
9fb67ba7a7 | ||
|
|
54794f86d9 | ||
|
|
7f43d0658e | ||
|
|
0d24374019 | ||
|
|
78a5e584b5 | ||
|
|
ffe97222a1 | ||
|
|
71e5f89f8b | ||
|
|
cac454a6a9 | ||
|
|
6c8265577c | ||
|
|
401aab6d64 | ||
|
|
c0fb9ba815 | ||
|
|
356208f312 | ||
|
|
fbf10d14fc | ||
|
|
723d8a8cd4 | ||
|
|
6eedb9399b | ||
|
|
36f821f5ac | ||
|
|
3bbfde5e9b | ||
|
|
b8e355b218 | ||
|
|
c34ed82fa3 | ||
|
|
3de728fa3b | ||
|
|
2b0738ec56 | ||
|
|
79e25f30bf | ||
|
|
5bf09dac13 | ||
|
|
b4fafd9028 | ||
|
|
21f730968b | ||
|
|
6cd4470562 | ||
|
|
393ba03358 | ||
|
|
9159438401 | ||
|
|
3372230021 | ||
|
|
8c4af6ac4c | ||
|
|
b5ee4124e1 | ||
|
|
4dbd6fad37 | ||
|
|
a876f4479d | ||
|
|
afa3f08f8c | ||
|
|
371d6eeaa8 | ||
|
|
e1a940cafa | ||
|
|
7c4a36a482 | ||
|
|
bea295a915 | ||
|
|
db1d29ebcf | ||
|
|
54845f6194 | ||
|
|
7c7d2c2155 | ||
|
|
edb88e2e3a | ||
|
|
ac75269342 | ||
|
|
bfc9636403 | ||
|
|
c6ca36e447 | ||
|
|
4e97f23446 | ||
|
|
d7dfae7a7a | ||
|
|
62f1512d44 | ||
|
|
e6481d975e | ||
|
|
61a94f025e | ||
|
|
d76e79076f | ||
|
|
a574410a03 | ||
|
|
dc97c814a3 | ||
|
|
9325b04b23 | ||
|
|
762a2302f7 | ||
|
|
2b6346df6e | ||
|
|
587aa20dcc | ||
|
|
4615a9f4b7 | ||
|
|
fc7cdb57f7 | ||
|
|
0a8f25e7d8 | ||
|
|
f3cdf203c3 | ||
|
|
76615ce847 | ||
|
|
5e04d6d31b | ||
|
|
2d81319a2f | ||
|
|
4b3b8b9f5b | ||
|
|
36df7ab00f | ||
|
|
47d6d25687 | ||
|
|
117f4f7b4e | ||
|
|
c23a3f736d | ||
|
|
dd25ac4f72 | ||
|
|
804e6699a4 | ||
|
|
c2dede6c85 | ||
|
|
6cabb5d118 | ||
|
|
5c92d877c8 | ||
|
|
9db8decbd6 | ||
|
|
0ef0a3e3a7 | ||
|
|
dbb3b85bb3 | ||
|
|
c94794e959 | ||
|
|
2abc056d06 | ||
|
|
9664144d1b | ||
|
|
f31d209883 | ||
|
|
21209edad6 | ||
|
|
8f3261e870 | ||
|
|
a65bf18645 | ||
|
|
a327e9b953 | ||
|
|
672e81572c | ||
|
|
deb1cf6d79 | ||
|
|
70f833957e | ||
|
|
8b5e30dad9 | ||
|
|
9fb9dd59ba | ||
|
|
67fc9ea81b | ||
|
|
4f834bd506 | ||
|
|
785c148768 | ||
|
|
cfda608bc2 | ||
|
|
f94e053767 | ||
|
|
6e8bcd9bda | ||
|
|
57c01b8e17 | ||
|
|
bf5536cb18 | ||
|
|
e33f6e4056 | ||
|
|
ffccbc6e9c | ||
|
|
caecd0bca2 | ||
|
|
1b3e826575 | ||
|
|
a6d380fb57 | ||
|
|
edf25196ee | ||
|
|
de8f344b89 | ||
|
|
8498b95ab5 | ||
|
|
8a547cacc0 | ||
|
|
1bdfa3e21a | ||
|
|
b5cd509a77 | ||
|
|
fb2cdd9b71 | ||
|
|
eaab017b26 | ||
|
|
74deb9351d | ||
|
|
cfa7f123de | ||
|
|
dd7fd4ea52 | ||
|
|
5229e0f93a | ||
|
|
dc466a69f4 | ||
|
|
61a1304210 | ||
|
|
5b6899419c | ||
|
|
9d1984a2bd | ||
|
|
99a87acdf2 | ||
|
|
fd8e717707 | ||
|
|
426947c0cb | ||
|
|
043c5e0de1 | ||
|
|
5104b34f2c | ||
|
|
66ecd2e65c | ||
|
|
7ad14ff6bf | ||
|
|
feffcc22cf | ||
|
|
ca0044b663 | ||
|
|
35299b18d3 | ||
|
|
8316233b3e | ||
|
|
2ad5d0a562 | ||
|
|
ec0b625ea5 | ||
|
|
a3c57b4fbd | ||
|
|
e24e89b272 | ||
|
|
6d3bc6044a | ||
|
|
ae2ec42c60 | ||
|
|
3288e476a0 | ||
|
|
3da6974ae4 | ||
|
|
ea7f9a8c0f | ||
|
|
1ea995f78d | ||
|
|
4782fa43a0 | ||
|
|
5ee8f117a1 | ||
|
|
f515ed15c5 | ||
|
|
39c73a89ff | ||
|
|
feebb5b698 | ||
|
|
db2e0d45e1 | ||
|
|
b145f0f000 | ||
|
|
0af2690e50 | ||
|
|
7438418d97 | ||
|
|
8ff104393e | ||
|
|
8aaa89df6b | ||
|
|
dd1ca486ec | ||
|
|
fd7f5bea38 | ||
|
|
facd8afea4 | ||
|
|
72fa7d38c3 | ||
|
|
ba31eafda9 | ||
|
|
7eb0fb268b | ||
|
|
1c876d8bf6 | ||
|
|
40a461621d | ||
|
|
61b358e45b | ||
|
|
ad70fadc8e | ||
|
|
1bd36fb2cc | ||
|
|
f7d6650c26 | ||
|
|
69daac5356 | ||
|
|
5440ef5a4f | ||
|
|
ae89968e2c | ||
|
|
571832a83d | ||
|
|
a04c215003 | ||
|
|
7be6217102 | ||
|
|
a29cd2ce58 | ||
|
|
d5d3d169ca | ||
|
|
9ae2e43c68 | ||
|
|
5815c9d746 | ||
|
|
3e49cebfa4 | ||
|
|
0c8eaf0d4e | ||
|
|
f0fd88f33e | ||
|
|
827babcbbc | ||
|
|
4666cdb9b8 | ||
|
|
c9c1a0d532 | ||
|
|
d53fdb0087 | ||
|
|
c564dc7bc5 | ||
|
|
0111abc565 | ||
|
|
65264090b0 | ||
|
|
70f361094b | ||
|
|
be8fa76e7d | ||
|
|
66dbed4ee0 | ||
|
|
05c749f09b | ||
|
|
b4399c59cc | ||
|
|
37145465f7 | ||
|
|
8b88e3093e | ||
|
|
33a00d4da0 | ||
|
|
71302c0938 | ||
|
|
b702465cc1 | ||
|
|
b822fb3224 | ||
|
|
cc850c7dc1 | ||
|
|
f18c1f9c67 | ||
|
|
ff98ad031c | ||
|
|
39025af1fe | ||
|
|
5cdefb088d | ||
|
|
d0253599a6 | ||
|
|
1e83da0241 | ||
|
|
ed0a1c8852 | ||
|
|
dd9c728a12 | ||
|
|
7ec1e1430c | ||
|
|
16379aabff | ||
|
|
11f24b47c3 | ||
|
|
32f205975c | ||
|
|
21ca9cf76e | ||
|
|
d32b3ffe45 | ||
|
|
5864382c67 | ||
|
|
f392e4f428 | ||
|
|
d0075978f8 | ||
|
|
c1e5777dc1 | ||
|
|
9bc95db1f0 | ||
|
|
ec6c9fc330 | ||
|
|
6d80a8e940 | ||
|
|
2a0f9651b9 | ||
|
|
51a10b0bd0 | ||
|
|
7e2f490fd0 | ||
|
|
2063393f20 | ||
|
|
4c15ed753e | ||
|
|
704fc91b9c | ||
|
|
757d74bac0 | ||
|
|
ff36889d47 | ||
|
|
3d10cd34d6 | ||
|
|
acaa1cabb5 | ||
|
|
e8f38d15f7 | ||
|
|
527aaefef1 | ||
|
|
a938ef8aa8 | ||
|
|
91658b989a | ||
|
|
801eaa4088 | ||
|
|
d6b2ca53e2 | ||
|
|
d823641ccc | ||
|
|
dec675896d | ||
|
|
e2caf175d6 | ||
|
|
322c99ca75 | ||
|
|
b28bb3dbd7 | ||
|
|
3f4334e5ff | ||
|
|
99a40e43ef | ||
|
|
9bbe36d73c | ||
|
|
4bae7965f9 | ||
|
|
9e4b3795f1 | ||
|
|
a82913c1f9 | ||
|
|
b7db1c074b | ||
|
|
1478637209 | ||
|
|
432c4e3b2a | ||
|
|
18c84a83e4 | ||
|
|
c4bc588082 | ||
|
|
ed3083db8a | ||
|
|
6d5ef628e8 | ||
|
|
6e8f4f224a | ||
|
|
4bdeb3727f | ||
|
|
20a3aac83b | ||
|
|
2950d3fe44 | ||
|
|
b55c5010f3 | ||
|
|
f893afca89 | ||
|
|
0d131bf4d8 | ||
|
|
7e99155f8e | ||
|
|
c95dc1bad7 | ||
|
|
b85395fe7b | ||
|
|
91c46dbad4 | ||
|
|
6a253b17af | ||
|
|
4116855924 | ||
|
|
1146c0def3 | ||
|
|
e176d8b3ee | ||
|
|
9b5e339cc1 | ||
|
|
8f626e304a | ||
|
|
bbe9a9b0a4 | ||
|
|
c00e402eeb | ||
|
|
5e6afeaa5e | ||
|
|
a3222abe79 | ||
|
|
b0ee66d4ad | ||
|
|
6567d9dcf0 | ||
|
|
9a8e7f8b6e | ||
|
|
1c9d38895d | ||
|
|
cd11421d72 | ||
|
|
079295e2ca | ||
|
|
2a819403db | ||
|
|
df031a7d4c | ||
|
|
0dd3edebe0 | ||
|
|
f9d38f5daf | ||
|
|
d381bb4678 | ||
|
|
3392783359 | ||
|
|
67c6bfa4a5 | ||
|
|
8cea0b8329 | ||
|
|
4f7feeafd7 | ||
|
|
bcb60a6e1b | ||
|
|
af0713858c | ||
|
|
d3b11e4339 | ||
|
|
7faebad713 | ||
|
|
92c1c2ec44 | ||
|
|
bff2738163 | ||
|
|
8a4bf9d82c | ||
|
|
4537145d24 | ||
|
|
4544e1df69 | ||
|
|
30cc370e40 | ||
|
|
4a48753ea3 | ||
|
|
52df41a709 | ||
|
|
dc385dbe6e | ||
|
|
df8d5a6157 | ||
|
|
de1c12737a | ||
|
|
da9c82956a | ||
|
|
4dd837ae41 | ||
|
|
fa0f9a715f | ||
|
|
87ae65a094 | ||
|
|
0ceaf17be6 | ||
|
|
e7760bfc51 | ||
|
|
c27f369e31 | ||
|
|
020410ea0b | ||
|
|
6fbea44d3d | ||
|
|
d2e20f0d05 | ||
|
|
e589f8d9cf | ||
|
|
d201d6a547 | ||
|
|
7dc11a1c39 | ||
|
|
89e0001275 | ||
|
|
5b744c324d | ||
|
|
a47bbea7a2 | ||
|
|
414c205256 | ||
|
|
f1fb33af8e | ||
|
|
84e3663e80 | ||
|
|
77bfad91d8 | ||
|
|
cd8d84ed5b | ||
|
|
44b0c2c532 | ||
|
|
02dcc63431 | ||
|
|
864bc6e6d6 | ||
|
|
a572a97d10 | ||
|
|
939617aad9 | ||
|
|
ca6ada73ab | ||
|
|
e457e05c8b | ||
|
|
d8e462035d | ||
|
|
da3adb4daa | ||
|
|
3ebfb4433e | ||
|
|
0bea9d3a2e | ||
|
|
785edf60c8 | ||
|
|
62f5c36c17 | ||
|
|
ed35f2249b | ||
|
|
3fa22458f4 | ||
|
|
708247ab38 | ||
|
|
88a14fb5f2 | ||
|
|
5f55b6cf27 | ||
|
|
74e10c45f3 | ||
|
|
5984867fce | ||
|
|
dd01cf762b | ||
|
|
bfa1eeafde | ||
|
|
0661e9858c | ||
|
|
7b433f305f | ||
|
|
1c61fc95e6 | ||
|
|
401df969b0 | ||
|
|
5deec7ede5 | ||
|
|
6a7de62674 | ||
|
|
b7be6612b9 | ||
|
|
f976cdc3a8 | ||
|
|
e369049d0a | ||
|
|
72d8179bf0 | ||
|
|
8ed4af8b57 | ||
|
|
bcddb7a68f | ||
|
|
5c9f5419b0 | ||
|
|
4b3b78b77e | ||
|
|
07c320e55a | ||
|
|
506820bac7 | ||
|
|
46ddcac339 | ||
|
|
1349d45a51 | ||
|
|
ff11f77f92 | ||
|
|
f9c110cd49 | ||
|
|
379091bada | ||
|
|
ba475a7a59 | ||
|
|
06e1ac13ef | ||
|
|
675026ffdd | ||
|
|
f0449e36ff | ||
|
|
0f265028f2 | ||
|
|
0b2544a6cf | ||
|
|
99afcff4c7 | ||
|
|
a652e85069 | ||
|
|
51061e16af | ||
|
|
4e66bc0b32 | ||
|
|
0c6784294c | ||
|
|
4f5b5da64f | ||
|
|
2a6454a710 | ||
|
|
562bcd7b20 | ||
|
|
db5f7d7867 | ||
|
|
3e9ee7423d | ||
|
|
1215b37448 | ||
|
|
85488a7404 | ||
|
|
5eccee8457 | ||
|
|
671669b209 | ||
|
|
fe9a80b9eb | ||
|
|
4216a0c2c4 | ||
|
|
8ba3bd6348 | ||
|
|
546aed6852 | ||
|
|
b11ff923b9 | ||
|
|
4509471ce2 | ||
|
|
72cd3c5a65 | ||
|
|
929ad45380 | ||
|
|
bb67742864 | ||
|
|
b439a0d90a | ||
|
|
a96395a1c1 | ||
|
|
70675c0644 | ||
|
|
950d9a1967 | ||
|
|
2682e929d8 | ||
|
|
cd924569d2 | ||
|
|
0d27a86e01 | ||
|
|
38628f9c85 | ||
|
|
405ac8289c | ||
|
|
b29fb91777 | ||
|
|
9280622d29 | ||
|
|
714ecc1322 | ||
|
|
04525a7426 | ||
|
|
cc3f4543b1 | ||
|
|
2f65f315e1 | ||
|
|
de57072f83 | ||
|
|
9225847d40 | ||
|
|
6669e3e84b | ||
|
|
703e2ea49a | ||
|
|
40a6b8d36a | ||
|
|
d5381e47a2 | ||
|
|
7ea42e3201 | ||
|
|
c7c80d07ee | ||
|
|
5faa14b504 | ||
|
|
1647d3f4ef | ||
|
|
62eadd89e0 | ||
|
|
9fae1a48c2 | ||
|
|
166856f4dd | ||
|
|
48e4ee55c0 | ||
|
|
e8b85524d9 | ||
|
|
3854a1d1e8 | ||
|
|
090f8765c2 | ||
|
|
8ae96164ef | ||
|
|
5a647e77ad | ||
|
|
6c7bdf9c1a | ||
|
|
21a730b037 | ||
|
|
5d38bd3744 | ||
|
|
3d3838d8b4 | ||
|
|
d1ddbd504a | ||
|
|
c88f26230e | ||
|
|
ecab4fdca0 | ||
|
|
3581be3c44 | ||
|
|
2950cef605 | ||
|
|
aab3b447e7 | ||
|
|
ea665be25a | ||
|
|
e8f4554f24 | ||
|
|
0ba0e5f85e | ||
|
|
7dea8162db | ||
|
|
d4fd326630 | ||
|
|
cb19cdbf90 | ||
|
|
ec12ccc6ff | ||
|
|
59deec8b45 | ||
|
|
ef53e87b31 | ||
|
|
631085f1e6 | ||
|
|
543dec41b8 | ||
|
|
72ab5278b2 | ||
|
|
93937e8603 | ||
|
|
8476c880bc | ||
|
|
e39efe170b | ||
|
|
133044afa9 | ||
|
|
c78f06e208 | ||
|
|
f5dc3bbd48 | ||
|
|
ea688c7721 | ||
|
|
35c8f5f760 | ||
|
|
97aa37f040 | ||
|
|
8752695b4d | ||
|
|
cea1adcb44 | ||
|
|
91b6c7ac14 | ||
|
|
862bfec9e9 | ||
|
|
dad3db5498 | ||
|
|
f396a9cf60 | ||
|
|
beaab1791a | ||
|
|
cc6b26c8d7 | ||
|
|
a5319fdc07 | ||
|
|
c2c3c0f0f8 | ||
|
|
3c773a90eb | ||
|
|
8574a5879b | ||
|
|
3fd03e7a32 | ||
|
|
0130187f82 | ||
|
|
fde1f55f42 | ||
|
|
5337a4bfb8 | ||
|
|
6bf0d1ffcd | ||
|
|
aff3513931 | ||
|
|
9fb87dc0c9 | ||
|
|
a10b9ce0e9 | ||
|
|
ffcce5823c | ||
|
|
78f439dad1 | ||
|
|
251ea7c0de | ||
|
|
12b4530f39 | ||
|
|
c4a5fcea9a | ||
|
|
ef3d784ae4 | ||
|
|
14552167a2 | ||
|
|
8593f3e980 | ||
|
|
a617f2160d | ||
|
|
a18ad47482 | ||
|
|
e6c0c15114 | ||
|
|
2cfb4a98ec | ||
|
|
8a89b5a53a | ||
|
|
352f2202e2 | ||
|
|
7233efbc39 | ||
|
|
dbd779376a | ||
|
|
ecba464a58 | ||
|
|
fb711deb0d | ||
|
|
d901f4e336 | ||
|
|
631b0f6452 | ||
|
|
3de3f99ad1 | ||
|
|
d201c4827a | ||
|
|
2ccd7ba670 | ||
|
|
8e62cd8162 | ||
|
|
8b45d04288 | ||
|
|
c94c7a9b85 | ||
|
|
ee6a7fe78d | ||
|
|
d3a71803ed | ||
|
|
1e5eed8f21 | ||
|
|
697b3b6503 | ||
|
|
7812cc1818 | ||
|
|
499c964986 | ||
|
|
49fac42e69 | ||
|
|
2b746cd26c | ||
|
|
dafb57010c | ||
|
|
cab7096e0f | ||
|
|
a3d6392e1c | ||
|
|
b4221bcaaf | ||
|
|
feab2746da | ||
|
|
eccd72d17f | ||
|
|
d3228ea52d | ||
|
|
bff8a1413f | ||
|
|
d6f216928c | ||
|
|
92099bec6f | ||
|
|
1b148ab9cb | ||
|
|
d3e7ced3b4 | ||
|
|
9cf118a72f | ||
|
|
cc81fd1015 | ||
|
|
da45ad792b | ||
|
|
8feff4afa3 | ||
|
|
104e4bd66d | ||
|
|
5f891de18a | ||
|
|
83b43e8405 | ||
|
|
682fc36ac7 | ||
|
|
d7fd2ccba8 | ||
|
|
66e01e02cc | ||
|
|
76cf49834a | ||
|
|
f8f1729cbe | ||
|
|
181570e50d | ||
|
|
878419da0e | ||
|
|
fbaf7d8118 | ||
|
|
345a7cb89f | ||
|
|
2650062d70 | ||
|
|
2b0c91e3c3 | ||
|
|
15bb0e0593 | ||
|
|
2e472e8401 | ||
|
|
53af7cbbcc | ||
|
|
bafa58534a | ||
|
|
495803ea63 | ||
|
|
7f09b67df9 | ||
|
|
8ddd630850 | ||
|
|
5f9804fb65 | ||
|
|
e142c3be5a | ||
|
|
6e367916da | ||
|
|
c4863ef672 | ||
|
|
ad978f3daf | ||
|
|
fbdd42beb6 | ||
|
|
a349770472 | ||
|
|
08c00d186a | ||
|
|
4c3786b067 | ||
|
|
a8f3e353cd | ||
|
|
98dc6faefb | ||
|
|
41157ad555 | ||
|
|
3e9ce82ccb | ||
|
|
43cfbd629c | ||
|
|
509d749663 | ||
|
|
71d5a59c19 | ||
|
|
bf9caa706c | ||
|
|
8bac0decbe | ||
|
|
4e73783cc1 | ||
|
|
257a6db658 | ||
|
|
e02938c23f | ||
|
|
f0fe40d5da | ||
|
|
990fd4e21c | ||
|
|
6769031bfb | ||
|
|
013b4f2645 | ||
|
|
75821d404b | ||
|
|
0311d1ca56 | ||
|
|
6a7898396a | ||
|
|
a4dbeb45d1 | ||
|
|
d13715d8bb | ||
|
|
03bfe5a3ab | ||
|
|
9b32ef7faa | ||
|
|
c05d7b2070 | ||
|
|
239a902a77 | ||
|
|
b7da32113f | ||
|
|
cbc3acada1 | ||
|
|
75e17ca213 | ||
|
|
0d376ddb24 | ||
|
|
cff8b55310 | ||
|
|
acff6a93ad | ||
|
|
fdea53cad4 | ||
|
|
ca03794534 | ||
|
|
4c646c539e | ||
|
|
7c74821b78 | ||
|
|
019ceea8d6 | ||
|
|
33a406701e | ||
|
|
9bfa1fe7ce | ||
|
|
21c24b31ad | ||
|
|
98b3c8ef7b | ||
|
|
f514327594 | ||
|
|
4c3b7b636f | ||
|
|
2c867d37e6 | ||
|
|
901cfd7e52 | ||
|
|
7565591cf8 | ||
|
|
6502327ad2 | ||
|
|
d5cba61203 | ||
|
|
3ae339ae14 | ||
|
|
26d63dd04a | ||
|
|
f9d54ebbb0 | ||
|
|
1508f6b488 | ||
|
|
146bc3764d | ||
|
|
4cfa728413 | ||
|
|
600964d722 | ||
|
|
241f0e9a36 | ||
|
|
462afe89f8 | ||
|
|
7e237528b4 | ||
|
|
076d73fafb | ||
|
|
9ab140b289 | ||
|
|
4418470316 | ||
|
|
fda7c79b51 | ||
|
|
4713fb37cc | ||
|
|
84b5222332 | ||
|
|
f11ad490cd | ||
|
|
4b2b00a834 | ||
|
|
608556e0a9 | ||
|
|
f2ca7a973c | ||
|
|
be869f9772 | ||
|
|
5a4d333734 | ||
|
|
81692a076c | ||
|
|
b6350b3c0f | ||
|
|
0734768955 | ||
|
|
4aa3b27de2 | ||
|
|
89b3e5a20b | ||
|
|
65a3d38a2a | ||
|
|
aa9c641083 | ||
|
|
b178d3d51a | ||
|
|
32bfb2ed08 | ||
|
|
7f7cc868c4 | ||
|
|
334101d599 | ||
|
|
65e6d0a397 | ||
|
|
fff03a3d56 | ||
|
|
bbbd621130 | ||
|
|
fc50ad03ae | ||
|
|
b7a1fe926a | ||
|
|
c4588ee4f4 | ||
|
|
21d5bf4183 | ||
|
|
e38b7e586d | ||
|
|
e01d5c1866 | ||
|
|
4e96e39ab2 | ||
|
|
9fce98f7d7 | ||
|
|
91c0844f19 | ||
|
|
b872687145 | ||
|
|
8914915b31 | ||
|
|
188171b49d | ||
|
|
4befb14e47 | ||
|
|
42118b22e4 | ||
|
|
8af10a6816 | ||
|
|
6dd3fdca68 | ||
|
|
56a848b59d | ||
|
|
ac06c41145 | ||
|
|
267b6e0f21 | ||
|
|
164775e4a7 | ||
|
|
c2004f6ad5 | ||
|
|
832a2ada10 | ||
|
|
383d2db303 | ||
|
|
358985e8c1 | ||
|
|
41b6147ca7 | ||
|
|
6868f1bf1d | ||
|
|
4d43b2ce1f | ||
|
|
c41666fee6 | ||
|
|
768a4724af | ||
|
|
2ed64ef858 | ||
|
|
b269647a9f | ||
|
|
db97949965 | ||
|
|
81a67475dd | ||
|
|
92211c78ec | ||
|
|
1359f36703 | ||
|
|
ae9c3ae728 | ||
|
|
d61664e724 | ||
|
|
ec21b9f44c | ||
|
|
6822628135 | ||
|
|
0a6147c177 | ||
|
|
9b521dd87b | ||
|
|
e4fee670ad | ||
|
|
3a6113846f | ||
|
|
a0c7b3bf6a | ||
|
|
11003eb5f1 | ||
|
|
dadf0d4228 | ||
|
|
4fede70705 | ||
|
|
b984bb52e9 | ||
|
|
b6bdd06c4e | ||
|
|
c57130a4bf | ||
|
|
7a9a99f62c | ||
|
|
8156a7b760 | ||
|
|
ff5c8acd9a | ||
|
|
6584f6e691 | ||
|
|
662c1f7b66 | ||
|
|
4b70e4e891 | ||
|
|
2e6531a036 | ||
|
|
a79a9f0fbf | ||
|
|
326616f936 | ||
|
|
d213010a72 | ||
|
|
8b80201d16 | ||
|
|
c23d842a90 | ||
|
|
8b93f57293 | ||
|
|
a0f46b4dac | ||
|
|
d4f9caee65 | ||
|
|
5e48762c48 | ||
|
|
0ba4f49e04 | ||
|
|
cc8cf2539f | ||
|
|
663e341584 | ||
|
|
b4f6912d68 | ||
|
|
9f6a1548d1 | ||
|
|
2e8ac93a42 | ||
|
|
41b0a55af3 | ||
|
|
a6d4fd7c3e | ||
|
|
99d711497e | ||
|
|
518666b18a | ||
|
|
6d6c058d25 | ||
|
|
48e7bdc3b4 | ||
|
|
c46abdf02e | ||
|
|
0cbac7df02 | ||
|
|
9355fc2228 | ||
|
|
08b48cec4c | ||
|
|
0480285fa7 | ||
|
|
7770327d3c | ||
|
|
e57e77cb11 | ||
|
|
4c73d18494 | ||
|
|
1918c912c5 | ||
|
|
e6912d4514 | ||
|
|
12dbcb1b40 | ||
|
|
45a4f1a366 | ||
|
|
a51a52263a | ||
|
|
b395886327 | ||
|
|
95215dec1d | ||
|
|
b697623c13 | ||
|
|
d965cc8f13 | ||
|
|
00de20af93 | ||
|
|
8097ae3ae5 | ||
|
|
a63d20c0d1 | ||
|
|
5c05e80c48 | ||
|
|
f9b5a8a3a6 | ||
|
|
5db4443529 | ||
|
|
2f27d00d60 | ||
|
|
c03099fa51 | ||
|
|
ba3b00cd05 | ||
|
|
9ccab8b676 | ||
|
|
188bda9259 | ||
|
|
d749af17db | ||
|
|
539cd5cc15 | ||
|
|
1ad25e180c | ||
|
|
5220b1483e | ||
|
|
6869bbb971 | ||
|
|
458e4f6ca5 | ||
|
|
e9bcabf693 | ||
|
|
a1adfbba22 | ||
|
|
1d8dc20148 | ||
|
|
7f9346e5ec | ||
|
|
ad16c4a67a | ||
|
|
21c985b3da | ||
|
|
cb01795df6 | ||
|
|
ec87c304fa | ||
|
|
8eb2ff3eab | ||
|
|
de24f56cba | ||
|
|
90b0b19bf5 | ||
|
|
142ae1be99 | ||
|
|
e57c241424 | ||
|
|
1888b2934b | ||
|
|
3af6f1bf59 | ||
|
|
f088cfc31c | ||
|
|
3eff1d2efb | ||
|
|
88c347fdaa | ||
|
|
8f69189429 | ||
|
|
95ed00c0d2 | ||
|
|
463c52afe6 | ||
|
|
e39a4d979d | ||
|
|
6092f2bcff | ||
|
|
7bafe50098 | ||
|
|
fe50e29827 | ||
|
|
d862eeaf79 | ||
|
|
f08e7c66b3 | ||
|
|
7d1d5d1e68 | ||
|
|
f333f28cea | ||
|
|
a370a0eb5a | ||
|
|
5018755374 | ||
|
|
3d4db007a9 | ||
|
|
706a5850a1 | ||
|
|
0a9a6b58c2 | ||
|
|
0d588e0c0a | ||
|
|
9b74e87507 | ||
|
|
6b15519c9d | ||
|
|
e655b3c096 | ||
|
|
f3f1e4adcb | ||
|
|
516c2c6eba | ||
|
|
131e353b9b | ||
|
|
6d1a3a420c | ||
|
|
7b1a58aa47 | ||
|
|
ef1f05848e | ||
|
|
89718ab50a | ||
|
|
21cf7c99bf | ||
|
|
dabc688b26 | ||
|
|
ae179fef67 | ||
|
|
ec055dafcc | ||
|
|
8a71af4be1 | ||
|
|
c47afd5c76 | ||
|
|
f037be9248 | ||
|
|
48fa446eeb | ||
|
|
3fd666c583 | ||
|
|
9eb14aea6f | ||
|
|
3db5740bd3 | ||
|
|
3c226ed0ca | ||
|
|
191393445e | ||
|
|
621301990a | ||
|
|
d40b890d83 | ||
|
|
1891477e12 | ||
|
|
86207ff3a3 | ||
|
|
72956e4ba0 | ||
|
|
1256987e9c | ||
|
|
517dd3efc6 | ||
|
|
9176ed7418 | ||
|
|
4f4ec10cdf | ||
|
|
14db9f1ead | ||
|
|
81be3393dc | ||
|
|
d15439a292 | ||
|
|
7514b29e31 | ||
|
|
0afef3389a | ||
|
|
2dadc1e899 | ||
|
|
b07423749a | ||
|
|
1120921a1b | ||
|
|
9a826fd416 | ||
|
|
edd062c76f | ||
|
|
2429999b3c | ||
|
|
8cb9a4a9c9 | ||
|
|
a2bd8a46f5 | ||
|
|
1dcaf2d2c1 | ||
|
|
e7f4d8cd2b | ||
|
|
0ad3a7d8da | ||
|
|
92bf0c6669 | ||
|
|
e536ff34a8 | ||
|
|
519423fa68 | ||
|
|
3f31de661d | ||
|
|
7c57dfa7bc | ||
|
|
3b7e0d440b | ||
|
|
1e97bd6a8b | ||
|
|
4b43bbf853 | ||
|
|
b2a240b335 | ||
|
|
709afef820 | ||
|
|
6b70091f6c | ||
|
|
7a71b7e98f | ||
|
|
7b9d8e9232 | ||
|
|
de219e37e8 | ||
|
|
052f486793 | ||
|
|
0b3f87c97d | ||
|
|
35b5a4cf0a | ||
|
|
669fb4a433 | ||
|
|
418666dd20 | ||
|
|
e44cf2e956 | ||
|
|
a421550477 | ||
|
|
1474f1001d | ||
|
|
3d2f8e0633 | ||
|
|
dcbce15b24 | ||
|
|
08c75e6e55 | ||
|
|
018e07945a | ||
|
|
0355ef08ed | ||
|
|
c95a27d66a | ||
|
|
a46ab04e47 | ||
|
|
b8f6aeb52c | ||
|
|
d46f7a3445 | ||
|
|
4524f9d188 | ||
|
|
67d1647d6e | ||
|
|
619415d7dc | ||
|
|
2daf9f5908 | ||
|
|
68fe9514bf | ||
|
|
67a9b0ec1a | ||
|
|
0d02303de6 | ||
|
|
91d4fb70ec | ||
|
|
90af756e3c | ||
|
|
e1e11cf75e | ||
|
|
8f60efcb20 | ||
|
|
5ff724427a | ||
|
|
c60f91e5d5 | ||
|
|
b6919cd118 | ||
|
|
1294fdb679 | ||
|
|
d4b67a92d2 | ||
|
|
b442ef4624 | ||
|
|
4da6316d1d | ||
|
|
27bc5bc2bf | ||
|
|
3051af6e21 | ||
|
|
489ac87a1c | ||
|
|
ecb8d30b69 | ||
|
|
adacb0be02 | ||
|
|
29cdd17113 | ||
|
|
5866a1b9f1 | ||
|
|
5e8277b290 | ||
|
|
a1bd8e63eb | ||
|
|
265ba002e6 | ||
|
|
88879890fb | ||
|
|
af3e42515c | ||
|
|
8ed3b44f0b | ||
|
|
9c53d97491 | ||
|
|
6415c3a853 | ||
|
|
09aa6346c7 | ||
|
|
98ea150bce | ||
|
|
d1847c9cd3 | ||
|
|
9c9d7d4bf3 | ||
|
|
48454fe53a | ||
|
|
6d17f38be4 | ||
|
|
9819f2f967 | ||
|
|
3088c4942c | ||
|
|
353272a1db | ||
|
|
f42258bf9f | ||
|
|
6bd57e790e | ||
|
|
7ea6cf76e4 | ||
|
|
50dd52bb47 | ||
|
|
baccd50410 | ||
|
|
e3323e248f | ||
|
|
1622ac00a5 | ||
|
|
03462690b1 | ||
|
|
69e5025e7a | ||
|
|
aa9abd7f68 | ||
|
|
cc792b71fe | ||
|
|
98ccd3c31f | ||
|
|
98bd18757b | ||
|
|
4fe7c7d82d | ||
|
|
4e36ce7ad5 | ||
|
|
ba862a2508 | ||
|
|
fc425940b6 | ||
|
|
c756ae6ea3 | ||
|
|
22e71d1d21 | ||
|
|
feff5bf56c | ||
|
|
bcb7713415 | ||
|
|
9b1648f6b2 | ||
|
|
f1df1db489 | ||
|
|
94764b7fd7 | ||
|
|
fbc921ade9 | ||
|
|
6bff023264 | ||
|
|
ac005568be | ||
|
|
299f25b8d1 | ||
|
|
0d73fb47d6 | ||
|
|
c0d96da45a | ||
|
|
0f50ac2810 | ||
|
|
1c169602dc | ||
|
|
9e8255d213 | ||
|
|
9151cf66fc | ||
|
|
494068fd9d | ||
|
|
bd65032a88 | ||
|
|
d973a52e99 | ||
|
|
726ca11ea3 | ||
|
|
3049510000 | ||
|
|
84cd3ccd46 | ||
|
|
927b9f16aa | ||
|
|
0b739bfd36 | ||
|
|
b49dd6a4ca | ||
|
|
c0e8b64b68 | ||
|
|
bcfcbd6735 | ||
|
|
92424dc97d | ||
|
|
e73ec4cac9 | ||
|
|
480343bb98 | ||
|
|
477e4c6f12 | ||
|
|
40b8728b1f | ||
|
|
2db3a09162 | ||
|
|
ed43ab72b2 | ||
|
|
f1b7eb0589 | ||
|
|
148eac9346 | ||
|
|
5a58ebdad6 | ||
|
|
45667df0f1 | ||
|
|
817317c5b3 | ||
|
|
f3cc8ff52f | ||
|
|
6986881a94 | ||
|
|
4e4c50be19 | ||
|
|
f757d496ce | ||
|
|
ef62807b77 | ||
|
|
7c17727d1a | ||
|
|
22f2d060d1 | ||
|
|
faf195eba7 | ||
|
|
6d22c9e368 | ||
|
|
97cd14960f | ||
|
|
543111c151 | ||
|
|
66b60d67d1 | ||
|
|
3c99afc0c0 | ||
|
|
acc4597407 | ||
|
|
19593e157f | ||
|
|
0c917f3803 | ||
|
|
86db200a23 | ||
|
|
2781365ac3 | ||
|
|
a238a7e754 | ||
|
|
299d211ab1 | ||
|
|
fc2278486e | ||
|
|
f7d5a87667 | ||
|
|
3e2934529e | ||
|
|
ff9afca894 | ||
|
|
3f002928ed | ||
|
|
b124e8a8f0 | ||
|
|
0f965050b1 | ||
|
|
b9cd02ddee | ||
|
|
b7198a2334 | ||
|
|
8967e05524 | ||
|
|
1b1e7f8f2c | ||
|
|
00eb27681e | ||
|
|
9ad4b27681 | ||
|
|
060eaba2ea | ||
|
|
d75a495fc1 | ||
|
|
f593b12416 | ||
|
|
2f3385776d | ||
|
|
fe8afe05de | ||
|
|
3545360033 | ||
|
|
bd9f52cf8c | ||
|
|
3d3513e365 | ||
|
|
5c61c3acbd | ||
|
|
6a0f2eaf1a | ||
|
|
9422ea5905 | ||
|
|
582fc8f846 | ||
|
|
73893352f7 | ||
|
|
47c9ec1f80 | ||
|
|
b482344691 | ||
|
|
cbdedc9f9c | ||
|
|
12a1585ee2 | ||
|
|
4644bb4494 | ||
|
|
a54b551e4d | ||
|
|
30724164be | ||
|
|
517e0cc454 | ||
|
|
2c489cdadd | ||
|
|
28a956111d | ||
|
|
7115ed9ab5 | ||
|
|
566184f669 | ||
|
|
8b5fbf511f | ||
|
|
c6a6972a75 | ||
|
|
59713ea9b1 | ||
|
|
4e1e3e02bb | ||
|
|
a26e1ae006 | ||
|
|
160ddb4457 | ||
|
|
8dda1836ac | ||
|
|
18884d6aa2 | ||
|
|
1e9c07c803 | ||
|
|
2c463d0322 | ||
|
|
2c3963c24e | ||
|
|
3d57bf7914 | ||
|
|
9fa501cc3a | ||
|
|
c66e3471e0 | ||
|
|
17924254a1 | ||
|
|
27fe06917e | ||
|
|
164ef7b678 | ||
|
|
2ad30215df | ||
|
|
d4ae964be4 | ||
|
|
228105e6de | ||
|
|
6c5e8ed49e | ||
|
|
019287a648 | ||
|
|
719dac2dc1 | ||
|
|
abf2ef5832 | ||
|
|
953a50d827 | ||
|
|
7c116300bc | ||
|
|
cbfd7ed270 | ||
|
|
78d926b31d | ||
|
|
a4d03c263f | ||
|
|
5283135a49 | ||
|
|
2c9cf460f3 | ||
|
|
2bcb236dd6 | ||
|
|
77ff400bb1 | ||
|
|
c87166f9c5 | ||
|
|
6827540f11 | ||
|
|
0615773904 | ||
|
|
c73e19bdf2 | ||
|
|
c0cac55065 | ||
|
|
e45e82bd19 | ||
|
|
26a7ac35ca | ||
|
|
9748b37532 | ||
|
|
0feacdc6a5 | ||
|
|
be2495b253 | ||
|
|
24762209aa | ||
|
|
74ec42e889 | ||
|
|
fa76d1fb16 | ||
|
|
c437bc2d25 | ||
|
|
86ec0d1226 | ||
|
|
12c771e5c9 | ||
|
|
451d562186 | ||
|
|
aa5efe67ef | ||
|
|
1749d4bd9b | ||
|
|
d21820dab7 | ||
|
|
51474d86e7 | ||
|
|
7fc641c787 | ||
|
|
1059725734 | ||
|
|
6396c8c9ac | ||
|
|
57647bf62b | ||
|
|
5176bfead1 | ||
|
|
91281a8247 | ||
|
|
c46beaff32 | ||
|
|
b3c49a4636 | ||
|
|
7ae217bc79 | ||
|
|
5d37682c6b | ||
|
|
d70cb368de | ||
|
|
4fcfa471a4 | ||
|
|
01da5ed20d | ||
|
|
433f230c9c | ||
|
|
91e49ab940 | ||
|
|
e464f45605 | ||
|
|
e062350552 | ||
|
|
74d6e885f6 | ||
|
|
ec34c02e4f | ||
|
|
0aa84312c5 | ||
|
|
17a654cfc4 | ||
|
|
027a3db94c | ||
|
|
38a7c74f28 | ||
|
|
3147c3c996 | ||
|
|
d6605625bc | ||
|
|
e534e56002 | ||
|
|
cf9c02e571 | ||
|
|
0483193439 | ||
|
|
6112bcaced | ||
|
|
64ae531ead | ||
|
|
e90c318c0e | ||
|
|
a4551216e9 | ||
|
|
2e38fa5fc6 | ||
|
|
e2b96c8bab | ||
|
|
4c3c07eb38 | ||
|
|
3e7ca5baec | ||
|
|
c74700f35d | ||
|
|
368578d736 | ||
|
|
65d9640b20 | ||
|
|
836f3fc976 | ||
|
|
5636e2b0f6 | ||
|
|
37bc375c64 | ||
|
|
50467b7e6d | ||
|
|
dc37e934e6 | ||
|
|
21e5daebfc | ||
|
|
8f579b1993 | ||
|
|
ed336af513 | ||
|
|
03186eb4d3 | ||
|
|
972495df89 | ||
|
|
3366b1dc6c | ||
|
|
2c86419dd8 | ||
|
|
0e30732950 | ||
|
|
0fb5569c6b | ||
|
|
f289cdd08a | ||
|
|
f0598aaeb3 | ||
|
|
1a498d64c9 | ||
|
|
c2f58d1c79 | ||
|
|
3d826f5b26 | ||
|
|
2bb95a13cb | ||
|
|
1de21e178c | ||
|
|
cde0e1603d | ||
|
|
6fe063815c | ||
|
|
b527a33b85 | ||
|
|
29a9c53a62 | ||
|
|
56fe0d8269 | ||
|
|
dc28723d52 | ||
|
|
36af497fdf | ||
|
|
d5c094e9e8 | ||
|
|
6adc70cbc8 | ||
|
|
2e385844d0 | ||
|
|
7e48079a46 | ||
|
|
f9eb9304f0 | ||
|
|
c3eb8bc49e | ||
|
|
8759a7d3e8 | ||
|
|
a785ce924b | ||
|
|
938b1647b0 | ||
|
|
6abe6bfb19 | ||
|
|
d22fae0cae | ||
|
|
4effa2b6d2 | ||
|
|
e6dfd5ee74 | ||
|
|
a5966490c9 | ||
|
|
f5f75cdeef | ||
|
|
a6209af97b | ||
|
|
93e24926ae | ||
|
|
6f3997dc38 | ||
|
|
b380834c0e | ||
|
|
9e551be17a | ||
|
|
d77c6f0788 | ||
|
|
a1df486779 | ||
|
|
cdedb9b0f5 | ||
|
|
9ff41ed45a | ||
|
|
56aa5dac0d | ||
|
|
ebde92c891 | ||
|
|
7dc55eeb54 | ||
|
|
ec4e0050e7 | ||
|
|
306d23f38b | ||
|
|
fa3dfa38cd | ||
|
|
a0601f1c79 | ||
|
|
19b56bc118 | ||
|
|
2f12a72cad | ||
|
|
ed0fe5599f | ||
|
|
081408e961 | ||
|
|
56d6488b3d | ||
|
|
85f1fb6b7f | ||
|
|
34d6d465c4 | ||
|
|
fcef806553 | ||
|
|
61258a7063 | ||
|
|
b1d216b8af | ||
|
|
c53023e6c8 | ||
|
|
637aa19a72 | ||
|
|
2cf4d8cac8 | ||
|
|
0071e8a7d4 | ||
|
|
d546f147c3 | ||
|
|
b03a942bf4 | ||
|
|
23416eae32 | ||
|
|
2ade0e39de | ||
|
|
62930f8da8 | ||
|
|
be1f424398 | ||
|
|
003afbbb58 | ||
|
|
3010c8a8c9 | ||
|
|
4a935893d2 | ||
|
|
32096b8e85 | ||
|
|
3142bd3aef | ||
|
|
9985c693bd | ||
|
|
81e15695c8 | ||
|
|
f486867292 | ||
|
|
ffa7040b6f | ||
|
|
247a269054 | ||
|
|
50b2a8f3ab | ||
|
|
f1e36f2775 | ||
|
|
997fda03fe | ||
|
|
c6ecbe81b2 | ||
|
|
9c9ef927d7 | ||
|
|
029ae18514 | ||
|
|
dcfce18d7f | ||
|
|
295c729ecf | ||
|
|
43e0dd770d | ||
|
|
6e9c08b491 | ||
|
|
1808e3f50c | ||
|
|
8f39e06900 | ||
|
|
7742b49289 | ||
|
|
4750a7f224 | ||
|
|
ff78815e90 | ||
|
|
00a5c6864e | ||
|
|
a38572199d | ||
|
|
bcd501edf6 | ||
|
|
8d1ad79fdb | ||
|
|
b2db7f16f6 | ||
|
|
080b53a652 | ||
|
|
2b9fcab30f | ||
|
|
5565d2def4 | ||
|
|
9aa05bcbe3 | ||
|
|
e0434ca82b | ||
|
|
9c5ecf52ce | ||
|
|
6d890244c1 | ||
|
|
f7657dca4f | ||
|
|
eda2918f58 | ||
|
|
d75c13107c | ||
|
|
1a5984be70 | ||
|
|
e1711eb28a | ||
|
|
1a564fa93e | ||
|
|
6118facaf2 | ||
|
|
d52a3b9dfc | ||
|
|
38495197d2 | ||
|
|
dd6a448bc4 | ||
|
|
1cea9ad1d9 | ||
|
|
14c9dc04fd | ||
|
|
9e983e720f | ||
|
|
b2dd52c0a4 | ||
|
|
9a3d949fc2 | ||
|
|
00819b70c0 | ||
|
|
cd83a939e8 | ||
|
|
443aabb89b | ||
|
|
93275dba2c | ||
|
|
3767568cdb | ||
|
|
7cfb150be8 | ||
|
|
049211abae | ||
|
|
a7ce0c22fa | ||
|
|
7205a39f23 | ||
|
|
99b759b630 | ||
|
|
a9ced1175b | ||
|
|
aeb5bc4597 | ||
|
|
f031407a14 | ||
|
|
3c42e12b75 | ||
|
|
2ce9d210af | ||
|
|
a038b2cf61 | ||
|
|
cee2ea332f | ||
|
|
b1e3d90790 | ||
|
|
f306d1223c | ||
|
|
e90e6ab846 | ||
|
|
6a103ed073 | ||
|
|
96663687f2 | ||
|
|
8d17ae1697 | ||
|
|
a2e4807810 | ||
|
|
803daf7642 | ||
|
|
c88fb1155b | ||
|
|
246a5eee93 | ||
|
|
4607b40e23 | ||
|
|
d0a963ab42 | ||
|
|
bb58366efd | ||
|
|
0891a102e4 | ||
|
|
0e74d5c8e3 | ||
|
|
672940cf06 | ||
|
|
9ecfbdbe76 | ||
|
|
679dbaccc9 | ||
|
|
57b4d68298 | ||
|
|
5d55f2b8e3 | ||
|
|
f094529d6d | ||
|
|
c2735c5c1c | ||
|
|
e1f5ab8333 | ||
|
|
cf0ef61c1f | ||
|
|
2b9907c8d0 | ||
|
|
2abe2286b2 | ||
|
|
b6d8be087f | ||
|
|
49892159d5 | ||
|
|
e88e2cf032 | ||
|
|
bcf9cab22d | ||
|
|
2973fa71e5 | ||
|
|
16f86afd9f | ||
|
|
329a8c958b | ||
|
|
91f3dfaf3d | ||
|
|
daa8d82f7b | ||
|
|
fb98870d56 | ||
|
|
07183d56f4 | ||
|
|
232cb6fcf6 | ||
|
|
320779a845 | ||
|
|
86e962bc13 | ||
|
|
0cafaad19b | ||
|
|
043b4ffd37 | ||
|
|
6174fa384e | ||
|
|
e5d1f2dfea | ||
|
|
54f6ea31f5 | ||
|
|
1d26512309 | ||
|
|
402c8acc5f | ||
|
|
43f1e524e0 | ||
|
|
2451fec704 | ||
|
|
8a70118446 | ||
|
|
fa017c26a5 | ||
|
|
670920a5a4 | ||
|
|
82364646d3 | ||
|
|
40220a6ba1 | ||
|
|
96a6f98862 | ||
|
|
3423bcf65e | ||
|
|
a74ef69d86 | ||
|
|
177475f053 | ||
|
|
32ba2fe676 | ||
|
|
3aa1b3b738 | ||
|
|
abf4c58ce6 | ||
|
|
c7e59d13fa | ||
|
|
6b0a52fcb6 | ||
|
|
ea2b6886b5 | ||
|
|
80e651741c | ||
|
|
6b70ae6d69 | ||
|
|
a3a777ef93 | ||
|
|
abaf7a82f3 | ||
|
|
0bf24b3161 | ||
|
|
a527ed6d1d | ||
|
|
cf0582f607 | ||
|
|
02942aca6b | ||
|
|
aae3caab38 | ||
|
|
2a71b978be | ||
|
|
336af4c219 | ||
|
|
1afbf893d7 | ||
|
|
6bcab5e7ed | ||
|
|
5e4e64dbd7 | ||
|
|
728db642f0 | ||
|
|
e1f1cbbb4b | ||
|
|
b7f96b7109 | ||
|
|
32c15726ae | ||
|
|
6160a81368 | ||
|
|
523b6ce5cf | ||
|
|
95e407aae1 | ||
|
|
5e1d6d1aab | ||
|
|
9f0f4b3432 | ||
|
|
f4a38d121d | ||
|
|
abf454cecb | ||
|
|
6c40a5b4c6 | ||
|
|
56458d5ba5 | ||
|
|
8d04515b5f | ||
|
|
f66c93c0c2 | ||
|
|
f4c9c11596 | ||
|
|
906191ac45 | ||
|
|
a0c063cabe | ||
|
|
ebf41cb696 | ||
|
|
c0dfad661b | ||
|
|
0b80107cdf | ||
|
|
f7eb4483b2 | ||
|
|
9178761932 | ||
|
|
235a04d54d | ||
|
|
75c0a5f36e | ||
|
|
6de4810ab7 | ||
|
|
1a5ab89cd4 | ||
|
|
4a80dbabcb | ||
|
|
6399a5cd15 | ||
|
|
acd2130a4d | ||
|
|
b3b32ef026 | ||
|
|
4ce8290e49 | ||
|
|
fd6698c5f6 | ||
|
|
f92605cfbd | ||
|
|
2c3c9fe25f | ||
|
|
18e013beda | ||
|
|
1e26a8be76 | ||
|
|
300fa4801f | ||
|
|
c5106a1982 | ||
|
|
1d22db7e1c | ||
|
|
c986a14401 | ||
|
|
a6d3a57df9 | ||
|
|
8d04df1641 | ||
|
|
6baebd0f06 | ||
|
|
e34bfc04e3 | ||
|
|
0d7c70bdba | ||
|
|
fccd73f8e3 | ||
|
|
c52c7fd1bb | ||
|
|
5210341ad3 | ||
|
|
d7e456a46f | ||
|
|
a3b126f079 | ||
|
|
bc8c308ee9 | ||
|
|
124a678c8e | ||
|
|
333dd85ba5 | ||
|
|
d08a9bdcc2 | ||
|
|
f4a018036d | ||
|
|
65f4e176c2 | ||
|
|
3b8e9bbff5 | ||
|
|
8f2c6eff9c | ||
|
|
85a5292648 | ||
|
|
c8f261201c | ||
|
|
e42c79677d | ||
|
|
de9ec5d83c | ||
|
|
93e89446e2 | ||
|
|
2a28c46a41 | ||
|
|
23fa258dfd | ||
|
|
e86a18f293 | ||
|
|
665229a892 | ||
|
|
4d46be8344 | ||
|
|
5a839f1010 | ||
|
|
d5dcc645e4 | ||
|
|
35f6a93713 | ||
|
|
d01b8db441 | ||
|
|
a8373002b5 | ||
|
|
5d192fb215 | ||
|
|
e13722870e | ||
|
|
82e49616a2 | ||
|
|
7d425dc5e7 | ||
|
|
aa975f8f6c | ||
|
|
7fcd6d1f5a | ||
|
|
9d7c83aa39 | ||
|
|
1d8aa3fc3f | ||
|
|
7692f102e5 | ||
|
|
3be1ced3ef | ||
|
|
c78d931e28 | ||
|
|
e7f24c06d5 | ||
|
|
dc5ff13b5c | ||
|
|
7140b64b13 | ||
|
|
4d4d3308b9 | ||
|
|
e02a7cc6fb | ||
|
|
ce981795f5 | ||
|
|
51d16a58cd | ||
|
|
89287dabf1 | ||
|
|
5b52f94aa1 | ||
|
|
f67373732c | ||
|
|
8d43e67b96 | ||
|
|
8a37b00fef | ||
|
|
80c2678930 | ||
|
|
510cc55d76 | ||
|
|
5c285e3ce3 | ||
|
|
21203b2401 | ||
|
|
2c8f3ef84d | ||
|
|
80348ae691 | ||
|
|
5e55f1a8a7 | ||
|
|
c63257029e | ||
|
|
93d44072da | ||
|
|
2cf921be41 | ||
|
|
cc8ccbf1bd | ||
|
|
10e589672f | ||
|
|
3c28ecd8b6 | ||
|
|
cc64eb50c0 | ||
|
|
5cb877b49c | ||
|
|
275ba735de | ||
|
|
2b894add40 | ||
|
|
58690cd5fc | ||
|
|
b03da384d8 | ||
|
|
f382a18d10 | ||
|
|
f63cad6de9 | ||
|
|
34d2c091c7 | ||
|
|
d845582d4a | ||
|
|
9788752bc1 | ||
|
|
5f60ab2dde | ||
|
|
628432e75c | ||
|
|
980e9ed687 | ||
|
|
e98a313ed6 | ||
|
|
90d42d1ea3 | ||
|
|
11d6b7c673 | ||
|
|
c04bcf03e0 | ||
|
|
c4d73cc427 | ||
|
|
8634c11cff | ||
|
|
8a5c48e3ed | ||
|
|
b22513a6e8 | ||
|
|
e5220e8fd0 | ||
|
|
8099bf54fd | ||
|
|
bed4ce3659 | ||
|
|
f630a9418d | ||
|
|
f9e4070b15 | ||
|
|
5050d6c45d | ||
|
|
b56dac15e9 | ||
|
|
a8e35d0299 | ||
|
|
1462bac4c5 | ||
|
|
5e2a8f08bf | ||
|
|
e88cb48f19 | ||
|
|
70a669287b | ||
|
|
9d3addc241 | ||
|
|
f22e1405dc | ||
|
|
4542ac5674 | ||
|
|
5c3ac88547 | ||
|
|
85fcda5b42 | ||
|
|
f512fdc969 | ||
|
|
64286fbd46 | ||
|
|
e0c4cc76f2 | ||
|
|
7b4a346336 | ||
|
|
763f7da939 | ||
|
|
ee188dcb31 | ||
|
|
1f8b3f86b9 | ||
|
|
18e334a6cf | ||
|
|
24675b0161 | ||
|
|
f4caedcd5e | ||
|
|
bdc6313e46 | ||
|
|
fd3a56b0a2 | ||
|
|
663b6951e3 | ||
|
|
554430276c | ||
|
|
3748baf8e8 | ||
|
|
e1bd1bfdf9 | ||
|
|
5f6b75a013 | ||
|
|
2d6fe4aa16 | ||
|
|
b49e5496da | ||
|
|
645d481493 | ||
|
|
bc14c35cb5 | ||
|
|
16210cf1bf | ||
|
|
d34e54c808 | ||
|
|
76508d02bd | ||
|
|
32690bb6f0 | ||
|
|
9eca885d8b | ||
|
|
f9a53d2167 | ||
|
|
fd5b22c5cd | ||
|
|
2f6edc7efe | ||
|
|
12ac1b5534 | ||
|
|
c8fa67ec39 | ||
|
|
5341d0d7d4 | ||
|
|
ad0105de25 | ||
|
|
e3663a9eec | ||
|
|
a01ccb72f2 | ||
|
|
27996d81d4 | ||
|
|
47af07c507 | ||
|
|
cc6ab702c0 | ||
|
|
d633b92a57 | ||
|
|
579be2bb04 | ||
|
|
89db771c73 | ||
|
|
33b95510cb | ||
|
|
31eee5f6f1 | ||
|
|
7ba1c2925d | ||
|
|
dbc1b4ccc6 | ||
|
|
a3a1969775 | ||
|
|
ab67ec12cd | ||
|
|
02cb1268e4 | ||
|
|
50994a2c60 | ||
|
|
9e099e9b15 | ||
|
|
16cbd8b149 | ||
|
|
5491a6a9c8 | ||
|
|
d0a14c682d | ||
|
|
4eb4b6cdb7 | ||
|
|
9bc59159d0 | ||
|
|
f518f04ffa | ||
|
|
2ce06bc4d1 | ||
|
|
a3285b6959 | ||
|
|
8a7ac00d03 | ||
|
|
38cf1b0f8e | ||
|
|
d26ffccc9f | ||
|
|
9ee4afd17f | ||
|
|
61dbb64999 | ||
|
|
2d5e1ba552 | ||
|
|
a31b0a7768 | ||
|
|
7c9ff4ba6d | ||
|
|
0bc30dd26d | ||
|
|
f73032e17f | ||
|
|
2eee9bcd4e | ||
|
|
e3a3927e95 | ||
|
|
f04e55f863 | ||
|
|
08aecccc5a | ||
|
|
3471756c06 | ||
|
|
d40e6e1cd3 | ||
|
|
6a262e01ae | ||
|
|
2f6a51b3ef | ||
|
|
ee3b764b8e | ||
|
|
4216d5ae0a | ||
|
|
878efe0a05 | ||
|
|
98aee19e93 | ||
|
|
7810a05b60 | ||
|
|
b83e868a6e | ||
|
|
ce3153b10e | ||
|
|
259642ae2a | ||
|
|
30921061c7 | ||
|
|
757da94463 | ||
|
|
1c026f5edf | ||
|
|
2d90b6343d | ||
|
|
4c312ab2af | ||
|
|
55d197fdc3 | ||
|
|
53290b9c71 | ||
|
|
764a881d36 | ||
|
|
a10e089100 | ||
|
|
590ec4cb32 | ||
|
|
30d143092d | ||
|
|
2dbd5a43a0 | ||
|
|
08c013dc46 | ||
|
|
0d169fe641 | ||
|
|
1f73642031 | ||
|
|
d31d5a9310 | ||
|
|
6b9844a4e4 | ||
|
|
3ca1f9ebb4 | ||
|
|
47545c7d01 | ||
|
|
d2df3a6b25 | ||
|
|
7b2ddaaab7 | ||
|
|
84d4efe09f | ||
|
|
67db4349d8 | ||
|
|
bfca0dc6ca | ||
|
|
0ae31ab8a4 | ||
|
|
c4017ede21 | ||
|
|
9f8838e4d9 | ||
|
|
2770c20007 | ||
|
|
394da44a09 | ||
|
|
9b99a961f5 | ||
|
|
d17a5ea045 | ||
|
|
741bfcda01 | ||
|
|
ddf5ccadf5 | ||
|
|
9fc5072597 | ||
|
|
151418da8d | ||
|
|
2ad3f3379c | ||
|
|
e1ad2661a7 | ||
|
|
c1f6d5702a | ||
|
|
41f7d14e75 | ||
|
|
c6d6431e82 | ||
|
|
b035ce9560 | ||
|
|
6599155ad2 | ||
|
|
ee61536d52 | ||
|
|
ff209f0f19 | ||
|
|
cac6885bfb | ||
|
|
bdfc477b8a | ||
|
|
ce43723566 | ||
|
|
04ea2a52ee | ||
|
|
01a89c3db0 | ||
|
|
2900376896 | ||
|
|
e812f9fdb9 | ||
|
|
add71b87e8 | ||
|
|
a563083096 | ||
|
|
984d2d125f | ||
|
|
c50a8a0ebe | ||
|
|
280bc39df4 | ||
|
|
878d111e52 | ||
|
|
f9e755dd04 | ||
|
|
35279ba28d | ||
|
|
815ad9a73d | ||
|
|
fb0d69e74b | ||
|
|
80c14502f3 | ||
|
|
ae8f761f46 | ||
|
|
5b1cbdb542 | ||
|
|
985e3c10fd | ||
|
|
eecdde4ee7 | ||
|
|
580b322313 | ||
|
|
641ebdaca1 | ||
|
|
ed4d21d7a3 | ||
|
|
b050c5f04c | ||
|
|
d1b00bfa6b | ||
|
|
d2ee5b9db9 | ||
|
|
f275f9f176 | ||
|
|
b069d68e05 | ||
|
|
b6d95c838f | ||
|
|
0976b64dd8 | ||
|
|
8639e306c7 | ||
|
|
c71f131b0c | ||
|
|
822186413c | ||
|
|
da53c2b905 | ||
|
|
f09cddddd5 | ||
|
|
56ea29e244 | ||
|
|
e6231d4379 | ||
|
|
8ab3f79f6a | ||
|
|
547d6658dd | ||
|
|
008486531d | ||
|
|
1e71f59bc0 | ||
|
|
80bc2ad805 | ||
|
|
ae6cbb52ae | ||
|
|
3212ce0148 | ||
|
|
e43902175c | ||
|
|
9065009045 | ||
|
|
fe94e4046c | ||
|
|
a5d8289017 | ||
|
|
11a97f6cd1 | ||
|
|
4146f9df6d | ||
|
|
530ce845c5 | ||
|
|
b199273635 | ||
|
|
9e1402d437 | ||
|
|
1c2c5845e1 | ||
|
|
fb10aba946 | ||
|
|
1d4b82f0d5 | ||
|
|
40ce138196 | ||
|
|
53c0e1c190 | ||
|
|
beea62f4c3 | ||
|
|
e6948d2c03 | ||
|
|
2c970caafe | ||
|
|
6017b3dd52 | ||
|
|
bb49f49373 | ||
|
|
206a87c82d | ||
|
|
b2e6f2b280 | ||
|
|
4e8015b663 | ||
|
|
1d4ac499e2 | ||
|
|
7ac40e85c6 | ||
|
|
2380e62c79 | ||
|
|
5f0baa9405 | ||
|
|
6f3a90b938 | ||
|
|
99183728eb | ||
|
|
ab39fe00f0 | ||
|
|
50d76e2657 | ||
|
|
d7c3f860f9 | ||
|
|
8d8de9e328 | ||
|
|
bd0d68a788 | ||
|
|
d7b57ba411 | ||
|
|
13786dec7c | ||
|
|
e5b521d4fb | ||
|
|
b44f4b57a6 | ||
|
|
5abc150d05 | ||
|
|
91b1ef6837 | ||
|
|
c1d8f2d873 | ||
|
|
4ee6492d18 | ||
|
|
8bfef958aa | ||
|
|
d50e9d2f5d | ||
|
|
8e94e664c5 | ||
|
|
9c7f114baf | ||
|
|
0056a195b1 | ||
|
|
5072497629 | ||
|
|
46675146ff | ||
|
|
65f3f507c8 | ||
|
|
9f92c633ee | ||
|
|
faa4f1854a | ||
|
|
7a55003e5f | ||
|
|
8574d0db24 | ||
|
|
c96f34ad02 | ||
|
|
6b6b6027ec | ||
|
|
0d8933988b | ||
|
|
7f5be570cd | ||
|
|
94de2e10d7 | ||
|
|
862e94b49d | ||
|
|
ad51e37222 | ||
|
|
b3a438b9eb | ||
|
|
9d2bd692f5 | ||
|
|
55f8a38d59 | ||
|
|
3288fcce4e | ||
|
|
13e23df347 | ||
|
|
409ea8d7cf | ||
|
|
7aa95db26c | ||
|
|
c2fcacb331 | ||
|
|
60e135a71d | ||
|
|
b083b32836 | ||
|
|
7adfece675 | ||
|
|
8da4623d39 | ||
|
|
189487a2ca | ||
|
|
82040066b2 | ||
|
|
e14b01fdc4 | ||
|
|
768d31d4dd | ||
|
|
4304c1c108 | ||
|
|
0054b5793e | ||
|
|
b3fd78e6f4 | ||
|
|
8046515c7a | ||
|
|
76c4d09118 | ||
|
|
4100ae0009 | ||
|
|
ab9bc590a2 | ||
|
|
87d97af20a | ||
|
|
544759dff7 | ||
|
|
595f87f3ac | ||
|
|
815f4b31d8 | ||
|
|
657b0c0f5d | ||
|
|
934202c244 | ||
|
|
99ef67b4a0 | ||
|
|
1e4683fbac | ||
|
|
27d0826e30 | ||
|
|
5168ee4089 | ||
|
|
a9f2a301b4 | ||
|
|
53dedb9a84 | ||
|
|
b73fb828c5 | ||
|
|
5f96077613 | ||
|
|
a284722486 | ||
|
|
cb9f94ae34 | ||
|
|
10856348a3 | ||
|
|
7b5026313e | ||
|
|
1cccbb67da | ||
|
|
8b09014c67 | ||
|
|
19171c2723 | ||
|
|
e130f0297e | ||
|
|
735f3ec902 | ||
|
|
109ebc4683 | ||
|
|
3da4e20905 | ||
|
|
963086edb5 | ||
|
|
b0a0640089 | ||
|
|
2e648ac845 | ||
|
|
77110f15a3 | ||
|
|
5c697600f7 | ||
|
|
bf3b824a71 | ||
|
|
cedfd160c4 | ||
|
|
9ac22b34fa | ||
|
|
fad4ef8908 | ||
|
|
cb4a79e8c1 | ||
|
|
8cca04113d | ||
|
|
e4789472e3 | ||
|
|
11c818591b | ||
|
|
ea1eef8d22 |
No files matched your search
+11
@@ -0,0 +1,11 @@
|
||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/BlankSpruce/gersemi/master/gersemi/configuration.schema.json
|
||||
|
||||
color: false
|
||||
definitions: [ares/CMakeLists.txt]
|
||||
line_length: 120
|
||||
indent: 2
|
||||
list_expansion: favour-inlining
|
||||
quiet: false
|
||||
unsafe: false
|
||||
warn_about_unknown_commands: false
|
||||
workers: 10
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Report a bug *not* relating to game compatibility
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
name: Game Issue Report
|
||||
about: Report an issue running a specific game in ares
|
||||
title: "[system] Game"
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Before submitting an issue, please use the search to make sure an issue doesn't already exist, you should also make sure your rom is not a bad dump, by comparing against the hashes in the No-Intro (Cartridges) or Redump (CD-ROM) databases.
|
||||
|
||||
**Describe the issue**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Rom Information**
|
||||
Specify the impacted rom filename and any associated hashes (sha256 preferred);.
|
||||
The easiest way to do this is to open the game in ares, and go to "Tools -> Manifest" and copy/paste the contents.
|
||||
|
||||
```
|
||||
file: Some Game (REGION).ext
|
||||
sha256: <hash>
|
||||
```
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env sh
|
||||
set -euo pipefail
|
||||
|
||||
# configure
|
||||
cmake --preset $TARGET_PRESET
|
||||
|
||||
# change into the build directory
|
||||
pushd build
|
||||
|
||||
# build; pipe output to render warnings neatly
|
||||
xcodebuild -configuration RelWithDebInfo \
|
||||
DEBUG_INFORMATION_FORMAT="dwarf-with-dsym" \
|
||||
2>&1 | xcbeautify --renderer github-actions
|
||||
|
||||
popd
|
||||
|
||||
# package debug symbols
|
||||
|
||||
# move dependency dSYMs to build output directory
|
||||
ditto .deps/ares-deps-macos-universal/lib/*.dSYM build/desktop-ui/RelWithDebInfo
|
||||
|
||||
mkdir build/dsyms
|
||||
|
||||
# ares.app.dSYM already exists alongside ares.app; package it with the rest
|
||||
mv build/desktop-ui/RelWithDebInfo/*.dSYM build/dSYMs/
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# configure
|
||||
cmake --preset $TARGET_PRESET
|
||||
|
||||
# change into the build directory
|
||||
pushd build
|
||||
|
||||
ninja
|
||||
|
||||
popd
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env sh
|
||||
set -euo pipefail
|
||||
|
||||
if [ "$CROSS_COMPILE" = true ]; then
|
||||
cmake --preset $NATIVE_PRESET -B build_native
|
||||
pushd build_native
|
||||
# build sourcery natively so it may be invoked during cross-compilation
|
||||
cmake --build . --target sourcery --config RelWithDebInfo
|
||||
popd
|
||||
fi
|
||||
|
||||
cmake --preset $TARGET_PRESET
|
||||
pushd build
|
||||
cmake --build . --config RelWithDebInfo
|
||||
|
||||
if [ "$CROSS_COMPILE" = true ]; then
|
||||
cp ../.deps/ares-deps-windows-arm64/lib/*.pdb desktop-ui/rundir/
|
||||
else
|
||||
cp ../.deps/ares-deps-windows-x64/lib/*.pdb desktop-ui/rundir/
|
||||
fi
|
||||
|
||||
mkdir PDBs
|
||||
mv desktop-ui/rundir/*.pdb PDBs/
|
||||
popd
|
||||
Executable
+45
@@ -0,0 +1,45 @@
|
||||
set -eu
|
||||
case ${GITHUB_REF} in
|
||||
refs/tags/*) suffix="-${GITHUB_REF#refs/tags/}" ;;
|
||||
refs/heads/master) suffix="-nightly" ;;
|
||||
*) suffix="" ;;
|
||||
esac
|
||||
|
||||
bindir="${GITHUB_WORKSPACE}/bin"
|
||||
|
||||
# Hack: Workaround for GitHub artifacts losing attributes.
|
||||
chmod +x ${bindir}/ares-macos-universal/ares.app/Contents/MacOS/ares
|
||||
|
||||
for package in macos-universal
|
||||
do
|
||||
mkdir "${package}"
|
||||
cd "${package}"
|
||||
|
||||
# Package ares.
|
||||
outdir=ares${suffix}
|
||||
mkdir ${outdir}
|
||||
mkdir ${outdir}-dSYMs
|
||||
cp -a ${bindir}/ares-${package}-dSYMs/*.dSYM ${outdir}-dSYMs
|
||||
cp -a ${bindir}/ares-${package}/*.app ${outdir}
|
||||
zip -r ../ares-${package}.zip ${outdir}
|
||||
zip -r ../ares-${package}-dSYMs.zip ${outdir}-dSYMs
|
||||
|
||||
cd -
|
||||
done
|
||||
|
||||
for package in windows-x64 windows-clang-cl-x64 windows-clang-cl-arm64
|
||||
do
|
||||
mkdir "${package}"
|
||||
cd "${package}"
|
||||
|
||||
# Package ares.
|
||||
outdir=ares${suffix}
|
||||
mkdir ${outdir}
|
||||
mkdir ${outdir}-PDBs
|
||||
cp -a ${bindir}/ares-${package}-PDBs/*.pdb ${outdir}-PDBs
|
||||
zip -r ../ares-${package}-PDBs.zip ${outdir}-PDBs
|
||||
rm -rf ${bindir}/ares-${package}/PDBs
|
||||
cp -a ${bindir}/ares-${package}/* ${outdir}
|
||||
zip -r ../ares-${package}.zip ${outdir}
|
||||
cd -
|
||||
done
|
||||
@@ -0,0 +1,316 @@
|
||||
name: Build
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
tags: [ 'v*' ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
program:
|
||||
- ares
|
||||
platform:
|
||||
- name: windows
|
||||
os: windows-latest
|
||||
compiler: clang++
|
||||
windres: windres
|
||||
shell: 'msys2 {0}'
|
||||
msystem: clang64
|
||||
install: mingw-w64-clang-x86_64-clang mingw-w64-clang-x86_64-pkgconf mingw-w64-clang-x86_64-SDL2
|
||||
- name: windows-arm64
|
||||
os: windows-latest
|
||||
compiler: clang++ --target=aarch64-w64-windows-gnu --sysroot=/clangarm64 -resource-dir=/clangarm64/lib/clang/$(basename "$(clang++ -print-resource-dir)")
|
||||
windres: windres --target=aarch64-w64-windows-gnu
|
||||
shell: 'msys2 {0}'
|
||||
msystem: clang64
|
||||
install: mingw-w64-clang-x86_64-clang mingw-w64-clang-aarch64-clang mingw-w64-clang-aarch64-pkgconf mingw-w64-clang-aarch64-SDL2
|
||||
- name: windows-msvc-x64
|
||||
os: windows-latest
|
||||
compiler: clang++
|
||||
windres: llvm-rc
|
||||
shell: bash
|
||||
msvc-arch: x64
|
||||
- name: windows-msvc-arm64
|
||||
os: windows-latest
|
||||
compiler: clang++ --target=aarch64-w64-windows-msvc
|
||||
windres: llvm-rc
|
||||
shell: bash
|
||||
msvc-arch: x64_arm64
|
||||
- name: windows-cl-x64
|
||||
os: windows-latest
|
||||
compiler: cl
|
||||
windres: rc
|
||||
shell: bash
|
||||
msvc-arch: x64
|
||||
- name: windows-cl-arm64
|
||||
os: windows-latest
|
||||
compiler: cl
|
||||
windres: rc
|
||||
shell: bash
|
||||
msvc-arch: x64_arm64
|
||||
- name: macos-universal
|
||||
os: macos-15
|
||||
compiler: clang++
|
||||
shell: sh
|
||||
- name: ubuntu
|
||||
os: ubuntu-latest
|
||||
compiler: g++
|
||||
shell: sh
|
||||
name: ${{ matrix.program }}-${{ matrix.platform.name }}
|
||||
runs-on: ${{ matrix.platform.os }}
|
||||
defaults:
|
||||
run:
|
||||
shell: ${{ matrix.platform.shell }}
|
||||
steps:
|
||||
- name: Install MSYS2 Dependencies
|
||||
if: matrix.platform.shell == 'msys2 {0}'
|
||||
uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: ${{ matrix.platform.msystem }}
|
||||
install: make ${{ matrix.platform.install }}
|
||||
- name: Install Linux Dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update -y -qq
|
||||
sudo apt-get install libsdl2-dev libgtk-3-dev libao-dev libopenal-dev
|
||||
- name: "macOS: Import Certificate"
|
||||
if: runner.os == 'macOS' && github.event_name != 'pull_request'
|
||||
continue-on-error: ${{ github.repository != 'ares-emulator/ares' }}
|
||||
uses: wpilibsuite/import-signing-certificate@2ac4f44d28045073d23153256efbb4c4b2d8aa22 # Don't use rolling branch for security reasons
|
||||
with:
|
||||
certificate-data: ${{ secrets.MACOS_CERTIFICATE_DATA }}
|
||||
certificate-passphrase: ${{ secrets.MACOS_CERTIFICATE_PASSPHRASE }}
|
||||
keychain-name: ares-macos-keychain
|
||||
keychain-password: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Windows Dependencies
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
export PATH="/c/Users/runneradmin/.cargo/bin:$PATH" # correct on windows-latest as of 2024-02-19
|
||||
if [[ ${{ matrix.platform.name }} == *-arm64 ]]; then
|
||||
rustup toolchain install nightly
|
||||
rustup default nightly
|
||||
rustup target add aarch64-pc-windows-msvc
|
||||
pushd thirdparty/librashader
|
||||
./build-librashader.sh aarch64-pc-windows-msvc
|
||||
popd
|
||||
else
|
||||
rustup toolchain install nightly
|
||||
rustup default nightly
|
||||
pushd thirdparty/librashader
|
||||
./build-librashader.sh
|
||||
popd
|
||||
fi
|
||||
- name: "macOS: recover MoltenVK cache"
|
||||
if: runner.os == 'macOS'
|
||||
uses: actions/cache@v4
|
||||
env:
|
||||
cache-name: moltenvk
|
||||
with:
|
||||
path: thirdparty/MoltenVK/MoltenVK
|
||||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('thirdparty/MoltenVK/HEAD') }}
|
||||
- name: Install macOS Dependencies
|
||||
if: runner.os == 'macOS'
|
||||
run: |
|
||||
sudo xcode-select -s /Applications/Xcode_16.1.0.app/Contents/Developer
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.13
|
||||
brew install ninja cmake
|
||||
pip install --no-input setuptools
|
||||
rustup toolchain install nightly
|
||||
rustup default nightly
|
||||
rustup target add x86_64-apple-darwin
|
||||
rustup target add aarch64-apple-darwin
|
||||
pushd thirdparty/SDL
|
||||
./build-SDL.sh
|
||||
popd
|
||||
pushd thirdparty/MoltenVK
|
||||
./build-moltenvk.sh
|
||||
popd
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.15
|
||||
pushd thirdparty/librashader
|
||||
./build-librashader.sh
|
||||
popd
|
||||
- name: Set up MSVC environment
|
||||
if: matrix.platform.msvc-arch != ''
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
arch: ${{ matrix.platform.msvc-arch }}
|
||||
- name: Make
|
||||
if: runner.os != 'macOS'
|
||||
run: ${MAKE:-make} -j4 -C desktop-ui build=optimized local=false compiler="${{ matrix.platform.compiler }}" windres="${{ matrix.platform.windres }}"
|
||||
- name: "macOS: Make universal app"
|
||||
if: runner.os == 'macOS'
|
||||
run: scripts/macos-make-universal.sh build=optimized local=false
|
||||
env:
|
||||
MAKEFLAGS: -j3
|
||||
MACOS_CERTIFICATE_NAME: ${{ secrets.MACOS_CERTIFICATE_NAME }}
|
||||
MACOS_KEYCHAIN_NAME: ares-macos-keychain
|
||||
MACOS_KEYCHAIN_PASSWORD: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
|
||||
- name: "Windows: sign"
|
||||
if: runner.os == 'Windows' && github.event_name != 'pull_request'
|
||||
uses: DanaBear/code-sign-action@98c79121b376beab8d6a9484f445089db4461bca
|
||||
with:
|
||||
certificate: '${{ secrets.WIN_CERTIFICATE }}'
|
||||
password: '${{ secrets.WIN_PASSWORD }}'
|
||||
certificatesha1: '${{ secrets.WIN_CERTHASH }}'
|
||||
certificatename: '${{ secrets.WIN_CERTNAME }}'
|
||||
folder: 'desktop-ui/out'
|
||||
timestampUrl: 'http://timestamp.digicert.com'
|
||||
- name: "macOS: notarize"
|
||||
if: false
|
||||
continue-on-error: ${{ github.repository != 'ares-emulator/ares' }}
|
||||
run: |
|
||||
ditto -c -k --keepParent desktop-ui/out/ares.app /tmp/ares.zip
|
||||
xcrun notarytool submit /tmp/ares.zip --apple-id "$MACOS_NOTARIZATION_USERNAME" --password "$MACOS_NOTARIZATION_PASSWORD" --team-id "$MACOS_NOTARIZATION_TEAMID" --wait
|
||||
xcrun stapler staple desktop-ui/out/ares.app
|
||||
env:
|
||||
MACOS_NOTARIZATION_USERNAME: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
|
||||
MACOS_NOTARIZATION_PASSWORD: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
|
||||
MACOS_NOTARIZATION_TEAMID: ${{ secrets.MACOS_NOTARIZATION_TEAMID }}
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.program }}-${{ matrix.platform.name }}
|
||||
path: desktop-ui/out/*
|
||||
|
||||
|
||||
release:
|
||||
if: false
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- build
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
path: 'src'
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: 'bin'
|
||||
- name: Package Artifacts
|
||||
run: |
|
||||
set -eu
|
||||
case ${GITHUB_REF} in
|
||||
refs/tags/*) suffix="-${GITHUB_REF#refs/tags/}" ;;
|
||||
refs/heads/master) suffix="-nightly" ;;
|
||||
*) suffix="" ;;
|
||||
esac
|
||||
|
||||
srcdir="${GITHUB_WORKSPACE}/src"
|
||||
bindir="${GITHUB_WORKSPACE}/bin"
|
||||
|
||||
# Hack: Workaround for GitHub artifacts losing attributes.
|
||||
chmod +x ${bindir}/ares-macos-universal/ares.app/Contents/MacOS/ares
|
||||
|
||||
for package in windows windows-msvc-arm64 macos-universal
|
||||
do
|
||||
mkdir "${package}"
|
||||
cd "${package}"
|
||||
|
||||
# Package ares.
|
||||
outdir=ares${suffix}
|
||||
mkdir ${outdir}
|
||||
cp -ar ${bindir}/ares-${package}/* ${outdir}
|
||||
zip -r ../ares-${package}.zip ${outdir}
|
||||
|
||||
cd -
|
||||
done
|
||||
- name: Create Release
|
||||
id: release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
set -eu
|
||||
github_rest()
|
||||
{
|
||||
local method="${1}"
|
||||
local url="https://api.github.com${2}"
|
||||
shift 2
|
||||
>&2 echo "${method} ${url}"
|
||||
curl \
|
||||
--fail \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
-H "Authorization: token ${GITHUB_TOKEN}" \
|
||||
-X "${method}" \
|
||||
"${url}" \
|
||||
"$@"
|
||||
}
|
||||
github_get_release_id_for_tag()
|
||||
{
|
||||
payload=$(github_rest GET "/repos/${GITHUB_REPOSITORY}/releases/tags/${1}") || return
|
||||
echo "${payload}" | jq .id
|
||||
}
|
||||
github_delete_release_by_id()
|
||||
{
|
||||
github_rest DELETE "/repos/${GITHUB_REPOSITORY}/releases/${1}"
|
||||
}
|
||||
github_create_release()
|
||||
{
|
||||
local payload="{
|
||||
\"tag_name\": \"${1}\",
|
||||
\"target_commitish\": \"${2}\",
|
||||
\"name\": \"${3}\",
|
||||
\"body\": \"${4}\",
|
||||
\"draft\": ${5},
|
||||
\"prerelease\": ${6}
|
||||
}"
|
||||
github_rest POST "/repos/${GITHUB_REPOSITORY}/releases" -d "${payload}"
|
||||
}
|
||||
make_nightly_release()
|
||||
{
|
||||
github_create_release \
|
||||
nightly \
|
||||
"${GITHUB_SHA}" \
|
||||
"ares nightly $(date +"%Y-%m-%d")" \
|
||||
"Auto-generated nightly release on $(date -u +"%Y-%m-%d %T %Z")" \
|
||||
false \
|
||||
true
|
||||
}
|
||||
make_version_release()
|
||||
{
|
||||
github_create_release \
|
||||
"${1}" \
|
||||
"${GITHUB_SHA}" \
|
||||
"ares ${1}" \
|
||||
"This is ares ${1}, released on $(date +"%Y-%m-%d")." \
|
||||
false \
|
||||
false
|
||||
}
|
||||
case ${GITHUB_REF} in
|
||||
refs/tags/*)
|
||||
# Create a new version release using the current revision.
|
||||
echo "UPLOAD_URL=$(make_version_release ${GITHUB_REF#refs/tags/} | jq -r .upload_url)" >> $GITHUB_ENV
|
||||
;;
|
||||
refs/heads/master)
|
||||
# Check for an existing nightly release.
|
||||
{ release_id=$(github_get_release_id_for_tag nightly); status=$?; } || true
|
||||
# Delete existing nightly release if it exists.
|
||||
case ${status} in
|
||||
0) github_delete_release_by_id "${release_id}" ;;
|
||||
22) >&2 echo "No current nightly release; skipping tag deletion." ;;
|
||||
*) >&2 echo "API call failed unexpectedly." && exit 1 ;;
|
||||
esac
|
||||
# Create a new nightly release using the current revision.
|
||||
echo "UPLOAD_URL=$(make_nightly_release | jq -r .upload_url)" >> $GITHUB_ENV
|
||||
;;
|
||||
esac
|
||||
- name: Upload ares-windows
|
||||
uses: actions/upload-release-asset@v1
|
||||
env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' }
|
||||
with: { upload_url: '${{ env.UPLOAD_URL }}', asset_path: 'ares-windows.zip', asset_name: 'ares-windows.zip', asset_content_type: 'application/zip' }
|
||||
- name: Upload ares-windows-msvc-arm64
|
||||
uses: actions/upload-release-asset@v1
|
||||
env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' }
|
||||
with: { upload_url: '${{ env.UPLOAD_URL }}', asset_path: 'ares-windows-msvc-arm64.zip', asset_name: 'ares-windows-msvc-arm64.zip', asset_content_type: 'application/zip' }
|
||||
- name: Upload ares-macos-universal
|
||||
uses: actions/upload-release-asset@v1
|
||||
env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' }
|
||||
with: { upload_url: '${{ env.UPLOAD_URL }}', asset_path: 'ares-macos-universal.zip', asset_name: 'ares-macos-universal.zip', asset_content_type: 'application/zip' }
|
||||
# - name: Upload ares-ubuntu
|
||||
# uses: actions/upload-release-asset@v1
|
||||
# env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' }
|
||||
# with: { upload_url: '${{ env.UPLOAD_URL }}', asset_path: 'ares-ubuntu.zip', asset_name: 'ares-ubuntu.zip', asset_content_type: 'application/zip' }
|
||||
@@ -0,0 +1,153 @@
|
||||
name: Build (New)
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
codesign:
|
||||
description: Enable codesigning
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
program:
|
||||
- ares
|
||||
config:
|
||||
- RelWithDebInfo
|
||||
platform:
|
||||
- name: windows-x64
|
||||
os: windows-latest
|
||||
compiler: clang++
|
||||
shell: 'msys2 {0}'
|
||||
msystem: clang64
|
||||
install: mingw-w64-clang-x86_64-clang
|
||||
target-cmake-preset: windows-ci-mingw-native
|
||||
- name: windows-x64-gcc
|
||||
os: windows-latest
|
||||
compiler: g++
|
||||
shell: 'msys2 {0}'
|
||||
msystem: mingw64
|
||||
install: mingw-w64-x86_64-toolchain
|
||||
target-cmake-preset: windows-ci-mingw-native
|
||||
- name: windows-clang-cl-x64
|
||||
os: windows-latest
|
||||
windres: rc
|
||||
shell: bash
|
||||
target-cmake-preset: windows-ci-cl-native
|
||||
- name: windows-clang-cl-arm64
|
||||
os: windows-latest
|
||||
windres: rc
|
||||
shell: bash
|
||||
target-cmake-preset: windows-ci-cl-cross
|
||||
native-cmake-preset: windows-ci-cl-native
|
||||
- name: windows-msvc-x64
|
||||
os: windows-latest
|
||||
windres: rc
|
||||
shell: bash
|
||||
target-cmake-preset: windows-ci-msvc-native
|
||||
- name: windows-msvc-arm64
|
||||
os: windows-latest
|
||||
windres: rc
|
||||
shell: bash
|
||||
target-cmake-preset: windows-ci-msvc-cross
|
||||
native-cmake-preset: windows-ci-msvc-native
|
||||
- name: macos-universal
|
||||
os: macos-15
|
||||
compiler: clang++
|
||||
shell: sh
|
||||
install: cmake ccache xcbeautify
|
||||
target-cmake-preset: macos-ci-universal
|
||||
- name: ubuntu
|
||||
os: ubuntu-latest
|
||||
compiler: g++
|
||||
shell: bash
|
||||
install: cmake ccache ninja-build libsdl2-dev libgtk-3-dev libao-dev libopenal-dev
|
||||
target-cmake-preset: ubuntu-ci
|
||||
name: ${{ matrix.program }}-${{ matrix.platform.name }}
|
||||
runs-on: ${{ matrix.platform.os }}
|
||||
defaults:
|
||||
run:
|
||||
shell: ${{ matrix.platform.shell }}
|
||||
steps:
|
||||
- name: Install MSYS2 Dependencies
|
||||
if: matrix.platform.shell == 'msys2 {0}'
|
||||
uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: ${{ matrix.platform.msystem }}
|
||||
install: make git cmake ccache ninja ${{ matrix.platform.install }}
|
||||
- name: "macOS: Import Certificate"
|
||||
if: runner.os == 'macOS' && inputs.codesign
|
||||
uses: apple-actions/import-codesign-certs@v3
|
||||
continue-on-error: ${{ !inputs.codesign }}
|
||||
with:
|
||||
p12-file-base64: ${{ secrets.MACOS_CERTIFICATE_DATA }}
|
||||
p12-password: ${{ secrets.MACOS_CERTIFICATE_PASSPHRASE }}
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-tags: true
|
||||
fetch-depth: 0
|
||||
- name: Install Linux Dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update -y -qq
|
||||
sudo apt-get install ${{ matrix.platform.install }}
|
||||
- name: Install macOS Dependencies
|
||||
if: runner.os == 'macOS'
|
||||
run: |
|
||||
brew install ${{ matrix.platform.install }}
|
||||
- name: "Build: Linux"
|
||||
if: runner.os == 'Linux'
|
||||
run: .github/scripts/build_ubuntu.sh
|
||||
env:
|
||||
TARGET_PRESET: ${{ matrix.platform.target-cmake-preset }}
|
||||
- name: "Build: Windows"
|
||||
if: runner.os != 'macOS' && runner.os != 'Linux'
|
||||
run: .github/scripts/build_windows.sh
|
||||
env:
|
||||
CROSS_COMPILE: ${{ matrix.platform.native-cmake-preset != '' }}
|
||||
NATIVE_PRESET: ${{ matrix.platform.native-cmake-preset }}
|
||||
TARGET_PRESET: ${{ matrix.platform.target-cmake-preset }}
|
||||
- name: "Windows: sign"
|
||||
if: runner.os == 'Windows' && inputs.codesign
|
||||
uses: DanaBear/code-sign-action@98c79121b376beab8d6a9484f445089db4461bca
|
||||
with:
|
||||
certificate: '${{ secrets.WIN_CERTIFICATE }}'
|
||||
password: '${{ secrets.WIN_PASSWORD }}'
|
||||
certificatesha1: '${{ secrets.WIN_CERTHASH }}'
|
||||
certificatename: '${{ secrets.WIN_CERTNAME }}'
|
||||
folder: 'build/desktop-ui/rundir/'
|
||||
timestampUrl: 'http://timestamp.digicert.com'
|
||||
- name: "Build: macOS"
|
||||
if: runner.os == 'macOS'
|
||||
run: .github/scripts/build_macos.sh
|
||||
env:
|
||||
TARGET_PRESET: ${{ matrix.platform.target-cmake-preset }}
|
||||
MACOS_CERTIFICATE_NAME: ${{ secrets.MACOS_CERTIFICATE_NAME }}
|
||||
MACOS_NOTARIZATION_TEAMID: ${{ secrets.MACOS_NOTARIZATION_TEAMID }}
|
||||
- name: Upload Build (Windows)
|
||||
if: runner.os != 'macOS' && runner.os != 'Linux'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.program }}-${{ matrix.platform.name }}
|
||||
path: build/desktop-ui/rundir/*
|
||||
- name: Upload Build (macOS)
|
||||
if: runner.os == 'macOS'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.program }}-${{ matrix.platform.name }}
|
||||
path: build/desktop-ui/RelWithDebInfo/
|
||||
- name: Upload Debug Symbols (Windows)
|
||||
if: runner.os != 'macOS' && runner.os != 'Linux'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.program }}-${{ matrix.platform.name }}-PDBs
|
||||
path: build/PDBs/*
|
||||
- name: Upload Debug Symbols (macOS)
|
||||
if: runner.os == 'macOS'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.program }}-${{ matrix.platform.name }}-dSYMs
|
||||
path: build/dSYMs/*
|
||||
@@ -0,0 +1,17 @@
|
||||
name: Pull Request
|
||||
run-name: ${{ github.event.pull_request.title }} PR run
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ '*' ]
|
||||
types: [ opened, synchronize, reopened ]
|
||||
permissions:
|
||||
contents: read
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
build-project:
|
||||
name: Build
|
||||
uses: ./.github/workflows/build_new.yml
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -0,0 +1,24 @@
|
||||
name: Push
|
||||
on:
|
||||
push:
|
||||
branches: [ '*' ]
|
||||
tags: [ 'v*' ]
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
permissions:
|
||||
contents: write
|
||||
jobs:
|
||||
build:
|
||||
name: Build ares
|
||||
uses: ./.github/workflows/build_new.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
codesign: true
|
||||
release:
|
||||
name: Release
|
||||
needs: build
|
||||
secrets: inherit
|
||||
uses: ./.github/workflows/release.yml
|
||||
with:
|
||||
notarize: true
|
||||
@@ -0,0 +1,68 @@
|
||||
name: Release
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
notarize:
|
||||
description: Notarize build (macOS only)
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
jobs:
|
||||
release:
|
||||
if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
path: 'src'
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: 'bin'
|
||||
- name: "macOS: notarize"
|
||||
if: inputs.notarize
|
||||
run: |
|
||||
ditto -c -k --keepParent ${{ github.workspace }}/bin/ares-macos-universal/ares.app /tmp/ares.zip
|
||||
xcrun notarytool submit /tmp/ares.zip --apple-id "$MACOS_NOTARIZATION_USERNAME" --password "$MACOS_NOTARIZATION_PASSWORD" --team-id "$MACOS_NOTARIZATION_TEAMID" --wait
|
||||
xcrun stapler staple ${{ github.workspace }}/bin/ares-macos-universal/ares.app
|
||||
env:
|
||||
MACOS_NOTARIZATION_USERNAME: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
|
||||
MACOS_NOTARIZATION_PASSWORD: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
|
||||
MACOS_NOTARIZATION_TEAMID: ${{ secrets.MACOS_NOTARIZATION_TEAMID }}
|
||||
- name: Package Artifacts
|
||||
run: src/.github/scripts/package_artifacts.sh
|
||||
- name: Check Release Tag ☑️
|
||||
id: check
|
||||
run: |
|
||||
now=$(date +'%Y-%m-%d')
|
||||
subject=$(git -C src log -1 --pretty=%s)
|
||||
if [[ ${GITHUB_REF_NAME} == master ]];
|
||||
then
|
||||
echo "tag=nightly" >> $GITHUB_OUTPUT
|
||||
versionName="nightly ${now}"
|
||||
echo "versionName=${versionName}" >> $GITHUB_OUTPUT
|
||||
echo "description=${subject}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "tag=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
|
||||
echo "versionName=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
|
||||
description="This is ares ${GITHUB_REF_NAME}, released on ${now}."
|
||||
echo "description=${description}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Create Release 🛫
|
||||
id: create_release
|
||||
uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191
|
||||
with:
|
||||
draft: ${{ github.ref != 'refs/heads/master' }}
|
||||
tag_name: ${{ steps.check.outputs.tag }}
|
||||
name: ares ${{ steps.check.outputs.versionName }}
|
||||
body: ${{ steps.check.outputs.description }}
|
||||
files: |
|
||||
${{ github.workspace }}/ares-macos-universal.zip
|
||||
${{ github.workspace }}/ares-macos-universal-dSYMs.zip
|
||||
${{ github.workspace }}/ares-windows-x64.zip
|
||||
${{ github.workspace }}/ares-windows-x64-PDBs.zip
|
||||
${{ github.workspace }}/ares-windows-clang-cl-x64.zip
|
||||
${{ github.workspace }}/ares-windows-clang-cl-x64-PDBs.zip
|
||||
${{ github.workspace }}/ares-windows-clang-cl-arm64.zip
|
||||
${{ github.workspace }}/ares-windows-clang-cl-arm64-PDBs.zip
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
# Exclude everything
|
||||
/*
|
||||
|
||||
# Except for default project files
|
||||
!/.github
|
||||
!/ares
|
||||
!/desktop-ui
|
||||
!/hiro
|
||||
!/cmake
|
||||
!/libco
|
||||
!/mia
|
||||
!/nall
|
||||
!/ruby
|
||||
!/scripts
|
||||
!/tests
|
||||
!/thirdparty
|
||||
!/tools
|
||||
!/GNUMakefile
|
||||
!/LICENSE
|
||||
!/README.md
|
||||
!.editorconfig
|
||||
!.gitignore
|
||||
!.gitattributes
|
||||
!.gersemirc
|
||||
!deps.json
|
||||
!CMakeLists.txt
|
||||
!CMakePresets.json
|
||||
|
||||
thirdparty/SDL/SDL
|
||||
thirdparty/SDL/libSDL2-2.0.0.dylib
|
||||
desktop-ui/out
|
||||
desktop-ui/obj
|
||||
ruby/video/metal/shaders.metallib
|
||||
ruby/video/metal/shaders.ir
|
||||
ares/ares/resource/resource.cpp
|
||||
ares/ares/resource/resource.hpp
|
||||
hiro/resource/resource.cpp
|
||||
hiro/resource/resource.hpp
|
||||
desktop-ui/resource/resource.cpp
|
||||
desktop-ui/resource/resource.hpp
|
||||
tests/arm7tdmi/tests
|
||||
tests/m68000/tests
|
||||
@@ -0,0 +1,55 @@
|
||||
cmake_minimum_required(VERSION 3.28...3.30)
|
||||
|
||||
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/common/bootstrap.cmake" NO_POLICY_SCOPE)
|
||||
|
||||
project(ares VERSION ${ARES_VERSION_CANONICAL})
|
||||
|
||||
include(compilerconfig)
|
||||
include(defaults)
|
||||
include(helpers)
|
||||
|
||||
add_subdirectory(cmake)
|
||||
|
||||
add_subdirectory(thirdparty)
|
||||
|
||||
add_subdirectory(nall)
|
||||
add_subdirectory(libco)
|
||||
add_subdirectory(ruby)
|
||||
add_subdirectory(hiro)
|
||||
|
||||
# gersemi: off
|
||||
set(
|
||||
ARES_CORES
|
||||
a26 fc sfc sg ms md ps1 pce ng msx cv myvision gb gba ws ngp spec n64
|
||||
CACHE STRING LIST
|
||||
)
|
||||
# gersemi: on
|
||||
|
||||
add_subdirectory(ares)
|
||||
add_subdirectory(mia)
|
||||
add_subdirectory(desktop-ui)
|
||||
|
||||
option(ARES_BUILD_OPTIONAL_TARGETS "Include supplemental tools and tests" OFF)
|
||||
|
||||
if(ARES_BUILD_OPTIONAL_TARGETS)
|
||||
add_subdirectory(tests/arm7tdmi)
|
||||
add_subdirectory(tests/i8080)
|
||||
add_subdirectory(tests/m68000)
|
||||
if(NOT OS_WINDOWS AND NOT OS_MACOS)
|
||||
add_subdirectory(tools/genius)
|
||||
else()
|
||||
target_disable_subproject(genius "genius (database editor)")
|
||||
endif()
|
||||
add_subdirectory(tools/mame2bml)
|
||||
else()
|
||||
target_disable_subproject(arm7tdmi "arm7tdmi processor test harness")
|
||||
target_disable_subproject(i8080 "i8080 processor test harness")
|
||||
target_disable_subproject(m68000 "m68000 processor test harness")
|
||||
target_disable_subproject(mame2bml "mame2bml (MAME manifest converter)")
|
||||
target_disable_subproject(genius "genius (database editor)")
|
||||
endif()
|
||||
|
||||
add_subdirectory(tools/sourcery)
|
||||
|
||||
message_configuration()
|
||||
return()
|
||||
@@ -0,0 +1,176 @@
|
||||
{
|
||||
"version": 3,
|
||||
"cmakeMinimumRequired": {
|
||||
"major": 3,
|
||||
"minor": 28,
|
||||
"patch": 0
|
||||
},
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "baseCacheVars",
|
||||
"hidden": true,
|
||||
"cacheVariables": {
|
||||
"ARES_PROFILE_ACCURACY": false,
|
||||
"ARES_BUILD_LOCAL": true,
|
||||
"ENABLE_CCACHE": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "macos",
|
||||
"displayName": "macOS",
|
||||
"description": "Xcode project (host architecture by default)",
|
||||
"inherits": ["baseCacheVars"],
|
||||
"condition": {
|
||||
"type": "equals",
|
||||
"lhs": "${hostSystemName}",
|
||||
"rhs": "Darwin"
|
||||
},
|
||||
"generator": "Xcode",
|
||||
"binaryDir": "${sourceDir}/build_macos",
|
||||
"cacheVariables": {
|
||||
"ARES_CODESIGN_IDENTITY": {"type": "STRING", "value": "$penv{CODESIGN_IDENT}"},
|
||||
"ARES_CODESIGN_TEAM": {"type": "STRING", "value": "$penv{CODESIGN_TEAM}"},
|
||||
"ARES_BUILD_OPTIONAL_TARGETS": true,
|
||||
"ENABLE_CCACHE": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "windows",
|
||||
"displayName": "Windows (Visual Studio, ClangCL)",
|
||||
"description": "Visual Studio project using ClangCL (host architecture)",
|
||||
"inherits": ["baseCacheVars"],
|
||||
"condition": {
|
||||
"type": "equals",
|
||||
"lhs": "${hostSystemName}",
|
||||
"rhs": "Windows"
|
||||
},
|
||||
"binaryDir": "${sourceDir}/build_vsclang",
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"toolset": "ClangCL",
|
||||
"cacheVariables": {
|
||||
"ENABLE_CCACHE": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "windows-msvc",
|
||||
"displayName": "Windows (Visual Studio, MSVC)",
|
||||
"description": "Visual Studio project using MSVC (host architecture)",
|
||||
"inherits": ["baseCacheVars"],
|
||||
"condition": {
|
||||
"type": "equals",
|
||||
"lhs": "${hostSystemName}",
|
||||
"rhs": "Windows"
|
||||
},
|
||||
"binaryDir": "${sourceDir}/build_msvc",
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"cacheVariables": {
|
||||
"ENABLE_CCACHE": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "macos-ci-universal",
|
||||
"displayName": "macOS for CI",
|
||||
"description": "Universal binary for building on Github Actions",
|
||||
"inherits": ["baseCacheVars"],
|
||||
"condition": {
|
||||
"type": "equals",
|
||||
"lhs": "${hostSystemName}",
|
||||
"rhs": "Darwin"
|
||||
},
|
||||
"generator": "Xcode",
|
||||
"binaryDir": "${sourceDir}/build",
|
||||
"cacheVariables": {
|
||||
"CMAKE_OSX_ARCHITECTURES": {"type": "STRING", "value": "x86_64;arm64"},
|
||||
"CMAKE_OSX_DEPLOYMENT_TARGET": {"type": "STRING", "value": "10.13"},
|
||||
"ARES_CODESIGN_IDENTITY": {"type": "STRING", "value": "$penv{MACOS_CERTIFICATE_NAME}"},
|
||||
"ARES_CODESIGN_TEAM": {"type": "STRING", "value": "$penv{MACOS_NOTARIZATION_TEAMID}"},
|
||||
"ENABLE_CCACHE": true,
|
||||
"ARES_BUILD_LOCAL": false,
|
||||
"ARES_UNITY_CORES": true,
|
||||
"ARES_BUILD_OPTIONAL_TARGETS": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "windows-ci-base",
|
||||
"hidden": true,
|
||||
"inherits": ["baseCacheVars"],
|
||||
"binaryDir": "${sourceDir}/build",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": {"type": "STRING", "value": "RelWithDebInfo"},
|
||||
"ENABLE_CCACHE": true,
|
||||
"ARES_BUILD_LOCAL": false,
|
||||
"ARES_BUILD_OPTIONAL_TARGETS": true,
|
||||
"ARES_UNITY_CORES": true,
|
||||
"ARES_PRECOMPILE_HEADERS": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "windows-ci-mingw-native",
|
||||
"displayName": "Windows for CI (x64 MSYS2/MinGW Clang)",
|
||||
"description": "Single-arch binary for building on Github Actions",
|
||||
"inherits": ["windows-ci-base"],
|
||||
"generator": "Ninja"
|
||||
},
|
||||
{
|
||||
"name": "windows-ci-cl-native",
|
||||
"displayName": "Windows for CI (x64 ClangCL)",
|
||||
"description": "Single-arch binary for building on Github Actions",
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"inherits": ["windows-ci-base"],
|
||||
"toolset": "ClangCL"
|
||||
},
|
||||
{
|
||||
"name": "windows-ci-cl-cross",
|
||||
"displayName": "Windows for CI (arm64 ClangCL)",
|
||||
"description": "Single-arch binary for building on Github Actions",
|
||||
"inherits": ["windows-ci-base"],
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"architecture": "arm64",
|
||||
"toolset": "ClangCL",
|
||||
"cacheVariables": {
|
||||
"ARES_CROSSCOMPILING": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "windows-ci-msvc-native",
|
||||
"displayName": "Windows for CI (x64 MSVC)",
|
||||
"description": "Single-arch binary for building on Github Actions",
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"inherits": ["windows-ci-base"]
|
||||
},
|
||||
{
|
||||
"name": "windows-ci-msvc-cross",
|
||||
"displayName": "Windows for CI (arm64 MSVC)",
|
||||
"description": "Single-arch binary for building on Github Actions",
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"architecture": "arm64",
|
||||
"inherits": ["windows-ci-base"],
|
||||
"cacheVariables": {
|
||||
"ARES_CROSSCOMPILING": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ubuntu-ci",
|
||||
"displayName": "Ubuntu CI (x64 gcc)",
|
||||
"description": "Single-arch binary for building on Github Actions",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": {"type": "STRING", "value": "RelWithDebInfo"},
|
||||
"ENABLE_CCACHE": true,
|
||||
"ARES_BUILD_LOCAL": false,
|
||||
"ARES_BUILD_OPTIONAL_TARGETS": true,
|
||||
"ARES_PRECOMPILE_HEADERS": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
"name": "windows",
|
||||
"configurePreset": "windows",
|
||||
"displayName": "Windows build (host architecture)",
|
||||
"description": "Windows build (host architecture)",
|
||||
"configuration": "RelWithDebInfo"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
targets = all clean install uninstall verbose
|
||||
|
||||
$(targets):
|
||||
@$(MAKE) -C desktop-ui $@
|
||||
|
||||
.PHONY: $(targets)
|
||||
@@ -0,0 +1,831 @@
|
||||
----------------------------------------------------------------------
|
||||
ares
|
||||
|
||||
Copyright (c) 2004-2024 ares team, Near et al
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Stack-less Just-In-Time compiler
|
||||
|
||||
Copyright Zoltan Herczeg ([email protected]). All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS
|
||||
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
libchdr
|
||||
|
||||
Copyright Romain Tisserand
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the <organization> nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
LZMA SDK is placed in the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute
|
||||
the original LZMA SDK code, either in source code form or as a compiled binary,
|
||||
for any purpose, commercial or non-commercial, and by any means.
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
zlib
|
||||
|
||||
(C) 1995-2017 Jean-loup Gailly and Mark Adler
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
Jean-loup Gailly Mark Adler
|
||||
[email protected] [email protected]
|
||||
|
||||
If you use the zlib library in a product, we would appreciate *not* receiving
|
||||
lengthy legal documents to sign. The sources are provided for free but without
|
||||
warranty of any kind. The library has been entirely written by Jean-loup
|
||||
Gailly and Mark Adler; it does not include third-party code.
|
||||
|
||||
If you redistribute modified sources, we would appreciate that you include in
|
||||
the file ChangeLog history information documenting your changes. Please read
|
||||
the FAQ for more information on the distribution of modified source versions.
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
xxHash - Extremely Fast Hash algorithm
|
||||
Header File
|
||||
Copyright (C) 2012-2021 Yann Collet
|
||||
|
||||
BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
You can contact the author at:
|
||||
- xxHash homepage: https://www.xxhash.com
|
||||
- xxHash source repository: https://github.com/Cyan4973/xxHash
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
MoltenVK
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
OpenGL API and Extension Registry
|
||||
https://github.com/KhronosGroup/OpenGL-Registry
|
||||
|
||||
Copyright 2013-2020 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.
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
EGL API and Extension Registry
|
||||
https://github.com/KhronosGroup/EGL-Registry
|
||||
|
||||
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.
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
TZXFile
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 MrReeMachine
|
||||
|
||||
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.
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
ymfm
|
||||
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2021, Aaron Giles
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
librashader
|
||||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
### 1. Definitions
|
||||
|
||||
**1.1. “Contributor”**
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
**1.2. “Contributor Version”**
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
**1.3. “Contribution”**
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
**1.4. “Covered Software”**
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
**1.5. “Incompatible With Secondary Licenses”**
|
||||
means
|
||||
|
||||
* **(a)** that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
* **(b)** that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
**1.6. “Executable Form”**
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
**1.7. “Larger Work”**
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
**1.8. “License”**
|
||||
means this document.
|
||||
|
||||
**1.9. “Licensable”**
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
**1.10. “Modifications”**
|
||||
means any of the following:
|
||||
|
||||
* **(a)** any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
* **(b)** any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
**1.11. “Patent Claims” of a Contributor**
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
**1.12. “Secondary License”**
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
**1.13. “Source Code Form”**
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
**1.14. “You” (or “Your”)**
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, “You” includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, “control” means **(a)** the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or **(b)** ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
|
||||
### 2. License Grants and Conditions
|
||||
|
||||
#### 2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
* **(a)** under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
* **(b)** under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
#### 2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
#### 2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
* **(a)** for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
* **(b)** for infringements caused by: **(i)** Your and any other third party's
|
||||
modifications of Covered Software, or **(ii)** the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
* **(c)** under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
#### 2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
#### 2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
#### 2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
#### 2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
|
||||
### 3. Responsibilities
|
||||
|
||||
#### 3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
#### 3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
* **(a)** such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
* **(b)** You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
#### 3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
#### 3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
#### 3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
|
||||
### 4. Inability to Comply Due to Statute or Regulation
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: **(a)** comply with
|
||||
the terms of this License to the maximum extent possible; and **(b)**
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
|
||||
### 5. Termination
|
||||
|
||||
**5.1.** The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated **(a)** provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and **(b)** on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
**5.2.** If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
|
||||
### 6. Disclaimer of Warranty
|
||||
|
||||
> Covered Software is provided under this License on an “as is”
|
||||
> basis, without warranty of any kind, either expressed, implied, or
|
||||
> statutory, including, without limitation, warranties that the
|
||||
> Covered Software is free of defects, merchantable, fit for a
|
||||
> particular purpose or non-infringing. The entire risk as to the
|
||||
> quality and performance of the Covered Software is with You.
|
||||
> Should any Covered Software prove defective in any respect, You
|
||||
> (not any Contributor) assume the cost of any necessary servicing,
|
||||
> repair, or correction. This disclaimer of warranty constitutes an
|
||||
> essential part of this License. No use of any Covered Software is
|
||||
> authorized under this License except under this disclaimer.
|
||||
|
||||
### 7. Limitation of Liability
|
||||
|
||||
> Under no circumstances and under no legal theory, whether tort
|
||||
> (including negligence), contract, or otherwise, shall any
|
||||
> Contributor, or anyone who distributes Covered Software as
|
||||
> permitted above, be liable to You for any direct, indirect,
|
||||
> special, incidental, or consequential damages of any character
|
||||
> including, without limitation, damages for lost profits, loss of
|
||||
> goodwill, work stoppage, computer failure or malfunction, or any
|
||||
> and all other commercial damages or losses, even if such party
|
||||
> shall have been informed of the possibility of such damages. This
|
||||
> limitation of liability shall not apply to liability for death or
|
||||
> personal injury resulting from such party's negligence to the
|
||||
> extent applicable law prohibits such limitation. Some
|
||||
> jurisdictions do not allow the exclusion or limitation of
|
||||
> incidental or consequential damages, so this exclusion and
|
||||
> limitation may not apply to You.
|
||||
|
||||
|
||||
### 8. Litigation
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
|
||||
### 9. Miscellaneous
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
|
||||
### 10. Versions of the License
|
||||
|
||||
#### 10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
#### 10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
#### 10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
## Exhibit A - Source Code Form License Notice
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
## Exhibit B - “Incompatible With Secondary Licenses” Notice
|
||||
|
||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
@@ -0,0 +1,81 @@
|
||||
<img src="https://github.com/ares-emulator/ares/blob/master/ares/ares/resource/logo@2x.png" width="350"/>
|
||||
|
||||
[](https://github.com/higan-emu/ares/blob/master/LICENSE)
|
||||
|
||||
**ares** is a multi-system emulator that began development on October 14th, 2004.
|
||||
It is a descendant of [higan](https://github.com/higan-emu/higan) and [bsnes](https://github.com/bsnes-emu/bsnes/), and focuses on accuracy and preservation.
|
||||
|
||||
Official Releases
|
||||
-----------------
|
||||
|
||||
Official releases are available from
|
||||
[the ares website](https://ares-emu.net).
|
||||
|
||||
Nightly Builds
|
||||
--------------
|
||||
|
||||
Automated, untested builds of ares are available for Windows and macOS as a [pre-release](https://github.com/higan-emu/ares/releases/tag/nightly).
|
||||
Only the latest nightly build is kept.
|
||||
|
||||
Building ares
|
||||
-------------
|
||||
|
||||
Build instructions are available on the ares wiki. See build instructions for:
|
||||
|
||||
* [Windows](https://github.com/ares-emulator/ares/wiki/Build-Instructions-For-Windows)
|
||||
* [macOS](https://github.com/ares-emulator/ares/wiki/Build-Instructions-For-macOS)
|
||||
* [Linux](https://github.com/ares-emulator/ares/wiki/Build-Instructions-For-Linux)
|
||||
* [BSD](https://github.com/ares-emulator/ares/wiki/Build-Instructions-For-BSD)
|
||||
|
||||
For legacy Makefile build instructions, see [here](https://github.com/ares-emulator/ares/wiki/Legacy-Build-Instructions).
|
||||
|
||||
Command-line options
|
||||
--------------------
|
||||
|
||||
When started from the command-line, ares accepts a few options.
|
||||
|
||||
```
|
||||
Usage: ./ares [options] game(s)
|
||||
|
||||
--help Displays available options and exit
|
||||
--fullscreen Start in full screen mode
|
||||
--system system Specify the system name
|
||||
--shader shader Specify GLSL shader name to load (requires OpenGL driver)
|
||||
--setting name=value Specify a value for a setting
|
||||
--dump-all-settings Show a list of all existing settings and exit
|
||||
--no-file-prompt Do not prompt to load (optional) additional roms (eg: 64DD)
|
||||
```
|
||||
|
||||
The --system option is useful when the system type cannot be auto-detected.
|
||||
--fullscreen will only have an effect if a game is also passed in argument.
|
||||
|
||||
Example:
|
||||
`ares --system MSX examples.rom --fullscreen`
|
||||
|
||||
Specifying multiple games allows for multi-cart support. For example, to load
|
||||
the Super GameBoy BIOS and a game in one command (to avoid a file prompt), you
|
||||
can do:
|
||||
|
||||
`ares "Super GameBoy.sfc" "Super Mario Land.gb"`
|
||||
|
||||
The --no-file-prompt option is useful if you wish to launch a game from CLI
|
||||
without being prompted to load additional roms. For example, some Nintendo 64
|
||||
games optionally support 64DD expansion disks, so this option can be used to
|
||||
suppress the "64DD Disk" file dialog, and assume any secondary content is
|
||||
disconnected.
|
||||
|
||||
High-level Components
|
||||
---------------------
|
||||
|
||||
* __ares__: emulator cores and component implementations
|
||||
* __desktop-ui__: main GUI implementation for this project
|
||||
* __hiro__: cross-platform GUI toolkit that utilizes native APIs on supported platforms
|
||||
* __nall__: Near's alternative to the C++ standard library
|
||||
* __ruby__: interface between a hiro application and platform-specific APIs for emulator video, audio, and input
|
||||
* __mia__: internal ROM database and ROM/image loader
|
||||
* __libco__: cooperative multithreading library
|
||||
|
||||
Contributing
|
||||
------------
|
||||
|
||||
Please join our discord to chat with other ares developers: https://discord.com/invite/gz2quhk2kv
|
||||
@@ -0,0 +1,305 @@
|
||||
add_library(ares STATIC ares/ares.cpp ares/memory/fixed-allocator.cpp)
|
||||
|
||||
add_library(ares::ares ALIAS ares)
|
||||
|
||||
option(ARES_PROFILE_ACCURACY "Build to prefer emulation accuracy over performance in certain specific areas" OFF)
|
||||
option(ARES_PRECOMPILE_HEADERS "Precompile ares/ares.hpp header for performance" OFF)
|
||||
option(
|
||||
ARES_UNITY_CORES
|
||||
"\
|
||||
Build each core as one translation unit. Decreases cold build times but increases incremental build times. Slightly \
|
||||
increases performance.
|
||||
"
|
||||
OFF
|
||||
)
|
||||
|
||||
add_sourcery_command(ares ares/resource)
|
||||
|
||||
if(ARES_PRECOMPILE_HEADERS)
|
||||
target_precompile_headers(ares PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:ares/ares.hpp>")
|
||||
endif()
|
||||
|
||||
target_link_libraries(ares PUBLIC libco sljit nall)
|
||||
|
||||
if(ARES_PROFILE_ACCURACY)
|
||||
target_compile_definitions(ares PUBLIC PROFILE_ACCURACY)
|
||||
else()
|
||||
target_compile_definitions(ares PUBLIC PROFILE_PERFORMANCE)
|
||||
endif()
|
||||
|
||||
target_sources(
|
||||
ares
|
||||
PRIVATE ares/ares.cpp ares/ares.hpp ares/inline.hpp ares/platform.hpp ares/random.hpp ares/types.hpp
|
||||
)
|
||||
|
||||
target_sources(
|
||||
ares
|
||||
PRIVATE
|
||||
ares/debug/debug.cpp
|
||||
ares/debug/debug.hpp
|
||||
ares/memory/fixed-allocator.cpp
|
||||
ares/memory/fixed-allocator.hpp
|
||||
ares/memory/memory.hpp
|
||||
ares/memory/readable.hpp
|
||||
ares/memory/writable.hpp
|
||||
)
|
||||
|
||||
target_sources(
|
||||
ares
|
||||
PRIVATE ares/scheduler/scheduler.cpp ares/scheduler/scheduler.hpp ares/scheduler/thread.cpp ares/scheduler/thread.hpp
|
||||
)
|
||||
|
||||
target_sources(
|
||||
ares
|
||||
PRIVATE
|
||||
ares/node/attribute.hpp
|
||||
ares/node/class.hpp
|
||||
ares/node/node.cpp
|
||||
ares/node/node.hpp
|
||||
ares/node/object.hpp
|
||||
ares/node/peripheral.hpp
|
||||
ares/node/port.hpp
|
||||
ares/node/system.hpp
|
||||
)
|
||||
|
||||
target_sources(ares PRIVATE ares/node/audio/audio.hpp ares/node/audio/stream.cpp ares/node/audio/stream.hpp)
|
||||
|
||||
target_sources(ares PRIVATE ares/node/component/component.hpp ares/node/component/real-time-clock.hpp)
|
||||
|
||||
target_sources(
|
||||
ares
|
||||
PRIVATE
|
||||
ares/node/input/axis.hpp
|
||||
ares/node/input/button.hpp
|
||||
ares/node/input/input.hpp
|
||||
ares/node/input/rumble.hpp
|
||||
ares/node/input/trigger.hpp
|
||||
)
|
||||
|
||||
target_sources(
|
||||
ares
|
||||
PRIVATE
|
||||
ares/node/setting/boolean.hpp
|
||||
ares/node/setting/integer.hpp
|
||||
ares/node/setting/natural.hpp
|
||||
ares/node/setting/real.hpp
|
||||
ares/node/setting/setting.hpp
|
||||
ares/node/setting/string.hpp
|
||||
)
|
||||
|
||||
target_sources(
|
||||
ares
|
||||
PRIVATE
|
||||
ares/node/video/screen.cpp
|
||||
ares/node/video/screen.hpp
|
||||
ares/node/video/sprite.cpp
|
||||
ares/node/video/sprite.hpp
|
||||
ares/node/video/video.hpp
|
||||
)
|
||||
|
||||
if(OS_WINDOWS)
|
||||
include(cmake/os-windows.cmake)
|
||||
elseif(OS_MACOS)
|
||||
include(cmake/os-macos.cmake)
|
||||
elseif(OS_LINUX OR OS_FREEBSD OR OS_OPENBSD)
|
||||
include(cmake/os-linux.cmake)
|
||||
endif()
|
||||
|
||||
macro(ares_components)
|
||||
list(APPEND ares.components ${ARGV})
|
||||
set(ares.components ${ares.components} PARENT_SCOPE)
|
||||
endmacro()
|
||||
|
||||
macro(ares_add_sources)
|
||||
set(options "")
|
||||
set(oneValueArgs CORE)
|
||||
set(multiValueArgs PRIMARY INCLUDED UNITY)
|
||||
cmake_parse_arguments(AAS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
target_sources(ares PRIVATE ${AAS_INCLUDED} ${AAS_PRIMARY})
|
||||
|
||||
if(ARES_UNITY_CORES)
|
||||
list(APPEND AAS_INCLUDED ${AAS_PRIMARY})
|
||||
target_sources(ares PRIVATE ${AAS_UNITY})
|
||||
endif()
|
||||
|
||||
foreach(arg IN ITEMS ${AAS_INCLUDED})
|
||||
list(APPEND ARES_HEADER_SOURCES "${AAS_CORE}/${arg}")
|
||||
endforeach()
|
||||
set(ARES_HEADER_SOURCES ${ARES_HEADER_SOURCES} PARENT_SCOPE)
|
||||
endmacro()
|
||||
|
||||
list(TRANSFORM ARES_CORES STRIP)
|
||||
|
||||
if(a26 IN_LIST ARES_CORES)
|
||||
enable_core("Atari 2600")
|
||||
add_subdirectory(a26)
|
||||
else()
|
||||
disable_core("Atari 2600")
|
||||
endif()
|
||||
|
||||
if(fc IN_LIST ARES_CORES)
|
||||
enable_core("NES / Famicom")
|
||||
add_subdirectory(fc)
|
||||
else()
|
||||
disable_core("NES / Famicom")
|
||||
endif()
|
||||
|
||||
if(sfc IN_LIST ARES_CORES)
|
||||
enable_core("SNES / Super Famicom")
|
||||
add_subdirectory(sfc)
|
||||
else()
|
||||
disable_core("SNES / Super Famicom")
|
||||
endif()
|
||||
|
||||
if(n64 IN_LIST ARES_CORES)
|
||||
enable_core("Nintendo 64")
|
||||
add_subdirectory(n64)
|
||||
else()
|
||||
disable_core("Nintendo 64")
|
||||
endif()
|
||||
|
||||
if(sg IN_LIST ARES_CORES)
|
||||
enable_core("Sega SG-1000")
|
||||
add_subdirectory(sg)
|
||||
else()
|
||||
disable_core("Sega SG-1000")
|
||||
endif()
|
||||
|
||||
if(ms IN_LIST ARES_CORES)
|
||||
enable_core("Sega Master System / Mark III")
|
||||
add_subdirectory(ms)
|
||||
else()
|
||||
disable_core("Sega Master System / Mark III")
|
||||
endif()
|
||||
|
||||
if(md IN_LIST ARES_CORES)
|
||||
enable_core("Sega Mega Drive / Genesis")
|
||||
add_subdirectory(md)
|
||||
else()
|
||||
disable_core("Sega Mega Drive / Genesis")
|
||||
endif()
|
||||
|
||||
if(saturn IN_LIST ARES_CORES)
|
||||
enable_core("Sega Saturn")
|
||||
add_subdirectory(saturn)
|
||||
else()
|
||||
disable_core("Sega Saturn")
|
||||
endif()
|
||||
|
||||
if(ps1 IN_LIST ARES_CORES)
|
||||
enable_core("PlayStation")
|
||||
add_subdirectory(ps1)
|
||||
else()
|
||||
disable_core("Playstation")
|
||||
endif()
|
||||
|
||||
if(pce IN_LIST ARES_CORES)
|
||||
enable_core("PC-Engine / TurboGrafx")
|
||||
add_subdirectory(pce)
|
||||
else()
|
||||
disable_core("PC-Engine / TurboGrafx")
|
||||
endif()
|
||||
|
||||
if(msx IN_LIST ARES_CORES)
|
||||
enable_core("Microsoft MSX")
|
||||
add_subdirectory(msx)
|
||||
else()
|
||||
disable_core("Microsoft MSX")
|
||||
endif()
|
||||
|
||||
if(cv IN_LIST ARES_CORES)
|
||||
enable_core("ColecoVision")
|
||||
add_subdirectory(cv)
|
||||
else()
|
||||
disable_core("ColecoVision")
|
||||
endif()
|
||||
|
||||
if(myvision IN_LIST ARES_CORES)
|
||||
enable_core("My Vision")
|
||||
add_subdirectory(myvision)
|
||||
else()
|
||||
disable_core("My Vision")
|
||||
endif()
|
||||
|
||||
if(gb IN_LIST ARES_CORES)
|
||||
enable_core("Game Boy / Game Boy Color")
|
||||
add_subdirectory(gb)
|
||||
else()
|
||||
disable_core("Game Boy / Game Boy Color")
|
||||
endif()
|
||||
|
||||
if(gba IN_LIST ARES_CORES)
|
||||
enable_core("Game Boy Advance")
|
||||
add_subdirectory(gba)
|
||||
else()
|
||||
disable_core("Game Boy Advance")
|
||||
endif()
|
||||
|
||||
if(ws IN_LIST ARES_CORES)
|
||||
enable_core("WonderSwan / WonderSwan Color")
|
||||
add_subdirectory(ws)
|
||||
else()
|
||||
disable_core("WonderSwan / WonderSwan Color")
|
||||
endif()
|
||||
|
||||
if(ng IN_LIST ARES_CORES)
|
||||
enable_core("Neo Geo (AES/MVS)")
|
||||
add_subdirectory(ng)
|
||||
else()
|
||||
disable_core("Neo Geo (AES/MVS)")
|
||||
endif()
|
||||
|
||||
if(ngp IN_LIST ARES_CORES)
|
||||
enable_core("Neo Geo Pocket / Neo Geo Pocket Color")
|
||||
add_subdirectory(ngp)
|
||||
else()
|
||||
disable_core("Neo Geo Pocket / Neo Geo Pocket Color")
|
||||
endif()
|
||||
|
||||
if(spec IN_LIST ARES_CORES)
|
||||
enable_core("ZX Spectrum")
|
||||
add_subdirectory(spec)
|
||||
else()
|
||||
disable_core("ZX Spectrum")
|
||||
endif()
|
||||
|
||||
add_subdirectory(component)
|
||||
|
||||
foreach(c IN LISTS ARES_CORES)
|
||||
# target_enable_feature(ares "${c} core" CORE_$<UPPER_CASE:${c}>)
|
||||
target_compile_definitions(ares PUBLIC CORE_$<UPPER_CASE:${c}>)
|
||||
endforeach()
|
||||
|
||||
get_target_property(ares_SOURCES ares SOURCES)
|
||||
|
||||
set_source_files_properties(
|
||||
ares
|
||||
ares/debug/debug.cpp
|
||||
ares/node/audio/stream.cpp
|
||||
ares/node/node.cpp
|
||||
ares/node/video/screen.cpp
|
||||
ares/node/video/sprite.cpp
|
||||
ares/scheduler/thread.cpp
|
||||
ares/scheduler/scheduler.cpp
|
||||
PROPERTIES HEADER_FILE_ONLY TRUE
|
||||
)
|
||||
|
||||
set_source_files_properties(
|
||||
n64/vulkan/parallel-rdp/vulkan/shader.cpp
|
||||
n64/vulkan/parallel-rdp/vulkan/descriptor_set.cpp
|
||||
n64/vulkan/parallel-rdp/vulkan/device.cpp
|
||||
n64/vulkan/parallel-rdp/vulkan/command_buffer.cpp
|
||||
n64/vulkan/parallel-rdp/vulkan/render_pass.cpp
|
||||
PROPERTIES SKIP_PRECOMPILE_HEADERS ON
|
||||
)
|
||||
|
||||
target_sources(ares PRIVATE cmake/os-macos.cmake cmake/os-windows.cmake cmake/os-linux.cmake)
|
||||
|
||||
set_source_files_properties(ares ${ARES_HEADER_SOURCES} PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
|
||||
set_source_files_properties(ares ares/ares.cpp ares/memory/fixed-allocator.cpp PROPERTIES HEADER_FILE_ONLY FALSE)
|
||||
|
||||
target_include_directories(ares INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${ares_SOURCES})
|
||||
+15
-4
@@ -1,7 +1,5 @@
|
||||
ifeq ($(platform),windows)
|
||||
options += -luuid -lkernel32 -luser32 -lgdi32 -lcomctl32 -lcomdlg32 -lshell32
|
||||
options += -Wl,-enable-auto-import
|
||||
options += -Wl,-enable-runtime-pseudo-reloc
|
||||
options += $(call lib,uuid kernel32 user32 gdi32 comctl32 comdlg32 shell32)
|
||||
else ifeq ($(platform),macos)
|
||||
else ifneq ($(filter $(platform),linux bsd),)
|
||||
options += -Wl,-export-dynamic
|
||||
@@ -10,9 +8,10 @@ else
|
||||
$(error "ares is a library and cannot be built directly.")
|
||||
endif
|
||||
|
||||
ares.objects := ares
|
||||
ares.objects := ares ares-fixed-allocator
|
||||
|
||||
$(object.path)/ares.o: $(ares.path)/ares/ares.cpp
|
||||
$(object.path)/ares-fixed-allocator.o: $(ares.path)/ares/memory/fixed-allocator.cpp
|
||||
|
||||
ifeq ($(vulkan),true)
|
||||
flags += -DVULKAN
|
||||
@@ -26,6 +25,10 @@ ifeq ($(profile),performance)
|
||||
flags += -DPROFILE_PERFORMANCE
|
||||
endif
|
||||
|
||||
ifneq ($(filter $(cores),a26),)
|
||||
include $(ares.path)/a26/GNUmakefile
|
||||
endif
|
||||
|
||||
ifneq ($(filter $(cores),fc),)
|
||||
include $(ares.path)/fc/GNUmakefile
|
||||
endif
|
||||
@@ -70,6 +73,10 @@ ifneq ($(filter $(cores),cv),)
|
||||
include $(ares.path)/cv/GNUmakefile
|
||||
endif
|
||||
|
||||
ifneq ($(filter $(cores),myvision),)
|
||||
include $(ares.path)/myvision/GNUmakefile
|
||||
endif
|
||||
|
||||
ifneq ($(filter $(cores),gb),)
|
||||
include $(ares.path)/gb/GNUmakefile
|
||||
endif
|
||||
@@ -90,6 +97,10 @@ ifneq ($(filter $(cores),ngp),)
|
||||
include $(ares.path)/ngp/GNUmakefile
|
||||
endif
|
||||
|
||||
ifneq ($(filter $(cores),spec),)
|
||||
include $(ares.path)/spec/GNUmakefile
|
||||
endif
|
||||
|
||||
include $(ares.path)/component/GNUmakefile
|
||||
|
||||
flags += $(foreach c,$(call strupper,$(cores)),-DCORE_$c)
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
#version 150
|
||||
|
||||
//anti-aliased nearest-neighbor
|
||||
|
||||
precision highp float;
|
||||
|
||||
uniform sampler2D source[];
|
||||
uniform vec4 sourceSize[];
|
||||
uniform vec4 targetSize[];
|
||||
|
||||
in Vertex {
|
||||
vec2 texCoord;
|
||||
};
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
vec4 vpow(vec4 n, float e) {
|
||||
return vec4(pow(n.x, e), pow(n.y, e), pow(n.z, e), pow(n.w, e));
|
||||
}
|
||||
|
||||
vec4 toLQV(vec3 c) {
|
||||
return vec4(c.r, c.g, c.b, c.r * 0.2989 + c.g * 0.5870 + c.b * 0.1140);
|
||||
}
|
||||
|
||||
vec3 fromLQV(vec4 c) {
|
||||
float f = c.w / (c.r * 0.2989 + c.g * 0.5870 + c.b * 0.1140);
|
||||
return vec3(c.rgb) * f;
|
||||
}
|
||||
|
||||
vec3 percent(float ssize, float tsize, float coord) {
|
||||
float minfull = (coord * tsize - 0.5) / tsize * ssize;
|
||||
float maxfull = (coord * tsize + 0.5) / tsize * ssize;
|
||||
float realfull = floor(maxfull);
|
||||
|
||||
if(minfull > realfull) {
|
||||
return vec3(
|
||||
1,
|
||||
(realfull + 0.5) / ssize,
|
||||
(realfull + 0.5) / ssize
|
||||
);
|
||||
}
|
||||
|
||||
return vec3(
|
||||
(maxfull - realfull) / (maxfull - minfull),
|
||||
(realfull - 0.5) / ssize,
|
||||
(realfull + 0.5) / ssize
|
||||
);
|
||||
}
|
||||
|
||||
void main() {
|
||||
float srgb = 2.1;
|
||||
float gamma = 3.0;
|
||||
|
||||
vec3 x = percent(sourceSize[0].x, targetSize[0].x, texCoord.x);
|
||||
vec3 y = percent(sourceSize[0].y, targetSize[0].y, texCoord.y);
|
||||
|
||||
//get points to interpolate across in linear RGB
|
||||
vec4 a = toLQV(vpow(texture(source[0], vec2(x[1], y[1])), srgb).rgb);
|
||||
vec4 b = toLQV(vpow(texture(source[0], vec2(x[2], y[1])), srgb).rgb);
|
||||
vec4 c = toLQV(vpow(texture(source[0], vec2(x[1], y[2])), srgb).rgb);
|
||||
vec4 d = toLQV(vpow(texture(source[0], vec2(x[2], y[2])), srgb).rgb);
|
||||
|
||||
//use perceptual gamma for luminance component
|
||||
a.w = pow(a.w, 1 / gamma);
|
||||
b.w = pow(b.w, 1 / gamma);
|
||||
c.w = pow(c.w, 1 / gamma);
|
||||
d.w = pow(d.w, 1 / gamma);
|
||||
|
||||
//interpolate
|
||||
vec4 gammaLQV =
|
||||
(1.0 - x[0]) * (1.0 - y[0]) * a +
|
||||
(0.0 + x[0]) * (1.0 - y[0]) * b +
|
||||
(1.0 - x[0]) * (0.0 + y[0]) * c +
|
||||
(0.0 + x[0]) * (0.0 + y[0]) * d;
|
||||
|
||||
//convert luminance gamma back to linear
|
||||
gammaLQV.w = pow(gammaLQV.w, gamma);
|
||||
|
||||
//convert color back to sRGB
|
||||
fragColor = vpow(vec4(fromLQV(gammaLQV), 1), 1 / srgb);
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
input
|
||||
filter: nearest
|
||||
|
||||
program
|
||||
fragment: AANN.fs
|
||||
|
||||
output
|
||||
filter: nearest
|
||||
@@ -1,21 +0,0 @@
|
||||
#version 150
|
||||
#define distortion 0.2
|
||||
|
||||
uniform sampler2D source[];
|
||||
uniform vec4 sourceSize[];
|
||||
|
||||
in Vertex {
|
||||
vec2 texCoord;
|
||||
};
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
vec2 radialDistortion(vec2 coord) {
|
||||
vec2 cc = coord - vec2(0.5);
|
||||
float dist = dot(cc, cc) * distortion;
|
||||
return coord + cc * (1.0 - dist) * dist;
|
||||
}
|
||||
|
||||
void main() {
|
||||
fragColor = texture(source[0], radialDistortion(texCoord));
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
program
|
||||
filter: linear
|
||||
wrap: border
|
||||
fragment: curvature.fs
|
||||
@@ -1,25 +0,0 @@
|
||||
#version 150
|
||||
|
||||
uniform sampler2D source[];
|
||||
uniform vec4 sourceSize[];
|
||||
|
||||
in Vertex {
|
||||
vec2 texCoord;
|
||||
};
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
vec3 grayscale(vec3 color) {
|
||||
return vec3(dot(color, vec3(0.3, 0.59, 0.11)));
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 offset = fract(texCoord * sourceSize[0].xy) - 0.5;
|
||||
offset /= sourceSize[0].xy;
|
||||
|
||||
vec3 cx = texture(source[0], texCoord - offset).xyz;
|
||||
vec3 cy = texture(source[0], texCoord).xyz;
|
||||
vec3 cz = vec3(5.0 * grayscale(abs(cx - cy)));
|
||||
|
||||
fragColor = vec4(clamp(cz, 0.0, 1.0), 1.0);
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
program
|
||||
filter: linear
|
||||
wrap: edge
|
||||
fragment: edge-detection.fs
|
||||
@@ -1,4 +0,0 @@
|
||||
program
|
||||
filter: linear
|
||||
wrap: border
|
||||
fragment: scanline.fs
|
||||
@@ -1,20 +0,0 @@
|
||||
#version 150
|
||||
|
||||
uniform sampler2D source[];
|
||||
|
||||
in Vertex {
|
||||
vec2 texCoord;
|
||||
};
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
void main() {
|
||||
vec4 rgba = texture(source[0], texCoord);
|
||||
vec4 intensity;
|
||||
if(fract(gl_FragCoord.y * (0.5 * 4.0 / 3.0)) > 0.5) {
|
||||
intensity = vec4(0);
|
||||
} else {
|
||||
intensity = smoothstep(0.2, 0.8, rgba) + normalize(rgba);
|
||||
}
|
||||
fragColor = intensity * -0.25 + rgba * 1.1;
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
ares_components(mos6502)
|
||||
|
||||
ares_add_sources(
|
||||
CORE #
|
||||
a26
|
||||
UNITY #
|
||||
a26.cpp
|
||||
PRIMARY #
|
||||
system/system.cpp
|
||||
controller/controller.cpp
|
||||
cartridge/cartridge.cpp
|
||||
cpu/cpu.cpp
|
||||
tia/tia.cpp
|
||||
riot/riot.cpp
|
||||
)
|
||||
|
||||
ares_add_sources(
|
||||
CORE #
|
||||
a26
|
||||
INCLUDED #
|
||||
a26.hpp
|
||||
CMakeLists.txt
|
||||
)
|
||||
|
||||
ares_add_sources(
|
||||
CORE #
|
||||
a26
|
||||
INCLUDED #
|
||||
cartridge/cartridge.hpp
|
||||
cartridge/serialization.cpp
|
||||
cartridge/slot.cpp
|
||||
cartridge/slot.hpp
|
||||
cartridge/board/atari16k.cpp
|
||||
cartridge/board/atari32k.cpp
|
||||
cartridge/board/atari8k.cpp
|
||||
cartridge/board/board.cpp
|
||||
cartridge/board/board.hpp
|
||||
cartridge/board/commavid.cpp
|
||||
cartridge/board/linear.cpp
|
||||
cartridge/board/parker-bros.cpp
|
||||
cartridge/board/tigervision.cpp
|
||||
)
|
||||
|
||||
ares_add_sources(
|
||||
CORE #
|
||||
a26
|
||||
INCLUDED #
|
||||
controller/controller.hpp
|
||||
controller/port.cpp
|
||||
controller/port.hpp
|
||||
controller/gamepad/gamepad.cpp
|
||||
controller/gamepad/gamepad.hpp
|
||||
)
|
||||
|
||||
ares_add_sources(
|
||||
CORE #
|
||||
a26
|
||||
INCLUDED #
|
||||
cpu/cpu.hpp
|
||||
cpu/debugger.cpp
|
||||
cpu/memory.cpp
|
||||
cpu/serialization.cpp
|
||||
cpu/timing.cpp
|
||||
)
|
||||
|
||||
ares_add_sources(
|
||||
CORE #
|
||||
a26
|
||||
INCLUDED #
|
||||
riot/io.cpp
|
||||
riot/riot.hpp
|
||||
riot/serialization.cpp
|
||||
)
|
||||
|
||||
ares_add_sources(
|
||||
CORE #
|
||||
a26
|
||||
INCLUDED #
|
||||
system/controls.cpp
|
||||
system/serialization.cpp
|
||||
system/system.hpp
|
||||
)
|
||||
|
||||
ares_add_sources(
|
||||
CORE #
|
||||
a26
|
||||
INCLUDED #
|
||||
tia/audio.cpp
|
||||
tia/ball.cpp
|
||||
tia/color.cpp
|
||||
tia/io.cpp
|
||||
tia/missile.cpp
|
||||
tia/player.cpp
|
||||
tia/playfield.cpp
|
||||
tia/serialization.cpp
|
||||
tia/tia.hpp
|
||||
tia/write-queue.cpp
|
||||
)
|
||||
@@ -0,0 +1,15 @@
|
||||
ares.components += mos6502
|
||||
|
||||
ares.objects += ares-a26-system
|
||||
ares.objects += ares-a26-controller
|
||||
ares.objects += ares-a26-cartridge
|
||||
ares.objects += ares-a26-cpu
|
||||
ares.objects += ares-a26-tia
|
||||
ares.objects += ares-a26-riot
|
||||
|
||||
$(object.path)/ares-a26-system.o: $(ares.path)/a26/system/system.cpp
|
||||
$(object.path)/ares-a26-controller.o: $(ares.path)/a26/controller/controller.cpp
|
||||
$(object.path)/ares-a26-cartridge.o: $(ares.path)/a26/cartridge/cartridge.cpp
|
||||
$(object.path)/ares-a26-cpu.o: $(ares.path)/a26/cpu/cpu.cpp
|
||||
$(object.path)/ares-a26-tia.o: $(ares.path)/a26/tia/tia.cpp
|
||||
$(object.path)/ares-a26-riot.o: $(ares.path)/a26/riot/riot.cpp
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
#include <a26/cartridge/cartridge.cpp>
|
||||
#include <a26/controller/controller.cpp>
|
||||
#include <a26/cpu/cpu.cpp>
|
||||
#include <a26/riot/riot.cpp>
|
||||
#include <a26/system/system.cpp>
|
||||
#include <a26/tia/tia.cpp>
|
||||
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include <ares/ares.hpp>
|
||||
|
||||
#include <component/processor/mos6502/mos6502.hpp>
|
||||
|
||||
namespace ares::Atari2600 {
|
||||
#include <ares/inline.hpp>
|
||||
auto enumerate() -> vector<string>;
|
||||
auto load(Node::System& node, string name) -> bool;
|
||||
|
||||
struct Region {
|
||||
static inline auto NTSC() -> bool;
|
||||
static inline auto PAL() -> bool;
|
||||
static inline auto SECAM() -> bool;
|
||||
};
|
||||
|
||||
#include <a26/controller/controller.hpp>
|
||||
#include <a26/system/system.hpp>
|
||||
#include <a26/cartridge/cartridge.hpp>
|
||||
#include <a26/cpu/cpu.hpp>
|
||||
#include <a26/tia/tia.hpp>
|
||||
#include <a26/riot/riot.hpp>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
struct Atari16k : Interface {
|
||||
using Interface::Interface;
|
||||
Memory::Readable<n8> rom;
|
||||
Memory::Writable<n8> ram;
|
||||
n2 bank;
|
||||
bool hasRam;
|
||||
|
||||
auto load() -> void override {
|
||||
Interface::load(rom, "program.rom");
|
||||
}
|
||||
|
||||
auto save() -> void override {
|
||||
}
|
||||
|
||||
auto unload() -> void override {
|
||||
}
|
||||
|
||||
auto read(n16 address) -> n8 override {
|
||||
if(address == 0x1ff6) bank = 0;
|
||||
if(address == 0x1ff7) bank = 1;
|
||||
if(address == 0x1ff8) bank = 2;
|
||||
if(address == 0x1ff9) bank = 3;
|
||||
|
||||
if(address.bit(12)) {
|
||||
if(hasRam && address >= 0x1080 && address <= 0x10ff) return ram.read(address & 0x7f);
|
||||
return rom.read((bank * 0x1000) + (address & 0xfff));
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto write(n16 address, n8 data) -> bool override {
|
||||
if(address == 0x1ff6) bank = 0;
|
||||
if(address == 0x1ff7) bank = 1;
|
||||
if(address == 0x1ff8) bank = 2;
|
||||
if(address == 0x1ff9) bank = 3;
|
||||
|
||||
if(address >= 0x1000 && address <= 0x107f) {
|
||||
hasRam = true;
|
||||
ram.write(address & 0x7f, data);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
auto power() -> void override {
|
||||
bank = 0;
|
||||
hasRam = 0;
|
||||
ram.allocate(128);
|
||||
}
|
||||
|
||||
auto serialize(serializer& s) -> void override {
|
||||
s(bank);
|
||||
s(hasRam);
|
||||
s(ram);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,66 @@
|
||||
struct Atari32k : Interface {
|
||||
using Interface::Interface;
|
||||
Memory::Readable<n8> rom;
|
||||
Memory::Writable<n8> ram;
|
||||
n3 bank;
|
||||
bool hasRam;
|
||||
|
||||
auto load() -> void override {
|
||||
Interface::load(rom, "program.rom");
|
||||
}
|
||||
|
||||
auto save() -> void override {
|
||||
}
|
||||
|
||||
auto unload() -> void override {
|
||||
}
|
||||
|
||||
auto read(n16 address) -> n8 override {
|
||||
if(address == 0x1ff4) bank = 0;
|
||||
if(address == 0x1ff5) bank = 1;
|
||||
if(address == 0x1ff6) bank = 2;
|
||||
if(address == 0x1ff7) bank = 3;
|
||||
if(address == 0x1ff8) bank = 4;
|
||||
if(address == 0x1ff9) bank = 5;
|
||||
if(address == 0x1ffa) bank = 6;
|
||||
if(address == 0x1ffb) bank = 7;
|
||||
|
||||
if(address.bit(12)) {
|
||||
if(hasRam && address >= 0x1080 && address <= 0x10ff) return ram.read(address & 0x7f);
|
||||
return rom.read((bank * 0x1000) + (address & 0xfff));
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto write(n16 address, n8 data) -> bool override {
|
||||
if(address == 0x1ff4) bank = 0;
|
||||
if(address == 0x1ff5) bank = 1;
|
||||
if(address == 0x1ff6) bank = 2;
|
||||
if(address == 0x1ff7) bank = 3;
|
||||
if(address == 0x1ff8) bank = 4;
|
||||
if(address == 0x1ff9) bank = 5;
|
||||
if(address == 0x1ffa) bank = 6;
|
||||
if(address == 0x1ffb) bank = 7;
|
||||
|
||||
if(address >= 0x1000 && address <= 0x107f) {
|
||||
hasRam = true;
|
||||
ram.write(address & 0x7f, data);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
auto power() -> void override {
|
||||
bank = 0;
|
||||
hasRam = 0;
|
||||
ram.allocate(128);
|
||||
}
|
||||
|
||||
auto serialize(serializer& s) -> void override {
|
||||
s(bank);
|
||||
s(hasRam);
|
||||
s(ram);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,54 @@
|
||||
struct Atari8k : Interface {
|
||||
using Interface::Interface;
|
||||
Memory::Readable<n8> rom;
|
||||
Memory::Writable<n8> ram;
|
||||
n1 bank;
|
||||
bool hasRam;
|
||||
|
||||
auto load() -> void override {
|
||||
Interface::load(rom, "program.rom");
|
||||
}
|
||||
|
||||
auto save() -> void override {
|
||||
}
|
||||
|
||||
auto unload() -> void override {
|
||||
}
|
||||
|
||||
auto read(n16 address) -> n8 override {
|
||||
if(address == 0x1ff8) bank = 0;
|
||||
if(address == 0x1ff9) bank = 1;
|
||||
|
||||
if(address.bit(12)) {
|
||||
if(hasRam && address >= 0x1080 && address <= 0x10ff) return ram.read(address & 0x7f);
|
||||
return rom.read((bank * 0x1000) + (address & 0xfff));
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto write(n16 address, n8 data) -> bool override {
|
||||
if(address == 0x1ff8) bank = 0;
|
||||
if(address == 0x1ff9) bank = 1;
|
||||
|
||||
if(address >= 0x1000 && address <= 0x107f) {
|
||||
hasRam = true;
|
||||
ram.write(address & 0x7f, data);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
auto power() -> void override {
|
||||
bank = 0;
|
||||
hasRam = 0;
|
||||
ram.allocate(128);
|
||||
}
|
||||
|
||||
auto serialize(serializer& s) -> void override {
|
||||
s(bank);
|
||||
s(hasRam);
|
||||
s(ram);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,37 @@
|
||||
namespace Board {
|
||||
|
||||
#include "linear.cpp"
|
||||
#include "atari8k.cpp"
|
||||
#include "atari16k.cpp"
|
||||
#include "atari32k.cpp"
|
||||
#include "commavid.cpp"
|
||||
#include "parker-bros.cpp"
|
||||
#include "tigervision.cpp"
|
||||
|
||||
auto Interface::load(Memory::Readable<n8>& memory, string name) -> bool {
|
||||
if(auto fp = pak->read(name)) {
|
||||
memory.allocate(fp->size());
|
||||
memory.load(fp);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
auto Interface::load(Memory::Writable<n8>& memory, string name) -> bool {
|
||||
if(auto fp = pak->read(name)) {
|
||||
memory.allocate(fp->size());
|
||||
memory.load(fp);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
auto Interface::save(Memory::Writable<n8>& memory, string name) -> bool {
|
||||
if(auto fp = pak->write(name)) {
|
||||
memory.save(fp);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
namespace Board {
|
||||
|
||||
struct Interface {
|
||||
VFS::Pak pak;
|
||||
|
||||
Interface(Cartridge& cartridge) : cartridge(cartridge) {}
|
||||
virtual ~Interface() = default;
|
||||
virtual auto load() -> void {}
|
||||
virtual auto save() -> void {}
|
||||
virtual auto unload() -> void {}
|
||||
virtual auto read(n16 address) -> n8 { return 0xff; }
|
||||
virtual auto write(n16 address, n8 data) -> bool { return false; }
|
||||
virtual auto power() -> void {}
|
||||
virtual auto serialize(serializer&) -> void {}
|
||||
|
||||
auto load(Memory::Readable<n8>&, string name) -> bool;
|
||||
auto load(Memory::Writable<n8>&, string name) -> bool;
|
||||
auto save(Memory::Writable<n8>&, string name) -> bool;
|
||||
|
||||
Cartridge& cartridge;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
struct Commavid : Interface {
|
||||
using Interface::Interface;
|
||||
Memory::Readable<n8> rom;
|
||||
Memory::Writable<n8> ram;
|
||||
|
||||
auto load() -> void override {
|
||||
Interface::load(rom, "program.rom");
|
||||
}
|
||||
|
||||
auto save() -> void override {
|
||||
}
|
||||
|
||||
auto unload() -> void override {
|
||||
}
|
||||
|
||||
auto read(n16 address) -> n8 override {
|
||||
if(address.bit(12)) {
|
||||
if(address >= 0x1000 && address <= 0x13ff) return ram.read(address & 0x3ff);
|
||||
return rom.read(address & 0xfff);
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto write(n16 address, n8 data) -> bool override {
|
||||
if(address >= 0x1400 && address <= 0x17ff) {
|
||||
ram.write(address & 0x3ff, data);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
auto power() -> void override {
|
||||
ram.allocate(1_KiB);
|
||||
}
|
||||
|
||||
auto serialize(serializer& s) -> void override {
|
||||
s(ram);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,45 @@
|
||||
struct Linear : Interface {
|
||||
using Interface::Interface;
|
||||
Memory::Readable<n8> rom;
|
||||
Memory::Writable<n8> ram;
|
||||
bool hasRam;
|
||||
|
||||
auto load() -> void override {
|
||||
Interface::load(rom, "program.rom");
|
||||
}
|
||||
|
||||
auto save() -> void override {
|
||||
}
|
||||
|
||||
auto unload() -> void override {
|
||||
}
|
||||
|
||||
auto read(n16 address) -> n8 override {
|
||||
if(address.bit(12)) {
|
||||
if(hasRam && address >= 0x1080 && address <= 0x10ff) return ram.read(address & 0x7f);
|
||||
return rom.read(address & 0xfff);
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto write(n16 address, n8 data) -> bool override {
|
||||
if(address >= 0x1000 && address <= 0x107f) {
|
||||
hasRam = true;
|
||||
ram.write(address & 0x7f, data);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
auto power() -> void override {
|
||||
hasRam = 0;
|
||||
ram.allocate(128);
|
||||
}
|
||||
|
||||
auto serialize(serializer& s) -> void override {
|
||||
s(hasRam);
|
||||
s(ram);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,51 @@
|
||||
struct ParkerBros : Interface {
|
||||
using Interface::Interface;
|
||||
Memory::Readable<n8> rom;
|
||||
n3 banks[3];
|
||||
|
||||
auto load() -> void override {
|
||||
Interface::load(rom, "program.rom");
|
||||
}
|
||||
|
||||
auto save() -> void override {
|
||||
}
|
||||
|
||||
auto unload() -> void override {
|
||||
}
|
||||
|
||||
auto read(n16 address) -> n8 override {
|
||||
bankswitch(address);
|
||||
|
||||
if(address.bit(12)) {
|
||||
if(address >= 0x1000 && address <= 0x13ff) return rom.read((banks[0] * 0x400) + (address & 0x3ff));
|
||||
if(address >= 0x1400 && address <= 0x17ff) return rom.read((banks[1] * 0x400) + (address & 0x3ff));
|
||||
if(address >= 0x1800 && address <= 0x1bff) return rom.read((banks[2] * 0x400) + (address & 0x3ff));
|
||||
if(address >= 0x1c00 && address <= 0x1fff) return rom.read(( 7 * 0x400) + (address & 0x3ff));
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto write(n16 address, n8 data) -> bool override {
|
||||
bankswitch(address);
|
||||
return false;
|
||||
}
|
||||
|
||||
auto bankswitch(n16 address) -> void {
|
||||
if(address >= 0x1fe0 && address <= 0x1fe7) banks[0] = address - 0x1fe0;
|
||||
if(address >= 0x1fe8 && address <= 0x1fef) banks[1] = address - 0x1fe8;
|
||||
if(address >= 0x1ff0 && address <= 0x1ff7) banks[2] = address - 0x1ff0;
|
||||
}
|
||||
|
||||
auto power() -> void override {
|
||||
banks[0] = 0;
|
||||
banks[1] = 1;
|
||||
banks[2] = 2;
|
||||
}
|
||||
|
||||
auto serialize(serializer& s) -> void override {
|
||||
s(banks[0]);
|
||||
s(banks[1]);
|
||||
s(banks[2]);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
struct Tigervision : Interface {
|
||||
using Interface::Interface;
|
||||
Memory::Readable<n8> rom;
|
||||
n8 bank;
|
||||
n8 nextBank;
|
||||
|
||||
auto load() -> void override {
|
||||
Interface::load(rom, "program.rom");
|
||||
}
|
||||
|
||||
auto save() -> void override {
|
||||
}
|
||||
|
||||
auto unload() -> void override {
|
||||
}
|
||||
|
||||
auto read(n16 address) -> n8 override {
|
||||
if(address.bit(12)) {
|
||||
if(bank != nextBank) bank = nextBank;
|
||||
if(address <= 0x17ff) return rom.read((bank * 0x800) + (address & 0x7ff));
|
||||
return rom.read((rom.size() - 0x800) + (address & 0x7ff));
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto write(n16 address, n8 data) -> bool override {
|
||||
if(address.bit(12) && bank != nextBank) bank = nextBank;
|
||||
if(address <= 0x3f) nextBank = data;
|
||||
return false;
|
||||
}
|
||||
|
||||
auto power() -> void override {
|
||||
bank = 0;
|
||||
nextBank = 0;
|
||||
}
|
||||
|
||||
auto serialize(serializer& s) -> void override {
|
||||
s(bank);
|
||||
s(nextBank);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,66 @@
|
||||
#include <a26/a26.hpp>
|
||||
|
||||
namespace ares::Atari2600 {
|
||||
|
||||
Cartridge& cartridge = cartridgeSlot.cartridge;
|
||||
#include "board/board.cpp"
|
||||
#include "slot.cpp"
|
||||
#include "serialization.cpp"
|
||||
|
||||
auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral {
|
||||
return node = parent->append<Node::Peripheral>(string{system.name(), " Cartridge"});
|
||||
}
|
||||
|
||||
auto Cartridge::connect() -> void {
|
||||
if(!node->setPak(pak = platform->pak(node))) return;
|
||||
|
||||
information = {};
|
||||
information.title = pak->attribute("title");
|
||||
information.region = pak->attribute("region");
|
||||
information.board = pak->attribute("board");
|
||||
|
||||
if(information.board == "Linear") board = new Board::Linear{*this};
|
||||
if(information.board == "Atari8k") board = new Board::Atari8k{*this};
|
||||
if(information.board == "Atari16k") board = new Board::Atari16k{*this};
|
||||
if(information.board == "Atari32k") board = new Board::Atari32k{*this};
|
||||
if(information.board == "Commavid") board = new Board::Commavid{*this};
|
||||
if(information.board == "ParkerBros8k") board = new Board::ParkerBros{*this};
|
||||
if(information.board == "Tigervision") board = new Board::Tigervision{*this};
|
||||
|
||||
if(!board) board = new Board::Interface{*this};
|
||||
board->pak = pak;
|
||||
board->load();
|
||||
power();
|
||||
}
|
||||
|
||||
auto Cartridge::disconnect() -> void {
|
||||
if(!node || !board) return;
|
||||
board->unload();
|
||||
board->pak.reset();
|
||||
board.reset();
|
||||
node.reset();
|
||||
}
|
||||
|
||||
auto Cartridge::save() -> void {
|
||||
if(!node) return;
|
||||
if(board) board->save();
|
||||
}
|
||||
|
||||
auto Cartridge::power() -> void {
|
||||
if(board) board->power();
|
||||
}
|
||||
|
||||
auto Cartridge::read(n16 address) -> n8 {
|
||||
if(!node) return 0xff;
|
||||
if(board) return board->read(address);
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto Cartridge::write(n16 address, n8 data) -> bool {
|
||||
if(!node) return false;
|
||||
if(board) return board->write(address, data);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
struct Cartridge;
|
||||
#include "board/board.hpp"
|
||||
|
||||
struct Cartridge {
|
||||
Node::Peripheral node;
|
||||
VFS::Pak pak;
|
||||
|
||||
auto title() const -> string { return information.title; }
|
||||
auto region() const -> string { return information.region; }
|
||||
|
||||
//cartridge.cpp
|
||||
auto allocate(Node::Port) -> Node::Peripheral;
|
||||
auto connect() -> void;
|
||||
auto disconnect() -> void;
|
||||
|
||||
auto save() -> void;
|
||||
auto power() -> void;
|
||||
|
||||
auto read(n16 address) -> n8;
|
||||
auto write(n16 address, n8 data) -> bool;
|
||||
|
||||
//serialization.cpp
|
||||
auto serialize(serializer&) -> void;
|
||||
|
||||
unique_pointer<Board::Interface> board;
|
||||
|
||||
//private:
|
||||
struct Information {
|
||||
string title;
|
||||
string region;
|
||||
string board;
|
||||
} information;
|
||||
};
|
||||
|
||||
#include "slot.hpp"
|
||||
extern Cartridge& cartridge;
|
||||
@@ -0,0 +1,3 @@
|
||||
auto Cartridge::serialize(serializer& s) -> void {
|
||||
if(board) s(*board);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
CartridgeSlot cartridgeSlot{"Cartridge Slot"};
|
||||
|
||||
CartridgeSlot::CartridgeSlot(string name) : name(name) {
|
||||
}
|
||||
|
||||
auto CartridgeSlot::load(Node::Object parent) -> void {
|
||||
port = parent->append<Node::Port>(name);
|
||||
port->setFamily(system.name());
|
||||
port->setType("Cartridge");
|
||||
port->setAllocate([&](auto name) { return cartridge.allocate(port); });
|
||||
port->setConnect([&] { return cartridge.connect(); });
|
||||
port->setDisconnect([&] { return cartridge.disconnect(); });
|
||||
}
|
||||
|
||||
auto CartridgeSlot::unload() -> void {
|
||||
cartridge.disconnect();
|
||||
port = {};
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
struct CartridgeSlot {
|
||||
Node::Port port;
|
||||
Cartridge cartridge;
|
||||
|
||||
//slot.cpp
|
||||
CartridgeSlot(string name);
|
||||
auto load(Node::Object) -> void;
|
||||
auto unload() -> void;
|
||||
|
||||
const string name;
|
||||
};
|
||||
|
||||
extern CartridgeSlot cartridgeSlot;
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <a26/a26.hpp>
|
||||
|
||||
namespace ares::Atari2600 {
|
||||
|
||||
#include "port.cpp"
|
||||
#include "gamepad/gamepad.cpp"
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
struct Controller {
|
||||
Node::Peripheral node;
|
||||
|
||||
virtual ~Controller() = default;
|
||||
|
||||
virtual auto read() -> n8 { return 0xff; }
|
||||
virtual auto write(n8 data) -> void {}
|
||||
};
|
||||
|
||||
#include "port.hpp"
|
||||
#include "gamepad/gamepad.hpp"
|
||||
@@ -0,0 +1,37 @@
|
||||
Gamepad::Gamepad(Node::Port parent) {
|
||||
node = parent->append<Node::Peripheral>("Gamepad");
|
||||
|
||||
up = node->append<Node::Input::Button>("Up");
|
||||
down = node->append<Node::Input::Button>("Down");
|
||||
left = node->append<Node::Input::Button>("Left");
|
||||
right = node->append<Node::Input::Button>("Right");
|
||||
fire = node->append<Node::Input::Button>("Fire");
|
||||
}
|
||||
|
||||
auto Gamepad::read() -> n8 {
|
||||
platform->input(up);
|
||||
platform->input(down);
|
||||
platform->input(left);
|
||||
platform->input(right);
|
||||
platform->input(fire);
|
||||
|
||||
if(!(up->value() & down->value())) {
|
||||
yHold = 0, upLatch = up->value(), downLatch = down->value();
|
||||
} else if(!yHold) {
|
||||
yHold = 1, swap(upLatch, downLatch);
|
||||
}
|
||||
|
||||
if(!(left->value() & right->value())) {
|
||||
xHold = 0, leftLatch = left->value(), rightLatch = right->value();
|
||||
} else if(!xHold) {
|
||||
xHold = 1, swap(leftLatch, rightLatch);
|
||||
}
|
||||
|
||||
n8 data = 0xff;
|
||||
data.bit(0) = !upLatch;
|
||||
data.bit(1) = !downLatch;
|
||||
data.bit(2) = !leftLatch;
|
||||
data.bit(3) = !rightLatch;
|
||||
data.bit(4) = !fire->value();
|
||||
return data;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
struct Gamepad : Controller {
|
||||
Node::Input::Button up;
|
||||
Node::Input::Button down;
|
||||
Node::Input::Button left;
|
||||
Node::Input::Button right;
|
||||
Node::Input::Button fire;
|
||||
|
||||
Gamepad(Node::Port);
|
||||
|
||||
auto read() -> n8 override;
|
||||
|
||||
private:
|
||||
b1 yHold;
|
||||
b1 upLatch;
|
||||
b1 downLatch;
|
||||
b1 xHold;
|
||||
b1 leftLatch;
|
||||
b1 rightLatch;
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
ControllerPort controllerPort1{"Controller Port 1"};
|
||||
ControllerPort controllerPort2{"Controller Port 2"};
|
||||
|
||||
ControllerPort::ControllerPort(string name) : name(name) {
|
||||
}
|
||||
|
||||
auto ControllerPort::load(Node::Object parent) -> void {
|
||||
port = parent->append<Node::Port>(name);
|
||||
port->setFamily(system.name());
|
||||
port->setType("Controller");
|
||||
port->setHotSwappable(true);
|
||||
port->setAllocate([&](auto name) { return allocate(name); });
|
||||
port->setDisconnect([&] { device.reset(); });
|
||||
port->setSupported({"Gamepad"});
|
||||
}
|
||||
|
||||
auto ControllerPort::unload() -> void {
|
||||
device = {};
|
||||
port = {};
|
||||
}
|
||||
|
||||
auto ControllerPort::allocate(string name) -> Node::Peripheral {
|
||||
if(name == "Gamepad") device = new Gamepad(port);
|
||||
if(device) return device->node;
|
||||
return {};
|
||||
}
|
||||
|
||||
auto ControllerPort::serialize(serializer& s) -> void {
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
struct ControllerPort {
|
||||
Node::Port port;
|
||||
unique_pointer<Controller> device;
|
||||
|
||||
//port.cpp
|
||||
ControllerPort(string name);
|
||||
auto load(Node::Object) -> void;
|
||||
auto unload() -> void;
|
||||
auto allocate(string name) -> Node::Peripheral;
|
||||
|
||||
auto read() -> n8 { if(device) return device->read(); return 0xff; }
|
||||
auto write(n8 data) -> void { if(device) return device->write(data); }
|
||||
|
||||
auto serialize(serializer&) -> void;
|
||||
|
||||
const string name;
|
||||
};
|
||||
|
||||
extern ControllerPort controllerPort1;
|
||||
extern ControllerPort controllerPort2;
|
||||
@@ -0,0 +1,40 @@
|
||||
#include <a26/a26.hpp>
|
||||
|
||||
namespace ares::Atari2600 {
|
||||
|
||||
CPU cpu;
|
||||
#include "memory.cpp"
|
||||
#include "timing.cpp"
|
||||
#include "debugger.cpp"
|
||||
#include "serialization.cpp"
|
||||
|
||||
auto CPU::load(Node::Object parent) -> void {
|
||||
node = parent->append<Node::Object>("CPU");
|
||||
debugger.load(node);
|
||||
}
|
||||
|
||||
auto CPU::unload() -> void {
|
||||
debugger = {};
|
||||
node = {};
|
||||
}
|
||||
|
||||
auto CPU::main() -> void {
|
||||
debugger.instruction();
|
||||
instruction();
|
||||
}
|
||||
|
||||
auto CPU::step(u32 clocks) -> void {
|
||||
if(io.rdyLine == 1) io.scanlineCycles += clocks;
|
||||
Thread::step(clocks);
|
||||
Thread::synchronize();
|
||||
}
|
||||
|
||||
auto CPU::power(bool reset) -> void {
|
||||
MOS6502::BCD = 1;
|
||||
MOS6502::power();
|
||||
Thread::create(system.frequency() / 3, {&CPU::main, this});
|
||||
|
||||
io = {};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
struct CPU : MOS6502, Thread {
|
||||
Node::Object node;
|
||||
|
||||
struct Debugger {
|
||||
//debugger.cpp
|
||||
auto load(Node::Object) -> void;
|
||||
auto instruction() -> void;
|
||||
|
||||
struct Tracer {
|
||||
Node::Debugger::Tracer::Instruction instruction;
|
||||
} tracer;
|
||||
} debugger;
|
||||
|
||||
//cpu.cpp
|
||||
auto load(Node::Object) -> void;
|
||||
auto unload() -> void;
|
||||
|
||||
auto main() -> void;
|
||||
auto step(u32 clocks) -> void;
|
||||
|
||||
auto power(bool reset) -> void;
|
||||
|
||||
//memory.cpp
|
||||
auto readBus(n16 address) -> n8;
|
||||
auto writeBus(n16 address, n8 data) -> void;
|
||||
|
||||
auto readIO(n16 address) -> n8;
|
||||
auto writeIO(n16 address, n8 data) -> void;
|
||||
|
||||
auto readDebugger(n16 address) -> n8 override;
|
||||
|
||||
auto serialize(serializer&) -> void;
|
||||
|
||||
//timing.cpp
|
||||
auto read(n16 address) -> n8 override;
|
||||
auto write(n16 address, n8 data) -> void override;
|
||||
|
||||
auto rdyLine(bool) -> void;
|
||||
|
||||
//protected:
|
||||
struct IO {
|
||||
n1 rdyLine = 1;
|
||||
n32 scanlineCycles = 0;
|
||||
n8 openBus = 0;
|
||||
} io;
|
||||
};
|
||||
|
||||
extern CPU cpu;
|
||||
@@ -0,0 +1,12 @@
|
||||
auto CPU::Debugger::load(Node::Object parent) -> void {
|
||||
tracer.instruction = parent->append<Node::Debugger::Tracer::Instruction>("Instruction", "CPU");
|
||||
tracer.instruction->setAddressBits(16);
|
||||
}
|
||||
|
||||
auto CPU::Debugger::instruction() -> void {
|
||||
if(tracer.instruction->enabled() && tracer.instruction->address(cpu.PC)) {
|
||||
tracer.instruction->notify(cpu.disassembleInstruction(), {cpu.disassembleContext(), " [c:", cpu.io.scanlineCycles, " l:", tia.io.vcounter, " p:", tia.io.hcounter, "]"});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
inline auto CPU::readBus(n16 address) -> n8 {
|
||||
address &= 0x1fff;
|
||||
if(auto result = platform->cheat(address)) return *result;
|
||||
|
||||
n8 data = cartridge.read(address);
|
||||
|
||||
if(address.bit(12) == 0 && address.bit(7) == 0) {
|
||||
return tia.read(address & 0xf);
|
||||
}
|
||||
|
||||
if(address.bit(12) == 0 && address.bit(9) == 0 && address.bit(7) == 1) {
|
||||
return riot.readRam(address & 0x7f);
|
||||
}
|
||||
|
||||
if(address.bit(12) == 0 && address.bit(9) == 1 && address.bit(7) == 1) {
|
||||
return riot.readIo((address - 0x80) & 0x1f);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
inline auto CPU::writeBus(n16 address, n8 data) -> void {
|
||||
address &= 0x1fff;
|
||||
cartridge.write(address, data);
|
||||
|
||||
if(address.bit(12) == 0 && address.bit(7) == 0) {
|
||||
return tia.write(address & 0x3f, data);
|
||||
}
|
||||
|
||||
if(address.bit(12) == 0 && address.bit(9) == 0 && address.bit(7) == 1) {
|
||||
return riot.writeRam(address & 0x7f, data);
|
||||
}
|
||||
|
||||
if(address.bit(12) == 0 && address.bit(9) == 1 && address.bit(7) == 1) {
|
||||
return riot.writeIo((address - 0x80) & 0x1f, data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
auto CPU::readDebugger(n16 address) -> n8 {
|
||||
return readBus(address);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
auto CPU::serialize(serializer& s) -> void {
|
||||
MOS6502::serialize(s);
|
||||
Thread::serialize(s);
|
||||
s(io.rdyLine);
|
||||
s(io.openBus);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
auto CPU::read(n16 address) -> n8 {
|
||||
step(1);
|
||||
|
||||
if(io.rdyLine == 0) {
|
||||
while(io.rdyLine == 0) {
|
||||
step(1);
|
||||
}
|
||||
|
||||
io.openBus = readBus(address);
|
||||
return io.openBus;
|
||||
}
|
||||
|
||||
io.openBus = readBus(address);
|
||||
return io.openBus;
|
||||
}
|
||||
|
||||
auto CPU::write(n16 address, n8 data) -> void {
|
||||
step(1);
|
||||
writeBus(address, io.openBus = data);
|
||||
}
|
||||
|
||||
auto CPU::rdyLine(bool line) -> void {
|
||||
io.rdyLine = line;
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
auto RIOT::readRam(n8 address) -> n8 {
|
||||
return ram[address];
|
||||
}
|
||||
|
||||
auto RIOT::writeRam(n8 address, n8 data) -> void {
|
||||
ram[address] = data;
|
||||
}
|
||||
|
||||
auto RIOT::readIo(n8 address) -> n8 {
|
||||
switch(address.bit(0, 2)) {
|
||||
case 0x00: return readPortA();
|
||||
case 0x01: return port[0].direction;
|
||||
case 0x02: return readPortB();
|
||||
case 0x03: return port[1].direction;
|
||||
case 0x04: timer.interruptFlag = address.bit(3); return timer.counter;
|
||||
case 0x05: case 0x07: {
|
||||
n8 output = 0;
|
||||
output.bit(6) = 0; //TODO: PA7 IRQ Flag
|
||||
output.bit(7) = timer.interruptFlag;
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
||||
debug(unimplemented, "[RIOT] IO read ", hex(address));
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto RIOT::writeIo(n8 address, n8 data) -> void {
|
||||
switch(address) {
|
||||
case 0x00: writePortA(data); return;
|
||||
case 0x01: port[0].direction = data; return;
|
||||
case 0x02: writePortB(data); return;
|
||||
case 0x03: port[1].direction = data; return;
|
||||
case 0x14: case 0x15: case 0x16: case 0x17:
|
||||
case 0x1c: case 0x1d: case 0x1e: case 0x1f: {
|
||||
const n16 intervals[] = {1, 8, 64, 1024};
|
||||
timer.counter = data;
|
||||
timer.interval = intervals[address.bit(0, 1)];
|
||||
timer.reload = timer.interval;
|
||||
timer.interruptFlag = 0;
|
||||
timer.interruptEnable = address.bit(3);
|
||||
return; }
|
||||
}
|
||||
|
||||
debug(unimplemented, "[RIOT] IO write ",hex(address), " = ", hex(data));
|
||||
}
|
||||
|
||||
auto RIOT::readPortA() -> n8 {
|
||||
n8 data;
|
||||
// TODO: Handle when configured as outputs
|
||||
data.bit(0, 3) = controllerPort2.read().bit(0, 4);
|
||||
data.bit(4, 7) = controllerPort1.read().bit(0, 4);
|
||||
return data;
|
||||
}
|
||||
|
||||
auto RIOT::writePortA(n8 data) -> void {
|
||||
port[0].data = data;
|
||||
}
|
||||
|
||||
auto RIOT::readPortB() -> n8 {
|
||||
system.controls.poll();
|
||||
|
||||
n8 data;
|
||||
|
||||
for(auto n : range(8)) if(port[1].direction.bit(n)) { data.bit(n) = port[1].data.bit(n); }
|
||||
|
||||
// Atari hard-wires these bits as input
|
||||
data.bit(0) = !system.controls.reset->value();
|
||||
data.bit(1) = !system.controls.select->value();
|
||||
|
||||
// These are toggle switches; flip the values on the rising edge
|
||||
if(system.controls.tvType->value() && !tvTypeLatch) {
|
||||
tvType = !tvType;
|
||||
}
|
||||
tvTypeLatch = system.controls.tvType->value();
|
||||
|
||||
if(system.controls.leftDifficulty->value() && !leftDifficultyLatch) {
|
||||
leftDifficulty = !leftDifficulty;
|
||||
}
|
||||
leftDifficultyLatch = system.controls.leftDifficulty->value();
|
||||
|
||||
if(system.controls.rightDifficulty->value() && !rightDifficultyLatch) {
|
||||
rightDifficulty = !rightDifficulty;
|
||||
}
|
||||
rightDifficultyLatch = system.controls.rightDifficulty->value();
|
||||
|
||||
data.bit(3) = tvType;
|
||||
data.bit(6) = leftDifficulty;
|
||||
data.bit(7) = rightDifficulty;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
auto RIOT::writePortB(n8 data) -> void {
|
||||
port[1].data = data;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
#include <a26/a26.hpp>
|
||||
|
||||
namespace ares::Atari2600 {
|
||||
|
||||
RIOT riot;
|
||||
|
||||
#include "io.cpp"
|
||||
#include "serialization.cpp"
|
||||
|
||||
auto RIOT::load(Node::Object parent) -> void {
|
||||
node = parent->append<Node::Object>("RIOT");
|
||||
|
||||
ram.allocate(128);
|
||||
}
|
||||
|
||||
auto RIOT::unload() -> void {
|
||||
ram.reset();
|
||||
node.reset();
|
||||
}
|
||||
|
||||
auto RIOT::main() -> void {
|
||||
if(--timer.counter == 0xff) {
|
||||
timer.interval = 1;
|
||||
timer.interruptFlag = 1;
|
||||
}
|
||||
|
||||
step(timer.interval);
|
||||
}
|
||||
|
||||
auto RIOT::step(u32 clocks) -> void {
|
||||
Thread::step(clocks);
|
||||
Thread::synchronize();
|
||||
}
|
||||
|
||||
auto RIOT::power(bool reset) -> void {
|
||||
Thread::create(system.frequency() / 3, {&RIOT::main, this});
|
||||
timer = {};
|
||||
port[0] = {};
|
||||
port[0].data = 0xff;
|
||||
port[1] = {};
|
||||
port[1].data = 0xff;
|
||||
leftDifficulty = 1;
|
||||
rightDifficulty = 1;
|
||||
tvType = 1;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
struct RIOT : Thread {
|
||||
Node::Object node;
|
||||
Memory::Writable<n8> ram;
|
||||
|
||||
//riot.cpp
|
||||
auto load(Node::Object) -> void;
|
||||
auto unload() -> void;
|
||||
|
||||
auto main() -> void;
|
||||
auto step(u32 clocks) -> void;
|
||||
auto power(bool reset) -> void;
|
||||
|
||||
auto decrementTimer() -> void;
|
||||
|
||||
//io.cpp
|
||||
auto readRam(n8 address) -> n8;
|
||||
auto writeRam(n8 address, n8 data) -> void;
|
||||
auto readIo(n8 address) -> n8;
|
||||
auto writeIo(n8 address, n8 data) -> void;
|
||||
|
||||
auto readPortA() -> n8;
|
||||
auto readPortB() -> n8;
|
||||
auto writePortA(n8 data) -> void;
|
||||
auto writePortB(n8 data) -> void;
|
||||
|
||||
//serialization.cpp
|
||||
auto serialize(serializer&) -> void;
|
||||
|
||||
struct {
|
||||
u8 counter;
|
||||
n16 interval;
|
||||
n16 reload;
|
||||
n1 interruptEnable;
|
||||
n1 interruptFlag;
|
||||
} timer;
|
||||
|
||||
struct Port {
|
||||
n8 data;
|
||||
n8 direction;
|
||||
} port[2];
|
||||
|
||||
n1 leftDifficulty;
|
||||
n1 leftDifficultyLatch;
|
||||
n1 rightDifficulty;
|
||||
n1 rightDifficultyLatch;
|
||||
n1 tvType;
|
||||
n1 tvTypeLatch;
|
||||
};
|
||||
|
||||
extern RIOT riot;
|
||||
@@ -0,0 +1,23 @@
|
||||
//serialization.cpp
|
||||
auto RIOT::serialize(serializer& s) -> void {
|
||||
Thread::serialize(s);
|
||||
|
||||
s(ram);
|
||||
s(timer.counter);
|
||||
s(timer.interval);
|
||||
s(timer.reload);
|
||||
s(timer.interruptEnable);
|
||||
s(timer.interruptFlag);
|
||||
|
||||
for(auto n : range(2)) {
|
||||
s(port[n].data);
|
||||
s(port[n].direction);
|
||||
}
|
||||
|
||||
s(leftDifficulty);
|
||||
s(leftDifficultyLatch);
|
||||
s(rightDifficulty);
|
||||
s(rightDifficultyLatch);
|
||||
s(tvType);
|
||||
s(tvTypeLatch);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
auto System::Controls::load(Node::Object parent) -> void {
|
||||
node = parent->append<Node::Object>("Controls");
|
||||
|
||||
reset = node->append<Node::Input::Button>("Reset");
|
||||
select = node->append<Node::Input::Button>("Select");
|
||||
leftDifficulty = node->append<Node::Input::Button>("Left Difficulty");
|
||||
rightDifficulty = node->append<Node::Input::Button>("Right Difficulty");
|
||||
tvType = node->append<Node::Input::Button>("TV Type");
|
||||
}
|
||||
|
||||
auto System::Controls::poll() -> void {
|
||||
platform->input(reset);
|
||||
platform->input(select);
|
||||
platform->input(leftDifficulty);
|
||||
platform->input(rightDifficulty);
|
||||
platform->input(tvType);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
static const string SerializerVersion = "v139";
|
||||
|
||||
auto System::serialize(bool synchronize) -> serializer {
|
||||
if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize);
|
||||
serializer s;
|
||||
|
||||
u32 signature = SerializerSignature;
|
||||
char version[16] = {};
|
||||
char description[512] = {};
|
||||
memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size());
|
||||
|
||||
s(signature);
|
||||
s(synchronize);
|
||||
s(version);
|
||||
s(description);
|
||||
|
||||
serialize(s, synchronize);
|
||||
return s;
|
||||
}
|
||||
|
||||
auto System::unserialize(serializer& s) -> bool {
|
||||
u32 signature = 0;
|
||||
bool synchronize = true;
|
||||
char version[16] = {};
|
||||
char description[512] = {};
|
||||
|
||||
s(signature);
|
||||
s(synchronize);
|
||||
s(version);
|
||||
s(description);
|
||||
|
||||
if(signature != SerializerSignature) return false;
|
||||
if(string{version} != SerializerVersion) return false;
|
||||
|
||||
if(synchronize) power(/* reset = */ false);
|
||||
serialize(s, synchronize);
|
||||
return true;
|
||||
}
|
||||
|
||||
auto System::serialize(serializer& s, bool synchronize) -> void {
|
||||
scheduler.setSynchronize(synchronize);
|
||||
s(cartridge);
|
||||
s(cpu);
|
||||
s(tia);
|
||||
s(riot);
|
||||
s(controllerPort1);
|
||||
s(controllerPort2);
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
#include <a26/a26.hpp>
|
||||
|
||||
namespace ares::Atari2600 {
|
||||
|
||||
auto enumerate() -> vector<string> {
|
||||
return {
|
||||
"[Atari] Atari 2600 (NTSC)",
|
||||
"[Atari] Atari 2600 (PAL)",
|
||||
"[Atari] Atari 2600 (SECAM)",
|
||||
};
|
||||
}
|
||||
|
||||
auto load(Node::System& node, string name) -> bool {
|
||||
if(!enumerate().find(name)) return false;
|
||||
return system.load(node, name);
|
||||
}
|
||||
|
||||
Random random;
|
||||
Scheduler scheduler;
|
||||
System system;
|
||||
#include "controls.cpp"
|
||||
#include "serialization.cpp"
|
||||
|
||||
auto System::game() -> string {
|
||||
if(cartridge.node) {
|
||||
return cartridge.title();
|
||||
}
|
||||
|
||||
return "(no cartridge connected)";
|
||||
}
|
||||
|
||||
auto System::run() -> void {
|
||||
scheduler.enter();
|
||||
}
|
||||
|
||||
auto System::load(Node::System& root, string name) -> bool {
|
||||
if(node) unload();
|
||||
|
||||
information = {};
|
||||
if(name.find("NTSC")) {
|
||||
information.name = "Atari 2600";
|
||||
information.region = Region::NTSC;
|
||||
information.frequency = 3579546;
|
||||
}
|
||||
if(name.find("PAL")) {
|
||||
information.name = "Atari 2600";
|
||||
information.region = Region::PAL;
|
||||
information.frequency = 3546894;
|
||||
}
|
||||
if(name.find("SECAM")) {
|
||||
information.name = "Atari 2600";
|
||||
information.region = Region::SECAM;
|
||||
information.frequency = 3546894;
|
||||
}
|
||||
|
||||
node = Node::System::create(information.name);
|
||||
node->setGame({&System::game, this});
|
||||
node->setRun({&System::run, this});
|
||||
node->setPower({&System::power, this});
|
||||
node->setSave({&System::save, this});
|
||||
node->setUnload({&System::unload, this});
|
||||
node->setSerialize({&System::serialize, this});
|
||||
node->setUnserialize({&System::unserialize, this});
|
||||
root = node;
|
||||
|
||||
scheduler.reset();
|
||||
controls.load(node);
|
||||
riot.load(node);
|
||||
cpu.load(node);
|
||||
tia.load(node);
|
||||
cartridgeSlot.load(node);
|
||||
controllerPort1.load(node);
|
||||
controllerPort2.load(node);
|
||||
return true;
|
||||
}
|
||||
|
||||
auto System::save() -> void {
|
||||
if(!node) return;
|
||||
cartridge.save();
|
||||
}
|
||||
|
||||
auto System::unload() -> void {
|
||||
if(!node) return;
|
||||
save();
|
||||
riot.unload();
|
||||
cpu.unload();
|
||||
tia.unload();
|
||||
cartridgeSlot.unload();
|
||||
controllerPort1.unload();
|
||||
controllerPort2.unload();
|
||||
node = {};
|
||||
}
|
||||
|
||||
auto System::power(bool reset) -> void {
|
||||
for(auto& setting : node->find<Node::Setting::Setting>()) setting->setLatch();
|
||||
|
||||
random.entropy(Random::Entropy::Low);
|
||||
cartridge.power();
|
||||
riot.power(reset);
|
||||
cpu.power(reset);
|
||||
tia.power(reset);
|
||||
scheduler.power(cpu);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
extern Random random;
|
||||
|
||||
struct System {
|
||||
Node::System node;
|
||||
|
||||
struct Controls {
|
||||
Node::Object node;
|
||||
Node::Input::Button reset;
|
||||
Node::Input::Button select;
|
||||
Node::Input::Button leftDifficulty;
|
||||
Node::Input::Button rightDifficulty;
|
||||
Node::Input::Button tvType;
|
||||
|
||||
//controls.cpp
|
||||
auto load(Node::Object) -> void;
|
||||
auto poll() -> void;
|
||||
} controls;
|
||||
|
||||
enum class Region : u32 { NTSC, PAL, SECAM };
|
||||
|
||||
auto name() const -> string { return information.name; }
|
||||
auto region() const -> Region { return information.region; }
|
||||
auto frequency() const -> f64 { return information.frequency; }
|
||||
|
||||
//system.cpp
|
||||
auto game() -> string;
|
||||
auto run() -> void;
|
||||
|
||||
auto load(Node::System& node, string name) -> bool;
|
||||
auto save() -> void;
|
||||
auto unload() -> void;
|
||||
auto power(bool reset) -> void;
|
||||
|
||||
//serialization.cpp
|
||||
auto serialize(bool synchronize) -> serializer;
|
||||
auto unserialize(serializer&) -> bool;
|
||||
|
||||
private:
|
||||
struct Information {
|
||||
string name = "Atari 2600";
|
||||
Region region = Region::NTSC;
|
||||
f64 frequency = Constants::Colorburst::NTSC;
|
||||
} information;
|
||||
|
||||
//serialization.cpp
|
||||
auto serialize(serializer&, bool synchronize) -> void;
|
||||
};
|
||||
|
||||
extern System system;
|
||||
|
||||
auto Region::NTSC() -> bool { return system.region() == System::Region::NTSC; }
|
||||
auto Region::PAL() -> bool { return system.region() == System::Region::PAL; }
|
||||
auto Region::SECAM() -> bool { return system.region() == System::Region::SECAM; }
|
||||
@@ -0,0 +1,64 @@
|
||||
auto TIA::runAudio() -> void {
|
||||
if(io.hcounter == 9 || io.hcounter == 81) {
|
||||
audio[0].phase0();
|
||||
audio[1].phase0();
|
||||
}
|
||||
|
||||
if(io.hcounter == 37 || io.hcounter == 149) {
|
||||
auto a = audio[0].phase1();
|
||||
auto b = audio[1].phase1();
|
||||
|
||||
double output = 0;
|
||||
output += volume[a];
|
||||
output += volume[b];
|
||||
|
||||
stream->frame(output / 2.0);
|
||||
}
|
||||
}
|
||||
|
||||
auto TIA::AudioChannel::phase0() -> void {
|
||||
if (enable) {
|
||||
switch (control.bit(0, 1)) {
|
||||
case 0x00: case 0x01: pulseCounterPaused = 0; break;
|
||||
case 0x02: pulseCounterPaused = noiseCounter.bit(1, 4) != 1; break;
|
||||
case 0x03: pulseCounterPaused = !noiseCounter.bit(0); break;
|
||||
}
|
||||
|
||||
noiseFeedback = (noiseCounter.bit(2) ^ noiseCounter.bit(0)) || noiseCounter == 0;
|
||||
if(control.bit(0, 2) == 0) {
|
||||
noiseFeedback = !(control.bit(2, 3)) ||
|
||||
!(noiseCounter || (pulseCounter != 0x0a)) ||
|
||||
(pulseCounter.bit(0) ^ noiseCounter.bit(0));
|
||||
}
|
||||
}
|
||||
|
||||
enable = divCounter == frequency;
|
||||
if (divCounter == frequency || divCounter == 0x1f) {
|
||||
divCounter = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
divCounter++;
|
||||
}
|
||||
|
||||
auto TIA::AudioChannel::phase1() -> u8 {
|
||||
if(!enable) return pulseCounter.bit(0) * volume;
|
||||
|
||||
pulseFeedback = 0;
|
||||
switch(control.bit(2, 3)) {
|
||||
case 0x00: pulseFeedback = pulseCounter != 0x0a && control.bit(0, 2) && (pulseCounter.bit(1) ^ pulseCounter.bit(0)); break;
|
||||
case 0x01: pulseFeedback = !pulseCounter.bit(3); ; break;
|
||||
case 0x02: pulseFeedback = !noiseCounter.bit(0); ; break;
|
||||
case 0x03: pulseFeedback = !(pulseCounter.bit(1) || !pulseCounter.bit(1, 3)); ; break;
|
||||
}
|
||||
|
||||
noiseCounter >>= 1;
|
||||
if (noiseFeedback) noiseCounter.bit(4) = 1;
|
||||
|
||||
if(!pulseCounterPaused) {
|
||||
pulseCounter = ~(pulseCounter >> 1) & 7;
|
||||
if (pulseFeedback) pulseCounter.bit(3) = 1;
|
||||
}
|
||||
|
||||
return pulseCounter.bit(0) * volume;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
auto TIA::Ball::reset() -> void {
|
||||
counter = -4; // Resetting takes 4 cycles
|
||||
}
|
||||
|
||||
auto TIA::Ball::step(u8 clocks) -> void {
|
||||
if(!clocks) return;
|
||||
while(clocks--) {
|
||||
if(++counter == 160) {
|
||||
counter = 0;
|
||||
}
|
||||
|
||||
const int ballSizes[4] = {1, 2, 4, 8};
|
||||
output = enable[delay] && counter < ballSizes[size];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
auto TIA::color(n32 color) -> n64 {
|
||||
u64 ntscColors[128] = {
|
||||
0x0000'0000'0000ull, 0x4040'4040'4040ull, 0x6c6c'6c6c'6c6cull, 0x9090'9090'9090ull, 0xb0b0'b0b0'b0b0ull, 0xc8c8'c8c8'c8c8ull, 0xdcdc'dcdc'dcdcull, 0xecec'ecec'ececull,
|
||||
0x4444'4444'0000ull, 0x6464'6464'1010ull, 0x8484'8484'2424ull, 0xa0a0'a0a0'3434ull, 0xb8b8'b8b8'4040ull, 0xd0d0'd0d0'5050ull, 0xe8e8'e8e8'5c5cull, 0xfcfc'fcfc'6868ull,
|
||||
0x7070'2828'0000ull, 0x8484'4444'1414ull, 0x9898'5c5c'2828ull, 0xacac'7878'3c4cull, 0xbcbc'8c8c'4c4cull, 0xcccc'a0a0'5c5cull, 0xdcdc'b4b4'6868ull, 0xecec'c8c8'7878ull,
|
||||
0x8484'1818'0000ull, 0x9898'3434'1818ull, 0xacac'5050'3030ull, 0xc0c0'6868'4848ull, 0xd0d0'8080'5c5cull, 0xe0e0'9494'7070ull, 0xecec'a8a8'8080ull, 0xfcfc'bcbc'9494ull,
|
||||
0x8888'0000'0000ull, 0x9c9c'2020'2020ull, 0xb0b0'3c3c'3c3cull, 0xc0c0'5858'5858ull, 0xd0d0'7070'7070ull, 0xe0e0'8888'8888ull, 0xecec'a0a0'a0a0ull, 0xfcfc'b4b4'b4b4ull,
|
||||
0x7878'0000'5c5cull, 0x8c8c'2020'7474ull, 0xa0a0'3c3c'8888ull, 0xb0b0'5858'9c9cull, 0xc0c0'7070'b0b0ull, 0xd0d0'8484'c0c0ull, 0xdcdc'9c9c'd0d0ull, 0xecec'b0b0'e0e0ull,
|
||||
0x4848'0000'7878ull, 0x6060'2020'9090ull, 0x7878'3c3c'a4a4ull, 0x8c8c'5858'b8b8ull, 0xa0a0'7070'ccccull, 0xb4b4'8484'dcdcull, 0xc4c4'9c9c'ececull, 0xd4d4'b0b0'fcfcull,
|
||||
0x1414'0000'8484ull, 0x3030'2020'9898ull, 0x4c4c'3c3c'acacull, 0x6868'5858'c0c0ull, 0x7c7c'7070'd0d0ull, 0x9494'8888'e0e0ull, 0xa8a8'a0a0'ececull, 0xbcbc'b4b4'fcfcull,
|
||||
0x0000'0000'8888ull, 0x1c1c'2020'9c9cull, 0x3838'4040'b0b0ull, 0x5050'5c5c'c0c0ull, 0x6868'7474'd0d0ull, 0x7c7c'8c8c'e0e0ull, 0x9090'a4a4'ececull, 0xa4a4'b8b8'fcfcull,
|
||||
0x0000'1818'7c7cull, 0x1c1c'3838'9090ull, 0x3838'5454'a8a8ull, 0x5050'7070'bcbcull, 0x6868'8888'ccccull, 0x7c7c'9c9c'dcdcull, 0x9090'b4b4'ececull, 0xa4a4'c8c8'fcfcull,
|
||||
0x0000'2c2c'5c5cull, 0x1c1c'4c4c'7878ull, 0x3838'6868'9090ull, 0x5050'8484'acacull, 0x6868'9c9c'c0c0ull, 0x7c7c'b4b4'd4d4ull, 0x9090'cccc'e8e8ull, 0xa4a4'e0e0'fcfcull,
|
||||
0x0000'3c3c'2c2cull, 0x1c1c'5c5c'4848ull, 0x3838'7c7c'6464ull, 0x5050'9c9c'8080ull, 0x6868'b4b4'9494ull, 0x7c7c'd0d0'acacull, 0x9090'e4e4'c0c0ull, 0xa4a4'fcfc'd4d4ull,
|
||||
0x0000'3c3c'0000ull, 0x2020'5c5c'2020ull, 0x4040'7c7c'4040ull, 0x5c5c'9c9c'5c5cull, 0x7474'b4b4'7474ull, 0x8c8c'd0d0'8c8cull, 0xa4a4'e4e4'a4a4ull, 0xb8b8'fcfc'b8b8ull,
|
||||
0x1414'3838'0000ull, 0x3434'5c5c'1c1cull, 0x5050'7c7c'3838ull, 0x6c6c'9898'5050ull, 0x8484'b4b4'6868ull, 0x9c9c'cccc'7c7cull, 0xb4b4'e4e4'9090ull, 0xc8c8'fcfc'a4a4ull,
|
||||
0x2c2c'3030'0000ull, 0x4c4c'5050'1c1cull, 0x6868'7070'3434ull, 0x8484'8c8c'4c4cull, 0x9c9c'a8a8'6464ull, 0xb4b4'c0c0'7878ull, 0xcccc'd4d4'8888ull, 0xe0e0'ecec'9c9cull,
|
||||
0x4444'2828'0000ull, 0x6464'4848'1818ull, 0x8484'6868'3030ull, 0xa0a0'8484'4444ull, 0xb8b8'9c9c'5858ull, 0xd0d0'b4b4'6c6cull, 0x8e8c'cccc'7c7cull, 0xfcfc'c0c0'8c8cull,
|
||||
};
|
||||
|
||||
u64 palColors[128] = {
|
||||
0x0000'0000'0000ull, 0x2828'2828'2828ull, 0x5050'5050'5050ull, 0x7474'7474'7474ull, 0x9494'9494'9494ull, 0xb4b4'b4b4'b4b4ull, 0xd0d0'd0d0'd0d0ull, 0xecec'ecec'ececull,
|
||||
0x0000'0000'0000ull, 0x2828'2828'2828ull, 0x5050'5050'5050ull, 0x7474'7474'7474ull, 0x9494'9494'9494ull, 0xb4b4'b4b4'b4b4ull, 0xd0d0'd0d0'd0d0ull, 0xecec'ecec'ececull,
|
||||
0x8080'5858'0000ull, 0x9494'7070'2020ull, 0xa8a8'8484'3c3cull, 0xbcbc'9c9c'5858ull, 0xcccc'acac'7070ull, 0xdcdc'c0c0'8484ull, 0xecec'd0d0'9c9cull, 0xfcfc'e0e0'b0b0ull,
|
||||
0x4444'5c5c'0000ull, 0x5c5c'7878'2020ull, 0x7474'9090'3c3cull, 0x8c8c'acac'5858ull, 0xa0a0'c0c0'7070ull, 0xb0b0'd4d4'8484ull, 0xc4c4'e8e8'9c9cull, 0xd4d4'fcfc'b0b0ull,
|
||||
0x7070'3434'0000ull, 0x8888'5050'2020ull, 0xa0a0'6868'3c3cull, 0xb4b4'8484'5858ull, 0xc8c8'9898'7070ull, 0xdcdc'acac'8484ull, 0xecec'c0c0'9c9cull, 0xfcfc'd4d4'b0b0ull,
|
||||
0x0000'6464'1414ull, 0x2020'8080'3434ull, 0x3c3c'9898'5050ull, 0x5858'b0b0'6c6cull, 0x7070'c4c4'8484ull, 0x8484'd8d8'9c9cull, 0x9c9c'e8e8'b4b4ull, 0xb0b0'fcfc'c8c8ull,
|
||||
0x7070'0000'1414ull, 0x8888'2020'3434ull, 0xa0a0'3c3c'5050ull, 0xb4b4'5858'6c6cull, 0xc8c8'7070'8484ull, 0xdcdc'8484'9c9cull, 0xecec'9c9c'b4b4ull, 0xfcfc'b0b0'c8c8ull,
|
||||
0x0000'5c5c'5c5cull, 0x2020'7474'7474ull, 0x3c3c'8c8c'8c8cull, 0x5858'a4a4'a4a4ull, 0x7070'b8b8'b8b8ull, 0x8484'c8c8'c8c8ull, 0x9c9c'dcdc'dcdcull, 0xb0b0'ecec'ececull,
|
||||
0x7070'0000'5c5cull, 0x8484'2020'7474ull, 0x9494'3c3c'8888ull, 0xa8a8'5858'9c9cull, 0xb4b4'7070'b0b0ull, 0xc4c4'8484'c0c0ull, 0xd0d0'9c9c'd0d0ull, 0xe0e0'b0b0'e0e0ull,
|
||||
0x0000'3c3c'7070ull, 0x1c1c'5858'8888ull, 0x3838'7474'a0a0ull, 0x5050'8c8c'b4b4ull, 0x6868'a4a4'c8c8ull, 0x7c7c'b8b8'dcdcull, 0x9090'cccc'ececull, 0xa4a4'e0e0'fcfcull,
|
||||
0x5858'0000'7070ull, 0x6c6c'2020'8888ull, 0x8080'3c3c'a0a0ull, 0x9494'5858'b4b4ull, 0xa4a4'7070'c8c8ull, 0xb4b4'8484'dcdcull, 0xc4c4'9c9c'ececull, 0xd4d4'b0b0'fcfcull,
|
||||
0x0000'2020'7070ull, 0x1c1c'3c3c'8888ull, 0x3838'5858'a0a0ull, 0x5050'7474'b4b4ull, 0x6868'8888'c8c8ull, 0x7c7c'a0a0'dcdcull, 0x9090'b4b4'ececull, 0xa4a4'c8c8'fcfcull,
|
||||
0x3c3c'0000'8080ull, 0x5454'2020'9494ull, 0x6c6c'3c3c'a8a8ull, 0x8080'5858'bcbcull, 0x9494'7070'ccccull, 0xa8a8'8484'dcdcull, 0xb8b8'9c9c'ececull, 0xc8c8'b0b0'fcfcull,
|
||||
0x0000'0000'8888ull, 0x2020'2020'9c9cull, 0x3c3c'3c3c'b0b0ull, 0x5858'5858'c0c0ull, 0x7070'7070'd0d0ull, 0x8484'8484'e0e0ull, 0x9c9c'9c9c'ececull, 0xb0b0'b0b0'fcfcull,
|
||||
0x0000'0000'0000ull, 0x2828'2828'2828ull, 0x5050'5050'5050ull, 0x7474'7474'7474ull, 0x9494'9494'9494ull, 0xb4b4'b4b4'b4b4ull, 0xd0d0'd0d0'd0d0ull, 0xecec'ecec'ececull,
|
||||
0x0000'0000'0000ull, 0x2828'2828'2828ull, 0x5050'5050'5050ull, 0x7474'7474'7474ull, 0x9494'9494'9494ull, 0xb4b4'b4b4'b4b4ull, 0xd0d0'd0d0'd0d0ull, 0xecec'ecec'ececull,
|
||||
};
|
||||
|
||||
return Region::PAL() ? palColors[color & 0x7f] : ntscColors[color & 0x7f];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
auto TIA::read(n8 address) -> n8 {
|
||||
n8 value;
|
||||
|
||||
switch(address) {
|
||||
case 0x00: value.bit(7) = collision.M0P1; value.bit(6) = collision.M0P0; return value; // CXM0P
|
||||
case 0x01: value.bit(7) = collision.M1P0; value.bit(6) = collision.M1P1; return value; // CXM1P
|
||||
case 0x02: value.bit(7) = collision.P0PF; value.bit(6) = collision.P0BL; return value; // CX0FB
|
||||
case 0x03: value.bit(7) = collision.P1PF; value.bit(6) = collision.P1BL; return value; // CX1FB
|
||||
case 0x04: value.bit(7) = collision.M0PF; value.bit(6) = collision.M0BL; return value; // CXM0FB
|
||||
case 0x05: value.bit(7) = collision.M1PF; value.bit(6) = collision.M1BL; return value; // CXM1FB
|
||||
case 0x06: value.bit(7) = collision.BLPF; return value; // CXBLPF
|
||||
case 0x07: value.bit(7) = collision.P0P1; value.bit(6) = collision.M0M1; return value; // CXPPMM
|
||||
case 0x0c: value.bit(7) = controllerPort1.read().bit(4); return value; // INPT4
|
||||
case 0x0d: value.bit(7) = controllerPort2.read().bit(4); return value; // INPT5
|
||||
}
|
||||
|
||||
debug(unimplemented, "[TIA] read ", hex(address));
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
auto TIA::write(n8 address, n8 data) -> void {
|
||||
switch(address) {
|
||||
case 0x00: vsync(data.bit(1)); return; // VSYNC
|
||||
case 0x01: writeQueue.add(address, data, 1); return; // VBLANK
|
||||
case 0x02: cpu.rdyLine(0); return; // WSYNC
|
||||
case 0x03: io.hcounter = 0; return; // RSYNC
|
||||
case 0x04: player[0].size = data.bit(0,2); missile[0].size = data.bit(4, 5); return; // NUSIZ1
|
||||
case 0x05: player[1].size = data.bit(0,2); missile[1].size = data.bit(4, 5); return; // NUSIZ1
|
||||
case 0x06: io.p0Color = data.bit(1, 7); return; // COLUP0
|
||||
case 0x07: io.p1Color = data.bit(1, 7); return; // COLUP1
|
||||
case 0x08: io.fgColor = data.bit(1, 7); return; // COLUPF
|
||||
case 0x09: io.bgColor = data.bit(1, 7); return; // COLUBK
|
||||
case 0x0a: ctrlpf(data); return; // CTRLPF
|
||||
case 0x0b: writeQueue.add(address, data, 1); return; // REFP0
|
||||
case 0x0c: writeQueue.add(address, data, 1); return; // REFP1
|
||||
case 0x0d: writeQueue.add(address, data, 2); return; // PF0
|
||||
case 0x0e: writeQueue.add(address, data, 2); return; // PF1
|
||||
case 0x0f: writeQueue.add(address, data, 2); return; // PF2
|
||||
case 0x10: resp(0); return; // RESP0
|
||||
case 0x11: resp(1); return; // RESP1
|
||||
case 0x12: resm(0); return; // RESM0
|
||||
case 0x13: resm(1); return; // RESM1
|
||||
case 0x14: resbl(); return; // RESBL
|
||||
case 0x15: audio[0].control = data; return; // AUDC0
|
||||
case 0x16: audio[1].control = data; return; // AUDC1
|
||||
case 0x17: audio[0].frequency = data; return; // AUDF0
|
||||
case 0x18: audio[1].frequency = data; return; // AUDF1
|
||||
case 0x19: audio[0].volume = data; return; // AUDV0
|
||||
case 0x1a: audio[1].volume = data; return; // AUDV1
|
||||
case 0x1b: writeQueue.add(address, data, 1); return; // GRP0
|
||||
case 0x1c: writeQueue.add(address, data, 1); return; // GRP1
|
||||
case 0x1d: writeQueue.add(address, data, 1); return; // ENAM0
|
||||
case 0x1e: writeQueue.add(address, data, 1); return; // ENAM1
|
||||
case 0x1f: writeQueue.add(address, data, 1); return; // ENAB1
|
||||
case 0x20: writeQueue.add(address, data, 2); return; // HMP0
|
||||
case 0x21: writeQueue.add(address, data, 2); return; // HMP1
|
||||
case 0x22: writeQueue.add(address, data, 2); return; // HMM0
|
||||
case 0x23: writeQueue.add(address, data, 2); return; // HMM1
|
||||
case 0x24: writeQueue.add(address, data, 2); return; // HMBL
|
||||
case 0x25: player[0].delay = data.bit(0); return; // VDELP0
|
||||
case 0x26: player[1].delay = data.bit(0); return; // VDELP1
|
||||
case 0x27: ball.delay = data.bit(0); return; // VDELBL
|
||||
case 0x28: resmp(0, data); return; // RESMP0
|
||||
case 0x29: resmp(1, data); return; // RESMP1
|
||||
case 0x2a: writeQueue.add(address, data, 6); return; // HMOVE
|
||||
case 0x2b: writeQueue.add(address, data, 2); return; // HMCLR
|
||||
case 0x2c: cxclr(); return; // CXCLR
|
||||
}
|
||||
|
||||
debug(unimplemented, "[TIA] write ",hex(address), " = ", hex(data));
|
||||
}
|
||||
|
||||
|
||||
auto TIA::vsync(n1 state) -> void {
|
||||
if(!io.vsync && state) {
|
||||
frame();
|
||||
tia.io.vcounter = 0;
|
||||
}
|
||||
|
||||
io.vsync = state;
|
||||
}
|
||||
|
||||
auto TIA::ctrlpf(n8 data) -> void {
|
||||
playfield.mirror = data.bit(0);
|
||||
playfield.scoreMode = data.bit(1);
|
||||
playfield.priority = data.bit(2);
|
||||
ball.size = data.bit(4, 5);
|
||||
}
|
||||
|
||||
auto TIA::cxclr() -> void {
|
||||
collision.M0P0 = 0;
|
||||
collision.M0P1 = 0;
|
||||
collision.M1P0 = 0;
|
||||
collision.M1P1 = 0;
|
||||
collision.P0PF = 0;
|
||||
collision.P0BL = 0;
|
||||
collision.P1PF = 0;
|
||||
collision.P1BL = 0;
|
||||
collision.M0PF = 0;
|
||||
collision.M0BL = 0;
|
||||
collision.M1PF = 0;
|
||||
collision.M1BL = 0;
|
||||
collision.BLPF = 0;
|
||||
collision.P0P1 = 0;
|
||||
collision.M0M1 = 0;
|
||||
}
|
||||
|
||||
auto TIA::hmove() -> void {
|
||||
u4 mask = 1 << 3;
|
||||
for(auto& p : player) p.step(p.offset ^ mask);
|
||||
for(auto& m : missile) m.step(m.offset ^ mask);
|
||||
ball.step(ball.offset ^ mask);
|
||||
|
||||
io.hmoveTriggered = 1;
|
||||
}
|
||||
|
||||
auto TIA::hmclr() -> void {
|
||||
for(auto& p : player) p.offset = 0;
|
||||
for(auto& m : missile) m.offset = 0;
|
||||
ball.offset = 0;
|
||||
}
|
||||
|
||||
auto TIA::grp(n1 index, n8 data) -> void {
|
||||
player[index].graphics[0] = data;
|
||||
player[!index].graphics[1] = player[!index].graphics[0];
|
||||
if(index) ball.enable[1] = ball.enable[0];
|
||||
}
|
||||
|
||||
auto TIA::resp(n1 index) -> void {
|
||||
player[index].reset();
|
||||
}
|
||||
|
||||
auto TIA::resm(n1 index) -> void {
|
||||
missile[index].reset();
|
||||
}
|
||||
|
||||
auto TIA::resmp(n1 index, n8 data) -> void {
|
||||
missile[index].lockedToPlayer = data.bit(1);
|
||||
}
|
||||
|
||||
auto TIA::resbl() -> void {
|
||||
ball.reset();
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
auto TIA::Missile::reset() -> void {
|
||||
counter = -4;
|
||||
}
|
||||
|
||||
auto TIA::Missile::start() -> void {
|
||||
startCounter = 4;
|
||||
starting = true;
|
||||
}
|
||||
|
||||
auto TIA::Missile::width() -> u8 {
|
||||
const int missileSizes[4] = {1, 2, 4, 8};
|
||||
return missileSizes[size];
|
||||
}
|
||||
|
||||
auto TIA::Missile::stepPixelCounter() -> void {
|
||||
if(--widthCounter == 0) {
|
||||
pixelCounter--;
|
||||
widthCounter = width();
|
||||
}
|
||||
}
|
||||
|
||||
auto TIA::Missile::step(u8 clocks) -> void {
|
||||
if(!clocks) return;
|
||||
while(clocks--) {
|
||||
counter++;
|
||||
|
||||
if(counter == 156) start();
|
||||
if(counter == 160) counter = 0;
|
||||
|
||||
if(starting && (startCounter-- == 0)) {
|
||||
starting = false;
|
||||
pixelCounter = 1;
|
||||
widthCounter = width();
|
||||
}
|
||||
|
||||
output = 0;
|
||||
if(pixelCounter) {
|
||||
stepPixelCounter();
|
||||
output = enable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
auto TIA::runMissile(n8 x, n1 index) -> n1 {
|
||||
auto& missile = this->missile[index];
|
||||
auto& player = this->player[index];
|
||||
auto position = missile.position;
|
||||
|
||||
if(missile.reset) {
|
||||
auto offset = 3;
|
||||
if(player.size == 5) offset = 6;
|
||||
if(player.size == 7) offset = 10;
|
||||
missile.position = player.position + offset;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!missile.enable) return 0;
|
||||
|
||||
const int missileSizes[4] = {1, 2, 4, 8};
|
||||
|
||||
// Handle player stretch capability
|
||||
auto width = missileSizes[missile.size];
|
||||
auto repeatWidth = width;
|
||||
if(player.size == 5) repeatWidth *= 2;
|
||||
if(player.size == 7) repeatWidth *= 4;
|
||||
|
||||
// Handle repeat capability
|
||||
auto repeat = 1;
|
||||
if(player.size == 1 || player.size == 2 || player.size == 4) repeat = 2;
|
||||
if(player.size == 3 || player.size == 6) repeat = 3;
|
||||
|
||||
auto spacing = 8;
|
||||
if(player.size == 2 || player.size == 6) spacing = 24;
|
||||
if(player.size == 4 ) spacing = 56;
|
||||
|
||||
for(int i = 0; i < repeat; i++) {
|
||||
if (x >= position && x < position + width) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
position = (position + (spacing + repeatWidth)) % 160;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
@@ -0,0 +1,57 @@
|
||||
auto TIA::Player::reset() -> void {
|
||||
counter = -4;
|
||||
}
|
||||
|
||||
auto TIA::Player::start(n1 copy) -> void {
|
||||
this->copy = copy;
|
||||
startCounter = 5;
|
||||
starting = true;
|
||||
}
|
||||
|
||||
auto TIA::Player::width() -> u8 {
|
||||
switch(size) {
|
||||
case 5: return 2;
|
||||
case 7: return 4;
|
||||
default: return 1;
|
||||
}
|
||||
}
|
||||
|
||||
auto TIA::Player::stepPixelCounter() -> void {
|
||||
if(--widthCounter == 0) {
|
||||
pixelCounter--;
|
||||
widthCounter = width();
|
||||
}
|
||||
|
||||
if(!copy && missile.lockedToPlayer && pixelCounter == 4) {
|
||||
missile.reset();
|
||||
}
|
||||
}
|
||||
|
||||
auto TIA::Player::step(u8 clocks) -> void {
|
||||
if(!clocks) return;
|
||||
while(clocks--) {
|
||||
counter++;
|
||||
|
||||
n1 first = size == 1 || size == 3;
|
||||
n1 second = size == 2 || size == 3 || size == 6;
|
||||
n1 third = size == 4 || size == 6;
|
||||
|
||||
if(first && counter == 12) start(true);
|
||||
if(second && counter == 28) start(true);
|
||||
if(third && counter == 60) start(true);
|
||||
if(counter == 156) start(false);
|
||||
if(counter == 160) counter = 0;
|
||||
|
||||
if(starting && (startCounter-- == 0)) {
|
||||
starting = false;
|
||||
pixelCounter = 8;
|
||||
widthCounter = width();
|
||||
}
|
||||
|
||||
output = 0;
|
||||
if(pixelCounter) {
|
||||
stepPixelCounter();
|
||||
output = graphics[delay].bit(reflect ? (7 - pixelCounter) : pixelCounter);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
auto TIA::runPlayfield(n8 x) -> n1 {
|
||||
|
||||
if((x % 4) == 0) {
|
||||
auto pos = x >> 2;
|
||||
playfield.pixel = (!playfield.mirror || pos < 20) ? playfield.graphics.bit(pos % 20)
|
||||
: playfield.graphics.bit(19 - (pos % 20));
|
||||
}
|
||||
|
||||
return playfield.pixel;
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
//serialization.cpp
|
||||
auto TIA::serialize(serializer& s) -> void {
|
||||
Thread::serialize(s);
|
||||
|
||||
for(auto n : range(writeQueue.maxItems)) {
|
||||
s(writeQueue.items[n].active);
|
||||
s(writeQueue.items[n].address);
|
||||
s(writeQueue.items[n].data);
|
||||
s(writeQueue.items[n].delay);
|
||||
}
|
||||
|
||||
s(io.vcounter);
|
||||
s(io.hcounter);
|
||||
s(io.hmoveTriggered);
|
||||
s(io.vsync);
|
||||
s(io.vblank);
|
||||
s(io.bgColor);
|
||||
s(io.p0Color);
|
||||
s(io.p1Color);
|
||||
s(io.fgColor);
|
||||
|
||||
s(playfield.graphics);
|
||||
s(playfield.mirror);
|
||||
s(playfield.scoreMode);
|
||||
s(playfield.priority);
|
||||
|
||||
for(auto n : range(2)) {
|
||||
s(player[n].graphics[0]);
|
||||
s(player[n].graphics[1]);
|
||||
s(player[n].reflect);
|
||||
s(player[n].size);
|
||||
s(player[n].offset);
|
||||
s(player[n].delay);
|
||||
s(player[n].counter);
|
||||
s(player[n].startCounter);
|
||||
s(player[n].pixelCounter);
|
||||
s(player[n].widthCounter);
|
||||
s(player[n].starting);
|
||||
s(player[n].output);
|
||||
s(player[n].copy);
|
||||
}
|
||||
|
||||
for(auto n : range(2)) {
|
||||
s(missile[n].enable);
|
||||
s(missile[n].lockedToPlayer);
|
||||
s(missile[n].size);
|
||||
s(missile[n].offset);
|
||||
s(missile[n].counter);
|
||||
s(missile[n].startCounter);
|
||||
s(missile[n].pixelCounter);
|
||||
s(missile[n].widthCounter);
|
||||
s(missile[n].starting);
|
||||
s(missile[n].output);
|
||||
}
|
||||
|
||||
s(ball.enable[0]);
|
||||
s(ball.enable[1]);
|
||||
s(ball.delay);
|
||||
s(ball.size);
|
||||
s(ball.offset);
|
||||
s(ball.counter);
|
||||
s(ball.output);
|
||||
|
||||
s(collision.M0P0);
|
||||
s(collision.M0P1);
|
||||
s(collision.M1P0);
|
||||
s(collision.M1P1);
|
||||
s(collision.P0PF);
|
||||
s(collision.P0BL);
|
||||
s(collision.P1PF);
|
||||
s(collision.P1BL);
|
||||
s(collision.M0PF);
|
||||
s(collision.M0BL);
|
||||
s(collision.M1PF);
|
||||
s(collision.M1BL);
|
||||
s(collision.BLPF);
|
||||
s(collision.P0P1);
|
||||
s(collision.M0M1);
|
||||
|
||||
for(auto n : range(26)) {
|
||||
s(volume[n]);
|
||||
}
|
||||
|
||||
for(auto n : range(2)) {
|
||||
s(audio[n].enable);
|
||||
s(audio[n].divCounter);
|
||||
s(audio[n].noiseCounter);
|
||||
s(audio[n].noiseFeedback);
|
||||
s(audio[n].pulseCounter);
|
||||
s(audio[n].pulseCounterPaused);
|
||||
s(audio[n].pulseFeedback);
|
||||
s(audio[n].volume);
|
||||
s(audio[n].control);
|
||||
s(audio[n].frequency);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
#include <a26/a26.hpp>
|
||||
|
||||
namespace ares::Atari2600 {
|
||||
|
||||
TIA tia;
|
||||
|
||||
#include "audio.cpp"
|
||||
#include "color.cpp"
|
||||
#include "io.cpp"
|
||||
#include "playfield.cpp"
|
||||
#include "player.cpp"
|
||||
#include "missile.cpp"
|
||||
#include "ball.cpp"
|
||||
#include "serialization.cpp"
|
||||
#include "write-queue.cpp"
|
||||
|
||||
auto TIA::load(Node::Object parent) -> void {
|
||||
node = parent->append<Node::Object>("TIA");
|
||||
|
||||
screen = node->append<Node::Video::Screen>("Screen", 180, displayHeight());
|
||||
screen->colors(1 << 7, {&TIA::color, this});
|
||||
screen->setSize(180, displayHeight());
|
||||
screen->setScale(2.0, 1.0);
|
||||
Region::PAL() ? screen->setAspect(38.0, 45.0) : screen->setAspect(4.0, 5.0);
|
||||
screen->setViewport(0, 0, 180, displayHeight());
|
||||
|
||||
stream = node->append<Node::Audio::Stream>("Audio");
|
||||
stream->setChannels(1);
|
||||
stream->setFrequency(31'403);
|
||||
stream->addHighPassFilter( 20.0, 1);
|
||||
stream->addLowPassFilter (2840.0, 1);
|
||||
}
|
||||
|
||||
auto TIA::unload() -> void {
|
||||
screen->quit();
|
||||
node->remove(screen);
|
||||
screen.reset();
|
||||
node.reset();
|
||||
}
|
||||
|
||||
auto TIA::main() -> void {
|
||||
scanline();
|
||||
io.vcounter++;
|
||||
io.hmoveTriggered = 0;
|
||||
}
|
||||
|
||||
auto TIA::scanline() -> void {
|
||||
cpu.io.scanlineCycles = 0;
|
||||
|
||||
for(io.hcounter = 0; io.hcounter < 228; io.hcounter++) {
|
||||
writeQueue.step();
|
||||
auto x = io.hcounter - 68;
|
||||
auto y = io.vcounter - voffset();
|
||||
bool hblank = (io.hmoveTriggered && io.hcounter < 76) || io.hcounter < 68;
|
||||
|
||||
// Playfield ignores hmove and always begins at cycle 68
|
||||
//if(io.hcounter >= 68) playfield.step();
|
||||
|
||||
// Objects are stepped only during active display
|
||||
if(!hblank) {
|
||||
ball.step();
|
||||
for(auto& player : this->player) player.step();
|
||||
for(auto& missile : this->missile) missile.step();
|
||||
}
|
||||
|
||||
n8 pixel = io.bgColor;
|
||||
auto pf = runPlayfield(x);
|
||||
auto bl = ball.output;
|
||||
auto p0 = player[0].output;
|
||||
auto p1 = player[1].output;
|
||||
auto m0 = missile[0].output;
|
||||
auto m1 = missile[1].output;
|
||||
|
||||
if(!playfield.priority && (pf || bl)) pixel = io.fgColor;
|
||||
if(p1 || m1) pixel = io.p1Color;
|
||||
if(p0 || m0) pixel = io.p0Color;
|
||||
if(playfield.priority && (pf || bl)) pixel = io.fgColor;
|
||||
|
||||
// Update Collision
|
||||
if(m0 && p1) collision.M0P1 = 1;
|
||||
if(m0 && p0) collision.M0P0 = 1;
|
||||
if(m1 && p0) collision.M1P0 = 1;
|
||||
if(m1 && p1) collision.M1P1 = 1;
|
||||
if(p0 && pf) collision.P0PF = 1;
|
||||
if(p0 && bl) collision.P0BL = 1;
|
||||
if(p1 && pf) collision.P1PF = 1;
|
||||
if(p1 && bl) collision.P1BL = 1;
|
||||
if(m0 && pf) collision.M0PF = 1;
|
||||
if(m0 && bl) collision.M0BL = 1;
|
||||
if(m1 && pf) collision.M1PF = 1;
|
||||
if(m1 && bl) collision.M1BL = 1;
|
||||
if(bl && pf) collision.BLPF = 1;
|
||||
if(p0 && p1) collision.P0P1 = 1;
|
||||
if(m0 && m1) collision.M0M1 = 1;
|
||||
|
||||
if(x >= 0 && y > 0 && y < displayHeight()) {
|
||||
if(io.vblank || hblank) pixel = 0;
|
||||
auto output = screen->pixels().data() + (y * 180) + 10;
|
||||
output[x] = pixel;
|
||||
}
|
||||
|
||||
runAudio();
|
||||
step();
|
||||
if(io.hcounter == 0) cpu.io.rdyLine = 1;
|
||||
}
|
||||
|
||||
// Prevent an infinite emulator hang when games miss vblank
|
||||
if(io.vcounter > vlines()) {
|
||||
scheduler.exit(Event::Frame);
|
||||
io.vcounter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
auto TIA::frame() -> void {
|
||||
screen->refreshRateHint(system.frequency(), 228, io.vcounter);
|
||||
screen->frame();
|
||||
scheduler.exit(Event::Frame);
|
||||
}
|
||||
|
||||
auto TIA::step(u32 clocks) -> void {
|
||||
Thread::step(clocks);
|
||||
Thread::synchronize();
|
||||
}
|
||||
|
||||
auto TIA::power(bool reset) -> void {
|
||||
Thread::create(system.frequency(), {&TIA::main, this});
|
||||
screen->power();
|
||||
io = {};
|
||||
playfield = {};
|
||||
for(auto& p : player) {
|
||||
p.graphics[0] = p.graphics[1] = 0;
|
||||
p.reflect = 0;
|
||||
p.size = 0;
|
||||
p.offset = 0;
|
||||
p.delay = 0;
|
||||
p.counter = 0;
|
||||
p.startCounter = 0;
|
||||
p.pixelCounter = 0;
|
||||
p.widthCounter = 0;
|
||||
p.starting = 0;
|
||||
p.output = 0;
|
||||
p.copy = 0;
|
||||
};
|
||||
for(auto& m : missile) m = {};
|
||||
ball = {};
|
||||
collision = {};
|
||||
for(auto n : range(writeQueue.maxItems)) writeQueue.items[n] = {};
|
||||
audio[0] = {}; audio[1] = {};
|
||||
for(u32 level : range(15)) {
|
||||
volume[level] = pow(2, level * -2.0 / 6.0);
|
||||
}
|
||||
volume[15] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
struct TIA : Thread {
|
||||
Node::Object node;
|
||||
Node::Video::Screen screen;
|
||||
Node::Audio::Stream stream;
|
||||
|
||||
auto vlines() const -> u32 { return Region::NTSC() ? 262 : 312; }
|
||||
auto displayHeight() const -> u32 { return Region::PAL() ? 243 : 228; }
|
||||
auto voffset() const -> s32 { return Region::PAL() ? 40 : 20; }
|
||||
|
||||
//tia.cpp
|
||||
auto load(Node::Object) -> void;
|
||||
auto unload() -> void;
|
||||
|
||||
auto main() -> void;
|
||||
auto step(u32 clocks = 1) -> void;
|
||||
auto power(bool reset) -> void;
|
||||
auto frame() -> void;
|
||||
auto scanline() -> void;
|
||||
auto pixel(n8 x) -> void;
|
||||
|
||||
auto runPlayfield(n8 x) -> n1;
|
||||
auto runPlayer(n8 x, n1 index) -> n1;
|
||||
auto runMissile(n8 x, n1 index) -> n1;
|
||||
auto runCollision() -> void;
|
||||
|
||||
//io.cpp
|
||||
auto read(n8 address) -> n8;
|
||||
auto write(n8 address, n8 data) -> void;
|
||||
auto vsync(n1 state) -> void;
|
||||
auto ctrlpf(n8 data) -> void;
|
||||
auto cxclr() -> void;
|
||||
auto hmove() -> void;
|
||||
auto hmclr() -> void;
|
||||
auto grp(n1 index, n8 data) -> void;
|
||||
auto resp(n1 index) -> void;
|
||||
auto resm(n1 index) -> void;
|
||||
auto resmp(n1 index, n8 data) -> void;
|
||||
auto resbl() -> void;
|
||||
|
||||
// audio.cpp
|
||||
auto runAudio() -> void;
|
||||
|
||||
//color.cpp
|
||||
auto color(n32) -> n64;
|
||||
|
||||
//serialization.cpp
|
||||
auto serialize(serializer&) -> void;
|
||||
|
||||
// write-queue.cpp
|
||||
struct WriteQueue {
|
||||
inline auto add(u8 address, n8 data, i8 delay) -> void;
|
||||
inline auto step() -> void;
|
||||
|
||||
struct QueueItem {
|
||||
inline auto commit() -> void;
|
||||
n1 active;
|
||||
i8 address;
|
||||
n8 data;
|
||||
i8 delay;
|
||||
};
|
||||
|
||||
QueueItem items[16];
|
||||
const int maxItems = 16;
|
||||
} writeQueue;
|
||||
|
||||
struct {
|
||||
u9 vcounter;
|
||||
u8 hcounter;
|
||||
n1 hmoveTriggered;
|
||||
|
||||
n1 vsync;
|
||||
n1 vblank;
|
||||
|
||||
n7 bgColor;
|
||||
n7 p0Color;
|
||||
n7 p1Color;
|
||||
n7 fgColor;
|
||||
} io;
|
||||
|
||||
struct {
|
||||
n20 graphics;
|
||||
n1 pixel;
|
||||
n1 mirror;
|
||||
n1 scoreMode;
|
||||
n1 priority;
|
||||
} playfield;
|
||||
|
||||
struct Missile {
|
||||
auto step(u8 cycles = 1) -> void;
|
||||
auto start() -> void;
|
||||
auto reset() -> void;
|
||||
auto width() -> u8;
|
||||
auto stepPixelCounter() -> void;
|
||||
n1 enable;
|
||||
n1 lockedToPlayer;
|
||||
n2 size;
|
||||
n4 offset;
|
||||
i9 counter;
|
||||
u8 startCounter;
|
||||
u8 pixelCounter;
|
||||
u8 widthCounter;
|
||||
n1 starting;
|
||||
n1 output;
|
||||
} missile[2];
|
||||
|
||||
struct Player {
|
||||
Missile& missile;
|
||||
auto step(u8 cycles = 1) -> void;
|
||||
auto start(n1 copy) -> void;
|
||||
auto reset() -> void;
|
||||
auto width() -> u8;
|
||||
auto stepPixelCounter() -> void;
|
||||
n8 graphics[2];
|
||||
n1 reflect;
|
||||
n3 size;
|
||||
n4 offset;
|
||||
n1 delay;
|
||||
i9 counter;
|
||||
u8 startCounter;
|
||||
u8 pixelCounter;
|
||||
u8 widthCounter;
|
||||
n1 starting;
|
||||
n1 output;
|
||||
n1 copy;
|
||||
} player[2] {{missile[0]}, {missile[1]}};
|
||||
|
||||
struct Ball {
|
||||
auto step(u8 cycles = 1) -> void;
|
||||
auto reset() -> void;
|
||||
|
||||
n1 enable[2];
|
||||
n2 size;
|
||||
n4 offset;
|
||||
n1 delay;
|
||||
i9 counter;
|
||||
n1 output;
|
||||
} ball;
|
||||
|
||||
struct {
|
||||
n1 M0P0;
|
||||
n1 M0P1;
|
||||
n1 M1P0;
|
||||
n1 M1P1;
|
||||
n1 P0PF;
|
||||
n1 P0BL;
|
||||
n1 P1PF;
|
||||
n1 P1BL;
|
||||
n1 M0PF;
|
||||
n1 M0BL;
|
||||
n1 M1PF;
|
||||
n1 M1BL;
|
||||
n1 BLPF;
|
||||
n1 P0P1;
|
||||
n1 M0M1;
|
||||
} collision;
|
||||
|
||||
struct AudioChannel {
|
||||
auto phase0() -> void;
|
||||
auto phase1() -> u8;
|
||||
n1 enable;
|
||||
n8 divCounter;
|
||||
n8 noiseCounter;
|
||||
n1 noiseFeedback;
|
||||
n8 pulseCounter;
|
||||
n1 pulseCounterPaused;
|
||||
n1 pulseFeedback;
|
||||
n4 volume;
|
||||
n4 control;
|
||||
n5 frequency;
|
||||
} audio[2];
|
||||
|
||||
f64 volume[16];
|
||||
};
|
||||
|
||||
extern TIA tia;
|
||||
@@ -0,0 +1,46 @@
|
||||
auto TIA::WriteQueue::add(u8 address, n8 data, i8 delay) -> void {
|
||||
for(auto n : range(maxItems)) {
|
||||
if(!items[n].active) {
|
||||
items[n].address = address;
|
||||
items[n].data = data;
|
||||
items[n].delay = delay;
|
||||
items[n].active = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto TIA::WriteQueue::step() -> void {
|
||||
auto& items = tia.writeQueue.items;
|
||||
|
||||
for(auto n : range(maxItems)) {
|
||||
if(items[n].active && --items[n].delay == 0) {
|
||||
items[n].commit();
|
||||
items[n].active = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto TIA::WriteQueue::QueueItem::commit() -> void {
|
||||
switch(address) {
|
||||
case 0x01: tia.io.vblank = data.bit(1); return; // VBLANK
|
||||
case 0x0b: tia.player[0].reflect = data.bit(3); return; // REFP0
|
||||
case 0x0c: tia.player[1].reflect = data.bit(3); return; // REFP1
|
||||
case 0x0d: tia.playfield.graphics.bit(0, 3) = data.bit(4, 7); return; // PF0
|
||||
case 0x0e: for(auto n : range(8)) tia.playfield.graphics.bit(4 + n) = data.bit(7 - n); return; // PF1
|
||||
case 0x0f: tia.playfield.graphics.bit(12, 19) = data; return; // PF2
|
||||
case 0x1b: tia.grp(0, data); return; // GRP0
|
||||
case 0x1c: tia.grp(1, data); return; // GRP1
|
||||
case 0x1d: tia.missile[0].enable = data.bit(1); return; // ENAM0
|
||||
case 0x1e: tia.missile[1].enable = data.bit(1); return; // ENAM1
|
||||
case 0x1f: tia.ball.enable[0] = data.bit(1); return; // ENABL
|
||||
case 0x20: tia.player[0].offset = data.bit(4, 7); return; // HMP0
|
||||
case 0x21: tia.player[1].offset = data.bit(4, 7); return; // HMP1
|
||||
case 0x22: tia.missile[0].offset = data.bit(4, 7); return; // HMM0
|
||||
case 0x23: tia.missile[1].offset = data.bit(4, 7); return; // HMM1
|
||||
case 0x24: tia.ball.offset = data.bit(4, 7); return; // HMBL
|
||||
case 0x2a: tia.hmove(); return; // HMOVE
|
||||
case 0x2b: tia.hmclr(); return; // HMCLR
|
||||
}
|
||||
debug(unimplemented, "[TIA] writeQueue: ",hex(address), " = ", hex(data));
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <ares/ares.hpp>
|
||||
#include <ares/debug/debug.cpp>
|
||||
#include <nall/gdb/server.cpp>
|
||||
#include <ares/node/node.cpp>
|
||||
#include <ares/resource/resource.cpp>
|
||||
|
||||
@@ -8,4 +9,13 @@ namespace ares {
|
||||
Platform* platform = nullptr;
|
||||
bool _runAhead = false;
|
||||
|
||||
const string Name = "ares";
|
||||
const string Version = "142";
|
||||
const string Copyright = "ares team, Near";
|
||||
const string License = "ISC";
|
||||
const string LicenseURI = "https://opensource.org/licenses/ISC";
|
||||
const string Website = "ares-emu.net";
|
||||
const string WebsiteURI = "https://ares-emu.net/";
|
||||
const u32 SerializerSignature = 0x31545342; //"BST1" (little-endian)
|
||||
|
||||
}
|
||||
+14
-12
@@ -1,17 +1,21 @@
|
||||
#pragma once
|
||||
|
||||
#include <libco/libco.h>
|
||||
#include <sljit.h>
|
||||
|
||||
#include <nall/platform.hpp>
|
||||
#include <nall/adaptive-array.hpp>
|
||||
#include <nall/any.hpp>
|
||||
#include <nall/array.hpp>
|
||||
#include <nall/bump-allocator.hpp>
|
||||
#include <nall/case-range.hpp>
|
||||
#include <nall/chrono.hpp>
|
||||
#include <nall/directory.hpp>
|
||||
#include <nall/dl.hpp>
|
||||
#include <nall/endian.hpp>
|
||||
#include <nall/hashset.hpp>
|
||||
#include <nall/image.hpp>
|
||||
#include <nall/instruction-set.hpp>
|
||||
#include <nall/literals.hpp>
|
||||
#include <nall/priority-queue.hpp>
|
||||
#include <nall/queue.hpp>
|
||||
@@ -34,19 +38,17 @@
|
||||
#include <nall/hash/crc32.hpp>
|
||||
#include <nall/hash/sha256.hpp>
|
||||
using namespace nall;
|
||||
using namespace nall::primitives;
|
||||
|
||||
namespace ares {
|
||||
static const string Name = "ares";
|
||||
static const string Version = "121";
|
||||
static const string Copyright = "Near";
|
||||
static const string License = "ISC";
|
||||
static const string LicenseURI = "https://opensource.org/licenses/ISC";
|
||||
static const string Website = "ares.dev";
|
||||
static const string WebsiteURI = "https://ares.dev";
|
||||
|
||||
//incremented only when serialization format changes
|
||||
static const u32 SerializerSignature = 0x31545342; //"BST1" (little-endian)
|
||||
static const string SerializerVersion = "121";
|
||||
extern const string Name;
|
||||
extern const string Version;
|
||||
extern const string Copyright;
|
||||
extern const string License;
|
||||
extern const string LicenseURI;
|
||||
extern const string Website;
|
||||
extern const string WebsiteURI;
|
||||
extern const u32 SerializerSignature;
|
||||
|
||||
namespace VFS {
|
||||
using Pak = shared_pointer<vfs::directory>;
|
||||
@@ -74,6 +76,6 @@ namespace ares {
|
||||
#include <ares/debug/debug.hpp>
|
||||
#include <ares/node/node.hpp>
|
||||
#include <ares/platform.hpp>
|
||||
#include <ares/memory/fixed-allocator.hpp>
|
||||
#include <ares/memory/readable.hpp>
|
||||
#include <ares/memory/writable.hpp>
|
||||
#include <ares/resource/resource.hpp>
|
||||
@@ -4,19 +4,19 @@ struct Debug {
|
||||
auto reset() -> void;
|
||||
|
||||
template<typename... P> auto unhandled(P&&... p) -> void {
|
||||
return _unhandled({forward<P>(p)...});
|
||||
return _unhandled({std::forward<P>(p)...});
|
||||
}
|
||||
|
||||
template<typename... P> auto unimplemented(P&&... p) -> void {
|
||||
return _unimplemented({forward<P>(p)...});
|
||||
return _unimplemented({std::forward<P>(p)...});
|
||||
}
|
||||
|
||||
template<typename... P> auto unusual(P&&... p) -> void {
|
||||
return _unusual({forward<P>(p)...});
|
||||
return _unusual({std::forward<P>(p)...});
|
||||
}
|
||||
|
||||
template<typename... P> auto unverified(P&&... p) -> void {
|
||||
return _unverified({forward<P>(p)...});
|
||||
return _unverified({std::forward<P>(p)...});
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
#include <ares/ares.hpp>
|
||||
|
||||
#if !defined(PLATFORM_MACOS)
|
||||
#define STATIC_ALLOCATION
|
||||
#endif
|
||||
|
||||
namespace ares::Memory {
|
||||
|
||||
constexpr u32 fixedBufferSize = 64_MiB;
|
||||
|
||||
#if defined(STATIC_ALLOCATION)
|
||||
u8 fixedBuffer[fixedBufferSize + 64_KiB];
|
||||
#endif
|
||||
|
||||
FixedAllocator::FixedAllocator() {
|
||||
u8* buffer = nullptr;
|
||||
|
||||
#if defined(STATIC_ALLOCATION)
|
||||
//align to 64 KiB (maximum page size of any supported OS)
|
||||
auto offset = -(uintptr)fixedBuffer % 64_KiB;
|
||||
//set protection to executable
|
||||
if(memory::protect(fixedBuffer + offset, fixedBufferSize, true)) {
|
||||
//use static allocation
|
||||
buffer = fixedBuffer + offset;
|
||||
}
|
||||
#endif
|
||||
|
||||
_allocator.resize(fixedBufferSize, bump_allocator::executable, buffer);
|
||||
}
|
||||
|
||||
auto FixedAllocator::get() -> bump_allocator& {
|
||||
static FixedAllocator allocator;
|
||||
return allocator._allocator;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
namespace ares::Memory {
|
||||
|
||||
struct FixedAllocator {
|
||||
static auto get() -> bump_allocator&;
|
||||
|
||||
private:
|
||||
FixedAllocator();
|
||||
|
||||
bump_allocator _allocator;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -25,7 +25,7 @@ struct Stream : Audio {
|
||||
template<typename... P>
|
||||
auto frame(P&&... p) -> void {
|
||||
if(runAhead()) return;
|
||||
f64 samples[sizeof...(p)] = {forward<P>(p)...};
|
||||
f64 samples[sizeof...(p)] = {f64(std::forward<P>(p))...};
|
||||
write(samples);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ struct Class {
|
||||
}
|
||||
|
||||
template<typename T> static auto register() -> void {
|
||||
if(!classes().find([&](auto instance) { return instance.identifier == T::identifier; })) {
|
||||
classes().append({T::identifier, &T::create});
|
||||
if(!classes().find([&](auto instance) { return instance.identifier == T::identifier(); })) {
|
||||
classes().append({T::identifier(), &T::create});
|
||||
} else {
|
||||
throw;
|
||||
}
|
||||
|
||||
@@ -18,23 +18,25 @@ struct Instruction : Tracer {
|
||||
|
||||
auto setMask(bool mask) -> void {
|
||||
_mask = mask;
|
||||
_masks.reset();
|
||||
}
|
||||
|
||||
auto setDepth(u32 depth) -> void {
|
||||
_depth = depth;
|
||||
_history.reset();
|
||||
_history.resize(depth);
|
||||
for(auto& history : _history) history = ~0;
|
||||
for(auto& history : _history) history = ~0ull;
|
||||
}
|
||||
|
||||
auto address(u32 address) -> bool {
|
||||
address &= (1u << _addressBits) - 1; //mask upper bits of address
|
||||
auto address(u64 address) -> bool {
|
||||
address &= ~0ull >> (64 - _addressBits); //mask upper bits of address
|
||||
_address = address;
|
||||
address >>= _addressMask; //clip unneeded alignment bits (to reduce _masks size)
|
||||
|
||||
if(_mask && updateMasks()) {
|
||||
if(_masks[address >> 3] & 1 << (address & 7)) return false; //do not trace twice
|
||||
_masks[address >> 3] |= 1 << (address & 7);
|
||||
if(_mask) {
|
||||
auto mask = _masks.find(address);
|
||||
if(!mask) mask = _masks.insert(address);
|
||||
if(mask->visit(address)) return false; //do not trace twice
|
||||
}
|
||||
|
||||
if(_depth) {
|
||||
@@ -55,11 +57,13 @@ struct Instruction : Tracer {
|
||||
|
||||
//mark an already-executed address as not executed yet for trace masking.
|
||||
//call when writing to executable RAM to support self-modifying code.
|
||||
auto invalidate(u32 address) -> void {
|
||||
if(unlikely(_mask && updateMasks())) {
|
||||
address &= (1u << _addressBits) - 1;
|
||||
auto invalidate(u64 address) -> void {
|
||||
if(unlikely(_mask)) {
|
||||
address &= ~0ull >> (64 - _addressBits);
|
||||
address >>= _addressMask;
|
||||
_masks[address >> 3] &= ~(1 << (address & 7));
|
||||
|
||||
auto mask = _masks.find(address);
|
||||
if(mask) mask->unvisit(address);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,9 +71,7 @@ struct Instruction : Tracer {
|
||||
if(!enabled()) return;
|
||||
|
||||
if(_omitted) {
|
||||
PlatformLog({
|
||||
"[Omitted: ", _omitted, "]\n"}
|
||||
);
|
||||
PlatformLog(shared(), {"[Omitted: ", _omitted, "]"});
|
||||
_omitted = 0;
|
||||
}
|
||||
|
||||
@@ -80,7 +82,7 @@ struct Instruction : Tracer {
|
||||
context, " ",
|
||||
extra
|
||||
};
|
||||
PlatformLog({output.strip(), "\n"});
|
||||
PlatformLog(shared(), {output.strip()});
|
||||
}
|
||||
|
||||
auto serialize(string& output, string depth) -> void override {
|
||||
@@ -103,14 +105,27 @@ struct Instruction : Tracer {
|
||||
}
|
||||
|
||||
protected:
|
||||
auto updateMasks() -> bool {
|
||||
auto size = 1ull << _addressBits >> _addressMask >> 3;
|
||||
if(!_mask || !size) return _masks.reset(), false;
|
||||
if(_masks.size() == size) return true;
|
||||
_masks.reset();
|
||||
_masks.resize(size);
|
||||
return true;
|
||||
}
|
||||
struct VisitMask {
|
||||
VisitMask(u64 address) : upper(address >> 6), mask(0) {}
|
||||
auto operator==(const VisitMask& source) const -> bool { return upper == source.upper; }
|
||||
auto hash() const -> u32 { return upper; }
|
||||
|
||||
auto visit(u64 address) -> bool {
|
||||
const u64 bit = 1ull << (address & 0x3f);
|
||||
if(mask & bit) return true;
|
||||
mask |= bit;
|
||||
return false;
|
||||
}
|
||||
|
||||
auto unvisit(u64 address) -> void {
|
||||
const u64 bit = 1ull << (address & 0x3f);
|
||||
mask &= ~bit;
|
||||
}
|
||||
|
||||
private:
|
||||
u64 upper;
|
||||
u64 mask;
|
||||
};
|
||||
|
||||
u32 _addressBits = 32;
|
||||
u32 _addressMask = 0;
|
||||
@@ -120,6 +135,6 @@ protected:
|
||||
//unserialized:
|
||||
n64 _address = 0;
|
||||
n64 _omitted = 0;
|
||||
vector<u32> _history;
|
||||
vector<u08> _masks;
|
||||
vector<u64> _history;
|
||||
hashset<VisitMask> _masks;
|
||||
};
|
||||
@@ -6,12 +6,7 @@ struct Notification : Tracer {
|
||||
|
||||
auto notify(const string& message = {}) -> void {
|
||||
if(!enabled()) return;
|
||||
|
||||
if(message) {
|
||||
PlatformLog({_component, " ", _name, ": ", message, "\n"});
|
||||
} else {
|
||||
PlatformLog({_component, " ", _name, "\n"});
|
||||
}
|
||||
PlatformLog(shared(), message);
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
@@ -6,24 +6,40 @@ struct Tracer : Debugger {
|
||||
}
|
||||
|
||||
auto component() const -> string { return _component; }
|
||||
auto enabled() const -> bool { return _enabled; }
|
||||
auto enabled() const -> bool { return file() || terminal(); }
|
||||
auto prefix() const -> bool { return _prefix; }
|
||||
auto terminal() const -> bool { return _terminal; }
|
||||
auto file() const -> bool { return _file; }
|
||||
auto autoLineBreak() const -> bool { return _autoLineBreak; }
|
||||
|
||||
auto setToggle(function<void ()> toggle) -> void { _toggle = toggle; }
|
||||
auto setComponent(string component) -> void { _component = component; }
|
||||
auto setEnabled(bool enabled) -> void { _enabled = enabled; }
|
||||
auto setPrefix(bool prefix) -> void { _prefix = prefix; }
|
||||
auto setTerminal(bool terminal) -> void { _terminal = terminal; if(_toggle) _toggle(); }
|
||||
auto setFile(bool file) -> void { _file = file; if(_toggle) _toggle(); }
|
||||
auto setAutoLineBreak(bool autoLineBreak) -> void { _autoLineBreak = autoLineBreak; }
|
||||
|
||||
auto serialize(string& output, string depth) -> void override {
|
||||
Debugger::serialize(output, depth);
|
||||
output.append(depth, " component: ", _component, "\n");
|
||||
output.append(depth, " enabled: ", _enabled, "\n");
|
||||
output.append(depth, " prefix: ", _prefix, "\n");
|
||||
output.append(depth, " terminal: ", _terminal, "\n");
|
||||
output.append(depth, " file: ", _file, "\n");
|
||||
}
|
||||
|
||||
auto unserialize(Markup::Node node) -> void override {
|
||||
Debugger::unserialize(node);
|
||||
_component = node["component"].string();
|
||||
_enabled = node["enabled"].boolean();
|
||||
_prefix = node["prefix"].boolean();
|
||||
_terminal = node["terminal"].boolean();
|
||||
_file = node["file"].boolean();
|
||||
}
|
||||
|
||||
protected:
|
||||
function<void ()> _toggle;
|
||||
string _component;
|
||||
bool _enabled = false;
|
||||
bool _prefix = false;
|
||||
bool _terminal = false;
|
||||
bool _file = false;
|
||||
bool _autoLineBreak = true;
|
||||
};
|
||||
@@ -1,4 +1,5 @@
|
||||
struct Input : Object {
|
||||
DeclareClass(Input, "input")
|
||||
using Object::Object;
|
||||
u64 lastPoll;
|
||||
};
|
||||
@@ -2,9 +2,17 @@ struct Rumble : Input {
|
||||
DeclareClass(Rumble, "input.rumble")
|
||||
using Input::Input;
|
||||
|
||||
auto enable() const -> bool { return _enable; }
|
||||
auto setEnable(bool enable) -> void { _enable = enable; }
|
||||
auto weakValue() const -> u16 { return _weak; }
|
||||
auto strongValue() const -> u16 { return _strong; }
|
||||
|
||||
auto setValues(u16 strong, u16 weak) -> void { _weak = weak; _strong = strong; }
|
||||
auto setWeak(u16 weak) -> void { _weak = weak; }
|
||||
auto setStrong(u16 strong) -> void { _strong = strong; }
|
||||
|
||||
// For systems with binary motors
|
||||
auto enable() const -> bool { return _weak > 0 || _strong > 0; }
|
||||
auto setEnable(bool enable) -> void { _weak = enable ? 65535 : 0; _strong = enable ? 65535 : 0; }
|
||||
protected:
|
||||
bool _enable = 0;
|
||||
u16 _weak = 0;
|
||||
u16 _strong = 0;
|
||||
};
|
||||
@@ -94,7 +94,7 @@ namespace ares::Core {
|
||||
// <ares/platform.hpp> forward declarations
|
||||
static auto PlatformAttach(Node::Object) -> void;
|
||||
static auto PlatformDetach(Node::Object) -> void;
|
||||
static auto PlatformLog(string_view) -> void;
|
||||
static auto PlatformLog(Node::Debugger::Tracer::Tracer tracer, string_view) -> void;
|
||||
|
||||
#include <ares/node/attribute.hpp>
|
||||
#include <ares/node/class.hpp>
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
//identifier is static, allowing template<typename T> to access via T::identifier
|
||||
//identifier() is static, allowing template<typename T> to access via T::identifier()
|
||||
//identity() is virtual, allowing T* to access via T->identity()
|
||||
|
||||
#define DeclareClass(Type, Name) \
|
||||
static inline const string identifier = Name; \
|
||||
static auto identifier() -> string { return Name; } \
|
||||
static auto create() -> Node::Object { return new Type; } \
|
||||
auto identity() const -> string override { return Name; } \
|
||||
private: static inline Class::Register<Type> register; public: \
|
||||
|
||||
struct Object : shared_pointer_this<Object> {
|
||||
static inline const string identifier = "Object";
|
||||
static auto identifier() -> string { return "Object"; }
|
||||
static auto create() -> Node::Object { return new Object; }
|
||||
virtual auto identity() const -> string { return "Object"; }
|
||||
private: static inline Class::Register<Object> register; public:
|
||||
@@ -33,7 +33,7 @@ struct Object : shared_pointer_this<Object> {
|
||||
template<typename T, typename... P>
|
||||
auto prepend(P&&... p) -> Node::Object {
|
||||
using Type = typename T::type;
|
||||
return prepend(shared_pointer<Type>::create(forward<P>(p)...));
|
||||
return prepend(shared_pointer<Type>::create(std::forward<P>(p)...));
|
||||
}
|
||||
|
||||
auto append(Node::Object node) -> Node::Object {
|
||||
@@ -47,7 +47,7 @@ struct Object : shared_pointer_this<Object> {
|
||||
template<typename T, typename... P>
|
||||
auto append(P&&... p) -> Node::Object {
|
||||
using Type = typename T::type;
|
||||
return append(shared_pointer<Type>::create(forward<P>(p)...));
|
||||
return append(shared_pointer<Type>::create(std::forward<P>(p)...));
|
||||
}
|
||||
|
||||
auto remove(Node::Object node) -> void {
|
||||
@@ -112,7 +112,7 @@ struct Object : shared_pointer_this<Object> {
|
||||
for(auto& node : _nodes) {
|
||||
if(node->_name != name) continue;
|
||||
if(path) return node->find<T>(path.merge("/"));
|
||||
if(node->identity() == Type::identifier) return node;
|
||||
if(node->identity() == Type::identifier()) return node;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
@@ -121,7 +121,7 @@ struct Object : shared_pointer_this<Object> {
|
||||
auto scan(string name) -> T {
|
||||
using Type = typename T::type;
|
||||
for(auto& node : _nodes) {
|
||||
if(node->identity() == Type::identifier && node->_name == name) return node;
|
||||
if(node->identity() == Type::identifier() && node->_name == name) return node;
|
||||
if(auto result = node->scan<T>(name)) return result;
|
||||
}
|
||||
return {};
|
||||
|
||||
@@ -25,17 +25,22 @@ Screen::~Screen() {
|
||||
|
||||
auto Screen::main(uintptr_t) -> void {
|
||||
while(!_kill) {
|
||||
usleep(1);
|
||||
if(_frame) {
|
||||
unique_lock<mutex> lock(_frameMutex);
|
||||
|
||||
auto timeout = std::chrono::milliseconds(10);
|
||||
if(_frameCondition.wait_for(lock, timeout, [&] { return _frame.load(); })) {
|
||||
refresh();
|
||||
_frame = false;
|
||||
}
|
||||
|
||||
if(_kill) break;
|
||||
}
|
||||
}
|
||||
|
||||
auto Screen::quit() -> void {
|
||||
_kill = true;
|
||||
_thread.join();
|
||||
_sprites.reset();
|
||||
}
|
||||
|
||||
auto Screen::power() -> void {
|
||||
@@ -67,6 +72,15 @@ auto Screen::setRefresh(function<void ()> refresh) -> void {
|
||||
_refresh = refresh;
|
||||
}
|
||||
|
||||
auto Screen::refreshRateHint(double pixelFrequency, int dotsPerLine, int linesPerFrame) -> void {
|
||||
refreshRateHint(1.0f / ((double)(dotsPerLine * linesPerFrame) / pixelFrequency));
|
||||
}
|
||||
|
||||
auto Screen::refreshRateHint(double refreshRate) -> void {
|
||||
lock_guard<recursive_mutex> lock(_mutex);
|
||||
platform->refreshRateHint(refreshRate);
|
||||
}
|
||||
|
||||
auto Screen::setViewport(u32 x, u32 y, u32 width, u32 height) -> void {
|
||||
lock_guard<recursive_mutex> lock(_mutex);
|
||||
_viewportX = x;
|
||||
@@ -75,6 +89,11 @@ auto Screen::setViewport(u32 x, u32 y, u32 width, u32 height) -> void {
|
||||
_viewportHeight = height;
|
||||
}
|
||||
|
||||
auto Screen::setOverscan(bool overscan) -> void {
|
||||
lock_guard<recursive_mutex> lock(_mutex);
|
||||
_overscan = overscan;
|
||||
}
|
||||
|
||||
auto Screen::setSize(u32 width, u32 height) -> void {
|
||||
lock_guard<recursive_mutex> lock(_mutex);
|
||||
_width = width;
|
||||
@@ -121,6 +140,11 @@ auto Screen::setColorBleed(bool colorBleed) -> void {
|
||||
_colorBleed = colorBleed;
|
||||
}
|
||||
|
||||
auto Screen::setColorBleedWidth(u32 width) -> void {
|
||||
lock_guard<recursive_mutex> lock(_mutex);
|
||||
_colorBleedWidth = width;
|
||||
}
|
||||
|
||||
auto Screen::setInterframeBlending(bool interframeBlending) -> void {
|
||||
lock_guard<recursive_mutex> lock(_mutex);
|
||||
_interframeBlending = interframeBlending;
|
||||
@@ -170,10 +194,12 @@ auto Screen::frame() -> void {
|
||||
|
||||
lock_guard<recursive_mutex> lock(_mutex);
|
||||
_inputA.swap(_inputB);
|
||||
_frame = true;
|
||||
if constexpr(!ares::Video::Threaded) {
|
||||
refresh();
|
||||
_frame = false;
|
||||
} else {
|
||||
_frame = true;
|
||||
_frameCondition.notify_one();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,14 +253,18 @@ auto Screen::refresh() -> void {
|
||||
}
|
||||
}
|
||||
|
||||
if(_colorBleed) {
|
||||
if (_colorBleed) {
|
||||
n32 mask = 1 << 24 | 1 << 16 | 1 << 8 | 1 << 0;
|
||||
for(u32 y : range(height)) {
|
||||
for (u32 y : range(height)) {
|
||||
auto target = output + y * width;
|
||||
for(u32 x : range(width)) {
|
||||
auto a = target[x];
|
||||
auto b = target[x + (x != width - 1)];
|
||||
target[x] = (a + b - ((a ^ b) & mask)) >> 1;
|
||||
for (u32 x : range(0, width, _colorBleedWidth)) {
|
||||
for (u32 offset = 0; offset < _colorBleedWidth && (x + offset) < width; ++offset) {
|
||||
u32 next = x + _colorBleedWidth;
|
||||
if (next + offset >= width) next = x;
|
||||
auto a = target[x + offset];
|
||||
auto b = target[next + offset];
|
||||
target[x + offset] = (a + b - ((a ^ b) & mask)) >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ struct Screen : Video {
|
||||
auto scaleY() const -> f64 { return _scaleY; }
|
||||
auto aspectX() const -> f64 { return _aspectX; }
|
||||
auto aspectY() const -> f64 { return _aspectY; }
|
||||
auto overscan() const -> bool { return _overscan; }
|
||||
auto colors() const -> u32 { return _colors; }
|
||||
auto pixels(bool frame = 0) -> array_span<u32>;
|
||||
|
||||
@@ -33,10 +34,13 @@ struct Screen : Video {
|
||||
|
||||
auto setRefresh(function<void ()> refresh) -> void;
|
||||
auto setViewport(u32 x, u32 y, u32 width, u32 height) -> void;
|
||||
auto refreshRateHint(double refreshRate) -> void;
|
||||
auto refreshRateHint(double pixelFrequency, int dotsPerLine, int linesPerFrame) -> void;
|
||||
|
||||
auto setSize(u32 width, u32 height) -> void;
|
||||
auto setScale(f64 scaleX, f64 scaleY) -> void;
|
||||
auto setAspect(f64 aspectX, f64 aspectY) -> void;
|
||||
auto setOverscan(bool overscan) -> void;
|
||||
|
||||
auto setSaturation(f64 saturation) -> void;
|
||||
auto setGamma(f64 gamma) -> void;
|
||||
@@ -44,6 +48,7 @@ struct Screen : Video {
|
||||
|
||||
auto setFillColor(u32 fillColor) -> void;
|
||||
auto setColorBleed(bool colorBleed) -> void;
|
||||
auto setColorBleedWidth(u32 width) -> void;
|
||||
auto setInterframeBlending(bool interframeBlending) -> void;
|
||||
auto setRotation(u32 rotation) -> void;
|
||||
|
||||
@@ -78,20 +83,24 @@ protected:
|
||||
f64 _luminance = 1.0;
|
||||
u32 _fillColor = 0;
|
||||
bool _colorBleed = false;
|
||||
u32 _colorBleedWidth = 1;
|
||||
bool _interframeBlending = false;
|
||||
bool _overscan = true;
|
||||
u32 _rotation = 0; //counter-clockwise (90 = left, 270 = right)
|
||||
|
||||
function<n64 (n32)> _color;
|
||||
unique_pointer<u32> _inputA;
|
||||
unique_pointer<u32> _inputB;
|
||||
unique_pointer<u32> _output;
|
||||
unique_pointer<u32> _rotate;
|
||||
unique_pointer<u32[]> _inputA;
|
||||
unique_pointer<u32[]> _inputB;
|
||||
unique_pointer<u32[]> _output;
|
||||
unique_pointer<u32[]> _rotate;
|
||||
unique_pointer<u32[]> _palette;
|
||||
vector<Node::Video::Sprite> _sprites;
|
||||
|
||||
//unserialized:
|
||||
nall::thread _thread;
|
||||
recursive_mutex _mutex;
|
||||
mutex _frameMutex;
|
||||
condition_variable _frameCondition;
|
||||
atomic<bool> _kill = false;
|
||||
atomic<bool> _frame = false;
|
||||
function<void ()> _refresh;
|
||||
|
||||
@@ -15,10 +15,13 @@ struct Platform {
|
||||
virtual auto detach(Node::Object) -> void {}
|
||||
virtual auto pak(Node::Object) -> shared_pointer<vfs::directory> { return {}; }
|
||||
virtual auto event(Event) -> void {}
|
||||
virtual auto log(string_view message) -> void {}
|
||||
virtual auto log(Node::Debugger::Tracer::Tracer, string_view message) -> void {}
|
||||
virtual auto status(string_view message) -> void {}
|
||||
virtual auto video(Node::Video::Screen, const u32* data, u32 pitch, u32 width, u32 height) -> void {}
|
||||
virtual auto refreshRateHint(double refreshRate) -> void {}
|
||||
virtual auto audio(Node::Audio::Stream) -> void {}
|
||||
virtual auto input(Node::Input::Input) -> void {}
|
||||
virtual auto cheat(u32 addr) -> maybe<u32> { return nothing; }
|
||||
};
|
||||
|
||||
extern Platform* platform;
|
||||
@@ -29,5 +32,5 @@ namespace ares::Core {
|
||||
// <ares/node/node.hpp> forward declarations
|
||||
auto PlatformAttach(Node::Object node) -> void { if(platform && node->name()) platform->attach(node); }
|
||||
auto PlatformDetach(Node::Object node) -> void { if(platform && node->name()) platform->detach(node); }
|
||||
auto PlatformLog(string_view text) -> void { if(platform) platform->log(text); }
|
||||
auto PlatformLog(Node::Debugger::Tracer::Tracer node, string_view text) -> void { if(platform) platform->log(node, text); }
|
||||
}
|
||||
@@ -1,6 +1,10 @@
|
||||
build := stable
|
||||
nall.path := ../../../nall
|
||||
include $(nall.path)/GNUmakefile
|
||||
|
||||
all:
|
||||
sourcery resource.bml resource.cpp resource.hpp
|
||||
|
||||
clean:
|
||||
rm resource.cpp
|
||||
rm resource.hpp
|
||||
$(call delete,resource.cpp)
|
||||
$(call delete,resource.hpp)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
@@ -1,7 +1,9 @@
|
||||
namespace name=Resource
|
||||
namespace name=Ares
|
||||
binary name=Icon file=icon.png
|
||||
binary name=Logo file=logo.png
|
||||
binary name=Icon1x file=icon.png
|
||||
binary name=Icon2x file=icon@2x.png
|
||||
binary name=Logo1x file=logo.png
|
||||
binary name=Logo2x [email protected]
|
||||
namespace name=Sprite
|
||||
namespace name=SuperFamicom
|
||||
binary name=CrosshairBlue file=sprite/sfc/crosshair-blue.png
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Resource {
|
||||
namespace Ares {
|
||||
const unsigned char Icon[6562] = {
|
||||
const unsigned char Icon1x[6562] = {
|
||||
137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,0,0,195,62,97,
|
||||
203,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32,99,72,82,77,0,0,122,38,0,0,128,
|
||||
132,0,0,250,0,0,0,128,232,0,0,117,48,0,0,234,96,0,0,58,152,0,0,23,112,156,186,81,60,0,0,0,
|
||||
@@ -210,7 +210,311 @@ const unsigned char Icon[6562] = {
|
||||
45,50,53,84,48,51,58,48,48,58,50,49,43,48,57,58,48,48,84,98,58,187,0,0,0,0,73,69,78,68,174,66,
|
||||
96,130,
|
||||
};
|
||||
const unsigned char Logo[11533] = {
|
||||
const unsigned char Icon2x[9662] = {
|
||||
137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,0,1,0,8,6,0,0,0,92,114,168,
|
||||
102,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,5,26,105,84,88,116,88,77,
|
||||
76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101,
|
||||
103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84,
|
||||
99,122,107,99,57,100,34,63,62,32,60,120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,
|
||||
111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80,
|
||||
32,67,111,114,101,32,53,46,54,45,99,49,52,53,32,55,57,46,49,54,51,52,57,57,44,32,50,48,49,56,47,48,
|
||||
56,47,49,51,45,49,54,58,52,48,58,50,50,32,32,32,32,32,32,32,32,34,62,32,60,114,100,102,58,82,68,70,
|
||||
32,120,109,108,110,115,58,114,100,102,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,
|
||||
57,57,47,48,50,47,50,50,45,114,100,102,45,115,121,110,116,97,120,45,110,115,35,34,62,32,60,114,100,102,58,68,
|
||||
101,115,99,114,105,112,116,105,111,110,32,114,100,102,58,97,98,111,117,116,61,34,34,32,120,109,108,110,115,58,120,109,
|
||||
112,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,34,
|
||||
32,120,109,108,110,115,58,100,99,61,34,104,116,116,112,58,47,47,112,117,114,108,46,111,114,103,47,100,99,47,101,108,
|
||||
101,109,101,110,116,115,47,49,46,49,47,34,32,120,109,108,110,115,58,112,104,111,116,111,115,104,111,112,61,34,104,116,
|
||||
116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,112,104,111,116,111,115,104,111,112,47,49,46,48,47,
|
||||
34,32,120,109,108,110,115,58,120,109,112,77,77,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,
|
||||
111,109,47,120,97,112,47,49,46,48,47,109,109,47,34,32,120,109,108,110,115,58,115,116,69,118,116,61,34,104,116,116,
|
||||
112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,115,84,121,112,101,47,82,
|
||||
101,115,111,117,114,99,101,69,118,101,110,116,35,34,32,120,109,112,58,67,114,101,97,116,111,114,84,111,111,108,61,34,
|
||||
65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48,49,57,32,40,77,97,99,105,110,116,111,
|
||||
115,104,41,34,32,120,109,112,58,67,114,101,97,116,101,68,97,116,101,61,34,50,48,50,49,45,48,56,45,50,55,84,
|
||||
50,48,58,49,49,58,52,52,43,48,51,58,48,48,34,32,120,109,112,58,77,111,100,105,102,121,68,97,116,101,61,34,
|
||||
50,48,50,49,45,48,57,45,48,51,84,50,49,58,53,53,43,48,51,58,48,48,34,32,120,109,112,58,77,101,116,97,
|
||||
100,97,116,97,68,97,116,101,61,34,50,48,50,49,45,48,57,45,48,51,84,50,49,58,53,53,43,48,51,58,48,48,
|
||||
34,32,100,99,58,102,111,114,109,97,116,61,34,105,109,97,103,101,47,112,110,103,34,32,112,104,111,116,111,115,104,111,
|
||||
112,58,67,111,108,111,114,77,111,100,101,61,34,51,34,32,112,104,111,116,111,115,104,111,112,58,73,67,67,80,114,111,
|
||||
102,105,108,101,61,34,115,82,71,66,32,73,69,67,54,49,57,54,54,45,50,46,49,34,32,120,109,112,77,77,58,73,
|
||||
110,115,116,97,110,99,101,73,68,61,34,120,109,112,46,105,105,100,58,57,57,49,53,52,98,56,52,45,100,100,54,48,
|
||||
45,52,100,101,54,45,97,54,57,101,45,54,55,49,49,100,54,48,49,57,98,57,55,34,32,120,109,112,77,77,58,68,
|
||||
111,99,117,109,101,110,116,73,68,61,34,120,109,112,46,100,105,100,58,57,57,49,53,52,98,56,52,45,100,100,54,48,
|
||||
45,52,100,101,54,45,97,54,57,101,45,54,55,49,49,100,54,48,49,57,98,57,55,34,32,120,109,112,77,77,58,79,
|
||||
114,105,103,105,110,97,108,68,111,99,117,109,101,110,116,73,68,61,34,120,109,112,46,100,105,100,58,57,57,49,53,52,
|
||||
98,56,52,45,100,100,54,48,45,52,100,101,54,45,97,54,57,101,45,54,55,49,49,100,54,48,49,57,98,57,55,34,
|
||||
62,32,60,120,109,112,77,77,58,72,105,115,116,111,114,121,62,32,60,114,100,102,58,83,101,113,62,32,60,114,100,102,
|
||||
58,108,105,32,115,116,69,118,116,58,97,99,116,105,111,110,61,34,99,114,101,97,116,101,100,34,32,115,116,69,118,116,
|
||||
58,105,110,115,116,97,110,99,101,73,68,61,34,120,109,112,46,105,105,100,58,57,57,49,53,52,98,56,52,45,100,100,
|
||||
54,48,45,52,100,101,54,45,97,54,57,101,45,54,55,49,49,100,54,48,49,57,98,57,55,34,32,115,116,69,118,116,
|
||||
58,119,104,101,110,61,34,50,48,50,49,45,48,56,45,50,55,84,50,48,58,49,49,58,52,52,43,48,51,58,48,48,
|
||||
34,32,115,116,69,118,116,58,115,111,102,116,119,97,114,101,65,103,101,110,116,61,34,65,100,111,98,101,32,80,104,111,
|
||||
116,111,115,104,111,112,32,67,67,32,50,48,49,57,32,40,77,97,99,105,110,116,111,115,104,41,34,47,62,32,60,47,
|
||||
114,100,102,58,83,101,113,62,32,60,47,120,109,112,77,77,58,72,105,115,116,111,114,121,62,32,60,47,114,100,102,58,
|
||||
68,101,115,99,114,105,112,116,105,111,110,62,32,60,47,114,100,102,58,82,68,70,62,32,60,47,120,58,120,109,112,109,
|
||||
101,116,97,62,32,60,63,120,112,97,99,107,101,116,32,101,110,100,61,34,114,34,63,62,126,10,193,94,0,0,32,74,
|
||||
73,68,65,84,120,218,237,157,7,120,85,69,250,198,79,122,51,64,2,9,65,136,161,44,144,64,64,8,1,130,139,64,
|
||||
32,148,16,52,20,19,66,2,1,87,141,96,89,89,117,109,8,130,178,128,168,43,118,212,85,97,117,45,232,95,220,181,
|
||||
128,53,161,153,32,189,151,132,14,2,162,20,197,10,100,254,243,221,51,147,76,46,9,105,183,156,115,238,251,62,207,251,
|
||||
60,130,64,206,61,231,251,126,119,206,204,55,223,104,140,49,13,134,97,207,52,110,2,12,3,0,48,12,3,0,48,12,
|
||||
3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,
|
||||
3,0,48,12,3,0,48,12,91,29,0,144,169,228,195,237,47,28,200,29,36,28,40,28,160,252,154,254,76,4,183,47,
|
||||
110,155,121,4,0,64,142,212,25,238,2,238,111,133,183,136,95,47,226,126,130,251,54,238,97,220,29,185,67,112,187,0,
|
||||
0,200,98,241,36,124,150,123,21,247,73,229,247,42,51,65,226,83,238,185,220,185,220,93,197,72,2,2,0,32,19,170,
|
||||
192,46,193,127,108,210,56,48,191,109,235,6,103,3,3,125,88,53,48,144,62,199,189,134,123,30,119,38,247,229,184,173,
|
||||
0,0,100,30,253,153,251,43,53,169,189,189,189,142,253,109,82,231,229,59,86,103,94,248,124,113,26,251,215,211,125,216,
|
||||
180,123,18,88,214,200,54,172,83,135,112,230,239,231,93,29,20,246,113,47,228,30,195,221,24,183,24,0,128,140,175,193,
|
||||
226,155,188,44,145,27,134,250,111,89,186,104,232,246,211,251,39,48,213,39,74,114,89,225,167,233,236,229,167,250,176,219,
|
||||
243,226,89,207,110,145,44,192,191,202,17,195,121,238,66,238,105,220,221,185,189,112,171,1,0,200,152,162,228,204,224,62,
|
||||
160,36,240,133,132,43,155,44,63,188,53,231,172,61,8,84,31,223,61,142,45,125,111,40,155,113,95,34,75,29,24,205,
|
||||
66,47,243,171,10,8,251,185,31,227,78,196,237,6,0,32,99,42,148,123,54,247,111,50,113,253,252,188,15,46,120,174,
|
||||
239,186,75,65,192,126,148,240,225,91,67,216,29,19,227,89,199,216,176,170,96,176,135,123,22,119,28,110,57,0,0,25,
|
||||
79,109,237,231,7,58,180,15,91,249,237,246,177,103,107,10,2,233,29,69,153,236,177,135,147,216,85,61,154,210,28,67,
|
||||
101,48,88,161,233,43,11,193,184,237,0,0,100,172,215,130,60,77,175,25,176,37,107,64,128,247,158,207,254,47,109,71,
|
||||
109,33,32,189,115,117,38,155,243,80,79,150,148,24,201,188,188,46,2,193,41,238,231,52,189,246,0,2,0,32,131,40,
|
||||
134,123,185,146,168,191,229,229,198,22,212,21,2,210,219,11,51,216,244,123,187,177,22,151,135,84,54,42,88,201,125,13,
|
||||
38,14,1,0,200,24,242,230,190,131,251,119,153,164,237,218,52,88,85,151,87,2,123,127,207,231,12,222,120,177,63,27,
|
||||
148,220,162,178,87,132,245,220,57,220,126,0,0,0,0,185,95,61,52,125,54,223,150,160,129,129,190,187,87,127,49,124,
|
||||
127,125,33,32,189,105,197,117,108,226,245,113,44,56,216,183,178,21,4,122,29,241,5,0,0,0,200,189,162,2,159,79,
|
||||
101,114,242,119,249,211,175,207,239,191,222,81,16,32,31,220,146,205,230,76,235,193,46,111,118,209,235,193,94,1,2,31,
|
||||
0,0,0,128,220,59,65,120,47,247,5,145,152,231,38,79,234,180,220,145,16,144,53,6,143,63,146,196,154,69,5,219,
|
||||
131,96,51,119,42,0,0,0,64,238,213,104,238,95,69,82,150,166,167,198,228,159,218,55,161,212,209,32,248,174,56,151,
|
||||
205,155,117,21,139,138,12,178,7,193,231,220,241,0,0,0,0,185,79,73,220,199,101,82,82,245,224,201,189,227,47,56,
|
||||
26,2,100,62,233,104,91,57,104,216,192,95,133,192,31,220,79,114,55,2,0,0,0,200,61,162,194,161,98,77,41,26,
|
||||
250,97,207,248,243,206,128,0,185,100,125,22,187,62,187,61,243,241,169,176,106,240,157,166,175,24,0,0,0,0,228,6,
|
||||
69,105,122,99,17,91,66,182,140,9,45,60,94,156,251,187,179,32,64,94,253,197,8,150,210,183,185,253,107,193,18,77,
|
||||
175,93,0,0,0,0,200,197,10,227,46,146,201,24,19,29,90,196,215,249,207,57,19,2,228,133,207,247,179,159,31,248,
|
||||
73,211,235,22,124,0,0,0,0,114,173,26,106,122,151,33,253,117,32,54,108,165,179,230,4,84,31,216,156,205,114,179,
|
||||
218,217,151,24,83,69,97,43,0,0,0,128,92,171,6,154,210,99,160,115,199,240,21,206,88,29,168,204,75,22,165,242,
|
||||
42,197,134,42,4,104,47,67,30,0,0,0,64,174,85,19,117,78,96,120,90,203,124,87,0,128,124,108,231,56,118,243,
|
||||
132,56,251,209,192,155,154,137,87,10,0,0,200,140,106,198,93,34,18,176,116,234,221,221,86,186,10,2,228,119,23,12,
|
||||
100,77,35,130,236,75,138,19,1,0,0,0,114,157,218,104,250,18,157,109,205,190,54,205,69,28,181,100,72,157,138,20,
|
||||
8,252,102,198,87,2,0,0,50,179,122,107,162,98,144,15,203,79,57,114,3,81,77,204,231,31,108,123,11,252,124,43,
|
||||
52,53,125,73,211,15,76,1,0,0,0,200,5,162,178,225,82,77,236,34,116,196,86,226,186,76,16,218,189,18,172,214,
|
||||
76,210,206,28,0,128,172,160,89,154,210,79,192,213,0,32,23,175,203,98,87,247,138,82,33,112,68,211,15,58,1,0,
|
||||
0,0,200,201,162,194,156,207,100,242,229,77,136,43,112,7,4,104,115,209,95,114,218,219,47,21,14,2,0,0,0,200,
|
||||
249,10,215,244,125,253,182,9,185,47,22,167,237,114,7,4,200,52,47,160,116,33,162,115,12,38,1,0,0,0,228,124,
|
||||
245,212,244,163,197,88,96,128,79,49,95,183,255,197,93,16,248,247,11,201,204,238,56,180,105,0,0,0,0,57,95,83,
|
||||
101,210,93,213,35,106,153,187,0,64,254,242,191,195,88,100,147,10,147,131,116,8,170,23,0,0,65,206,157,15,88,33,
|
||||
18,174,116,225,11,253,214,187,19,2,212,143,48,38,250,50,21,2,243,53,189,25,42,0,0,65,78,82,75,238,31,41,
|
||||
190,249,193,163,7,142,238,24,251,179,59,33,176,101,213,117,172,117,203,6,42,4,94,211,12,178,163,16,0,128,172,170,
|
||||
219,101,194,245,239,211,188,192,157,0,32,239,94,59,154,118,48,170,16,88,104,132,145,0,0,0,89,85,148,92,95,139,
|
||||
100,59,199,15,26,221,225,110,8,236,225,229,195,124,7,163,10,129,103,1,0,8,114,158,98,53,113,32,41,29,77,238,
|
||||
170,173,195,213,65,32,182,93,35,21,2,79,2,0,16,228,60,205,145,201,54,227,129,196,85,238,6,128,60,203,208,110,
|
||||
78,96,42,0,0,65,206,17,29,77,254,45,197,58,111,246,121,212,29,123,5,42,243,54,126,134,225,21,45,42,172,14,
|
||||
76,2,0,32,200,57,186,94,38,218,136,97,173,242,141,0,0,242,218,252,145,172,73,120,160,218,134,124,16,0,0,65,
|
||||
206,153,16,92,171,233,219,134,207,236,221,48,230,164,81,32,240,21,47,22,10,10,42,59,179,144,150,46,175,4,0,32,
|
||||
200,241,74,149,163,128,212,148,104,195,140,2,100,247,97,101,239,192,65,205,133,91,137,1,0,200,147,180,92,36,217,217,
|
||||
93,107,70,159,48,18,4,30,190,63,81,157,15,160,22,232,1,0,0,4,57,86,253,101,146,13,78,110,97,168,81,0,
|
||||
121,66,118,59,251,146,97,0,0,130,156,49,10,160,227,199,15,109,205,254,201,72,0,56,81,146,203,122,245,104,170,66,
|
||||
224,6,0,0,130,28,171,107,101,130,221,148,27,91,96,180,81,0,127,53,97,81,77,203,142,45,167,126,135,137,0,0,
|
||||
4,57,78,180,29,119,59,197,190,175,143,215,97,87,28,49,86,91,127,194,123,12,250,150,55,26,165,38,39,13,1,0,
|
||||
8,114,156,242,228,40,96,238,140,158,133,70,3,0,121,214,212,238,234,171,192,27,0,0,4,57,78,65,220,63,80,252,
|
||||
71,69,4,175,53,34,0,168,229,248,144,1,21,206,29,200,6,0,32,200,113,122,90,36,214,133,13,5,35,15,25,17,
|
||||
2,116,248,136,210,110,252,180,166,247,57,0,0,32,200,1,234,36,191,93,211,83,99,242,141,8,0,242,162,215,82,212,
|
||||
179,8,169,211,145,55,0,0,65,142,81,161,166,111,18,58,98,132,173,194,85,57,111,124,156,250,42,112,59,0,0,65,
|
||||
142,209,68,153,88,252,192,207,205,70,5,0,157,74,172,108,31,166,253,2,87,0,0,16,84,127,209,81,227,182,54,226,
|
||||
189,147,162,10,140,10,0,242,71,111,15,81,95,5,62,1,0,32,200,49,178,157,40,196,55,227,28,255,97,207,248,243,
|
||||
70,134,192,216,204,182,234,171,192,24,0,0,130,234,175,27,101,82,45,122,37,101,147,145,1,176,127,83,182,186,42,112,
|
||||
92,115,64,129,16,0,0,225,53,128,47,5,106,6,221,32,100,239,87,159,237,171,142,2,30,7,0,32,168,254,162,227,
|
||||
188,169,49,199,78,163,3,128,204,231,43,212,46,66,237,1,0,8,170,159,166,139,132,42,229,189,250,142,25,29,0,43,
|
||||
151,92,75,75,151,18,2,31,2,0,16,84,63,37,201,97,245,148,59,187,172,48,195,40,96,252,152,10,189,3,134,0,
|
||||
0,16,84,119,209,49,93,167,40,31,58,119,8,55,5,0,138,215,101,177,6,161,254,18,0,155,181,58,86,8,2,0,
|
||||
16,164,139,214,214,153,191,191,247,62,51,0,128,60,237,158,4,117,20,144,1,0,64,80,221,53,69,206,3,24,173,95,
|
||||
96,85,230,103,28,176,136,198,101,109,197,183,105,117,56,112,20,0,128,32,93,125,229,183,233,188,217,189,138,204,50,10,
|
||||
152,57,165,66,223,128,28,0,0,130,234,166,96,77,148,5,167,13,140,206,55,11,0,104,159,64,84,100,89,113,208,110,
|
||||
110,95,0,0,130,234,38,91,171,176,22,205,67,86,155,5,0,228,71,167,247,172,115,137,48,0,0,65,229,122,155,114,
|
||||
130,247,227,59,100,38,0,28,223,61,78,45,17,94,11,0,64,80,61,39,2,247,111,26,115,218,76,16,120,224,206,174,
|
||||
234,40,32,25,0,128,160,218,171,172,101,248,251,175,15,218,98,38,0,236,219,56,134,5,7,151,157,49,248,17,0,0,
|
||||
65,181,87,7,9,128,25,15,36,174,50,19,0,200,55,142,139,149,0,40,21,159,5,0,128,160,90,40,72,36,15,203,
|
||||
24,222,38,223,108,0,88,95,48,82,61,100,244,89,0,0,130,106,175,99,148,23,93,59,55,89,110,54,0,144,83,250,
|
||||
54,87,187,8,7,3,0,16,84,59,125,77,121,17,209,56,104,189,25,1,240,250,252,100,117,50,112,28,0,0,65,181,
|
||||
211,187,148,23,129,1,62,37,102,4,0,63,234,76,45,12,90,6,0,64,80,237,68,199,114,211,187,244,119,102,4,0,
|
||||
121,242,164,78,234,40,32,14,0,128,160,154,235,31,34,113,206,25,249,172,128,234,38,3,149,14,194,51,1,0,8,170,
|
||||
185,238,148,223,158,102,43,6,82,221,35,33,66,2,160,4,0,128,160,154,107,130,4,192,186,130,145,7,205,10,128,217,
|
||||
211,122,168,175,1,9,0,0,4,213,76,89,50,113,120,239,189,61,102,5,192,206,111,70,171,53,1,143,2,0,16,84,
|
||||
51,141,144,0,248,98,113,218,46,179,2,128,156,212,189,169,4,192,1,110,47,0,0,130,170,215,80,9,128,143,223,30,
|
||||
178,205,204,0,176,219,38,220,13,0,128,160,234,53,64,38,205,123,11,140,125,82,80,117,230,45,206,85,0,60,8,0,
|
||||
64,144,7,1,128,28,219,174,145,4,192,74,0,0,130,60,232,21,128,124,123,94,188,4,192,121,238,112,0,0,130,60,
|
||||
100,18,144,252,223,255,12,86,95,3,50,1,0,8,186,180,44,177,12,40,253,93,113,46,11,9,241,147,0,120,21,0,
|
||||
128,160,75,107,130,102,129,66,32,213,131,251,183,168,178,42,16,0,128,160,138,186,75,2,224,192,150,236,51,86,0,192,
|
||||
67,247,118,83,95,3,154,1,0,16,84,181,102,137,68,249,195,172,155,129,236,189,100,81,170,10,128,81,0,0,4,85,
|
||||
173,23,53,125,59,240,113,43,36,191,108,27,30,224,239,35,1,240,79,0,0,130,170,150,108,8,82,108,21,0,144,187,
|
||||
119,45,219,29,248,13,0,0,65,85,171,80,51,113,75,176,170,124,219,77,29,37,0,254,224,246,7,0,32,168,114,153,
|
||||
186,41,104,85,126,241,201,171,213,121,128,206,0,0,4,93,172,178,182,224,163,71,152,175,45,248,165,188,106,105,186,10,
|
||||
128,177,0,0,4,93,44,83,31,12,114,41,159,224,205,66,253,253,188,47,234,15,0,0,64,80,185,202,142,6,251,224,
|
||||
205,193,91,172,4,0,114,135,216,48,9,128,37,0,0,4,93,172,169,34,65,74,15,109,201,249,209,106,0,200,28,222,
|
||||
90,2,224,48,0,0,65,23,107,17,229,132,159,159,247,65,171,37,63,249,193,187,19,212,179,3,131,1,0,8,170,168,
|
||||
29,148,19,209,205,67,138,172,8,128,151,230,245,81,39,2,99,1,0,8,42,23,125,35,210,158,121,54,108,112,76,190,
|
||||
21,1,176,244,189,161,42,0,82,1,0,8,42,87,178,76,142,103,30,237,189,218,138,0,216,185,58,83,5,192,45,0,
|
||||
0,4,85,50,1,184,123,109,214,247,86,4,0,223,220,68,37,206,18,0,115,1,0,8,42,215,82,202,135,0,127,239,
|
||||
189,86,76,126,233,182,173,27,74,0,188,3,0,64,144,46,31,238,211,148,15,157,59,134,175,176,50,0,122,245,40,59,
|
||||
43,224,75,0,0,130,116,245,146,239,198,15,222,149,96,105,0,164,13,186,66,2,96,19,0,0,65,186,30,150,239,255,
|
||||
188,151,254,49,43,3,32,55,171,157,4,192,17,0,0,130,116,209,30,121,22,18,228,187,195,202,201,79,158,60,169,147,
|
||||
4,192,111,238,2,128,15,226,13,50,144,34,184,47,80,46,12,25,16,157,111,117,0,60,124,127,162,186,20,232,227,14,
|
||||
0,248,35,230,32,3,233,38,205,66,39,1,85,231,167,102,95,165,2,32,192,29,0,8,64,204,65,6,18,205,134,83,
|
||||
15,192,99,39,247,142,191,96,117,0,204,127,162,66,99,144,32,119,0,32,16,49,7,25,104,248,127,142,146,161,119,175,
|
||||
168,2,171,39,63,249,213,103,251,170,0,8,118,7,0,130,16,119,144,65,116,139,76,134,247,95,31,184,217,19,0,240,
|
||||
198,139,253,85,0,92,230,14,0,4,35,238,32,131,104,53,37,130,143,143,215,17,171,156,1,80,157,23,189,150,162,2,
|
||||
32,20,35,0,200,83,213,73,38,194,240,180,150,249,158,144,252,149,28,22,218,16,0,128,60,85,207,136,36,184,176,97,
|
||||
217,168,195,0,0,38,1,33,207,17,125,9,157,164,36,136,138,8,94,235,41,201,143,87,0,8,210,117,179,76,130,199,
|
||||
31,73,42,244,36,0,24,97,18,16,35,0,200,157,242,210,68,235,47,95,95,239,67,223,151,228,158,243,36,0,188,242,
|
||||
140,251,151,1,81,8,4,185,83,195,101,2,228,77,136,43,240,164,228,55,74,33,16,21,95,156,17,23,80,128,120,132,
|
||||
92,172,149,20,123,94,94,218,169,195,91,115,206,122,26,0,140,80,10,236,43,18,95,94,68,50,98,18,114,145,82,100,
|
||||
220,121,194,198,159,202,60,227,62,247,111,6,34,29,229,254,73,92,196,74,196,37,228,34,21,138,111,255,179,187,214,140,
|
||||
62,225,137,0,184,99,98,188,76,254,95,233,134,184,19,0,249,10,137,6,33,54,33,39,43,77,198,155,85,219,126,215,
|
||||
196,99,51,219,86,56,29,200,93,0,216,162,233,235,176,63,138,139,89,195,237,141,24,133,156,36,138,173,245,226,219,255,
|
||||
244,190,141,217,167,60,21,0,67,7,150,181,4,219,232,78,0,216,190,253,155,52,14,84,71,1,19,16,167,144,147,116,
|
||||
163,140,179,235,210,91,121,236,183,63,57,169,123,89,83,208,47,220,9,128,119,233,103,243,22,197,191,208,70,12,113,65,
|
||||
199,184,27,32,86,33,7,43,84,188,114,218,54,253,28,221,49,246,103,79,6,192,159,90,53,48,68,91,240,39,232,103,
|
||||
7,6,250,208,172,228,74,101,20,48,11,241,10,57,88,143,203,248,154,61,173,199,215,158,156,252,118,7,131,60,234,78,
|
||||
0,220,46,31,10,159,141,45,109,212,208,127,147,248,245,239,220,29,16,179,144,131,68,59,254,254,160,216,226,49,182,217,
|
||||
83,182,252,214,240,104,176,73,238,4,192,48,121,33,159,47,78,99,75,23,13,221,174,137,131,25,53,125,89,16,19,130,
|
||||
80,125,69,205,103,139,68,76,157,251,124,241,208,157,158,156,252,70,59,28,52,94,94,8,213,38,211,197,37,95,221,172,
|
||||
64,185,184,91,17,191,80,61,53,89,198,211,224,228,22,249,158,158,252,228,23,159,188,218,48,199,131,135,200,11,153,118,
|
||||
79,130,237,226,104,114,198,207,207,251,160,248,125,90,30,140,65,12,67,117,84,43,77,20,154,249,251,123,239,63,182,115,
|
||||
220,47,0,192,4,54,229,174,174,50,249,75,53,177,43,215,157,7,131,124,75,63,63,107,100,155,178,11,92,240,92,223,
|
||||
117,226,226,232,15,46,215,112,134,0,84,123,81,169,249,42,25,232,175,207,239,191,30,201,175,59,35,189,181,4,192,33,
|
||||
121,179,220,9,0,219,105,172,157,58,132,87,184,200,158,137,145,203,148,97,202,20,196,51,84,75,77,151,241,211,59,41,
|
||||
170,0,137,95,238,184,246,97,50,175,62,54,2,0,230,218,134,104,126,222,236,187,226,220,178,139,164,225,26,95,170,40,
|
||||
17,23,74,51,184,61,16,211,80,13,117,149,38,218,124,243,37,230,226,99,187,198,253,138,196,215,77,57,70,185,38,242,
|
||||
106,182,17,0,48,78,146,186,240,211,244,10,23,91,240,191,97,197,154,190,89,129,254,255,1,238,38,136,109,168,26,53,
|
||||
230,222,39,98,230,183,47,22,167,237,66,226,151,123,229,146,107,213,9,192,108,35,0,224,74,121,65,47,63,213,231,162,
|
||||
11,206,203,141,85,87,5,62,195,124,0,84,205,123,255,151,50,94,110,189,161,195,50,36,189,93,35,144,127,86,88,1,
|
||||
136,55,2,0,2,196,16,159,253,245,230,248,74,47,186,67,108,24,170,4,161,154,104,174,140,147,246,127,106,180,10,9,
|
||||
127,177,111,187,169,163,204,35,42,182,243,55,2,0,72,182,99,153,147,18,35,43,189,232,111,183,143,61,75,239,114,202,
|
||||
210,69,22,98,29,178,83,182,92,57,10,10,242,221,229,233,181,254,85,57,177,75,132,4,64,161,122,243,220,13,128,39,
|
||||
233,26,2,252,125,24,159,176,169,244,194,139,62,27,190,143,182,112,106,229,77,12,122,35,230,33,161,62,154,126,206,189,
|
||||
173,197,215,154,47,71,30,64,178,95,108,62,177,174,78,0,62,110,36,0,100,200,161,219,167,255,55,180,202,15,240,214,
|
||||
191,250,111,148,15,154,251,123,238,118,136,125,143,87,27,238,239,228,106,209,194,23,250,97,189,191,10,127,252,206,16,245,
|
||||
253,127,132,145,0,112,185,188,176,135,239,79,188,116,21,211,157,93,86,104,229,69,66,244,90,16,133,28,240,88,81,220,
|
||||
236,145,175,134,15,221,211,109,37,18,189,106,79,253,123,130,10,128,40,35,1,64,147,75,55,169,3,163,171,253,32,233,
|
||||
169,49,106,3,145,45,98,233,7,242,44,209,146,240,86,25,7,163,174,105,133,58,255,106,60,40,185,5,83,190,56,53,
|
||||
163,1,96,1,93,71,232,101,126,236,68,73,110,117,251,153,75,123,36,68,168,149,130,27,184,195,144,19,30,163,134,154,
|
||||
222,62,206,246,252,169,106,20,9,126,105,31,223,61,142,133,132,248,201,124,121,197,136,0,24,35,31,40,189,171,84,247,
|
||||
129,78,238,29,127,161,67,251,10,203,131,171,68,96,64,214,86,35,238,175,229,115,239,24,23,182,130,98,1,73,126,105,
|
||||
127,240,198,32,117,248,127,157,17,1,16,174,137,94,0,127,155,212,169,70,31,234,135,61,227,207,243,214,70,95,43,31,
|
||||
108,157,134,106,65,43,139,98,100,181,124,222,49,209,161,69,158,118,164,151,3,214,255,207,139,251,104,56,0,104,98,109,
|
||||
146,197,199,133,215,124,104,83,156,251,123,203,152,208,66,187,57,129,102,200,21,75,78,248,109,147,207,185,85,76,131,66,
|
||||
122,246,72,238,154,57,182,93,35,153,31,43,42,187,185,70,1,192,52,177,150,203,118,20,101,214,248,195,209,72,192,174,
|
||||
90,176,4,75,132,150,82,123,101,182,223,54,236,167,103,142,196,174,153,183,21,102,168,195,255,41,70,6,64,162,86,126,
|
||||
92,115,109,27,29,150,210,182,79,229,131,254,192,221,23,185,99,122,245,210,202,215,249,89,247,174,17,203,240,206,95,59,
|
||||
63,58,189,167,10,128,174,70,6,128,151,92,14,252,115,207,168,186,116,59,45,29,158,214,146,150,8,101,157,0,21,13,
|
||||
161,108,216,188,202,214,202,11,191,74,177,212,87,55,247,236,22,41,147,127,143,200,49,195,2,128,100,219,208,225,237,237,
|
||||
85,171,215,128,10,5,15,119,119,163,215,129,223,181,242,189,3,79,105,250,78,49,200,28,162,29,159,211,21,144,255,62,
|
||||
237,239,40,242,169,235,240,159,94,169,181,106,54,210,25,9,0,101,175,1,115,30,234,89,231,15,78,45,160,148,189,3,
|
||||
114,43,49,86,8,140,47,58,54,190,108,75,47,127,134,39,169,4,28,201,92,55,207,156,210,93,29,254,119,49,3,0,
|
||||
72,182,157,127,85,237,14,172,169,87,127,49,124,127,96,160,239,110,229,6,236,231,238,137,28,51,172,168,147,143,108,8,
|
||||
107,219,213,135,141,61,245,115,194,149,77,100,236,239,186,212,141,55,26,0,102,203,213,128,13,203,70,213,111,7,20,111,
|
||||
7,21,223,33,124,133,2,1,106,21,53,135,219,15,249,102,168,33,255,189,154,232,11,161,137,253,252,216,210,91,63,175,
|
||||
249,106,132,58,252,159,105,38,0,180,151,239,127,119,222,210,217,33,55,35,111,66,92,129,50,161,36,215,67,91,34,247,
|
||||
220,46,106,221,189,74,121,46,191,222,150,23,143,210,94,7,152,26,236,104,118,253,255,205,2,0,146,109,93,191,105,68,
|
||||
80,181,123,3,106,234,101,31,93,91,76,195,74,229,166,252,44,190,121,208,102,204,245,162,83,159,242,180,242,163,225,233,
|
||||
188,186,18,244,240,115,140,41,103,40,119,196,189,45,168,238,97,24,17,0,227,101,96,252,231,165,254,142,107,138,192,95,
|
||||
9,6,38,183,160,27,114,65,1,1,149,19,119,68,78,186,76,212,139,78,173,222,44,229,239,170,203,49,228,119,156,23,
|
||||
62,223,79,253,246,207,49,35,0,232,196,146,147,116,109,180,141,209,225,55,136,55,142,224,221,81,14,40,55,233,119,49,
|
||||
247,16,138,252,116,154,104,179,214,99,234,187,62,157,216,243,198,139,3,54,32,105,29,235,148,190,205,101,92,159,226,14,
|
||||
54,35,0,72,207,105,250,121,238,245,158,12,172,162,69,210,47,162,112,232,15,5,4,39,184,239,192,107,129,195,135,251,
|
||||
185,220,199,212,201,88,170,220,164,126,143,72,88,199,122,93,254,72,91,29,141,184,207,79,215,228,1,25,21,0,29,229,
|
||||
100,224,77,185,177,206,60,45,117,7,29,27,173,4,39,121,45,247,16,228,110,189,53,148,123,189,122,111,195,26,249,111,
|
||||
194,41,189,206,243,13,99,99,213,179,255,98,205,12,0,210,39,98,77,152,237,89,159,229,212,27,247,236,220,222,171,125,
|
||||
125,189,15,217,129,128,222,85,175,65,30,215,90,189,197,228,83,217,189,228,35,185,163,84,165,73,37,219,72,84,231,120,
|
||||
239,134,49,44,56,216,87,222,243,255,214,244,97,25,25,0,3,100,0,61,120,119,130,211,111,32,77,68,141,24,214,42,
|
||||
159,175,159,158,177,3,1,29,82,122,173,24,206,66,85,15,245,211,229,10,142,86,94,205,119,250,186,244,86,249,56,157,
|
||||
215,249,190,111,114,23,53,102,251,88,1,0,36,106,244,193,34,26,7,86,217,54,220,9,36,61,153,154,18,77,32,56,
|
||||
107,7,130,157,98,249,42,8,249,94,97,194,246,102,77,175,54,83,19,255,167,97,131,99,242,247,109,204,62,133,228,116,
|
||||
65,219,111,158,27,145,77,202,150,254,214,212,230,1,26,29,0,57,50,168,158,152,153,228,210,155,186,123,109,214,247,131,
|
||||
147,91,228,219,237,43,96,98,133,130,54,25,117,242,224,196,239,44,38,153,78,218,37,254,41,130,103,241,218,209,63,32,
|
||||
49,93,231,57,211,122,168,241,153,97,37,0,80,217,174,237,164,224,102,81,193,46,27,5,168,62,180,53,251,39,62,17,
|
||||
89,224,235,227,117,216,14,4,114,158,96,162,166,111,100,177,186,34,185,111,209,148,214,92,210,52,127,66,103,57,30,222,
|
||||
154,131,153,125,23,155,191,186,170,133,63,59,107,187,138,101,116,0,104,98,25,73,223,37,200,73,231,174,27,77,61,232,
|
||||
230,206,232,89,24,21,17,188,214,174,152,72,246,91,163,93,135,55,106,214,218,121,72,96,187,137,251,115,241,25,213,207,
|
||||
124,33,170,105,240,26,222,192,165,16,253,249,220,103,58,79,67,121,38,181,238,129,97,6,0,16,209,182,211,181,54,9,
|
||||
15,100,71,182,229,184,253,166,243,218,132,195,116,70,1,159,221,62,82,201,168,224,130,248,150,156,206,157,100,178,186,2,
|
||||
186,86,234,196,51,67,211,207,109,180,7,29,205,232,31,161,26,138,141,43,174,59,130,4,116,175,41,23,104,126,76,60,
|
||||
155,173,117,153,168,54,3,0,52,65,54,219,7,157,126,111,55,67,61,132,165,139,134,110,167,194,22,94,128,113,172,18,
|
||||
24,144,127,20,223,160,211,197,178,162,145,90,152,7,139,101,59,218,23,241,161,166,183,83,187,232,51,120,121,121,253,64,
|
||||
37,187,239,45,72,217,132,165,60,227,120,202,93,93,213,231,52,170,46,1,96,22,0,16,217,54,106,226,0,145,93,107,
|
||||
70,27,238,97,80,191,186,119,94,29,176,145,38,14,121,237,194,78,173,188,171,13,171,228,117,97,7,247,59,154,222,168,
|
||||
145,150,24,59,56,121,117,33,72,252,140,116,241,51,23,137,107,56,95,197,53,150,134,4,249,238,24,50,32,58,159,146,
|
||||
30,189,248,140,231,221,107,71,219,114,65,60,175,205,117,93,166,54,11,0,72,41,50,64,175,207,110,111,248,7,180,189,
|
||||
40,243,24,157,103,72,61,9,120,221,251,190,42,18,205,222,71,53,125,131,210,123,220,47,104,250,94,238,191,137,121,144,
|
||||
12,225,65,226,94,164,136,255,150,191,63,94,252,217,153,226,239,190,39,38,41,143,214,228,103,7,248,123,239,237,204,175,
|
||||
245,193,187,18,86,236,92,157,121,28,73,102,108,231,100,180,85,159,223,160,186,38,149,153,0,80,86,29,72,245,206,5,
|
||||
31,94,99,170,7,198,71,45,39,230,205,238,85,68,203,100,45,154,135,84,86,121,232,50,251,249,121,31,164,107,160,107,
|
||||
121,102,206,159,139,104,201,19,73,101,30,47,255,248,90,181,230,127,113,125,18,202,108,0,136,149,27,120,248,123,183,233,
|
||||
31,228,129,45,217,103,62,120,115,240,150,25,247,39,174,204,24,222,38,255,202,78,225,203,35,26,7,173,167,253,241,252,
|
||||
1,83,75,236,115,117,72,240,115,244,119,249,191,81,76,255,86,215,206,77,150,211,191,61,227,129,196,85,244,179,14,109,
|
||||
201,249,17,73,100,94,243,57,24,214,171,71,83,117,39,107,91,79,2,0,105,158,12,246,5,207,245,179,252,3,223,191,
|
||||
105,204,105,222,226,233,224,215,159,166,239,165,9,71,50,205,53,144,229,175,233,255,209,159,33,160,32,73,172,237,151,230,
|
||||
245,81,97,63,183,190,201,100,70,0,208,105,192,182,3,35,162,34,131,120,130,100,35,48,96,143,217,240,163,44,251,209,
|
||||
220,78,3,79,4,0,105,156,164,96,110,86,59,4,7,236,17,206,26,213,70,253,246,207,116,68,34,153,21,0,164,255,
|
||||
137,250,115,219,17,200,8,16,216,202,254,240,173,33,106,167,223,143,29,149,68,102,6,64,75,238,159,232,51,180,105,217,
|
||||
128,186,252,32,80,96,203,214,251,183,188,34,84,38,63,109,87,143,6,0,116,77,150,67,162,137,215,199,33,88,96,171,
|
||||
119,250,33,223,234,200,4,50,59,0,124,100,19,10,26,30,189,187,96,32,2,6,182,148,223,254,215,0,117,232,95,224,
|
||||
232,198,52,102,7,0,169,149,24,22,217,102,72,141,88,38,12,195,117,113,241,186,44,181,209,7,117,249,141,113,116,242,
|
||||
88,1,0,21,86,5,168,45,50,21,75,32,128,96,179,23,252,12,238,223,66,29,250,143,113,70,226,88,5,0,164,55,
|
||||
141,208,55,0,134,157,176,207,127,161,179,146,198,74,0,104,164,233,167,0,51,63,95,111,182,100,81,42,2,9,54,237,
|
||||
146,31,223,43,34,147,191,196,17,5,63,158,0,0,82,23,238,95,232,115,209,187,211,142,162,76,4,20,108,42,111,43,
|
||||
204,80,171,253,126,229,238,230,204,132,177,26,0,42,204,7,116,239,26,193,190,43,206,69,96,193,166,48,29,236,153,148,
|
||||
24,169,14,253,39,56,59,89,172,8,0,210,75,242,38,254,37,167,61,130,11,54,133,199,141,174,176,199,255,89,87,36,
|
||||
138,85,1,224,167,41,135,84,204,156,210,29,1,6,27,218,211,238,73,176,239,54,237,15,0,212,79,205,184,15,200,6,
|
||||
34,255,126,33,25,129,6,27,210,180,173,93,105,240,65,237,231,155,187,42,73,172,12,0,82,71,81,64,193,120,131,12,
|
||||
246,217,251,105,8,56,216,88,77,101,223,77,181,197,166,82,231,223,217,149,9,98,117,0,104,162,95,218,31,178,82,144,
|
||||
142,80,70,224,193,70,240,55,95,142,96,141,195,3,213,238,62,253,93,157,28,158,0,0,210,13,242,253,234,242,102,33,
|
||||
108,211,138,235,16,128,176,91,189,245,235,12,22,221,252,50,245,56,239,9,238,72,12,79,1,0,105,154,132,64,107,190,
|
||||
125,120,231,55,216,51,0,187,199,84,159,162,108,239,37,223,239,174,164,240,36,0,144,102,203,155,222,182,117,67,91,111,
|
||||
117,4,36,236,74,151,172,207,98,177,109,27,169,201,255,15,119,38,132,167,1,192,75,172,175,218,110,126,231,142,225,108,
|
||||
15,127,32,8,76,216,85,187,251,226,227,194,213,228,127,218,221,9,225,105,0,144,16,120,89,62,132,118,109,26,162,100,
|
||||
24,118,186,105,155,122,92,251,48,251,13,62,222,0,128,123,68,141,68,94,83,231,4,182,172,194,196,32,236,28,211,164,
|
||||
115,76,244,101,106,242,191,170,25,228,208,88,79,5,128,28,9,60,41,31,74,115,190,58,176,22,75,132,176,131,205,207,
|
||||
107,176,173,60,41,201,255,188,17,190,249,1,128,114,205,144,15,39,60,44,0,219,136,97,135,249,243,197,105,182,35,237,
|
||||
149,228,159,99,180,224,7,0,116,77,149,15,41,48,208,135,45,124,190,31,2,24,174,151,95,125,182,175,90,225,87,234,
|
||||
206,165,62,0,160,102,186,94,86,12,82,19,198,251,38,119,65,32,195,117,50,117,164,82,106,251,233,124,199,60,163,6,
|
||||
61,0,112,113,217,240,25,57,26,152,144,221,14,253,4,224,26,251,248,238,113,246,91,122,105,31,202,0,35,7,60,0,
|
||||
112,177,226,53,209,90,140,220,165,83,99,172,16,192,53,170,238,163,6,52,74,242,211,174,190,43,141,30,236,0,64,229,
|
||||
186,156,187,72,62,76,106,47,246,9,38,7,225,75,244,240,179,155,236,91,197,29,101,134,64,7,0,170,86,0,247,124,
|
||||
249,80,169,73,227,172,169,221,209,114,28,174,208,186,155,186,247,42,13,60,101,39,31,127,179,4,57,0,80,189,198,114,
|
||||
255,44,31,112,242,213,151,179,157,171,81,57,136,178,222,44,251,190,253,212,192,243,47,102,11,110,0,160,102,162,206,172,
|
||||
251,212,87,130,69,175,165,32,17,60,212,111,189,60,192,126,200,79,173,187,187,152,49,176,1,128,154,171,33,247,27,242,
|
||||
161,211,82,97,222,248,56,156,74,236,65,166,83,122,169,201,172,146,248,178,166,191,129,89,131,26,0,168,189,50,184,79,
|
||||
202,0,160,125,221,139,95,31,132,4,177,184,63,126,103,8,251,83,171,6,106,226,159,17,175,135,166,22,0,80,55,181,
|
||||
228,94,161,142,6,198,102,182,101,251,55,101,35,89,44,230,189,27,198,176,172,81,109,236,191,245,151,113,95,97,133,64,
|
||||
6,0,234,46,218,208,241,87,238,159,212,185,129,87,158,233,139,196,177,200,12,255,203,79,245,81,79,233,33,255,200,125,
|
||||
155,102,160,205,60,0,128,49,106,6,222,87,191,33,18,187,68,216,54,130,32,145,204,233,101,31,93,195,122,245,104,106,
|
||||
255,173,255,145,85,190,245,1,0,231,40,155,251,184,12,24,170,5,31,63,166,157,109,185,8,73,101,158,166,29,244,42,
|
||||
167,212,241,147,143,114,103,90,53,104,1,0,199,170,17,247,19,154,216,84,68,110,16,234,111,59,245,229,200,182,28,36,
|
||||
153,65,125,152,63,155,41,119,117,101,151,133,248,169,137,255,27,247,163,102,158,225,7,0,220,167,182,220,139,212,33,36,
|
||||
245,127,159,126,111,55,219,82,18,146,206,56,203,122,180,115,175,105,68,144,253,112,255,115,238,56,79,8,84,0,192,185,
|
||||
26,204,189,81,13,174,168,200,32,54,119,70,79,118,108,23,234,7,220,101,170,221,168,34,241,215,115,167,120,82,128,2,
|
||||
0,206,23,181,30,187,134,123,131,26,108,84,73,70,61,7,208,149,216,117,166,123,77,163,176,168,166,193,246,137,191,141,
|
||||
59,215,74,179,251,0,128,49,151,13,169,136,104,151,26,124,1,254,62,44,107,100,27,219,49,81,72,82,231,120,227,242,
|
||||
81,108,226,245,113,44,40,200,215,62,241,247,106,122,179,14,31,79,13,74,0,192,245,242,229,206,226,94,171,6,35,205,
|
||||
60,15,236,215,156,189,62,63,153,157,40,65,19,146,250,154,238,33,157,8,157,210,183,185,253,172,62,249,27,49,179,239,
|
||||
227,233,193,8,0,184,87,189,185,63,212,244,158,113,101,1,74,5,69,244,141,85,248,105,58,146,185,150,166,195,95,39,
|
||||
79,234,100,187,135,118,73,95,42,38,247,174,65,216,1,0,70,83,7,77,223,71,126,74,13,90,42,49,166,46,51,179,
|
||||
249,132,213,246,194,12,36,120,21,222,198,239,205,63,30,236,110,43,192,162,123,102,151,248,180,111,227,105,79,153,213,7,
|
||||
0,204,173,32,49,25,181,220,46,136,109,195,216,164,238,77,109,43,8,128,129,126,186,238,156,135,122,178,164,196,200,202,
|
||||
146,158,190,237,11,184,115,184,3,17,86,0,128,25,21,171,233,7,71,22,219,195,128,220,33,54,140,253,245,230,120,246,
|
||||
191,55,7,123,68,227,82,106,184,249,193,27,131,216,109,55,117,180,63,92,83,53,77,176,62,162,233,117,24,16,0,96,
|
||||
25,37,104,122,85,218,222,202,2,63,132,87,176,13,25,16,205,30,226,75,92,116,176,137,21,106,12,104,173,158,250,48,
|
||||
78,253,123,2,27,148,220,130,5,7,251,86,149,244,116,79,232,212,231,174,8,19,0,192,19,68,221,137,166,112,175,228,
|
||||
62,95,89,82,248,251,121,179,158,221,34,109,223,150,47,205,235,195,86,45,77,55,244,202,2,141,96,86,46,185,150,189,
|
||||
248,228,213,236,214,27,59,218,230,61,252,42,246,217,83,125,78,124,246,41,2,140,16,0,224,177,10,211,244,229,44,58,
|
||||
108,178,164,138,132,177,153,18,170,35,127,109,200,28,222,218,86,247,78,96,88,250,222,80,151,245,55,164,237,181,244,179,
|
||||
232,103,82,162,211,53,100,164,183,182,189,202,92,34,217,165,233,53,232,21,77,175,163,8,195,99,7,0,160,202,69,173,
|
||||
168,71,113,255,83,211,219,154,255,81,77,98,233,199,161,241,35,172,232,152,116,218,2,155,54,232,10,219,225,22,180,148,
|
||||
246,200,3,137,108,222,172,171,216,252,39,174,102,11,158,235,103,51,117,63,162,119,113,50,253,183,252,125,250,51,244,103,
|
||||
233,239,220,49,49,222,246,111,208,191,69,19,151,109,91,55,180,21,60,213,228,90,196,53,23,137,207,48,82,51,73,123,
|
||||
109,0,0,0,48,162,252,184,59,139,217,112,154,67,88,194,125,168,134,137,232,10,31,228,254,68,211,15,205,204,17,215,
|
||||
234,135,199,6,0,64,206,21,45,55,210,186,248,80,238,91,184,31,227,126,155,251,43,238,205,220,71,52,125,59,108,93,
|
||||
19,251,55,241,111,108,18,255,230,91,220,115,197,207,74,21,63,27,203,115,0,0,100,112,249,136,68,37,96,4,115,135,
|
||||
10,55,18,150,191,14,22,127,38,80,67,121,45,0,0,195,176,181,141,155,0,195,0,0,12,195,0,0,12,195,0,0,
|
||||
12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,
|
||||
12,195,0,0,12,195,38,241,255,3,73,49,223,76,174,54,46,60,0,0,0,0,73,69,78,68,174,66,96,130,
|
||||
};
|
||||
const unsigned char Logo1x[11533] = {
|
||||
137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,94,0,0,0,85,8,6,0,0,0,1,155,140,
|
||||
109,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32,99,72,82,77,0,0,122,38,0,0,128,
|
||||
132,0,0,250,0,0,0,128,232,0,0,117,48,0,0,234,96,0,0,58,152,0,0,23,112,156,186,81,60,0,0,0,
|
||||
@@ -573,6 +877,602 @@ const unsigned char Logo[11533] = {
|
||||
105,102,121,0,50,48,50,48,45,48,56,45,49,48,84,48,57,58,50,49,58,49,53,43,48,57,58,48,48,32,103,176,
|
||||
44,0,0,0,0,73,69,78,68,174,66,96,130,
|
||||
};
|
||||
const unsigned char Logo2x[18991] = {
|
||||
137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,188,0,0,0,170,8,6,0,0,0,79,170,156,
|
||||
236,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,6,132,105,84,88,116,88,77,
|
||||
76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101,
|
||||
103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84,
|
||||
99,122,107,99,57,100,34,63,62,32,60,120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,
|
||||
111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80,
|
||||
32,67,111,114,101,32,53,46,54,45,99,49,52,53,32,55,57,46,49,54,51,52,57,57,44,32,50,48,49,56,47,48,
|
||||
56,47,49,51,45,49,54,58,52,48,58,50,50,32,32,32,32,32,32,32,32,34,62,32,60,114,100,102,58,82,68,70,
|
||||
32,120,109,108,110,115,58,114,100,102,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,
|
||||
57,57,47,48,50,47,50,50,45,114,100,102,45,115,121,110,116,97,120,45,110,115,35,34,62,32,60,114,100,102,58,68,
|
||||
101,115,99,114,105,112,116,105,111,110,32,114,100,102,58,97,98,111,117,116,61,34,34,32,120,109,108,110,115,58,120,109,
|
||||
112,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,34,
|
||||
32,120,109,108,110,115,58,100,99,61,34,104,116,116,112,58,47,47,112,117,114,108,46,111,114,103,47,100,99,47,101,108,
|
||||
101,109,101,110,116,115,47,49,46,49,47,34,32,120,109,108,110,115,58,112,104,111,116,111,115,104,111,112,61,34,104,116,
|
||||
116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,112,104,111,116,111,115,104,111,112,47,49,46,48,47,
|
||||
34,32,120,109,108,110,115,58,120,109,112,77,77,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,
|
||||
111,109,47,120,97,112,47,49,46,48,47,109,109,47,34,32,120,109,108,110,115,58,115,116,69,118,116,61,34,104,116,116,
|
||||
112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,115,84,121,112,101,47,82,
|
||||
101,115,111,117,114,99,101,69,118,101,110,116,35,34,32,120,109,112,58,67,114,101,97,116,111,114,84,111,111,108,61,34,
|
||||
65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48,49,57,32,40,77,97,99,105,110,116,111,
|
||||
115,104,41,34,32,120,109,112,58,67,114,101,97,116,101,68,97,116,101,61,34,50,48,50,49,45,48,56,45,50,55,84,
|
||||
50,48,58,49,49,58,52,52,43,48,51,58,48,48,34,32,120,109,112,58,77,111,100,105,102,121,68,97,116,101,61,34,
|
||||
50,48,50,49,45,48,57,45,48,51,84,50,50,58,49,51,58,53,52,43,48,51,58,48,48,34,32,120,109,112,58,77,
|
||||
101,116,97,100,97,116,97,68,97,116,101,61,34,50,48,50,49,45,48,57,45,48,51,84,50,50,58,49,51,58,53,52,
|
||||
43,48,51,58,48,48,34,32,100,99,58,102,111,114,109,97,116,61,34,105,109,97,103,101,47,112,110,103,34,32,112,104,
|
||||
111,116,111,115,104,111,112,58,67,111,108,111,114,77,111,100,101,61,34,51,34,32,112,104,111,116,111,115,104,111,112,58,
|
||||
73,67,67,80,114,111,102,105,108,101,61,34,115,82,71,66,32,73,69,67,54,49,57,54,54,45,50,46,49,34,32,120,
|
||||
109,112,77,77,58,73,110,115,116,97,110,99,101,73,68,61,34,120,109,112,46,105,105,100,58,97,98,54,101,100,57,50,
|
||||
102,45,50,49,53,102,45,52,55,56,53,45,97,98,100,101,45,57,52,97,55,54,99,53,53,56,97,53,48,34,32,120,
|
||||
109,112,77,77,58,68,111,99,117,109,101,110,116,73,68,61,34,97,100,111,98,101,58,100,111,99,105,100,58,112,104,111,
|
||||
116,111,115,104,111,112,58,98,99,101,99,53,54,54,98,45,52,101,97,57,45,101,49,52,57,45,98,50,97,101,45,48,
|
||||
100,56,52,51,101,102,48,50,55,57,56,34,32,120,109,112,77,77,58,79,114,105,103,105,110,97,108,68,111,99,117,109,
|
||||
101,110,116,73,68,61,34,120,109,112,46,100,105,100,58,102,50,99,97,50,51,102,99,45,53,49,57,99,45,52,56,55,
|
||||
54,45,97,57,101,101,45,100,50,51,100,52,99,50,51,50,99,51,51,34,62,32,60,112,104,111,116,111,115,104,111,112,
|
||||
58,84,101,120,116,76,97,121,101,114,115,62,32,60,114,100,102,58,66,97,103,62,32,60,114,100,102,58,108,105,32,112,
|
||||
104,111,116,111,115,104,111,112,58,76,97,121,101,114,78,97,109,101,61,34,97,114,101,115,34,32,112,104,111,116,111,115,
|
||||
104,111,112,58,76,97,121,101,114,84,101,120,116,61,34,97,114,101,115,34,47,62,32,60,47,114,100,102,58,66,97,103,
|
||||
62,32,60,47,112,104,111,116,111,115,104,111,112,58,84,101,120,116,76,97,121,101,114,115,62,32,60,120,109,112,77,77,
|
||||
58,72,105,115,116,111,114,121,62,32,60,114,100,102,58,83,101,113,62,32,60,114,100,102,58,108,105,32,115,116,69,118,
|
||||
116,58,97,99,116,105,111,110,61,34,99,114,101,97,116,101,100,34,32,115,116,69,118,116,58,105,110,115,116,97,110,99,
|
||||
101,73,68,61,34,120,109,112,46,105,105,100,58,102,50,99,97,50,51,102,99,45,53,49,57,99,45,52,56,55,54,45,
|
||||
97,57,101,101,45,100,50,51,100,52,99,50,51,50,99,51,51,34,32,115,116,69,118,116,58,119,104,101,110,61,34,50,
|
||||
48,50,49,45,48,56,45,50,55,84,50,48,58,49,49,58,52,52,43,48,51,58,48,48,34,32,115,116,69,118,116,58,
|
||||
115,111,102,116,119,97,114,101,65,103,101,110,116,61,34,65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,
|
||||
67,32,50,48,49,57,32,40,77,97,99,105,110,116,111,115,104,41,34,47,62,32,60,114,100,102,58,108,105,32,115,116,
|
||||
69,118,116,58,97,99,116,105,111,110,61,34,115,97,118,101,100,34,32,115,116,69,118,116,58,105,110,115,116,97,110,99,
|
||||
101,73,68,61,34,120,109,112,46,105,105,100,58,97,98,54,101,100,57,50,102,45,50,49,53,102,45,52,55,56,53,45,
|
||||
97,98,100,101,45,57,52,97,55,54,99,53,53,56,97,53,48,34,32,115,116,69,118,116,58,119,104,101,110,61,34,50,
|
||||
48,50,49,45,48,57,45,48,51,84,50,50,58,49,51,58,53,52,43,48,51,58,48,48,34,32,115,116,69,118,116,58,
|
||||
115,111,102,116,119,97,114,101,65,103,101,110,116,61,34,65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,
|
||||
67,32,50,48,49,57,32,40,77,97,99,105,110,116,111,115,104,41,34,32,115,116,69,118,116,58,99,104,97,110,103,101,
|
||||
100,61,34,47,34,47,62,32,60,47,114,100,102,58,83,101,113,62,32,60,47,120,109,112,77,77,58,72,105,115,116,111,
|
||||
114,121,62,32,60,47,114,100,102,58,68,101,115,99,114,105,112,116,105,111,110,62,32,60,47,114,100,102,58,82,68,70,
|
||||
62,32,60,47,120,58,120,109,112,109,101,116,97,62,32,60,63,120,112,97,99,107,101,116,32,101,110,100,61,34,114,34,
|
||||
63,62,255,127,105,182,0,0,67,81,73,68,65,84,120,218,237,157,7,120,85,197,182,199,79,26,36,129,4,72,232,189,
|
||||
133,222,33,244,222,123,9,45,33,141,174,128,34,2,42,130,52,169,10,34,138,229,42,118,164,40,98,3,20,203,179,87,
|
||||
64,20,148,98,232,82,165,43,234,149,139,48,111,173,157,217,97,115,76,224,156,228,156,147,153,125,254,235,251,126,223,125,
|
||||
79,66,216,123,102,205,204,127,207,172,89,203,33,132,112,0,0,0,0,0,0,96,87,208,8,0,0,0,0,0,0,130,
|
||||
23,0,0,0,0,0,0,8,94,0,0,0,0,0,0,32,120,1,0,0,0,0,0,128,224,5,0,0,0,0,0,0,
|
||||
130,23,0,0,0,0,0,0,8,94,0,0,0,0,0,0,193,139,70,0,0,0,0,0,0,126,47,120,97,55,180,64,
|
||||
34,15,145,151,8,35,66,37,97,242,191,69,17,65,104,166,172,13,3,17,0,0,0,0,16,188,122,219,255,17,105,196,
|
||||
65,249,191,95,19,175,18,11,137,209,68,15,34,150,40,79,228,131,224,5,0,0,0,0,128,224,213,205,158,35,174,18,
|
||||
127,133,4,7,30,47,93,34,223,217,144,144,64,110,84,147,203,196,5,226,40,177,155,88,39,133,112,25,8,94,0,0,
|
||||
0,0,0,8,94,93,172,29,177,145,184,24,16,16,112,113,120,82,181,3,235,87,119,253,253,173,149,157,197,67,115,155,
|
||||
137,17,73,85,69,251,214,37,69,237,26,81,162,112,116,168,8,12,8,48,197,48,239,8,63,78,244,39,106,218,117,7,
|
||||
24,3,17,0,0,0,0,16,188,246,48,142,233,109,78,124,31,16,224,184,82,178,120,248,95,179,167,52,76,59,119,32,
|
||||
245,202,133,67,67,197,169,180,20,113,240,135,4,177,227,139,1,98,195,154,174,226,206,177,117,68,141,234,133,68,96,96,
|
||||
128,185,11,124,138,255,46,49,141,40,5,193,11,0,0,0,0,0,193,171,170,241,69,182,201,196,1,218,237,189,20,31,
|
||||
87,233,208,103,27,123,95,56,127,112,232,85,22,190,86,206,31,76,21,91,63,142,19,15,206,110,34,122,117,45,39,42,
|
||||
87,140,20,65,65,134,0,254,75,238,24,167,16,149,228,197,57,8,94,0,0,0,0,0,8,94,165,50,59,148,36,94,
|
||||
34,254,137,42,148,247,252,154,103,58,28,112,22,188,86,206,238,79,21,123,191,139,23,239,175,235,46,18,250,87,18,121,
|
||||
210,227,128,121,231,247,4,177,86,134,60,64,240,2,0,0,0,0,64,240,42,183,219,123,59,177,159,197,235,232,212,106,
|
||||
251,127,249,49,241,210,141,132,175,201,225,29,9,98,209,236,166,162,101,211,226,34,50,34,143,25,243,251,46,209,83,166,
|
||||
66,131,224,5,0,0,0,0,128,224,85,198,98,136,173,20,175,251,15,133,45,252,146,182,117,240,57,87,68,47,115,124,
|
||||
87,146,248,230,253,190,34,53,33,70,200,236,15,127,19,59,137,100,93,66,29,48,16,1,0,0,0,0,193,235,31,22,
|
||||
46,51,50,252,55,166,98,129,179,27,215,116,59,225,170,232,53,217,246,73,127,49,102,120,13,81,190,108,132,185,227,203,
|
||||
57,127,251,17,145,16,188,0,0,0,0,128,224,133,224,85,193,66,228,69,180,203,17,249,67,254,251,228,226,150,123,221,
|
||||
21,189,116,249,77,252,188,117,176,152,125,111,35,145,47,60,152,59,239,146,20,190,53,32,120,1,0,0,0,0,193,11,
|
||||
193,171,138,245,33,142,231,203,23,252,219,99,15,182,56,158,89,6,7,87,248,238,163,126,34,121,112,140,40,28,21,202,
|
||||
157,248,15,177,132,168,8,193,11,0,0,0,0,8,94,8,94,21,178,56,240,142,236,9,170,206,118,105,218,164,6,7,
|
||||
178,43,122,41,207,175,248,246,131,126,162,77,139,18,220,145,92,241,237,52,145,10,193,11,0,0,0,0,8,94,8,94,
|
||||
21,44,150,216,155,55,111,208,197,165,243,155,31,203,142,224,181,66,187,197,130,226,131,205,116,102,171,137,218,16,188,0,
|
||||
0,0,0,128,224,133,224,205,77,11,32,202,18,191,4,211,78,239,188,251,98,15,228,68,240,114,124,239,161,237,67,196,
|
||||
168,148,106,230,165,182,95,137,33,16,188,0,0,0,0,128,224,133,229,182,113,73,226,99,209,81,121,47,172,95,221,245,
|
||||
120,78,119,122,57,204,225,217,101,173,69,213,202,5,204,48,135,199,136,194,16,188,0,0,0,0,128,224,133,229,230,78,
|
||||
111,61,226,98,190,240,144,191,190,120,183,247,209,156,138,94,102,207,230,193,162,93,171,146,220,193,87,120,23,153,168,5,
|
||||
193,11,0,0,0,0,8,94,88,110,90,18,241,223,122,181,163,207,80,104,194,223,158,16,189,28,230,48,227,174,6,34,
|
||||
44,204,72,97,118,136,24,32,211,163,65,240,2,0,0,0,0,130,23,230,115,11,34,102,115,24,66,253,218,209,219,60,
|
||||
33,120,205,16,135,111,62,232,43,74,149,8,55,243,246,78,133,224,5,0,0,0,0,4,47,44,55,83,150,173,100,209,
|
||||
123,223,228,250,135,73,172,94,245,148,240,253,252,157,222,162,73,195,162,220,225,255,35,30,242,85,92,47,6,34,0,0,
|
||||
0,0,32,120,97,206,86,138,51,44,132,133,6,93,216,253,205,160,63,61,37,120,153,227,187,146,68,183,142,101,205,203,
|
||||
108,235,32,120,1,0,0,0,0,193,11,203,45,107,71,92,40,91,58,226,192,190,109,241,23,61,41,122,15,239,24,34,
|
||||
70,36,85,19,121,242,4,114,231,191,67,148,129,224,5,0,0,0,0,4,47,44,55,108,26,239,196,142,25,94,253,215,
|
||||
236,86,98,203,138,179,251,83,197,109,163,106,154,249,122,63,149,241,195,16,188,0,0,0,0,128,224,133,249,212,74,16,
|
||||
187,11,20,200,115,97,243,135,253,206,120,82,240,50,191,166,37,139,73,183,213,17,97,161,193,166,232,45,3,193,11,0,
|
||||
0,0,0,8,94,152,175,141,203,3,95,46,86,56,108,151,167,119,121,141,157,94,202,224,48,113,92,29,115,167,119,19,
|
||||
4,47,0,0,0,0,32,120,97,185,97,92,41,237,234,195,243,154,29,243,180,224,53,118,122,127,78,22,183,143,174,41,
|
||||
242,132,24,49,189,124,145,45,26,130,23,0,0,0,0,16,188,48,95,90,13,226,98,149,74,5,142,30,223,157,116,217,
|
||||
27,162,247,236,254,20,49,52,161,170,185,211,251,16,4,47,0,0,0,0,32,120,97,190,52,46,61,60,151,248,231,225,
|
||||
249,205,210,188,33,120,25,170,238,70,41,203,202,176,67,92,38,166,56,60,84,145,13,3,17,0,0,0,0,16,188,48,
|
||||
87,140,11,82,236,15,12,12,184,120,228,167,196,63,188,37,122,143,82,158,222,70,245,138,152,21,217,250,67,240,2,0,
|
||||
0,0,0,130,23,230,75,187,139,184,114,223,164,250,199,188,37,120,205,138,108,37,138,25,101,136,15,202,112,10,8,94,
|
||||
0,0,0,0,64,240,194,124,98,149,136,63,106,215,136,58,114,242,231,228,127,188,41,122,191,122,191,143,8,15,51,210,
|
||||
149,29,118,228,176,4,49,6,34,0,0,0,0,32,120,97,238,216,19,1,1,142,75,111,175,234,114,196,155,130,151,11,
|
||||
83,76,191,171,1,59,199,21,226,81,8,94,0,0,0,0,64,240,194,124,101,97,196,159,197,139,132,125,239,77,193,203,
|
||||
80,222,95,209,182,101,73,51,115,67,31,8,94,0,0,0,0,64,240,194,124,101,171,56,47,239,7,175,119,63,238,109,
|
||||
209,251,243,230,193,162,74,229,130,236,36,191,18,181,32,120,1,0,0,0,0,193,11,243,133,13,230,20,101,227,111,169,
|
||||
117,193,219,130,151,121,246,209,214,230,46,239,42,8,94,0,0,0,0,64,240,194,124,97,165,136,223,27,214,43,114,252,
|
||||
244,222,148,43,222,22,188,231,168,252,240,176,196,170,102,126,222,84,8,94,0,0,0,0,64,240,194,124,97,111,208,229,
|
||||
181,63,143,252,152,248,63,95,236,242,114,81,138,202,21,35,217,89,78,17,21,33,120,1,0,0,0,0,193,11,243,182,
|
||||
53,225,56,222,59,111,173,189,217,23,130,151,47,176,45,123,160,5,59,203,85,135,155,165,135,49,16,1,0,0,0,0,
|
||||
193,11,203,174,29,10,11,11,222,235,11,193,107,210,44,182,40,59,204,63,68,21,8,94,0,0,0,0,64,240,194,188,
|
||||
109,47,179,158,252,250,253,62,39,125,37,120,233,223,18,209,81,161,236,52,95,16,145,16,188,0,0,0,0,128,224,133,
|
||||
121,211,110,231,16,131,249,211,27,31,242,149,224,61,75,23,216,146,6,199,176,211,92,34,250,66,240,2,0,0,0,0,
|
||||
130,23,230,77,235,200,153,19,198,142,168,241,59,197,216,94,245,149,232,221,250,81,63,179,236,240,199,68,32,4,47,0,
|
||||
0,0,0,32,120,97,222,178,210,196,223,109,91,150,56,78,165,128,175,248,50,150,247,158,9,245,204,220,188,253,33,120,
|
||||
1,0,0,0,0,193,11,243,150,241,238,234,129,98,69,194,142,158,74,75,246,169,224,221,67,21,216,202,151,137,96,231,
|
||||
249,145,136,130,224,5,0,0,0,0,4,47,204,91,246,92,96,96,192,197,147,123,124,43,120,57,77,217,232,161,213,217,
|
||||
121,254,38,186,67,240,2,0,0,0,0,130,23,230,45,75,102,77,249,209,91,61,15,249,82,240,50,223,126,216,79,132,
|
||||
132,4,178,3,173,131,224,5,0,0,0,0,4,47,204,91,198,249,112,197,212,73,245,191,246,181,224,101,146,6,197,152,
|
||||
197,40,106,120,83,240,194,96,48,24,12,6,131,101,165,43,32,38,236,111,193,28,86,208,170,69,137,207,115,67,240,126,
|
||||
245,94,31,17,25,17,194,78,180,214,145,69,198,6,8,94,24,12,6,131,193,96,16,188,176,156,218,193,232,66,161,219,
|
||||
115,67,240,30,223,149,40,90,54,41,198,78,116,130,168,104,83,193,91,155,120,2,184,196,163,196,195,196,98,98,30,49,
|
||||
141,184,131,72,33,122,58,210,75,98,151,32,2,48,108,125,242,49,92,146,104,70,244,34,82,137,9,178,79,230,203,62,
|
||||
90,74,44,83,200,127,38,18,97,154,180,47,251,112,17,162,14,209,142,136,39,198,16,147,137,153,196,66,71,122,25,118,
|
||||
213,218,56,39,227,154,223,105,186,244,163,4,249,222,149,137,32,63,30,103,236,175,49,142,244,52,161,131,137,177,196,189,
|
||||
196,28,57,198,30,33,30,195,218,144,35,120,45,41,13,193,11,99,219,18,28,28,120,44,55,4,47,51,119,90,44,59,
|
||||
209,101,41,106,188,46,120,71,189,247,155,207,112,164,87,147,19,192,43,252,74,124,79,108,144,11,195,16,162,130,47,251,
|
||||
87,119,200,194,137,214,82,104,241,162,250,190,35,61,115,202,105,141,253,98,162,66,237,27,34,63,120,135,72,31,125,93,
|
||||
250,236,113,140,223,127,241,11,241,161,20,199,131,136,80,27,141,179,0,249,97,51,212,50,206,118,17,231,209,239,62,37,
|
||||
8,130,23,198,147,204,229,115,7,134,94,201,13,193,187,239,187,120,145,39,253,242,218,122,27,10,94,222,201,16,181,250,
|
||||
141,21,45,110,95,2,110,66,243,177,15,138,102,183,46,16,77,70,207,21,177,67,103,136,250,9,147,169,237,198,136,152,
|
||||
142,9,162,108,147,174,162,104,181,70,34,60,170,248,205,38,53,22,107,95,200,93,200,88,94,108,32,110,13,95,12,146,
|
||||
139,238,120,226,77,98,239,205,22,136,240,232,18,162,88,245,198,162,108,211,110,162,74,167,33,134,31,115,159,196,14,155,
|
||||
105,244,81,179,91,23,138,230,227,22,41,227,63,242,185,215,228,98,27,243,233,195,72,98,21,241,195,205,218,55,180,64,
|
||||
97,17,85,161,166,40,89,183,149,168,212,182,191,168,209,115,132,168,51,96,188,104,144,52,69,52,30,49,91,52,29,61,
|
||||
79,185,54,206,201,184,230,119,106,144,120,183,225,71,149,218,13,48,222,59,178,100,197,27,181,17,127,124,205,37,202,106,
|
||||
54,214,248,116,164,141,220,157,255,242,102,126,80,160,84,37,81,170,126,91,81,177,77,156,168,209,107,164,168,23,63,81,
|
||||
52,74,189,47,125,140,141,121,64,180,24,183,24,235,67,206,231,133,181,216,225,133,177,113,150,4,241,203,143,67,46,230,
|
||||
214,46,239,224,126,149,216,145,254,146,11,134,45,4,175,220,221,49,6,91,159,165,31,10,250,111,192,67,12,223,112,74,
|
||||
36,189,178,79,196,61,241,133,232,50,231,85,99,97,168,220,110,160,136,40,94,46,171,69,101,141,35,61,253,93,144,159,
|
||||
137,220,0,185,187,184,54,171,197,182,68,237,22,134,208,226,69,181,251,130,55,197,128,167,190,22,201,175,30,16,35,54,
|
||||
158,209,198,31,70,190,123,206,250,78,227,124,60,198,187,16,203,137,35,153,181,47,11,90,246,77,246,209,78,51,94,54,
|
||||
124,54,113,245,207,98,216,91,39,48,150,205,241,188,254,87,49,228,229,93,162,251,194,183,13,113,92,177,117,191,204,124,
|
||||
149,133,99,146,226,31,148,92,72,233,157,172,252,160,74,231,196,140,113,54,112,249,102,145,186,238,23,49,106,211,5,248,
|
||||
128,183,160,182,181,244,65,123,8,94,24,219,74,238,255,159,55,15,62,155,91,130,247,253,215,123,136,160,160,0,33,99,
|
||||
151,236,34,120,235,154,131,45,113,77,26,38,31,31,193,98,173,247,146,247,140,93,200,34,85,26,100,182,112,190,66,12,
|
||||
228,227,124,155,10,220,58,114,119,123,75,102,11,111,173,190,183,138,206,179,86,137,193,207,127,47,134,189,125,210,30,125,
|
||||
190,246,160,245,29,155,123,185,141,43,200,56,219,77,153,181,111,181,110,169,162,253,148,103,69,220,147,95,66,212,230,240,
|
||||
163,150,63,190,26,13,157,238,220,198,219,136,91,136,188,10,140,183,104,185,163,191,225,95,31,146,117,90,26,187,243,189,
|
||||
31,126,95,164,190,126,4,125,154,11,36,174,218,99,246,199,49,217,95,16,188,48,199,243,220,255,63,126,49,224,84,110,
|
||||
9,222,189,91,227,69,229,10,145,66,198,183,133,219,68,240,142,49,39,191,17,27,79,99,2,202,37,120,23,165,195,212,
|
||||
231,69,153,198,157,51,19,191,83,237,176,235,203,241,142,196,157,153,9,48,222,93,236,120,223,75,34,97,197,79,98,196,
|
||||
59,103,109,217,199,125,31,253,200,250,206,225,94,218,189,227,75,147,27,157,219,183,116,163,14,162,213,132,71,197,144,149,
|
||||
187,109,219,190,185,13,127,152,241,238,120,38,254,221,57,151,198,91,121,226,1,231,231,169,208,178,183,232,58,247,53,145,
|
||||
242,218,33,244,155,2,88,124,230,117,8,94,152,105,79,115,255,111,253,184,223,137,220,18,188,103,247,167,136,158,93,140,
|
||||
227,232,83,68,77,155,8,222,215,248,241,59,78,95,129,201,71,37,241,59,237,5,58,50,237,235,188,112,222,170,169,208,
|
||||
229,16,160,251,157,23,94,222,221,238,187,236,19,191,217,97,172,209,123,148,215,194,25,100,72,200,117,237,203,113,182,221,
|
||||
230,189,142,157,59,31,195,27,7,113,143,127,238,60,118,199,251,112,188,113,86,141,5,206,59,250,28,86,53,244,205,227,
|
||||
232,35,149,124,133,62,62,157,195,156,32,120,97,108,207,112,255,127,255,89,220,201,220,18,188,204,194,153,141,205,108,13,
|
||||
113,54,17,188,251,248,241,7,191,240,3,38,32,5,233,189,244,3,17,211,33,222,58,41,62,160,203,110,175,12,93,248,
|
||||
215,142,238,128,167,191,241,187,93,70,22,245,150,54,136,240,96,27,255,107,71,151,63,94,237,18,6,162,51,28,179,93,
|
||||
187,255,109,214,126,31,235,131,241,54,142,248,201,252,55,235,15,185,75,164,172,59,140,254,80,56,180,205,226,31,205,32,
|
||||
120,97,166,189,196,253,191,235,235,129,167,115,83,240,110,249,168,159,8,8,48,226,120,151,233,46,120,201,90,92,11,103,
|
||||
56,131,9,72,97,218,76,122,220,121,199,104,128,226,98,247,58,161,91,119,208,4,227,194,143,191,94,126,225,120,89,217,
|
||||
22,175,122,168,125,107,202,212,81,25,109,220,250,206,101,8,87,80,16,206,252,96,233,167,78,94,26,111,29,173,190,192,
|
||||
23,60,113,39,67,125,56,134,222,210,111,97,16,188,48,211,248,6,187,216,183,45,254,124,110,10,222,243,7,135,138,234,
|
||||
85,10,178,67,237,177,129,224,125,153,31,157,83,203,96,242,209,96,114,164,155,243,78,162,119,178,130,66,119,172,76,211,
|
||||
100,60,35,167,9,235,243,200,255,249,253,237,126,75,159,181,243,192,46,222,146,235,66,67,40,53,30,118,116,181,201,206,
|
||||
193,180,244,240,152,155,229,188,195,143,118,215,3,78,125,39,251,237,78,75,127,66,240,194,140,99,187,171,191,166,37,95,
|
||||
202,77,193,203,76,24,83,219,116,210,210,186,10,94,249,236,198,123,224,200,75,175,248,192,6,137,247,88,23,207,4,133,
|
||||
196,238,92,235,37,180,94,15,109,66,159,17,124,17,207,210,95,101,115,184,171,155,241,187,216,15,16,159,171,143,232,173,
|
||||
217,231,150,235,138,11,120,96,188,229,147,39,141,198,239,228,76,17,252,113,133,246,214,231,174,134,197,31,66,33,120,97,
|
||||
86,251,146,66,9,46,228,182,216,101,54,172,233,106,134,53,140,212,88,240,14,51,7,27,118,135,180,206,219,200,116,207,
|
||||
101,161,203,85,208,86,155,207,211,238,158,229,232,35,107,28,54,165,159,203,105,252,46,31,133,91,251,156,99,187,209,182,
|
||||
154,9,28,250,56,177,244,97,151,28,142,185,8,98,145,249,251,122,46,218,136,54,214,55,76,237,57,167,190,133,224,133,
|
||||
57,126,10,15,11,78,83,65,240,110,255,124,128,40,28,29,42,100,134,3,237,4,175,60,22,53,6,91,219,187,159,194,
|
||||
228,163,169,232,173,29,55,206,186,128,6,228,146,216,77,176,10,49,44,188,255,134,211,129,201,246,89,158,211,54,230,252,
|
||||
196,248,64,213,23,142,179,150,125,249,76,14,198,92,21,71,122,105,99,227,119,197,191,176,29,109,171,97,254,102,203,188,
|
||||
217,6,130,23,230,108,103,171,84,46,248,141,10,130,247,192,15,9,162,86,245,40,118,170,157,14,153,143,87,51,193,155,
|
||||
215,28,108,200,206,160,55,28,58,32,251,114,84,46,136,221,137,25,41,176,250,223,110,28,219,162,79,254,13,151,60,150,
|
||||
237,212,43,27,109,60,195,250,65,129,138,87,122,51,240,153,45,102,95,238,206,65,138,191,12,127,136,127,233,71,180,171,
|
||||
222,197,38,152,24,8,94,152,213,34,57,126,55,113,96,204,103,42,8,222,83,105,41,162,125,235,146,236,84,92,166,179,
|
||||
156,134,130,183,169,57,216,32,82,244,134,227,100,45,19,103,17,31,138,221,165,25,98,119,224,29,232,139,44,251,231,93,
|
||||
107,255,4,103,87,236,114,122,41,136,93,219,237,236,85,117,211,31,194,173,98,151,127,23,218,84,79,250,44,253,208,234,
|
||||
7,145,16,188,48,171,181,229,190,127,102,89,155,31,84,16,188,204,176,196,42,236,84,231,137,88,13,5,239,115,252,200,
|
||||
28,67,132,201,199,86,241,188,115,125,36,118,231,155,255,102,167,153,43,209,7,55,160,82,187,1,102,223,220,237,102,27,
|
||||
47,206,136,137,190,251,105,180,165,141,136,29,62,203,244,137,165,110,248,67,32,241,184,233,19,156,191,21,109,169,47,205,
|
||||
199,62,104,250,192,163,153,244,53,4,175,159,27,167,93,185,114,96,91,194,31,170,8,222,197,247,55,53,11,80,116,215,
|
||||
80,240,242,206,180,81,102,20,147,143,254,112,126,91,95,237,242,90,51,49,224,226,212,205,146,202,239,207,214,173,124,107,
|
||||
14,99,142,255,69,91,218,139,1,79,125,109,250,196,143,110,248,196,36,132,161,217,135,18,181,91,152,62,208,26,130,23,
|
||||
230,108,159,210,133,181,83,148,146,236,138,42,130,247,141,151,187,152,14,59,82,39,193,75,86,151,31,55,186,98,45,76,
|
||||
60,54,130,11,59,72,127,156,225,69,223,153,105,46,186,92,166,20,237,126,99,58,207,90,237,246,165,66,178,17,230,223,
|
||||
233,58,103,45,218,209,134,112,121,95,139,95,132,184,224,19,29,28,150,42,133,104,67,91,133,161,5,64,240,194,172,198,
|
||||
113,75,127,84,175,90,232,200,233,189,41,202,8,222,109,159,246,55,29,118,190,46,130,215,154,157,161,217,152,7,48,249,
|
||||
216,243,50,140,71,75,215,90,124,231,30,248,78,182,99,53,39,184,216,198,183,155,127,167,97,202,52,180,163,77,225,44,
|
||||
27,22,223,40,119,19,159,104,136,75,139,182,13,65,187,39,139,62,135,224,245,99,171,79,92,162,11,107,191,157,59,48,
|
||||
244,170,42,130,151,196,183,8,9,54,114,241,174,209,72,240,22,49,7,91,255,255,124,133,201,199,70,36,189,178,207,58,
|
||||
145,54,240,176,223,220,237,176,148,175,69,123,187,144,115,245,141,163,89,166,29,202,162,141,107,155,63,223,120,196,108,180,
|
||||
161,255,8,222,218,174,108,80,112,209,10,136,93,59,20,161,217,105,237,251,188,16,188,48,103,139,39,254,185,123,124,221,
|
||||
83,170,136,93,147,10,229,34,216,177,190,214,72,240,54,48,7,27,31,171,97,2,178,211,49,233,49,235,68,218,211,131,
|
||||
62,83,197,252,189,124,217,6,109,157,173,248,221,40,23,218,249,9,236,226,65,240,58,249,68,23,243,231,80,81,207,30,
|
||||
116,152,250,252,77,227,250,33,120,253,219,22,114,191,175,124,186,253,65,213,4,111,243,216,98,236,88,123,53,18,188,19,
|
||||
248,81,185,126,55,38,31,91,31,161,15,243,116,8,12,199,8,163,157,93,167,253,148,103,205,190,120,203,157,112,17,20,
|
||||
149,240,59,193,91,249,6,126,193,133,141,68,199,233,43,208,110,54,128,203,194,91,250,125,210,13,250,29,130,215,143,237,
|
||||
139,192,192,128,191,142,238,74,252,75,53,193,219,183,71,121,118,172,11,26,9,222,119,141,203,48,243,214,97,2,178,33,
|
||||
13,18,239,241,232,197,53,178,169,72,131,148,61,138,215,106,110,246,69,215,155,180,113,95,132,139,248,181,224,141,202,194,
|
||||
47,110,193,105,156,205,250,253,173,19,46,149,150,246,148,224,13,132,118,212,206,10,16,127,197,214,47,242,141,106,98,151,
|
||||
185,37,181,58,59,214,85,246,45,213,5,47,89,24,142,199,252,102,87,113,149,7,252,101,188,3,229,167,179,5,199,199,
|
||||
203,182,219,225,66,59,191,135,80,6,191,142,183,207,236,150,126,65,243,207,249,35,22,109,230,95,97,78,158,18,188,121,
|
||||
160,31,181,51,46,93,122,101,195,234,46,251,84,20,188,83,38,212,203,8,62,215,64,240,142,229,103,173,209,107,36,38,
|
||||
31,155,210,115,241,59,166,63,126,154,67,95,41,136,140,12,217,131,43,23,90,22,181,59,93,201,105,92,189,199,112,136,
|
||||
93,127,26,167,139,54,154,254,241,113,22,126,113,175,233,67,124,12,142,54,179,7,77,70,222,111,246,251,242,155,204,11,
|
||||
30,17,188,161,208,143,90,89,94,226,64,225,232,208,19,39,247,36,93,81,81,240,206,158,210,208,116,224,112,149,5,47,
|
||||
89,176,57,129,114,169,83,76,62,246,36,238,241,207,77,127,220,150,67,127,25,154,17,83,74,199,112,104,91,119,118,113,
|
||||
14,88,5,111,51,87,46,3,218,34,99,10,9,118,62,57,26,184,124,179,241,225,213,121,214,42,163,66,92,235,137,143,
|
||||
137,86,119,60,34,90,142,95,234,21,248,119,183,189,235,63,162,239,163,31,105,19,255,28,59,108,102,70,74,203,81,55,
|
||||
40,31,60,96,249,183,24,83,182,137,223,61,227,114,22,29,79,9,222,48,104,72,173,172,41,241,247,224,126,21,207,156,
|
||||
59,144,170,164,224,93,56,179,177,233,192,249,21,23,188,53,205,193,150,184,106,143,72,93,247,11,176,66,11,53,103,57,
|
||||
208,125,55,133,23,72,217,207,59,115,224,43,92,42,251,91,254,61,44,92,176,88,101,59,156,33,203,124,200,124,59,219,
|
||||
252,153,250,9,147,245,91,188,223,57,43,226,95,250,81,180,191,247,57,81,103,192,120,81,162,78,75,235,59,231,42,92,
|
||||
178,85,245,246,43,90,61,214,124,222,166,55,250,216,196,174,191,125,232,247,248,103,102,159,127,231,194,28,12,193,235,135,
|
||||
54,157,227,99,151,204,107,118,88,69,177,203,44,157,159,113,49,165,128,226,130,55,89,149,5,73,117,194,10,22,17,165,
|
||||
27,182,23,77,70,207,53,118,171,120,113,215,101,82,181,20,159,216,157,211,172,12,53,122,142,192,66,149,13,120,215,81,
|
||||
182,225,127,110,208,206,83,204,118,78,121,237,144,86,185,133,121,71,245,6,227,135,47,240,238,226,144,26,226,77,98,5,
|
||||
241,44,241,20,183,135,151,224,223,253,162,249,145,198,12,122,110,155,14,249,153,127,203,194,55,140,247,232,52,115,165,222,
|
||||
59,154,52,111,242,142,59,159,16,129,19,46,101,103,128,224,245,95,227,11,134,223,231,9,9,252,253,200,143,137,127,64,
|
||||
240,122,68,244,222,79,156,38,206,131,127,193,11,245,239,89,45,228,9,43,126,210,109,119,113,123,54,125,36,197,46,177,
|
||||
131,156,166,141,203,176,242,69,190,134,201,247,138,106,221,82,69,153,216,78,198,110,100,145,42,13,188,138,108,195,238,89,
|
||||
180,113,136,217,198,124,228,175,75,86,1,222,57,205,100,108,172,38,38,19,109,57,238,123,148,151,74,90,143,114,179,26,
|
||||
96,237,184,113,234,158,194,144,79,202,182,251,41,147,231,111,198,127,86,172,122,99,173,82,109,241,59,181,24,183,88,84,
|
||||
233,52,196,40,89,159,55,127,65,108,158,100,77,27,8,94,152,179,245,224,203,106,99,71,212,216,162,170,216,213,41,164,
|
||||
1,184,181,195,89,148,232,76,44,182,78,84,221,23,190,165,252,226,211,119,217,199,230,243,110,206,198,187,135,154,239,218,
|
||||
109,254,27,218,22,223,232,114,255,43,162,124,243,158,42,44,108,33,89,180,115,42,255,57,139,3,29,218,148,219,211,233,
|
||||
189,120,71,181,94,102,217,5,20,24,191,202,183,109,151,217,107,204,118,124,59,171,211,21,29,178,162,112,40,24,87,4,
|
||||
188,129,255,95,38,254,36,254,0,6,39,92,77,23,137,75,107,254,101,252,97,178,51,34,34,207,249,195,59,134,92,86,
|
||||
89,240,206,210,228,210,26,200,246,2,26,73,44,114,104,146,15,147,69,185,124,214,15,178,241,174,213,117,60,102,55,143,
|
||||
137,235,37,76,202,108,209,253,137,83,180,17,179,120,72,17,221,120,135,69,198,41,123,147,172,196,110,94,243,217,122,60,
|
||||
184,65,249,75,104,78,130,102,45,209,94,241,241,122,159,17,23,61,228,46,101,219,213,210,166,11,157,158,189,172,14,33,
|
||||
25,12,159,76,100,50,206,30,147,31,28,117,137,66,88,63,114,228,199,30,17,188,81,196,255,201,152,34,152,186,198,139,
|
||||
210,165,248,126,149,206,157,61,144,122,85,101,193,171,83,90,50,144,237,201,39,84,23,145,210,97,218,11,166,63,190,146,
|
||||
141,247,124,148,255,110,163,212,251,52,218,209,61,110,45,182,97,178,222,145,94,204,33,88,65,95,138,207,248,168,88,119,
|
||||
88,105,177,235,212,166,115,53,25,171,111,168,28,255,234,20,203,25,239,244,236,29,205,63,227,112,28,85,253,162,94,252,
|
||||
68,235,59,112,21,212,10,88,39,212,20,188,124,51,54,205,145,94,40,160,35,116,165,178,246,10,241,207,154,103,59,252,
|
||||
162,178,216,101,70,167,232,83,120,2,228,104,2,154,199,115,79,236,208,25,106,231,121,28,53,199,92,136,22,185,249,126,
|
||||
67,116,139,221,109,57,254,97,103,81,198,33,40,229,20,247,35,190,204,101,196,21,171,220,182,53,123,143,182,182,235,8,
|
||||
77,198,104,94,213,63,38,134,188,188,203,218,174,165,156,158,255,9,254,239,45,110,95,162,203,71,208,61,88,27,212,22,
|
||||
188,108,7,137,191,136,119,16,211,171,164,53,230,84,100,77,99,139,109,59,187,95,205,84,100,86,250,116,47,39,228,165,
|
||||
39,7,4,175,173,39,160,145,220,197,124,241,73,147,130,7,99,220,120,183,252,230,223,235,56,125,133,22,98,215,41,83,
|
||||
0,135,156,84,212,192,135,238,118,152,69,38,20,110,91,167,29,188,86,26,141,209,97,70,252,110,231,36,117,243,239,210,
|
||||
7,179,108,215,71,50,121,254,221,252,103,156,105,69,197,103,79,88,177,211,234,23,189,176,46,232,33,120,127,14,9,9,
|
||||
60,78,255,123,145,104,13,125,169,148,69,16,223,133,135,7,95,220,253,237,160,223,85,23,187,76,179,216,98,236,88,123,
|
||||
33,120,109,63,1,25,59,160,149,219,13,84,250,38,189,101,65,74,114,227,221,90,153,127,143,99,97,85,23,187,13,146,
|
||||
166,88,223,115,170,38,254,19,225,208,160,200,4,135,236,88,218,182,171,70,227,51,92,245,176,163,225,235,127,181,182,109,
|
||||
181,172,158,95,213,112,134,54,147,30,183,62,127,16,214,5,61,4,239,55,165,74,230,59,31,24,24,192,191,117,167,60,
|
||||
6,129,169,97,44,42,46,199,199,85,58,165,195,238,46,83,161,108,4,59,214,215,16,188,182,159,128,140,116,93,49,29,
|
||||
19,116,200,239,153,101,74,172,44,222,237,33,254,59,77,71,207,83,94,236,246,122,104,147,245,29,167,104,228,63,157,148,
|
||||
255,168,184,254,200,58,69,179,241,57,214,161,120,101,64,75,118,134,141,153,60,255,32,254,179,138,173,251,41,59,246,44,
|
||||
233,246,90,97,77,208,71,240,190,26,18,18,32,198,141,172,121,32,32,192,113,69,230,16,12,132,214,204,117,227,99,213,
|
||||
239,131,131,3,47,126,181,169,207,73,29,196,238,233,189,41,34,36,56,192,204,69,9,193,107,239,9,232,118,238,226,154,
|
||||
125,110,81,184,164,237,126,171,96,137,117,183,208,4,199,23,170,44,118,57,115,132,229,253,102,104,230,63,75,204,103,231,
|
||||
208,19,13,226,51,3,52,106,219,140,139,128,29,166,62,175,195,233,75,207,76,222,225,101,35,47,243,61,203,85,207,239,
|
||||
189,3,235,129,94,130,151,111,21,138,13,171,187,254,94,178,120,62,206,17,119,136,131,199,161,55,115,213,120,209,93,206,
|
||||
121,119,31,154,219,52,77,7,177,203,108,251,180,127,70,61,116,8,94,219,79,64,115,141,12,6,67,167,43,43,8,157,
|
||||
98,236,74,187,179,51,86,173,251,80,229,119,119,107,244,26,105,190,219,3,154,249,78,25,179,95,146,94,217,167,124,254,
|
||||
102,87,63,150,20,105,219,140,10,146,181,251,223,166,172,239,14,126,225,7,235,216,44,63,42,139,66,36,92,192,65,197,
|
||||
231,111,122,203,124,243,217,151,96,61,208,75,240,222,194,191,227,173,85,93,196,131,179,155,252,76,187,188,151,100,158,198,
|
||||
60,208,157,185,102,124,220,247,87,195,122,69,142,159,216,157,124,89,23,193,251,250,138,206,230,36,48,18,130,215,246,19,
|
||||
208,51,220,197,173,239,92,166,67,89,97,35,77,158,59,233,214,226,158,248,66,105,177,219,102,242,147,89,222,110,215,192,
|
||||
119,30,84,249,116,192,105,247,113,152,70,237,58,217,186,43,205,187,212,170,250,111,167,25,47,91,219,56,56,171,252,187,
|
||||
170,86,116,172,59,104,2,50,51,104,42,120,185,130,215,63,75,230,52,19,231,15,166,94,29,28,87,137,119,120,175,200,
|
||||
35,75,152,239,45,72,238,42,92,125,123,85,151,35,186,136,93,102,209,236,166,102,53,153,238,118,20,188,100,209,68,23,
|
||||
57,54,248,72,246,53,226,19,226,71,121,50,114,210,145,94,146,151,171,200,252,151,115,39,203,246,176,35,198,132,223,117,
|
||||
222,58,133,115,240,190,104,46,74,175,186,216,191,29,50,226,74,169,106,146,202,185,118,45,98,97,136,102,11,87,9,213,
|
||||
219,56,254,197,29,214,246,205,175,248,197,191,214,50,69,224,110,243,153,57,171,132,202,98,151,41,85,191,173,217,190,61,
|
||||
50,121,175,122,25,39,0,107,246,42,249,252,252,161,47,159,145,63,252,139,66,148,234,35,120,185,10,206,249,225,73,85,
|
||||
13,209,242,229,166,62,23,10,71,229,61,39,23,240,170,208,159,62,53,190,48,248,31,218,101,255,223,216,225,53,126,210,
|
||||
73,236,50,195,134,84,49,83,146,53,178,131,224,37,43,196,183,251,137,55,137,99,14,212,60,255,23,42,47,172,229,154,
|
||||
245,48,159,179,143,139,253,253,31,29,222,171,207,210,15,173,125,80,80,179,133,235,126,213,219,152,11,141,56,174,21,236,
|
||||
80,141,15,136,111,137,95,50,27,143,92,104,69,249,172,34,215,10,163,188,156,133,143,180,83,253,163,200,233,20,64,200,
|
||||
44,87,92,42,247,176,38,176,190,219,207,89,186,56,14,153,248,138,120,143,88,41,195,92,199,201,13,128,130,118,19,188,
|
||||
229,136,35,29,90,151,20,167,210,82,104,151,119,232,213,117,47,116,60,44,119,113,182,18,249,160,67,125,102,124,51,245,
|
||||
239,54,45,74,156,57,185,39,233,178,78,98,247,87,242,157,246,228,67,114,34,46,171,171,224,149,199,218,3,137,143,50,
|
||||
91,80,74,55,234,96,28,197,114,12,23,231,104,237,185,104,163,24,240,212,215,198,209,27,239,70,164,190,126,196,184,21,
|
||||
205,41,119,184,96,193,136,119,206,218,22,149,69,33,47,148,238,164,12,178,94,86,75,126,245,128,210,130,161,86,223,91,
|
||||
205,247,26,175,153,216,205,72,69,214,123,233,7,186,164,34,83,154,18,181,91,24,185,108,57,124,103,196,198,51,202,139,
|
||||
93,167,66,19,45,178,240,147,94,142,140,210,229,199,212,125,151,149,187,141,242,221,97,5,139,216,125,99,227,8,177,129,
|
||||
83,30,18,49,186,11,94,22,180,187,106,215,136,18,7,127,72,184,86,49,43,181,218,126,74,85,246,15,253,217,147,136,
|
||||
231,245,137,213,34,142,230,207,23,114,238,195,55,122,28,215,109,119,247,0,249,78,173,234,81,66,166,182,11,215,77,240,
|
||||
146,21,225,155,238,206,131,189,114,135,193,162,243,172,85,34,113,213,158,116,145,167,73,137,89,127,199,18,35,184,206,197,
|
||||
254,55,202,152,242,81,171,202,239,149,188,246,160,213,63,195,53,19,188,25,177,153,137,107,210,148,110,103,22,189,93,238,
|
||||
127,69,57,186,47,124,75,244,125,244,35,67,56,234,82,1,208,221,204,23,100,253,84,79,169,150,89,152,17,251,52,95,
|
||||
148,213,131,159,68,252,11,219,197,160,103,191,51,50,78,240,7,104,183,249,111,136,118,83,158,17,141,71,204,22,53,122,
|
||||
143,162,185,176,77,86,2,120,167,220,5,46,167,163,224,101,123,173,72,225,80,177,227,243,1,25,2,230,200,79,137,151,
|
||||
42,87,140,100,101,255,55,49,20,122,212,171,198,183,150,211,130,130,2,127,223,248,74,215,51,186,137,93,102,59,249,78,
|
||||
225,168,80,35,94,242,70,142,169,162,224,37,155,238,60,168,187,47,120,211,56,182,130,120,212,15,167,10,107,131,93,244,
|
||||
129,231,249,231,219,76,122,66,233,119,179,92,150,89,160,107,238,102,101,83,145,1,239,22,154,160,2,18,150,113,217,246,
|
||||
6,126,18,167,155,224,181,43,188,201,195,59,217,93,230,188,106,236,102,103,34,126,57,12,172,174,110,130,119,84,64,64,
|
||||
128,88,191,166,235,117,34,38,109,203,224,179,49,149,34,207,210,159,255,79,126,117,33,63,175,231,45,159,20,137,87,238,
|
||||
25,95,247,132,46,5,38,156,161,11,118,130,125,136,222,99,184,46,130,87,166,160,250,209,28,188,117,250,223,46,18,87,
|
||||
255,172,252,133,15,112,99,56,180,196,50,33,215,112,43,247,46,77,238,234,238,34,29,179,190,87,73,13,5,47,23,164,
|
||||
49,22,79,248,169,255,81,103,224,29,46,133,25,113,94,94,29,66,26,252,85,0,15,88,254,173,53,206,221,100,161,55,
|
||||
179,197,120,90,240,150,230,223,51,105,108,157,127,9,153,77,175,117,63,17,25,17,194,55,206,185,252,112,13,232,83,143,
|
||||
90,152,188,233,127,101,104,66,149,237,191,254,156,124,89,71,177,203,220,113,75,173,140,20,73,170,11,94,25,43,253,177,
|
||||
57,88,171,247,24,38,226,158,252,18,19,154,77,224,184,106,203,68,28,230,78,118,6,142,189,86,245,189,186,205,123,61,
|
||||
203,84,78,26,136,221,94,58,92,8,4,94,10,49,154,185,210,229,204,34,50,243,132,241,179,92,92,5,237,167,104,225,
|
||||
155,117,135,141,60,236,78,194,247,238,156,204,19,195,222,253,205,49,232,237,11,142,30,235,206,59,218,172,57,231,104,180,
|
||||
226,172,163,218,179,103,60,46,120,217,210,106,84,43,196,151,214,254,37,102,158,88,220,114,111,254,252,33,191,201,91,136,
|
||||
77,229,142,8,44,103,22,34,243,81,254,211,190,85,201,95,142,237,74,210,86,236,158,59,152,42,170,85,41,200,14,181,
|
||||
231,102,142,153,219,130,151,108,162,57,56,171,116,78,52,226,225,48,121,217,139,216,225,179,92,62,246,183,238,238,170,44,
|
||||
198,248,66,146,67,195,18,194,178,141,131,204,103,231,139,158,240,81,255,130,47,242,90,124,247,14,23,252,165,138,14,39,
|
||||
46,224,90,197,71,203,69,90,102,236,205,250,56,121,227,5,71,220,155,231,29,157,215,158,115,180,88,117,214,81,239,197,
|
||||
179,142,152,229,103,28,101,254,115,58,83,188,33,120,31,227,35,233,109,159,196,101,42,106,30,91,212,226,56,149,185,229,
|
||||
188,162,251,100,102,7,88,206,196,238,83,156,9,163,66,185,136,29,135,182,39,92,210,85,236,50,91,254,175,159,25,206,
|
||||
240,168,202,130,87,62,159,49,40,27,38,223,139,201,202,166,148,109,218,205,156,120,123,185,147,57,32,238,241,207,149,125,
|
||||
39,142,101,180,44,40,61,52,19,188,25,2,134,47,204,192,71,253,11,203,241,247,90,23,253,37,204,244,151,129,203,55,
|
||||
163,13,53,161,245,196,199,172,115,84,223,17,155,126,115,196,175,191,224,232,245,250,121,71,251,87,206,57,26,191,124,214,
|
||||
81,243,185,51,142,242,79,157,206,82,216,250,82,240,114,160,248,229,69,179,155,100,42,106,56,93,217,244,187,26,28,200,
|
||||
155,55,232,119,153,166,162,57,118,122,179,101,156,246,234,1,110,235,58,181,162,143,238,223,22,255,183,206,98,151,89,48,
|
||||
179,177,89,112,34,206,155,130,151,191,6,251,190,113,222,49,100,195,5,7,15,38,55,22,220,162,142,244,114,199,198,96,
|
||||
228,129,137,9,202,47,46,198,20,114,193,55,90,100,92,144,81,248,146,162,83,154,181,178,154,9,222,65,25,33,35,212,
|
||||
63,240,83,255,129,243,2,91,252,182,189,27,62,243,18,255,157,86,119,60,130,118,84,57,166,119,19,165,103,219,112,65,
|
||||
208,186,44,104,125,22,37,187,141,177,246,119,35,119,133,173,47,5,111,77,226,116,239,174,229,196,217,253,41,153,139,222,
|
||||
67,67,175,46,93,208,156,119,122,249,18,219,81,162,62,244,171,219,23,212,214,113,24,67,249,242,17,59,14,124,175,247,
|
||||
206,46,195,190,210,179,75,57,118,166,83,206,49,222,158,22,188,214,1,80,150,168,242,204,25,227,40,164,249,202,179,142,
|
||||
142,175,158,115,244,38,49,156,64,95,148,195,55,93,55,113,118,177,30,89,115,124,39,38,42,251,194,41,117,100,95,175,
|
||||
116,113,97,125,153,127,190,233,232,121,74,191,87,203,241,75,205,247,122,79,195,203,106,90,100,192,0,94,45,31,60,215,
|
||||
77,159,105,102,254,93,164,131,204,229,77,4,18,181,180,174,10,90,95,5,173,179,130,214,91,65,235,174,160,245,87,208,
|
||||
58,44,202,56,17,209,126,212,117,37,221,85,21,188,156,59,245,251,152,138,5,196,222,239,226,111,40,114,30,154,211,108,
|
||||
95,116,84,232,5,250,249,63,137,100,25,163,5,187,121,234,177,87,248,130,90,59,138,217,61,184,93,127,177,203,236,221,
|
||||
26,47,42,85,136,100,103,218,102,230,223,245,133,224,189,25,28,15,36,159,199,24,120,229,187,142,16,125,86,164,9,10,
|
||||
138,199,36,102,83,156,170,31,181,116,97,81,45,168,197,206,227,245,249,75,251,106,40,120,185,162,147,145,247,19,126,234,
|
||||
31,196,191,244,163,213,103,103,102,211,111,182,169,30,106,100,155,185,147,214,197,193,36,106,41,252,64,116,120,229,156,104,
|
||||
70,162,182,238,11,103,4,173,163,255,18,180,55,163,244,35,135,173,125,223,70,85,193,203,54,53,40,40,64,188,247,90,
|
||||
247,155,10,157,245,171,187,30,207,159,47,152,5,239,127,229,229,43,164,44,203,218,170,57,210,75,248,93,73,165,108,12,
|
||||
58,95,80,115,230,221,181,221,4,21,40,97,103,186,199,249,165,115,83,240,202,65,178,40,163,66,218,178,35,25,3,178,
|
||||
210,242,211,162,214,243,103,68,227,21,103,69,155,213,231,68,215,215,206,139,126,111,158,55,142,102,248,136,6,19,160,158,
|
||||
240,194,232,78,81,6,178,62,252,179,92,130,88,229,247,226,42,90,242,157,118,107,40,118,235,32,247,174,95,231,193,94,
|
||||
146,3,223,25,143,204,30,158,13,61,224,117,142,215,59,94,247,120,253,227,117,144,215,67,119,69,237,205,136,74,93,102,
|
||||
246,255,243,42,11,222,146,196,95,241,113,149,92,18,59,95,109,234,123,180,126,157,104,206,211,123,149,88,37,211,155,193,
|
||||
174,89,94,78,124,207,225,31,244,33,113,113,202,29,245,78,80,9,94,219,136,93,102,64,159,138,66,238,244,23,87,73,
|
||||
240,202,56,105,99,208,21,159,241,185,203,3,149,143,104,98,232,168,166,14,125,221,54,125,249,172,104,187,230,156,232,70,
|
||||
19,68,28,4,177,45,170,56,57,45,168,198,7,81,147,81,115,116,9,211,88,168,161,224,125,210,104,227,209,115,225,163,
|
||||
254,32,172,174,207,38,194,68,140,242,64,101,190,62,75,63,68,251,186,32,104,121,157,226,245,138,215,173,38,180,126,241,
|
||||
58,22,147,69,232,129,55,41,185,112,135,217,255,71,85,22,188,108,27,243,132,4,138,125,219,226,93,18,60,135,119,12,
|
||||
185,212,184,97,209,173,82,244,158,36,186,66,231,26,198,59,222,203,136,191,105,39,252,28,87,80,59,119,64,207,162,18,
|
||||
89,145,182,117,176,8,33,95,161,119,92,159,89,3,228,150,224,37,27,109,78,148,69,110,91,237,241,193,92,153,142,121,
|
||||
106,211,151,113,44,125,33,183,166,47,101,14,214,239,67,241,77,131,223,190,32,82,222,193,78,132,2,225,12,125,93,88,
|
||||
76,243,234,16,215,237,148,157,33,78,51,177,91,16,233,165,252,7,46,218,227,36,118,155,120,192,135,238,228,223,21,211,
|
||||
49,193,184,184,233,183,169,191,104,93,225,245,165,143,188,28,198,235,14,175,63,188,14,85,206,70,216,129,47,8,41,93,
|
||||
211,244,131,186,42,11,94,142,201,189,60,119,90,172,91,226,135,50,56,28,14,11,11,62,79,127,247,130,44,213,234,175,
|
||||
187,189,156,185,162,29,177,37,32,192,113,185,109,139,146,103,62,124,179,199,9,59,9,93,147,57,83,27,153,217,25,146,
|
||||
85,17,188,178,237,141,129,86,248,150,231,115,101,160,151,123,234,180,17,208,207,95,215,148,138,37,67,20,115,208,255,32,
|
||||
41,138,71,98,129,244,236,98,187,106,143,187,197,38,50,142,218,19,215,164,233,242,94,181,53,19,188,253,29,40,17,235,
|
||||
23,88,46,85,154,233,41,171,121,208,143,158,176,171,31,141,148,98,150,215,133,222,22,49,219,88,238,206,242,58,194,235,
|
||||
137,138,130,246,102,20,140,155,97,250,195,3,42,11,222,74,92,96,162,101,211,226,226,248,238,36,215,139,15,28,72,189,
|
||||
186,251,219,65,127,86,174,88,96,191,220,237,229,34,4,117,253,76,236,230,39,150,115,88,8,183,193,136,164,170,59,79,
|
||||
236,78,250,159,29,197,238,177,93,137,162,69,147,98,66,86,224,171,168,130,224,181,22,17,200,223,110,164,210,147,65,217,
|
||||
167,174,133,78,112,44,85,43,154,228,58,209,100,199,151,6,6,190,117,65,36,179,40,70,248,132,203,180,189,235,63,230,
|
||||
228,250,162,139,139,232,36,135,44,39,173,116,92,242,19,95,92,119,227,89,51,193,107,228,189,110,62,246,65,248,168,141,
|
||||
105,144,52,197,234,163,124,159,167,176,135,253,168,140,117,231,88,151,75,108,60,127,243,60,206,243,57,207,235,60,191,183,
|
||||
146,177,179,25,161,6,154,138,89,87,40,58,121,189,217,103,159,169,44,120,249,40,126,109,100,68,30,241,245,251,125,221,
|
||||
22,66,20,10,113,113,236,240,26,167,162,11,229,61,47,119,255,30,151,233,203,2,108,46,116,147,228,173,210,43,245,106,
|
||||
71,31,127,123,85,215,163,118,20,186,25,241,219,239,245,17,84,114,154,157,232,213,172,46,44,230,130,224,53,68,76,254,
|
||||
54,195,108,49,97,148,149,225,19,148,172,91,52,120,233,172,113,115,182,29,197,102,117,89,123,222,56,218,26,248,54,132,
|
||||
177,9,95,60,147,147,107,31,23,23,209,239,141,197,147,4,165,202,239,21,59,108,166,249,94,243,53,140,223,253,136,159,
|
||||
189,199,131,27,32,12,109,72,223,101,31,83,181,202,36,183,42,108,229,192,151,120,83,101,169,249,111,117,95,248,86,238,
|
||||
11,89,25,98,192,243,49,207,203,60,63,243,60,205,243,181,170,97,6,190,164,248,204,235,62,214,195,84,21,188,102,78,
|
||||
222,171,201,131,99,178,37,134,184,72,5,85,223,58,83,172,104,216,46,185,219,251,7,231,225,179,105,38,135,88,226,59,
|
||||
22,247,20,207,250,251,146,121,77,211,104,103,252,178,157,197,46,147,56,48,70,200,190,173,158,85,195,248,82,240,202,76,
|
||||
24,233,151,212,166,127,230,119,147,75,37,154,96,171,211,68,203,249,17,249,178,130,177,99,76,57,19,169,38,185,113,145,
|
||||
129,42,222,136,84,155,198,23,15,125,243,152,91,187,160,156,42,71,135,204,1,78,23,128,202,106,40,120,143,32,126,215,
|
||||
102,151,163,40,39,46,103,13,105,144,120,143,213,55,63,240,85,124,185,220,65,54,254,221,90,253,198,138,65,207,126,231,
|
||||
185,226,46,52,63,242,60,201,243,37,207,155,60,127,242,60,202,243,41,207,171,60,191,86,130,144,117,153,18,247,127,107,
|
||||
245,145,104,149,5,47,219,27,124,33,233,219,15,251,229,72,24,61,254,96,203,99,49,149,10,112,145,138,127,136,67,92,
|
||||
7,62,171,35,112,141,140,75,31,118,147,73,235,255,155,47,60,248,34,101,182,56,243,217,198,222,39,236,46,116,153,111,
|
||||
62,232,107,94,86,91,123,163,70,242,177,224,125,132,255,201,2,125,166,97,178,185,201,174,177,41,142,235,190,112,214,184,
|
||||
248,208,98,213,57,209,238,21,222,57,78,15,169,232,79,71,112,9,82,32,235,16,107,108,169,230,244,138,139,139,230,26,
|
||||
29,142,218,59,76,123,209,124,175,13,26,138,221,140,143,10,22,238,16,139,154,95,10,165,216,89,222,85,117,186,148,198,
|
||||
204,206,5,223,154,97,125,134,210,13,219,139,78,51,87,94,231,103,35,165,128,229,121,172,191,12,41,224,249,141,231,57,
|
||||
158,239,120,222,227,249,207,20,177,101,177,54,120,94,240,206,217,108,245,147,162,170,11,222,238,156,97,96,84,74,117,222,
|
||||
177,205,145,64,226,29,207,165,243,155,165,113,106,46,62,242,151,59,190,79,74,225,168,91,230,133,30,4,239,92,115,181,
|
||||
185,127,154,198,22,251,110,247,183,131,47,114,12,179,63,136,93,246,133,81,169,213,217,121,254,150,62,146,235,130,87,102,
|
||||
6,73,159,252,30,253,69,253,201,224,201,83,162,228,162,221,162,200,248,87,69,161,33,139,68,100,215,9,34,127,235,161,
|
||||
34,95,203,100,229,136,236,49,89,148,95,188,83,84,127,54,61,222,184,145,33,144,211,211,181,241,5,139,158,150,29,228,
|
||||
228,141,23,140,170,60,185,152,157,97,144,11,139,101,49,29,50,7,56,149,72,238,161,161,224,53,62,42,154,141,121,0,
|
||||
130,81,227,50,221,28,182,16,59,116,70,102,66,151,69,103,105,95,249,19,87,207,164,249,197,65,243,140,131,230,27,179,
|
||||
168,208,100,231,231,138,238,50,78,148,186,103,131,30,235,128,127,237,240,70,169,46,120,163,136,159,42,148,141,16,63,111,
|
||||
25,236,17,177,116,116,103,210,159,247,77,170,127,172,118,141,168,163,148,193,224,146,204,223,186,82,230,170,45,165,112,46,
|
||||
221,166,114,128,115,220,223,149,136,252,33,231,105,71,247,220,43,207,118,248,229,172,205,82,141,221,140,61,223,14,18,229,
|
||||
202,228,103,231,217,65,20,202,109,193,43,171,252,25,131,170,64,223,251,148,158,0,74,47,61,104,77,200,173,13,44,122,
|
||||
221,205,82,193,49,108,166,72,110,72,113,109,156,211,184,149,101,39,153,133,114,223,55,211,227,144,57,127,100,234,59,191,
|
||||
101,107,55,153,69,171,229,89,43,185,32,196,90,155,63,159,178,238,176,178,98,99,240,243,223,91,223,171,180,102,98,55,
|
||||
212,124,246,212,55,142,66,60,106,146,214,47,97,197,78,35,69,95,179,91,23,136,138,109,226,50,155,11,56,116,97,16,
|
||||
17,146,29,191,160,241,237,160,113,238,160,241,238,160,113,239,160,241,239,160,121,192,65,243,129,131,230,5,7,205,15,14,
|
||||
154,39,28,52,95,56,104,222,112,208,252,225,160,121,196,65,243,201,205,46,42,115,1,153,77,206,207,155,183,74,115,81,
|
||||
160,215,20,81,120,220,42,35,158,180,212,210,3,198,102,3,196,168,143,98,120,103,125,101,237,143,252,170,11,94,135,116,
|
||||
110,49,237,206,250,30,21,77,191,254,156,252,207,250,85,93,142,20,47,18,246,189,140,3,229,112,7,222,253,125,131,115,
|
||||
247,41,34,116,35,101,14,192,131,114,55,243,106,158,60,65,191,143,29,81,115,203,47,59,134,252,207,95,118,116,157,185,
|
||||
123,124,93,211,129,251,221,172,1,125,36,120,155,152,131,170,212,162,61,106,14,254,39,78,24,59,185,153,44,32,239,201,
|
||||
147,142,123,137,91,137,81,138,49,213,16,188,221,38,248,172,173,42,60,157,158,210,173,166,140,71,230,163,71,174,221,206,
|
||||
169,122,58,72,177,204,241,117,124,89,132,143,42,91,207,122,205,108,203,119,93,20,99,195,51,202,9,175,255,85,89,1,
|
||||
210,121,214,106,171,159,4,107,38,120,59,168,30,35,109,94,184,42,219,180,155,255,209,164,171,40,19,219,73,148,168,211,
|
||||
82,68,87,172,37,194,10,21,189,209,7,239,102,98,30,81,142,251,118,232,187,191,57,146,104,167,149,202,208,58,104,252,
|
||||
57,104,28,58,122,72,209,74,227,211,65,227,212,65,227,213,65,227,214,65,227,215,65,227,216,65,227,217,65,227,58,199,
|
||||
197,7,92,16,69,165,229,174,239,231,55,250,128,231,252,176,97,117,186,136,124,205,19,68,68,135,91,68,100,247,137,70,
|
||||
40,28,167,209,42,24,55,83,61,6,206,17,81,73,75,140,52,155,188,107,90,250,241,227,122,8,222,105,31,95,87,8,
|
||||
72,7,193,203,71,248,159,80,126,93,177,245,163,56,175,8,168,15,94,239,113,124,252,45,181,126,107,220,160,232,9,218,
|
||||
245,253,83,10,224,67,50,62,150,75,11,118,150,49,191,65,94,142,201,173,35,119,154,23,202,1,195,169,197,174,20,42,
|
||||
152,247,228,160,190,21,207,44,153,215,236,240,145,159,18,255,244,71,145,107,66,23,17,69,56,249,130,188,125,29,160,136,
|
||||
224,125,196,28,84,42,126,189,151,92,240,131,243,132,251,2,209,156,69,140,183,23,128,28,78,48,25,133,25,138,76,88,
|
||||
167,236,164,26,86,191,167,217,174,253,249,185,121,97,165,250,239,142,106,180,59,68,101,51,141,69,151,194,48,140,157,35,
|
||||
138,221,227,247,122,214,184,240,50,102,153,33,156,123,191,158,30,146,193,169,131,184,150,124,226,198,244,60,201,180,176,231,
|
||||
110,170,167,107,151,130,102,104,24,206,48,83,245,146,176,78,217,5,64,58,135,121,189,39,30,150,107,97,36,143,35,30,
|
||||
79,190,16,172,94,152,191,56,142,252,126,142,129,39,118,18,191,217,165,175,114,43,199,188,59,112,200,158,185,177,163,114,
|
||||
90,50,103,227,227,130,75,137,3,43,139,179,251,83,189,38,166,78,239,75,185,114,244,167,196,203,119,142,169,253,45,9,
|
||||
236,52,217,80,87,101,106,51,222,97,61,32,197,2,23,57,136,97,193,144,195,221,219,182,50,76,225,83,25,83,124,73,
|
||||
198,23,139,192,192,128,63,99,235,23,249,102,195,234,46,251,78,236,73,254,199,95,119,115,173,80,232,134,72,28,84,89,
|
||||
200,118,234,235,74,35,123,91,240,74,63,72,143,221,125,228,144,114,3,190,80,226,98,231,137,170,183,70,11,70,57,243,
|
||||
185,75,204,217,162,228,132,202,113,208,238,236,32,144,229,49,127,190,228,131,187,92,14,207,168,40,119,157,57,68,163,230,
|
||||
243,233,59,207,156,126,136,119,159,57,21,17,95,130,225,218,244,237,105,7,186,35,221,236,230,90,245,44,166,249,162,12,
|
||||
215,174,143,147,161,27,92,41,41,97,67,186,168,78,150,162,122,88,22,194,186,88,205,166,230,123,181,208,53,156,161,235,
|
||||
188,117,170,87,4,227,28,226,189,252,144,158,242,210,117,27,153,43,191,88,78,119,224,52,154,215,10,202,119,230,118,24,
|
||||
70,76,32,238,147,187,216,15,200,44,16,170,177,132,120,154,120,141,72,83,121,205,187,174,240,196,192,185,230,56,123,88,
|
||||
39,193,27,65,124,89,56,42,84,124,185,169,143,175,46,70,93,253,230,253,190,39,231,79,143,61,56,118,100,141,223,219,
|
||||
181,44,113,188,104,145,176,163,36,68,47,90,22,184,255,202,112,3,46,107,252,161,116,134,21,196,243,210,57,150,203,255,
|
||||
127,181,252,194,227,93,219,159,136,51,150,223,113,133,118,44,79,85,139,41,248,11,9,250,223,238,25,95,247,244,202,167,
|
||||
219,31,60,190,43,233,47,127,23,184,206,124,73,121,119,163,10,133,26,73,164,165,79,168,32,120,151,164,103,102,152,170,
|
||||
222,113,206,125,159,88,197,216,98,158,104,53,91,24,154,94,155,88,15,43,57,161,70,143,122,214,108,223,87,93,124,167,
|
||||
73,170,22,37,225,91,226,44,172,153,74,15,95,87,93,45,136,227,25,121,167,154,68,182,113,84,76,85,152,140,99,99,
|
||||
134,210,38,57,218,72,72,112,59,58,188,154,14,93,40,116,144,240,54,232,78,71,206,36,190,51,224,216,201,56,11,3,
|
||||
232,104,154,196,248,53,232,184,154,68,121,166,208,205,119,227,88,59,43,172,151,2,227,95,216,238,217,244,115,239,102,13,
|
||||
223,200,231,15,137,204,224,157,251,193,111,95,163,213,172,117,102,219,110,226,247,231,246,176,182,15,183,151,217,118,220,142,
|
||||
102,155,114,251,154,109,221,74,30,221,51,220,31,220,47,220,63,220,79,220,95,244,97,228,168,65,199,249,85,159,73,63,
|
||||
210,167,126,53,40,235,7,162,18,120,125,110,254,138,253,183,216,221,239,40,45,120,195,27,245,51,199,89,188,78,130,151,
|
||||
173,42,199,217,54,107,84,52,119,118,23,247,167,94,57,149,150,114,229,228,158,228,43,31,175,239,117,120,234,196,250,95,
|
||||
181,106,86,252,243,232,66,161,219,131,131,3,143,201,93,224,27,29,1,92,13,8,8,184,64,226,54,173,106,229,130,223,
|
||||
12,25,16,243,217,51,203,218,108,63,176,45,225,143,95,211,146,175,242,238,242,249,131,216,197,189,81,102,134,198,13,139,
|
||||
154,101,132,43,187,234,52,222,20,188,214,157,164,18,115,191,83,235,114,218,178,35,215,165,237,209,116,82,157,145,157,11,
|
||||
107,190,36,127,171,20,179,141,71,187,240,62,25,151,27,75,204,254,90,233,133,130,219,92,62,235,28,13,253,38,70,245,
|
||||
140,41,28,23,105,86,5,131,128,2,26,142,177,109,134,224,157,246,145,210,243,88,80,161,146,25,151,110,117,19,188,14,
|
||||
25,215,115,245,177,7,91,228,56,77,153,231,5,89,234,213,195,59,134,252,78,217,36,206,254,248,197,128,83,20,107,122,
|
||||
252,135,207,250,159,252,233,203,129,167,246,125,23,127,158,68,237,37,8,215,236,139,221,71,22,52,55,195,75,22,187,227,
|
||||
48,94,22,188,113,170,238,64,22,74,124,200,99,233,88,114,113,82,221,159,254,49,177,85,201,201,180,212,146,189,214,54,
|
||||
174,231,194,251,52,207,240,23,250,32,81,54,147,7,29,83,90,222,171,164,134,126,195,151,89,69,88,189,30,202,166,4,
|
||||
180,180,111,42,4,20,208,108,124,101,124,184,151,90,178,79,217,121,172,212,67,105,230,24,59,235,161,247,246,185,224,173,
|
||||
68,156,166,34,18,226,208,246,33,16,131,126,194,193,237,9,162,82,133,8,118,150,83,68,5,21,4,175,117,208,171,22,
|
||||
188,207,226,219,178,160,78,208,116,82,77,52,68,11,93,8,83,182,78,251,93,239,88,219,57,226,38,239,19,96,61,241,
|
||||
41,243,196,73,117,47,122,76,88,119,93,118,6,13,125,199,168,132,197,187,168,74,126,80,92,127,250,210,11,34,10,104,
|
||||
54,190,140,204,57,249,219,142,80,122,119,183,232,228,13,230,24,251,92,87,193,203,150,194,161,13,67,19,170,8,186,200,
|
||||
5,65,104,115,184,143,135,13,169,106,134,50,164,184,235,44,94,20,188,13,84,13,220,143,74,94,106,14,244,103,116,223,
|
||||
65,40,114,199,107,234,30,251,119,189,195,108,231,41,46,188,83,152,249,78,69,39,189,173,238,238,238,99,215,149,72,158,
|
||||
168,169,255,188,103,248,14,221,208,86,53,23,182,165,141,59,65,68,1,141,198,86,121,211,119,139,207,248,92,105,193,203,
|
||||
57,241,229,179,46,208,89,240,102,84,208,121,238,177,214,16,133,54,103,249,35,173,77,167,93,153,29,71,241,162,224,93,
|
||||
174,98,124,169,211,238,81,55,77,39,213,218,215,50,25,236,84,54,175,177,165,157,203,186,240,78,81,25,241,187,243,183,
|
||||
41,93,152,196,242,94,117,52,245,31,227,22,57,231,11,213,160,141,59,66,72,1,141,198,214,194,107,167,84,39,212,21,
|
||||
188,79,92,87,253,178,187,238,130,151,23,196,83,85,40,180,97,55,85,221,130,48,180,105,69,181,205,131,5,247,49,245,
|
||||
245,73,162,150,42,130,87,150,148,84,50,118,183,228,130,237,214,129,94,93,211,73,117,88,70,251,210,142,163,138,19,106,
|
||||
212,176,199,205,54,254,196,197,119,106,173,250,59,25,165,56,233,50,157,124,206,61,26,47,202,191,27,237,76,194,82,205,
|
||||
24,233,195,218,127,148,2,191,19,186,33,86,177,203,241,177,42,239,238,150,124,224,71,235,24,139,209,93,240,102,92,24,
|
||||
162,76,9,202,93,96,3,158,185,168,214,182,69,137,140,220,177,217,117,18,47,9,94,101,47,197,240,173,89,203,64,47,
|
||||
168,233,228,186,194,168,73,63,236,9,53,5,11,85,25,178,180,241,96,23,223,105,181,17,87,74,121,33,149,206,91,73,
|
||||
149,158,228,123,61,160,169,239,112,165,43,227,118,182,186,187,79,215,157,14,140,132,160,2,138,143,169,4,235,253,131,130,
|
||||
253,103,171,95,112,226,182,235,170,68,134,218,65,240,178,45,227,60,182,51,238,106,224,213,130,20,192,231,41,224,196,180,
|
||||
73,245,133,44,194,177,52,39,14,226,37,193,203,126,39,10,197,47,80,48,80,127,189,199,74,41,230,226,4,187,55,189,
|
||||
216,196,102,53,119,15,174,175,92,23,233,194,251,148,208,97,119,215,41,123,64,140,166,190,211,195,248,24,173,221,73,233,
|
||||
5,185,216,61,155,204,118,254,134,40,12,97,5,20,220,209,237,107,198,195,155,185,195,139,207,250,74,139,146,194,225,141,
|
||||
251,155,227,107,136,7,219,36,215,5,111,52,151,0,14,11,13,22,95,188,219,27,98,209,38,124,254,78,47,17,22,26,
|
||||
100,150,153,44,172,146,224,37,203,159,113,249,136,196,165,122,11,233,187,86,209,18,162,225,68,91,67,117,113,200,151,206,
|
||||
220,217,61,32,187,155,127,54,162,243,237,74,47,18,252,129,33,223,105,175,198,11,245,56,29,110,144,27,57,156,219,12,
|
||||
211,62,94,90,99,63,105,68,140,2,6,163,137,241,178,218,219,115,196,22,231,58,2,5,7,220,175,133,208,77,159,199,
|
||||
182,88,159,61,175,157,4,47,91,53,22,189,197,138,132,145,80,130,232,213,157,207,54,246,18,197,139,133,11,89,198,185,
|
||||
122,78,157,195,11,130,183,66,198,133,170,133,59,212,219,125,164,75,94,150,193,62,69,195,234,106,198,238,121,129,94,83,
|
||||
116,216,5,189,233,46,186,220,41,73,207,56,113,231,235,126,83,134,51,23,253,103,129,225,63,116,67,91,245,133,185,228,
|
||||
3,63,57,251,18,239,166,77,151,101,119,185,244,108,73,89,134,54,18,100,74,120,54,125,164,251,77,138,68,1,115,206,
|
||||
162,208,0,85,139,183,100,69,68,167,177,230,243,223,239,225,185,69,9,193,107,198,84,94,138,173,95,68,28,219,149,4,
|
||||
225,168,41,71,119,37,138,6,245,10,179,83,92,146,49,218,14,5,5,111,155,140,29,72,138,229,84,113,192,23,26,178,
|
||||
200,121,226,186,32,115,24,159,212,128,244,143,137,69,187,117,200,161,26,239,194,36,89,74,135,234,106,78,153,3,122,106,
|
||||
44,120,141,236,41,81,73,15,107,177,56,151,94,118,148,118,122,135,67,92,101,159,112,55,253,35,216,252,187,249,90,38,
|
||||
3,130,171,69,70,180,31,37,34,187,79,20,81,41,143,138,98,247,126,144,94,80,130,62,238,117,18,186,70,177,9,122,
|
||||
238,236,250,134,78,130,151,119,81,238,34,254,215,173,67,25,113,240,7,20,165,208,174,184,196,15,9,162,43,245,157,204,
|
||||
183,59,69,246,169,138,130,247,73,35,126,151,68,165,202,3,191,248,244,207,156,143,76,181,66,213,194,12,188,171,239,106,
|
||||
177,9,57,73,54,209,161,42,17,199,230,89,222,43,90,99,193,251,170,113,225,113,212,179,122,45,212,15,239,55,242,6,
|
||||
71,246,152,68,241,199,157,69,72,233,154,34,168,64,113,17,24,94,64,4,134,70,128,76,144,190,122,135,155,254,17,126,
|
||||
173,28,252,86,237,4,29,184,201,101,53,202,219,238,173,162,57,42,9,94,211,30,226,103,225,66,5,103,246,167,64,72,
|
||||
106,115,73,45,69,164,198,87,49,75,7,63,232,73,135,240,130,224,253,57,125,183,238,27,61,118,144,104,23,154,23,211,
|
||||
82,139,246,80,184,195,46,229,41,181,248,103,165,171,144,69,116,190,205,156,76,239,115,113,146,156,108,196,239,118,26,135,
|
||||
236,12,190,17,188,111,27,213,15,199,190,12,1,96,83,120,46,179,136,154,60,110,250,71,83,213,79,232,128,71,138,230,
|
||||
140,243,194,220,162,156,224,229,75,108,175,135,132,4,138,113,35,107,138,95,127,78,134,160,84,156,147,212,71,220,87,220,
|
||||
103,212,119,107,101,130,126,85,5,111,94,45,110,219,3,95,228,79,141,114,113,146,220,110,84,37,154,254,169,46,73,218,
|
||||
203,107,46,120,55,24,130,119,220,42,248,172,77,225,82,238,210,87,95,203,134,127,188,168,67,122,64,144,227,82,239,81,
|
||||
254,32,120,77,51,38,189,59,110,169,45,206,162,252,176,186,59,187,212,55,19,199,214,49,29,244,109,111,56,130,135,5,
|
||||
111,67,254,149,121,202,214,197,4,227,143,199,101,19,214,153,190,250,161,139,19,100,91,213,67,52,236,146,157,193,210,230,
|
||||
175,27,130,247,214,23,224,179,246,223,197,27,239,166,111,68,168,90,48,8,120,32,21,89,147,129,110,157,190,217,73,240,
|
||||
114,242,241,143,56,93,217,157,99,106,27,187,136,16,152,106,241,107,90,178,184,115,92,29,17,74,125,68,125,245,169,236,
|
||||
51,213,5,239,80,227,178,67,179,120,76,48,56,46,115,101,130,124,37,61,95,243,66,165,223,141,243,73,203,247,90,102,
|
||||
3,193,251,130,113,105,45,117,25,252,214,142,225,12,215,95,74,106,235,166,111,220,110,230,147,69,91,218,108,215,255,214,
|
||||
23,77,159,88,239,197,185,69,89,193,203,22,196,101,63,249,217,110,27,85,147,98,122,177,211,171,10,220,23,99,135,215,
|
||||
204,40,205,42,251,202,161,129,224,157,101,164,60,234,121,55,38,25,127,91,104,169,148,166,101,161,109,227,194,228,88,57,
|
||||
35,227,4,149,185,212,68,200,183,181,129,224,53,202,159,22,232,55,29,126,107,67,156,46,141,70,185,225,23,97,25,249,
|
||||
211,39,190,137,182,180,211,220,76,119,84,44,62,209,221,95,5,175,153,18,232,45,142,15,77,73,168,34,14,124,159,0,
|
||||
193,153,219,217,24,182,15,17,169,212,23,50,102,119,35,23,47,243,166,3,120,88,240,42,91,97,13,248,180,186,90,41,
|
||||
23,38,199,33,25,199,167,10,231,177,228,155,234,150,247,42,103,3,193,123,171,177,139,215,122,40,252,214,134,68,143,92,
|
||||
110,250,234,58,55,253,162,138,14,31,160,32,199,101,132,35,253,89,240,154,182,142,51,0,112,202,178,163,59,19,33,60,
|
||||
115,9,206,145,220,165,125,25,51,27,195,171,190,232,120,15,11,222,231,113,92,234,167,23,34,174,175,174,22,224,194,228,
|
||||
248,136,113,57,102,208,124,181,143,2,199,174,240,90,26,159,92,18,188,45,248,93,242,86,106,12,191,181,33,121,171,52,
|
||||
55,125,181,163,155,126,209,87,135,120,122,144,163,11,183,99,189,60,183,104,35,120,249,230,255,98,206,211,91,175,118,52,
|
||||
85,243,66,69,54,95,243,233,134,94,162,73,195,162,220,225,255,35,22,201,140,26,186,9,222,21,70,142,207,97,79,96,
|
||||
162,241,51,56,110,91,78,170,169,46,78,142,159,167,151,159,222,160,118,121,91,218,9,149,239,117,107,25,123,148,140,13,
|
||||
67,218,41,123,82,98,238,119,166,175,30,200,134,95,60,101,156,206,37,62,132,182,180,17,145,61,38,155,62,241,164,15,
|
||||
230,22,109,4,175,105,92,156,226,82,145,232,80,241,9,9,48,100,112,240,77,38,134,47,222,237,45,184,244,179,172,160,
|
||||
54,197,151,29,238,97,193,251,156,177,195,75,213,104,48,217,248,109,220,96,176,11,19,99,104,70,177,9,138,47,211,228,
|
||||
2,80,164,29,4,175,108,255,221,70,42,56,42,166,1,255,181,9,215,151,244,158,154,13,159,56,144,94,108,226,59,180,
|
||||
165,109,66,25,214,88,125,162,14,4,111,230,21,217,250,19,7,57,131,195,244,187,26,136,243,7,33,74,189,5,183,237,
|
||||
125,147,26,136,208,188,65,66,78,56,113,178,180,163,174,130,247,1,227,152,154,146,244,99,194,241,163,93,132,158,119,153,
|
||||
147,234,204,50,238,20,155,160,114,157,154,188,215,124,187,136,93,217,254,79,167,151,23,94,2,255,181,203,71,39,149,26,
|
||||
183,136,155,134,110,250,131,81,237,48,79,133,134,104,75,27,125,0,133,213,233,98,250,195,112,31,205,43,218,9,94,211,
|
||||
170,177,232,37,174,52,111,82,76,236,254,118,16,4,170,135,217,179,121,176,104,211,188,4,119,240,21,226,48,81,35,55,
|
||||
58,218,195,130,247,22,227,66,76,171,84,76,56,254,121,3,56,214,133,73,49,40,163,116,233,253,223,170,155,157,97,217,
|
||||
17,235,123,149,177,153,224,237,201,239,197,37,122,225,195,246,160,216,189,31,88,253,53,63,82,213,97,183,95,242,148,15,
|
||||
231,21,109,5,47,91,97,226,81,190,64,85,165,114,1,241,236,163,173,197,57,132,56,228,24,110,195,167,151,182,18,49,
|
||||
21,11,152,151,211,150,122,186,122,26,10,79,0,95,81,252,190,79,172,147,107,17,87,47,77,25,49,164,36,42,149,141,
|
||||
135,156,179,197,250,94,161,54,19,188,37,51,110,228,47,216,14,63,182,1,81,201,75,77,95,125,198,77,95,40,146,241,
|
||||
1,74,62,143,182,180,149,216,101,234,65,240,186,103,61,136,147,252,14,169,241,49,226,16,165,205,66,152,67,246,194,23,
|
||||
14,109,79,16,35,146,170,154,142,248,43,209,47,183,59,215,195,130,55,0,169,109,176,208,222,96,66,12,176,78,198,42,
|
||||
223,6,47,60,230,37,91,101,103,200,106,151,221,232,7,90,36,225,203,154,87,209,106,216,219,236,207,129,217,205,206,80,
|
||||
250,145,67,104,75,221,195,203,186,221,105,157,183,6,248,120,94,177,133,224,101,171,69,172,34,46,87,166,157,201,71,23,
|
||||
54,135,136,117,83,236,62,178,160,185,168,88,33,146,59,244,50,177,146,168,169,66,199,122,88,240,34,142,215,223,22,218,
|
||||
216,56,115,114,77,112,97,66,140,52,39,227,226,211,63,211,165,216,196,61,118,18,187,150,190,168,102,190,99,212,176,199,
|
||||
225,203,58,87,57,164,60,214,22,127,13,119,211,15,144,89,199,38,112,138,71,139,31,140,206,133,57,197,54,130,215,180,
|
||||
4,130,223,236,106,253,58,133,197,23,239,244,70,152,195,77,50,48,124,185,169,143,136,77,79,55,198,225,11,167,136,20,
|
||||
149,58,212,11,130,183,182,14,55,240,129,199,143,207,74,186,48,33,198,92,11,103,56,170,174,128,88,122,208,250,94,13,
|
||||
236,40,120,101,127,220,159,209,31,36,242,225,211,154,158,178,208,7,139,236,199,181,110,246,255,181,19,57,186,244,134,182,
|
||||
180,197,197,97,230,206,92,154,79,108,39,120,217,42,18,15,17,255,68,71,133,138,164,65,49,98,203,71,253,32,112,157,
|
||||
216,252,127,253,196,144,1,149,69,116,161,188,230,174,46,231,214,45,175,90,103,122,65,240,134,103,148,168,188,243,13,76,
|
||||
70,118,78,123,51,97,157,57,193,110,118,113,66,156,100,100,103,232,52,86,237,184,228,105,31,187,85,68,67,115,209,251,
|
||||
158,177,203,59,244,49,248,180,142,187,187,215,159,70,180,119,179,239,155,167,23,33,137,69,91,234,188,179,219,127,118,174,
|
||||
139,93,59,11,94,211,42,19,159,112,238,216,176,176,32,49,249,182,58,148,121,96,144,95,199,247,242,187,239,161,140,22,
|
||||
83,39,214,23,249,194,131,205,188,186,95,203,227,67,37,205,211,130,87,58,254,29,233,105,167,70,99,66,178,49,97,245,
|
||||
123,154,147,236,48,23,39,196,79,140,15,161,137,111,169,93,108,162,85,138,249,94,99,236,44,118,157,99,56,11,14,156,
|
||||
11,191,214,173,216,4,101,58,177,136,157,104,55,251,126,73,122,191,207,65,91,106,26,202,18,209,113,140,181,255,39,228,
|
||||
242,92,98,107,193,107,198,228,245,38,222,231,119,44,95,38,66,140,76,174,38,190,249,160,175,95,238,232,222,58,172,134,
|
||||
40,87,38,191,233,124,159,17,125,136,8,149,59,208,75,130,55,191,57,8,85,207,181,10,178,185,208,206,219,102,157,104,
|
||||
35,220,185,13,206,19,181,178,249,76,233,178,165,229,189,130,236,46,120,157,67,27,32,126,180,190,145,31,228,70,159,7,
|
||||
95,203,206,176,25,109,169,91,24,11,157,200,56,245,253,56,5,230,17,219,11,94,235,237,124,22,190,59,136,191,131,130,
|
||||
2,69,255,94,21,140,248,213,99,187,146,108,43,114,249,221,190,126,191,175,72,77,136,17,193,193,129,220,89,127,19,59,
|
||||
137,100,34,80,135,142,243,134,224,149,206,63,50,99,17,165,96,122,76,82,254,189,208,202,10,130,34,178,235,29,186,92,
|
||||
252,120,196,31,196,110,25,167,98,32,230,71,42,226,239,181,11,103,232,238,102,127,183,65,118,6,13,243,158,83,245,199,
|
||||
252,109,134,89,251,125,25,231,240,87,100,14,241,27,193,107,26,231,147,237,78,188,198,151,180,34,35,242,136,22,77,139,
|
||||
139,89,83,26,26,71,253,118,17,186,251,182,14,22,115,166,54,18,45,154,20,23,252,142,242,66,218,6,249,238,133,116,
|
||||
234,48,111,9,94,57,0,70,152,3,179,80,226,98,76,88,118,89,104,233,194,153,101,194,77,118,97,34,204,40,37,92,
|
||||
116,210,219,186,20,155,24,236,79,130,87,246,211,40,235,135,76,225,113,43,149,78,29,7,241,179,215,234,175,121,221,236,
|
||||
235,57,215,210,3,158,64,123,170,62,231,210,71,73,129,62,211,172,253,189,149,215,87,197,230,15,191,19,188,86,227,202,
|
||||
97,175,18,39,248,210,86,72,72,160,24,220,175,146,216,244,90,55,177,247,187,120,113,102,127,138,54,2,247,204,190,20,
|
||||
177,119,107,188,120,151,158,125,96,159,74,130,223,69,94,68,59,33,223,177,186,174,157,228,77,193,43,7,193,84,115,144,
|
||||
22,232,53,197,184,1,143,9,204,86,213,213,138,186,48,17,214,208,33,63,115,169,69,123,172,239,213,196,223,4,175,236,
|
||||
171,178,78,187,247,70,22,0,163,223,32,126,213,202,21,61,110,149,217,71,27,220,236,227,188,58,124,128,98,7,255,152,
|
||||
40,118,207,187,206,185,117,133,76,253,89,70,193,185,195,175,5,175,67,30,235,87,146,71,252,188,3,250,87,80,80,128,
|
||||
168,92,49,82,244,236,82,86,60,48,171,137,145,225,225,252,65,245,82,155,157,163,103,218,66,113,185,11,103,54,54,158,
|
||||
181,18,229,208,13,12,12,224,14,249,147,88,79,36,201,140,21,129,58,119,144,183,5,175,28,8,51,172,3,182,64,191,
|
||||
233,244,197,122,24,147,154,174,217,25,238,88,107,246,229,251,46,78,132,183,233,80,108,162,248,172,175,172,139,74,164,63,
|
||||
10,94,75,186,170,209,196,247,206,226,55,122,212,179,40,42,163,202,165,209,122,61,204,126,233,231,102,255,54,187,22,206,
|
||||
128,121,88,41,145,251,248,113,81,236,238,119,140,76,54,206,99,79,150,128,110,162,240,188,225,247,130,215,217,74,16,247,
|
||||
18,219,100,78,218,203,1,1,1,162,122,213,66,98,194,152,218,98,253,234,46,98,199,23,3,196,193,31,18,196,169,52,
|
||||
223,237,0,159,74,75,22,7,232,223,220,254,249,0,177,126,85,23,49,254,214,90,162,90,76,65,193,207,38,119,114,79,
|
||||
201,103,158,34,223,193,54,230,11,193,43,7,3,239,130,63,106,29,192,124,195,180,248,244,79,149,206,201,10,254,77,190,
|
||||
102,241,102,31,166,186,56,17,238,52,138,77,204,248,92,237,248,93,202,82,32,223,107,169,191,138,221,76,250,174,53,177,
|
||||
218,121,241,205,83,161,161,113,196,90,228,142,215,140,157,113,84,107,243,241,105,196,67,63,103,59,117,30,217,75,40,14,
|
||||
164,206,46,46,95,26,140,30,254,164,181,136,143,21,206,242,52,141,55,14,53,152,43,32,120,179,176,112,121,204,217,79,
|
||||
6,93,239,225,54,10,8,160,184,177,232,80,81,187,70,148,104,223,186,164,24,54,164,170,88,124,127,83,241,198,203,157,
|
||||
197,182,79,227,196,233,189,57,23,193,252,59,248,119,189,177,162,147,88,68,191,155,255,141,246,173,74,138,90,213,163,68,
|
||||
97,202,43,204,207,32,29,109,143,20,104,253,228,179,134,219,177,35,124,37,120,45,131,162,5,241,178,243,192,206,215,60,
|
||||
129,226,124,31,18,69,239,218,40,74,62,184,19,34,88,143,56,87,87,178,51,148,119,232,80,194,150,118,158,45,239,85,
|
||||
21,98,55,211,114,196,237,100,8,87,102,11,51,237,56,118,23,5,122,223,43,162,71,46,167,113,252,142,40,49,127,155,
|
||||
113,201,6,49,162,94,45,125,253,166,155,253,24,134,221,93,223,95,242,45,245,80,26,9,219,45,162,232,228,245,34,42,
|
||||
233,97,218,193,29,39,242,86,105,33,178,24,75,95,201,156,229,197,52,155,35,32,120,221,176,82,242,102,255,90,185,35,
|
||||
116,132,56,47,119,88,13,71,8,161,76,8,21,203,71,138,102,177,197,68,223,30,229,197,45,67,171,139,41,19,234,137,
|
||||
251,239,109,36,22,76,143,21,75,23,52,51,224,255,155,255,27,255,25,255,12,255,44,255,157,138,229,34,69,112,80,160,
|
||||
213,177,46,203,127,227,136,252,55,215,202,139,86,165,252,165,209,125,45,120,157,210,84,113,168,195,246,172,22,208,192,136,
|
||||
104,17,82,178,154,200,83,49,86,132,86,111,43,194,106,119,18,97,117,187,25,11,43,200,61,100,255,124,225,98,63,79,
|
||||
48,197,144,38,239,181,21,2,215,165,144,135,38,196,60,226,131,172,198,175,243,88,14,46,90,81,228,41,91,135,10,29,
|
||||
52,22,161,213,90,139,208,90,29,105,76,119,198,152,206,190,175,50,99,221,236,187,118,70,177,137,170,45,209,142,158,164,
|
||||
78,23,242,231,14,198,58,149,183,74,115,242,243,186,34,184,88,37,17,20,81,88,184,48,62,246,202,77,160,4,119,115,
|
||||
41,67,240,218,103,7,184,28,17,43,51,31,240,237,225,5,196,26,249,245,179,143,184,32,179,35,220,204,153,174,202,159,
|
||||
221,39,255,46,255,142,249,242,119,118,35,26,201,127,43,220,31,27,58,183,4,175,211,64,225,236,30,195,136,167,88,72,
|
||||
201,203,128,2,40,77,162,139,125,91,67,179,247,26,1,81,155,45,1,92,218,145,94,196,98,142,156,99,191,36,14,201,
|
||||
13,5,140,23,239,81,200,205,190,42,141,54,203,21,206,74,13,194,249,249,151,203,52,128,109,57,31,178,141,230,1,8,
|
||||
94,31,92,138,11,149,98,149,11,60,20,144,68,200,255,22,170,251,165,50,221,4,175,7,45,72,238,2,215,148,151,44,
|
||||
58,17,61,28,233,197,60,250,130,92,165,74,54,50,182,232,240,94,49,152,17,188,98,193,114,44,115,251,54,144,97,77,
|
||||
29,228,102,70,79,140,233,108,145,147,20,152,165,209,126,30,167,151,220,64,227,117,138,115,28,55,148,243,100,81,233,255,
|
||||
126,175,43,60,34,54,0,200,109,96,48,24,12,6,131,193,32,120,1,4,47,12,6,131,193,96,48,8,94,0,0,0,
|
||||
0,0,0,108,183,49,134,70,0,0,0,0,0,0,16,188,0,0,0,0,0,0,64,240,2,0,0,0,0,0,0,193,
|
||||
11,0,0,0,0,0,0,4,47,0,0,0,0,0,0,16,188,0,0,0,0,0,0,184,192,255,3,116,155,54,6,4,
|
||||
95,45,50,0,0,0,0,73,69,78,68,174,66,96,130,
|
||||
};
|
||||
}
|
||||
namespace Sprite {
|
||||
namespace SuperFamicom {
|
||||
|
||||
Loaded 100 of 7053 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user