DERO HE BlockChain Explorer(v1) Mainnet

hosted on

DERO Mining Node

Tx hash: d95c9237ed0cf1198f99c866b24a388899872631d748673c171fc25efc0dbbdd Type SC

Block: 1a83ad013889c59d2c9ef59888fbffea3e3b6c1a0ab0ff53db8f18bc86483b93 (VALID)
SCID current reserves
SCID Amount(in atomic units)
0000000000000000000000000000000000000000000000000000000000000000 0
SCID string variables
key value
C 2f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c202267616d652e6a7322290a33312053544f524528226465736372486472222c20224a532066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c202267616d652e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c20223233376336313864303531353733386664646530373338613039646238353730333862626566666265613131666232343537306664313530623830323237306222290a33372053544f5245282266696c65436865636b53222c20223163306239353131633335383433386235623863346134323434323430303932383837333761363638323230616531633734363566343531356436643363643222290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a636f6e7374207376673d646f63756d656e742e676574456c656d656e7442794964282767616d6527290a636f6e737420736869704e6f64653d646f63756d656e742e676574456c656d656e7442794964282773686970426f647927290a636f6e737420666c616d654e6f64653d646f63756d656e742e676574456c656d656e7442794964282273686970466c616d6522290a636f6e73742061737465726f6964734e6f64653d646f63756d656e742e676574456c656d656e7442794964282761737465726f69647327290a636f6e73742062756c6c6574734e6f64653d646f63756d656e742e676574456c656d656e7442794964282762756c6c65747327290a636f6e7374207061727469636c65734e6f64653d646f63756d656e742e676574456c656d656e744279496428227061727469636c657322290a0a636f6e73742057494454483d3830300a636f6e7374204845494748543d3630300a636f6e737420534146455f5241444955533d3135300a636f6e7374204d41585f4845414c54483d330a636f6e7374204c495645533d330a0a66756e6374696f6e207365745a6f6f6d287363616c65297b0a09636f6e737420673d646f63756d656e742e676574456c656d656e7442794964282267616d655363616c6522290a09672e73657441747472696275746528227472616e73666f726d222c20607363616c6528247b7363616c657d2960290a7d0a0a66756e6374696f6e206175746f5363616c6528297b0a09636f6e73742062617365573d3830300a09636f6e73742062617365483d3630300a09636f6e73742073637265656e573d77696e646f772e696e6e657257696474680a09636f6e73742073637265656e483d77696e646f772e696e6e65724865696768740a09636f6e7374207363616c653d4d6174682e6d696e280a090973637265656e57202f2062617365572c0a090973637265656e48202f2062617365480a09290a09636f6e7374207374657073203d205b302e352c302e37352c312e302c312e32352c312e352c322e302c332e305d0a096c65742062657374203d2073746570735b305d0a09666f7228636f6e73742073206f66207374657073297b0a090969662873203c3d207363616c65292062657374203d20733b0a097d0a096c657420773d286261736557202a2062657374290a096c657420683d286261736548202a2062657374290a097376672e73657441747472696275746528227769647468222c77290a097376672e7365744174747269627574652822686569676874222c68290a097376672e736574417474726962757465282276696577426f78222c2230203020222b772b2220222b68290a097365745a6f6f6d2862657374290a7d0a0a2f2f6d6174726978206d756c7469706c790a66756e6374696f6e206d61744964656e7469747928297b0a0972657475726e205b312c20302c20302c20312c20302c20305d3b0a7d0a0a66756e6374696f6e206d61745472616e736c6174652874782c207479297b0a0972657475726e205b312c20302c20302c20312c2074782c2074795d0a7d0a0a66756e6374696f6e206d6174526f7461746528616e676c65297b0a09636f6e737420633d4d6174682e636f7328616e676c65290a09636f6e737420733d4d6174682e73696e28616e676c65290a0972657475726e205b632c732c2d732c632c302c305d0a7d0a0a66756e6374696f6e206d61745363616c652873782c737929207b0a0972657475726e205b73782c302c302c73792c302c305d0a7d0a0a66756e6374696f6e206d61744d756c28612c62297b0a0972657475726e205b0a0909615b305d202a20625b305d202b20615b325d202a20625b315d2c0a0909615b315d202a20625b305d202b20615b335d202a20625b315d2c0a0909615b305d202a20625b325d202b20615b325d202a20625b335d2c0a0909615b315d202a20625b325d202b20615b335d202a20625b335d2c0a0909615b305d202a20625b345d202b20615b325d202a20625b355d202b20615b345d2c0a0909615b315d202a20625b345d202b20615b335d202a20625b355d202b20615b355d0a095d3b0a7d0a0a66756e6374696f6e206d61744170706c79286d2c70297b0a0972657475726e207b0a0909783a206d5b305d202a20702e78202b206d5b325d202a20702e79202b206d5b345d2c0a0909793a206d5b315d202a20702e78202b206d5b335d202a20702e79202b206d5b355d0a097d3b0a7d0a0a76617220746872757374506f776572203d20300a636f6e737420736869705368617065203d205b0a7b20783a2031352c2020793a203020207d2c2f2f206e6f73650a7b20783a202d31302c20793a203130207d2c0a7b20783a202d31302c20793a202d3130207d0a5d3b0a0a636f6e73742073746174653d7b0a09736869703a7b0a0909783a3430302c0a0909793a3330302c0a0909616e676c653a302c0a090976783a302c0a090976793a302c0a09096865616c74683a4d41585f4845414c54482c0a0909696e76756c6e3a302c0a090973686170653a7368697053686170652c0a0909686974466c6173683a300a097d2c0a096d6f64653a227469746c65222c0a096c697665733a4c495645532c0a096c6576656c3a302c200a096b6579733a7b7d2c0a0961737465726f6964733a5b5d2c0a0962756c6c6574733a5b5d2c0a097061727469636c65733a5b5d2c0a097368617264733a5b5d0a7d0a0a0a66756e6374696f6e206170706c7954687275737428297b0a09636f6e7374207468727573743d302e31350a0973746174652e736869702e7678202b3d204d6174682e636f732873746174652e736869702e616e676c6529202a207468727573740a0973746174652e736869702e7679202b3d204d6174682e73696e2873746174652e736869702e616e676c6529202a207468727573740a09746872757374506f776572203d207468727573740a7d0a2f2f696e7075740a77696e646f772e6164644576656e744c697374656e657228226b6579646f776e222c65203d3e7b0a09696628652e636f64653d3d3d22537061636522297b09090a090973686f6f7428290a097d0a7d290a77696e646f772e6164644576656e744c697374656e657228226b6579646f776e222c65203d3e7b0a0969662028652e636f64653d3d3d22456e7465722229207b0a0909737461727450726573736564282909090a097d0a7d290a77696e646f772e6164644576656e744c697374656e657228276b6579646f776e272c653d3e73746174652e6b6579735b652e636f64655d3d74727565290a77696e646f772e6164644576656e744c697374656e657228276b65797570272c65203d3e73746174652e6b6579735b652e636f64655d3d66616c7365290a0a66756e6374696f6e2073746172745072657373656428297b0a0969662873746174652e6d6f6465213d3d22706c6179696e6722262673746174652e6d6f6465213d3d20227061757365642229737461727447616d6528290a09656c73652069662873746174652e6d6f6465213d3d2270617573656422297b73746174652e6d6f6465203d2022706175736564223b68756447616d654f7665722e74657874436f6e74656e743d22504155534544227d0a09656c73657b73746174652e6d6f64653d22706c6179696e67223b68756447616d654f7665722e74657874436f6e74656e743d22227d0a7d0a66756e6374696f6e2068616e646c65496e70757428297b0a09636f6e7374207475726e5370656564203d20302e30360a0969662873746174652e6b6579735b274172726f774c656674275d2973746174652e736869702e616e676c652d3d7475726e53706565640a0969662873746174652e6b6579735b274172726f775269676874275d2973746174652e736869702e616e676c652b3d7475726e53706565640a0969662873746174652e6b6579735b274172726f775570275d297b0a09096170706c7954687275737428290a097d0a7d0a0a66756e6374696f6e20706f6c6c47616d6570616428297b0a09636f6e73742067703d6e6176696761746f722e67657447616d657061647328295b305d0a096966282167702972657475726e3b0a0a092f2f20442d706164206f72206c65667420737469636b20666f7220726f746174696f6e202b207468727573740a09636f6e7374206c65667420203d2067702e627574746f6e735b31345d2e70726573736564207c7c2067702e617865735b305d203c202d302e343b0a09636f6e7374207269676874203d2067702e627574746f6e735b31355d2e70726573736564207c7c2067702e617865735b305d203e20302e343b0a09636f6e7374207570202020203d2067702e627574746f6e735b31325d2e70726573736564207c7c2067702e617865735b315d203c202d302e343b0a09636f6e7374207274203d2067702e627574746f6e735b375d2e76616c75653b202f2f203020746f20310a092f2f20427574746f6e730a09636f6e73742073686f6f7442746e203d2067702e627574746f6e735b305d2e707265737365643b0a0a092f2f20537461727420627574746f6e20646574656374696f6e0a09636f6e737420737461727442746e203d2067702e627574746f6e735b395d2e707265737365643b0a0a09636f6e7374206c78203d204d6174682e6162732867702e617865735b305d29203e20302e33203f2067702e617865735b305d203a20303b0a09636f6e7374206c79203d204d6174682e6162732867702e617865735b315d29203e20302e33203f2067702e617865735b315d203a20303b0a0a096966282167702e627574746f6e735b31345d2e70726573736564202626202167702e627574746f6e735b31355d2e7072657373656420202626202167702e627574746f6e735b31325d2e70726573736564297b0a090973746174652e736869702e616e676c65202b3d206c78202a20302e3038202f2f207363616c650a0a09096966287274203e20302e31297b0a090909636f6e737420706f776572203d207274202a20302e320a0a09090973746174652e736869702e7678202b3d204d6174682e636f732873746174652e736869702e616e676c6529202a20706f7765720a09090973746174652e736869702e7679202b3d204d6174682e73696e2873746174652e736869702e616e676c6529202a20706f7765720a090909746872757374506f776572203d20706f7765723b0a09097d656c73657b0a090909636f6e737420706f776572203d20282d6c7929202a20302e31353b202f2f207363616c650a09090973746174652e736869702e7678202b3d204d6174682e636f732873746174652e736869702e616e676c6529202a20706f7765720a09090973746174652e736869702e7679202b3d204d6174682e73696e2873746174652e736869702e616e676c6529202a20706f7765720a090909746872757374506f776572203d20706f7765723b0a09097d0a097d656c73657b0a09090a09092f2f20526f746174650a09096966286c6566742973746174652e736869702e616e676c65202d3d20302e30380a090969662872696768742973746174652e736869702e616e676c65202b3d20302e30380a09092f2f205468727573740a0909696628757029206170706c7954687275737428293b0a097d0a0a092f2f2053686f6f740a0969662873686f6f7442746e202626202173746174652e73686f6f7448656c64297b0a090973686f6f7428293b0a097d0a0973746174652e73686f6f7448656c64203d2073686f6f7442746e0a092f2f2053746172742067616d650a09696628737461727442746e202626202173746174652e737461727448656c64297b0a090973746172745072657373656428290a097d0a0973746174652e737461727448656c64203d20737461727442746e0a7d0a2f2f52656e646572696e670a66756e6374696f6e20777261702861297b0a2020696628612e78203c20302920612e78202b3d2057494454480a2020696628612e78203e2057494454482920612e78202d3d2057494454480a2020696628612e79203c20302920612e79202b3d204845494748540a2020696628612e79203e204845494748542920612e79202d3d204845494748540a7d0a66756e6374696f6e2072656e6465725368697028297b0a09636f6e7374207b782c792c616e676c657d3d73746174652e736869700a096c6574204d3d6d61744964656e7469747928290a094d3d6d61744d756c284d2c6d61745472616e736c61746528782c7929290a094d3d6d61744d756c284d2c6d6174526f7461746528616e676c6529290a0a09636f6e737420776f726c64506f696e74733d7368697053686170652e6d61702870203d3e6d61744170706c79284d2c7029290a0a09736869704e6f64652e736574417474726962757465280a090922706f696e7473222c0a0909776f726c64506f696e74732e6d61702870203d3e2060247b702e787d2c247b702e797d60292e6a6f696e28222022290a09293b0a0a09636f6e737420666c616d654c656e6774683d32300a09636f6e737420666c616d6557696474683d380a0a09636f6e7374206261636b583d73746174652e736869702e782d4d6174682e636f732873746174652e736869702e616e676c65292a31300a09636f6e7374206261636b593d73746174652e736869702e792d4d6174682e73696e2873746174652e736869702e616e676c65292a31300a0a09636f6e7374206c6566745820203d206261636b58202d204d6174682e636f732873746174652e736869702e616e676c6529202a20666c616d654c656e677468202b204d6174682e73696e2873746174652e736869702e616e676c6529202a20666c616d6557696474680a09636f6e7374206c6566745920203d206261636b59202d204d6174682e73696e2873746174652e736869702e616e676c6529202a20666c616d654c656e677468202d204d6174682e636f732873746174652e736869702e616e676c6529202a20666c616d6557696474680a0a09636f6e737420726967687458203d206261636b58202d204d6174682e636f732873746174652e736869702e616e676c6529202a20666c616d654c656e677468202d204d6174682e73696e2873746174652e736869702e616e676c6529202a20666c616d6557696474680a09636f6e737420726967687459203d206261636b59202d204d6174682e73696e2873746174652e736869702e616e676c6529202a20666c616d654c656e677468202b204d6174682e636f732873746174652e736869702e616e676c6529202a20666c616d6557696474680a0a09666c616d654e6f64652e736574417474726962757465280a090922706f696e7473222c0a090960247b6261636b587d2c247b6261636b597d20247b6c656674587d2c247b6c656674597d20247b7269676874587d2c247b7269676874597d600a09293b0a09696628746872757374506f776572203e2030297b0a0909636f6e737420666c69636b6572203d20302e37202b204d6174682e72616e646f6d2829202a20302e350a0909666c616d654e6f64652e73657441747472696275746528226f706163697479222c20746872757374506f776572202a20666c69636b6572290a0909746872757374506f776572203d20300a097d656c73657b0a0909666c616d654e6f64652e73657441747472696275746528226f706163697479222c2030290a097d0a7d0a0a66756e6374696f6e207570646174655368697028297b0a0973746174652e736869702e78202b3d2073746174652e736869702e76780a0973746174652e736869702e79202b3d2073746174652e736869702e76790a092f2f2073696d706c65206672696374696f6e0a0973746174652e736869702e7678202a3d20302e39390a0973746174652e736869702e7679202a3d20302e39390a0969662873746174652e736869702e696e76756c6e203e2030297b0a090973746174652e736869702e696e76756c6e2d2d0a097d0a0969662873746174652e736869702e686974466c617368203e2030297b0a0909736869704e6f64652e736574417474726962757465282266696c6c222c22776869746522290a090973746174652e736869702e686974466c6173682d2d0a097d656c73657b0a0909736869704e6f64652e736574417474726962757465282266696c6c222c226e6f6e6522290a097d090a09777261702873746174652e73686970290a7d0a0a66756e6374696f6e2073686f6f7428297b0a0969662873746174652e62756c6c6574732e6c656e677468203e3d2034292072657475726e3b0a09636f6e73742062756c6c65745370656564203d20363b0a09636f6e7374207b782c792c76782c76792c616e676c657d3d73746174652e736869700a0a092f2f20646972656374696f6e20766563746f72206f662074686520736869700a09636f6e73742064783d4d6174682e636f7328616e676c65290a09636f6e73742064793d4d6174682e73696e28616e676c65290a0a09636f6e73742062756c6c65743d7b0a0909782c0a0909792c0a090976783a207678202b206478202a2062756c6c657453706565642c0a090976793a207679202b206479202a2062756c6c657453706565642c0a09096c6966653a2036302c0a09096e6f64653a206e756c6c0a097d0a0a09636f6e7374206e6f64653d646f63756d656e742e637265617465456c656d656e744e532827687474703a2f2f7777772e77332e6f72672f323030302f737667272c27636972636c6527290a096e6f64652e736574417474726962757465282772272c2032290a096e6f64652e736574417474726962757465282766696c6c272c2027776869746527290a0962756c6c6574734e6f64652e617070656e644368696c64286e6f6465290a0962756c6c65742e6e6f6465203d206e6f64650a0a0973746174652e62756c6c6574732e707573682862756c6c6574290a7d0a0a66756e6374696f6e2075706461746542756c6c65747328297b0a0973746174652e62756c6c6574733d73746174652e62756c6c6574732e66696c74657228623d3e7b0a0909622e78202b3d20622e76780a0909622e79202b3d20622e76790a0909777261702862290a0a0909622e6c6966652d2d0a0909696628622e6c696665203c3d2030297b0a09090962756c6c6574734e6f64652e72656d6f76654368696c6428622e6e6f6465290a09090972657475726e2066616c73652f2f2072656d6f76652066726f6d2061727261790a09097d0a090972657475726e20747275652f2f206b6565702062756c6c65740a097d290a7d0a0a66756e6374696f6e2072656e64657242756c6c65747328297b0a09666f7228636f6e73742062206f662073746174652e62756c6c657473297b0a0909622e6e6f64652e73657441747472696275746528276378272c622e78290a0909622e6e6f64652e73657441747472696275746528276379272c622e79290a097d0a7d0a0a66756e6374696f6e206d616b6541737465726f69645368617065287261646975732c6a61676765646e6573733d302e342c706f696e74733d3130297b0a09636f6e73742073686170653d5b5d0a09666f72286c65742069203d20303b2069203c20706f696e74733b20692b2b297b0a0909636f6e737420616e676c65203d202869202f20706f696e747329202a204d6174682e5049202a20320a0909636f6e73742072203d20726164697573202a202831202d206a61676765646e657373202b204d6174682e72616e646f6d2829202a206a61676765646e657373202a2032290a090973686170652e70757368287b783a204d6174682e636f7328616e676c6529202a20722c20793a204d6174682e73696e28616e676c6529202a20727d290a097d0a0972657475726e2073686170650a7d0a0a66756e6374696f6e20737061776e41737465726f69644177617946726f6d5368697028726164697573297b0a096c657420782c793b0a0a097768696c65202874727565297b0a090978203d204d6174682e72616e646f6d2829202a2057494454480a090979203d204d6174682e72616e646f6d2829202a204845494748540a0a0909636f6e7374206478203d2078202d2073746174652e736869702e780a0909636f6e7374206479203d2079202d2073746174652e736869702e790a0909636f6e7374206469737432203d2064782a6478202b2064792a64790a0a09096966286469737432203e20534146455f524144495553202a20534146455f524144495553297b0a090909627265616b3b202f2f20676f6f6420737061776e0a09097d0a097d0a0a09737061776e41737465726f696428782c792c726164697573290a7d0a0a66756e6374696f6e2072656e64657241737465726f69644174286173742c6f782c6f79297b0a096c6574204d203d206d61744964656e7469747928290a094d203d206d61744d756c284d2c206d61745472616e736c617465286173742e78202b206f782c206173742e79202b206f7929290a094d203d206d61744d756c284d2c206d6174526f74617465286173742e616e676c6529290a0a09636f6e737420707473203d206173742e73686170652e6d61702870203d3e206d61744170706c79284d2c207029290a09636f6e737420737472203d207074732e6d61702870203d3e2060247b702e787d2c247b702e797d60292e6a6f696e28222022290a0a092f2f2063686f6f7365206d61696e206f7220736861646f77206e6f64650a09636f6e7374206e6f6465203d20286f78203d3d3d2030202626206f79203d3d3d203029203f206173742e6d61696e203a206173742e736861646f770a096e6f64652e7365744174747269627574652822706f696e7473222c20737472290a7d0a0a66756e6374696f6e2072656e64657241737465726f696441744e6f6465286173742c6f782c6f792c6e6f646529207b0a096c6574204d3d6d61744964656e7469747928290a094d3d6d61744d756c284d2c6d61745472616e736c617465286173742e78202b206f782c206173742e79202b206f7929290a094d3d6d61744d756c284d2c6d6174526f74617465286173742e616e676c6529290a0a09636f6e7374207074733d6173742e73686170652e6d617028703d3e6d61744170706c79284d2c7029290a096e6f64652e7365744174747269627574652822706f696e7473222c7074732e6d617028703d3e60247b702e787d2c247b702e797d60292e6a6f696e2822202229290a7d0a0a0a66756e6374696f6e20737061776e41737465726f696428782c792c726164697573297b0a09636f6e7374207368617065203d206d616b6541737465726f6964536861706528726164697573290a092f2f2067726f757020666f722061737465726f6964202b20736861646f770a09636f6e73742067726f7570203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226722290a092f2f206d61696e20706f6c79676f6e0a09636f6e737420706f6c794d61696e203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c22706f6c79676f6e22290a09706f6c794d61696e2e736574417474726962757465282266696c6c222c20226e6f6e6522290a09706f6c794d61696e2e73657441747472696275746528227374726f6b65222c2022776869746522290a09706f6c794d61696e2e73657441747472696275746528227374726f6b652d7769647468222c20223222290a0967726f75702e617070656e644368696c6428706f6c794d61696e290a092f2f20736861646f7720706f6c79676f6e732028757020746f2033290a09636f6e737420736861646f7773203d205b5d0a09666f72286c65742069203d20303b2069203c20333b20692b2b297b0a0909636f6e737420706f6c79203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c22706f6c79676f6e22290a0909706f6c792e736574417474726962757465282266696c6c222c226e6f6e6522290a0909706f6c792e73657441747472696275746528227374726f6b65222c22776869746522290a0909706f6c792e73657441747472696275746528227374726f6b652d7769647468222c223222290a090967726f75702e617070656e644368696c6428706f6c79290a0909736861646f77732e7075736828706f6c79290a097d0a0967726f75702e736574417474726962757465282266696c746572222c2275726c2823676c6f772922290a0a0961737465726f6964734e6f64652e617070656e644368696c642867726f7570290a0a09636f6e73742061737465726f69643d7b0a0909782c20792c0a090976783a20284d6174682e72616e646f6d2829202d20302e3529202a20322c0a090976793a20284d6174682e72616e646f6d2829202d20302e3529202a20322c0a09097261646975732c0a0909616e676c653a204d6174682e72616e646f6d2829202a204d6174682e5049202a20322c0a09097370696e3a20284d6174682e72616e646f6d2829202d20302e3529202a20302e30322c0a090973686170652c0a09096d61696e3a20706f6c794d61696e2c0a0909736861646f77733a736861646f77732c0a090967726f75700a097d0a0973746174652e61737465726f6964732e707573682861737465726f6964290a7d0a0a0a66756e6374696f6e2072656e64657241737465726f696428617374297b0a092f2f204d41494e2061737465726f69640a0972656e64657241737465726f69644174286173742c302c30290a0a092f2f20534841444f572061737465726f6964730a09636f6e7374206f6666736574733d5b5d0a0a09696620286173742e78202d206173742e726164697573203c203029206f6666736574732e70757368287b206f783a2057494454482c206f793a2030207d290a09696620286173742e78202b206173742e726164697573203e20574944544829206f6666736574732e70757368287b206f783a202d57494454482c206f793a2030207d290a0a09696620286173742e79202d206173742e726164697573203c203029206f6666736574732e70757368287b206f783a20302c206f793a20484549474854207d290a09696620286173742e79202b206173742e726164697573203e2048454947485429206f6666736574732e70757368287b206f783a20302c206f793a202d484549474854207d290a0a092f2f20646961676f6e616c20636f706965730a09696620286f6666736574732e6c656e677468203d3d3d203229207b0a09096f6666736574732e70757368287b0a0909096f783a206f6666736574735b305d2e6f782c0a0909096f793a206f6666736574735b315d2e6f790a09097d293b0a097d0a0a092f2f20736861646f77730a09666f72286c65742069203d20303b2069203c206f6666736574732e6c656e6774683b20692b2b297b0a092020636f6e7374206f6666203d206f6666736574735b695d0a092020636f6e7374206e6f6465203d206173742e736861646f77735b695d0a09202072656e64657241737465726f696441744e6f6465286173742c206f66662e6f782c206f66662e6f792c206e6f6465290a097d0a0a092f2f206869646520756e7573656420736861646f77206e6f6465730a09666f72286c65742069203d206f6666736574732e6c656e6774683b2069203c206173742e736861646f77732e6c656e6774683b20692b2b297b0a0920206173742e736861646f77735b695d2e7365744174747269627574652822706f696e7473222c2222290a097d0a0a7d0a0a0a66756e6374696f6e20676574577261704f666673657428782c20792c20726164697573297b0a096c6574206f78203d20300a096c6574206f79203d20300a0a096966202878202d20726164697573203c203029206f78203d2057494454480a09656c7365206966202878202b20726164697573203e20574944544829206f78203d202d57494454480a0a096966202879202d20726164697573203c203029206f79203d204845494748540a09656c7365206966202879202b20726164697573203e2048454947485429206f79203d202d4845494748540a0a0972657475726e207b206f782c206f79207d0a7d0a0a66756e6374696f6e2075706461746541737465726f69647328297b0a0969662873746174652e61737465726f6964732e6c656e677468203d3d3d2030297b0a09096e65774c6576656c28290a097d0a09666f7228636f6e73742061206f662073746174652e61737465726f696473297b0a0909612e78202b3d20612e76780a0909612e79202b3d20612e76790a0909612e616e676c65202b3d20612e7370696e0a0a090972656e64657241737465726f69642861290a0909777261702861290a097d0a7d0a0a0a2f2f20436f6c6c6973696f6e20646574656374696f6e0a66756e6374696f6e20706f696e74496e506f6c792870742c20706f6c7929207b0a096c657420696e736964653d66616c73653b0a09666f72286c65742069203d20302c206a203d20706f6c792e6c656e677468202d20313b2069203c20706f6c792e6c656e6774683b206a203d20692b2b297b0a0909636f6e7374207869203d20706f6c795b695d2e782c207969203d20706f6c795b695d2e790a0909636f6e737420786a203d20706f6c795b6a5d2e782c20796a203d20706f6c795b6a5d2e790a0a0909636f6e737420696e74657273656374203d0a090928287969203e2070742e792920213d3d2028796a203e2070742e7929292026260a09092870742e78203c2028786a202d20786929202a202870742e79202d20796929202f2028796a202d20796929202b207869290a0a090969662028696e746572736563742920696e73696465203d2021696e736964650a097d0a0972657475726e20696e736964650a7d0a0a66756e6374696f6e20636f6c6c6973696f6e28612c2062297b0a092f2f206275696c6420736861706541206d61747269780a096c6574204d613d6d61744964656e7469747928290a0a094d613d6d61744d756c284d612c6d61745472616e736c61746528612e782c20612e7929290a094d613d6d61744d756c284d612c6d6174526f7461746528612e616e676c6529290a0a092f2f206275696c6420736861706542206d61747269780a096c6574204d623d6d61744964656e7469747928290a0a094d623d6d61744d756c284d622c6d61745472616e736c61746528622e782c20622e7929290a094d623d6d61744d756c284d622c6d6174526f7461746528622e616e676c6529290a0a09636f6e737420776f726c64413d612e73686170652e6d617028703d3e6d61744170706c79284d612c7029290a09636f6e737420776f726c64423d622e73686170652e6d617028703d3e6d61744170706c79284d622c7029290a0a092f2f207368697020706f696e747320696e736964652061737465726f69640a09666f7228636f6e73742070206f6620776f726c6441297b0a0909696628706f696e74496e506f6c7928702c20776f726c644229292072657475726e20747275653b0a097d0a0a092f2f2061737465726f696420706f696e747320696e7369646520736869700a09666f7228636f6e73742070206f6620776f726c6442297b0a090969662028706f696e74496e506f6c7928702c20776f726c644129292072657475726e20747275653b0a097d0a0972657475726e2066616c73650a7d0a0a66756e6374696f6e2068616e646c65436f6c6c6973696f6e7328297b0a092f2f2062756c6c6574732076732061737465726f6964730a09666f7228636f6e73742062206f662073746174652e62756c6c657473297b0a0909666f7228636f6e73742061206f662073746174652e61737465726f696473297b0a0909096c6574204d61203d206d61744964656e7469747928290a0909094d61203d206d61744d756c284d612c206d61745472616e736c61746528612e782c20612e7929290a0909094d61203d206d61744d756c284d612c206d6174526f7461746528612e616e676c6529290a090909636f6e73742061737465726f6964576f726c64203d20612e73686170652e6d61702870203d3e206d61744170706c79284d612c207029290a090909696628706f696e74496e506f6c7928622c2061737465726f6964576f726c6429297b0a090909092f2f2072656d6f76652062756c6c65740a0909090962756c6c6574734e6f64652e72656d6f76654368696c6428622e6e6f6465290a0909090973746174652e62756c6c6574732e73706c6963652873746174652e62756c6c6574732e696e6465784f662862292c2031290a0a090909092f2f2073706c69742061737465726f6964206f722072656d6f76650a0909090961737465726f6964734e6f64652e72656d6f76654368696c6428612e67726f7570293b0a0909090973746174652e61737465726f6964732e73706c6963652873746174652e61737465726f6964732e696e6465784f662861292c2031290a09090909696628612e726164697573203e203230297b0a0909090909737061776e41737465726f696428612e782c20612e792c20612e726164697573202f2032290a0909090909737061776e41737465726f696428612e782c20612e792c20612e726164697573202f2032290a090909097d0a090909090a090909092f2f6566666563740a090909096c6574204d3d6d61744964656e7469747928290a090909094d3d6d61744d756c284d2c6d61745472616e736c61746528612e782c20612e7929290a090909094d3d6d61744d756c284d2c6d6174526f7461746528612e616e676c6529290a09090909636f6e737420776f726c64203d20612e73686170652e6d617028703d3e6d61744170706c79284d2c7029290a09090909666f72286c65742069203d20303b2069203c20776f726c642e6c656e6774683b20692b2b297b0a090909092020636f6e7374207031203d20776f726c645b695d0a090909092020636f6e7374207032203d20776f726c645b2869202b203129202520776f726c642e6c656e6774685d0a090909092020737061776e53686172642870312c2070322c2061290a090909097d0a090909092f2f646f6e650a09090909627265616b0a0909097d0a09097d0a097d0a0a092f2f20736869702076732061737465726f6964730a09666f7228636f6e73742061206f662073746174652e61737465726f696473297b0a0909696628636f6c6c6973696f6e2873746174652e736869702c6129297b0a09090969662873746174652e736869702e696e76756c6e203d3d3d2030297b0a0909090973746174652e736869702e6865616c74682d2d0a0909090973746174652e736869702e696e76756c6e203d203132300a0909090973746174652e736869702e686974466c617368203d2031300a0909090969662873746174652e736869702e6865616c7468203c3d2030297b0a09090909096b696c6c5368697028290a090909097d0a0909097d0a09097d0a097d0a7d0a0a0a66756e6374696f6e2072657365745368697028297b0a0973746174652e736869702e6865616c7468203d204d41585f4845414c54480a0973746174652e736869702e78203d205749445448202f20320a0973746174652e736869702e79203d20484549474854202f20320a0973746174652e736869702e7678203d20300a0973746174652e736869702e7679203d20300a0973746174652e736869702e616e676c65203d20300a0973746174652e736869702e696e76756c6e203d203138300a7d0a66756e6374696f6e206b696c6c5368697028297b0a096578706c6f6465536869702873746174652e736869702e782c2073746174652e736869702e79290a0973746174652e6c697665732d2d0a0969662873746174652e6c69766573203c3d2030297b0a090973746174652e6d6f6465203d202267616d656f766572220a090972657475726e0a097d0a0972657365745368697028290a7d0a0a66756e6374696f6e207570646174655061727469636c657328297b0a092f2f736869700a09666f72286c65742069203d2073746174652e7061727469636c65732e6c656e677468202d20313b2069203e3d20303b20692d2d297b0a0909636f6e73742070203d2073746174652e7061727469636c65735b695d0a0909702e78202b3d20702e76780a0909702e79202b3d20702e76790a0909702e6c6966652d2d0a0a0909702e6e6f64652e73657441747472696275746528227831222c20702e78290a0909702e6e6f64652e73657441747472696275746528227931222c20702e79290a0909702e6e6f64652e73657441747472696275746528227832222c20702e78202b20702e7678202a2032290a0909702e6e6f64652e73657441747472696275746528227932222c20702e79202b20702e7679202a2032290a0a0909696628702e6c696665203c3d2030297b0a090909702e6e6f64652e72656d6f766528290a09090973746174652e7061727469636c65732e73706c69636528692c2031290a09097d0a097d090a092f2f726f636b730a0973746174652e736861726473203d2073746174652e7368617264732e66696c74657228733d3e7b0a0909732e7831202b3d20732e76780a0909732e7931202b3d20732e76790a0909732e7832202b3d20732e76780a0909732e7932202b3d20732e76790a0909732e6c6966652d2d0a0a0909732e6e6f64652e73657441747472696275746528227831222c20732e7831290a0909732e6e6f64652e73657441747472696275746528227931222c20732e7931290a0909732e6e6f64652e73657441747472696275746528227832222c20732e7832290a0909732e6e6f64652e73657441747472696275746528227932222c20732e7932290a0a0909696628732e6c696665203c3d2030297b0a090909732e6e6f64652e72656d6f766528290a09090972657475726e2066616c73650a09097d0a090972657475726e20747275650a097d293b0a090a7d0a0a66756e6374696f6e206372656174655061727469636c654e6f646528297b0a09636f6e73742070203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226c696e6522290a09702e73657441747472696275746528227374726f6b65222c226f72616e676522290a09702e73657441747472696275746528227374726f6b652d7769647468222c223222290a097061727469636c65734e6f64652e617070656e644368696c642870290a0972657475726e20700a7d0a66756e6374696f6e206578706c6f64655368697028782c2079297b0a09666f7220286c65742069203d20303b2069203c20363b20692b2b297b0a090973746174652e7061727469636c65732e70757368287b0a090909782c0a090909792c0a09090976783a20284d6174682e72616e646f6d2829202d20302e3529202a20362c0a09090976793a20284d6174682e72616e646f6d2829202d20302e3529202a20362c0a0909096c6966653a2034302c0a0909096e6f64653a206372656174655061727469636c654e6f646528290a09097d293b0a097d0a7d0a0a66756e6374696f6e20737061776e53686172642870312c2070322c2061737465726f6964297b0a09636f6e7374206e6f6465203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226c696e6522290a096e6f64652e73657441747472696275746528227831222c2070312e78290a096e6f64652e73657441747472696275746528227931222c2070312e79290a096e6f64652e73657441747472696275746528227832222c2070322e78290a096e6f64652e73657441747472696275746528227932222c2070322e79290a096e6f64652e73657441747472696275746528227374726f6b65222c22776869746522290a096e6f64652e73657441747472696275746528227374726f6b652d7769647468222c223122290a097061727469636c65734e6f64652e617070656e644368696c64286e6f6465290a0a09636f6e737420616e676c65203d204d6174682e6174616e322870312e79202d2061737465726f69642e792c2070312e78202d2061737465726f69642e78290a09636f6e7374207370656564203d2032202b204d6174682e72616e646f6d2829202a20320a0a0973746174652e7368617264732e70757368287b0a090978313a2070312e782c2079313a2070312e792c0a090978323a2070322e782c2079323a2070322e792c0a090976783a204d6174682e636f7328616e676c6529202a207370656564202b2061737465726f69642e76782c0a090976793a204d6174682e73696e28616e676c6529202a207370656564202b2061737465726f69642e76792c0a09096c6966653a203330202b204d6174682e72616e646f6d2829202a2031362c0a09096e6f64650a097d293b0a7d0a0a66756e6374696f6e206e65774c6576656c28297b0a0969662873746174652e736869702e6865616c7468203c204d41585f4845414c5448297b0a090973746174652e736869702e6865616c74682b2b0a097d0a0973746174652e6c6576656c2b2b0a0973746172744c6576656c2873746174652e6c6576656c290a7d0a0a66756e6374696f6e2073746172744c6576656c286c6576656c297b0a09636f6e73742061737465726f6964436f756e74203d2034202b206c6576656c0a0a09666f72286c65742069203d20303b2069203c2061737465726f6964436f756e743b20692b2b297b0a0909737061776e41737465726f69644177617946726f6d53686970283430202b204d6174682e72616e646f6d2829202a203330290a097d0a7d0a0a66756e6374696f6e2075706461746548554428297b0a096875644865616c74682e74657874436f6e74656e74203d20224865616c74683a2022202b2073746174652e736869702e6865616c74680a096875644c697665732e74657874436f6e74656e7420203d20224c697665733a2022202b2073746174652e6c697665730a096875644c6576656c2e74657874436f6e74656e7420203d20224c6576656c3a2022202b2073746174652e6c6576656c0a0969662873746174652e6d6f6465203d3d202267616d656f76657222297b0a090968756447616d654f7665722e74657874436f6e74656e743d2247414d45204f564552220a090968756447616d654f76657245787472612e74657874436f6e74656e743d22507265737320456e746572206f72205374617274220a097d20656c7365207b0a090968756447616d654f7665722e74657874436f6e74656e743d22220a090968756447616d654f76657245787472612e74657874436f6e74656e743d22220a097d0a7d0a66756e6374696f6e20726573657447616d6528297b0a097768696c652861737465726f6964734e6f64652e66697273744368696c64297b0a090961737465726f6964734e6f64652e72656d6f76654368696c642861737465726f6964734e6f64652e66697273744368696c64290a097d0a0973746174652e61737465726f6964732e6c656e6774683d300a097768696c652862756c6c6574734e6f64652e66697273744368696c64297b0a090962756c6c6574734e6f64652e72656d6f76654368696c642862756c6c6574734e6f64652e66697273744368696c64290a097d0a0973746174652e62756c6c6574732e6c656e6774683d300a0973746174652e6c6576656c3d310a0973746174652e6c697665733d4c495645530a0972657365745368697028290a0973746172744c6576656c2873746174652e6c6576656c290a7d0a66756e6374696f6e20737461727447616d6528297b0a09726573657447616d652829090a0973746174652e6d6f64653d22706c6179696e67220a097469746c65546578742e74657874436f6e74656e743d22220a7d0a0a2f2f2047616d65206c6f6f700a66756e6374696f6e206c6f6f7028297b0a09706f6c6c47616d6570616428290a0968616e646c65496e70757428290a0969662873746174652e6d6f646520213d3d2022706c6179696e6722297b0a090972657175657374416e696d6174696f6e4672616d65286c6f6f70290a090972657475726e0a097d0a097570646174655368697028290a0975706461746542756c6c65747328290a0975706461746541737465726f69647328290a0968616e646c65436f6c6c6973696f6e7328290a097570646174655061727469636c657328290a0972656e6465725368697028290a0972656e64657242756c6c65747328290a092f2f2061737465726f69647320616c72656164792072656e646572656420696e2075706461746541737465726f6964730a0975706461746548554428290a0972657175657374416e696d6174696f6e4672616d65286c6f6f70290a7d0a2f2f20696e697469616c2073657475700a6175746f5363616c6528290a6c6f6f7028290a2a2f
dURL 67616d652e6a73
descrHdr 4a532066696c65
dislikes 0
docType 54454c412d4a532d31
docVersion 312e302e30
fileCheckC 32333763363138643035313537333866646465303733386130396462383537303338626265666662656131316662323435373066643135306238303232373062
fileCheckS 31633062393531316333353834333862356238633461343234343234303039323838373337613636383232306165316337343635663435313564366433636432
hash 64393563393233376564306366313139386639396338363662323461333838383939383732363331643734383637336331373166633235656663306462626464
iconURLHdr
likes 0
nameHdr 67616d652e6a73
owner 6465726f317179347966376335373777717a767a7134347833306c7967686135776a7a377772687736646e76356e337071346634643761716c75717133306d37616b
subDir
SCID uint64 variables
key value
built BLID : 2ba255d3f27da0184c03efed14e54a09509f45a190266872a3354c2e3299b252
Tx RootHash: 936f2794f641e26cae43e0ecb1e1e38355c130d73b88b69f019e911980420151 built height : 7111658
Timestamp: 1780017654311 Timestamp [UTC]: 2026-05-29 03:20:54 Age [y:d:h:m:s]: 498:57:58.49
Block: 7111659 Fee: 0.26758 Tx size: 19.012 kB
Tx version: 1 No of confirmations: 97030 Signature type: DERO_HOMOMORPHIC
Extra:
DERO : 2 inputs/outputs (RING size) Fees 0.26758 Deposited to SC 0.00000
Sender : dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
address
dero1qykyta6ntpd27nl0yq4xtzaf4ls6p5e9pqu0k2x4x3pqq5xavjsdxqgny8270
dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
SC Balance: 0.00000 DERO
SC CODE:
  //  Copyright 2024. Civilware. All rights reserved.
