Bitcoin Forum
December 08, 2016, 02:29:59 AM *
News: Latest stable version of Bitcoin Core: 0.13.1  [Torrent].
 
   Home   Help Search Donate Login Register  
Pages: « 1 ... 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 ... 830 »
  Print  
Author Topic: OFFICIAL CGMINER mining software thread for linux/win/osx/mips/arm/r-pi 4.9.2  (Read 4822246 times)
This is a self-moderated topic. If you do not want to be moderated by the person who started this topic, create a new topic.
P_Shep
Legendary
*
Offline Offline

Activity: 924


View Profile WWW
November 14, 2012, 06:52:32 PM
 #7981

I set it up, but it appears to take time for this problem to come up. I'll let you know when I have something.
Much appreciated! Occasionally nothing useful comes from the information, or windows decides to disable the debugger, but at least we have tried.
Quote
cgminer-db.exe caused an Access Violation at location 63656e6e Reading from location 63656e6e.

Registers:
eax=00000000 ebx=070fd26c ecx=070fd72d edx=070fd72e esi=6f43203a edi=070fd77c
eip=772015de esp=070fd258 ebp=00002746 iopl=0         nv up ei pl zr na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246

Call stack:
772015DE  ntdll.dll:772015DE  ZwRaiseException
771F014E  ntdll.dll:771F014E  KiUserExceptionDispatcher
070FD26C
070FD2BC
Did it not give you the option to debug it when it crashed?  Huh

I tried the version you reuploaded. Is that better?

Quote
cgminer-db.exe caused an Access Violation at location 63656e6e Reading from location 63656e6e.

Registers:
eax=00000000 ebx=0572d26c ecx=0572d72d edx=0572d72e esi=6f43203a edi=0572d77c
eip=777515de esp=0572d258 ebp=00002746 iopl=0         nv up ei pl zr na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246

Call stack:
777515DE  ntdll.dll:777515DE  ZwRaiseException
7774014E  ntdll.dll:7774014E  KiUserExceptionDispatcher
0572D26C
0572D2BC

LOL, does it look any better to you?

Yeah, this version is very unstable on my router. Got worse with the addition of GBT. Was segfaulting every day or two, now every few hours. From the logs, it seems to (mostly) crash after a new work thread is created.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1481164199
Hero Member
*
Offline Offline

Posts: 1481164199

View Profile Personal Message (Offline)

Ignore
1481164199
Reply with quote  #2

1481164199
Report to moderator
1481164199
Hero Member
*
Offline Offline

Posts: 1481164199

View Profile Personal Message (Offline)

Ignore
1481164199
Reply with quote  #2

1481164199
Report to moderator
1481164199
Hero Member
*
Offline Offline

Posts: 1481164199

View Profile Personal Message (Offline)

Ignore
1481164199
Reply with quote  #2

1481164199
Report to moderator
crazyates
Legendary
*
Offline Offline

Activity: 938



View Profile
November 14, 2012, 07:22:55 PM
 #7982

LOL, does it look any better to you?

Nope, but I'm really not good with all this stuff. Wink

Tips? 1crazy8pMqgwJ7tX7ZPZmyPwFbc6xZKM9
Previous Trade History - Sale Thread
Askit2
Hero Member
*****
Offline Offline

Activity: 524


View Profile
November 14, 2012, 08:24:04 PM
 #7983

Since eclipse uses fractional difficulties and it seems they are less reliable on JSON could you accept whatever eclipse says to work on then if it has a decimal truncate it to an int and add 1?
I only ask because it seems like what you have done is best practices for getting reliable work. That would make less changes in the code so no need to internally change from int difficulties to decimal. Just it would require a change to the value on reciept.

You make the best miner. I would rather use CGMiner then stratum on eclipse so if it's not possible or doesn't get done I will still appreciate your miner.

