summaryrefslogtreecommitdiff
path: root/asm/SDK/DWC/gamespy/NATify.s
blob: fdb9bea5ee793b601fe57568f2b05b6a442d1a53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global AddressToString
AddressToString:
/* 8035A44C 003560AC  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8035A450 003560B0  7C 08 02 A6 */	mflr r0
/* 8035A454 003560B4  2C 05 00 00 */	cmpwi r5, 0
/* 8035A458 003560B8  90 01 00 24 */	stw r0, 0x24(r1)
/* 8035A45C 003560BC  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8035A460 003560C0  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8035A464 003560C4  7C 9E 23 78 */	mr r30, r4
/* 8035A468 003560C8  41 82 00 0C */	beq lbl_8035A474
/* 8035A46C 003560CC  7C BF 2B 78 */	mr r31, r5
/* 8035A470 003560D0  48 00 00 20 */	b lbl_8035A490
lbl_8035A474:
/* 8035A474 003560D4  80 0D B1 30 */	lwz r0, lbl_806403F0-_SDA_BASE_(r13)
/* 8035A478 003560D8  3C A0 80 62 */	lis r5, lbl_806211E8@ha
/* 8035A47C 003560DC  38 A5 11 E8 */	addi r5, r5, lbl_806211E8@l
/* 8035A480 003560E0  68 06 00 01 */	xori r6, r0, 1
/* 8035A484 003560E4  1C 06 00 16 */	mulli r0, r6, 0x16
/* 8035A488 003560E8  90 CD B1 30 */	stw r6, lbl_806403F0-_SDA_BASE_(r13)
/* 8035A48C 003560EC  7F E5 02 14 */	add r31, r5, r0
lbl_8035A490:
/* 8035A490 003560F0  2C 03 00 00 */	cmpwi r3, 0
/* 8035A494 003560F4  41 82 00 58 */	beq lbl_8035A4EC
/* 8035A498 003560F8  2C 04 00 00 */	cmpwi r4, 0
/* 8035A49C 003560FC  41 82 00 2C */	beq lbl_8035A4C8
/* 8035A4A0 00356100  90 61 00 0C */	stw r3, 0xc(r1)
/* 8035A4A4 00356104  38 61 00 0C */	addi r3, r1, 0xc
/* 8035A4A8 00356108  4B F9 C8 71 */	bl SOInetNtoA
/* 8035A4AC 0035610C  7C 65 1B 78 */	mr r5, r3
/* 8035A4B0 00356110  7F E3 FB 78 */	mr r3, r31
/* 8035A4B4 00356114  7F C6 F3 78 */	mr r6, r30
/* 8035A4B8 00356118  38 8D 94 98 */	addi r4, r13, lbl_8063E758-_SDA_BASE_
/* 8035A4BC 0035611C  4C C6 31 82 */	crclr 6
/* 8035A4C0 00356120  4B E7 26 3D */	bl sprintf
/* 8035A4C4 00356124  48 00 00 50 */	b lbl_8035A514
lbl_8035A4C8:
/* 8035A4C8 00356128  90 61 00 08 */	stw r3, 8(r1)
/* 8035A4CC 0035612C  38 61 00 08 */	addi r3, r1, 8
/* 8035A4D0 00356130  4B F9 C8 49 */	bl SOInetNtoA
/* 8035A4D4 00356134  7C 65 1B 78 */	mr r5, r3
/* 8035A4D8 00356138  7F E3 FB 78 */	mr r3, r31
/* 8035A4DC 0035613C  38 8D 94 A0 */	addi r4, r13, lbl_8063E760-_SDA_BASE_
/* 8035A4E0 00356140  4C C6 31 82 */	crclr 6
/* 8035A4E4 00356144  4B E7 26 19 */	bl sprintf
/* 8035A4E8 00356148  48 00 00 2C */	b lbl_8035A514
lbl_8035A4EC:
/* 8035A4EC 0035614C  2C 04 00 00 */	cmpwi r4, 0
/* 8035A4F0 00356150  41 82 00 1C */	beq lbl_8035A50C
/* 8035A4F4 00356154  7F E3 FB 78 */	mr r3, r31
/* 8035A4F8 00356158  7F C5 F3 78 */	mr r5, r30
/* 8035A4FC 0035615C  38 8D 94 A4 */	addi r4, r13, lbl_8063E764-_SDA_BASE_
/* 8035A500 00356160  4C C6 31 82 */	crclr 6
/* 8035A504 00356164  4B E7 25 F9 */	bl sprintf
/* 8035A508 00356168  48 00 00 0C */	b lbl_8035A514
lbl_8035A50C:
/* 8035A50C 0035616C  38 00 00 00 */	li r0, 0
/* 8035A510 00356170  98 1F 00 00 */	stb r0, 0(r31)
lbl_8035A514:
/* 8035A514 00356174  7F E3 FB 78 */	mr r3, r31
/* 8035A518 00356178  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8035A51C 0035617C  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8035A520 00356180  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8035A524 00356184  7C 08 03 A6 */	mtlr r0
/* 8035A528 00356188  38 21 00 20 */	addi r1, r1, 0x20
/* 8035A52C 0035618C  4E 80 00 20 */	blr