//  TELA Decentralized Web Document (TELA-DOC-1)
Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("nameHdr", "game.js")
31 STORE("descrHdr", "JS file")
32 STORE("iconURLHdr", "")
33 STORE("dURL", "game.js")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "")
36 STORE("fileCheckC", "237c618d0515738fdde0738a09db857038bbeffbea11fb24570fd150b802270b")
37 STORE("fileCheckS", "1c0b9511c358438b5b8c4a424424009288737a668220ae1c7465f4515d6d3cd2")
100 RETURN 0
End Function

Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function

Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function

Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function

/*const svg=document.getElementById('game')
const shipNode=document.getElementById('shipBody')
const flameNode=document.getElementById("shipFlame")
const asteroidsNode=document.getElementById('asteroids')
const bulletsNode=document.getElementById('bullets')
const particlesNode=document.getElementById("particles")

const WIDTH=800
const HEIGHT=600
const SAFE_RADIUS=150
const MAX_HEALTH=3
const LIVES=3

function setZoom(scale){
	const g=document.getElementById("gameScale")
	g.setAttribute("transform", `scale(${scale})`)
}

function autoScale(){
	const baseW=800
	const baseH=600
	const screenW=window.innerWidth
	const screenH=window.innerHeight
	const scale=Math.min(
		screenW / baseW,
		screenH / baseH
	)
	const steps = [0.5,0.75,1.0,1.25,1.5,2.0,3.0]
	let best = steps[0]
	for(const s of steps){
		if(s <= scale) best = s;
	}
	let w=(baseW * best)
	let h=(baseH * best)
	svg.setAttribute("width",w)
	svg.setAttribute("height",h)
	svg.setAttribute("viewBox","0 0 "+w+" "+h)
	setZoom(best)
}

//matrix multiply
function matIdentity(){
	return [1, 0, 0, 1, 0, 0];
}

function matTranslate(tx, ty){
	return [1, 0, 0, 1, tx, ty]
}

function matRotate(angle){
	const c=Math.cos(angle)
	const s=Math.sin(angle)
	return [c,s,-s,c,0,0]
}

function matScale(sx,sy) {
	return [sx,0,0,sy,0,0]
}

function matMul(a,b){
	return [
		a[0] * b[0] + a[2] * b[1],
		a[1] * b[0] + a[3] * b[1],
		a[0] * b[2] + a[2] * b[3],
		a[1] * b[2] + a[3] * b[3],
		a[0] * b[4] + a[2] * b[5] + a[4],
		a[1] * b[4] + a[3] * b[5] + a[5]
	];
}

function matApply(m,p){
	return {
		x: m[0] * p.x + m[2] * p.y + m[4],
		y: m[1] * p.x + m[3] * p.y + m[5]
	};
}

var thrustPower = 0
const shipShape = [
{ x: 15,  y: 0  },// nose
{ x: -10, y: 10 },
{ x: -10, y: -10 }
];

const state={
	ship:{
		x:400,
		y:300,
		angle:0,
		vx:0,
		vy:0,
		health:MAX_HEALTH,
		invuln:0,
		shape:shipShape,
		hitFlash:0
	},
	mode:"title",
	lives:LIVES,
	level:0, 
	keys:{},
	asteroids:[],
	bullets:[],
	particles:[],
	shards:[]
}


function applyThrust(){
	const thrust=0.15
	state.ship.vx += Math.cos(state.ship.angle) * thrust
	state.ship.vy += Math.sin(state.ship.angle) * thrust
	thrustPower = thrust
}
//input
window.addEventListener("keydown",e =>{
	if(e.code==="Space"){		
		shoot()
	}
})
window.addEventListener("keydown",e =>{
	if (e.code==="Enter") {
		startPressed()		
	}
})
window.addEventListener('keydown',e=>state.keys[e.code]=true)
window.addEventListener('keyup',e =>state.keys[e.code]=false)

function startPressed(){
	if(state.mode!=="playing"&&state.mode!== "paused")startGame()
	else if(state.mode!=="paused"){state.mode = "paused";hudGameOver.textContent="PAUSED"}
	else{state.mode="playing";hudGameOver.textContent=""}
}
function handleInput(){
	const turnSpeed = 0.06
	if(state.keys['ArrowLeft'])state.ship.angle-=turnSpeed
	if(state.keys['ArrowRight'])state.ship.angle+=turnSpeed
	if(state.keys['ArrowUp']){
		applyThrust()
	}
}

function pollGamepad(){
	const gp=navigator.getGamepads()[0]
	if(!gp)return;

	// D-pad or left stick for rotation + thrust
	const left  = gp.buttons[14].pressed || gp.axes[0] < -0.4;
	const right = gp.buttons[15].pressed || gp.axes[0] > 0.4;
	const up    = gp.buttons[12].pressed || gp.axes[1] < -0.4;
	const rt = gp.buttons[7].value; // 0 to 1
	// Buttons
	const shootBtn = gp.buttons[0].pressed;

	// Start button detection
	const startBtn = gp.buttons[9].pressed;

	const lx = Math.abs(gp.axes[0]) > 0.3 ? gp.axes[0] : 0;
	const ly = Math.abs(gp.axes[1]) > 0.3 ? gp.axes[1] : 0;

	if(!gp.buttons[14].pressed && !gp.buttons[15].pressed  && !gp.buttons[12].pressed){
		state.ship.angle += lx * 0.08 // scale

		if(rt > 0.1){
			const power = rt * 0.2

			state.ship.vx += Math.cos(state.ship.angle) * power
			state.ship.vy += Math.sin(state.ship.angle) * power
			thrustPower = power;
		}else{
			const power = (-ly) * 0.15; // scale
			state.ship.vx += Math.cos(state.ship.angle) * power
			state.ship.vy += Math.sin(state.ship.angle) * power
			thrustPower = power;
		}
	}else{
		
		// Rotate
		if(left)state.ship.angle -= 0.08
		if(right)state.ship.angle += 0.08
		// Thrust
		if(up) applyThrust();
	}

	// Shoot
	if(shootBtn && !state.shootHeld){
		shoot();
	}
	state.shootHeld = shootBtn
	// Start game
	if(startBtn && !state.startHeld){
		startPressed()
	}
	state.startHeld = startBtn
}
//Rendering
function wrap(a){
  if(a.x < 0) a.x += WIDTH
  if(a.x > WIDTH) a.x -= WIDTH
  if(a.y < 0) a.y += HEIGHT
  if(a.y > HEIGHT) a.y -= HEIGHT
}
function renderShip(){
	const {x,y,angle}=state.ship
	let M=matIdentity()
	M=matMul(M,matTranslate(x,y))
	M=matMul(M,matRotate(angle))

	const worldPoints=shipShape.map(p =>matApply(M,p))

	shipNode.setAttribute(
		"points",
		worldPoints.map(p => `${p.x},${p.y}`).join(" ")
	);

	const flameLength=20
	const flameWidth=8

	const backX=state.ship.x-Math.cos(state.ship.angle)*10
	const backY=state.ship.y-Math.sin(state.ship.angle)*10

	const leftX  = backX - Math.cos(state.ship.angle) * flameLength + Math.sin(state.ship.angle) * flameWidth
	const leftY  = backY - Math.sin(state.ship.angle) * flameLength - Math.cos(state.ship.angle) * flameWidth

	const rightX = backX - Math.cos(state.ship.angle) * flameLength - Math.sin(state.ship.angle) * flameWidth
	const rightY = backY - Math.sin(state.ship.angle) * flameLength + Math.cos(state.ship.angle) * flameWidth

	flameNode.setAttribute(
		"points",
		`${backX},${backY} ${leftX},${leftY} ${rightX},${rightY}`
	);
	if(thrustPower > 0){
		const flicker = 0.7 + Math.random() * 0.5
		flameNode.setAttribute("opacity", thrustPower * flicker)
		thrustPower = 0
	}else{
		flameNode.setAttribute("opacity", 0)
	}
}

function updateShip(){
	state.ship.x += state.ship.vx
	state.ship.y += state.ship.vy
	// simple friction
	state.ship.vx *= 0.99
	state.ship.vy *= 0.99
	if(state.ship.invuln > 0){
		state.ship.invuln--
	}
	if(state.ship.hitFlash > 0){
		shipNode.setAttribute("fill","white")
		state.ship.hitFlash--
	}else{
		shipNode.setAttribute("fill","none")
	}	
	wrap(state.ship)
}

function shoot(){
	if(state.bullets.length >= 4) return;
	const bulletSpeed = 6;
	const {x,y,vx,vy,angle}=state.ship

	// direction vector of the ship
	const dx=Math.cos(angle)
	const dy=Math.sin(angle)

	const bullet={
		x,
		y,
		vx: vx + dx * bulletSpeed,
		vy: vy + dy * bulletSpeed,
		life: 60,
		node: null
	}

	const node=document.createElementNS('http://www.w3.org/2000/svg','circle')
	node.setAttribute('r', 2)
	node.setAttribute('fill', 'white')
	bulletsNode.appendChild(node)
	bullet.node = node

	state.bullets.push(bullet)
}

function updateBullets(){
	state.bullets=state.bullets.filter(b=>{
		b.x += b.vx
		b.y += b.vy
		wrap(b)

		b.life--
		if(b.life <= 0){
			bulletsNode.removeChild(b.node)
			return false// remove from array
		}
		return true// keep bullet
	})
}

function renderBullets(){
	for(const b of state.bullets){
		b.node.setAttribute('cx',b.x)
		b.node.setAttribute('cy',b.y)
	}
}

function makeAsteroidShape(radius,jaggedness=0.4,points=10){
	const shape=[]
	for(let i = 0; i < points; i++){
		const angle = (i / points) * Math.PI * 2
		const r = radius * (1 - jaggedness + Math.random() * jaggedness * 2)
		shape.push({x: Math.cos(angle) * r, y: Math.sin(angle) * r})
	}
	return shape
}

function spawnAsteroidAwayFromShip(radius){
	let x,y;

	while (true){
		x = Math.random() * WIDTH
		y = Math.random() * HEIGHT

		const dx = x - state.ship.x
		const dy = y - state.ship.y
		const dist2 = dx*dx + dy*dy

		if(dist2 > SAFE_RADIUS * SAFE_RADIUS){
			break; // good spawn
		}
	}

	spawnAsteroid(x,y,radius)
}

function renderAsteroidAt(ast,ox,oy){
	let M = matIdentity()
	M = matMul(M, matTranslate(ast.x + ox, ast.y + oy))
	M = matMul(M, matRotate(ast.angle))

	const pts = ast.shape.map(p => matApply(M, p))
	const str = pts.map(p => `${p.x},${p.y}`).join(" ")

	// choose main or shadow node
	const node = (ox === 0 && oy === 0) ? ast.main : ast.shadow
	node.setAttribute("points", str)
}

function renderAsteroidAtNode(ast,ox,oy,node) {
	let M=matIdentity()
	M=matMul(M,matTranslate(ast.x + ox, ast.y + oy))
	M=matMul(M,matRotate(ast.angle))

	const pts=ast.shape.map(p=>matApply(M,p))
	node.setAttribute("points",pts.map(p=>`${p.x},${p.y}`).join(" "))
}


function spawnAsteroid(x,y,radius){
	const shape = makeAsteroidShape(radius)
	// group for asteroid + shadow
	const group = document.createElementNS("http://www.w3.org/2000/svg","g")
	// main polygon
	const polyMain = document.createElementNS("http://www.w3.org/2000/svg","polygon")
	polyMain.setAttribute("fill", "none")
	polyMain.setAttribute("stroke", "white")
	polyMain.setAttribute("stroke-width", "2")
	group.appendChild(polyMain)
	// shadow polygons (up to 3)
	const shadows = []
	for(let i = 0; i < 3; i++){
		const poly = document.createElementNS("http://www.w3.org/2000/svg","polygon")
		poly.setAttribute("fill","none")
		poly.setAttribute("stroke","white")
		poly.setAttribute("stroke-width","2")
		group.appendChild(poly)
		shadows.push(poly)
	}
	group.setAttribute("filter","url(#glow)")

	asteroidsNode.appendChild(group)

	const asteroid={
		x, y,
		vx: (Math.random() - 0.5) * 2,
		vy: (Math.random() - 0.5) * 2,
		radius,
		angle: Math.random() * Math.PI * 2,
		spin: (Math.random() - 0.5) * 0.02,
		shape,
		main: polyMain,
		shadows:shadows,
		group
	}
	state.asteroids.push(asteroid)
}


function renderAsteroid(ast){
	// MAIN asteroid
	renderAsteroidAt(ast,0,0)

	// SHADOW asteroids
	const offsets=[]

	if (ast.x - ast.radius < 0) offsets.push({ ox: WIDTH, oy: 0 })
	if (ast.x + ast.radius > WIDTH) offsets.push({ ox: -WIDTH, oy: 0 })

	if (ast.y - ast.radius < 0) offsets.push({ ox: 0, oy: HEIGHT })
	if (ast.y + ast.radius > HEIGHT) offsets.push({ ox: 0, oy: -HEIGHT })

	// diagonal copies
	if (offsets.length === 2) {
		offsets.push({
			ox: offsets[0].ox,
			oy: offsets[1].oy
		});
	}

	// shadows
	for(let i = 0; i < offsets.length; i++){
	  const off = offsets[i]
	  const node = ast.shadows[i]
	  renderAsteroidAtNode(ast, off.ox, off.oy, node)
	}

	// hide unused shadow nodes
	for(let i = offsets.length; i < ast.shadows.length; i++){
	  ast.shadows[i].setAttribute("points","")
	}

}


function getWrapOffset(x, y, radius){
	let ox = 0
	let oy = 0

	if (x - radius < 0) ox = WIDTH
	else if (x + radius > WIDTH) ox = -WIDTH

	if (y - radius < 0) oy = HEIGHT
	else if (y + radius > HEIGHT) oy = -HEIGHT

	return { ox, oy }
}

function updateAsteroids(){
	if(state.asteroids.length === 0){
		newLevel()
	}
	for(const a of state.asteroids){
		a.x += a.vx
		a.y += a.vy
		a.angle += a.spin

		renderAsteroid(a)
		wrap(a)
	}
}


// Collision detection
function pointInPoly(pt, poly) {
	let inside=false;
	for(let i = 0, j = poly.length - 1; i < poly.length; j = i++){
		const xi = poly[i].x, yi = poly[i].y
		const xj = poly[j].x, yj = poly[j].y

		const intersect =
		((yi > pt.y) !== (yj > pt.y)) &&
		(pt.x < (xj - xi) * (pt.y - yi) / (yj - yi) + xi)

		if (intersect) inside = !inside
	}
	return inside
}

function collision(a, b){
	// build shapeA matrix
	let Ma=matIdentity()

	Ma=matMul(Ma,matTranslate(a.x, a.y))
	Ma=matMul(Ma,matRotate(a.angle))

	// build shapeB matrix
	let Mb=matIdentity()

	Mb=matMul(Mb,matTranslate(b.x, b.y))
	Mb=matMul(Mb,matRotate(b.angle))

	const worldA=a.shape.map(p=>matApply(Ma,p))
	const worldB=b.shape.map(p=>matApply(Mb,p))

	// ship points inside asteroid
	for(const p of worldA){
		if(pointInPoly(p, worldB)) return true;
	}

	// asteroid points inside ship
	for(const p of worldB){
		if (pointInPoly(p, worldA)) return true;
	}
	return false
}

function handleCollisions(){
	// bullets vs asteroids
	for(const b of state.bullets){
		for(const a of state.asteroids){
			let Ma = matIdentity()
			Ma = matMul(Ma, matTranslate(a.x, a.y))
			Ma = matMul(Ma, matRotate(a.angle))
			const asteroidWorld = a.shape.map(p => matApply(Ma, p))
			if(pointInPoly(b, asteroidWorld)){
				// remove bullet
				bulletsNode.removeChild(b.node)
				state.bullets.splice(state.bullets.indexOf(b), 1)

				// split asteroid or remove
				asteroidsNode.removeChild(a.group);
				state.asteroids.splice(state.asteroids.indexOf(a), 1)
				if(a.radius > 20){
					spawnAsteroid(a.x, a.y, a.radius / 2)
					spawnAsteroid(a.x, a.y, a.radius / 2)
				}
				
				//effect
				let M=matIdentity()
				M=matMul(M,matTranslate(a.x, a.y))
				M=matMul(M,matRotate(a.angle))
				const world = a.shape.map(p=>matApply(M,p))
				for(let i = 0; i < world.length; i++){
				  const p1 = world[i]
				  const p2 = world[(i + 1) % world.length]
				  spawnShard(p1, p2, a)
				}
				//done
				break
			}
		}
	}

	// ship vs asteroids
	for(const a of state.asteroids){
		if(collision(state.ship,a)){
			if(state.ship.invuln === 0){
				state.ship.health--
				state.ship.invuln = 120
				state.ship.hitFlash = 10
				if(state.ship.health <= 0){
					killShip()
				}
			}
		}
	}
}


function resetShip(){
	state.ship.health = MAX_HEALTH
	state.ship.x = WIDTH / 2
	state.ship.y = HEIGHT / 2
	state.ship.vx = 0
	state.ship.vy = 0
	state.ship.angle = 0
	state.ship.invuln = 180
}
function killShip(){
	explodeShip(state.ship.x, state.ship.y)
	state.lives--
	if(state.lives <= 0){
		state.mode = "gameover"
		return
	}
	resetShip()
}

function updateParticles(){
	//ship
	for(let i = state.particles.length - 1; i >= 0; i--){
		const p = state.particles[i]
		p.x += p.vx
		p.y += p.vy
		p.life--

		p.node.setAttribute("x1", p.x)
		p.node.setAttribute("y1", p.y)
		p.node.setAttribute("x2", p.x + p.vx * 2)
		p.node.setAttribute("y2", p.y + p.vy * 2)

		if(p.life <= 0){
			p.node.remove()
			state.particles.splice(i, 1)
		}
	}	
	//rocks
	state.shards = state.shards.filter(s=>{
		s.x1 += s.vx
		s.y1 += s.vy
		s.x2 += s.vx
		s.y2 += s.vy
		s.life--

		s.node.setAttribute("x1", s.x1)
		s.node.setAttribute("y1", s.y1)
		s.node.setAttribute("x2", s.x2)
		s.node.setAttribute("y2", s.y2)

		if(s.life <= 0){
			s.node.remove()
			return false
		}
		return true
	});
	
}

function createParticleNode(){
	const p = document.createElementNS("http://www.w3.org/2000/svg","line")
	p.setAttribute("stroke","orange")
	p.setAttribute("stroke-width","2")
	particlesNode.appendChild(p)
	return p
}
function explodeShip(x, y){
	for (let i = 0; i < 6; i++){
		state.particles.push({
			x,
			y,
			vx: (Math.random() - 0.5) * 6,
			vy: (Math.random() - 0.5) * 6,
			life: 40,
			node: createParticleNode()
		});
	}
}

function spawnShard(p1, p2, asteroid){
	const node = document.createElementNS("http://www.w3.org/2000/svg","line")
	node.setAttribute("x1", p1.x)
	node.setAttribute("y1", p1.y)
	node.setAttribute("x2", p2.x)
	node.setAttribute("y2", p2.y)
	node.setAttribute("stroke","white")
	node.setAttribute("stroke-width","1")
	particlesNode.appendChild(node)

	const angle = Math.atan2(p1.y - asteroid.y, p1.x - asteroid.x)
	const speed = 2 + Math.random() * 2

	state.shards.push({
		x1: p1.x, y1: p1.y,
		x2: p2.x, y2: p2.y,
		vx: Math.cos(angle) * speed + asteroid.vx,
		vy: Math.sin(angle) * speed + asteroid.vy,
		life: 30 + Math.random() * 16,
		node
	});
}

function newLevel(){
	if(state.ship.health < MAX_HEALTH){
		state.ship.health++
	}
	state.level++
	startLevel(state.level)
}

function startLevel(level){
	const asteroidCount = 4 + level

	for(let i = 0; i < asteroidCount; i++){
		spawnAsteroidAwayFromShip(40 + Math.random() * 30)
	}
}

function updateHUD(){
	hudHealth.textContent = "Health: " + state.ship.health
	hudLives.textContent  = "Lives: " + state.lives
	hudLevel.textContent  = "Level: " + state.level
	if(state.mode == "gameover"){
		hudGameOver.textContent="GAME OVER"
		hudGameOverExtra.textContent="Press Enter or Start"
	} else {
		hudGameOver.textContent=""
		hudGameOverExtra.textContent=""
	}
}
function resetGame(){
	while(asteroidsNode.firstChild){
		asteroidsNode.removeChild(asteroidsNode.firstChild)
	}
	state.asteroids.length=0
	while(bulletsNode.firstChild){
		bulletsNode.removeChild(bulletsNode.firstChild)
	}
	state.bullets.length=0
	state.level=1
	state.lives=LIVES
	resetShip()
	startLevel(state.level)
}
function startGame(){
	resetGame()	
	state.mode="playing"
	titleText.textContent=""
}

// Game loop
function loop(){
	pollGamepad()
	handleInput()
	if(state.mode !== "playing"){
		requestAnimationFrame(loop)
		return
	}
	updateShip()
	updateBullets()
	updateAsteroids()
	handleCollisions()
	updateParticles()
	renderShip()
	renderBullets()
	// asteroids already rendered in updateAsteroids
	updateHUD()
	requestAnimationFrame(loop)
}
// initial setup
autoScale()
loop()
*/
SC Arguments: [Name:SC_ACTION Type:uint64 Value:'1' Name:SC_CODE Type:string Value:'// Copyright 2024. Civilware. All rights reserved. // TELA Decentralized Web Document (TELA-DOC-1) Function InitializePrivate() Uint64 10 IF init() == 0 THEN GOTO 30 20 RETURN 1 30 STORE("nameHdr", "game.js") 31 STORE("descrHdr", "JS file") 32 STORE("iconURLHdr", "") 33 STORE("dURL", "game.js") 34 STORE("docType", "TELA-JS-1") 35 STORE("subDir", "") 36 STORE("fileCheckC", "237c618d0515738fdde0738a09db857038bbeffbea11fb24570fd150b802270b") 37 STORE("fileCheckS", "1c0b9511c358438b5b8c4a424424009288737a668220ae1c7465f4515d6d3cd2") 100 RETURN 0 End Function Function init() Uint64 10 IF EXISTS("owner") == 0 THEN GOTO 30 20 RETURN 1 30 STORE("owner", address()) 50 STORE("docVersion", "1.0.0") 60 STORE("hash", HEX(TXID())) 70 STORE("likes", 0) 80 STORE("dislikes", 0) 100 RETURN 0 End Function Function address() String 10 DIM s as String 20 LET s = SIGNER() 30 IF IS_ADDRESS_VALID(s) THEN GOTO 50 40 RETURN "anon" 50 RETURN ADDRESS_STRING(s) End Function Function Rate(r Uint64) Uint64 10 DIM addr as String 15 LET addr = address() 16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30 20 RETURN 1 30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT()) 40 IF r < 50 THEN GOTO 70 50 STORE("likes", LOAD("likes")+1) 60 RETURN 0 70 STORE("dislikes", LOAD("dislikes")+1) 100 RETURN 0 End Function /*const svg=document.getElementById('game') const shipNode=document.getElementById('shipBody') const flameNode=document.getElementById("shipFlame") const asteroidsNode=document.getElementById('asteroids') const bulletsNode=document.getElementById('bullets') const particlesNode=document.getElementById("particles") const WIDTH=800 const HEIGHT=600 const SAFE_RADIUS=150 const MAX_HEALTH=3 const LIVES=3 function setZoom(scale){ const g=document.getElementById("gameScale") g.setAttribute("transform", `scale(${scale})`) } function autoScale(){ const baseW=800 const baseH=600 const screenW=window.innerWidth const screenH=window.innerHeight const scale=Math.min( screenW / baseW, screenH / baseH ) const steps = [0.5,0.75,1.0,1.25,1.5,2.0,3.0] let best = steps[0] for(const s of steps){ if(s <= scale) best = s; } let w=(baseW * best) let h=(baseH * best) svg.setAttribute("width",w) svg.setAttribute("height",h) svg.setAttribute("viewBox","0 0 "+w+" "+h) setZoom(best) } //matrix multiply function matIdentity(){ return [1, 0, 0, 1, 0, 0]; } function matTranslate(tx, ty){ return [1, 0, 0, 1, tx, ty] } function matRotate(angle){ const c=Math.cos(angle) const s=Math.sin(angle) return [c,s,-s,c,0,0] } function matScale(sx,sy) { return [sx,0,0,sy,0,0] } function matMul(a,b){ return [ a[0] * b[0] + a[2] * b[1], a[1] * b[0] + a[3] * b[1], a[0] * b[2] + a[2] * b[3], a[1] * b[2] + a[3] * b[3], a[0] * b[4] + a[2] * b[5] + a[4], a[1] * b[4] + a[3] * b[5] + a[5] ]; } function matApply(m,p){ return { x: m[0] * p.x + m[2] * p.y + m[4], y: m[1] * p.x + m[3] * p.y + m[5] }; } var thrustPower = 0 const shipShape = [ { x: 15, y: 0 },// nose { x: -10, y: 10 }, { x: -10, y: -10 } ]; const state={ ship:{ x:400, y:300, angle:0, vx:0, vy:0, health:MAX_HEALTH, invuln:0, shape:shipShape, hitFlash:0 }, mode:"title", lives:LIVES, level:0, keys:{}, asteroids:[], bullets:[], particles:[], shards:[] } function applyThrust(){ const thrust=0.15 state.ship.vx += Math.cos(state.ship.angle) * thrust state.ship.vy += Math.sin(state.ship.angle) * thrust thrustPower = thrust } //input window.addEventListener("keydown",e =>{ if(e.code==="Space"){ shoot() } }) window.addEventListener("keydown",e =>{ if (e.code==="Enter") { startPressed() } }) window.addEventListener('keydown',e=>state.keys[e.code]=true) window.addEventListener('keyup',e =>state.keys[e.code]=false) function startPressed(){ if(state.mode!=="playing"&&state.mode!== "paused")startGame() else if(state.mode!=="paused"){state.mode = "paused";hudGameOver.textContent="PAUSED"} else{state.mode="playing";hudGameOver.textContent=""} } function handleInput(){ const turnSpeed = 0.06 if(state.keys['ArrowLeft'])state.ship.angle-=turnSpeed if(state.keys['ArrowRight'])state.ship.angle+=turnSpeed if(state.keys['ArrowUp']){ applyThrust() } } function pollGamepad(){ const gp=navigator.getGamepads()[0] if(!gp)return; // D-pad or left stick for rotation + thrust const left = gp.buttons[14].pressed || gp.axes[0] < -0.4; const right = gp.buttons[15].pressed || gp.axes[0] > 0.4; const up = gp.buttons[12].pressed || gp.axes[1] < -0.4; const rt = gp.buttons[7].value; // 0 to 1 // Buttons const shootBtn = gp.buttons[0].pressed; // Start button detection const startBtn = gp.buttons[9].pressed; const lx = Math.abs(gp.axes[0]) > 0.3 ? gp.axes[0] : 0; const ly = Math.abs(gp.axes[1]) > 0.3 ? gp.axes[1] : 0; if(!gp.buttons[14].pressed && !gp.buttons[15].pressed && !gp.buttons[12].pressed){ state.ship.angle += lx * 0.08 // scale if(rt > 0.1){ const power = rt * 0.2 state.ship.vx += Math.cos(state.ship.angle) * power state.ship.vy += Math.sin(state.ship.angle) * power thrustPower = power; }else{ const power = (-ly) * 0.15; // scale state.ship.vx += Math.cos(state.ship.angle) * power state.ship.vy += Math.sin(state.ship.angle) * power thrustPower = power; } }else{ // Rotate if(left)state.ship.angle -= 0.08 if(right)state.ship.angle += 0.08 // Thrust if(up) applyThrust(); } // Shoot if(shootBtn && !state.shootHeld){ shoot(); } state.shootHeld = shootBtn // Start game if(startBtn && !state.startHeld){ startPressed() } state.startHeld = startBtn } //Rendering function wrap(a){ if(a.x < 0) a.x += WIDTH if(a.x > WIDTH) a.x -= WIDTH if(a.y < 0) a.y += HEIGHT if(a.y > HEIGHT) a.y -= HEIGHT } function renderShip(){ const {x,y,angle}=state.ship let M=matIdentity() M=matMul(M,matTranslate(x,y)) M=matMul(M,matRotate(angle)) const worldPoints=shipShape.map(p =>matApply(M,p)) shipNode.setAttribute( "points", worldPoints.map(p => `${p.x},${p.y}`).join(" ") ); const flameLength=20 const flameWidth=8 const backX=state.ship.x-Math.cos(state.ship.angle)*10 const backY=state.ship.y-Math.sin(state.ship.angle)*10 const leftX = backX - Math.cos(state.ship.angle) * flameLength + Math.sin(state.ship.angle) * flameWidth const leftY = backY - Math.sin(state.ship.angle) * flameLength - Math.cos(state.ship.angle) * flameWidth const rightX = backX - Math.cos(state.ship.angle) * flameLength - Math.sin(state.ship.angle) * flameWidth const rightY = backY - Math.sin(state.ship.angle) * flameLength + Math.cos(state.ship.angle) * flameWidth flameNode.setAttribute( "points", `${backX},${backY} ${leftX},${leftY} ${rightX},${rightY}` ); if(thrustPower > 0){ const flicker = 0.7 + Math.random() * 0.5 flameNode.setAttribute("opacity", thrustPower * flicker) thrustPower = 0 }else{ flameNode.setAttribute("opacity", 0) } } function updateShip(){ state.ship.x += state.ship.vx state.ship.y += state.ship.vy // simple friction state.ship.vx *= 0.99 state.ship.vy *= 0.99 if(state.ship.invuln > 0){ state.ship.invuln-- } if(state.ship.hitFlash > 0){ shipNode.setAttribute("fill","white") state.ship.hitFlash-- }else{ shipNode.setAttribute("fill","none") } wrap(state.ship) } function shoot(){ if(state.bullets.length >= 4) return; const bulletSpeed = 6; const {x,y,vx,vy,angle}=state.ship // direction vector of the ship const dx=Math.cos(angle) const dy=Math.sin(angle) const bullet={ x, y, vx: vx + dx * bulletSpeed, vy: vy + dy * bulletSpeed, life: 60, node: null } const node=document.createElementNS('http://www.w3.org/2000/svg','circle') node.setAttribute('r', 2) node.setAttribute('fill', 'white') bulletsNode.appendChild(node) bullet.node = node state.bullets.push(bullet) } function updateBullets(){ state.bullets=state.bullets.filter(b=>{ b.x += b.vx b.y += b.vy wrap(b) b.life-- if(b.life <= 0){ bulletsNode.removeChild(b.node) return false// remove from array } return true// keep bullet }) } function renderBullets(){ for(const b of state.bullets){ b.node.setAttribute('cx',b.x) b.node.setAttribute('cy',b.y) } } function makeAsteroidShape(radius,jaggedness=0.4,points=10){ const shape=[] for(let i = 0; i < points; i++){ const angle = (i / points) * Math.PI * 2 const r = radius * (1 - jaggedness + Math.random() * jaggedness * 2) shape.push({x: Math.cos(angle) * r, y: Math.sin(angle) * r}) } return shape } function spawnAsteroidAwayFromShip(radius){ let x,y; while (true){ x = Math.random() * WIDTH y = Math.random() * HEIGHT const dx = x - state.ship.x const dy = y - state.ship.y const dist2 = dx*dx + dy*dy if(dist2 > SAFE_RADIUS * SAFE_RADIUS){ break; // good spawn } } spawnAsteroid(x,y,radius) } function renderAsteroidAt(ast,ox,oy){ let M = matIdentity() M = matMul(M, matTranslate(ast.x + ox, ast.y + oy)) M = matMul(M, matRotate(ast.angle)) const pts = ast.shape.map(p => matApply(M, p)) const str = pts.map(p => `${p.x},${p.y}`).join(" ") // choose main or shadow node const node = (ox === 0 && oy === 0) ? ast.main : ast.shadow node.setAttribute("points", str) } function renderAsteroidAtNode(ast,ox,oy,node) { let M=matIdentity() M=matMul(M,matTranslate(ast.x + ox, ast.y + oy)) M=matMul(M,matRotate(ast.angle)) const pts=ast.shape.map(p=>matApply(M,p)) node.setAttribute("points",pts.map(p=>`${p.x},${p.y}`).join(" ")) } function spawnAsteroid(x,y,radius){ const shape = makeAsteroidShape(radius) // group for asteroid + shadow const group = document.createElementNS("http://www.w3.org/2000/svg","g") // main polygon const polyMain = document.createElementNS("http://www.w3.org/2000/svg","polygon") polyMain.setAttribute("fill", "none") polyMain.setAttribute("stroke", "white") polyMain.setAttribute("stroke-width", "2") group.appendChild(polyMain) // shadow polygons (up to 3) const shadows = [] for(let i = 0; i < 3; i++){ const poly = document.createElementNS("http://www.w3.org/2000/svg","polygon") poly.setAttribute("fill","none") poly.setAttribute("stroke","white") poly.setAttribute("stroke-width","2") group.appendChild(poly) shadows.push(poly) } group.setAttribute("filter","url(#glow)") asteroidsNode.appendChild(group) const asteroid={ x, y, vx: (Math.random() - 0.5) * 2, vy: (Math.random() - 0.5) * 2, radius, angle: Math.random() * Math.PI * 2, spin: (Math.random() - 0.5) * 0.02, shape, main: polyMain, shadows:shadows, group } state.asteroids.push(asteroid) } function renderAsteroid(ast){ // MAIN asteroid renderAsteroidAt(ast,0,0) // SHADOW asteroids const offsets=[] if (ast.x - ast.radius < 0) offsets.push({ ox: WIDTH, oy: 0 }) if (ast.x + ast.radius > WIDTH) offsets.push({ ox: -WIDTH, oy: 0 }) if (ast.y - ast.radius < 0) offsets.push({ ox: 0, oy: HEIGHT }) if (ast.y + ast.radius > HEIGHT) offsets.push({ ox: 0, oy: -HEIGHT }) // diagonal copies if (offsets.length === 2) { offsets.push({ ox: offsets[0].ox, oy: offsets[1].oy }); } // shadows for(let i = 0; i < offsets.length; i++){ const off = offsets[i] const node = ast.shadows[i] renderAsteroidAtNode(ast, off.ox, off.oy, node) } // hide unused shadow nodes for(let i = offsets.length; i < ast.shadows.length; i++){ ast.shadows[i].setAttribute("points","") } } function getWrapOffset(x, y, radius){ let ox = 0 let oy = 0 if (x - radius < 0) ox = WIDTH else if (x + radius > WIDTH) ox = -WIDTH if (y - radius < 0) oy = HEIGHT else if (y + radius > HEIGHT) oy = -HEIGHT return { ox, oy } } function updateAsteroids(){ if(state.asteroids.length === 0){ newLevel() } for(const a of state.asteroids){ a.x += a.vx a.y += a.vy a.angle += a.spin renderAsteroid(a) wrap(a) } } // Collision detection function pointInPoly(pt, poly) { let inside=false; for(let i = 0, j = poly.length - 1; i < poly.length; j = i++){ const xi = poly[i].x, yi = poly[i].y const xj = poly[j].x, yj = poly[j].y const intersect = ((yi > pt.y) !== (yj > pt.y)) && (pt.x < (xj - xi) * (pt.y - yi) / (yj - yi) + xi) if (intersect) inside = !inside } return inside } function collision(a, b){ // build shapeA matrix let Ma=matIdentity() Ma=matMul(Ma,matTranslate(a.x, a.y)) Ma=matMul(Ma,matRotate(a.angle)) // build shapeB matrix let Mb=matIdentity() Mb=matMul(Mb,matTranslate(b.x, b.y)) Mb=matMul(Mb,matRotate(b.angle)) const worldA=a.shape.map(p=>matApply(Ma,p)) const worldB=b.shape.map(p=>matApply(Mb,p)) // ship points inside asteroid for(const p of worldA){ if(pointInPoly(p, worldB)) return true; } // asteroid points inside ship for(const p of worldB){ if (pointInPoly(p, worldA)) return true; } return false } function handleCollisions(){ // bullets vs asteroids for(const b of state.bullets){ for(const a of state.asteroids){ let Ma = matIdentity() Ma = matMul(Ma, matTranslate(a.x, a.y)) Ma = matMul(Ma, matRotate(a.angle)) const asteroidWorld = a.shape.map(p => matApply(Ma, p)) if(pointInPoly(b, asteroidWorld)){ // remove bullet bulletsNode.removeChild(b.node) state.bullets.splice(state.bullets.indexOf(b), 1) // split asteroid or remove asteroidsNode.removeChild(a.group); state.asteroids.splice(state.asteroids.indexOf(a), 1) if(a.radius > 20){ spawnAsteroid(a.x, a.y, a.radius / 2) spawnAsteroid(a.x, a.y, a.radius / 2) } //effect let M=matIdentity() M=matMul(M,matTranslate(a.x, a.y)) M=matMul(M,matRotate(a.angle)) const world = a.shape.map(p=>matApply(M,p)) for(let i = 0; i < world.length; i++){ const p1 = world[i] const p2 = world[(i + 1) % world.length] spawnShard(p1, p2, a) } //done break } } } // ship vs asteroids for(const a of state.asteroids){ if(collision(state.ship,a)){ if(state.ship.invuln === 0){ state.ship.health-- state.ship.invuln = 120 state.ship.hitFlash = 10 if(state.ship.health <= 0){ killShip() } } } } } function resetShip(){ state.ship.health = MAX_HEALTH state.ship.x = WIDTH / 2 state.ship.y = HEIGHT / 2 state.ship.vx = 0 state.ship.vy = 0 state.ship.angle = 0 state.ship.invuln = 180 } function killShip(){ explodeShip(state.ship.x, state.ship.y) state.lives-- if(state.lives <= 0){ state.mode = "gameover" return } resetShip() } function updateParticles(){ //ship for(let i = state.particles.length - 1; i >= 0; i--){ const p = state.particles[i] p.x += p.vx p.y += p.vy p.life-- p.node.setAttribute("x1", p.x) p.node.setAttribute("y1", p.y) p.node.setAttribute("x2", p.x + p.vx * 2) p.node.setAttribute("y2", p.y + p.vy * 2) if(p.life <= 0){ p.node.remove() state.particles.splice(i, 1) } } //rocks state.shards = state.shards.filter(s=>{ s.x1 += s.vx s.y1 += s.vy s.x2 += s.vx s.y2 += s.vy s.life-- s.node.setAttribute("x1", s.x1) s.node.setAttribute("y1", s.y1) s.node.setAttribute("x2", s.x2) s.node.setAttribute("y2", s.y2) if(s.life <= 0){ s.node.remove() return false } return true }); } function createParticleNode(){ const p = document.createElementNS("http://www.w3.org/2000/svg","line") p.setAttribute("stroke","orange") p.setAttribute("stroke-width","2") particlesNode.appendChild(p) return p } function explodeShip(x, y){ for (let i = 0; i < 6; i++){ state.particles.push({ x, y, vx: (Math.random() - 0.5) * 6, vy: (Math.random() - 0.5) * 6, life: 40, node: createParticleNode() }); } } function spawnShard(p1, p2, asteroid){ const node = document.createElementNS("http://www.w3.org/2000/svg","line") node.setAttribute("x1", p1.x) node.setAttribute("y1", p1.y) node.setAttribute("x2", p2.x) node.setAttribute("y2", p2.y) node.setAttribute("stroke","white") node.setAttribute("stroke-width","1") particlesNode.appendChild(node) const angle = Math.atan2(p1.y - asteroid.y, p1.x - asteroid.x) const speed = 2 + Math.random() * 2 state.shards.push({ x1: p1.x, y1: p1.y, x2: p2.x, y2: p2.y, vx: Math.cos(angle) * speed + asteroid.vx, vy: Math.sin(angle) * speed + asteroid.vy, life: 30 + Math.random() * 16, node }); } function newLevel(){ if(state.ship.health < MAX_HEALTH){ state.ship.health++ } state.level++ startLevel(state.level) } function startLevel(level){ const asteroidCount = 4 + level for(let i = 0; i < asteroidCount; i++){ spawnAsteroidAwayFromShip(40 + Math.random() * 30) } } function updateHUD(){ hudHealth.textContent = "Health: " + state.ship.health hudLives.textContent = "Lives: " + state.lives hudLevel.textContent = "Level: " + state.level if(state.mode == "gameover"){ hudGameOver.textContent="GAME OVER" hudGameOverExtra.textContent="Press Enter or Start" } else { hudGameOver.textContent="" hudGameOverExtra.textContent="" } } function resetGame(){ while(asteroidsNode.firstChild){ asteroidsNode.removeChild(asteroidsNode.firstChild) } state.asteroids.length=0 while(bulletsNode.firstChild){ bulletsNode.removeChild(bulletsNode.firstChild) } state.bullets.length=0 state.level=1 state.lives=LIVES resetShip() startLevel(state.level) } function startGame(){ resetGame() state.mode="playing" titleText.textContent="" } // Game loop function loop(){ pollGamepad() handleInput() if(state.mode !== "playing"){ requestAnimationFrame(loop) return } updateShip() updateBullets() updateAsteroids() handleCollisions() updateParticles() renderShip() renderBullets() // asteroids already rendered in updateAsteroids updateHUD() requestAnimationFrame(loop) } // initial setup autoScale() loop() */']


Prove to someone that you have sent them DERO in this transaction

proof can be obtained using wallet command in dero-wallet-cli or from the statement
Note: proof is sent to the server, as the calculations are done on the server side


TX hex bytes
0100000500ea87b2032ba255d3f27da0184c03efed14e54a09509f45a190266872a3354c2e3299b25201000000000000000000000000000000000000000000000000000000000000000000010947b47a3d22799993bb499070db3004c156921aca98bbfb352fa07ed10a7ef9000c2a2f8530e167a8e6a7ae5bd34e56eeaf89136065824de3fe010c1af73bbdc8895fba5b7cc7aa1f10a4d431ce31f2bf43ef71e6bb14c93ecc78a76b8476593b5a06e68e06940958062fa24e56644c001b157f9d14dfef0e367da99f0addab74f0ba00da4d17e1add6fe749fd318923c010486d1010a38765cb15ff60b01d0615ad8a33b0513fcf1d68a11bdac6a096c6ae554a4fa01635d6e4e0652cc4b1f223bb2ac71d9cef822f49b6a30209d0a5c00b5632ce6c875dee599776215b101278eac8c622292a9f43e0fe2e8f8ed4f1bcf043a2bfc682f54a81b6854559c9a01936f2794f641e26cae43e0ecb1e1e38355c130d73b88b69f019e911980420151df8a01a26853435f434f4445537945462f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c202267616d652e6a7322290a33312053544f524528226465736372486472222c20224a532066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c202267616d652e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c20223233376336313864303531353733386664646530373338613039646238353730333862626566666265613131666232343537306664313530623830323237306222290a33372053544f5245282266696c65436865636b53222c20223163306239353131633335383433386235623863346134323434323430303932383837333761363638323230616531633734363566343531356436643363643222290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a636f6e7374207376673d646f63756d656e742e676574456c656d656e7442794964282767616d6527290a636f6e737420736869704e6f64653d646f63756d656e742e676574456c656d656e7442794964282773686970426f647927290a636f6e737420666c616d654e6f64653d646f63756d656e742e676574456c656d656e7442794964282273686970466c616d6522290a636f6e73742061737465726f6964734e6f64653d646f63756d656e742e676574456c656d656e7442794964282761737465726f69647327290a636f6e73742062756c6c6574734e6f64653d646f63756d656e742e676574456c656d656e7442794964282762756c6c65747327290a636f6e7374207061727469636c65734e6f64653d646f63756d656e742e676574456c656d656e744279496428227061727469636c657322290a0a636f6e73742057494454483d3830300a636f6e7374204845494748543d3630300a636f6e737420534146455f5241444955533d3135300a636f6e7374204d41585f4845414c54483d330a636f6e7374204c495645533d330a0a66756e6374696f6e207365745a6f6f6d287363616c65297b0a09636f6e737420673d646f63756d656e742e676574456c656d656e7442794964282267616d655363616c6522290a09672e73657441747472696275746528227472616e73666f726d222c20607363616c6528247b7363616c657d2960290a7d0a0a66756e6374696f6e206175746f5363616c6528297b0a09636f6e73742062617365573d3830300a09636f6e73742062617365483d3630300a09636f6e73742073637265656e573d77696e646f772e696e6e657257696474680a09636f6e73742073637265656e483d77696e646f772e696e6e65724865696768740a09636f6e7374207363616c653d4d6174682e6d696e280a090973637265656e57202f2062617365572c0a090973637265656e48202f2062617365480a09290a09636f6e7374207374657073203d205b302e352c302e37352c312e302c312e32352c312e352c322e302c332e305d0a096c65742062657374203d2073746570735b305d0a09666f7228636f6e73742073206f66207374657073297b0a090969662873203c3d207363616c65292062657374203d20733b0a097d0a096c657420773d286261736557202a2062657374290a096c657420683d286261736548202a2062657374290a097376672e73657441747472696275746528227769647468222c77290a097376672e7365744174747269627574652822686569676874222c68290a097376672e736574417474726962757465282276696577426f78222c2230203020222b772b2220222b68290a097365745a6f6f6d2862657374290a7d0a0a2f2f6d6174726978206d756c7469706c790a66756e6374696f6e206d61744964656e7469747928297b0a0972657475726e205b312c20302c20302c20312c20302c20305d3b0a7d0a0a66756e6374696f6e206d61745472616e736c6174652874782c207479297b0a0972657475726e205b312c20302c20302c20312c2074782c2074795d0a7d0a0a66756e6374696f6e206d6174526f7461746528616e676c65297b0a09636f6e737420633d4d6174682e636f7328616e676c65290a09636f6e737420733d4d6174682e73696e28616e676c65290a0972657475726e205b632c732c2d732c632c302c305d0a7d0a0a66756e6374696f6e206d61745363616c652873782c737929207b0a0972657475726e205b73782c302c302c73792c302c305d0a7d0a0a66756e6374696f6e206d61744d756c28612c62297b0a0972657475726e205b0a0909615b305d202a20625b305d202b20615b325d202a20625b315d2c0a0909615b315d202a20625b305d202b20615b335d202a20625b315d2c0a0909615b305d202a20625b325d202b20615b325d202a20625b335d2c0a0909615b315d202a20625b325d202b20615b335d202a20625b335d2c0a0909615b305d202a20625b345d202b20615b325d202a20625b355d202b20615b345d2c0a0909615b315d202a20625b345d202b20615b335d202a20625b355d202b20615b355d0a095d3b0a7d0a0a66756e6374696f6e206d61744170706c79286d2c70297b0a0972657475726e207b0a0909783a206d5b305d202a20702e78202b206d5b325d202a20702e79202b206d5b345d2c0a0909793a206d5b315d202a20702e78202b206d5b335d202a20702e79202b206d5b355d0a097d3b0a7d0a0a76617220746872757374506f776572203d20300a636f6e737420736869705368617065203d205b0a7b20783a2031352c2020793a203020207d2c2f2f206e6f73650a7b20783a202d31302c20793a203130207d2c0a7b20783a202d31302c20793a202d3130207d0a5d3b0a0a636f6e73742073746174653d7b0a09736869703a7b0a0909783a3430302c0a0909793a3330302c0a0909616e676c653a302c0a090976783a302c0a090976793a302c0a09096865616c74683a4d41585f4845414c54482c0a0909696e76756c6e3a302c0a090973686170653a7368697053686170652c0a0909686974466c6173683a300a097d2c0a096d6f64653a227469746c65222c0a096c697665733a4c495645532c0a096c6576656c3a302c200a096b6579733a7b7d2c0a0961737465726f6964733a5b5d2c0a0962756c6c6574733a5b5d2c0a097061727469636c65733a5b5d2c0a097368617264733a5b5d0a7d0a0a0a66756e6374696f6e206170706c7954687275737428297b0a09636f6e7374207468727573743d302e31350a0973746174652e736869702e7678202b3d204d6174682e636f732873746174652e736869702e616e676c6529202a207468727573740a0973746174652e736869702e7679202b3d204d6174682e73696e2873746174652e736869702e616e676c6529202a207468727573740a09746872757374506f776572203d207468727573740a7d0a2f2f696e7075740a77696e646f772e6164644576656e744c697374656e657228226b6579646f776e222c65203d3e7b0a09696628652e636f64653d3d3d22537061636522297b09090a090973686f6f7428290a097d0a7d290a77696e646f772e6164644576656e744c697374656e657228226b6579646f776e222c65203d3e7b0a0969662028652e636f64653d3d3d22456e7465722229207b0a0909737461727450726573736564282909090a097d0a7d290a77696e646f772e6164644576656e744c697374656e657228276b6579646f776e272c653d3e73746174652e6b6579735b652e636f64655d3d74727565290a77696e646f772e6164644576656e744c697374656e657228276b65797570272c65203d3e73746174652e6b6579735b652e636f64655d3d66616c7365290a0a66756e6374696f6e2073746172745072657373656428297b0a0969662873746174652e6d6f6465213d3d22706c6179696e6722262673746174652e6d6f6465213d3d20227061757365642229737461727447616d6528290a09656c73652069662873746174652e6d6f6465213d3d2270617573656422297b73746174652e6d6f6465203d2022706175736564223b68756447616d654f7665722e74657874436f6e74656e743d22504155534544227d0a09656c73657b73746174652e6d6f64653d22706c6179696e67223b68756447616d654f7665722e74657874436f6e74656e743d22227d0a7d0a66756e6374696f6e2068616e646c65496e70757428297b0a09636f6e7374207475726e5370656564203d20302e30360a0969662873746174652e6b6579735b274172726f774c656674275d2973746174652e736869702e616e676c652d3d7475726e53706565640a0969662873746174652e6b6579735b274172726f775269676874275d2973746174652e736869702e616e676c652b3d7475726e53706565640a0969662873746174652e6b6579735b274172726f775570275d297b0a09096170706c7954687275737428290a097d0a7d0a0a66756e6374696f6e20706f6c6c47616d6570616428297b0a09636f6e73742067703d6e6176696761746f722e67657447616d657061647328295b305d0a096966282167702972657475726e3b0a0a092f2f20442d706164206f72206c65667420737469636b20666f7220726f746174696f6e202b207468727573740a09636f6e7374206c65667420203d2067702e627574746f6e735b31345d2e70726573736564207c7c2067702e617865735b305d203c202d302e343b0a09636f6e7374207269676874203d2067702e627574746f6e735b31355d2e70726573736564207c7c2067702e617865735b305d203e20302e343b0a09636f6e7374207570202020203d2067702e627574746f6e735b31325d2e70726573736564207c7c2067702e617865735b315d203c202d302e343b0a09636f6e7374207274203d2067702e627574746f6e735b375d2e76616c75653b202f2f203020746f20310a092f2f20427574746f6e730a09636f6e73742073686f6f7442746e203d2067702e627574746f6e735b305d2e707265737365643b0a0a092f2f20537461727420627574746f6e20646574656374696f6e0a09636f6e737420737461727442746e203d2067702e627574746f6e735b395d2e707265737365643b0a0a09636f6e7374206c78203d204d6174682e6162732867702e617865735b305d29203e20302e33203f2067702e617865735b305d203a20303b0a09636f6e7374206c79203d204d6174682e6162732867702e617865735b315d29203e20302e33203f2067702e617865735b315d203a20303b0a0a096966282167702e627574746f6e735b31345d2e70726573736564202626202167702e627574746f6e735b31355d2e7072657373656420202626202167702e627574746f6e735b31325d2e70726573736564297b0a090973746174652e736869702e616e676c65202b3d206c78202a20302e3038202f2f207363616c650a0a09096966287274203e20302e31297b0a090909636f6e737420706f776572203d207274202a20302e320a0a09090973746174652e736869702e7678202b3d204d6174682e636f732873746174652e736869702e616e676c6529202a20706f7765720a09090973746174652e736869702e7679202b3d204d6174682e73696e2873746174652e736869702e616e676c6529202a20706f7765720a090909746872757374506f776572203d20706f7765723b0a09097d656c73657b0a090909636f6e737420706f776572203d20282d6c7929202a20302e31353b202f2f207363616c650a09090973746174652e736869702e7678202b3d204d6174682e636f732873746174652e736869702e616e676c6529202a20706f7765720a09090973746174652e736869702e7679202b3d204d6174682e73696e2873746174652e736869702e616e676c6529202a20706f7765720a090909746872757374506f776572203d20706f7765723b0a09097d0a097d656c73657b0a09090a09092f2f20526f746174650a09096966286c6566742973746174652e736869702e616e676c65202d3d20302e30380a090969662872696768742973746174652e736869702e616e676c65202b3d20302e30380a09092f2f205468727573740a0909696628757029206170706c7954687275737428293b0a097d0a0a092f2f2053686f6f740a0969662873686f6f7442746e202626202173746174652e73686f6f7448656c64297b0a090973686f6f7428293b0a097d0a0973746174652e73686f6f7448656c64203d2073686f6f7442746e0a092f2f2053746172742067616d650a09696628737461727442746e202626202173746174652e737461727448656c64297b0a090973746172745072657373656428290a097d0a0973746174652e737461727448656c64203d20737461727442746e0a7d0a2f2f52656e646572696e670a66756e6374696f6e20777261702861297b0a2020696628612e78203c20302920612e78202b3d2057494454480a2020696628612e78203e2057494454482920612e78202d3d2057494454480a2020696628612e79203c20302920612e79202b3d204845494748540a2020696628612e79203e204845494748542920612e79202d3d204845494748540a7d0a66756e6374696f6e2072656e6465725368697028297b0a09636f6e7374207b782c792c616e676c657d3d73746174652e736869700a096c6574204d3d6d61744964656e7469747928290a094d3d6d61744d756c284d2c6d61745472616e736c61746528782c7929290a094d3d6d61744d756c284d2c6d6174526f7461746528616e676c6529290a0a09636f6e737420776f726c64506f696e74733d7368697053686170652e6d61702870203d3e6d61744170706c79284d2c7029290a0a09736869704e6f64652e736574417474726962757465280a090922706f696e7473222c0a0909776f726c64506f696e74732e6d61702870203d3e2060247b702e787d2c247b702e797d60292e6a6f696e28222022290a09293b0a0a09636f6e737420666c616d654c656e6774683d32300a09636f6e737420666c616d6557696474683d380a0a09636f6e7374206261636b583d73746174652e736869702e782d4d6174682e636f732873746174652e736869702e616e676c65292a31300a09636f6e7374206261636b593d73746174652e736869702e792d4d6174682e73696e2873746174652e736869702e616e676c65292a31300a0a09636f6e7374206c6566745820203d206261636b58202d204d6174682e636f732873746174652e736869702e616e676c6529202a20666c616d654c656e677468202b204d6174682e73696e2873746174652e736869702e616e676c6529202a20666c616d6557696474680a09636f6e7374206c6566745920203d206261636b59202d204d6174682e73696e2873746174652e736869702e616e676c6529202a20666c616d654c656e677468202d204d6174682e636f732873746174652e736869702e616e676c6529202a20666c616d6557696474680a0a09636f6e737420726967687458203d206261636b58202d204d6174682e636f732873746174652e736869702e616e676c6529202a20666c616d654c656e677468202d204d6174682e73696e2873746174652e736869702e616e676c6529202a20666c616d6557696474680a09636f6e737420726967687459203d206261636b59202d204d6174682e73696e2873746174652e736869702e616e676c6529202a20666c616d654c656e677468202b204d6174682e636f732873746174652e736869702e616e676c6529202a20666c616d6557696474680a0a09666c616d654e6f64652e736574417474726962757465280a090922706f696e7473222c0a090960247b6261636b587d2c247b6261636b597d20247b6c656674587d2c247b6c656674597d20247b7269676874587d2c247b7269676874597d600a09293b0a09696628746872757374506f776572203e2030297b0a0909636f6e737420666c69636b6572203d20302e37202b204d6174682e72616e646f6d2829202a20302e350a0909666c616d654e6f64652e73657441747472696275746528226f706163697479222c20746872757374506f776572202a20666c69636b6572290a0909746872757374506f776572203d20300a097d656c73657b0a0909666c616d654e6f64652e73657441747472696275746528226f706163697479222c2030290a097d0a7d0a0a66756e6374696f6e207570646174655368697028297b0a0973746174652e736869702e78202b3d2073746174652e736869702e76780a0973746174652e736869702e79202b3d2073746174652e736869702e76790a092f2f2073696d706c65206672696374696f6e0a0973746174652e736869702e7678202a3d20302e39390a0973746174652e736869702e7679202a3d20302e39390a0969662873746174652e736869702e696e76756c6e203e2030297b0a090973746174652e736869702e696e76756c6e2d2d0a097d0a0969662873746174652e736869702e686974466c617368203e2030297b0a0909736869704e6f64652e736574417474726962757465282266696c6c222c22776869746522290a090973746174652e736869702e686974466c6173682d2d0a097d656c73657b0a0909736869704e6f64652e736574417474726962757465282266696c6c222c226e6f6e6522290a097d090a09777261702873746174652e73686970290a7d0a0a66756e6374696f6e2073686f6f7428297b0a0969662873746174652e62756c6c6574732e6c656e677468203e3d2034292072657475726e3b0a09636f6e73742062756c6c65745370656564203d20363b0a09636f6e7374207b782c792c76782c76792c616e676c657d3d73746174652e736869700a0a092f2f20646972656374696f6e20766563746f72206f662074686520736869700a09636f6e73742064783d4d6174682e636f7328616e676c65290a09636f6e73742064793d4d6174682e73696e28616e676c65290a0a09636f6e73742062756c6c65743d7b0a0909782c0a0909792c0a090976783a207678202b206478202a2062756c6c657453706565642c0a090976793a207679202b206479202a2062756c6c657453706565642c0a09096c6966653a2036302c0a09096e6f64653a206e756c6c0a097d0a0a09636f6e7374206e6f64653d646f63756d656e742e637265617465456c656d656e744e532827687474703a2f2f7777772e77332e6f72672f323030302f737667272c27636972636c6527290a096e6f64652e736574417474726962757465282772272c2032290a096e6f64652e736574417474726962757465282766696c6c272c2027776869746527290a0962756c6c6574734e6f64652e617070656e644368696c64286e6f6465290a0962756c6c65742e6e6f6465203d206e6f64650a0a0973746174652e62756c6c6574732e707573682862756c6c6574290a7d0a0a66756e6374696f6e2075706461746542756c6c65747328297b0a0973746174652e62756c6c6574733d73746174652e62756c6c6574732e66696c74657228623d3e7b0a0909622e78202b3d20622e76780a0909622e79202b3d20622e76790a0909777261702862290a0a0909622e6c6966652d2d0a0909696628622e6c696665203c3d2030297b0a09090962756c6c6574734e6f64652e72656d6f76654368696c6428622e6e6f6465290a09090972657475726e2066616c73652f2f2072656d6f76652066726f6d2061727261790a09097d0a090972657475726e20747275652f2f206b6565702062756c6c65740a097d290a7d0a0a66756e6374696f6e2072656e64657242756c6c65747328297b0a09666f7228636f6e73742062206f662073746174652e62756c6c657473297b0a0909622e6e6f64652e73657441747472696275746528276378272c622e78290a0909622e6e6f64652e73657441747472696275746528276379272c622e79290a097d0a7d0a0a66756e6374696f6e206d616b6541737465726f69645368617065287261646975732c6a61676765646e6573733d302e342c706f696e74733d3130297b0a09636f6e73742073686170653d5b5d0a09666f72286c65742069203d20303b2069203c20706f696e74733b20692b2b297b0a0909636f6e737420616e676c65203d202869202f20706f696e747329202a204d6174682e5049202a20320a0909636f6e73742072203d20726164697573202a202831202d206a61676765646e657373202b204d6174682e72616e646f6d2829202a206a61676765646e657373202a2032290a090973686170652e70757368287b783a204d6174682e636f7328616e676c6529202a20722c20793a204d6174682e73696e28616e676c6529202a20727d290a097d0a0972657475726e2073686170650a7d0a0a66756e6374696f6e20737061776e41737465726f69644177617946726f6d5368697028726164697573297b0a096c657420782c793b0a0a097768696c65202874727565297b0a090978203d204d6174682e72616e646f6d2829202a2057494454480a090979203d204d6174682e72616e646f6d2829202a204845494748540a0a0909636f6e7374206478203d2078202d2073746174652e736869702e780a0909636f6e7374206479203d2079202d2073746174652e736869702e790a0909636f6e7374206469737432203d2064782a6478202b2064792a64790a0a09096966286469737432203e20534146455f524144495553202a20534146455f524144495553297b0a090909627265616b3b202f2f20676f6f6420737061776e0a09097d0a097d0a0a09737061776e41737465726f696428782c792c726164697573290a7d0a0a66756e6374696f6e2072656e64657241737465726f69644174286173742c6f782c6f79297b0a096c6574204d203d206d61744964656e7469747928290a094d203d206d61744d756c284d2c206d61745472616e736c617465286173742e78202b206f782c206173742e79202b206f7929290a094d203d206d61744d756c284d2c206d6174526f74617465286173742e616e676c6529290a0a09636f6e737420707473203d206173742e73686170652e6d61702870203d3e206d61744170706c79284d2c207029290a09636f6e737420737472203d207074732e6d61702870203d3e2060247b702e787d2c247b702e797d60292e6a6f696e28222022290a0a092f2f2063686f6f7365206d61696e206f7220736861646f77206e6f64650a09636f6e7374206e6f6465203d20286f78203d3d3d2030202626206f79203d3d3d203029203f206173742e6d61696e203a206173742e736861646f770a096e6f64652e7365744174747269627574652822706f696e7473222c20737472290a7d0a0a66756e6374696f6e2072656e64657241737465726f696441744e6f6465286173742c6f782c6f792c6e6f646529207b0a096c6574204d3d6d61744964656e7469747928290a094d3d6d61744d756c284d2c6d61745472616e736c617465286173742e78202b206f782c206173742e79202b206f7929290a094d3d6d61744d756c284d2c6d6174526f74617465286173742e616e676c6529290a0a09636f6e7374207074733d6173742e73686170652e6d617028703d3e6d61744170706c79284d2c7029290a096e6f64652e7365744174747269627574652822706f696e7473222c7074732e6d617028703d3e60247b702e787d2c247b702e797d60292e6a6f696e2822202229290a7d0a0a0a66756e6374696f6e20737061776e41737465726f696428782c792c726164697573297b0a09636f6e7374207368617065203d206d616b6541737465726f6964536861706528726164697573290a092f2f2067726f757020666f722061737465726f6964202b20736861646f770a09636f6e73742067726f7570203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226722290a092f2f206d61696e20706f6c79676f6e0a09636f6e737420706f6c794d61696e203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c22706f6c79676f6e22290a09706f6c794d61696e2e736574417474726962757465282266696c6c222c20226e6f6e6522290a09706f6c794d61696e2e73657441747472696275746528227374726f6b65222c2022776869746522290a09706f6c794d61696e2e73657441747472696275746528227374726f6b652d7769647468222c20223222290a0967726f75702e617070656e644368696c6428706f6c794d61696e290a092f2f20736861646f7720706f6c79676f6e732028757020746f2033290a09636f6e737420736861646f7773203d205b5d0a09666f72286c65742069203d20303b2069203c20333b20692b2b297b0a0909636f6e737420706f6c79203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c22706f6c79676f6e22290a0909706f6c792e736574417474726962757465282266696c6c222c226e6f6e6522290a0909706f6c792e73657441747472696275746528227374726f6b65222c22776869746522290a0909706f6c792e73657441747472696275746528227374726f6b652d7769647468222c223222290a090967726f75702e617070656e644368696c6428706f6c79290a0909736861646f77732e7075736828706f6c79290a097d0a0967726f75702e736574417474726962757465282266696c746572222c2275726c2823676c6f772922290a0a0961737465726f6964734e6f64652e617070656e644368696c642867726f7570290a0a09636f6e73742061737465726f69643d7b0a0909782c20792c0a090976783a20284d6174682e72616e646f6d2829202d20302e3529202a20322c0a090976793a20284d6174682e72616e646f6d2829202d20302e3529202a20322c0a09097261646975732c0a0909616e676c653a204d6174682e72616e646f6d2829202a204d6174682e5049202a20322c0a09097370696e3a20284d6174682e72616e646f6d2829202d20302e3529202a20302e30322c0a090973686170652c0a09096d61696e3a20706f6c794d61696e2c0a0909736861646f77733a736861646f77732c0a090967726f75700a097d0a0973746174652e61737465726f6964732e707573682861737465726f6964290a7d0a0a0a66756e6374696f6e2072656e64657241737465726f696428617374297b0a092f2f204d41494e2061737465726f69640a0972656e64657241737465726f69644174286173742c302c30290a0a092f2f20534841444f572061737465726f6964730a09636f6e7374206f6666736574733d5b5d0a0a09696620286173742e78202d206173742e726164697573203c203029206f6666736574732e70757368287b206f783a2057494454482c206f793a2030207d290a09696620286173742e78202b206173742e726164697573203e20574944544829206f6666736574732e70757368287b206f783a202d57494454482c206f793a2030207d290a0a09696620286173742e79202d206173742e726164697573203c203029206f6666736574732e70757368287b206f783a20302c206f793a20484549474854207d290a09696620286173742e79202b206173742e726164697573203e2048454947485429206f6666736574732e70757368287b206f783a20302c206f793a202d484549474854207d290a0a092f2f20646961676f6e616c20636f706965730a09696620286f6666736574732e6c656e677468203d3d3d203229207b0a09096f6666736574732e70757368287b0a0909096f783a206f6666736574735b305d2e6f782c0a0909096f793a206f6666736574735b315d2e6f790a09097d293b0a097d0a0a092f2f20736861646f77730a09666f72286c65742069203d20303b2069203c206f6666736574732e6c656e6774683b20692b2b297b0a092020636f6e7374206f6666203d206f6666736574735b695d0a092020636f6e7374206e6f6465203d206173742e736861646f77735b695d0a09202072656e64657241737465726f696441744e6f6465286173742c206f66662e6f782c206f66662e6f792c206e6f6465290a097d0a0a092f2f206869646520756e7573656420736861646f77206e6f6465730a09666f72286c65742069203d206f6666736574732e6c656e6774683b2069203c206173742e736861646f77732e6c656e6774683b20692b2b297b0a0920206173742e736861646f77735b695d2e7365744174747269627574652822706f696e7473222c2222290a097d0a0a7d0a0a0a66756e6374696f6e20676574577261704f666673657428782c20792c20726164697573297b0a096c6574206f78203d20300a096c6574206f79203d20300a0a096966202878202d20726164697573203c203029206f78203d2057494454480a09656c7365206966202878202b20726164697573203e20574944544829206f78203d202d57494454480a0a096966202879202d20726164697573203c203029206f79203d204845494748540a09656c7365206966202879202b20726164697573203e2048454947485429206f79203d202d4845494748540a0a0972657475726e207b206f782c206f79207d0a7d0a0a66756e6374696f6e2075706461746541737465726f69647328297b0a0969662873746174652e61737465726f6964732e6c656e677468203d3d3d2030297b0a09096e65774c6576656c28290a097d0a09666f7228636f6e73742061206f662073746174652e61737465726f696473297b0a0909612e78202b3d20612e76780a0909612e79202b3d20612e76790a0909612e616e676c65202b3d20612e7370696e0a0a090972656e64657241737465726f69642861290a0909777261702861290a097d0a7d0a0a0a2f2f20436f6c6c6973696f6e20646574656374696f6e0a66756e6374696f6e20706f696e74496e506f6c792870742c20706f6c7929207b0a096c657420696e736964653d66616c73653b0a09666f72286c65742069203d20302c206a203d20706f6c792e6c656e677468202d20313b2069203c20706f6c792e6c656e6774683b206a203d20692b2b297b0a0909636f6e7374207869203d20706f6c795b695d2e782c207969203d20706f6c795b695d2e790a0909636f6e737420786a203d20706f6c795b6a5d2e782c20796a203d20706f6c795b6a5d2e790a0a0909636f6e737420696e74657273656374203d0a090928287969203e2070742e792920213d3d2028796a203e2070742e7929292026260a09092870742e78203c2028786a202d20786929202a202870742e79202d20796929202f2028796a202d20796929202b207869290a0a090969662028696e746572736563742920696e73696465203d2021696e736964650a097d0a0972657475726e20696e736964650a7d0a0a66756e6374696f6e20636f6c6c6973696f6e28612c2062297b0a092f2f206275696c6420736861706541206d61747269780a096c6574204d613d6d61744964656e7469747928290a0a094d613d6d61744d756c284d612c6d61745472616e736c61746528612e782c20612e7929290a094d613d6d61744d756c284d612c6d6174526f7461746528612e616e676c6529290a0a092f2f206275696c6420736861706542206d61747269780a096c6574204d623d6d61744964656e7469747928290a0a094d623d6d61744d756c284d622c6d61745472616e736c61746528622e782c20622e7929290a094d623d6d61744d756c284d622c6d6174526f7461746528622e616e676c6529290a0a09636f6e737420776f726c64413d612e73686170652e6d617028703d3e6d61744170706c79284d612c7029290a09636f6e737420776f726c64423d622e73686170652e6d617028703d3e6d61744170706c79284d622c7029290a0a092f2f207368697020706f696e747320696e736964652061737465726f69640a09666f7228636f6e73742070206f6620776f726c6441297b0a0909696628706f696e74496e506f6c7928702c20776f726c644229292072657475726e20747275653b0a097d0a0a092f2f2061737465726f696420706f696e747320696e7369646520736869700a09666f7228636f6e73742070206f6620776f726c6442297b0a090969662028706f696e74496e506f6c7928702c20776f726c644129292072657475726e20747275653b0a097d0a0972657475726e2066616c73650a7d0a0a66756e6374696f6e2068616e646c65436f6c6c6973696f6e7328297b0a092f2f2062756c6c6574732076732061737465726f6964730a09666f7228636f6e73742062206f662073746174652e62756c6c657473297b0a0909666f7228636f6e73742061206f662073746174652e61737465726f696473297b0a0909096c6574204d61203d206d61744964656e7469747928290a0909094d61203d206d61744d756c284d612c206d61745472616e736c61746528612e782c20612e7929290a0909094d61203d206d61744d756c284d612c206d6174526f7461746528612e616e676c6529290a090909636f6e73742061737465726f6964576f726c64203d20612e73686170652e6d61702870203d3e206d61744170706c79284d612c207029290a090909696628706f696e74496e506f6c7928622c2061737465726f6964576f726c6429297b0a090909092f2f2072656d6f76652062756c6c65740a0909090962756c6c6574734e6f64652e72656d6f76654368696c6428622e6e6f6465290a0909090973746174652e62756c6c6574732e73706c6963652873746174652e62756c6c6574732e696e6465784f662862292c2031290a0a090909092f2f2073706c69742061737465726f6964206f722072656d6f76650a0909090961737465726f6964734e6f64652e72656d6f76654368696c6428612e67726f7570293b0a0909090973746174652e61737465726f6964732e73706c6963652873746174652e61737465726f6964732e696e6465784f662861292c2031290a09090909696628612e726164697573203e203230297b0a0909090909737061776e41737465726f696428612e782c20612e792c20612e726164697573202f2032290a0909090909737061776e41737465726f696428612e782c20612e792c20612e726164697573202f2032290a090909097d0a090909090a090909092f2f6566666563740a090909096c6574204d3d6d61744964656e7469747928290a090909094d3d6d61744d756c284d2c6d61745472616e736c61746528612e782c20612e7929290a090909094d3d6d61744d756c284d2c6d6174526f7461746528612e616e676c6529290a09090909636f6e737420776f726c64203d20612e73686170652e6d617028703d3e6d61744170706c79284d2c7029290a09090909666f72286c65742069203d20303b2069203c20776f726c642e6c656e6774683b20692b2b297b0a090909092020636f6e7374207031203d20776f726c645b695d0a090909092020636f6e7374207032203d20776f726c645b2869202b203129202520776f726c642e6c656e6774685d0a090909092020737061776e53686172642870312c2070322c2061290a090909097d0a090909092f2f646f6e650a09090909627265616b0a0909097d0a09097d0a097d0a0a092f2f20736869702076732061737465726f6964730a09666f7228636f6e73742061206f662073746174652e61737465726f696473297b0a0909696628636f6c6c6973696f6e2873746174652e736869702c6129297b0a09090969662873746174652e736869702e696e76756c6e203d3d3d2030297b0a0909090973746174652e736869702e6865616c74682d2d0a0909090973746174652e736869702e696e76756c6e203d203132300a0909090973746174652e736869702e686974466c617368203d2031300a0909090969662873746174652e736869702e6865616c7468203c3d2030297b0a09090909096b696c6c5368697028290a090909097d0a0909097d0a09097d0a097d0a7d0a0a0a66756e6374696f6e2072657365745368697028297b0a0973746174652e736869702e6865616c7468203d204d41585f4845414c54480a0973746174652e736869702e78203d205749445448202f20320a0973746174652e736869702e79203d20484549474854202f20320a0973746174652e736869702e7678203d20300a0973746174652e736869702e7679203d20300a0973746174652e736869702e616e676c65203d20300a0973746174652e736869702e696e76756c6e203d203138300a7d0a66756e6374696f6e206b696c6c5368697028297b0a096578706c6f6465536869702873746174652e736869702e782c2073746174652e736869702e79290a0973746174652e6c697665732d2d0a0969662873746174652e6c69766573203c3d2030297b0a090973746174652e6d6f6465203d202267616d656f766572220a090972657475726e0a097d0a0972657365745368697028290a7d0a0a66756e6374696f6e207570646174655061727469636c657328297b0a092f2f736869700a09666f72286c65742069203d2073746174652e7061727469636c65732e6c656e677468202d20313b2069203e3d20303b20692d2d297b0a0909636f6e73742070203d2073746174652e7061727469636c65735b695d0a0909702e78202b3d20702e76780a0909702e79202b3d20702e76790a0909702e6c6966652d2d0a0a0909702e6e6f64652e73657441747472696275746528227831222c20702e78290a0909702e6e6f64652e73657441747472696275746528227931222c20702e79290a0909702e6e6f64652e73657441747472696275746528227832222c20702e78202b20702e7678202a2032290a0909702e6e6f64652e73657441747472696275746528227932222c20702e79202b20702e7679202a2032290a0a0909696628702e6c696665203c3d2030297b0a090909702e6e6f64652e72656d6f766528290a09090973746174652e7061727469636c65732e73706c69636528692c2031290a09097d0a097d090a092f2f726f636b730a0973746174652e736861726473203d2073746174652e7368617264732e66696c74657228733d3e7b0a0909732e7831202b3d20732e76780a0909732e7931202b3d20732e76790a0909732e7832202b3d20732e76780a0909732e7932202b3d20732e76790a0909732e6c6966652d2d0a0a0909732e6e6f64652e73657441747472696275746528227831222c20732e7831290a0909732e6e6f64652e73657441747472696275746528227931222c20732e7931290a0909732e6e6f64652e73657441747472696275746528227832222c20732e7832290a0909732e6e6f64652e73657441747472696275746528227932222c20732e7932290a0a0909696628732e6c696665203c3d2030297b0a090909732e6e6f64652e72656d6f766528290a09090972657475726e2066616c73650a09097d0a090972657475726e20747275650a097d293b0a090a7d0a0a66756e6374696f6e206372656174655061727469636c654e6f646528297b0a09636f6e73742070203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226c696e6522290a09702e73657441747472696275746528227374726f6b65222c226f72616e676522290a09702e73657441747472696275746528227374726f6b652d7769647468222c223222290a097061727469636c65734e6f64652e617070656e644368696c642870290a0972657475726e20700a7d0a66756e6374696f6e206578706c6f64655368697028782c2079297b0a09666f7220286c65742069203d20303b2069203c20363b20692b2b297b0a090973746174652e7061727469636c65732e70757368287b0a090909782c0a090909792c0a09090976783a20284d6174682e72616e646f6d2829202d20302e3529202a20362c0a09090976793a20284d6174682e72616e646f6d2829202d20302e3529202a20362c0a0909096c6966653a2034302c0a0909096e6f64653a206372656174655061727469636c654e6f646528290a09097d293b0a097d0a7d0a0a66756e6374696f6e20737061776e53686172642870312c2070322c2061737465726f6964297b0a09636f6e7374206e6f6465203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226c696e6522290a096e6f64652e73657441747472696275746528227831222c2070312e78290a096e6f64652e73657441747472696275746528227931222c2070312e79290a096e6f64652e73657441747472696275746528227832222c2070322e78290a096e6f64652e73657441747472696275746528227932222c2070322e79290a096e6f64652e73657441747472696275746528227374726f6b65222c22776869746522290a096e6f64652e73657441747472696275746528227374726f6b652d7769647468222c223122290a097061727469636c65734e6f64652e617070656e644368696c64286e6f6465290a0a09636f6e737420616e676c65203d204d6174682e6174616e322870312e79202d2061737465726f69642e792c2070312e78202d2061737465726f69642e78290a09636f6e7374207370656564203d2032202b204d6174682e72616e646f6d2829202a20320a0a0973746174652e7368617264732e70757368287b0a090978313a2070312e782c2079313a2070312e792c0a090978323a2070322e782c2079323a2070322e792c0a090976783a204d6174682e636f7328616e676c6529202a207370656564202b2061737465726f69642e76782c0a090976793a204d6174682e73696e28616e676c6529202a207370656564202b2061737465726f69642e76792c0a09096c6966653a203330202b204d6174682e72616e646f6d2829202a2031362c0a09096e6f64650a097d293b0a7d0a0a66756e6374696f6e206e65774c6576656c28297b0a0969662873746174652e736869702e6865616c7468203c204d41585f4845414c5448297b0a090973746174652e736869702e6865616c74682b2b0a097d0a0973746174652e6c6576656c2b2b0a0973746172744c6576656c2873746174652e6c6576656c290a7d0a0a66756e6374696f6e2073746172744c6576656c286c6576656c297b0a09636f6e73742061737465726f6964436f756e74203d2034202b206c6576656c0a0a09666f72286c65742069203d20303b2069203c2061737465726f6964436f756e743b20692b2b297b0a0909737061776e41737465726f69644177617946726f6d53686970283430202b204d6174682e72616e646f6d2829202a203330290a097d0a7d0a0a66756e6374696f6e2075706461746548554428297b0a096875644865616c74682e74657874436f6e74656e74203d20224865616c74683a2022202b2073746174652e736869702e6865616c74680a096875644c697665732e74657874436f6e74656e7420203d20224c697665733a2022202b2073746174652e6c697665730a096875644c6576656c2e74657874436f6e74656e7420203d20224c6576656c3a2022202b2073746174652e6c6576656c0a0969662873746174652e6d6f6465203d3d202267616d656f76657222297b0a090968756447616d654f7665722e74657874436f6e74656e743d2247414d45204f564552220a090968756447616d654f76657245787472612e74657874436f6e74656e743d22507265737320456e746572206f72205374617274220a097d20656c7365207b0a090968756447616d654f7665722e74657874436f6e74656e743d22220a090968756447616d654f76657245787472612e74657874436f6e74656e743d22220a097d0a7d0a66756e6374696f6e20726573657447616d6528297b0a097768696c652861737465726f6964734e6f64652e66697273744368696c64297b0a090961737465726f6964734e6f64652e72656d6f76654368696c642861737465726f6964734e6f64652e66697273744368696c64290a097d0a0973746174652e61737465726f6964732e6c656e6774683d300a097768696c652862756c6c6574734e6f64652e66697273744368696c64297b0a090962756c6c6574734e6f64652e72656d6f76654368696c642862756c6c6574734e6f64652e66697273744368696c64290a097d0a0973746174652e62756c6c6574732e6c656e6774683d300a0973746174652e6c6576656c3d310a0973746174652e6c697665733d4c495645530a0972657365745368697028290a0973746172744c6576656c2873746174652e6c6576656c290a7d0a66756e6374696f6e20737461727447616d6528297b0a09726573657447616d652829090a0973746174652e6d6f64653d22706c6179696e67220a097469746c65546578742e74657874436f6e74656e743d22220a7d0a0a2f2f2047616d65206c6f6f700a66756e6374696f6e206c6f6f7028297b0a09706f6c6c47616d6570616428290a0968616e646c65496e70757428290a0969662873746174652e6d6f646520213d3d2022706c6179696e6722297b0a090972657175657374416e696d6174696f6e4672616d65286c6f6f70290a090972657475726e0a097d0a097570646174655368697028290a0975706461746542756c6c65747328290a0975706461746541737465726f69647328290a0968616e646c65436f6c6c6973696f6e7328290a097570646174655061727469636c657328290a0972656e6465725368697028290a0972656e64657242756c6c65747328290a092f2f2061737465726f69647320616c72656164792072656e646572656420696e2075706461746541737465726f6964730a0975706461746548554428290a0972657175657374416e696d6174696f6e4672616d65286c6f6f70290a7d0a2f2f20696e697469616c2073657475700a6175746f5363616c6528290a6c6f6f7028290a2a2f6a53435f414354494f4e5501270082460233e952c2f38288beab3ef31754c3ccd9bf5d473e0f7e4ec5bc8cb4002a46e54e9d17972720e3d73686b82d5a89641e8fb69df05728bf0778d86fcdcb0001548f32beeb95db01240adc64b1622728e3ba542f9885dc5f032b767afae54f0022bf153836b68b83b5cbfa22759cf62a73ba8aa4faa979b591a0d96016ce25b10126afbd88f016cca69a8541d6ba840bb6ad6f378c4ac2a489c5ac16c40f01159b0123d56af976e2767493be7d8f41a9d9a726193259441f6f2c9b1a2e83f3ed626d010c3ffec05006cd45c40d262b38cd5e102587c6f2fd49e9ddbff361d9057a693a000a0678eee50b1359e0324631769b34e96fc323c65ba5fcca95b291fa35066c57000bf652f2b51239bbabffe4a690f9ede60f64022da793fa1d19d8ff7b2f8368a7001f60311b275d17547d221f915c5c733c1926b312eda561440c2f36efe21cb2430128b247bd088fb052dfcf85ae089d093ab085e2eeb05b4d9b8e40ba5ac425c6430021f10a0a1806df8bb0563765d3c3675a7cdf3a7a5182f14c3bd4e61ac80cfdbb0019dd0f4580b8988551d7d6044d4ee5af31a63c49c0e22f0328c2570ca8b1dcc7002b1e8dc62a2b4dfdc2243c1735ca65737b6d756ed8742b291d4ff536cccc41e500000000000000000000000000000000000000000000000000000000000000002f2e4f9d635fe0df21af356d8592d4c8e86d1096c08118b9a408e4f3eb2eab9020c9bf39741faea808392bcde87d399daf204cad31325ea7ba605bb63c33c73e001180506535b6c65fe9d7f51991fd70e5001110be5f685b165fea0ee85ce25f1d0019c89d9e80f85cb5d668e3636e99dd350fdf93537d9a2b9f4fed6142b41ba654192410723957622651ff8e556906fdc5284725085d24e59e56e59a9117abf5651858a92ed893555e61ac0c13b7b1a328466eda4d2874b16d2d73858b3cbf393d283a23397fd8a5456fc810efc3ef6b5dc8d05ed7dcdc0e013002f83fd870a08e2a910986b155bc5200a68b458abdcfdd2de9c10e6184bb829bdc1b16d32db6d51f378319042738e62ca0c3d4c4cac972fb7b7aedc5587876005b09281c551e181c51dc5096f82b189631ec6a7675d90a75b85a65a7945d01632b13425191ff0922cac02a28a873cade98228064f9ff9bb0d8ca3490e51cab07492d65ea5b288e26f0fb38c74ba5e440fcc4c923314dac82cc0e52077493774fde2edca1e358151040c35fc1634d1958e2d549bc5e2ac4ad4224f3e3b651a428d4c6ffd07a879a011c12ae2d66b24df98f6d4a8590097734f2cc95331f3a43a37ffb04f47cff83ce0110565383ec4831d82b72b5a862afb3f4964784af822b84592cb39205b06a392500047a54a9b8957e6bc1f348d196abd7467d712497c8f7637e532530d3045b0ced010261f53f36eff7ea096781efd89513e361721a94e38909e58720e471d589bf6701200cc8f118aff584a9171253252e7cc1c1f70769a80dfcd23acdc5e0473622880105e7aee2d0b759857ca2b06ee1260227300d4a2cb502a7baf8d2af207ac557df000856dc58f84a9d87b9ea7a5de7dff03923ea5b3990fc3031c8c87c8851e7314e0005f6d9865b1876ea7e2fe75dc8ff75b2391f2d691131581715316b7fed2a40e3000ba07e97120c0abe0f78530f460eb174265c0b06cb6e72fa2b80e646dbd3b2da0123ad3a9fdfce0b31af1f6f43600ec5b0b8862780482acbc3f43cc63e5f84ae580113886fb5a347e43c8c7d6b8957ac267a52a7c85b9510ad6ed686899cd1631e990114868fb62bb68c2220af03f7be89023eda5601bf85e74937d9027ec32bf5fd8b000ac7ab905ba00527e479f8993c3178fa474737d75eaf93bfeed2e6ef26bbef5f00
DERO explorer source code | explorer version (api): under development (1.0) | dero version: golang pre-alpha | Copyright 2017-2022 Dero Project