Actually I see a good reason not to now that I think on it more. It seemed easy before but if I got a 1.9 difficulty I doubt 2 would be much worse but 1.09 would obviously cost me shares in theory. Unless the client could specify its difficulty it is working on that will cause an issue with not submitting work.

I appreciate donations at ( 1NwkQdmomQPLtdes5KuZhB1D22p7ZGRy4p )
If I am helping in the CGMiner thread give it to Con or Kano. They do the work there.
If you want to sign up for a coinbase account I would appreciate it if you use my referral link. US people now wire, 1% fee give or take a little for sending to your bank account. https://coinbase.com/?r=515bf6145682db9d11000028&utm_campaign=user-referral&src=
Luke-Jr
Legendary
*
Offline Offline

Activity: 2086



View Profile
November 14, 2012, 09:17:58 PM
 #7984

Since eclipse uses fractional difficulties and it seems they are less reliable on JSON could you accept whatever eclipse says to work on then if it has a decimal truncate it to an int and add 1?
Eclipse is fully stratum/JSON/JSON-RPC compliant. Truncating it works, but you'll lose shares if you add a 1.

In any case, GBT is still the preferred protocol.

Inaba
Legendary
*
Offline Offline

Activity: 1260



View Profile WWW
November 14, 2012, 09:24:17 PM
 #7985

Cgminer is already working with vardiff on EMC, it's just a format thing, I think.  I have a patch in cgminer that works fine with Eclipse and the changes are pretty minor.

If you're searching these lines for a point, you've probably missed it.  There was never anything there in the first place.
-ck
Moderator
Legendary
*
Offline Offline

Activity: 2002


Ruu \o/


View Profile WWW
November 14, 2012, 10:25:52 PM
 #7986

Cgminer is already working with vardiff on EMC, it's just a format thing, I think.  I have a patch in cgminer that works fine with Eclipse and the changes are pretty minor.
EMC stratum support should be fixed in git now, with support for fractional diffs and diffs just below 1. I used some of Inaba's code ideas and expanded it to include support for the actual fractional diffs as well.

Primary developer/maintainer for cgminer and ckpool/ckproxy.
Pooled mine at kano.is, solo mine at solo.ckpool.org
-ck
-ck
Moderator
Legendary
*
Offline Offline

Activity: 2002


Ruu \o/


View Profile WWW
November 14, 2012, 11:32:19 PM
 #7987

Those with easy to reproduce crashes on windows can you try one of these quick hack builds please:
http://ck.kolivas.org/apps/cgminer/temp/

Primary developer/maintainer for cgminer and ckpool/ckproxy.
Pooled mine at kano.is, solo mine at solo.ckpool.org
-ck
kano
Legendary
*
Offline Offline

Activity: 1932


Linux since 1997 RedHat 4


View Profile
November 14, 2012, 11:47:20 PM
 #7988

Since eclipse uses fractional difficulties and it seems they are less reliable on JSON could you accept whatever eclipse says to work on then if it has a decimal truncate it to an int and add 1?
Eclipse is fully stratum/JSON/JSON-RPC compliant. Truncating it works, but you'll lose shares if you add a 1.

In any case, GBT is still the preferred protocol.
Only by idiots.

Pool: https://kano.is BTC: 1KanoiBupPiZfkwqB7rfLXAzPnoTshAVmb
CKPool and CGMiner developer, IRC FreeNode #ckpool and #cgminer kanoi
Help keep Bitcoin secure by mining on pools with Stratum, the best protocol to mine Bitcoins with ASIC hardware
mdude77
Legendary
*
Offline Offline

Activity: 1358


View Profile
November 15, 2012, 01:23:56 AM
 #7989

Those with easy to reproduce crashes on windows can you try one of these quick hack builds please:
http://ck.kolivas.org/apps/cgminer/temp/

Not much different.  Visual Studio gives me nothing to work with.  Dr. MingW gives me this:

Code:
cgminer.exe caused an Access Violation at location 0040cb33 in module cgminer.exe Reading from location 00000000.