.global GetLocalIP
GetLocalIP:
/* 8035A530 00356190  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8035A534 00356194  7C 08 02 A6 */	mflr r0
/* 8035A538 00356198  90 01 00 24 */	stw r0, 0x24(r1)
/* 8035A53C 0035619C  39 61 00 20 */	addi r11, r1, 0x20
/* 8035A540 003561A0  4B E6 CB E5 */	bl _savegpr_26
/* 8035A544 003561A4  3B 40 00 00 */	li r26, 0
/* 8035A548 003561A8  4B FD E3 95 */	bl getlocalhost
/* 8035A54C 003561AC  2C 03 00 00 */	cmpwi r3, 0
/* 8035A550 003561B0  7C 7E 1B 78 */	mr r30, r3
/* 8035A554 003561B4  40 82 00 0C */	bne lbl_8035A560
/* 8035A558 003561B8  38 60 00 00 */	li r3, 0
/* 8035A55C 003561BC  48 00 00 58 */	b lbl_8035A5B4
lbl_8035A560:
/* 8035A560 003561C0  3B A0 00 00 */	li r29, 0
/* 8035A564 003561C4  3F E0 7F 00 */	lis r31, 0x7f00
lbl_8035A568:
/* 8035A568 003561C8  80 7E 00 0C */	lwz r3, 0xc(r30)
/* 8035A56C 003561CC  7F 63 E8 2E */	lwzx r27, r3, r29
/* 8035A570 003561D0  2C 1B 00 00 */	cmpwi r27, 0
/* 8035A574 003561D4  41 82 00 3C */	beq lbl_8035A5B0
/* 8035A578 003561D8  83 9B 00 00 */	lwz r28, 0(r27)
/* 8035A57C 003561DC  38 7F 00 01 */	addi r3, r31, 1
/* 8035A580 003561E0  4B F9 C7 F9 */	bl SOHtoNl
/* 8035A584 003561E4  7C 1C 18 40 */	cmplw r28, r3
/* 8035A588 003561E8  41 82 00 20 */	beq lbl_8035A5A8
/* 8035A58C 003561EC  7F 9A E3 78 */	mr r26, r28
/* 8035A590 003561F0  7F 63 DB 78 */	mr r3, r27
/* 8035A594 003561F4  4B FD E4 FD */	bl IsPrivateIP
/* 8035A598 003561F8  2C 03 00 00 */	cmpwi r3, 0
/* 8035A59C 003561FC  41 82 00 0C */	beq lbl_8035A5A8
/* 8035A5A0 00356200  7F 83 E3 78 */	mr r3, r28
/* 8035A5A4 00356204  48 00 00 10 */	b lbl_8035A5B4
lbl_8035A5A8:
/* 8035A5A8 00356208  3B BD 00 04 */	addi r29, r29, 4
/* 8035A5AC 0035620C  4B FF FF BC */	b lbl_8035A568
lbl_8035A5B0:
/* 8035A5B0 00356210  7F 43 D3 78 */	mr r3, r26
lbl_8035A5B4:
/* 8035A5B4 00356214  39 61 00 20 */	addi r11, r1, 0x20
/* 8035A5B8 00356218  4B E6 CB B9 */	bl _restgpr_26
/* 8035A5BC 0035621C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8035A5C0 00356220  7C 08 03 A6 */	mtlr r0
/* 8035A5C4 00356224  38 21 00 20 */	addi r1, r1, 0x20
/* 8035A5C8 00356228  4E 80 00 20 */	blr

