EIDE UDMA

How to determine, if eide driver runs in udma mode?

We tested Pentium 4 board - Intel D850GB with Intel chipset 82801BA and
copying a file takes 90% of the CPU time. Any experience with P4 boards ?

Jiri Kristek
RETIA, a.s.

“Jiri Kristek” <jkristek@retia.cz> wrote in message
news:9nl7sq$42s$1@inn.qnx.com

How to determine, if eide driver runs in udma mode?

We tested Pentium 4 board - Intel D850GB with Intel chipset 82801BA and
copying a file takes 90% of the CPU time. Any experience with P4 boards ?

There is no easy way, because drievr just silently ignores dma option if
chipset is not supported. You can tell by CPU utilisation and by copying
speed. If you can’t get more than 3Mb/sec copying a large file from decent
harddrive to /dev/null, it is not DMA then.

  • igor

Hi Jiri,

Jiri Kristek <jkristek@retia.cz> wrote in article <9nne46$e9b$1@inn.qnx.com>…

I know there were discussions a time ago about UDMA support. I made now some
tests on available MB and disks, the results are confusing.
The best behaviour results for AMD and IDE disk, where UDMA and SMART had to
be disabled to be able to boot up. It goes even better than SCSI disks. On
the other hand disk behaviour on the quickest PC with P4 is the worst.

\

  1. MB D850GB Intel, Pentium 4 1.4GHz, Chipset Intel 82801BA
    a) IDE disk WD30GB
    reading 3MB/sec, CPU load 90%
    b) IDE disk Seagate 4.2GB
    reading 1.9MB/sec, CPU load 60%

I think DMA is not used in this chipset

  1. MB MS6309 Celeron 850MHz, Chipset VIA VT82C, Adaptec 2940
    WSCSI
    a) IDE disk IDE WD10GB
    reading 2.4MB/sec, CPU load 28%

I guess DMA is not used in this case too, but drive is slow…

b) SCSI disk SCSI Fujitsu
reading 6.4MB/sec, CPU load 15%

  1. MB ADII AMD 1GHz Chipset VIA VT82C, LSI Logic Ultra Wide SCSI
    a) IDE disk WD9.1GB, UDMA and SMART disable required
    reading 9MB/sec, CPU load 13%

Are you sure DMA is disabled in this case? This result seems to be very strange, for me at last.
Could you check out drivers arguments, please.

pidin arg |grep devb-eide

SCSI drives is not faster then EIDE, they require less CPU utilization, IMO.

Best Regards,
Eduard.

I know there were discussions a time ago about UDMA support. I made now some
tests on available MB and disks, the results are confusing.
The best behaviour results for AMD and IDE disk, where UDMA and SMART had to
be disabled to be able to boot up. It goes even better than SCSI disks. On
the other hand disk behaviour on the quickest PC with P4 is the worst.

\

  1. MB D850GB Intel, Pentium 4 1.4GHz, Chipset Intel 82801BA
    a) IDE disk WD30GB
    reading 3MB/sec, CPU load 90%
    b) IDE disk Seagate 4.2GB
    reading 1.9MB/sec, CPU load 60%

    \

  2. MB MS6309 Celeron 850MHz, Chipset VIA VT82C, Adaptec 2940
    WSCSI
    a) IDE disk IDE WD10GB
    reading 2.4MB/sec, CPU load 28%
    b) SCSI disk SCSI Fujitsu
    reading 6.4MB/sec, CPU load 15%

  3. MB ADII AMD 1GHz Chipset VIA VT82C, LSI Logic Ultra Wide SCSI
    a) IDE disk WD9.1GB, UDMA and SMART disable required
    reading 9MB/sec, CPU load 13%
    b) SCSI disk 8GB
    reading 5MB/sec, CPU load 5%


    Is there something that can explain this behavior?
    Can we expect anything new in the disk drivers area?






    Igor Kovalenko <kovalenko@home.com> píše v diskusním
    pøíspìvku:9nljtf$b4q$1@inn.qnx.com

“Jiri Kristek” <> jkristek@retia.cz> > wrote in message
news:9nl7sq$42s$> 1@inn.qnx.com> …
How to determine, if eide driver runs in udma mode?

We tested Pentium 4 board - Intel D850GB with Intel chipset 82801BA and
copying a file takes 90% of the CPU time. Any experience with P4 boards
?