Registers:
eax=00000000 ebx=624836d0 ecx=74712e09 edx=07dfa910 esi=00000000 edi=004b0e80
eip=0040cb33 esp=0408f3d0 ebp=00579198 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010202

Call stack:
0040CB33  cgminer.exe:0040CB33
7713FAF6  ntdll.dll:7713FAF6  RtlAnsiCharToUnicodeChar
77140093  ntdll.dll:77140093  LdrGetDllHandleEx
7713FD2F  ntdll.dll:7713FD2F  LdrGetDllHandle
76641A35  KERNELBASE.dll:76641A35  GetModuleFileNameW
7666734E  KERNELBASE.dll:7666734E  IsNLSDefinedString
76641CFB  KERNELBASE.dll:76641CFB  GetModuleFileNameW
7666734E  KERNELBASE.dll:7666734E  IsNLSDefinedString
76641CFB  KERNELBASE.dll:76641CFB  GetModuleFileNameW
74AF3362  kernel32.dll:74AF3362  RegKrnInitialize

Maybe if I can get it to compile in Visual Studio, I'll run in it dev and see what happens when I unplug the NIC.

M

MMinerMonitor author, monitor/auto/schedule reboots/alerts/remote/MobileMiner for Ants and Spondoolies! Latest (5.2). MPoolMonitor author, monitor stats/workers for most pools, global BTC stats (current/nxt diff/USD val/hashrate/calc)! Latest (v4.2) 
Buyer beware of Bitmain hardware and services.
Askit2
Hero Member
*****
Offline Offline

Activity: 524


View Profile
November 15, 2012, 01:41:37 AM
 #7990

Since eclipse uses fractional difficulties and it seems they are less reliable on JSON could you accept whatever eclipse says to work on then if it has a decimal truncate it to an int and add 1?
Eclipse is fully stratum/JSON/JSON-RPC compliant. Truncating it works, but you'll lose shares if you add a 1.

In any case, GBT is still the preferred protocol.

This was in the post luke so hackily quoted. I even noted that it would lose acceptable shares. My first thought had been to actually just truncate it but that would cause higher rejects. My second thought was to add to it making sure that a person wouldn't send a ton of rejects. Technically a person could just spam the pool with any shares they wanted and though the difficulty would likely make them rejects it wouldn't keep it from working. Would it be ugly sure. Hacky sure. Really bad for your stats absolutely. A divine solution it really shouldn't be.

Also I note Luke actually makes less then 1Diff shares only send >=1Diff shares so those could have losses. I would call it a quick fix but for the guy trolling Con about not just blindly altering the data as a "Compliant" answer I really wonder. The whole point is to reduce network traffic. By spamming with lower results you do anything but lower it. What Luke did do is keep traffic the same as if the server sent the nearest lower int. This tells me Con isn't so much wrong as Luke used the laziest way to fix it. A Compliant answer "Should" actually only send what the difficulty is.

My second suggestion posted shortly after the one I am quoting lower and before Luke quoted me wondered why a client couldn't ask for or submit a higher difficulty work unit. Say the pool asked for 1.09 and your miner only uses ints why not send diff 2 shares but before you do negotiate with the server for pay based on diff 2. Still runs ints but pays more per unit and requires less network traffic.


Quote

Actually I see a good reason not to now that I think on it more. It seemed easy before but if I got a 1.9 difficulty I doubt 2 would be much worse but 1.09 would obviously cost me shares in theory. Unless the client could specify its difficulty it is working on that will cause an issue with not submitting work.

I appreciate donations at ( 1NwkQdmomQPLtdes5KuZhB1D22p7ZGRy4p )
If I am helping in the CGMiner thread give it to Con or Kano. They do the work there.
If you want to sign up for a coinbase account I would appreciate it if you use my referral link. US people now wire, 1% fee give or take a little for sending to your bank account. https://coinbase.com/?r=515bf6145682db9d11000028&utm_campaign=user-referral&src=
-ck
Moderator
Legendary
*
Offline Offline