.global Think
Think:
/* 8035A5CC 0035622C  94 21 FF 60 */	stwu r1, -0xa0(r1)
/* 8035A5D0 00356230  7C 08 02 A6 */	mflr r0
/* 8035A5D4 00356234  90 01 00 A4 */	stw r0, 0xa4(r1)
/* 8035A5D8 00356238  39 61 00 A0 */	addi r11, r1, 0xa0
/* 8035A5DC 0035623C  4B E6 CB 3D */	bl _savegpr_23
/* 8035A5E0 00356240  80 0D B1 4C */	lwz r0, lbl_8064040C-_SDA_BASE_(r13)
/* 8035A5E4 00356244  38 A0 00 08 */	li r5, 8
/* 8035A5E8 00356248  90 A1 00 0C */	stw r5, 0xc(r1)
/* 8035A5EC 0035624C  7C 78 1B 78 */	mr r24, r3
/* 8035A5F0 00356250  2C 00 00 00 */	cmpwi r0, 0
/* 8035A5F4 00356254  7C 99 23 78 */	mr r25, r4
/* 8035A5F8 00356258  41 82 00 54 */	beq lbl_8035A64C
/* 8035A5FC 0035625C  80 0D B1 48 */	lwz r0, lbl_80640408-_SDA_BASE_(r13)
/* 8035A600 00356260  2C 00 00 00 */	cmpwi r0, 0
/* 8035A604 00356264  41 82 00 48 */	beq lbl_8035A64C
/* 8035A608 00356268  80 0D B1 44 */	lwz r0, lbl_80640404-_SDA_BASE_(r13)
/* 8035A60C 0035626C  2C 00 00 00 */	cmpwi r0, 0
/* 8035A610 00356270  41 82 00 3C */	beq lbl_8035A64C
/* 8035A614 00356274  80 0D B1 40 */	lwz r0, lbl_80640400-_SDA_BASE_(r13)
/* 8035A618 00356278  2C 00 00 00 */	cmpwi r0, 0
/* 8035A61C 0035627C  41 82 00 30 */	beq lbl_8035A64C
/* 8035A620 00356280  80 0D B1 3C */	lwz r0, lbl_806403FC-_SDA_BASE_(r13)
/* 8035A624 00356284  2C 00 00 00 */	cmpwi r0, 0
/* 8035A628 00356288  41 82 00 24 */	beq lbl_8035A64C
/* 8035A62C 0035628C  80 0D B1 38 */	lwz r0, lbl_806403F8-_SDA_BASE_(r13)
/* 8035A630 00356290  2C 00 00 00 */	cmpwi r0, 0
/* 8035A634 00356294  41 82 00 18 */	beq lbl_8035A64C
/* 8035A638 00356298  80 0D B1 34 */	lwz r0, lbl_806403F4-_SDA_BASE_(r13)
/* 8035A63C 0035629C  2C 00 00 00 */	cmpwi r0, 0
/* 8035A640 003562A0  41 82 00 0C */	beq lbl_8035A64C
/* 8035A644 003562A4  38 60 00 00 */	li r3, 0
/* 8035A648 003562A8  48 00 02 90 */	b lbl_8035A8D8
lbl_8035A64C:
/* 8035A64C 003562AC  2C 03 FF FF */	cmpwi r3, -1
/* 8035A650 003562B0  41 82 02 84 */	beq lbl_8035A8D4
/* 8035A654 003562B4  3F 40 80 62 */	lis r26, lbl_80621218@ha
/* 8035A658 003562B8  3B A0 00 01 */	li r29, 1
/* 8035A65C 003562BC  3B 9A 12 18 */	addi r28, r26, lbl_80621218@l
/* 8035A660 003562C0  3B C0 00 00 */	li r30, 0
/* 8035A664 003562C4  3F 60 80 64 */	lis r27, 0x8064
/* 8035A668 003562C8  3B E0 00 08 */	li r31, 8
lbl_8035A66C:
/* 8035A66C 003562CC  7F 03 C3 78 */	mr r3, r24
/* 8035A670 003562D0  4B FD E1 DD */	bl CanReceiveOnSocket
/* 8035A674 003562D4  2C 03 00 00 */	cmpwi r3, 0
/* 8035A678 003562D8  41 82 02 5C */	beq lbl_8035A8D4
/* 8035A67C 003562DC  7F 03 C3 78 */	mr r3, r24
/* 8035A680 003562E0  38 9A 12 18 */	addi r4, r26, 0x1218
/* 8035A684 003562E4  38 E1 00 18 */	addi r7, r1, 0x18
/* 8035A688 003562E8  39 01 00 0C */	addi r8, r1, 0xc
/* 8035A68C 003562EC  38 A0 02 00 */	li r5, 0x200
/* 8035A690 003562F0  38 C0 00 00 */	li r6, 0
/* 8035A694 003562F4  4B FD D7 71 */	bl recvfrom
/* 8035A698 003562F8  2C 03 FF FF */	cmpwi r3, -1
/* 8035A69C 003562FC  7C 77 1B 78 */	mr r23, r3
/* 8035A6A0 00356300  40 82 00 10 */	bne lbl_8035A6B0
/* 8035A6A4 00356304  7F 03 C3 78 */	mr r3, r24
/* 8035A6A8 00356308  4B FD D9 01 */	bl GOAGetLastError
/* 8035A6AC 0035630C  48 00 02 28 */	b lbl_8035A8D4
lbl_8035A6B0:
/* 8035A6B0 00356310  38 7A 12 18 */	addi r3, r26, 0x1218
/* 8035A6B4 00356314  38 9B E7 68 */	addi r4, r27, -6296
/* 8035A6B8 00356318  38 A0 00 06 */	li r5, 6
/* 8035A6BC 0035631C  4B E6 FC DD */	bl memcmp
/* 8035A6C0 00356320  2C 03 00 00 */	cmpwi r3, 0
/* 8035A6C4 00356324  41 82 00 0C */	beq lbl_8035A6D0
/* 8035A6C8 00356328  38 60 00 01 */	li r3, 1
/* 8035A6CC 0035632C  48 00 02 0C */	b lbl_8035A8D8
lbl_8035A6D0:
/* 8035A6D0 00356330  2C 17 00 15 */	cmpwi r23, 0x15
/* 8035A6D4 00356334  88 1C 00 07 */	lbz r0, 7(r28)
/* 8035A6D8 00356338  40 80 00 0C */	bge lbl_8035A6E4
/* 8035A6DC 0035633C  38 60 00 01 */	li r3, 1
/* 8035A6E0 00356340  48 00 01 F8 */	b lbl_8035A8D8
lbl_8035A6E4:
/* 8035A6E4 00356344  28 00 00 02 */	cmplwi r0, 2
/* 8035A6E8 00356348  40 82 00 B0 */	bne lbl_8035A798
/* 8035A6EC 0035634C  7F 84 E3 78 */	mr r4, r28
/* 8035A6F0 00356350  38 61 00 20 */	addi r3, r1, 0x20
/* 8035A6F4 00356354  38 A0 00 15 */	li r5, 0x15
/* 8035A6F8 00356358  4B CA 99 09 */	bl memcpy
/* 8035A6FC 0035635C  88 01 00 2C */	lbz r0, 0x2c(r1)
/* 8035A700 00356360  2C 00 00 02 */	cmpwi r0, 2
/* 8035A704 00356364  41 82 00 44 */	beq lbl_8035A748
/* 8035A708 00356368  40 80 00 10 */	bge lbl_8035A718
/* 8035A70C 0035636C  2C 00 00 01 */	cmpwi r0, 1
/* 8035A710 00356370  40 80 00 14 */	bge lbl_8035A724
/* 8035A714 00356374  48 00 01 B8 */	b lbl_8035A8CC
lbl_8035A718:
/* 8035A718 00356378  2C 00 00 04 */	cmpwi r0, 4
/* 8035A71C 0035637C  40 80 01 B0 */	bge lbl_8035A8CC
/* 8035A720 00356380  48 00 00 50 */	b lbl_8035A770
lbl_8035A724:
/* 8035A724 00356384  93 AD B1 4C */	stw r29, lbl_8064040C-_SDA_BASE_(r13)
/* 8035A728 00356388  A0 61 00 1A */	lhz r3, 0x1a(r1)
/* 8035A72C 0035638C  4B F9 C6 45 */	bl SONtoHs
/* 8035A730 00356390  7C 60 1B 78 */	mr r0, r3
/* 8035A734 00356394  80 61 00 1C */	lwz r3, 0x1c(r1)
/* 8035A738 00356398  54 04 04 3E */	clrlwi r4, r0, 0x10
/* 8035A73C 0035639C  38 A0 00 00 */	li r5, 0
/* 8035A740 003563A0  4B FF FD 0D */	bl AddressToString
/* 8035A744 003563A4  48 00 01 88 */	b lbl_8035A8CC
lbl_8035A748:
/* 8035A748 003563A8  93 D9 00 80 */	stw r30, 0x80(r25)
/* 8035A74C 003563AC  93 AD B1 48 */	stw r29, lbl_80640408-_SDA_BASE_(r13)
/* 8035A750 003563B0  A0 61 00 1A */	lhz r3, 0x1a(r1)
/* 8035A754 003563B4  4B F9 C6 1D */	bl SONtoHs
/* 8035A758 003563B8  7C 60 1B 78 */	mr r0, r3
/* 8035A75C 003563BC  80 61 00 1C */	lwz r3, 0x1c(r1)
/* 8035A760 003563C0  54 04 04 3E */	clrlwi r4, r0, 0x10
/* 8035A764 003563C4  38 A0 00 00 */	li r5, 0
/* 8035A768 003563C8  4B FF FC E5 */	bl AddressToString
/* 8035A76C 003563CC  48 00 01 60 */	b lbl_8035A8CC
lbl_8035A770:
/* 8035A770 003563D0  93 D9 00 84 */	stw r30, 0x84(r25)
/* 8035A774 003563D4  93 AD B1 44 */	stw r29, lbl_80640404-_SDA_BASE_(r13)
/* 8035A778 003563D8  A0 61 00 1A */	lhz r3, 0x1a(r1)
/* 8035A77C 003563DC  4B F9 C5 F5 */	bl SONtoHs
/* 8035A780 003563E0  7C 60 1B 78 */	mr r0, r3
/* 8035A784 003563E4  80 61 00 1C */	lwz r3, 0x1c(r1)
/* 8035A788 003563E8  54 04 04 3E */	clrlwi r4, r0, 0x10
/* 8035A78C 003563EC  38 A0 00 00 */	li r5, 0
/* 8035A790 003563F0  4B FF FC BD */	bl AddressToString
/* 8035A794 003563F4  48 00 01 38 */	b lbl_8035A8CC
lbl_8035A798:
/* 8035A798 003563F8  28 00 00 0B */	cmplwi r0, 0xb
/* 8035A79C 003563FC  40 82 01 30 */	bne lbl_8035A8CC
/* 8035A7A0 00356400  7F 84 E3 78 */	mr r4, r28
/* 8035A7A4 00356404  38 61 00 20 */	addi r3, r1, 0x20
/* 8035A7A8 00356408  38 A0 00 15 */	li r5, 0x15
/* 8035A7AC 0035640C  4B CA 98 55 */	bl memcpy
/* 8035A7B0 00356410  80 61 00 28 */	lwz r3, 0x28(r1)
/* 8035A7B4 00356414  4B F9 C5 B9 */	bl SONtoHl
/* 8035A7B8 00356418  2C 03 00 02 */	cmpwi r3, 2
/* 8035A7BC 0035641C  90 61 00 28 */	stw r3, 0x28(r1)
/* 8035A7C0 00356420  41 82 00 3C */	beq lbl_8035A7FC
/* 8035A7C4 00356424  40 80 00 14 */	bge lbl_8035A7D8
/* 8035A7C8 00356428  2C 03 00 00 */	cmpwi r3, 0
/* 8035A7CC 0035642C  41 82 00 18 */	beq lbl_8035A7E4
/* 8035A7D0 00356430  40 80 00 24 */	bge lbl_8035A7F4
/* 8035A7D4 00356434  48 00 00 2C */	b lbl_8035A800
lbl_8035A7D8:
/* 8035A7D8 00356438  2C 03 00 04 */	cmpwi r3, 4
/* 8035A7DC 0035643C  40 80 00 24 */	bge lbl_8035A800
/* 8035A7E0 00356440  48 00 00 0C */	b lbl_8035A7EC
lbl_8035A7E4:
/* 8035A7E4 00356444  93 AD B1 40 */	stw r29, lbl_80640400-_SDA_BASE_(r13)
/* 8035A7E8 00356448  48 00 00 18 */	b lbl_8035A800
lbl_8035A7EC:
/* 8035A7EC 0035644C  93 AD B1 3C */	stw r29, lbl_806403FC-_SDA_BASE_(r13)
/* 8035A7F0 00356450  48 00 00 10 */	b lbl_8035A800
lbl_8035A7F4:
/* 8035A7F4 00356454  93 AD B1 38 */	stw r29, lbl_806403F8-_SDA_BASE_(r13)
/* 8035A7F8 00356458  48 00 00 08 */	b lbl_8035A800
lbl_8035A7FC:
/* 8035A7FC 0035645C  93 AD B1 34 */	stw r29, lbl_806403F4-_SDA_BASE_(r13)
lbl_8035A800:
/* 8035A800 00356460  4B FF FD 31 */	bl GetLocalIP
/* 8035A804 00356464  80 01 00 28 */	lwz r0, 0x28(r1)
/* 8035A808 00356468  38 81 00 10 */	addi r4, r1, 0x10
/* 8035A80C 0035646C  38 A1 00 08 */	addi r5, r1, 8
/* 8035A810 00356470  54 00 20 36 */	slwi r0, r0, 4
/* 8035A814 00356474  7C D9 02 14 */	add r6, r25, r0
/* 8035A818 00356478  90 66 00 94 */	stw r3, 0x94(r6)
/* 8035A81C 0035647C  7F 03 C3 78 */	mr r3, r24
/* 8035A820 00356480  93 E1 00 08 */	stw r31, 8(r1)
/* 8035A824 00356484  4B FD D6 F1 */	bl getsockname
/* 8035A828 00356488  2C 03 FF FF */	cmpwi r3, -1
/* 8035A82C 0035648C  40 82 00 0C */	bne lbl_8035A838
/* 8035A830 00356490  38 60 00 00 */	li r3, 0
/* 8035A834 00356494  48 00 00 08 */	b lbl_8035A83C
lbl_8035A838:
/* 8035A838 00356498  A0 61 00 12 */	lhz r3, 0x12(r1)
lbl_8035A83C:
/* 8035A83C 0035649C  4B F9 C5 35 */	bl SONtoHs
/* 8035A840 003564A0  80 01 00 28 */	lwz r0, 0x28(r1)
/* 8035A844 003564A4  54 00 20 36 */	slwi r0, r0, 4
/* 8035A848 003564A8  7C 99 02 14 */	add r4, r25, r0
/* 8035A84C 003564AC  B0 64 00 98 */	sth r3, 0x98(r4)
/* 8035A850 003564B0  80 01 00 28 */	lwz r0, 0x28(r1)
/* 8035A854 003564B4  80 81 00 2F */	lwz r4, 0x2f(r1)
/* 8035A858 003564B8  54 00 20 36 */	slwi r0, r0, 4
/* 8035A85C 003564BC  7C 79 02 14 */	add r3, r25, r0
/* 8035A860 003564C0  90 83 00 9C */	stw r4, 0x9c(r3)
/* 8035A864 003564C4  A0 61 00 33 */	lhz r3, 0x33(r1)
/* 8035A868 003564C8  4B F9 C5 09 */	bl SONtoHs
/* 8035A86C 003564CC  80 01 00 28 */	lwz r0, 0x28(r1)
/* 8035A870 003564D0  54 00 20 36 */	slwi r0, r0, 4
/* 8035A874 003564D4  7C 99 02 14 */	add r4, r25, r0
/* 8035A878 003564D8  B0 64 00 A0 */	sth r3, 0xa0(r4)
/* 8035A87C 003564DC  A0 61 00 1A */	lhz r3, 0x1a(r1)
/* 8035A880 003564E0  4B F9 C4 F1 */	bl SONtoHs
/* 8035A884 003564E4  7C 60 1B 78 */	mr r0, r3
/* 8035A888 003564E8  80 61 00 1C */	lwz r3, 0x1c(r1)
/* 8035A88C 003564EC  54 04 04 3E */	clrlwi r4, r0, 0x10
/* 8035A890 003564F0  38 A0 00 00 */	li r5, 0
/* 8035A894 003564F4  4B FF FB B9 */	bl AddressToString
/* 8035A898 003564F8  80 01 00 28 */	lwz r0, 0x28(r1)
/* 8035A89C 003564FC  54 00 20 36 */	slwi r0, r0, 4
/* 8035A8A0 00356500  7C 19 02 14 */	add r0, r25, r0
/* 8035A8A4 00356504  36 E0 00 94 */	addic. r23, r0, 0x94
/* 8035A8A8 00356508  41 82 00 24 */	beq lbl_8035A8CC
/* 8035A8AC 0035650C  80 77 00 00 */	lwz r3, 0(r23)
/* 8035A8B0 00356510  38 A0 00 00 */	li r5, 0
/* 8035A8B4 00356514  A0 97 00 04 */	lhz r4, 4(r23)
/* 8035A8B8 00356518  4B FF FB 95 */	bl AddressToString
/* 8035A8BC 0035651C  80 77 00 08 */	lwz r3, 8(r23)
/* 8035A8C0 00356520  38 A0 00 00 */	li r5, 0
/* 8035A8C4 00356524  A0 97 00 0C */	lhz r4, 0xc(r23)
/* 8035A8C8 00356528  4B FF FB 85 */	bl AddressToString
lbl_8035A8CC:
/* 8035A8CC 0035652C  2C 18 FF FF */	cmpwi r24, -1
/* 8035A8D0 00356530  40 82 FD 9C */	bne lbl_8035A66C
lbl_8035A8D4:
/* 8035A8D4 00356534  38 60 00 01 */	li r3, 1
lbl_8035A8D8:
/* 8035A8D8 00356538  39 61 00 A0 */	addi r11, r1, 0xa0
/* 8035A8DC 0035653C  4B E6 C8 89 */	bl _restgpr_23
/* 8035A8E0 00356540  80 01 00 A4 */	lwz r0, 0xa4(r1)
/* 8035A8E4 00356544  7C 08 03 A6 */	mtlr r0
/* 8035A8E8 00356548  38 21 00 A0 */	addi r1, r1, 0xa0
/* 8035A8EC 0035654C  4E 80 00 20 */	blr

