DERO HE BlockChain Explorer(v1) Mainnet

hosted on

DERO Mining Node

Tx hash: dab1885591dfa53e49e6b66266effb685c3ce8520f3872c74e83f5fa48dcf6dd Type SC

Block: 6503fb6c82b875e475bdc202e0e69320028a0525abcd5f12e52d7f2dbb645b66 (VALID)
SCID current reserves
SCID Amount(in atomic units)
0000000000000000000000000000000000000000000000000000000000000000 0
SCID string variables
key value
C 2f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c20227570646174652e6a7322290a33312053544f524528226465736372486472222c20225570646174652066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c20227570646174652e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c2022333133313937343637386464363030656561376436373931343538326261643731323465643737643839643964613433313137653938383434303664396222290a33372053544f5245282266696c65436865636b53222c202237623834353139656363653130613463636635343564636463336438366236656630396263376336663332316431383539386666323635363737613434623222290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a77696e646f772e6164644576656e744c697374656e657228226c6f6164222c20726573697a65535647293b0a77696e646f772e6164644576656e744c697374656e65722822726573697a65222c20726573697a65535647293b0a66756e6374696f6e20726573697a655356472829207b0a097377203d2077696e646f772e696e6e657257696474683b0a097368203d2077696e646f772e696e6e65724865696768743b0a0975706461746556696577426f7828293b0a7d0a0a66756e6374696f6e2075706461746556696577426f782829207b0a0a09696620286b6579735b223d225d29207a6f6f6d202a3d20302e39383b0a09696620286b6579735b222d225d29207a6f6f6d202a3d20312e30323b0a0a09636f6e7374207669657757203d207377202a207a6f6f6d3b0a09636f6e7374207669657748203d207368202a207a6f6f6d3b0a0a09636f6e73742063616d58203d2063616d43656e7465722e78202d207669657757202f20323b0a09636f6e73742063616d59203d2063616d43656e7465722e79202d207669657748202f20323b0a0a0963616d4c6566742020203d2063616d43656e7465722e78202d20287377202a207a6f6f6d29202f20323b0a0963616d546f70202020203d2063616d43656e7465722e79202d20287368202a207a6f6f6d29202f20323b0a0963616d526967687420203d2063616d43656e7465722e78202b20287377202a207a6f6f6d29202f20323b0a0963616d426f74746f6d203d2063616d43656e7465722e79202b20287368202a207a6f6f6d29202f20323b0a0a097376672e736574417474726962757465282276696577426f78222c2060247b63616d587d20247b63616d597d20247b76696577577d20247b76696577487d60293b0a7d0a0a66756e6374696f6e2075706461746543616d65726128647429207b0a092f2f2063616d65726120666f6c6c6f777320706c617965720a0963616d43656e7465722e78203d2067616d652e706c617965722e783b0a0963616d43656e7465722e79203d2067616d652e706c617965722e793b0a7d0a0a0a2f2f2d2d2d2d2d2d2d2d2d2d0a2f2f2047657420496e7075740a0a77696e646f772e6164644576656e744c697374656e65722822776865656c222c2065203d3e207b0a0969662028652e64656c746159203c203029207a6f6f6d202a3d20302e393b202f2f207a6f6f6d20696e0a09656c7365207a6f6f6d202a3d20312e313b202f2f207a6f6f6d206f75740a0a097a6f6f6d203d204d6174682e6d617828302e322c204d6174682e6d696e287a6f6f6d2c203529293b202f2f20636c616d700a7d293b0a0a77696e646f772e6164644576656e744c697374656e657228226b6579646f776e222c2065203d3e207b090a096b6579735b652e6b65795d203d20747275653b090a7d293b0a77696e646f772e6164644576656e744c697374656e657228226b65797570222c2065203d3e207b0a096b6579735b652e6b65795d203d2066616c73653b0a7d293b0a0a6c65742070726576537461727450726573736564203d2066616c73653b0a66756e6374696f6e20676174686572496e70757428647429207b0a09636f6e73742070203d2067616d652e706c617965723b0a0a092f2f202d2d2d204b4559424f415244202d2d2d0a096c6574206d6f7665203d20286b6579735b2261225d203f202d31203a203029202b20286b6579735b2264225d203f2031203a2030293b0a096c65742076657274203d20286b6579735b2277225d203f2031203a203029202b20286b6579735b2273225d203f202d31203a2030293b0a0a096c65742077616e7450756e6368203d206b6579735b226c225d3b0a096c65742077616e744b69636b20203d206b6579735b223b225d3b0a096c65742077616e744a756d7020203d206b6579735b2220225d3b0a0a096c657420737461727450726573736564203d206b6579735b22457363617065225d0a0a092f2f202d2d2d2047414d45504144202d2d2d0a09636f6e7374206770203d206e6176696761746f722e67657447616d657061647328295b305d3b090a0969662028677029207b0a09092f2f20442d7061640a09096966202867702e627574746f6e735b31345d2e7072657373656429206d6f7665203d202d313b202f2f206c6566740a09096966202867702e627574746f6e735b31355d2e7072657373656429206d6f7665203d2020313b202f2f2072696768740a0a09096966202867702e627574746f6e735b31325d2e70726573736564292076657274203d2020313b202f2f2075700a09096966202867702e627574746f6e735b31335d2e70726573736564292076657274203d202d313b202f2f20646f776e0a0a09092f2f204661636520627574746f6e730a09096966202867702e627574746f6e735b305d2e70726573736564292077616e744a756d7020203d20747275653b202f2f2041203d206a756d700a09096966202867702e627574746f6e735b325d2e70726573736564292077616e7450756e6368203d20747275653b202f2f2058203d2070756e63680a09096966202867702e627574746f6e735b315d2e70726573736564292077616e744b69636b20203d20747275653b202f2f2042203d206b69636b0a09090a0909737461727450726573736564203d2067702e627574746f6e735b395d2e70726573736564207c7c207374617274507265737365643b0a097d0a092f2f202d2d2d204d454e55202d2d2d0a096d656e75287374617274507265737365642c6d6f7665293b0a0970726576537461727450726573736564203d207374617274507265737365643b0a0a092f2f202d2d2d204150504c5920544f20504c41594552202d2d2d0a09702e6d6f7665496e707574203d206d6f76653b0a09702e766572746963616c496e707574203d20766572743b0a0a09702e77616e7450756e6368203d2077616e7450756e63683b0a09702e77616e744b69636b20203d2077616e744b69636b3b0a09702e77616e744a756d70203d2077616e744a756d703b0a0969662028702e77616e744a756d7029206a756d7028293b0a0a7d0a0a0a66756e6374696f6e206a756d702870203d2067616d652e706c6179657229207b202020200a0969662028702e6f6e47726f756e6420262620702e616e696d2e737461746520213d3d226b69636b2229207b0a0909702e7679203d202d67616d652e6a756d70537472656e6774683b0a0909702e6f6e47726f756e64203d2066616c73653b0a0909702e696e416972203d20747275653b0a097d0a7d0a0a66756e6374696f6e206170706c79496e74656e7428656e746974792c647429207b0a09636f6e73742070203d20656e746974793b0a0969662028702e7374756e203e203029207b0a0909702e7374756e202d3d2064742f313030303b0a090972657475726e3b0a097d0a09696620282821702e696e41697220262620702e77616e744b69636b297c7c0a09092821702e696e41697220262620656e746974792e766572746963616c496e707574203c203029297b200a090969662028702e6d6f7665496e70757420213d3d203029207b0a090909696628702e6d6f7665496e707574203e203020297b0a09090909702e666163696e67203d20313b0a0909097d656c73657b0a09090909702e666163696e67203d202d313b0a0909097d0a090909702e6d6f7665496e707574203d20303b0a09097d090a097d09200a0a09702e7678203d20702e6d6f7665496e707574202a20702e73706565643b090a0969662028702e6d6f7665496e70757420213d3d203029207b0a0909696628702e6d6f7665496e707574203e203020297b0a090909702e666163696e67203d20313b0a09097d656c73657b0a090909702e666163696e67203d202d313b0a09097d0a097d0a0a7d0a0a0a66756e6374696f6e207570646174654d6f76656d656e74537461746528656e7469747929207b0a09696628656e746974792e6d6f76655374617465203d3d3d20226479696e67222972657475726e3b0a0a0969662028656e746974792e696e41697220262620656e746974792e7679203c202d302e322920656e746974792e6d6f76655374617465203d20226a756d70223b0a09656c73652069662028656e746974792e696e41697220262620656e746974792e7679203e20302e322920656e746974792e6d6f76655374617465203d202266616c6c223b0a09656c73652069662028656e746974792e6d6f7665496e70757420213d3d20302920656e746974792e6d6f76655374617465203d202277616c6b223b0a09656c73652069662028656e746974792e766572746963616c496e707574203c20302026262021656e746974792e696e4169722920656e746974792e6d6f76655374617465203d202263726f756368223b0a09656c736520656e746974792e6d6f76655374617465203d202269646c65223b0a0a0969662028656e746974792e6d6f76655374617465203d3d3d202263726f7563682229207b0a0909656e746974792e686569676874203d2036303b0a0909656e746974792e736b656c65746f6e4f666673657459203d2031320a097d20656c7365207b0a0909656e746974792e686569676874203d203130303b0a0909656e746974792e736b656c65746f6e4f666673657459203d20303b0a097d0a7d0a0a0a66756e6374696f6e20757064617465416374696f6e537461746528656e7469747929207b0a09656e746974792e616374696f6e5374617465203d20226e6f6e65223b0a0a0969662028656e74697479203d3d3d2067616d652e706c6179657229207b0a09096966202821656e746974792e696e41697229207b0a09090969662028656e746974792e766572746963616c496e707574203c203029207b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d202263726f75636850756e6368223b0a0909090969662028656e746974792e77616e744b69636b29202072657475726e20656e746974792e616374696f6e5374617465203d202263726f7563684b69636b223b090909090a0909090972657475726e20656e746974792e616374696f6e5374617465203d202263726f756368223b0a0909097d656c736520696628656e746974792e766572746963616c496e707574203e2030297b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d2028656e746974792e6d6f76655374617465203d3d3d202277616c6b2229203f202277616c6b4869676850756e636822203a20226869676850756e6368223b0a0909090969662028656e746974792e77616e744b69636b292072657475726e20656e746974792e616374696f6e5374617465203d2022686967684b69636b223b20090a0909097d656c73657b0a0909090969662028656e746974792e77616e7450756e63682972657475726e20656e746974792e616374696f6e5374617465203d2028656e746974792e6d6f76655374617465203d3d3d202277616c6b2229203f202277616c6b50756e636822203a202270756e6368223b0a0909090969662028656e746974792e77616e744b69636b2972657475726e20656e746974792e616374696f6e5374617465203d20226b69636b223b0a0909097d0a09097d20656c7365207b0a0909090a09090969662028656e746974792e766572746963616c496e707574203c203029207b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d20226a756d704c6f7750756e6368223b0a0909090969662028656e746974792e77616e744b69636b29202072657475726e20656e746974792e616374696f6e5374617465203d20226a756d704c6f774b69636b223b090909090a0909097d656c736520696628656e746974792e766572746963616c496e707574203e2030297b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d20226a756d704869676850756e6368223b0a0909090969662028656e746974792e77616e744b69636b292072657475726e20656e746974792e616374696f6e5374617465203d20226a756d70486967684b69636b223b20090a0909097d656c73657b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d20226a756d7050756e6368223b0a0909090969662028656e746974792e77616e744b69636b29202072657475726e20656e746974792e616374696f6e5374617465203d20226a756d704b69636b223b0a0909097d0909090a09097d0a097d656c736520696628656e746974792e7479706520213d3d2022626f73732220297b0a090969662028656e746974792e766572746963616c496e707574203d3d203129207b0a09090969662028656e746974792e77616e7450756e636829207b656e746974792e616374696f6e5374617465203d20226869676850756e6368227d0a09090969662028656e746974792e77616e744b69636b29207b656e746974792e616374696f6e5374617465203d2022686967684b69636b227d0a09097d656c73657b0a09090969662028656e746974792e77616e7450756e636829207b656e746974792e616374696f6e5374617465203d202270756e6368227d0a09090969662028656e746974792e77616e744b69636b29207b656e746974792e616374696f6e5374617465203d20226b69636b227d0a09097d090a097d656c73657b0a09092f2f626f73730a090969662028656e746974792e766572746963616c496e707574203d3d203129207b0a09090969662028656e746974792e77616e7450756e636829207b656e746974792e616374696f6e5374617465203d2028656e746974792e6d6f76655374617465203d3d3d202277616c6b2229203f202277616c6b50756e636822203a202270756e6368223b7d0a09090969662028656e746974792e77616e744b69636b29207b656e746974792e616374696f6e5374617465203d2022686967684b69636b227d0a09097d656c73657b0a09090969662028656e746974792e77616e7450756e636829207b656e746974792e616374696f6e5374617465203d2028656e746974792e6d6f76655374617465203d3d3d202277616c6b2229203f202277616c6b4869676850756e636822203a20226869676850756e6368223b7d0a09090969662028656e746974792e77616e744b69636b29207b656e746974792e616374696f6e5374617465203d20226b69636b227d0a09097d090a097d0a7d0a0a0a0a66756e6374696f6e2073656c656374416e696d6174696f6e537461746528656e7469747929207b0a096c65742066696e616c5374617465203d20656e746974792e6d6f766553746174653b0a0a0969662028656e746974792e616374696f6e537461746520213d3d20226e6f6e652229207b0a090966696e616c5374617465203d20656e746974792e616374696f6e53746174653b0a097d0a0a096966202866696e616c537461746520213d3d20656e746974792e616e696d2e737461746529207b0a0909706c6179416e696d6174696f6e28656e746974792c2066696e616c5374617465293b0a097d0a7d0a0a0a66756e6374696f6e20706c6179416e696d6174696f6e28656e746974792c206e616d6529207b0a09636f6e737420616e696d203d20656e746974792e616e696d3b0a0a0969662028616e696d2e7374617465203d3d3d206e616d65292072657475726e3b0a0a09616e696d2e7374617465203d206e616d653b0a09616e696d2e6e657874506f7365203d20706f7365735b6e616d655d3b0a7d0a0a0a0a66756e6374696f6e20757064617465416e696d6174696f6e28656e746974792c20647429207b0a09636f6e737420616e696d203d20656e746974792e616e696d3b0a09616e696d2e6672616d652b2b0a092f2f20496620626c656e64696e6720746f2061206e657720706f73650a0969662028616e696d2e6e657874506f736529207b0a0909616e696d2e63757272656e74506f7365203d20616e696d2e6e657874506f73653b0a0909616e696d2e6e657874506f7365203d206e756c6c3b0a0909616e696d2e6672616d65203d20303b090a097d090a092f2f2057616c6b206379636c65206f766572726964650a0969662028616e696d2e7374617465203d3d3d202277616c6b22207c7c20616e696d2e7374617465203d3d3d202277616c6b50756e636822207c7c20616e696d2e7374617465203d3d3d202277616c6b4869676850756e63682229207b0a09096170706c7957616c6b28656e746974792c206474293b0a0a090969662028616e696d2e7374617465203d3d3d202277616c6b50756e63682229207b0a0909096170706c79426c656e646564506f736528656e746974792c20706f7365732e77616c6b50756e63682c20706f7365732e77616c6b50756e63682c2031293b0a09097d656c73652069662028616e696d2e7374617465203d3d3d202277616c6b4869676850756e63682229207b0a0909096170706c79426c656e646564506f736528656e746974792c20706f7365732e77616c6b4869676850756e63682c20706f7365732e77616c6b4869676850756e63682c2031293b0a09097d0a097d20656c736520696628616e696d2e737461746520213d3d20226479696e6722297b0a09090a09092f2f2049646c652c2070756e63682c206b69636b2c206a756d702c2066616c6c2c206574632e0a09096170706c79426c656e646564506f736528656e746974792c20616e696d2e63757272656e74506f73652c20616e696d2e63757272656e74506f73652c2031293b0a097d656c73657b0a09096170706c79446561746828656e746974792c206474293b0a097d0a7d0a0a66756e6374696f6e20206170706c7957616c6b28656e746974792c6474297b0a09636f6e73742074203d20706572666f726d616e63652e6e6f772829202a202e30313b202f2f2077616c6b207370656564206d756c7469706c6965720a09636f6e737420746f72736f203d20656e746974792e736b656c65746f6e2e746f72736f3b0a09746f72736f2e726f746174696f6e546172676574203d204d6174682e73696e2874202a20302e3529202a20302e30353b0a092f2f20686561640a09746f72736f2e6368696c6472656e2e686561642e726f746174696f6e546172676574203d20303b0a092f2f206c6567730a09746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e546172676574203d20204d6174682e73696e287429202a20302e363b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e546172676574203d202d4d6174682e73696e287429202a20302e363b0a0a09746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e546172676574203d204d6174682e6d6178282d4d6174682e73696e2874202b20302e3529202a20302e342c202d302e31293b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e546172676574203d204d6174682e6d6178284d6174682e73696e2874202b20302e3529202a20302e342c202d302e31293b0a0a092f2f2061726d730a09746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e546172676574203d202d4d6174682e73696e287429202a20302e343b0a09746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e546172676574203d20204d6174682e73696e287429202a20302e343b0a0a09746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e546172676574203d2028204d6174682e73696e2874202b20302e3329202a20302e3129202d313b0a09746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e546172676574203d2028204d6174682e73696e2874202b20302e3329202a20302e3129202d2e353b0a7d0a66756e6374696f6e20206170706c79446561746828656e746974792c6474297b0a09636f6e73742074203d20706572666f726d616e63652e6e6f772829202a202e30313b202f2f2077616c6b207370656564206d756c7469706c6965720a09636f6e737420746f72736f203d20656e746974792e736b656c65746f6e2e746f72736f3b0a09636f6e7374207b207365676d656e743a207365672c2020706c6174666f726d3a20656e656d79506c6174666f726d20207d203d20676574506c6174666f726d556e64657228656e74697479293b0a09636f6e73742062617365416e676c65203d20736567203f206765745365676d656e74416e676c652873656729203a20303b202f2f2066616c6c6261636b20746f20666c61740a0a09746f72736f2e726f746174696f6e546172676574203d20656e746974792e666163696e67202a202862617365416e676c65202d204d6174682e5049202f2032293b0a0a092f2f206c6567730a09746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e546172676574203d2020303b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e546172676574203d20303b0a0a09746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e546172676574203d20303b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e546172676574203d20303b0a7d0a0a0a66756e6374696f6e206170706c79426c656e646564506f736528656e746974792c20612c20622c207429207b0a09636f6e737420746f72736f203d2020656e746974792e736b656c65746f6e2e746f72736f3b0a0a20202020746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e546172676574203d0a20202020202020206c65727028612e757070657241726d4c2c20622e757070657241726d4c2c2074293b0a0a20202020746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e546172676574203d0a20202020202020206c65727028612e6c6f77657241726d4c2c20622e6c6f77657241726d4c2c2074293b0a0a20202020746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e546172676574203d0a20202020202020206c65727028612e757070657241726d522c20622e757070657241726d522c2074293b0a0a20202020746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e546172676574203d0a20202020202020206c65727028612e6c6f77657241726d522c20622e6c6f77657241726d522c2074293b0a09696628656e746974792e616e696d2e737461746520213d3d202277616c6b50756e63682220262620656e746974792e616e696d2e737461746520213d3d202277616c6b4869676850756e636822297b0a0909746f72736f2e726f746174696f6e546172676574203d206c65727028612e746f72736f2c20622e746f72736f2c2074293b0a0909746f72736f2e6368696c6472656e2e686561642e726f746174696f6e546172676574203d206c65727028612e686561642c20622e686561642c2074293b0a0a0909746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e546172676574203d0a0909096c65727028612e75707065724c65674c2c20622e75707065724c65674c2c2074293b0a0a0909746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e546172676574203d0a0909096c65727028612e6c6f7765724c65674c2c20622e6c6f7765724c65674c2c2074293b0a0a0909746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e546172676574203d0a0909096c65727028612e75707065724c6567522c20622e75707065724c6567522c2074293b0a0a0909746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e546172676574203d0a0909096c65727028612e6c6f7765724c6567522c20622e6c6f7765724c6567522c2074293b0a097d0a7d0a0a0a66756e6374696f6e206c65727028612c20622c207429207b0a0972657475726e2061202b202862202d206129202a20743b0a7d0a0a66756e6374696f6e20616e676c65446966662820622c6129207b0a096c65742064203d2062202d20613b0a097768696c65202864203e204d6174682e5049292064202d3d204d6174682e5049202a20323b0a097768696c65202864203c202d4d6174682e5049292064202b3d204d6174682e5049202a20323b0a0972657475726e20643b0a7d0a66756e6374696f6e20736d6f6f7468416e676c652863757272656e742c207461726765742c2064742c2062617365537065656429207b0a202020206c65742064696666203d20746172676574202d2063757272656e743b0a0a202020202f2f207772617020696e746f20282d50492c205049290a2020202064696666203d202864696666202b204d6174682e504929202520284d6174682e5049202a203229202d204d6174682e50493b0a09636f6e73742074203d204d6174682e6d696e284d6174682e616273286469666629202f204d6174682e50492c2031293b0a09636f6e73742065617365203d2074202a20743b202f2f2071756164726174696320656173652d696e0a09636f6e7374207370656564203d20626173655370656564202b2065617365202a2032303b0a0a2020202072657475726e2063757272656e74202b2064696666202a206474202a2073706565643b0a7d0a0a66756e6374696f6e20736d6f6f7468426f6e65526f746174696f6e7328656e746974792c647429207b0a09636f6e7374207370656564203d2032303b202f2f20686f77206661737420626f6e657320726f7461746520746f7761726420746172676574730a0964743d6474202f2031303030202f2f2068617320746f20626520696e207365636f6e64730a09636f6e737420746f72736f203d2020656e746974792e736b656c65746f6e2e746f72736f3b090a0a09746f72736f2e6368696c6472656e2e686561642e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e686561642e726f746174696f6e2c20746f72736f2e6368696c6472656e2e686561642e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e2c20746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e2c20746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e2c20746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e2c20746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e726f746174696f6e2c20746f72736f2e726f746174696f6e5461726765742c2064742c207370656564293b0a0a09746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e2c20746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e2c20746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e2c20746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e2c20746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e5461726765742c2064742c207370656564293b0a7d0a0a0a2f2f2d2d2d20436f6c6c6973696f6e0a0a2f2f2047657420776f726c6420656e7469747920706f6c79676f6e0a66756e6374696f6e20676574426f6e65576f726c64506f6c7928626f6e6529207b0a09636f6e737420636f73203d204d6174682e636f7328626f6e652e776f726c64526f74293b0a09636f6e73742073696e203d204d6174682e73696e28626f6e652e776f726c64526f74293b0a0a0972657475726e20626f6e652e706f6c792e6d61702870203d3e20287b0a0909783a20626f6e652e776f726c6458202b20702e78202a20636f73202d20702e79202a2073696e2c0a0909793a20626f6e652e776f726c6459202b20702e78202a2073696e202b20702e79202a20636f730a097d29293b0a7d0a0a66756e6374696f6e2067657448697428612c206229207b0a09636f6e73742070656e203d2073617428612c2062293b0a09696620282170656e207c7c2070656e2e6f7665726c6170203c20302e312972657475726e2066616c73653b0a0972657475726e2070656e3b0a7d0a2f2f2044657465726d696e65207468652074797065206f6620636f6c6c6973696f6e7320746f20646574656374202868616e6473202f20666565742920646570656e64696e67206f6e207468652061747461636b0a636f6e737420616374696f6e73203d207b0a0970756e63683a5b2270756e6368222c226869676850756e6368222c2277616c6b50756e6368222c2277616c6b4869676850756e6368222c2263726f75636850756e6368222c226a756d7050756e6368222c226a756d704c6f7750756e6368222c226a756d704869676850756e6368225d2c0a096b69636b3a5b226b69636b222c22686967684b69636b222c2263726f7563684b69636b222c226a756d704b69636b222c226a756d704c6f774b69636b222c226a756d70486967684b69636b225d0a7d3b0a636f6e737420616374696f6e54797065203d207b7d3b0a666f722028636f6e7374207479706520696e20616374696f6e7329207b0a09666f722028636f6e7374206e616d65206f6620616374696f6e735b747970655d29207b0a0909616374696f6e547970655b6e616d655d203d20747970653b2020202f2f202270756e636822206f7220226b69636b220a097d0a7d0a0a0a66756e6374696f6e20676574416374697665486974506f6c797328656e7469747929207b0a09636f6e73742074797065203d20616374696f6e547970655b656e746974792e616e696d2e73746174655d3b0a09696620282174797065292072657475726e206e756c6c3b0a0a096966202874797065203d3d3d202270756e63682229207b0a090972657475726e205b0a090909676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c292c0a090909676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d52290a09095d3b0a097d0a0a096966202874797065203d3d3d20226b69636b2229207b0a090972657475726e205b0a090909676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c292c0a090909676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c656752290a09095d3b0a097d0a0a0972657475726e206e756c6c3b0a7d0a0a66756e6374696f6e2067657448757274506f6c797328656e7469747929207b0a0972657475726e207b0a0909686561643a2020676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e68656164292c0a0909746f72736f3a20676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f290a097d3b0a7d0a0a0a0a66756e6374696f6e207265736f6c766541747461636b2861747461636b65722c2074617267657429207b0a09636f6e737420686974506f6c7973203d20676574416374697665486974506f6c79732861747461636b6572293b0a096966202821686974506f6c7973292072657475726e3b0a0a09636f6e73742068757274203d2067657448757274506f6c797328746172676574293b0a0a09666f722028636f6e737420706f6c79206f6620686974506f6c797329207b0a0a0909636f6e73742068697448656164203d2067657448697428706f6c792c20687572742e68656164293b0a0909696620286869744865616429207b0a090909696628217461726765742e707265764869742973667848697428293b0a0909097461726765742e70726576486974203d20747275653b0a0909096170706c794869745265616374696f6e287461726765742c202268656164222c2068697448656164293b0a09090972657475726e3b202f2f20686561642074616b6573207072696f726974790a09097d0a0a0909636f6e737420686974546f72736f203d2067657448697428706f6c792c20687572742e746f72736f293b0a090969662028686974546f72736f29207b0a090909696628217461726765742e707265764869742973667848697428293b0a0909097461726765742e70726576486974203d20747275653b0a0909096170706c794869745265616374696f6e287461726765742c2022746f72736f222c20686974546f72736f293b0a09090972657475726e3b0a09097d0a097d0a7d0a0a0a66756e6374696f6e20706c61796572456e656d79436f6c6c6973696f6e2829207b0a09636f6e73742070203d2067616d652e706c617965723b0a092f2f204966206e6f2061747461636b206973206163746976652c20736b69702065766572797468696e670a202020200a0969662028697341747461636b416374697665287029297b0a0909666f722028636f6e73742065206f662067616d652e656e656d69657329207b0909090a0909097265736f6c766541747461636b28702c65293b0a09097d0a097d0a09666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a09096966202821697341747461636b4163746976652865292920636f6e74696e75653b090a09097265736f6c766541747461636b28652c70293b0a097d0a7d0a0a2f2f53415420636f6c6c73696f6e20706f6c7920767320706f6c790a66756e6374696f6e2073617428706f6c79412c20706f6c794229207b0a096966202821706f6c7941207c7c20706f6c79412e6c656e677468203c2033292072657475726e206e756c6c3b0a096966202821706f6c7942207c7c20706f6c79422e6c656e677468203c2033292072657475726e206e756c6c3b0a0a096c6574206f7665726c6170203d20496e66696e6974793b0a096c657420736d616c6c65737441786973203d206e756c6c3b0a0a09666f722028636f6e737420706f6c79206f66205b706f6c79412c20706f6c79425d29207b0a0909666f7220286c65742069203d20303b2069203c20706f6c792e6c656e6774683b20692b2b29207b0a090909636f6e7374207031203d20706f6c795b695d3b0a090909636f6e7374207032203d20706f6c795b2869202b203129202520706f6c792e6c656e6774685d3b0a0a090909636f6e7374206478203d2070322e78202d2070312e783b0a090909636f6e7374206479203d2070322e79202d2070312e793b0a0a090909696620286478203d3d3d2030202626206479203d3d3d20302920636f6e74696e75653b0a0a090909636f6e7374206e78203d2064793b0a090909636f6e7374206e79203d202d64783b0a0a0909096c6574205b6d696e412c206d6178415d203d2070726f6a65637428706f6c79412c206e782c206e79293b0a0909096c6574205b6d696e422c206d6178425d203d2070726f6a65637428706f6c79422c206e782c206e79293b0a0a090909696620286d617841203c206d696e42207c7c206d617842203c206d696e41292072657475726e206e756c6c3b0a0a090909636f6e7374206f203d204d6174682e6d696e286d6178412c206d61784229202d204d6174682e6d6178286d696e412c206d696e42293b0a090909696620286f203c206f7665726c617029207b0a090909096f7665726c6170203d206f3b0a09090909736d616c6c65737441786973203d207b20783a206e782c20793a206e79207d3b0a0909097d0a09097d0a097d0a0a096966202821736d616c6c65737441786973292072657475726e206e756c6c3b0a0a09636f6e7374206c656e203d204d6174682e6879706f7428736d616c6c657374417869732e782c20736d616c6c657374417869732e79293b0a09696620286c656e203d3d3d2030292072657475726e206e756c6c3b0a0a0972657475726e207b0a09096f7665726c61702c0a09096e783a20736d616c6c657374417869732e78202f206c656e2c0a09096e793a20736d616c6c657374417869732e79202f206c656e0a097d3b0a7d0a0a66756e6374696f6e2070726f6a65637428706f6c792c206e782c206e7929207b0a096c6574206d696e203d20496e66696e6974792c206d6178203d202d496e66696e6974793b0a09666f722028636f6e73742070206f6620706f6c7929207b0a0909636f6e737420646f74203d20702e78202a206e78202b20702e79202a206e793b0a090969662028646f74203c206d696e29206d696e203d20646f743b0a090969662028646f74203e206d617829206d6178203d20646f743b0a097d0a0972657475726e205b6d696e2c206d61785d3b0a7d0a0a66756e6374696f6e20697341747461636b41637469766528656e7469747929207b0a09636f6e7374207374617465203d20656e746974792e616e696d2e73746174653b0a09636f6e7374206672616d65203d20656e746974792e616e696d2e6672616d653b0a0a09696620282161747461636b4672616d65735b73746174655d292072657475726e2066616c73653b0a0a09636f6e7374207b2073746172742c20656e64207d203d2061747461636b4672616d65735b73746174655d3b0a0972657475726e206672616d65203e3d207374617274202626206672616d65203c3d20656e643b0a7d0a0a0a66756e6374696f6e206170706c794869745265616374696f6e287461726765742c20686974547970652c20726573756c7429207b0a096966287461726765742e7479706520213d3d2022626f737322297b0a09097461726765742e7374756e203d202e323b0a09097461726765742e61747461636b436f6f6c646f776e203d20313b0a097d656c73657b0a09097461726765742e61747461636b436f6f6c646f776e203d202e323b0a097d0a0a096966202868697454797065203d3d3d2022686561642229207b0a09090a09096966287461726765742e696420213d3d2022706c61796572222967616d652e73636f7265202b3d204d6174682e6365696c28726573756c742e6f7665726c6170202a202e3135293b0a09097461726765742e686974506f696e747320202d3d204d6174682e6365696c28726573756c742e6f7665726c6170202a202e30373530293b0a09090a09097461726765742e7678203d202d28726573756c742e6e78202a202e33293b0a09097461726765742e7679203d202d28726573756c742e6e79202a202e35293b0a09097461726765742e736b656c65746f6e2e746f72736f2e6368696c6472656e2e686561642e726f746174696f6e202d3d20302e333b0a09097461726765742e686561645265636f696c203d20302e31353b0a09092f2f686174730a09096966287461726765742e686173486174297b0a090909737061776e48617428746172676574290a09097d0a097d0a0a096966202868697454797065203d3d3d2022746f72736f2229207b090a09097461726765742e7678203d202d28726573756c742e6e78202a202e33293b0a09097461726765742e7679203d202d28726573756c742e6e79202a202e35293b0a09097461726765742e736b656c65746f6e2e746f72736f2e726f746174696f6e202d3d20302e333b0a09097461726765742e736b656c65746f6e2e746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e202b3d20302e333b0a09097461726765742e736b656c65746f6e2e746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e202b3d20302e333b0a09096966287461726765742e696420213d3d2022706c61796572222967616d652e73636f7265202b3d204d6174682e6365696c28726573756c742e6f7665726c6170202a202e31293b0a09097461726765742e686974506f696e7473202d3d204d6174682e6365696c28726573756c742e6f7665726c6170202a202e3035293b0a097d0a0a096966287461726765742e696420213d3d2022706c61796572222967616d652e73636f7265202b3d2031303b0a0a7d0a09090a66756e6374696f6e207570646174655265636f696c28656e746974792c20647429207b0a0969662028656e746974792e686561645265636f696c203e203029207b0a0909656e746974792e686561645265636f696c202d3d2064743b0a20202020202020202f2f20536d6f6f74686c792072657475726e20746f206e65757472616c20726f746174696f6e0a2020202020202020636f6e73742068656164203d20656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e686561643b0a2020202020202020686561642e726f746174696f6e203d20686561642e726f746174696f6e202a20302e313b202f2f2064616d70656e20746f7761726420300a097d0a7d0a0a0a0a0a2a2f
dURL 7570646174652e6a73
descrHdr 5570646174652066696c65
dislikes 0
docType 54454c412d4a532d31
docVersion 312e302e30
fileCheckC 3331333139373436373864643630306565613764363739313435383262616437313234656437376438396439646134333131376539383834343036643962
fileCheckS 376238343531396563636531306134636366353435646364633364383662366566303962633763366633323164313835393866663236353637376134346232
hash 64616231383835353931646661353365343965366236363236366566666236383563336365383532306633383732633734653833663566613438646366366464
iconURLHdr
likes 0
nameHdr 7570646174652e6a73
owner 6465726f317179347966376335373777717a767a7134347833306c7967686135776a7a377772687736646e76356e337071346634643761716c75717133306d37616b
subDir
SCID uint64 variables
key value
built BLID : ad42e03894759006eee77970cf66401b2d1f7cdc426bb7c59e2a6731a8ea5316
Tx RootHash: d965699b73276cf970bb87ca84ba01eb5e6a1cd5b93480fc9ad8fc080db27fa4 built height : 7241620
Timestamp: 1782424348187 Timestamp [UTC]: 2026-06-25 23:52:28 Age [y:d:h:m:s]: 1:16:15.959
Block: 7241621 Fee: 0.26781 Tx size: 19.026 kB
Tx version: 1 No of confirmations: 248 Signature type: DERO_HOMOMORPHIC
Extra:
DERO : 2 inputs/outputs (RING size) Fees 0.26781 Deposited to SC 0.00000
Sender : dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
address
dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
dero1qykyta6ntpd27nl0yq4xtzaf4ls6p5e9pqu0k2x4x3pqq5xavjsdxqgny8270
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", "update.js")
31 STORE("descrHdr", "Update file")
32 STORE("iconURLHdr", "")
33 STORE("dURL", "update.js")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "")
36 STORE("fileCheckC", "3131974678dd600eea7d67914582bad7124ed77d89d9da43117e9884406d9b")
37 STORE("fileCheckS", "7b84519ecce10a4ccf545dcdc3d86b6ef09bc7c6f321d18598ff265677a44b2")
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