Activity: 2002


Ruu \o/


View Profile WWW
November 15, 2012, 01:44:48 AM
 #7991

Those with easy to reproduce crashes on windows can you try one of these quick hack builds please:
http://ck.kolivas.org/apps/cgminer/temp/

Not much different.  Visual Studio gives me nothing to work with.  Dr. MingW gives me this:

Code:
cgminer.exe caused an Access Violation at location 0040cb33 in module cgminer.exe Reading from location 00000000.

Registers:
eax=00000000 ebx=624836d0 ecx=74712e09 edx=07dfa910 esi=00000000 edi=004b0e80
eip=0040cb33 esp=0408f3d0 ebp=00579198 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010202

Call stack:
0040CB33  cgminer.exe:0040CB33
7713FAF6  ntdll.dll:7713FAF6  RtlAnsiCharToUnicodeChar
77140093  ntdll.dll:77140093  LdrGetDllHandleEx
7713FD2F  ntdll.dll:7713FD2F  LdrGetDllHandle
76641A35  KERNELBASE.dll:76641A35  GetModuleFileNameW
7666734E  KERNELBASE.dll:7666734E  IsNLSDefinedString
76641CFB  KERNELBASE.dll:76641CFB  GetModuleFileNameW
7666734E  KERNELBASE.dll:7666734E  IsNLSDefinedString
76641CFB  KERNELBASE.dll:76641CFB  GetModuleFileNameW
74AF3362  kernel32.dll:74AF3362  RegKrnInitialize

Maybe if I can get it to compile in Visual Studio, I'll run in it dev and see what happens when I unplug the NIC.

M
Thanks. That is quite different actually. I've uploaded another set of executables into that temporary directory which may get us even further. Can you try them please? There is no way on earth it will compile on VS.

Primary developer/maintainer for cgminer and ckpool/ckproxy.
Pooled mine at kano.is, solo mine at solo.ckpool.org
-ck
mdude77
Legendary
*
Offline Offline

Activity: 1358


View Profile
November 15, 2012, 02:20:13 AM
 #7992

Thanks. That is quite different actually. I've uploaded another set of executables into that temporary directory which may get us even further. Can you try them please? There is no way on earth it will compile on VS.

This is more like what I was expecting.  The debug version is much much larger than the production one.  But the output looks about the same...

Code:
cgminerdebug.exe caused an Access Violation at location 0040cb33 in module cgminerdebug.exe Reading from location 00000000.

Registers:
eax=00000000 ebx=624836d0 ecx=74712e09 edx=07c51858 esi=00000000 edi=00770ea0
eip=0040cb33 esp=03fff3d0 ebp=00801480 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010202

Call stack:
0040CB33  cgminerdebug.exe:0040CB33
7713FAF6  ntdll.dll:7713FAF6  RtlAnsiCharToUnicodeChar
77140093  ntdll.dll:77140093  LdrGetDllHandleEx
7713FD2F  ntdll.dll:7713FD2F  LdrGetDllHandle
76641A35  KERNELBASE.dll:76641A35  GetModuleFileNameW
7666734E  KERNELBASE.dll:7666734E  IsNLSDefinedString
76641CFB  KERNELBASE.dll:76641CFB  GetModuleFileNameW
7666734E  KERNELBASE.dll:7666734E  IsNLSDefinedString
76641CFB  KERNELBASE.dll:76641CFB  GetModuleFileNameW
74AF3362  kernel32.dll:74AF3362  RegKrnInitialize

How about Watcom?  I can dust it off and see if I can get it to run there.

M

MMinerMonitor author, monitor/auto/schedule reboots/alerts/remote/MobileMiner for Ants and Spondoolies! Latest (5.2). MPoolMonitor author, monitor stats/workers for most pools, global BTC stats (current/nxt diff/USD val/hashrate/calc)! Latest (v4.2) 
Buyer beware of Bitmain hardware and services.
Schleicher
Hero Member
*****
Offline Offline