There is no easy way, because drievr just silently ignores dma option if
chipset is not supported. You can tell by CPU utilisation and by copying
speed. If you can’t get more than 3Mb/sec copying a large file from decent

harddrive to /dev/null, it is not DMA then.

  • igor

ed1k wrote:

Hi Jiri,

Jiri Kristek <> jkristek@retia.cz> > wrote in article <9nne46$e9b$> 1@inn.qnx.com> >…
I know there were discussions a time ago about UDMA support. I made now some
tests on available MB and disks, the results are confusing.
The best behaviour results for AMD and IDE disk, where UDMA and SMART had to
be disabled to be able to boot up. It goes even better than SCSI disks. On
the other hand disk behaviour on the quickest PC with P4 is the worst.

\

  1. MB D850GB Intel, Pentium 4 1.4GHz, Chipset Intel 82801BA
    a) IDE disk WD30GB
    reading 3MB/sec, CPU load 90%
    b) IDE disk Seagate 4.2GB
    reading 1.9MB/sec, CPU load 60%

I think DMA is not used in this chipset

Not sure about 82801BA, but 82801AA works in DMA starting with QNX6.1
(i820 MB).

  1. MB MS6309 Celeron 850MHz, Chipset VIA VT82C, Adaptec 2940
    WSCSI
    a) IDE disk IDE WD10GB
    reading 2.4MB/sec, CPU load 28%

I guess DMA is not used in this case too, but drive is slow…

b) SCSI disk SCSI Fujitsu
reading 6.4MB/sec, CPU load 15%

  1. MB ADII AMD 1GHz Chipset VIA VT82C, LSI Logic Ultra Wide SCSI
    a) IDE disk WD9.1GB, UDMA and SMART disable required
    reading 9MB/sec, CPU load 13%

Are you sure DMA is disabled in this case? This result seems to be very strange, for me at last.
Could you check out drivers arguments, please.

pidin arg |grep devb-eide

SCSI drives is not faster then EIDE, they require less CPU utilization, IMO.

SCSI can work indifferent transfer modes. QNX drives Adaptec SCSI boards
in sync/wide mode, but driver for LSI works in ancient async mode so I
am surprized he got even 6.4 on SCSI drive using that controller.
Probably file size was not large enough to eliminate cache effect. With
large files async mode would not be any faster than 3mb/sec.

EIDE controllers and EIDE drives can also use different DMA modes,
from DMA-2 to DMA-5. For QNX to actually work in DMA mode there must be
3 conditions met:

  1. Chipset must be supported by devb-eide and dma option must be passed.
  2. UDMA must be enabled by BIOS
  3. BIOS and hard drive must be negotiate a DMA mode which is NOT
    higher than highest mode supported by devb-eide, currently DMA-2.

The last condition can be hard to meet on modern systems, because BIOS
and drive usually negotiate highest mode supported by both MB and HD.
Which is usually DMA-4 or DMA-5 these days. Unless you can limit DMA
mode to DMA-2 using either BIOS or some DOS-based drive configuration
utility (WD drives come with one) QNX will not operate in DMA mode.

Also note that write performance will be totally different game. For
reading most harddrives these days use internal buffer which eliminates
bottlenecks created by head movement. This does not happen for write,
except for some high-end SCSI models, so syncronous writes of metatdata
will hurt performance A LOT.

I’ve already done this research some time ago. You might want to search
newsgroup archives for ‘FS performance’. Or perhaps someone can post a
URL to archived article.

  • igor

My measurents were done in the way:
time cp /dev/hd0txx /dev/null
partition was at least 500MB

The good results (reading 9MB/sec, CPU load 13%) of MB ADII AMD 1GHz,
Chipset VIA VT82C, IDE disk WD9.1GB are with UDMA and SMART disabled in
BIOS. OS is started normally ( not .altboot ) the driver runs with dma
parametr !!!
If altbooted - average load of cp command is ABOUT 90% !!!

THE DRIVER MUST USE UDMA MODE DESPITE OF IT IS DISABLED IN BIOS

If DMA enabled in BIOS, booted normally, boot-up stops, repeating message
simq_timer: building abort ccb
ata_start_ccb: func 10