.global NatifyThink
NatifyThink:
/* 8035A8F0 00356550  4B FF FC DC */	b Think

.global DetermineNatType
DetermineNatType:
/* 8035A8F4 00356554  80 C3 00 9C */	lwz r6, 0x9c(r3)
/* 8035A8F8 00356558  38 A0 00 06 */	li r5, 6
/* 8035A8FC 0035655C  38 80 00 04 */	li r4, 4
/* 8035A900 00356560  38 00 00 01 */	li r0, 1
/* 8035A904 00356564  2C 06 00 00 */	cmpwi r6, 0
/* 8035A908 00356568  90 A3 00 8C */	stw r5, 0x8c(r3)
/* 8035A90C 0035656C  90 83 00 88 */	stw r4, 0x88(r3)
/* 8035A910 00356570  90 03 00 D4 */	stw r0, 0xd4(r3)
/* 8035A914 00356574  41 82 00 1C */	beq lbl_8035A930
/* 8035A918 00356578  80 03 00 AC */	lwz r0, 0xac(r3)
/* 8035A91C 0035657C  2C 00 00 00 */	cmpwi r0, 0
/* 8035A920 00356580  41 82 00 10 */	beq lbl_8035A930
/* 8035A924 00356584  80 03 00 BC */	lwz r0, 0xbc(r3)
/* 8035A928 00356588  2C 00 00 00 */	cmpwi r0, 0
/* 8035A92C 0035658C  40 82 00 0C */	bne lbl_8035A938
lbl_8035A930:
/* 8035A930 00356590  38 60 00 00 */	li r3, 0
/* 8035A934 00356594  4E 80 00 20 */	blr
lbl_8035A938:
/* 8035A938 00356598  80 A3 00 84 */	lwz r5, 0x84(r3)
/* 8035A93C 0035659C  2C 05 00 00 */	cmpwi r5, 0
/* 8035A940 003565A0  40 82 00 28 */	bne lbl_8035A968
/* 8035A944 003565A4  80 03 00 80 */	lwz r0, 0x80(r3)
/* 8035A948 003565A8  2C 00 00 00 */	cmpwi r0, 0
/* 8035A94C 003565AC  40 82 00 1C */	bne lbl_8035A968
/* 8035A950 003565B0  80 03 00 94 */	lwz r0, 0x94(r3)
/* 8035A954 003565B4  7C 06 00 40 */	cmplw r6, r0
/* 8035A958 003565B8  40 82 00 10 */	bne lbl_8035A968
/* 8035A95C 003565BC  38 00 00 00 */	li r0, 0
/* 8035A960 003565C0  90 03 00 8C */	stw r0, 0x8c(r3)
/* 8035A964 003565C4  48 00 01 80 */	b lbl_8035AAE4
lbl_8035A968:
/* 8035A968 003565C8  80 03 00 94 */	lwz r0, 0x94(r3)
/* 8035A96C 003565CC  7C 06 00 40 */	cmplw r6, r0
/* 8035A970 003565D0  40 82 00 10 */	bne lbl_8035A980
/* 8035A974 003565D4  38 00 00 01 */	li r0, 1
/* 8035A978 003565D8  90 03 00 8C */	stw r0, 0x8c(r3)
/* 8035A97C 003565DC  48 00 01 68 */	b lbl_8035AAE4
lbl_8035A980:
/* 8035A980 003565E0  80 C3 00 80 */	lwz r6, 0x80(r3)
/* 8035A984 003565E4  2C 06 00 00 */	cmpwi r6, 0
/* 8035A988 003565E8  40 82 00 40 */	bne lbl_8035A9C8
/* 8035A98C 003565EC  2C 05 00 00 */	cmpwi r5, 0
/* 8035A990 003565F0  40 82 00 38 */	bne lbl_8035A9C8
/* 8035A994 003565F4  A0 83 00 B0 */	lhz r4, 0xb0(r3)
/* 8035A998 003565F8  A0 03 00 C0 */	lhz r0, 0xc0(r3)
/* 8035A99C 003565FC  7C 04 00 50 */	subf r0, r4, r0
/* 8035A9A0 00356600  7C 04 FE 70 */	srawi r4, r0, 0x1f
/* 8035A9A4 00356604  7C 80 02 78 */	xor r0, r4, r0
/* 8035A9A8 00356608  7C 04 00 50 */	subf r0, r4, r0
/* 8035A9AC 0035660C  2C 00 00 01 */	cmpwi r0, 1
/* 8035A9B0 00356610  41 80 00 18 */	blt lbl_8035A9C8
/* 8035A9B4 00356614  38 80 00 05 */	li r4, 5
/* 8035A9B8 00356618  38 00 00 00 */	li r0, 0
/* 8035A9BC 0035661C  90 83 00 8C */	stw r4, 0x8c(r3)
/* 8035A9C0 00356620  90 03 00 88 */	stw r0, 0x88(r3)
/* 8035A9C4 00356624  48 00 01 20 */	b lbl_8035AAE4
lbl_8035A9C8:
/* 8035A9C8 00356628  2C 06 00 00 */	cmpwi r6, 0
/* 8035A9CC 0035662C  41 82 00 40 */	beq lbl_8035AA0C
/* 8035A9D0 00356630  2C 05 00 00 */	cmpwi r5, 0
/* 8035A9D4 00356634  40 82 00 38 */	bne lbl_8035AA0C
/* 8035A9D8 00356638  A0 83 00 B0 */	lhz r4, 0xb0(r3)
/* 8035A9DC 0035663C  A0 03 00 C0 */	lhz r0, 0xc0(r3)
/* 8035A9E0 00356640  7C 04 00 50 */	subf r0, r4, r0
/* 8035A9E4 00356644  7C 04 FE 70 */	srawi r4, r0, 0x1f
/* 8035A9E8 00356648  7C 80 02 78 */	xor r0, r4, r0
/* 8035A9EC 0035664C  7C 04 00 50 */	subf r0, r4, r0
/* 8035A9F0 00356650  2C 00 00 01 */	cmpwi r0, 1
/* 8035A9F4 00356654  41 80 00 18 */	blt lbl_8035AA0C
/* 8035A9F8 00356658  38 80 00 05 */	li r4, 5
/* 8035A9FC 0035665C  38 00 00 02 */	li r0, 2
/* 8035AA00 00356660  90 83 00 8C */	stw r4, 0x8c(r3)
/* 8035AA04 00356664  90 03 00 88 */	stw r0, 0x88(r3)
/* 8035AA08 00356668  48 00 00 DC */	b lbl_8035AAE4
lbl_8035AA0C:
/* 8035AA0C 0035666C  2C 06 00 00 */	cmpwi r6, 0
/* 8035AA10 00356670  40 82 00 40 */	bne lbl_8035AA50
/* 8035AA14 00356674  2C 05 00 00 */	cmpwi r5, 0
/* 8035AA18 00356678  41 82 00 38 */	beq lbl_8035AA50
/* 8035AA1C 0035667C  A0 83 00 B0 */	lhz r4, 0xb0(r3)
/* 8035AA20 00356680  A0 03 00 C0 */	lhz r0, 0xc0(r3)
/* 8035AA24 00356684  7C 04 00 50 */	subf r0, r4, r0
/* 8035AA28 00356688  7C 04 FE 70 */	srawi r4, r0, 0x1f
/* 8035AA2C 0035668C  7C 80 02 78 */	xor r0, r4, r0
/* 8035AA30 00356690  7C 04 00 50 */	subf r0, r4, r0
/* 8035AA34 00356694  2C 00 00 01 */	cmpwi r0, 1
/* 8035AA38 00356698  41 80 00 18 */	blt lbl_8035AA50
/* 8035AA3C 0035669C  38 80 00 05 */	li r4, 5
/* 8035AA40 003566A0  38 00 00 03 */	li r0, 3
/* 8035AA44 003566A4  90 83 00 8C */	stw r4, 0x8c(r3)
/* 8035AA48 003566A8  90 03 00 88 */	stw r0, 0x88(r3)
/* 8035AA4C 003566AC  48 00 00 98 */	b lbl_8035AAE4
lbl_8035AA50:
/* 8035AA50 003566B0  2C 06 00 00 */	cmpwi r6, 0
/* 8035AA54 003566B4  41 82 00 40 */	beq lbl_8035AA94
/* 8035AA58 003566B8  2C 05 00 00 */	cmpwi r5, 0
/* 8035AA5C 003566BC  41 82 00 38 */	beq lbl_8035AA94
/* 8035AA60 003566C0  A0 83 00 B0 */	lhz r4, 0xb0(r3)
/* 8035AA64 003566C4  A0 03 00 C0 */	lhz r0, 0xc0(r3)
/* 8035AA68 003566C8  7C 04 00 50 */	subf r0, r4, r0
/* 8035AA6C 003566CC  7C 04 FE 70 */	srawi r4, r0, 0x1f
/* 8035AA70 003566D0  7C 80 02 78 */	xor r0, r4, r0
/* 8035AA74 003566D4  7C 04 00 50 */	subf r0, r4, r0
/* 8035AA78 003566D8  2C 00 00 01 */	cmpwi r0, 1
/* 8035AA7C 003566DC  41 80 00 18 */	blt lbl_8035AA94
/* 8035AA80 003566E0  38 80 00 05 */	li r4, 5
/* 8035AA84 003566E4  38 00 00 01 */	li r0, 1
/* 8035AA88 003566E8  90 83 00 8C */	stw r4, 0x8c(r3)
/* 8035AA8C 003566EC  90 03 00 88 */	stw r0, 0x88(r3)
/* 8035AA90 003566F0  48 00 00 54 */	b lbl_8035AAE4
lbl_8035AA94:
/* 8035AA94 003566F4  2C 85 00 00 */	cmpwi cr1, r5, 0
/* 8035AA98 003566F8  41 86 00 10 */	beq cr1, lbl_8035AAA8
/* 8035AA9C 003566FC  38 00 00 04 */	li r0, 4
/* 8035AAA0 00356700  90 03 00 8C */	stw r0, 0x8c(r3)
/* 8035AAA4 00356704  48 00 00 40 */	b lbl_8035AAE4
lbl_8035AAA8:
/* 8035AAA8 00356708  2C 06 00 00 */	cmpwi r6, 0
/* 8035AAAC 0035670C  41 82 00 14 */	beq lbl_8035AAC0
/* 8035AAB0 00356710  40 86 00 10 */	bne cr1, lbl_8035AAC0
/* 8035AAB4 00356714  38 00 00 03 */	li r0, 3
/* 8035AAB8 00356718  90 03 00 8C */	stw r0, 0x8c(r3)
/* 8035AABC 0035671C  48 00 00 28 */	b lbl_8035AAE4
lbl_8035AAC0:
/* 8035AAC0 00356720  2C 06 00 00 */	cmpwi r6, 0
/* 8035AAC4 00356724  40 82 00 18 */	bne lbl_8035AADC
/* 8035AAC8 00356728  2C 05 00 00 */	cmpwi r5, 0
/* 8035AACC 0035672C  40 82 00 10 */	bne lbl_8035AADC
/* 8035AAD0 00356730  38 00 00 02 */	li r0, 2
/* 8035AAD4 00356734  90 03 00 8C */	stw r0, 0x8c(r3)
/* 8035AAD8 00356738  48 00 00 0C */	b lbl_8035AAE4
lbl_8035AADC:
/* 8035AADC 0035673C  38 00 00 06 */	li r0, 6
/* 8035AAE0 00356740  90 03 00 8C */	stw r0, 0x8c(r3)
lbl_8035AAE4:
/* 8035AAE4 00356744  A0 C3 00 98 */	lhz r6, 0x98(r3)
/* 8035AAE8 00356748  A0 A3 00 A0 */	lhz r5, 0xa0(r3)
/* 8035AAEC 0035674C  7C 05 30 40 */	cmplw r5, r6
/* 8035AAF0 00356750  40 82 00 30 */	bne lbl_8035AB20
/* 8035AAF4 00356754  A0 83 00 B0 */	lhz r4, 0xb0(r3)
/* 8035AAF8 00356758  A0 03 00 A8 */	lhz r0, 0xa8(r3)
/* 8035AAFC 0035675C  7C 04 00 40 */	cmplw r4, r0
/* 8035AB00 00356760  40 82 00 20 */	bne lbl_8035AB20
/* 8035AB04 00356764  A0 83 00 C0 */	lhz r4, 0xc0(r3)
/* 8035AB08 00356768  A0 03 00 B8 */	lhz r0, 0xb8(r3)
/* 8035AB0C 0035676C  7C 04 00 40 */	cmplw r4, r0
/* 8035AB10 00356770  40 82 00 10 */	bne lbl_8035AB20
/* 8035AB14 00356774  38 00 00 01 */	li r0, 1
/* 8035AB18 00356778  90 03 00 90 */	stw r0, 0x90(r3)
/* 8035AB1C 0035677C  48 00 00 70 */	b lbl_8035AB8C
lbl_8035AB20:
/* 8035AB20 00356780  A0 83 00 B0 */	lhz r4, 0xb0(r3)
/* 8035AB24 00356784  7C 05 20 40 */	cmplw r5, r4
/* 8035AB28 00356788  40 82 00 1C */	bne lbl_8035AB44
/* 8035AB2C 0035678C  A0 03 00 C0 */	lhz r0, 0xc0(r3)
/* 8035AB30 00356790  7C 04 00 40 */	cmplw r4, r0
/* 8035AB34 00356794  40 82 00 10 */	bne lbl_8035AB44
/* 8035AB38 00356798  38 00 00 02 */	li r0, 2
/* 8035AB3C 0035679C  90 03 00 90 */	stw r0, 0x90(r3)
/* 8035AB40 003567A0  48 00 00 4C */	b lbl_8035AB8C
lbl_8035AB44:
/* 8035AB44 003567A4  7C 05 30 40 */	cmplw r5, r6
/* 8035AB48 003567A8  40 82 00 20 */	bne lbl_8035AB68
/* 8035AB4C 003567AC  A0 03 00 C0 */	lhz r0, 0xc0(r3)
/* 8035AB50 003567B0  7C 04 00 50 */	subf r0, r4, r0
/* 8035AB54 003567B4  2C 00 00 01 */	cmpwi r0, 1
/* 8035AB58 003567B8  40 82 00 10 */	bne lbl_8035AB68
/* 8035AB5C 003567BC  38 00 00 04 */	li r0, 4
/* 8035AB60 003567C0  90 03 00 90 */	stw r0, 0x90(r3)
/* 8035AB64 003567C4  48 00 00 28 */	b lbl_8035AB8C
lbl_8035AB68:
/* 8035AB68 003567C8  A0 03 00 C0 */	lhz r0, 0xc0(r3)
/* 8035AB6C 003567CC  7C 04 00 50 */	subf r0, r4, r0
/* 8035AB70 003567D0  2C 00 00 01 */	cmpwi r0, 1
/* 8035AB74 003567D4  40 82 00 10 */	bne lbl_8035AB84
/* 8035AB78 003567D8  38 00 00 03 */	li r0, 3
/* 8035AB7C 003567DC  90 03 00 90 */	stw r0, 0x90(r3)
/* 8035AB80 003567E0  48 00 00 0C */	b lbl_8035AB8C
lbl_8035AB84:
/* 8035AB84 003567E4  38 00 00 00 */	li r0, 0
/* 8035AB88 003567E8  90 03 00 90 */	stw r0, 0x90(r3)
lbl_8035AB8C:
/* 8035AB8C 003567EC  A0 83 00 D0 */	lhz r4, 0xd0(r3)
/* 8035AB90 003567F0  2C 04 00 00 */	cmpwi r4, 0
/* 8035AB94 003567F4  41 82 00 18 */	beq lbl_8035ABAC
/* 8035AB98 003567F8  A0 03 00 A0 */	lhz r0, 0xa0(r3)
/* 8035AB9C 003567FC  7C 00 20 40 */	cmplw r0, r4
/* 8035ABA0 00356800  41 82 00 0C */	beq lbl_8035ABAC
/* 8035ABA4 00356804  38 00 00 00 */	li r0, 0
/* 8035ABA8 00356808  90 03 00 D4 */	stw r0, 0xd4(r3)
lbl_8035ABAC:
/* 8035ABAC 0035680C  38 60 00 01 */	li r3, 1
/* 8035ABB0 00356810  4E 80 00 20 */	blr