Activity: 630



View Profile
November 15, 2012, 02:25:00 AM
 #7993

On my system it looks about the same:
Code:
cgminer (1).exe caused an Access Violation at location 0040cc8e in module cgminer (1).exe Reading from location 00000000.

Registers:
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000 edi=01e4f908
eip=0040cc8e esp=02b6f3d0 ebp=01e73df8 iopl=0         nv up ei pl zr na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010246

Call stack:
0040CC8E  cgminer (1).exe:0040CC8E
77D2FA19  ntdll.dll:77D2FA19  RtlAnsiCharToUnicodeChar
77D2FAF6  ntdll.dll:77D2FAF6  RtlAnsiCharToUnicodeChar
77D30093  ntdll.dll:77D30093  LdrGetDllHandleEx
77D2FD2F  ntdll.dll:77D2FD2F  LdrGetDllHandle
76D81A35  KERNELBASE.dll:76D81A35  GetModuleFileNameW
76DA734E  KERNELBASE.dll:76DA734E  IsNLSDefinedString
76D81CFB  KERNELBASE.dll:76D81CFB  GetModuleFileNameW
75733362  kernel32.dll:75733362  RegKrnInitialize
This is with Windows 7

Bitcoin donations: 1H2BHSyuwLP9vqt2p3bK9G3mDJsAi7qChw
Luke-Jr
Legendary
*
Offline Offline

Activity: 2086



View Profile
November 15, 2012, 02:39:11 AM
 #7994

Also I note Luke actually makes less then 1Diff shares only send >=1Diff shares so those could have losses.
It's not possible to send less than 1diff shares (except for CPU/GPU).

Luke used the laziest way to fix it. A Compliant answer "Should" actually only send what the difficulty is.
Perhaps it is a bit lazy, but it works. Unfortunately, since stratum is representing the target as bdiff, it is impossible for the miner to know exactly what the target is. (Admittedly, it would be possible to get a closer guess of course.)

My second suggestion posted shortly after the one I am quoting lower and before Luke quoted me wondered why a client couldn't ask for or submit a higher difficulty work unit. Say the pool asked for 1.09 and your miner only uses ints why not send diff 2 shares but before you do negotiate with the server for pay based on diff 2. Still runs ints but pays more per unit and requires less network traffic.
Just one of the many things GBT supports but stratum doesn't (yet?).

-ck
Moderator
Legendary
*
Offline Offline

Activity: 2002


Ruu \o/


View Profile WWW
November 15, 2012, 04:21:42 AM
 #7995

Updated with support for fractional diffs and diffs just below 1.

Primary developer/maintainer for cgminer and ckpool/ckproxy.
Pooled mine at kano.is, solo mine at solo.ckpool.org
-ck
kano
Legendary
*
Offline Offline

Activity: 1932


Linux since 1997 RedHat 4


View Profile
November 15, 2012, 05:32:05 AM
 #7996

Also I note Luke actually makes less then 1Diff shares only send >=1Diff shares so those could have losses.
It's not possible to send less than 1diff shares (except for CPU/GPU).
Ah ... OK ... yes to put your vague stupid statement into reality ... it's possible for all devices.
The issue at the moment is that no BTC-FPGA bitstreams have been written that support <1 difficulty.
All the GPU ocl code that I have seen also only supports 1 difficulty.
However, there is no actual need for < 1 difficulty with BTC.
If there was, you'd just need to write a new OCL for the GPUs or a new bitstream for the FPGAs

However, for all Scrypt mining, it is of course possible and mandatory to support < 1 difficulty.
i.e. it does already.

Quote
Luke used the laziest way to fix it. A Compliant answer "Should" actually only send what the difficulty is.
Perhaps it is a bit lazy, but it works. Unfortunately, since stratum is representing the target as bdiff, it is impossible for the miner to know exactly what the target is. (Admittedly, it would be possible to get a closer guess of course.)
Look just cos your a piece of crap programmer, doesn't mean you need to tell everyone you are, here in the cgminer thread.
Go do that else where.