Is this the way, to recognize if ide driver is able to run in DMA mode to
compare average CPU load for normal and altboot OS start?

Are there any statemens of QNX, what we can expect in near future concerning
UDMA support?.





Igor Kovalenko <Igor.Kovalenko@motorola.com> píse v diskusním
pøíspìvku:3B9FE47B.296AC5BA@motorola.com

ed1k wrote:

Hi Jiri,

Jiri Kristek <> jkristek@retia.cz> > wrote in article
9nne46$e9b$> 1@inn.qnx.com> >…
I know there were discussions a time ago about UDMA support. I made
now some
tests on available MB and disks, the results are confusing.
The best behaviour results for AMD and IDE disk, where UDMA and SMART
had to
be disabled to be able to boot up. It goes even better than SCSI
disks. On
the other hand disk behaviour on the quickest PC with P4 is the worst.

\

  1. MB D850GB Intel, Pentium 4 1.4GHz, Chipset Intel 82801BA
    a) IDE disk WD30GB
    reading 3MB/sec, CPU load
    90%
    b) IDE disk Seagate 4.2GB
    reading 1.9MB/sec, CPU
    load 60%

I think DMA is not used in this chipset


Not sure about 82801BA, but 82801AA works in DMA starting with QNX6.1
(i820 MB).



2) MB MS6309 Celeron 850MHz, Chipset VIA VT82C, Adaptec
2940
WSCSI
a) IDE disk IDE WD10GB
reading 2.4MB/sec, CPU
load 28%

I guess DMA is not used in this case too, but drive is slow…

b) SCSI disk SCSI Fujitsu
reading 6.4MB/sec, CPU
load 15%

  1. MB ADII AMD 1GHz Chipset VIA VT82C, LSI Logic Ultra Wide
    SCSI
    a) IDE disk WD9.1GB, UDMA and SMART disable required
    reading 9MB/sec, CPU load
    13%

Are you sure DMA is disabled in this case? This result seems to be very
strange, for me at last.
Could you check out drivers arguments, please.

pidin arg |grep devb-eide

SCSI drives is not faster then EIDE, they require less CPU utilization,
IMO.

SCSI can work indifferent transfer modes. QNX drives Adaptec SCSI boards
in sync/wide mode, but driver for LSI works in ancient async mode so I
am surprized he got even 6.4 on SCSI drive using that controller.
Probably file size was not large enough to eliminate cache effect. With
large files async mode would not be any faster than 3mb/sec.

EIDE controllers and EIDE drives can also use different DMA modes,
from DMA-2 to DMA-5. For QNX to actually work in DMA mode there must be
3 conditions met:

  1. Chipset must be supported by devb-eide and dma option must be passed.
  2. UDMA must be enabled by BIOS
  3. BIOS and hard drive must be negotiate a DMA mode which is NOT
    higher than highest mode supported by devb-eide, currently DMA-2.

The last condition can be hard to meet on modern systems, because BIOS
and drive usually negotiate highest mode supported by both MB and HD.
Which is usually DMA-4 or DMA-5 these days. Unless you can limit DMA
mode to DMA-2 using either BIOS or some DOS-based drive configuration
utility (WD drives come with one) QNX will not operate in DMA mode.

Also note that write performance will be totally different game. For
reading most harddrives these days use internal buffer which eliminates
bottlenecks created by head movement. This does not happen for write,
except for some high-end SCSI models, so syncronous writes of metatdata
will hurt performance A LOT.