/*window.addEventListener("load", resizeSVG);
window.addEventListener("resize", resizeSVG);
function resizeSVG() {
	sw = window.innerWidth;
	sh = window.innerHeight;
	updateViewBox();
}

function updateViewBox() {

	if (keys["="]) zoom *= 0.98;
	if (keys["-"]) zoom *= 1.02;

	const viewW = sw * zoom;
	const viewH = sh * zoom;

	const camX = camCenter.x - viewW / 2;
	const camY = camCenter.y - viewH / 2;

	camLeft   = camCenter.x - (sw * zoom) / 2;
	camTop    = camCenter.y - (sh * zoom) / 2;
	camRight  = camCenter.x + (sw * zoom) / 2;
	camBottom = camCenter.y + (sh * zoom) / 2;

	svg.setAttribute("viewBox", `${camX} ${camY} ${viewW} ${viewH}`);
}

function updateCamera(dt) {
	// camera follows player
	camCenter.x = game.player.x;
	camCenter.y = game.player.y;
}


//----------
// Get Input

window.addEventListener("wheel", e => {
	if (e.deltaY < 0) zoom *= 0.9; // zoom in
	else zoom *= 1.1; // zoom out

	zoom = Math.max(0.2, Math.min(zoom, 5)); // clamp
});

window.addEventListener("keydown", e => {	
	keys[e.key] = true;	
});
window.addEventListener("keyup", e => {
	keys[e.key] = false;
});

let prevStartPressed = false;
function gatherInput(dt) {
	const p = game.player;

	// --- KEYBOARD ---
	let move = (keys["a"] ? -1 : 0) + (keys["d"] ? 1 : 0);
	let vert = (keys["w"] ? 1 : 0) + (keys["s"] ? -1 : 0);

	let wantPunch = keys["l"];
	let wantKick  = keys[";"];
	let wantJump  = keys[" "];

	let startPressed = keys["Escape"]

	// --- GAMEPAD ---
	const gp = navigator.getGamepads()[0];	
	if (gp) {
		// D-pad
		if (gp.buttons[14].pressed) move = -1; // left
		if (gp.buttons[15].pressed) move =  1; // right

		if (gp.buttons[12].pressed) vert =  1; // up
		if (gp.buttons[13].pressed) vert = -1; // down

		// Face buttons
		if (gp.buttons[0].pressed) wantJump  = true; // A = jump
		if (gp.buttons[2].pressed) wantPunch = true; // X = punch
		if (gp.buttons[1].pressed) wantKick  = true; // B = kick
		
		startPressed = gp.buttons[9].pressed || startPressed;
	}
	// --- MENU ---
	menu(startPressed,move);
	prevStartPressed = startPressed;

	// --- APPLY TO PLAYER ---
	p.moveInput = move;
	p.verticalInput = vert;

	p.wantPunch = wantPunch;
	p.wantKick  = wantKick;
	p.wantJump = wantJump;
	if (p.wantJump) jump();

}


function jump(p = game.player) {    
	if (p.onGround && p.anim.state !=="kick") {
		p.vy = -game.jumpStrength;
		p.onGround = false;
		p.inAir = true;
	}
}

function applyIntent(entity,dt) {
	const p = entity;
	if (p.stun > 0) {
		p.stun -= dt/1000;
		return;
	}
	if ((!p.inAir && p.wantKick)||
		(!p.inAir && entity.verticalInput < 0)){ 
		if (p.moveInput !== 0) {
			if(p.moveInput > 0 ){
				p.facing = 1;
			}else{
				p.facing = -1;
			}
			p.moveInput = 0;
		}	
	}	 

	p.vx = p.moveInput * p.speed;	
	if (p.moveInput !== 0) {
		if(p.moveInput > 0 ){
			p.facing = 1;
		}else{
			p.facing = -1;
		}
	}

}


function updateMovementState(entity) {
	if(entity.moveState === "dying")return;

	if (entity.inAir && entity.vy < -0.2) entity.moveState = "jump";
	else if (entity.inAir && entity.vy > 0.2) entity.moveState = "fall";
	else if (entity.moveInput !== 0) entity.moveState = "walk";
	else if (entity.verticalInput < 0 && !entity.inAir) entity.moveState = "crouch";
	else entity.moveState = "idle";

	if (entity.moveState === "crouch") {
		entity.height = 60;
		entity.skeletonOffsetY = 12
	} else {
		entity.height = 100;
		entity.skeletonOffsetY = 0;
	}
}


function updateActionState(entity) {
	entity.actionState = "none";

	if (entity === game.player) {
		if (!entity.inAir) {
			if (entity.verticalInput < 0) {
				if (entity.wantPunch) return entity.actionState = "crouchPunch";
				if (entity.wantKick)  return entity.actionState = "crouchKick";				
				return entity.actionState = "crouch";
			}else if(entity.verticalInput > 0){
				if (entity.wantPunch) return entity.actionState = (entity.moveState === "walk") ? "walkHighPunch" : "highPunch";
				if (entity.wantKick) return entity.actionState = "highKick"; 	
			}else{
				if (entity.wantPunch)return entity.actionState = (entity.moveState === "walk") ? "walkPunch" : "punch";
				if (entity.wantKick)return entity.actionState = "kick";
			}
		} else {
			
			if (entity.verticalInput < 0) {
				if (entity.wantPunch) return entity.actionState = "jumpLowPunch";
				if (entity.wantKick)  return entity.actionState = "jumpLowKick";				
			}else if(entity.verticalInput > 0){
				if (entity.wantPunch) return entity.actionState = "jumpHighPunch";
				if (entity.wantKick) return entity.actionState = "jumpHighKick"; 	
			}else{
				if (entity.wantPunch) return entity.actionState = "jumpPunch";
				if (entity.wantKick)  return entity.actionState = "jumpKick";
			}			
		}
	}else if(entity.type !== "boss" ){
		if (entity.verticalInput == 1) {
			if (entity.wantPunch) {entity.actionState = "highPunch"}
			if (entity.wantKick) {entity.actionState = "highKick"}
		}else{
			if (entity.wantPunch) {entity.actionState = "punch"}
			if (entity.wantKick) {entity.actionState = "kick"}
		}	
	}else{
		//boss
		if (entity.verticalInput == 1) {
			if (entity.wantPunch) {entity.actionState = (entity.moveState === "walk") ? "walkPunch" : "punch";}
			if (entity.wantKick) {entity.actionState = "highKick"}
		}else{
			if (entity.wantPunch) {entity.actionState = (entity.moveState === "walk") ? "walkHighPunch" : "highPunch";}
			if (entity.wantKick) {entity.actionState = "kick"}
		}	
	}
}



function selectAnimationState(entity) {
	let finalState = entity.moveState;

	if (entity.actionState !== "none") {
		finalState = entity.actionState;
	}

	if (finalState !== entity.anim.state) {
		playAnimation(entity, finalState);
	}
}


function playAnimation(entity, name) {
	const anim = entity.anim;

	if (anim.state === name) return;

	anim.state = name;
	anim.nextPose = poses[name];
}



function updateAnimation(entity, dt) {
	const anim = entity.anim;
	anim.frame++
	// If blending to a new pose
	if (anim.nextPose) {
		anim.currentPose = anim.nextPose;
		anim.nextPose = null;
		anim.frame = 0;	
	}	
	// Walk cycle override
	if (anim.state === "walk" || anim.state === "walkPunch" || anim.state === "walkHighPunch") {
		applyWalk(entity, dt);

		if (anim.state === "walkPunch") {
			applyBlendedPose(entity, poses.walkPunch, poses.walkPunch, 1);
		}else if (anim.state === "walkHighPunch") {
			applyBlendedPose(entity, poses.walkHighPunch, poses.walkHighPunch, 1);
		}
	} else if(anim.state !== "dying"){
		
		// Idle, punch, kick, jump, fall, etc.
		applyBlendedPose(entity, anim.currentPose, anim.currentPose, 1);
	}else{
		applyDeath(entity, dt);
	}
}

function  applyWalk(entity,dt){
	const t = performance.now() * .01; // walk speed multiplier
	const torso = entity.skeleton.torso;
	torso.rotationTarget = Math.sin(t * 0.5) * 0.05;
	// head
	torso.children.head.rotationTarget = 0;
	// legs
	torso.children.upperLegL.rotationTarget =  Math.sin(t) * 0.6;
	torso.children.upperLegR.rotationTarget = -Math.sin(t) * 0.6;

	torso.children.upperLegL.children.lowerLegL.rotationTarget = Math.max(-Math.sin(t + 0.5) * 0.4, -0.1);
	torso.children.upperLegR.children.lowerLegR.rotationTarget = Math.max(Math.sin(t + 0.5) * 0.4, -0.1);

	// arms
	torso.children.upperArmL.rotationTarget = -Math.sin(t) * 0.4;
	torso.children.upperArmR.rotationTarget =  Math.sin(t) * 0.4;

	torso.children.upperArmL.children.lowerArmL.rotationTarget = ( Math.sin(t + 0.3) * 0.1) -1;
	torso.children.upperArmR.children.lowerArmR.rotationTarget = ( Math.sin(t + 0.3) * 0.1) -.5;
}
function  applyDeath(entity,dt){
	const t = performance.now() * .01; // walk speed multiplier
	const torso = entity.skeleton.torso;
	const { segment: seg,  platform: enemyPlatform  } = getPlatformUnder(entity);
	const baseAngle = seg ? getSegmentAngle(seg) : 0; // fallback to flat

	torso.rotationTarget = entity.facing * (baseAngle - Math.PI / 2);

	// legs
	torso.children.upperLegL.rotationTarget =  0;
	torso.children.upperLegR.rotationTarget = 0;

	torso.children.upperLegL.children.lowerLegL.rotationTarget = 0;
	torso.children.upperLegR.children.lowerLegR.rotationTarget = 0;
}


function applyBlendedPose(entity, a, b, t) {
	const torso =  entity.skeleton.torso;

    torso.children.upperArmL.rotationTarget =
        lerp(a.upperArmL, b.upperArmL, t);

    torso.children.upperArmL.children.lowerArmL.rotationTarget =
        lerp(a.lowerArmL, b.lowerArmL, t);

    torso.children.upperArmR.rotationTarget =
        lerp(a.upperArmR, b.upperArmR, t);

    torso.children.upperArmR.children.lowerArmR.rotationTarget =
        lerp(a.lowerArmR, b.lowerArmR, t);
	if(entity.anim.state !== "walkPunch" && entity.anim.state !== "walkHighPunch"){
		torso.rotationTarget = lerp(a.torso, b.torso, t);
		torso.children.head.rotationTarget = lerp(a.head, b.head, t);

		torso.children.upperLegL.rotationTarget =
			lerp(a.upperLegL, b.upperLegL, t);

		torso.children.upperLegL.children.lowerLegL.rotationTarget =
			lerp(a.lowerLegL, b.lowerLegL, t);

		torso.children.upperLegR.rotationTarget =
			lerp(a.upperLegR, b.upperLegR, t);

		torso.children.upperLegR.children.lowerLegR.rotationTarget =
			lerp(a.lowerLegR, b.lowerLegR, t);
	}
}


function lerp(a, b, t) {
	return a + (b - a) * t;
}

function angleDiff( b,a) {
	let d = b - a;
	while (d > Math.PI) d -= Math.PI * 2;
	while (d < -Math.PI) d += Math.PI * 2;
	return d;
}
function smoothAngle(current, target, dt, baseSpeed) {
    let diff = target - current;

    // wrap into (-PI, PI)
    diff = (diff + Math.PI) % (Math.PI * 2) - Math.PI;
	const t = Math.min(Math.abs(diff) / Math.PI, 1);
	const ease = t * t; // quadratic ease-in
	const speed = baseSpeed + ease * 20;

    return current + diff * dt * speed;
}

function smoothBoneRotations(entity,dt) {
	const speed = 20; // how fast bones rotate toward targets
	dt=dt / 1000 // has to be in seconds
	const torso =  entity.skeleton.torso;	

	torso.children.head.rotation = smoothAngle(torso.children.head.rotation, torso.children.head.rotationTarget, dt, speed);
	torso.children.upperArmL.rotation = smoothAngle(torso.children.upperArmL.rotation, torso.children.upperArmL.rotationTarget, dt, speed);
	torso.children.upperArmL.children.lowerArmL.rotation = smoothAngle(torso.children.upperArmL.children.lowerArmL.rotation, torso.children.upperArmL.children.lowerArmL.rotationTarget, dt, speed);
	torso.children.upperArmR.rotation = smoothAngle(torso.children.upperArmR.rotation, torso.children.upperArmR.rotationTarget, dt, speed);
	torso.children.upperArmR.children.lowerArmR.rotation = smoothAngle(torso.children.upperArmR.children.lowerArmR.rotation, torso.children.upperArmR.children.lowerArmR.rotationTarget, dt, speed);
	torso.rotation = smoothAngle(torso.rotation, torso.rotationTarget, dt, speed);

	torso.children.upperLegL.rotation = smoothAngle(torso.children.upperLegL.rotation, torso.children.upperLegL.rotationTarget, dt, speed);
	torso.children.upperLegL.children.lowerLegL.rotation = smoothAngle(torso.children.upperLegL.children.lowerLegL.rotation, torso.children.upperLegL.children.lowerLegL.rotationTarget, dt, speed);
	torso.children.upperLegR.rotation = smoothAngle(torso.children.upperLegR.rotation, torso.children.upperLegR.rotationTarget, dt, speed);
	torso.children.upperLegR.children.lowerLegR.rotation = smoothAngle(torso.children.upperLegR.children.lowerLegR.rotation, torso.children.upperLegR.children.lowerLegR.rotationTarget, dt, speed);
}


//--- Collision

// Get world entity polygon
function getBoneWorldPoly(bone) {
	const cos = Math.cos(bone.worldRot);
	const sin = Math.sin(bone.worldRot);

	return bone.poly.map(p => ({
		x: bone.worldX + p.x * cos - p.y * sin,
		y: bone.worldY + p.x * sin + p.y * cos
	}));
}

function getHit(a, b) {
	const pen = sat(a, b);
	if (!pen || pen.overlap < 0.1)return false;
	return pen;
}
// Determine the type of collisions to detect (hands / feet) depending on the attack
const actions = {
	punch:["punch","highPunch","walkPunch","walkHighPunch","crouchPunch","jumpPunch","jumpLowPunch","jumpHighPunch"],
	kick:["kick","highKick","crouchKick","jumpKick","jumpLowKick","jumpHighKick"]
};
const actionType = {};
for (const type in actions) {
	for (const name of actions[type]) {
		actionType[name] = type;   // "punch" or "kick"
	}
}


function getActiveHitPolys(entity) {
	const type = actionType[entity.anim.state];
	if (!type) return null;

	if (type === "punch") {
		return [
			getBoneWorldPoly(entity.skeleton.torso.children.upperArmL.children.lowerArmL),
			getBoneWorldPoly(entity.skeleton.torso.children.upperArmR.children.lowerArmR)
		];
	}

	if (type === "kick") {
		return [
			getBoneWorldPoly(entity.skeleton.torso.children.upperLegL.children.lowerLegL),
			getBoneWorldPoly(entity.skeleton.torso.children.upperLegR.children.lowerLegR)
		];
	}

	return null;
}

function getHurtPolys(entity) {
	return {
		head:  getBoneWorldPoly(entity.skeleton.torso.children.head),
		torso: getBoneWorldPoly(entity.skeleton.torso)
	};
}



function resolveAttack(attacker, target) {
	const hitPolys = getActiveHitPolys(attacker);
	if (!hitPolys) return;

	const hurt = getHurtPolys(target);

	for (const poly of hitPolys) {

		const hitHead = getHit(poly, hurt.head);
		if (hitHead) {
			if(!target.prevHit)sfxHit();
			target.prevHit = true;
			applyHitReaction(target, "head", hitHead);
			return; // head takes priority
		}

		const hitTorso = getHit(poly, hurt.torso);
		if (hitTorso) {
			if(!target.prevHit)sfxHit();
			target.prevHit = true;
			applyHitReaction(target, "torso", hitTorso);
			return;
		}
	}
}


function playerEnemyCollision() {
	const p = game.player;
	// If no attack is active, skip everything
    
	if (isAttackActive(p)){
		for (const e of game.enemies) {			
			resolveAttack(p,e);
		}
	}
	for (const e of game.enemies) {
		if (!isAttackActive(e)) continue;	
		resolveAttack(e,p);
	}
}

//SAT collsion poly vs poly
function sat(polyA, polyB) {
	if (!polyA || polyA.length < 3) return null;
	if (!polyB || polyB.length < 3) return null;

	let overlap = Infinity;
	let smallestAxis = null;

	for (const poly of [polyA, polyB]) {
		for (let i = 0; i < poly.length; i++) {
			const p1 = poly[i];
			const p2 = poly[(i + 1) % poly.length];

			const dx = p2.x - p1.x;
			const dy = p2.y - p1.y;

			if (dx === 0 && dy === 0) continue;

			const nx = dy;
			const ny = -dx;

			let [minA, maxA] = project(polyA, nx, ny);
			let [minB, maxB] = project(polyB, nx, ny);

			if (maxA < minB || maxB < minA) return null;

			const o = Math.min(maxA, maxB) - Math.max(minA, minB);
			if (o < overlap) {
				overlap = o;
				smallestAxis = { x: nx, y: ny };
			}
		}
	}

	if (!smallestAxis) return null;

	const len = Math.hypot(smallestAxis.x, smallestAxis.y);
	if (len === 0) return null;

	return {
		overlap,
		nx: smallestAxis.x / len,
		ny: smallestAxis.y / len
	};
}

function project(poly, nx, ny) {
	let min = Infinity, max = -Infinity;
	for (const p of poly) {
		const dot = p.x * nx + p.y * ny;
		if (dot < min) min = dot;
		if (dot > max) max = dot;
	}
	return [min, max];
}

function isAttackActive(entity) {
	const state = entity.anim.state;
	const frame = entity.anim.frame;

	if (!attackFrames[state]) return false;

	const { start, end } = attackFrames[state];
	return frame >= start && frame <= end;
}


function applyHitReaction(target, hitType, result) {
	if(target.type !== "boss"){
		target.stun = .2;
		target.attackCooldown = 1;
	}else{
		target.attackCooldown = .2;
	}

	if (hitType === "head") {
		
		if(target.id !== "player")game.score += Math.ceil(result.overlap * .15);
		target.hitPoints  -= Math.ceil(result.overlap * .0750);
		
		target.vx = -(result.nx * .3);
		target.vy = -(result.ny * .5);
		target.skeleton.torso.children.head.rotation -= 0.3;
		target.headRecoil = 0.15;
		//hats
		if(target.hasHat){
			spawnHat(target)
		}
	}

	if (hitType === "torso") {	
		target.vx = -(result.nx * .3);
		target.vy = -(result.ny * .5);
		target.skeleton.torso.rotation -= 0.3;
		target.skeleton.torso.children.upperLegL.rotation += 0.3;
		target.skeleton.torso.children.upperLegR.rotation += 0.3;
		if(target.id !== "player")game.score += Math.ceil(result.overlap * .1);
		target.hitPoints -= Math.ceil(result.overlap * .05);
	}

	if(target.id !== "player")game.score += 10;

}
		
function updateRecoil(entity, dt) {
	if (entity.headRecoil > 0) {
		entity.headRecoil -= dt;
        // Smoothly return to neutral rotation
        const head = entity.skeleton.torso.children.head;
        head.rotation = head.rotation * 0.1; // dampen toward 0
	}
}




*/
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", "update.js") 31 STORE("descrHdr", "Update file") 32 STORE("iconURLHdr", "") 33 STORE("dURL", "update.js") 34 STORE("docType", "TELA-JS-1") 35 STORE("subDir", "") 36 STORE("fileCheckC", "3131974678dd600eea7d67914582bad7124ed77d89d9da43117e9884406d9b") 37 STORE("fileCheckS", "7b84519ecce10a4ccf545dcdc3d86b6ef09bc7c6f321d18598ff265677a44b2") 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 /*window.addEventListener("load", resizeSVG); window.addEventListener("resize", resizeSVG); function resizeSVG() { sw = window.innerWidth; sh = window.innerHeight; updateViewBox(); } function updateViewBox() { if (keys["="]) zoom *= 0.98; if (keys["-"]) zoom *= 1.02; const viewW = sw * zoom; const viewH = sh * zoom; const camX = camCenter.x - viewW / 2; const camY = camCenter.y - viewH / 2; camLeft = camCenter.x - (sw * zoom) / 2; camTop = camCenter.y - (sh * zoom) / 2; camRight = camCenter.x + (sw * zoom) / 2; camBottom = camCenter.y + (sh * zoom) / 2; svg.setAttribute("viewBox", `${camX} ${camY} ${viewW} ${viewH}`); } function updateCamera(dt) { // camera follows player camCenter.x = game.player.x; camCenter.y = game.player.y; } //---------- // Get Input window.addEventListener("wheel", e => { if (e.deltaY < 0) zoom *= 0.9; // zoom in else zoom *= 1.1; // zoom out zoom = Math.max(0.2, Math.min(zoom, 5)); // clamp }); window.addEventListener("keydown", e => { keys[e.key] = true; }); window.addEventListener("keyup", e => { keys[e.key] = false; }); let prevStartPressed = false; function gatherInput(dt) { const p = game.player; // --- KEYBOARD --- let move = (keys["a"] ? -1 : 0) + (keys["d"] ? 1 : 0); let vert = (keys["w"] ? 1 : 0) + (keys["s"] ? -1 : 0); let wantPunch = keys["l"]; let wantKick = keys[";"]; let wantJump = keys[" "]; let startPressed = keys["Escape"] // --- GAMEPAD --- const gp = navigator.getGamepads()[0]; if (gp) { // D-pad if (gp.buttons[14].pressed) move = -1; // left if (gp.buttons[15].pressed) move = 1; // right if (gp.buttons[12].pressed) vert = 1; // up if (gp.buttons[13].pressed) vert = -1; // down // Face buttons if (gp.buttons[0].pressed) wantJump = true; // A = jump if (gp.buttons[2].pressed) wantPunch = true; // X = punch if (gp.buttons[1].pressed) wantKick = true; // B = kick startPressed = gp.buttons[9].pressed || startPressed; } // --- MENU --- menu(startPressed,move); prevStartPressed = startPressed; // --- APPLY TO PLAYER --- p.moveInput = move; p.verticalInput = vert; p.wantPunch = wantPunch; p.wantKick = wantKick; p.wantJump = wantJump; if (p.wantJump) jump(); } function jump(p = game.player) { if (p.onGround && p.anim.state !=="kick") { p.vy = -game.jumpStrength; p.onGround = false; p.inAir = true; } } function applyIntent(entity,dt) { const p = entity; if (p.stun > 0) { p.stun -= dt/1000; return; } if ((!p.inAir && p.wantKick)|| (!p.inAir && entity.verticalInput < 0)){ if (p.moveInput !== 0) { if(p.moveInput > 0 ){ p.facing = 1; }else{ p.facing = -1; } p.moveInput = 0; } } p.vx = p.moveInput * p.speed; if (p.moveInput !== 0) { if(p.moveInput > 0 ){ p.facing = 1; }else{ p.facing = -1; } } } function updateMovementState(entity) { if(entity.moveState === "dying")return; if (entity.inAir && entity.vy < -0.2) entity.moveState = "jump"; else if (entity.inAir && entity.vy > 0.2) entity.moveState = "fall"; else if (entity.moveInput !== 0) entity.moveState = "walk"; else if (entity.verticalInput < 0 && !entity.inAir) entity.moveState = "crouch"; else entity.moveState = "idle"; if (entity.moveState === "crouch") { entity.height = 60; entity.skeletonOffsetY = 12 } else { entity.height = 100; entity.skeletonOffsetY = 0; } } function updateActionState(entity) { entity.actionState = "none"; if (entity === game.player) { if (!entity.inAir) { if (entity.verticalInput < 0) { if (entity.wantPunch) return entity.actionState = "crouchPunch"; if (entity.wantKick) return entity.actionState = "crouchKick"; return entity.actionState = "crouch"; }else if(entity.verticalInput > 0){ if (entity.wantPunch) return entity.actionState = (entity.moveState === "walk") ? "walkHighPunch" : "highPunch"; if (entity.wantKick) return entity.actionState = "highKick"; }else{ if (entity.wantPunch)return entity.actionState = (entity.moveState === "walk") ? "walkPunch" : "punch"; if (entity.wantKick)return entity.actionState = "kick"; } } else { if (entity.verticalInput < 0) { if (entity.wantPunch) return entity.actionState = "jumpLowPunch"; if (entity.wantKick) return entity.actionState = "jumpLowKick"; }else if(entity.verticalInput > 0){ if (entity.wantPunch) return entity.actionState = "jumpHighPunch"; if (entity.wantKick) return entity.actionState = "jumpHighKick"; }else{ if (entity.wantPunch) return entity.actionState = "jumpPunch"; if (entity.wantKick) return entity.actionState = "jumpKick"; } } }else if(entity.type !== "boss" ){ if (entity.verticalInput == 1) { if (entity.wantPunch) {entity.actionState = "highPunch"} if (entity.wantKick) {entity.actionState = "highKick"} }else{ if (entity.wantPunch) {entity.actionState = "punch"} if (entity.wantKick) {entity.actionState = "kick"} } }else{ //boss if (entity.verticalInput == 1) { if (entity.wantPunch) {entity.actionState = (entity.moveState === "walk") ? "walkPunch" : "punch";} if (entity.wantKick) {entity.actionState = "highKick"} }else{ if (entity.wantPunch) {entity.actionState = (entity.moveState === "walk") ? "walkHighPunch" : "highPunch";} if (entity.wantKick) {entity.actionState = "kick"} } } } function selectAnimationState(entity) { let finalState = entity.moveState; if (entity.actionState !== "none") { finalState = entity.actionState; } if (finalState !== entity.anim.state) { playAnimation(entity, finalState); } } function playAnimation(entity, name) { const anim = entity.anim; if (anim.state === name) return; anim.state = name; anim.nextPose = poses[name]; } function updateAnimation(entity, dt) { const anim = entity.anim; anim.frame++ // If blending to a new pose if (anim.nextPose) { anim.currentPose = anim.nextPose; anim.nextPose = null; anim.frame = 0; } // Walk cycle override if (anim.state === "walk" || anim.state === "walkPunch" || anim.state === "walkHighPunch") { applyWalk(entity, dt); if (anim.state === "walkPunch") { applyBlendedPose(entity, poses.walkPunch, poses.walkPunch, 1); }else if (anim.state === "walkHighPunch") { applyBlendedPose(entity, poses.walkHighPunch, poses.walkHighPunch, 1); } } else if(anim.state !== "dying"){ // Idle, punch, kick, jump, fall, etc. applyBlendedPose(entity, anim.currentPose, anim.currentPose, 1); }else{ applyDeath(entity, dt); } } function applyWalk(entity,dt){ const t = performance.now() * .01; // walk speed multiplier const torso = entity.skeleton.torso; torso.rotationTarget = Math.sin(t * 0.5) * 0.05; // head torso.children.head.rotationTarget = 0; // legs torso.children.upperLegL.rotationTarget = Math.sin(t) * 0.6; torso.children.upperLegR.rotationTarget = -Math.sin(t) * 0.6; torso.children.upperLegL.children.lowerLegL.rotationTarget = Math.max(-Math.sin(t + 0.5) * 0.4, -0.1); torso.children.upperLegR.children.lowerLegR.rotationTarget = Math.max(Math.sin(t + 0.5) * 0.4, -0.1); // arms torso.children.upperArmL.rotationTarget = -Math.sin(t) * 0.4; torso.children.upperArmR.rotationTarget = Math.sin(t) * 0.4; torso.children.upperArmL.children.lowerArmL.rotationTarget = ( Math.sin(t + 0.3) * 0.1) -1; torso.children.upperArmR.children.lowerArmR.rotationTarget = ( Math.sin(t + 0.3) * 0.1) -.5; } function applyDeath(entity,dt){ const t = performance.now() * .01; // walk speed multiplier const torso = entity.skeleton.torso; const { segment: seg, platform: enemyPlatform } = getPlatformUnder(entity); const baseAngle = seg ? getSegmentAngle(seg) : 0; // fallback to flat torso.rotationTarget = entity.facing * (baseAngle - Math.PI / 2); // legs torso.children.upperLegL.rotationTarget = 0; torso.children.upperLegR.rotationTarget = 0; torso.children.upperLegL.children.lowerLegL.rotationTarget = 0; torso.children.upperLegR.children.lowerLegR.rotationTarget = 0; } function applyBlendedPose(entity, a, b, t) { const torso = entity.skeleton.torso; torso.children.upperArmL.rotationTarget = lerp(a.upperArmL, b.upperArmL, t); torso.children.upperArmL.children.lowerArmL.rotationTarget = lerp(a.lowerArmL, b.lowerArmL, t); torso.children.upperArmR.rotationTarget = lerp(a.upperArmR, b.upperArmR, t); torso.children.upperArmR.children.lowerArmR.rotationTarget = lerp(a.lowerArmR, b.lowerArmR, t); if(entity.anim.state !== "walkPunch" && entity.anim.state !== "walkHighPunch"){ torso.rotationTarget = lerp(a.torso, b.torso, t); torso.children.head.rotationTarget = lerp(a.head, b.head, t); torso.children.upperLegL.rotationTarget = lerp(a.upperLegL, b.upperLegL, t); torso.children.upperLegL.children.lowerLegL.rotationTarget = lerp(a.lowerLegL, b.lowerLegL, t); torso.children.upperLegR.rotationTarget = lerp(a.upperLegR, b.upperLegR, t); torso.children.upperLegR.children.lowerLegR.rotationTarget = lerp(a.lowerLegR, b.lowerLegR, t); } } function lerp(a, b, t) { return a + (b - a) * t; } function angleDiff( b,a) { let d = b - a; while (d > Math.PI) d -= Math.PI * 2; while (d < -Math.PI) d += Math.PI * 2; return d; } function smoothAngle(current, target, dt, baseSpeed) { let diff = target - current; // wrap into (-PI, PI) diff = (diff + Math.PI) % (Math.PI * 2) - Math.PI; const t = Math.min(Math.abs(diff) / Math.PI, 1); const ease = t * t; // quadratic ease-in const speed = baseSpeed + ease * 20; return current + diff * dt * speed; } function smoothBoneRotations(entity,dt) { const speed = 20; // how fast bones rotate toward targets dt=dt / 1000 // has to be in seconds const torso = entity.skeleton.torso; torso.children.head.rotation = smoothAngle(torso.children.head.rotation, torso.children.head.rotationTarget, dt, speed); torso.children.upperArmL.rotation = smoothAngle(torso.children.upperArmL.rotation, torso.children.upperArmL.rotationTarget, dt, speed); torso.children.upperArmL.children.lowerArmL.rotation = smoothAngle(torso.children.upperArmL.children.lowerArmL.rotation, torso.children.upperArmL.children.lowerArmL.rotationTarget, dt, speed); torso.children.upperArmR.rotation = smoothAngle(torso.children.upperArmR.rotation, torso.children.upperArmR.rotationTarget, dt, speed); torso.children.upperArmR.children.lowerArmR.rotation = smoothAngle(torso.children.upperArmR.children.lowerArmR.rotation, torso.children.upperArmR.children.lowerArmR.rotationTarget, dt, speed); torso.rotation = smoothAngle(torso.rotation, torso.rotationTarget, dt, speed); torso.children.upperLegL.rotation = smoothAngle(torso.children.upperLegL.rotation, torso.children.upperLegL.rotationTarget, dt, speed); torso.children.upperLegL.children.lowerLegL.rotation = smoothAngle(torso.children.upperLegL.children.lowerLegL.rotation, torso.children.upperLegL.children.lowerLegL.rotationTarget, dt, speed); torso.children.upperLegR.rotation = smoothAngle(torso.children.upperLegR.rotation, torso.children.upperLegR.rotationTarget, dt, speed); torso.children.upperLegR.children.lowerLegR.rotation = smoothAngle(torso.children.upperLegR.children.lowerLegR.rotation, torso.children.upperLegR.children.lowerLegR.rotationTarget, dt, speed); } //--- Collision // Get world entity polygon function getBoneWorldPoly(bone) { const cos = Math.cos(bone.worldRot); const sin = Math.sin(bone.worldRot); return bone.poly.map(p => ({ x: bone.worldX + p.x * cos - p.y * sin, y: bone.worldY + p.x * sin + p.y * cos })); } function getHit(a, b) { const pen = sat(a, b); if (!pen || pen.overlap < 0.1)return false; return pen; } // Determine the type of collisions to detect (hands / feet) depending on the attack const actions = { punch:["punch","highPunch","walkPunch","walkHighPunch","crouchPunch","jumpPunch","jumpLowPunch","jumpHighPunch"], kick:["kick","highKick","crouchKick","jumpKick","jumpLowKick","jumpHighKick"] }; const actionType = {}; for (const type in actions) { for (const name of actions[type]) { actionType[name] = type; // "punch" or "kick" } } function getActiveHitPolys(entity) { const type = actionType[entity.anim.state]; if (!type) return null; if (type === "punch") { return [ getBoneWorldPoly(entity.skeleton.torso.children.upperArmL.children.lowerArmL), getBoneWorldPoly(entity.skeleton.torso.children.upperArmR.children.lowerArmR) ]; } if (type === "kick") { return [ getBoneWorldPoly(entity.skeleton.torso.children.upperLegL.children.lowerLegL), getBoneWorldPoly(entity.skeleton.torso.children.upperLegR.children.lowerLegR) ]; } return null; } function getHurtPolys(entity) { return { head: getBoneWorldPoly(entity.skeleton.torso.children.head), torso: getBoneWorldPoly(entity.skeleton.torso) }; } function resolveAttack(attacker, target) { const hitPolys = getActiveHitPolys(attacker); if (!hitPolys) return; const hurt = getHurtPolys(target); for (const poly of hitPolys) { const hitHead = getHit(poly, hurt.head); if (hitHead) { if(!target.prevHit)sfxHit(); target.prevHit = true; applyHitReaction(target, "head", hitHead); return; // head takes priority } const hitTorso = getHit(poly, hurt.torso); if (hitTorso) { if(!target.prevHit)sfxHit(); target.prevHit = true; applyHitReaction(target, "torso", hitTorso); return; } } } function playerEnemyCollision() { const p = game.player; // If no attack is active, skip everything if (isAttackActive(p)){ for (const e of game.enemies) { resolveAttack(p,e); } } for (const e of game.enemies) { if (!isAttackActive(e)) continue; resolveAttack(e,p); } } //SAT collsion poly vs poly function sat(polyA, polyB) { if (!polyA || polyA.length < 3) return null; if (!polyB || polyB.length < 3) return null; let overlap = Infinity; let smallestAxis = null; for (const poly of [polyA, polyB]) { for (let i = 0; i < poly.length; i++) { const p1 = poly[i]; const p2 = poly[(i + 1) % poly.length]; const dx = p2.x - p1.x; const dy = p2.y - p1.y; if (dx === 0 && dy === 0) continue; const nx = dy; const ny = -dx; let [minA, maxA] = project(polyA, nx, ny); let [minB, maxB] = project(polyB, nx, ny); if (maxA < minB || maxB < minA) return null; const o = Math.min(maxA, maxB) - Math.max(minA, minB); if (o < overlap) { overlap = o; smallestAxis = { x: nx, y: ny }; } } } if (!smallestAxis) return null; const len = Math.hypot(smallestAxis.x, smallestAxis.y); if (len === 0) return null; return { overlap, nx: smallestAxis.x / len, ny: smallestAxis.y / len }; } function project(poly, nx, ny) { let min = Infinity, max = -Infinity; for (const p of poly) { const dot = p.x * nx + p.y * ny; if (dot < min) min = dot; if (dot > max) max = dot; } return [min, max]; } function isAttackActive(entity) { const state = entity.anim.state; const frame = entity.anim.frame; if (!attackFrames[state]) return false; const { start, end } = attackFrames[state]; return frame >= start && frame <= end; } function applyHitReaction(target, hitType, result) { if(target.type !== "boss"){ target.stun = .2; target.attackCooldown = 1; }else{ target.attackCooldown = .2; } if (hitType === "head") { if(target.id !== "player")game.score += Math.ceil(result.overlap * .15); target.hitPoints -= Math.ceil(result.overlap * .0750); target.vx = -(result.nx * .3); target.vy = -(result.ny * .5); target.skeleton.torso.children.head.rotation -= 0.3; target.headRecoil = 0.15; //hats if(target.hasHat){ spawnHat(target) } } if (hitType === "torso") { target.vx = -(result.nx * .3); target.vy = -(result.ny * .5); target.skeleton.torso.rotation -= 0.3; target.skeleton.torso.children.upperLegL.rotation += 0.3; target.skeleton.torso.children.upperLegR.rotation += 0.3; if(target.id !== "player")game.score += Math.ceil(result.overlap * .1); target.hitPoints -= Math.ceil(result.overlap * .05); } if(target.id !== "player")game.score += 10; } function updateRecoil(entity, dt) { if (entity.headRecoil > 0) { entity.headRecoil -= dt; // Smoothly return to neutral rotation const head = entity.skeleton.torso.children.head; head.rotation = head.rotation * 0.1; // dampen toward 0 } } */']


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
010000050094ffb903ad42e03894759006eee77970cf66401b2d1f7cdc426bb7c59e2a6731a8ea5316010000000000000000000000000000000000000000000000000000000000000000000121266506c0efd593de4376524af02e1690858c2c45c47f352a264233fc12eb4c014cde4dde471f979d3c66c46285aefa62a7fc09a97e816cb55d99fb5efeb1c5d360cf0981851964e52615ecbf07236dc7c6b78f34159e4566fca13f8a84850cb328211ce3493db695e19c24c06a81cae26fa6c17950e54181f3fffd10604ac59bd10cef457b844bd578bebffdbdad28a801049dd101272f089fc69a97515e045fbd0b14bd461a3f674eed11b326f4eef33fc16e2003010652cc4b635d6e4e1ada2c12b47818cae108106d417d50b7742711b5bc7bf2b6da268c2cd2d2f35401081bd1180e6e443095ca4239ffd0e215062ccce7a98139fa166f2ecbd8abfbf601d965699b73276cf970bb87ca84ba01eb5e6a1cd5b93480fc9ad8fc080db27fa4ee8a01a26853435f434f4445537945552f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c20227570646174652e6a7322290a33312053544f524528226465736372486472222c20225570646174652066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c20227570646174652e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c2022333133313937343637386464363030656561376436373931343538326261643731323465643737643839643964613433313137653938383434303664396222290a33372053544f5245282266696c65436865636b53222c202237623834353139656363653130613463636635343564636463336438366236656630396263376336663332316431383539386666323635363737613434623222290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a77696e646f772e6164644576656e744c697374656e657228226c6f6164222c20726573697a65535647293b0a77696e646f772e6164644576656e744c697374656e65722822726573697a65222c20726573697a65535647293b0a66756e6374696f6e20726573697a655356472829207b0a097377203d2077696e646f772e696e6e657257696474683b0a097368203d2077696e646f772e696e6e65724865696768743b0a0975706461746556696577426f7828293b0a7d0a0a66756e6374696f6e2075706461746556696577426f782829207b0a0a09696620286b6579735b223d225d29207a6f6f6d202a3d20302e39383b0a09696620286b6579735b222d225d29207a6f6f6d202a3d20312e30323b0a0a09636f6e7374207669657757203d207377202a207a6f6f6d3b0a09636f6e7374207669657748203d207368202a207a6f6f6d3b0a0a09636f6e73742063616d58203d2063616d43656e7465722e78202d207669657757202f20323b0a09636f6e73742063616d59203d2063616d43656e7465722e79202d207669657748202f20323b0a0a0963616d4c6566742020203d2063616d43656e7465722e78202d20287377202a207a6f6f6d29202f20323b0a0963616d546f70202020203d2063616d43656e7465722e79202d20287368202a207a6f6f6d29202f20323b0a0963616d526967687420203d2063616d43656e7465722e78202b20287377202a207a6f6f6d29202f20323b0a0963616d426f74746f6d203d2063616d43656e7465722e79202b20287368202a207a6f6f6d29202f20323b0a0a097376672e736574417474726962757465282276696577426f78222c2060247b63616d587d20247b63616d597d20247b76696577577d20247b76696577487d60293b0a7d0a0a66756e6374696f6e2075706461746543616d65726128647429207b0a092f2f2063616d65726120666f6c6c6f777320706c617965720a0963616d43656e7465722e78203d2067616d652e706c617965722e783b0a0963616d43656e7465722e79203d2067616d652e706c617965722e793b0a7d0a0a0a2f2f2d2d2d2d2d2d2d2d2d2d0a2f2f2047657420496e7075740a0a77696e646f772e6164644576656e744c697374656e65722822776865656c222c2065203d3e207b0a0969662028652e64656c746159203c203029207a6f6f6d202a3d20302e393b202f2f207a6f6f6d20696e0a09656c7365207a6f6f6d202a3d20312e313b202f2f207a6f6f6d206f75740a0a097a6f6f6d203d204d6174682e6d617828302e322c204d6174682e6d696e287a6f6f6d2c203529293b202f2f20636c616d700a7d293b0a0a77696e646f772e6164644576656e744c697374656e657228226b6579646f776e222c2065203d3e207b090a096b6579735b652e6b65795d203d20747275653b090a7d293b0a77696e646f772e6164644576656e744c697374656e657228226b65797570222c2065203d3e207b0a096b6579735b652e6b65795d203d2066616c73653b0a7d293b0a0a6c65742070726576537461727450726573736564203d2066616c73653b0a66756e6374696f6e20676174686572496e70757428647429207b0a09636f6e73742070203d2067616d652e706c617965723b0a0a092f2f202d2d2d204b4559424f415244202d2d2d0a096c6574206d6f7665203d20286b6579735b2261225d203f202d31203a203029202b20286b6579735b2264225d203f2031203a2030293b0a096c65742076657274203d20286b6579735b2277225d203f2031203a203029202b20286b6579735b2273225d203f202d31203a2030293b0a0a096c65742077616e7450756e6368203d206b6579735b226c225d3b0a096c65742077616e744b69636b20203d206b6579735b223b225d3b0a096c65742077616e744a756d7020203d206b6579735b2220225d3b0a0a096c657420737461727450726573736564203d206b6579735b22457363617065225d0a0a092f2f202d2d2d2047414d45504144202d2d2d0a09636f6e7374206770203d206e6176696761746f722e67657447616d657061647328295b305d3b090a0969662028677029207b0a09092f2f20442d7061640a09096966202867702e627574746f6e735b31345d2e7072657373656429206d6f7665203d202d313b202f2f206c6566740a09096966202867702e627574746f6e735b31355d2e7072657373656429206d6f7665203d2020313b202f2f2072696768740a0a09096966202867702e627574746f6e735b31325d2e70726573736564292076657274203d2020313b202f2f2075700a09096966202867702e627574746f6e735b31335d2e70726573736564292076657274203d202d313b202f2f20646f776e0a0a09092f2f204661636520627574746f6e730a09096966202867702e627574746f6e735b305d2e70726573736564292077616e744a756d7020203d20747275653b202f2f2041203d206a756d700a09096966202867702e627574746f6e735b325d2e70726573736564292077616e7450756e6368203d20747275653b202f2f2058203d2070756e63680a09096966202867702e627574746f6e735b315d2e70726573736564292077616e744b69636b20203d20747275653b202f2f2042203d206b69636b0a09090a0909737461727450726573736564203d2067702e627574746f6e735b395d2e70726573736564207c7c207374617274507265737365643b0a097d0a092f2f202d2d2d204d454e55202d2d2d0a096d656e75287374617274507265737365642c6d6f7665293b0a0970726576537461727450726573736564203d207374617274507265737365643b0a0a092f2f202d2d2d204150504c5920544f20504c41594552202d2d2d0a09702e6d6f7665496e707574203d206d6f76653b0a09702e766572746963616c496e707574203d20766572743b0a0a09702e77616e7450756e6368203d2077616e7450756e63683b0a09702e77616e744b69636b20203d2077616e744b69636b3b0a09702e77616e744a756d70203d2077616e744a756d703b0a0969662028702e77616e744a756d7029206a756d7028293b0a0a7d0a0a0a66756e6374696f6e206a756d702870203d2067616d652e706c6179657229207b202020200a0969662028702e6f6e47726f756e6420262620702e616e696d2e737461746520213d3d226b69636b2229207b0a0909702e7679203d202d67616d652e6a756d70537472656e6774683b0a0909702e6f6e47726f756e64203d2066616c73653b0a0909702e696e416972203d20747275653b0a097d0a7d0a0a66756e6374696f6e206170706c79496e74656e7428656e746974792c647429207b0a09636f6e73742070203d20656e746974793b0a0969662028702e7374756e203e203029207b0a0909702e7374756e202d3d2064742f313030303b0a090972657475726e3b0a097d0a09696620282821702e696e41697220262620702e77616e744b69636b297c7c0a09092821702e696e41697220262620656e746974792e766572746963616c496e707574203c203029297b200a090969662028702e6d6f7665496e70757420213d3d203029207b0a090909696628702e6d6f7665496e707574203e203020297b0a09090909702e666163696e67203d20313b0a0909097d656c73657b0a09090909702e666163696e67203d202d313b0a0909097d0a090909702e6d6f7665496e707574203d20303b0a09097d090a097d09200a0a09702e7678203d20702e6d6f7665496e707574202a20702e73706565643b090a0969662028702e6d6f7665496e70757420213d3d203029207b0a0909696628702e6d6f7665496e707574203e203020297b0a090909702e666163696e67203d20313b0a09097d656c73657b0a090909702e666163696e67203d202d313b0a09097d0a097d0a0a7d0a0a0a66756e6374696f6e207570646174654d6f76656d656e74537461746528656e7469747929207b0a09696628656e746974792e6d6f76655374617465203d3d3d20226479696e67222972657475726e3b0a0a0969662028656e746974792e696e41697220262620656e746974792e7679203c202d302e322920656e746974792e6d6f76655374617465203d20226a756d70223b0a09656c73652069662028656e746974792e696e41697220262620656e746974792e7679203e20302e322920656e746974792e6d6f76655374617465203d202266616c6c223b0a09656c73652069662028656e746974792e6d6f7665496e70757420213d3d20302920656e746974792e6d6f76655374617465203d202277616c6b223b0a09656c73652069662028656e746974792e766572746963616c496e707574203c20302026262021656e746974792e696e4169722920656e746974792e6d6f76655374617465203d202263726f756368223b0a09656c736520656e746974792e6d6f76655374617465203d202269646c65223b0a0a0969662028656e746974792e6d6f76655374617465203d3d3d202263726f7563682229207b0a0909656e746974792e686569676874203d2036303b0a0909656e746974792e736b656c65746f6e4f666673657459203d2031320a097d20656c7365207b0a0909656e746974792e686569676874203d203130303b0a0909656e746974792e736b656c65746f6e4f666673657459203d20303b0a097d0a7d0a0a0a66756e6374696f6e20757064617465416374696f6e537461746528656e7469747929207b0a09656e746974792e616374696f6e5374617465203d20226e6f6e65223b0a0a0969662028656e74697479203d3d3d2067616d652e706c6179657229207b0a09096966202821656e746974792e696e41697229207b0a09090969662028656e746974792e766572746963616c496e707574203c203029207b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d202263726f75636850756e6368223b0a0909090969662028656e746974792e77616e744b69636b29202072657475726e20656e746974792e616374696f6e5374617465203d202263726f7563684b69636b223b090909090a0909090972657475726e20656e746974792e616374696f6e5374617465203d202263726f756368223b0a0909097d656c736520696628656e746974792e766572746963616c496e707574203e2030297b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d2028656e746974792e6d6f76655374617465203d3d3d202277616c6b2229203f202277616c6b4869676850756e636822203a20226869676850756e6368223b0a0909090969662028656e746974792e77616e744b69636b292072657475726e20656e746974792e616374696f6e5374617465203d2022686967684b69636b223b20090a0909097d656c73657b0a0909090969662028656e746974792e77616e7450756e63682972657475726e20656e746974792e616374696f6e5374617465203d2028656e746974792e6d6f76655374617465203d3d3d202277616c6b2229203f202277616c6b50756e636822203a202270756e6368223b0a0909090969662028656e746974792e77616e744b69636b2972657475726e20656e746974792e616374696f6e5374617465203d20226b69636b223b0a0909097d0a09097d20656c7365207b0a0909090a09090969662028656e746974792e766572746963616c496e707574203c203029207b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d20226a756d704c6f7750756e6368223b0a0909090969662028656e746974792e77616e744b69636b29202072657475726e20656e746974792e616374696f6e5374617465203d20226a756d704c6f774b69636b223b090909090a0909097d656c736520696628656e746974792e766572746963616c496e707574203e2030297b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d20226a756d704869676850756e6368223b0a0909090969662028656e746974792e77616e744b69636b292072657475726e20656e746974792e616374696f6e5374617465203d20226a756d70486967684b69636b223b20090a0909097d656c73657b0a0909090969662028656e746974792e77616e7450756e6368292072657475726e20656e746974792e616374696f6e5374617465203d20226a756d7050756e6368223b0a0909090969662028656e746974792e77616e744b69636b29202072657475726e20656e746974792e616374696f6e5374617465203d20226a756d704b69636b223b0a0909097d0909090a09097d0a097d656c736520696628656e746974792e7479706520213d3d2022626f73732220297b0a090969662028656e746974792e766572746963616c496e707574203d3d203129207b0a09090969662028656e746974792e77616e7450756e636829207b656e746974792e616374696f6e5374617465203d20226869676850756e6368227d0a09090969662028656e746974792e77616e744b69636b29207b656e746974792e616374696f6e5374617465203d2022686967684b69636b227d0a09097d656c73657b0a09090969662028656e746974792e77616e7450756e636829207b656e746974792e616374696f6e5374617465203d202270756e6368227d0a09090969662028656e746974792e77616e744b69636b29207b656e746974792e616374696f6e5374617465203d20226b69636b227d0a09097d090a097d656c73657b0a09092f2f626f73730a090969662028656e746974792e766572746963616c496e707574203d3d203129207b0a09090969662028656e746974792e77616e7450756e636829207b656e746974792e616374696f6e5374617465203d2028656e746974792e6d6f76655374617465203d3d3d202277616c6b2229203f202277616c6b50756e636822203a202270756e6368223b7d0a09090969662028656e746974792e77616e744b69636b29207b656e746974792e616374696f6e5374617465203d2022686967684b69636b227d0a09097d656c73657b0a09090969662028656e746974792e77616e7450756e636829207b656e746974792e616374696f6e5374617465203d2028656e746974792e6d6f76655374617465203d3d3d202277616c6b2229203f202277616c6b4869676850756e636822203a20226869676850756e6368223b7d0a09090969662028656e746974792e77616e744b69636b29207b656e746974792e616374696f6e5374617465203d20226b69636b227d0a09097d090a097d0a7d0a0a0a0a66756e6374696f6e2073656c656374416e696d6174696f6e537461746528656e7469747929207b0a096c65742066696e616c5374617465203d20656e746974792e6d6f766553746174653b0a0a0969662028656e746974792e616374696f6e537461746520213d3d20226e6f6e652229207b0a090966696e616c5374617465203d20656e746974792e616374696f6e53746174653b0a097d0a0a096966202866696e616c537461746520213d3d20656e746974792e616e696d2e737461746529207b0a0909706c6179416e696d6174696f6e28656e746974792c2066696e616c5374617465293b0a097d0a7d0a0a0a66756e6374696f6e20706c6179416e696d6174696f6e28656e746974792c206e616d6529207b0a09636f6e737420616e696d203d20656e746974792e616e696d3b0a0a0969662028616e696d2e7374617465203d3d3d206e616d65292072657475726e3b0a0a09616e696d2e7374617465203d206e616d653b0a09616e696d2e6e657874506f7365203d20706f7365735b6e616d655d3b0a7d0a0a0a0a66756e6374696f6e20757064617465416e696d6174696f6e28656e746974792c20647429207b0a09636f6e737420616e696d203d20656e746974792e616e696d3b0a09616e696d2e6672616d652b2b0a092f2f20496620626c656e64696e6720746f2061206e657720706f73650a0969662028616e696d2e6e657874506f736529207b0a0909616e696d2e63757272656e74506f7365203d20616e696d2e6e657874506f73653b0a0909616e696d2e6e657874506f7365203d206e756c6c3b0a0909616e696d2e6672616d65203d20303b090a097d090a092f2f2057616c6b206379636c65206f766572726964650a0969662028616e696d2e7374617465203d3d3d202277616c6b22207c7c20616e696d2e7374617465203d3d3d202277616c6b50756e636822207c7c20616e696d2e7374617465203d3d3d202277616c6b4869676850756e63682229207b0a09096170706c7957616c6b28656e746974792c206474293b0a0a090969662028616e696d2e7374617465203d3d3d202277616c6b50756e63682229207b0a0909096170706c79426c656e646564506f736528656e746974792c20706f7365732e77616c6b50756e63682c20706f7365732e77616c6b50756e63682c2031293b0a09097d656c73652069662028616e696d2e7374617465203d3d3d202277616c6b4869676850756e63682229207b0a0909096170706c79426c656e646564506f736528656e746974792c20706f7365732e77616c6b4869676850756e63682c20706f7365732e77616c6b4869676850756e63682c2031293b0a09097d0a097d20656c736520696628616e696d2e737461746520213d3d20226479696e6722297b0a09090a09092f2f2049646c652c2070756e63682c206b69636b2c206a756d702c2066616c6c2c206574632e0a09096170706c79426c656e646564506f736528656e746974792c20616e696d2e63757272656e74506f73652c20616e696d2e63757272656e74506f73652c2031293b0a097d656c73657b0a09096170706c79446561746828656e746974792c206474293b0a097d0a7d0a0a66756e6374696f6e20206170706c7957616c6b28656e746974792c6474297b0a09636f6e73742074203d20706572666f726d616e63652e6e6f772829202a202e30313b202f2f2077616c6b207370656564206d756c7469706c6965720a09636f6e737420746f72736f203d20656e746974792e736b656c65746f6e2e746f72736f3b0a09746f72736f2e726f746174696f6e546172676574203d204d6174682e73696e2874202a20302e3529202a20302e30353b0a092f2f20686561640a09746f72736f2e6368696c6472656e2e686561642e726f746174696f6e546172676574203d20303b0a092f2f206c6567730a09746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e546172676574203d20204d6174682e73696e287429202a20302e363b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e546172676574203d202d4d6174682e73696e287429202a20302e363b0a0a09746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e546172676574203d204d6174682e6d6178282d4d6174682e73696e2874202b20302e3529202a20302e342c202d302e31293b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e546172676574203d204d6174682e6d6178284d6174682e73696e2874202b20302e3529202a20302e342c202d302e31293b0a0a092f2f2061726d730a09746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e546172676574203d202d4d6174682e73696e287429202a20302e343b0a09746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e546172676574203d20204d6174682e73696e287429202a20302e343b0a0a09746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e546172676574203d2028204d6174682e73696e2874202b20302e3329202a20302e3129202d313b0a09746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e546172676574203d2028204d6174682e73696e2874202b20302e3329202a20302e3129202d2e353b0a7d0a66756e6374696f6e20206170706c79446561746828656e746974792c6474297b0a09636f6e73742074203d20706572666f726d616e63652e6e6f772829202a202e30313b202f2f2077616c6b207370656564206d756c7469706c6965720a09636f6e737420746f72736f203d20656e746974792e736b656c65746f6e2e746f72736f3b0a09636f6e7374207b207365676d656e743a207365672c2020706c6174666f726d3a20656e656d79506c6174666f726d20207d203d20676574506c6174666f726d556e64657228656e74697479293b0a09636f6e73742062617365416e676c65203d20736567203f206765745365676d656e74416e676c652873656729203a20303b202f2f2066616c6c6261636b20746f20666c61740a0a09746f72736f2e726f746174696f6e546172676574203d20656e746974792e666163696e67202a202862617365416e676c65202d204d6174682e5049202f2032293b0a0a092f2f206c6567730a09746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e546172676574203d2020303b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e546172676574203d20303b0a0a09746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e546172676574203d20303b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e546172676574203d20303b0a7d0a0a0a66756e6374696f6e206170706c79426c656e646564506f736528656e746974792c20612c20622c207429207b0a09636f6e737420746f72736f203d2020656e746974792e736b656c65746f6e2e746f72736f3b0a0a20202020746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e546172676574203d0a20202020202020206c65727028612e757070657241726d4c2c20622e757070657241726d4c2c2074293b0a0a20202020746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e546172676574203d0a20202020202020206c65727028612e6c6f77657241726d4c2c20622e6c6f77657241726d4c2c2074293b0a0a20202020746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e546172676574203d0a20202020202020206c65727028612e757070657241726d522c20622e757070657241726d522c2074293b0a0a20202020746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e546172676574203d0a20202020202020206c65727028612e6c6f77657241726d522c20622e6c6f77657241726d522c2074293b0a09696628656e746974792e616e696d2e737461746520213d3d202277616c6b50756e63682220262620656e746974792e616e696d2e737461746520213d3d202277616c6b4869676850756e636822297b0a0909746f72736f2e726f746174696f6e546172676574203d206c65727028612e746f72736f2c20622e746f72736f2c2074293b0a0909746f72736f2e6368696c6472656e2e686561642e726f746174696f6e546172676574203d206c65727028612e686561642c20622e686561642c2074293b0a0a0909746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e546172676574203d0a0909096c65727028612e75707065724c65674c2c20622e75707065724c65674c2c2074293b0a0a0909746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e546172676574203d0a0909096c65727028612e6c6f7765724c65674c2c20622e6c6f7765724c65674c2c2074293b0a0a0909746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e546172676574203d0a0909096c65727028612e75707065724c6567522c20622e75707065724c6567522c2074293b0a0a0909746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e546172676574203d0a0909096c65727028612e6c6f7765724c6567522c20622e6c6f7765724c6567522c2074293b0a097d0a7d0a0a0a66756e6374696f6e206c65727028612c20622c207429207b0a0972657475726e2061202b202862202d206129202a20743b0a7d0a0a66756e6374696f6e20616e676c65446966662820622c6129207b0a096c65742064203d2062202d20613b0a097768696c65202864203e204d6174682e5049292064202d3d204d6174682e5049202a20323b0a097768696c65202864203c202d4d6174682e5049292064202b3d204d6174682e5049202a20323b0a0972657475726e20643b0a7d0a66756e6374696f6e20736d6f6f7468416e676c652863757272656e742c207461726765742c2064742c2062617365537065656429207b0a202020206c65742064696666203d20746172676574202d2063757272656e743b0a0a202020202f2f207772617020696e746f20282d50492c205049290a2020202064696666203d202864696666202b204d6174682e504929202520284d6174682e5049202a203229202d204d6174682e50493b0a09636f6e73742074203d204d6174682e6d696e284d6174682e616273286469666629202f204d6174682e50492c2031293b0a09636f6e73742065617365203d2074202a20743b202f2f2071756164726174696320656173652d696e0a09636f6e7374207370656564203d20626173655370656564202b2065617365202a2032303b0a0a2020202072657475726e2063757272656e74202b2064696666202a206474202a2073706565643b0a7d0a0a66756e6374696f6e20736d6f6f7468426f6e65526f746174696f6e7328656e746974792c647429207b0a09636f6e7374207370656564203d2032303b202f2f20686f77206661737420626f6e657320726f7461746520746f7761726420746172676574730a0964743d6474202f2031303030202f2f2068617320746f20626520696e207365636f6e64730a09636f6e737420746f72736f203d2020656e746974792e736b656c65746f6e2e746f72736f3b090a0a09746f72736f2e6368696c6472656e2e686561642e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e686561642e726f746174696f6e2c20746f72736f2e6368696c6472656e2e686561642e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e2c20746f72736f2e6368696c6472656e2e757070657241726d4c2e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e2c20746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c2e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e2c20746f72736f2e6368696c6472656e2e757070657241726d522e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e2c20746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d522e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e726f746174696f6e2c20746f72736f2e726f746174696f6e5461726765742c2064742c207370656564293b0a0a09746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e2c20746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e2c20746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c2e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e2c20746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e5461726765742c2064742c207370656564293b0a09746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e203d20736d6f6f7468416e676c6528746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e2c20746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c6567522e726f746174696f6e5461726765742c2064742c207370656564293b0a7d0a0a0a2f2f2d2d2d20436f6c6c6973696f6e0a0a2f2f2047657420776f726c6420656e7469747920706f6c79676f6e0a66756e6374696f6e20676574426f6e65576f726c64506f6c7928626f6e6529207b0a09636f6e737420636f73203d204d6174682e636f7328626f6e652e776f726c64526f74293b0a09636f6e73742073696e203d204d6174682e73696e28626f6e652e776f726c64526f74293b0a0a0972657475726e20626f6e652e706f6c792e6d61702870203d3e20287b0a0909783a20626f6e652e776f726c6458202b20702e78202a20636f73202d20702e79202a2073696e2c0a0909793a20626f6e652e776f726c6459202b20702e78202a2073696e202b20702e79202a20636f730a097d29293b0a7d0a0a66756e6374696f6e2067657448697428612c206229207b0a09636f6e73742070656e203d2073617428612c2062293b0a09696620282170656e207c7c2070656e2e6f7665726c6170203c20302e312972657475726e2066616c73653b0a0972657475726e2070656e3b0a7d0a2f2f2044657465726d696e65207468652074797065206f6620636f6c6c6973696f6e7320746f20646574656374202868616e6473202f20666565742920646570656e64696e67206f6e207468652061747461636b0a636f6e737420616374696f6e73203d207b0a0970756e63683a5b2270756e6368222c226869676850756e6368222c2277616c6b50756e6368222c2277616c6b4869676850756e6368222c2263726f75636850756e6368222c226a756d7050756e6368222c226a756d704c6f7750756e6368222c226a756d704869676850756e6368225d2c0a096b69636b3a5b226b69636b222c22686967684b69636b222c2263726f7563684b69636b222c226a756d704b69636b222c226a756d704c6f774b69636b222c226a756d70486967684b69636b225d0a7d3b0a636f6e737420616374696f6e54797065203d207b7d3b0a666f722028636f6e7374207479706520696e20616374696f6e7329207b0a09666f722028636f6e7374206e616d65206f6620616374696f6e735b747970655d29207b0a0909616374696f6e547970655b6e616d655d203d20747970653b2020202f2f202270756e636822206f7220226b69636b220a097d0a7d0a0a0a66756e6374696f6e20676574416374697665486974506f6c797328656e7469747929207b0a09636f6e73742074797065203d20616374696f6e547970655b656e746974792e616e696d2e73746174655d3b0a09696620282174797065292072657475726e206e756c6c3b0a0a096966202874797065203d3d3d202270756e63682229207b0a090972657475726e205b0a090909676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e757070657241726d4c2e6368696c6472656e2e6c6f77657241726d4c292c0a090909676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e757070657241726d522e6368696c6472656e2e6c6f77657241726d52290a09095d3b0a097d0a0a096966202874797065203d3d3d20226b69636b2229207b0a090972657475726e205b0a090909676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e75707065724c65674c2e6368696c6472656e2e6c6f7765724c65674c292c0a090909676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e75707065724c6567522e6368696c6472656e2e6c6f7765724c656752290a09095d3b0a097d0a0a0972657475726e206e756c6c3b0a7d0a0a66756e6374696f6e2067657448757274506f6c797328656e7469747929207b0a0972657475726e207b0a0909686561643a2020676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e68656164292c0a0909746f72736f3a20676574426f6e65576f726c64506f6c7928656e746974792e736b656c65746f6e2e746f72736f290a097d3b0a7d0a0a0a0a66756e6374696f6e207265736f6c766541747461636b2861747461636b65722c2074617267657429207b0a09636f6e737420686974506f6c7973203d20676574416374697665486974506f6c79732861747461636b6572293b0a096966202821686974506f6c7973292072657475726e3b0a0a09636f6e73742068757274203d2067657448757274506f6c797328746172676574293b0a0a09666f722028636f6e737420706f6c79206f6620686974506f6c797329207b0a0a0909636f6e73742068697448656164203d2067657448697428706f6c792c20687572742e68656164293b0a0909696620286869744865616429207b0a090909696628217461726765742e707265764869742973667848697428293b0a0909097461726765742e70726576486974203d20747275653b0a0909096170706c794869745265616374696f6e287461726765742c202268656164222c2068697448656164293b0a09090972657475726e3b202f2f20686561642074616b6573207072696f726974790a09097d0a0a0909636f6e737420686974546f72736f203d2067657448697428706f6c792c20687572742e746f72736f293b0a090969662028686974546f72736f29207b0a090909696628217461726765742e707265764869742973667848697428293b0a0909097461726765742e70726576486974203d20747275653b0a0909096170706c794869745265616374696f6e287461726765742c2022746f72736f222c20686974546f72736f293b0a09090972657475726e3b0a09097d0a097d0a7d0a0a0a66756e6374696f6e20706c61796572456e656d79436f6c6c6973696f6e2829207b0a09636f6e73742070203d2067616d652e706c617965723b0a092f2f204966206e6f2061747461636b206973206163746976652c20736b69702065766572797468696e670a202020200a0969662028697341747461636b416374697665287029297b0a0909666f722028636f6e73742065206f662067616d652e656e656d69657329207b0909090a0909097265736f6c766541747461636b28702c65293b0a09097d0a097d0a09666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a09096966202821697341747461636b4163746976652865292920636f6e74696e75653b090a09097265736f6c766541747461636b28652c70293b0a097d0a7d0a0a2f2f53415420636f6c6c73696f6e20706f6c7920767320706f6c790a66756e6374696f6e2073617428706f6c79412c20706f6c794229207b0a096966202821706f6c7941207c7c20706f6c79412e6c656e677468203c2033292072657475726e206e756c6c3b0a096966202821706f6c7942207c7c20706f6c79422e6c656e677468203c2033292072657475726e206e756c6c3b0a0a096c6574206f7665726c6170203d20496e66696e6974793b0a096c657420736d616c6c65737441786973203d206e756c6c3b0a0a09666f722028636f6e737420706f6c79206f66205b706f6c79412c20706f6c79425d29207b0a0909666f7220286c65742069203d20303b2069203c20706f6c792e6c656e6774683b20692b2b29207b0a090909636f6e7374207031203d20706f6c795b695d3b0a090909636f6e7374207032203d20706f6c795b2869202b203129202520706f6c792e6c656e6774685d3b0a0a090909636f6e7374206478203d2070322e78202d2070312e783b0a090909636f6e7374206479203d2070322e79202d2070312e793b0a0a090909696620286478203d3d3d2030202626206479203d3d3d20302920636f6e74696e75653b0a0a090909636f6e7374206e78203d2064793b0a090909636f6e7374206e79203d202d64783b0a0a0909096c6574205b6d696e412c206d6178415d203d2070726f6a65637428706f6c79412c206e782c206e79293b0a0909096c6574205b6d696e422c206d6178425d203d2070726f6a65637428706f6c79422c206e782c206e79293b0a0a090909696620286d617841203c206d696e42207c7c206d617842203c206d696e41292072657475726e206e756c6c3b0a0a090909636f6e7374206f203d204d6174682e6d696e286d6178412c206d61784229202d204d6174682e6d6178286d696e412c206d696e42293b0a090909696620286f203c206f7665726c617029207b0a090909096f7665726c6170203d206f3b0a09090909736d616c6c65737441786973203d207b20783a206e782c20793a206e79207d3b0a0909097d0a09097d0a097d0a0a096966202821736d616c6c65737441786973292072657475726e206e756c6c3b0a0a09636f6e7374206c656e203d204d6174682e6879706f7428736d616c6c657374417869732e782c20736d616c6c657374417869732e79293b0a09696620286c656e203d3d3d2030292072657475726e206e756c6c3b0a0a0972657475726e207b0a09096f7665726c61702c0a09096e783a20736d616c6c657374417869732e78202f206c656e2c0a09096e793a20736d616c6c657374417869732e79202f206c656e0a097d3b0a7d0a0a66756e6374696f6e2070726f6a65637428706f6c792c206e782c206e7929207b0a096c6574206d696e203d20496e66696e6974792c206d6178203d202d496e66696e6974793b0a09666f722028636f6e73742070206f6620706f6c7929207b0a0909636f6e737420646f74203d20702e78202a206e78202b20702e79202a206e793b0a090969662028646f74203c206d696e29206d696e203d20646f743b0a090969662028646f74203e206d617829206d6178203d20646f743b0a097d0a0972657475726e205b6d696e2c206d61785d3b0a7d0a0a66756e6374696f6e20697341747461636b41637469766528656e7469747929207b0a09636f6e7374207374617465203d20656e746974792e616e696d2e73746174653b0a09636f6e7374206672616d65203d20656e746974792e616e696d2e6672616d653b0a0a09696620282161747461636b4672616d65735b73746174655d292072657475726e2066616c73653b0a0a09636f6e7374207b2073746172742c20656e64207d203d2061747461636b4672616d65735b73746174655d3b0a0972657475726e206672616d65203e3d207374617274202626206672616d65203c3d20656e643b0a7d0a0a0a66756e6374696f6e206170706c794869745265616374696f6e287461726765742c20686974547970652c20726573756c7429207b0a096966287461726765742e7479706520213d3d2022626f737322297b0a09097461726765742e7374756e203d202e323b0a09097461726765742e61747461636b436f6f6c646f776e203d20313b0a097d656c73657b0a09097461726765742e61747461636b436f6f6c646f776e203d202e323b0a097d0a0a096966202868697454797065203d3d3d2022686561642229207b0a09090a09096966287461726765742e696420213d3d2022706c61796572222967616d652e73636f7265202b3d204d6174682e6365696c28726573756c742e6f7665726c6170202a202e3135293b0a09097461726765742e686974506f696e747320202d3d204d6174682e6365696c28726573756c742e6f7665726c6170202a202e30373530293b0a09090a09097461726765742e7678203d202d28726573756c742e6e78202a202e33293b0a09097461726765742e7679203d202d28726573756c742e6e79202a202e35293b0a09097461726765742e736b656c65746f6e2e746f72736f2e6368696c6472656e2e686561642e726f746174696f6e202d3d20302e333b0a09097461726765742e686561645265636f696c203d20302e31353b0a09092f2f686174730a09096966287461726765742e686173486174297b0a090909737061776e48617428746172676574290a09097d0a097d0a0a096966202868697454797065203d3d3d2022746f72736f2229207b090a09097461726765742e7678203d202d28726573756c742e6e78202a202e33293b0a09097461726765742e7679203d202d28726573756c742e6e79202a202e35293b0a09097461726765742e736b656c65746f6e2e746f72736f2e726f746174696f6e202d3d20302e333b0a09097461726765742e736b656c65746f6e2e746f72736f2e6368696c6472656e2e75707065724c65674c2e726f746174696f6e202b3d20302e333b0a09097461726765742e736b656c65746f6e2e746f72736f2e6368696c6472656e2e75707065724c6567522e726f746174696f6e202b3d20302e333b0a09096966287461726765742e696420213d3d2022706c61796572222967616d652e73636f7265202b3d204d6174682e6365696c28726573756c742e6f7665726c6170202a202e31293b0a09097461726765742e686974506f696e7473202d3d204d6174682e6365696c28726573756c742e6f7665726c6170202a202e3035293b0a097d0a0a096966287461726765742e696420213d3d2022706c61796572222967616d652e73636f7265202b3d2031303b0a0a7d0a09090a66756e6374696f6e207570646174655265636f696c28656e746974792c20647429207b0a0969662028656e746974792e686561645265636f696c203e203029207b0a0909656e746974792e686561645265636f696c202d3d2064743b0a20202020202020202f2f20536d6f6f74686c792072657475726e20746f206e65757472616c20726f746174696f6e0a2020202020202020636f6e73742068656164203d20656e746974792e736b656c65746f6e2e746f72736f2e6368696c6472656e2e686561643b0a2020202020202020686561642e726f746174696f6e203d20686561642e726f746174696f6e202a20302e313b202f2f2064616d70656e20746f7761726420300a097d0a7d0a0a0a0a0a2a2f6a53435f414354494f4e5501167647c04c0f42d50f859ddedee9f4b7d103b76cc51b2e478c2fb7c14bf1d35a010f33ac26dc6f510512664c00e539b5228bb87e1e55eb94e3705391c1010d3806010c145f7babcd1348ec5ea2d5b9736d7d48ccbaa8cfb26d90e61f22583f891e34002de12acbe1722d45599db994d4ccabe454973f7c865e8236f02c71aeeaa35ba1000df1cb2cff9c8affaf2a025722e67efe7e16815dcaf19e21de2d9bf7763334b9011d7050de1811b58218023867d9de95340f03a6fbe0d92d475a24420e7d5466b000146032f7fbe45f77cd34b0b1d55ceed9b57fe24f35874ce316eac4dc3d0039f30100cc40fa8eb6351ff586f634790ca95609267dfc7848f419a8fdea195d887954000b486540431c2fbd26d032d2073373f5f99779626e9e427df08e211caba21908011434b51ce630ccb61f89ed3b3947a6974c7b485e3b7f6b70995b0aaf6cd162a90106318d3d5d79a427381689128fdfd80f6667ebc9d992f9f319b9230009b0ea690104937e19a848f26e539446c0a8fb4d2fd2db8005ceefae9a01e3d466e718a1e60101a7e1fd60eeb3d09788e0d4ed09bb17852e5f0440c62397a10403f3971b7a410000000000000000000000000000000000000000000000000000000000000000002b83e54a9f831a752306225811402e9038a7a77271ae82daba836001b00be4212e20975bbe8a442e1ac80356364ceae2062ab647a11aad800c0aab6e05477e492b21299fde7470d2d6533127122cef4112d192c8a3bacc33b207bd2bb387c8d401060e0d0230a4bfe4b28629d9817d6de395b3f352d0ada68e1f07caaaef15eae3012ef937a44b443c253c5b952ccec35e3e4811eb13fd85eb4c09bc9aee0400d9241e7661143ffcf5da6bdb1baab77bc8cf67e82efdeb2fa503ebeb34b057b18880187d0c0dd2b2b9bbf43555f680ef81303c879732d387526b753f6806e3d4beef29cfd685f8e62c35fd9bc583648a0c4ad935088d0b7615d9e8a378580202de242293c55bb5c951203e42262d421680174aa16a9ed8f47ee335b914f665a194250b36dfa682b852e599f93db7587d144744337683566d2d11f7362c5cf2125cb02e8b0db8bfbd516e3c10ede9fc0106b9ba65a8bf86d36dad28139805283e7eff229cbc5e987c1b297a639491173dccec0625e1c191695c4aa2025345d5a1f52e205c7a022b2e3568a21adab06d65d01f67227fc154cff4fd6ffa49d8a28e4eb917ca5323db257146afe9ba60fb6c09622ebdc58bd7e6ee02453e4adfdfdb36bb010be8a575946500f3d28078018de94dbeb6f23fa916147e16cffe8661126cbbf30117b8491cb73d30e80e057a06456a180e3d14517513b30d697bc52611f516f4590100b062ad3ff1e74283e8204529957f2f164873736f98a7441e24f0da473e537600104e2c126f3ba580d1866d3795f3446e2b8e5e997bf20c7d2811e659a721847e012b4e557804f05515ad4ce6ef5f586e65d35be4622c9fd016cab81245e4a77ff90016147f591916b5cf4508920dc3f37aabac8805ce55eb851ea23c80b221f295be012d3e20ec4f4dcbd815d79302eb11210e64ca9421fcdad73f20d8b4a63599d9950021e3335b5859e53e239c79abf4deb1959fc57051254762d7c32106c1602afc1f0129729113e009b89fa58df03e69e6581f623b950e4cced24c89c39a5d7f702ed7011a0db5a5870dd86caff752809eeee2655d46139b633b2dd6fd30eeffc765474f0024d905e206061d444a496c9d339060daa8dc2af38c9f674b48d5d102e04612b10109ff7830f8b8201680fff0d7b6bc53fa8ec16e2c0194bd0bda4fe2b1f37ecb93011f50b2ec1cd49c61acfad2dfb1a9de19f9ba93e174d542ad6c96296273b07fbb00
DERO explorer source code | explorer version (api): under development (1.0) | dero version: golang pre-alpha | Copyright 2017-2022 Dero Project