Fractional difficulty is simple.
The only issue is that maybe one in a few billion-trillion shares might be rejected that are valid.
... and they wouldn't ever be a block either.
So who gives a damn if it is that rare to ever lose a share?
i.e. stop writing crappy hack code and do it properly for once.

Quote
My second suggestion posted shortly after the one I am quoting lower and before Luke quoted me wondered why a client couldn't ask for or submit a higher difficulty work unit. Say the pool asked for 1.09 and your miner only uses ints why not send diff 2 shares but before you do negotiate with the server for pay based on diff 2. Still runs ints but pays more per unit and requires less network traffic.
Just one of the many things GBT supports but stratum doesn't (yet?).
More FUD - fuck you like to spread it around like shit.
There is no many coz there are no implementations of any of the crap that you seem to think is better in GBT.
Can you name even ONE that is implemented and used anywhere?
And if you can find ONE, then maybe consider listing this delusional many you keep having wet dreams about.

You've been told what is wrong with GBT and ignored it.
So yes GBT sux and no matter how often you make these deceptive comments, GBT is still crap.

Pool: https://kano.is BTC: 1KanoiBupPiZfkwqB7rfLXAzPnoTshAVmb
CKPool and CGMiner developer, IRC FreeNode #ckpool and #cgminer kanoi
Help keep Bitcoin secure by mining on pools with Stratum, the best protocol to mine Bitcoins with ASIC hardware
meowmeowbrowncow
Sr. Member
****
Offline Offline

Activity: 322



View Profile
November 15, 2012, 05:38:39 AM
 #7997


...
There is no many coz there are no implementations of any of the crap that you seem to think is better in GBT.
...
So yes GBT sux and no matter how often you make these deceptive comments, GBT is still crap.


GBT just wants to be friends.   Cry

"Bitcoin has been an amazing ride, but the most fascinating part to me is the seemingly universal tendency of libertarians to immediately become authoritarians the very moment they are given any measure of power to silence the dissent of others."  - The Bible
PandaMiner
Sr. Member
****
Offline Offline

Activity: 252


I got scammed Jan2014


View Profile WWW
November 15, 2012, 05:53:15 AM
 #7998

Hey guys.  I turned the help text files into one HTML help file.

Let me know what you think!

http://test.the47.net/cgminer/readme.html

My Litecoin address: Lf9WKM61AhmXchG2Ph2cftHKSQhxHutcdk
My Bitcoin address: 1Hwem4GSQWPCtBTKcSpXg2jYwxF6PtTjZx
--> Have you tried Triplemining.com? <--
crazyates
Legendary
*
Offline Offline

Activity: 938



View Profile
November 15, 2012, 06:02:50 AM
 #7999

Hey guys.  I turned the help text files into one HTML help file.

Let me know what you think!

http://test.the47.net/cgminer/readme.html

Looks good! Cept the FAQ (point 10) link isn't working.

Tips? 1crazy8pMqgwJ7tX7ZPZmyPwFbc6xZKM9
Previous Trade History - Sale Thread
PandaMiner
Sr. Member
****
Offline Offline

Activity: 252


I got scammed Jan2014


View Profile WWW
November 15, 2012, 06:20:13 AM
 #8000

Hey guys.  I turned the help text files into one HTML help file.

Let me know what you think!

http://test.the47.net/cgminer/readme.html

Looks good! Cept the FAQ (point 10) link isn't working.

Doh! Will fix asap.

EDIT: Fixed

My Litecoin address: Lf9WKM61AhmXchG2Ph2cftHKSQhxHutcdk
My Bitcoin address: 1Hwem4GSQWPCtBTKcSpXg2jYwxF6PtTjZx
--> Have you tried Triplemining.com? <--
Pages: « 1 ... 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 ... 830 »
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!