I’ve already done this research some time ago. You might want to search
newsgroup archives for ‘FS performance’. Or perhaps someone can post a
URL to archived article.

  • igor



    begin 666 Re EIDE UDMA.txt
    M37D@;65A<W5R96YT<R!W97)E(&1O;F4@:6X@=&AE(’=A>3H-“B @(” @(" @
    M(" @(" @(" @("!T:6UE(&-P("]D978O:&0P=‘AX("]D978O;G5L; T*<&%R
    M=&ET:6]N(’=A<R!A="!L96%S=" U,#!-0@T*#0I4:&4@9V]O9"!R97-U;‘1S
    M(&]F($U"($%$24D@04U$(#%‘2’HL($-H:7!S970@5DE!(%94.#)#+"!)1$4@
    M9&ES:R!71#DN,4="#0IW:71H(%5$34$@86YD(%–05)4(&1I<V%B;&5D(&%R
    M92!T;V@<W5P<FES:6YG(&9O<B!M92 H<F5A9&EN9R Y34(O<V5C+"!#4%4-
    M"FQO860@,3,E2X@5VET:"!$34$@86QL;W=E9"!I;B!B:6]S+"!B;V]T+75P
    M(’-T;W!S+"!R97!E871I;F<@;65S<V%G90T
    (" @<VEM<5]T:6UE<CH@8G5I
    M;&1I;F<@86)O<G0@8V-B#0H@("!A=&%?<W1A<G1?8V-B.B!F=6YC(#$P#0H-
    M"D%R92!T:&5R92!A;GD@<W1A=&5M96YS(&]F(%%.6"P@=VAA="!W92!C86X@
    M97AP96-T(&EN(&YE87(@9G5T=7)E(&-O;F-E<FYI;F<-"G1H:7,@<’)O8FQE
    M;2X-"@T*#0H-"@T*#0I)9V]R($MO=F%L96YK;R \26=O<BY+;W9A;&5N:V]
    M;6]T;W)O;&$N8V]M/B!P[7-E(‘8@9&ES:W5S;NUM#0IP^.US<.QV:W4Z,T(Y
    M1D4T-T(N,CDV04,U0D% ;6]T;W)O;&$N8V]M+BXN#0H^(&5D,6L@=W)O=&4Z
    M#0H^(#X-"CX@/B!(:2!:7)I+ T/B ^#0H^(#X@2FER:2!+<FES=&5K(#QJ
    M:W)IW1E:T!R971I82YCCX@=W)O=&4@:6X@87)T:6-L90T*/#EN;F4T-B1E
    M.6(D,4!I;FXN<6YX+F-O;3XN+BX-"CX@/B ^($D@:VYO=R!T:&5R92!W97)E
    M(&1I<V-U<W-I;VYS(&$@=&EM92!A9V@86)O=70@541-02!S=7!P;W)T+B!)
    M(&UA9&4-“FYO=R!S;VUE#0H^(#X@/B!T97-T<R!O;B!A=F%I;&%B;&4@34(@
    M86YD(&1I<VMS+”!T:&4@<F5S=6QT<R!A<F4@8V]N9G5S:6YG+@T*/B ^(#X@
    M5&AE(&)E<W0@8F5H879I;W5R(’)E<W5L=’,@9F]R($%-1"!A;F0@241%(&1I
    M<VLL(’=H97)E(%5$34$@86YD(%–05)4#0IH860@=&-“CX@/B ^(&)E(&1I
    M<V%B;&5D('1O(&)E(&%B;&4@=&@8F]O=”!U<“X@270@9V]E<R!E=F5N(&)E
    M=‘1E<B!T:&%N(%-#4TD-"F1I<VMS+B!/;@T*/B ^(#X@=&AE(&]T:&5R(&AA
    M;F0@9&ES:R!B96AA=FEO=7(@;VX@=&AE(’%U:6-K97-T(%!#(’=I=&@@4#0@
    M:7,@=&AE(’=O<G-T+@T*/B ^(#X-“CX@/B ^#0H^(#X@/B Q2!-0B!$.#4P
    M1T(@26YT96PL(%!E;G1I=6T@-" Q+C1’2’HL($-H:7!S970@26YT96P@.#(X
    M,#%"00T
    /B ^(#X@82D@241%(&1I<VL@5T0S,$=”#0H^(#X@/B @(” @(" @
    M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(’)E861I;F<@
    M,TU"+W-E8RP@0U!5(&QO860-“CDP)0T*/B ^(#X@8BD@241%(&1I<VL@4V5A
    M9V%T92 T+C)'0@T*/B ^(#X@(” @(" @(" @(" @(" @(" @(" @(" @(" @
    M(" @(" @(" @(" @(" @("!R96%D:6YG(#$N.4U"+W-E8RP@0U!5#0IL;V%D
    M(#8P)0T*/B ^#0H^(#X@22!T:&EN:R!$34$@:7,@;F]T(‘5S960@:6X@=&AI
    M<R!C:&EP<V5T#0H^(#X-"CX-"CX@3F]T(’-U<F4@86)O=70@.#(X,#%“02P@
    M8G5T(#@R.# Q04$@=V]R:W,@:6X@1$U!(’-T87)T:6YG(’=I=&@@44Y8-BXQ
    M#0H^(“AI.#(P($U"2X-"CX-"CX@/B ^#0H^(#X@/@T/B ^(#X@,BD@34(@
    M35,V,S Y(” @(” @(" @(" @0V5L97)O;B X-3!-2’HL($-H:7!S970@5DE!
    M(%94.#)#+"!!9&%P=&5C#0HR.30P#0H^(#X@/B!74T-320T*/B ^(#X@82D@
    M241%(&1I<VL@241%(%=$,3!‘0@T*/B ^(#X@(" @(" @(" @(" @(" @(" @
    M(" @(" @(" @(" @(" @(" @(" @(" @("!R96%D:6YG(#(N-$U"+W-E8RP@
    M0U!5#0IL;V%D(#(X)0T*/B ^#0H^(#X@22!G=65S<R!$34$@:7,@;F]T(‘5S
    M960@:6X@=&AI<R!C87-E(‘1O;RP@8G5T(&1R:79E(&ES(’-L;W<N+BX-“CX@
    M/@T*/B ^(#X@8BD@4T-322!D:7-K(%-#4TD@1G5J:71S=0T*/B ^(#X@(” @
    M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @("!R96%D
    M:6YG(#8N-$U"+W-E8RP@0U!5#0IL;V%D(#$U)0T*/B ^(#X-“CX@/B ^(#,I
    M($U”($%$24D@04U$(#%‘2’H@(" @(" @($-H:7!S970@5DE!(%94.#)#+"!,
    M4TD@3&]G:6,@56QT<F$@5VED90T4T-320T/B ^(#X@82D@241%(&1I<VL@
    M5T0Y+C%‘0BP@541-02!A;F0@4TU!4E0@9&ES86)L92!R97%U:7)E9 T*/B ^
    M(#X@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
    M("!R96%D:6YG(#E-0B]S96,L($-052!L;V%D#0HQ,R4-"CX@/@T*/B ^($%R
    M92!Y;W4@<W5R92!$34$@:7,@9&ES86)L960@:6X@=&AI<R!C87-E/R!4:&ES
    M(’)E<W5L="!S965M<R!T;R!B92!V97)Y#0IS=’)A;F=E+"!F;W(@;64@870@
    M;&%S=“X-“CX@/B!#;W5L9”!Y;W4@8VAE8VL@;W5T(&1R:79E<G,@87)G=6UE
    M;G1S+”!P;&5A<V4N#0H^(#X@(R!P:61I;B!A<F<@?&=R97 @9&5V8BUE:61E
    M#0H^(#X-“CX@/B!30U-)(&1R:79E<R!I<R!N;W0@9F%S=&5R(‘1H96X@14E$
    M12P@=&AE>2!R97%U:7)E(&QE<W,@0U!5(‘5T:6QI>F%T:6]N+ T24U/+@T
    M/@T*/B!30U-)(&-A;B!W;W)K(&EN9&EF9F5R96YT(‘1R86YS9F5R(&UO9&5S
    M+B!13E@@9’)I=F5S($%D87!T96,@4T-322!B;V%R9’,-“CX@:6X@<WEN8R]W
    M:61E(&UO9&4L(&)U=”!D<FEV97(@9F]R($Q322!W;W)K<R!I;B!A;F-I96YT
    M(&%S>6YC(&UO9&4@<V@20T*/B!A;2!S=7)P<FEZ960@:&4@9V]T(&5V96X@
    M-BXT(&]N(%-#4TD@9’)I=F4@=7-I;F<@=&AA=”!C;VYT<F]L;&5R+@T*/B!0
    M<F]B86)L>2!F:6QE(’-I>F4@=V%S(&YO="!L87)G92!E;F]U9V@@=&@96QI
    M;6EN871E(&-A8VAE(&5F9F5C="X@5VET: T*/B!L87)G92!F:6QE<R!A<WEN
    M8R!M;V1E(’=O=6QD(&YO="!B92!A;GD@9F%S=&5R(‘1H86X@,VUB+W-E8RX-
    M"CX-"CX@14E$12!C;VYT<F]L;&5R<R J86YDB!%241%(&1R:79E<R!C86X@
    M86QS;R!U<V4@9&EF9F5R96YT($1-02!M;V1E<RP-“CX@9G)O;2!$34$M,B!T
    M;R!$34$M-2X@1F]R(%%.6”!T;R!A8W1U86QL>2!W;W)K(&EN($1-02!M;V1E
    M(‘1H97)E(&UU<W0@8F4-"CX@,R!C;VYD:71I;VYS(&UE=#H-"CX@,2D@0VAI
    M<’-E="!M=7-T(&)E(’-U<’!O<G1E9"!B>2!D979B+65I9&4@86YD(&1M82!O
    M<‘1I;VX@;75S="!B92!P87-S960N#0H^(#(I(%5$34$@;75S="!B92!E;F%B
    M;&5D(&)Y($))3U,-“CX@,RD@0DE/4R!A;F0@:&%R9”!D<FEV92!M=7-T(&)E
    M(&YE9V]T:6%T92!A($1-02!M;V1E(’=H:6-H(&ES(“I.3U0J#0H^(&AI9VAE
    M<B!T:&%N(&AI9VAE<W0@;6]D92!S=7!P;W)T960@8GD@9&5V8BUE:61E+”!C
    M=7)R96YT;'D@1$U!+3(N#0H^#0H^(%1H92!L87-T(&-O;F1I=&EO;B!C86X@
    M8F4@:&%R9"!T;R!M965T(&]N(&UO9&5R;B!S>7-T96US+"!B96-A=7-E($))
    M3U,-“CX@86YD(&1R:79E('5S=6%L;'D@;F5G;W1I871E(&AI9VAE<W0@;6]D
    M92!S=7!P;W)T960@8GD@8F]T:”!-0B!A;F0@2$0N#0H^(%=H:6-H(&ES('5S
    M=6%L;'D@1$U!+30@;W(@1$U!+34@=&AE<V4@9&%Y<RX@56YL97-S(‘EO=2!C
    M86X@;&EM:70@1$U!#0H^(&UO9&4@=&@1$U!+3(@=7-I;F<@96ET:&5R($))
    M3U,@;W(@<V]M92!$3U,M8F%S960@9’)I=F4@8V]N9FEG=7)A=&EO;@T
    /B!U
    M=&EL:71Y(“A71”!D<FEV97,@8V]M92!W:71H(&]N92D@44Y8(’=I;&P@;F]T
    M(&]P97)A=&4@:6X@1$U!(&UO9&4N#0H^#0H^($%L<V@;F]T92!T:&%T(’=R
    M:71E(’!E<F9O<FUA;F-E(’=I;&P@8F4@=&]T86QL>2!D:69F97)E;G0@9V%M
    M92X@1F]R#0H^(’)E861I;F<@;6]S="!H87)D9’)I=F5S(‘1H97-E(&1A>7,@
    M=7-E(&EN=&5R;F%L(&)U9F9E<B!W:&EC:"!E;&EM:6YA=&5S#0H^(&)O=‘1L
    M96YE8VMS(&-R96%T960@8GD@:&5A9"!M;W9E;65N=“X@5&AI<R!D;V5S(&YO
    M=”!H87!P96X@9F]R(’=R:71E+ T*/B!E>&-E<‘0@9F]R(’-O;64@:&EG:"UE
    M;F0@4T-322!M;V1E;’,L(’-O(’-Y;F-R;VYO=7,@=W)I=&5S(&]F(&UE=&%T
    M9&%T80T*/B!W:6QL(&AU<G0@<&5R9F]R;6%N8V4@02!,3U0N#0H^#0H^($DG
    M=F4@86QR96%D>2!D;VYE(‘1H:7,@<F5S96%R8V@@<V]M92!T:6UE(&%G;RX@
    M66]U(&UI9VAT(’=A;G0@=&@<V5A<F-H#0H^(&YE=W-G<F]U<"!A<F-H:79E
    M<R!F;W(@)T93(’!E<F9O<FUA;F-E)RX@3W(@<&5R:&%P<R!S;VUE;VYE(&-A
    M;B!P;W-T(&$-"CX@55),('1O(&%R8VAI=F5D(&%R=&EC;&4N#0H^#0H^(“T@
    ,:6=O<@T*#0H-@T*
    `
    end