00:34.30 |
``Erik |
../../rtirenderblend4sse.c: In function
`elemcallb': |
00:34.30 |
``Erik |
../../rtirenderblend4sse.c:251: warning:
implicit declaration of function `_mm_castps_si128' |
00:34.30 |
``Erik |
../../rtirenderblend4sse.c:251: error:
incompatible type for argument 2 of `_mm_and_si128' |
00:39.08 |
Maloeran |
Hum. Okay |
00:39.31 |
Maloeran |
Do you have SSE2 on that box? |
00:40.22 |
``Erik |
<PROTECTED> |
00:42.20 |
Maloeran |
On FreeBSD, right? Does it find emmintrin.h?
Don't you have these pseudo function calls in it? |
00:43.18 |
Maloeran |
Perhaps I used non-standard SSE intrinsics by
mistake, I'm just a bit surprised |
00:43.48 |
``Erik |
$ ls -l /usr/include/emmintrin.h |
00:43.48 |
``Erik |
-r--r--r-- 1 root wheel 34528 Sep 16 2005
/usr/include/emmintrin.h |
00:44.23 |
Maloeran |
Can you grep it for castps_si128? |
00:44.44 |
Maloeran |
Must be a non-standard SSE intrinsic, it's
just a cast anyway |
00:45.22 |
``Erik |
http://www.freebsd.org/cgi/cvsweb.cgi/src/contrib/gcc/config/i386/emmintrin.h?rev=1.1.1.3&content-type=text/x-cvsweb-markup |
00:47.01 |
Maloeran |
Okay. I'll fix that soon |
00:47.53 |
*** join/#brlcad brlcad
(n=sean@bz.bzflag.bz) |
00:48.04 |
*** mode/#brlcad [+o brlcad]
by ChanServ |
00:48.50 |
brlcad |
"There was a problem with the switch that has
been resolved by the IP Engineering department, your server was not
rebooted but is currently online and responsive to my ping
requests." |
00:49.08 |
brlcad |
for anyone on or connected to .bz, that
is |
00:52.04 |
``Erik |
O.o |
00:56.17 |
``Erik |
ld: .libs/job.o has external relocation
entries in non-writable section (__TEXT,__text) for
symbols: |
00:56.17 |
``Erik |
jobThreadWork |
00:56.19 |
``Erik |
neat |
00:57.57 |
Maloeran |
What is that? |
00:58.47 |
Maloeran |
Oh, some platform doesn't like my assembly
hack to align the stack on 16 bytes on ia32 |
00:59.18 |
Maloeran |
Have a look at RF/job.c, I'm not sure what
that error message means |
01:03.46 |
Maloeran |
Any thoughts or further insight? |
01:05.05 |
*** join/#brlcad IriX64
(n=mario_du@bas3-sudbury98-1168049077.dsl.bell.ca) |
01:08.36 |
*** join/#brlcad brlcad
(n=sean@bz.bzflag.bz) |
01:08.45 |
*** mode/#brlcad [+o brlcad]
by ChanServ |
01:09.13 |
``Erik |
couldn't you do something like an alignment
attribute? O.o |
01:09.51 |
Maloeran |
No, it's the stack itself that is not
aligned |
01:10.06 |
Maloeran |
The compiler can't preserve stack alignment if
the thread stack wasn't aligned to begin with |
01:10.37 |
``Erik |
hrm *shrug* |
01:10.37 |
IriX64 |
what the hey does the compiler care about a
users thread? |
01:10.37 |
Maloeran |
So when launching a thread, first thing I do
is fixing the alignment, and the compiler preserves the alignment
from that point |
01:10.46 |
IriX64 |
it's all code. |
01:10.57 |
IriX64 |
unless you have thread
optimizations. |
01:10.59 |
``Erik |
the compiler doesn't, but if you are
misaligned when you try to execute an sse op, shit blows
up |
01:11.11 |
IriX64 |
runtime? |
01:11.14 |
Maloeran |
Yes |
01:11.15 |
``Erik |
yeah |
01:11.17 |
IriX64 |
obviously duh. |
01:11.43 |
IriX64 |
auto assigned stack or user
determined? |
01:11.56 |
Maloeran |
What's the fix, Erik? Is the symbol incorrect
on fbsd, does it need an underscore or something? |
01:12.04 |
Maloeran |
Automatically assigned stack |
01:12.23 |
IriX64 |
system *should keep track of it
then. |
01:12.28 |
IriX64 |
alas |
01:12.37 |
IriX64 |
all systems are not created equeal. |
01:12.44 |
Maloeran |
An automatic stack will be allocated in the
proper memory bank for the processor, for higher performance. If I
were to provide it, I would need to do some non-portable libNUMA fu
and Erik would hate me |
01:12.53 |
IriX64 |
ergo code generated for one system
etc... |
01:13.13 |
IriX64 |
heh beat eric with a noodle. |
01:13.43 |
IriX64 |
btw am i breaking anything by having Mr.
Muss's face on my space? |
01:13.59 |
IriX64 |
I mean is it allowed i should have asked
first. |
01:14.39 |
``Erik |
what symbol? the job breakage was osX on an
x86 core duo |
01:14.58 |
Maloeran |
The jobThreadWork symbol that I'm calling from
assembly |
01:15.34 |
``Erik |
that's a mac, not fbsd |
01:16.04 |
``Erik |
<-- doesn't know the fix |
01:16.05 |
Maloeran |
<-- neither |
01:16.06 |
``Erik |
<-- thinks only linux has the alignment
broken stuff, though |
01:16.32 |
Maloeran |
Erik, test it. Disable the
RF_I386_STACK_ALIGNMENT_HACK switch |
01:16.35 |
``Erik |
I'm fairly sure you can just call
jobThreadWork() on fbsd and it self-aligns |
01:16.47 |
``Erik |
but your sse stuff is broken on fbsd right now
*shrug* |
01:17.58 |
``Erik |
heh, I have my reasons. |
01:18.25 |
Maloeran |
If you want to test Erik, just replace
_mm_castps_si128(x) with (__m128i)x |
01:20.02 |
``Erik |
I deleted RF_I386_STACK_ALIGNMENT_HACK from
config.h and it works fine on the mac |
01:20.21 |
``Erik |
I think RF_I386_STACK_ALIGNMENT_HACK should
only be if __linux__ && __x86__ |
01:20.27 |
Maloeran |
Agreed |
01:22.57 |
``Erik |
hrm, ok, changing the castps let it compile...
but it's not decently headed, so rfdemo won't do well |
01:23.11 |
``Erik |
what can I run to see if it executes without
crashing with no head? :D |
01:23.48 |
Maloeran |
rfregtest? :) |
01:23.55 |
``Erik |
failed to create context |
01:24.03 |
``Erik |
does it assume files in pwd? |
01:24.10 |
Maloeran |
Yes |
01:24.20 |
``Erik |
bah |
01:24.45 |
Maloeran |
Context creation failed is about rt.conf and
the .so |
01:30.18 |
``Erik |
log2f issues again, heh |
01:31.38 |
Maloeran |
Your last "fix" would never detect log2() in
any circumstance, because it's C99 and requires -lm |
01:31.49 |
Maloeran |
And the configure thing tested C89 without
-lm |
01:33.27 |
``Erik |
heh, quit using c99? :D *duck* |
01:35.40 |
``Erik |
ok, hacked the log2 defs back in and it's
cooking away now |
01:35.42 |
``Erik |
no crashes so far |
01:36.00 |
Maloeran |
Do you think you could test a big endian
platform? |
01:37.05 |
``Erik |
pretty easily |
01:37.11 |
``Erik |
but SDL gives you that for free O.o |
01:37.40 |
Maloeran |
Ah well, there's the geometry group file
format to test too |
01:38.03 |
Maloeran |
No big deal, it should work unless I made a
stupid typo somewhere |
01:38.42 |
brlcad |
heh, sdl don't give jack for free |
01:38.44 |
``Erik |
ok, the hack is off and regtest is running on
opteron/fbsd now |
01:38.47 |
brlcad |
there's a price *somewhere* |
01:38.54 |
``Erik |
heh, yeah, you have to include it to get the
macros |
01:39.04 |
``Erik |
which penalize the unpreferred
format |
01:39.30 |
Maloeran |
The hack is only for ia32 platforms by the
way |
01:39.41 |
brlcad |
providing seamless maintainability integration
can be a pita with them, but doable |
01:39.45 |
Maloeran |
The switch is ignored on amd64, as it's
unecessary and it's ia32 assembly anyway |
01:39.57 |
``Erik |
it was on in my compile :/ |
01:40.08 |
Maloeran |
Sure it's on, but ignored in the
code |
01:40.16 |
``Erik |
*shrug* |
01:40.31 |
``Erik |
how long does it take for results
agan? |
01:40.54 |
Maloeran |
It takes several minutes, just kill it
;) |
01:41.03 |
``Erik |
woops, there went a core dump |
01:41.12 |
Maloeran |
Woah. |
01:41.57 |
``Erik |
#0 0x000000080144b89c in pthread_testcancel
() from /lib/libpthread.so.2 |
01:42.35 |
Maloeran |
Can you backtrace a bit more? |
01:43.05 |
``Erik |
I bailed out of the machine and closed the
screen, sorry... there were only three symbols, the first and last
were pthread |
01:43.38 |
Maloeran |
Actually... This was refregtest, right? I
think I forgot to fix something there |
01:43.53 |
``Erik |
yeah, rfregtest |
01:44.03 |
brlcad |
woot, autogen.sh now works from subconf
dirs |
01:44.13 |
``Erik |
given the number of machines I was jumping
through and the slow link, rfdemo wouldn't have worked well
:) |
01:47.08 |
CIA-7 |
BRL-CAD: 03brlcad *
10brlcad/autogen.sh: |
01:47.08 |
CIA-7 |
BRL-CAD: add a function to locate the
configure template so that we find the right files |
01:47.08 |
CIA-7 |
BRL-CAD: when running autogen.sh from an
ac_config_subdirs directory, perhaps being |
01:47.08 |
CIA-7 |
BRL-CAD: configured/compiled in isolation
(without making a copy of this script). also |
01:47.09 |
CIA-7 |
BRL-CAD: add a sanity check that we did indeed
end up with a configure script when all |
01:47.09 |
CIA-7 |
BRL-CAD: was said and done. |
01:51.44 |
brlcad |
IriX64: ehm.. that's pretty impossible at this
point |
01:51.59 |
brlcad |
the channel is publicly logged and indexed by
google daily |
01:52.13 |
IriX64 |
ahh well. |
01:52.29 |
IriX64 |
<*> |
01:54.27 |
brlcad |
search for "IriX64 BRL-CAD" and you can see a
few on the first page alone |
01:56.34 |
Maloeran |
Cool, logs from the channel 14 months
ago |
01:57.03 |
IriX64 |
really? explains something |
01:58.11 |
``Erik |
heh http://paste.lisp.org/display/30558 |
01:59.06 |
IriX64 |
jack?.... Jack Shit, I know him well.
;) |
01:59.30 |
IriX64 |
what are you testing? |
01:59.54 |
IriX64 |
ermf for get I said that or you'll be asking
me same question. |
02:01.11 |
Maloeran |
IriX64, grab a C guide online, get dev-c++ and
get started |
02:01.18 |
``Erik |
heh, squeak |
02:01.48 |
IriX64 |
the mouse that roared? |
02:02.11 |
``Erik |
no, the smalltalk environment |
02:02.22 |
``Erik |
irix: check out http://mitpress.mit.edu/sicp/ |
02:02.23 |
``Erik |
it's nifty |
02:02.29 |
IriX64 |
why smalltalk why not crosstalk? |
02:03.06 |
IriX64 |
ermf xbox? |
02:04.46 |
Maloeran |
Seriously, IriX64, learn to code ; I think
it's the kind of hobby you would enjoy |
02:05.31 |
``Erik |
the exercised in structured thinking is a good
growth opportunity |
02:05.46 |
``Erik |
think of it like sudoku on steroids
:) |
02:06.06 |
IriX64 |
problem is the environment insists on stunting
my growth :) |
02:06.51 |
``Erik |
heh |
02:07.01 |
Maloeran |
The environment? |
02:07.32 |
IriX64 |
structured programming environment, I
seriously don't think like that. |
02:07.48 |
Maloeran |
No one does, it's an acquired skill |
02:07.59 |
Maloeran |
Just give it a try |
02:08.04 |
IriX64 |
old dog, new tricks thing. |
02:08.20 |
``Erik |
what? old john, new tricks? |
02:08.24 |
``Erik |
sorry, I'll behave O:-) |
02:08.29 |
IriX64 |
heheh |
02:08.54 |
IriX64 |
when you get that old the trick is in keeping
her :) |
02:09.18 |
Maloeran |
Are you retired or so, IriX64? |
02:09.46 |
IriX64 |
disability. (does it show, mentally challenged
:)) |
02:11.01 |
Maloeran |
Really? You seem joyful and not too
knowledgeable about computers but I would not have thought that.
Are you serious? |
02:11.26 |
IriX64 |
just the disability part. but i'm getting
well. |
02:11.57 |
Maloeran |
Well, clearly you can type, therefore you can
code |
02:12.09 |
``Erik |
heh |
02:12.13 |
IriX64 |
used to be a DEC fse before i took work hhere
at the plant (Algoma Steel Inc) |
02:12.27 |
``Erik |
plenty of hunt&peck coders out
there |
02:12.28 |
IriX64 |
trvth |
02:13.06 |
Maloeran |
It's a disability acquired at a steel
mill?.. |
02:13.14 |
IriX64 |
yes |
02:13.29 |
``Erik |
if you spend more time typing than thinking,
I'd assert that either you're using an inappropriate language for
the task, or approaching the task in a silly manner |
02:13.42 |
Maloeran |
Ouch. Would you... share details, if you want
to? |
02:14.07 |
IriX64 |
re: coding? I tend to disagree, you could just
be a hunt and pecker :) |
02:14.29 |
IriX64 |
Maloeran not publicly sorry. |
02:14.50 |
``Erik |
heh, mal is a pecker :D |
02:14.50 |
Maloeran |
Okay, right. |
02:15.09 |
IriX64 |
``Erik is a hunter :) |
02:15.19 |
``Erik |
spyhunter, yo |
02:15.30 |
IriX64 |
wait ive got dialtone. |
02:15.50 |
IriX64 |
bond james bone. |
02:15.56 |
``Erik |
bondo? |
02:15.58 |
IriX64 |
:) |
02:16.15 |
IriX64 |
stuff used to patch cars get with
it. |
02:16.16 |
``Erik |
car repair paste of international superspies?
O.o |
02:16.52 |
IriX64 |
paste? as in pasting teeth? :) |
02:17.36 |
IriX64 |
tell me ``Erik if it's common sense, why isn't
there more of it around? |
02:18.19 |
``Erik |
heh, don't make me bust out my big books of
steven wright quotes |
02:18.42 |
``Erik |
or mitch hedberg |
02:18.59 |
IriX64 |
steven wright? I turn to calvin and
hobbes. |
02:20.29 |
Maloeran |
Hey Justin, received mail from Mark forwarding
yours |
02:20.51 |
Maloeran |
The voxel stuff was dropped on the way,
apparently the people who thought they needed it were actually
using triangles |
02:21.49 |
Twingy |
we'll see about that |
02:29.54 |
IriX64 |
Maloeran, I wasn't really kidding about that
don't start the thread bit, if it gives you hassle incorporate the
code into whatever thinks it needs to start a thread. |
02:30.44 |
IriX64 |
forr what its worth :) |
02:34.24 |
Maloeran |
Threads shouldn't be avoided, they are used to
distribute the work over multiple processors |
02:35.24 |
IriX64 |
not saying avoid them bit if one particular
piece of code is giving you grief why fight it. |
02:38.11 |
Maloeran |
It's fine, just OSX doing things a bit
differently, no big deal |
02:41.43 |
``Erik |
heh |
02:48.04 |
louipc |
what's the ideology behind that
feature? |
02:49.42 |
Maloeran |
That ia32's largest data type is "double",
which is 8 bytes, therefore stacks only require 8 bytes
alignment |
02:50.51 |
Maloeran |
Then SSE arrived, which required 16 bytes. The
glibc and kernel crowd kept putting the blame on the other camp, I
think it got fixed at some point |
02:52.25 |
Maloeran |
Compilers like Intel would align the stack of
every function dynamically whenever SSE was used to work around
that issue |
02:59.15 |
louipc |
wowzers this processor mumbo jumbo is beyond
me |
02:59.57 |
Maloeran |
Oops I'm sorry, I assumed you were a
programmer |
03:07.59 |
louipc |
no prob, I'm just reading generally about it
now. It makes programming at the processor level look like a real
pain |
03:09.15 |
louipc |
IriX64: you have a *nix? which one? |
03:10.29 |
IriX64 |
DEC :P |
03:12.04 |
louipc |
hmm |
03:13.17 |
IriX64 |
pdp11/70 louipc :) |
03:14.21 |
louipc |
haha no way |
03:15.37 |
IriX64 |
sysV runs well on it tho. |
03:17.32 |
IriX64 |
btw if anybody cares, ./m4 *seems tied to
1.9.6. |
03:35.52 |
IriX64 |
louipc, recepricol question which unixen do
you have? |
03:38.50 |
IriX64 |
can i do it that way? |
13:20.05 |
*** join/#brlcad docelic
(n=docelic@212.91.114.160) |
14:14.46 |
``Erik |
*cookcookcook* |
15:10.46 |
*** join/#brlcad lg_
(n=lg_@88.234.13.222) |
15:10.51 |
lg_ |
hey... |
15:11.22 |
lg_ |
i am here with a mged modeling question...
something i would do with an extrude along path in another
app... |
15:12.18 |
lg_ |
i am building a segment of a domes with ribs,
but everything is rounded |
15:15.54 |
lg_ |
ok, thank you... |
15:16.03 |
Maloeran |
If you were to idle for a while, you'll get an
answer eventually, but I wouldn't count on anything in a short
time |
15:16.27 |
lg_ |
i think i have first to cut away the corner
and than past in a part of a torus, which is awful |
15:17.07 |
lg_ |
maloeran, do you know if it is possible to
specify geometry by angle in mged? it is a rather basic question,
but i could not find an answer yet |
16:31.11 |
*** join/#brlcad dtidrow
(n=dtidrow@c-69-255-182-248.hsd1.va.comcast.net) |
16:45.38 |
*** join/#brlcad docelic
(n=docelic@212.91.114.160) |
17:56.21 |
*** join/#brlcad brlcad
(n=sean@bz.bzflag.bz) |
17:56.31 |
*** mode/#brlcad [+o brlcad]
by ChanServ |
18:28.53 |
CIA-7 |
BRL-CAD: 03brlcad * 10brlcad/configure.ac: be
a little more liberal on the -all_load libtool script fix to avoid
escaping the dollarsign |
19:24.02 |
*** join/#brlcad clock_
(i=clock@84-72-63-213.dclient.hispeed.ch) |
20:08.29 |
CIA-7 |
BRL-CAD: 03brlcad * 10brlcad/configure.ac:
loop over potential locations instead of just testing for one. this
helps subdir configures clean up too if added to their
configure. |
20:30.14 |
Maloeran |
Cool, 3 minutes to compile BRL-CAD, optimized
and almost-everything |
20:36.01 |
brlcad |
nifty |
20:36.29 |
louipc |
I'm extremely jealous |
20:36.50 |
brlcad |
Maloeran: how long for a ./configure
--enable-all compile (i.e. non-optimized,
almost-everything) |
20:37.17 |
brlcad |
both with "make -jwhatever" and "make
-jwhatever fast" |
20:37.43 |
brlcad |
might be in contention for fastest compile to
date |
20:52.00 |
*** join/#brlcad IriX64
(n=mario_du@bas3-sudbury98-1168050480.dsl.bell.ca) |
20:53.32 |
louipc |
IriX64: I'm running linux, archlinux
specifically |
20:53.36 |
louipc |
;) |
20:54.48 |
IriX64 |
louipc: great what have you photon mapped
(it's such fun) |
20:54.48 |
Maloeran |
brlcad, will test |
20:54.48 |
Maloeran |
I'm not too sure what the optimal -jX is
though, yet |
20:55.41 |
Maloeran |
--enable-all is 1 minute 54 seconds |
20:56.18 |
Maloeran |
Trying this "make fast" now |
20:56.19 |
brlcad |
Maloeran: with or without 'fast' |
20:56.23 |
Maloeran |
Without |
20:56.23 |
brlcad |
ahh, k |
20:56.35 |
brlcad |
cool, that would be a record regardless
;) |
20:56.40 |
louipc |
IriX64: nothing worth noting |
20:56.53 |
Maloeran |
Neat, I like my new toy :) |
20:56.54 |
brlcad |
is this cvs head too, or somewhere
thereabouts? |
20:57.08 |
Maloeran |
The latest release, not CVS |
20:57.21 |
brlcad |
ahh, okay |
20:57.36 |
brlcad |
still a record, though latest will be a bit
slower |
20:57.41 |
IriX64 |
but have you played with the examples? They're
truly works of art, I especially like castle. |
20:58.05 |
*** join/#brlcad cad53
(n=51f8d09e@bz.bzflag.bz) |
20:58.37 |
Maloeran |
Hum. brlcad, it didn't tell me the time it
took for "make -j12 fast", I guess I should have clocked |
21:00.08 |
brlcad |
Maloeran: ah, no matter then |
21:01.39 |
IriX64 |
http://www.pastebin.ca/370750
(*shrug*) |
21:02.26 |
Maloeran |
time make -j12 fast : real 2m3s user 6m46s
sys 2m57 |
21:02.38 |
Maloeran |
Oh well, it's adding the time of all
cores |
21:04.18 |
``Erik |
huh? |
21:05.12 |
IriX64 |
bwahahah I can now shut down windows from my
cygwin environment. thats hysterical louipc you wondered what I'm
using, I just told you ;) |
21:08.38 |
IriX64 |
http://www.pastebin.ca/370763 |
21:08.51 |
IriX64 |
louipc: check it. |
21:14.33 |
IriX64 |
http://www.pastebin.ca/370770
(I'll stop now :)) |
22:44.32 |
*** join/#brlcad docelic
(n=docelic@212.91.113.94) |
23:05.15 |
louipc |
IriX64: I wouldn't call that *nix, it's more
like GNU/windows hah |
23:19.00 |
``Erik |
indeed, even less unixy than linux
O.O |
23:21.35 |
IriX64 |
puhleaze, I can do anything unix can do try
me. |
23:21.40 |
IriX64 |
:) |
23:21.47 |
IriX64 |
i log in too. |
23:22.29 |
IriX64 |
btw my little x works very well. |
23:22.52 |
IriX64 |
has to or i would not be able to run
BRL-CAD. |
23:23.47 |
IriX64 |
wonders too. |
23:24.33 |
``Erik |
ok |
23:24.38 |
``Erik |
run on ppc. |
23:24.43 |
``Erik |
or rs6k. |
23:24.45 |
``Erik |
or h9k |
23:24.55 |
``Erik |
or vax or pdp11 or m68k or ... |
23:25.12 |
IriX64 |
now you're speaking my langugae |
23:25.27 |
IriX64 |
pdp8s best machine ever. |
23:26.03 |
``Erik |
or support hundreds of concurrent
users |
23:26.11 |
IriX64 |
doing a no debugging build want to see how
fast havoc photon maps. |
23:26.30 |
``Erik |
or provide services to the internet with no
antivirus software chewing cycles and not get infected or
cracked |
23:26.43 |
IriX64 |
huh? |
23:27.19 |
IriX64 |
``Erik i respect you're opinion no matter how
wrong you may be ;) |
23:27.34 |
``Erik |
<-- doens't think he's all that wrong
O:-) |
23:27.50 |
IriX64 |
heh neither do i :) |
23:28.43 |
``Erik |
and photon mapping is a two phase operation...
it raytraces as fast as it does with no lighting... and the photo
map pass totally depends on how many photons you specify and a few
other parameters |
23:29.10 |
``Erik |
path tracing seems a bit more interesting,
though... have you managed to get adrt to build? it has something
in it called "rise" which is pretty neat |
23:29.16 |
IriX64 |
sure but you can get a guesstimate if you
leave all the settings the same. |
23:29.34 |
IriX64 |
missing sdl gotta tend to that. |
23:29.40 |
``Erik |
libsdl.org |
23:29.44 |
IriX64 |
ty |
23:33.19 |
IriX64 |
yum thanks ``Erik i'll let you know if I ever
get it going btw is it fraught? |
23:34.26 |
IriX64 |
you're supposed to say "there's just no
arguing with a word like fraught" :) |
23:35.25 |
IriX64 |
python is also needed. |
23:36.38 |
``Erik |
... yes, sdl and python are (sorta) needed,
though I think rise itself doesn't use either |
23:36.58 |
IriX64 |
getting python 2.5 now. |
23:37.36 |
``Erik |
n/m, rise observer uses sdl |
23:37.44 |
IriX64 |
ah |