Transaction

a858c42e6451d15dcec1126a42c071feaf3a2d7150b6d9c4d0c1291228b31ad9
Timestamp (utc)
2025-02-04 16:38:13
Fee Paid
0.00000003 BSV
(
0.00022932 BSV
-
0.00022929 BSV
)
Fee Rate
1.234 sat/KB
Version
1
Confirmations
39,154
Size Stats
2,430 B

42 Inputs

Total Input:
0.00022932 BSV
  • jM4{"name":"EncodedFiles","files":[{"name":"classmessagehandlerA7.html","size":9900,"type":"text/html","content":"Y2xhc3MgTWVzc2FnZUhhbmRsZXIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5mZXRjaGVyID0gbmV3IEJsb2NrY2hhaW5GZXRjaGVyKCk7CiAgICAgICAgdGhpcy5pbml0aWFsaXplU3R5bGVzKCk7CiAgICB9CgogICAgaW5pdGlhbGl6ZVN0eWxlcygpIHsKICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBgCiAgICAgICAgICAgIC5tZXNzYWdlLXZpZXcgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07CiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5tZXNzYWdlLWhlYWRlciB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxcmVtOwogICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU3ZWI7CiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IHN0YXJ0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5tZXNzYWdlLWluZm8gewogICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgICAgICAgICBjb2xvcjogIzZiNzI4MDsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLm1lc3NhZ2UtY29udGVudCB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxcmVtOwogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZmFmYjsKICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5jb250ZW50LWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY29udGVudC1jb250YWluZXIgaW1nLAogICAgICAgICAgICAuY29udGVudC1jb250YWluZXIgdmlkZW8sCiAgICAgICAgICAgIC5jb250ZW50LWNvbnRhaW5lciBhdWRpbyB7CiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNvbnRlbnQtY29udGFpbmVyIHByZSB7CiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5pZnJhbWUtY29udGFpbmVyIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgfQogICAgICAgIGA7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7CiAgICB9CgogICAgYXN5bmMgc2hvd01lc3NhZ2UodHhpZCkgewogICAgICAgIGNvbnN0IG1lc3NhZ2VMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2VMaXN0Jyk7CiAgICAgICAgaWYgKCFtZXNzYWdlTGlzdCkgcmV0dXJuOwoKICAgICAgICB0cnkgewogICAgICAgICAgICBtZXNzYWdlTGlzdC5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLWluZGljYXRvciI+TG9hZGluZyBtZXNzYWdlICR7dHhpZH0uLi48L2Rpdj4KICAgICAgICAgICAgYDsKCiAgICAgICAgICAgIGNvbnN0IHJhd0RhdGEgPSBhd2FpdCB0aGlzLmZldGNoZXIuZmV0Y2hUcmFuc2FjdGlvbih0eGlkKTsKICAgICAgICAgICAgdGhpcy5zaG93Q29udGVudChyYXdEYXRhLCB0eGlkKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzaG93aW5nIG1lc3NhZ2U6JywgZXJyb3IpOwogICAgICAgICAgICBtZXNzYWdlTGlzdC5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvci1tZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICBFcnJvciBsb2FkaW5nIG1lc3NhZ2U6ICR7ZXJyb3IubWVzc2FnZX0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9IndpbmRvdy5zZXR1cEZvbGRlcignaW5ib3gnKSIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgdG8gSW5ib3gKICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICAgIH0KICAgIH0KCiAgICBjcmVhdGVNYWlsdG9MaW5rKHR4aWQsIGNvbnRlbnQsIHR5cGUpIHsKICAgIGNvbnN0IHN1YmplY3QgPSBgQlNWIE1lc3NhZ2U6ICR7dHhpZH1gOwogICAgbGV0IGJvZHk7CgogICAgLy8gRm9ybWF0IGJvZHkgYmFzZWQgb24gY29udGVudCB0eXBlCiAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSB8fCB0eXBlLnN0YXJ0c1dpdGgoJ3ZpZGVvLycpIHx8IHR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykpIHsKICAgICAgICBib2R5ID0gYEJsb2NrY2hhaW4gVHJhbnNhY3Rpb24gSUQ6ICR7dHhpZH1cblxuYCArCiAgICAgICAgICAgICAgYFRoaXMgbWVzc2FnZSBjb250YWlucyAke3R5cGV9IGNvbnRlbnQgd2hpY2ggY2FuIGJlIHZpZXdlZCBhdDpcbmAgKwogICAgICAgICAgICAgIGBodHRwczovL3doYXRzb25jaGFpbi5jb20vdHgvJHt0eGlkfWA7CiAgICB9IGVsc2UgewogICAgICAgIGJvZHkgPSBgQmxvY2tjaGFpbiBUcmFuc2FjdGlvbiBJRDogJHt0eGlkfVxuXG5gICsKICAgICAgICAgICAgICBgTWVzc2FnZSBDb250ZW50OlxuJHtjb250ZW50fVxuXG5gICsKICAgICAgICAgICAgICBgVmlldyBvbiBibG9ja2NoYWluOlxuaHR0cHM6Ly93aGF0c29uY2hhaW4uY29tL3R4LyR7dHhpZH1gOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgbWFpbHRvOiBgbWFpbHRvOj9zdWJqZWN0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHN1YmplY3QpfSZib2R5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGJvZHkpfWAsCiAgICAgICAgZ21haWw6IGBodHRwczovL21haWwuZ29vZ2xlLmNvbS9tYWlsLz92aWV3PWNtJmZzPTEmdG89JnN1PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHN1YmplY3QpfSZib2R5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGJvZHkpfWAsCiAgICAgICAgb3V0bG9vazogYGh0dHBzOi8vb3V0bG9vay5saXZlLmNvbS9tYWlsLzAvZGVlcGxpbmsvY29tcG9zZT9zdWJqZWN0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHN1YmplY3QpfSZib2R5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGJvZHkpfWAsCiAgICAgICAgeWFob286IGBodHRwOi8vY29tcG9zZS5tYWlsLnlhaG9vLmNvbS8/c3ViamVjdD0ke2VuY29kZVVSSUNvbXBvbmVudChzdWJqZWN0KX0mYm9keT0ke2VuY29kZVVSSUNvbXBvbmVudChib2R5KX1gLAogICAgICAgIGNvbnRlbnQ6IGJvZHkgLy8gRm9yIGNvcHkgdG8gY2xpcGJvYXJkCiAgICB9Owp9CgoKc2hvd0NvbnRlbnQocmF3RGF0YSwgdHhpZCkgewogICAgICAgIGxldCBjb250ZW50OwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IGNoYWluRGlza0RhdGEgPSBKU09OLnBhcnNlKHJhd0RhdGEpOwogICAgICAgICAgICBpZiAoIWNoYWluRGlza0RhdGEuZmlsZXMgfHwgIWNoYWluRGlza0RhdGEuZmlsZXNbMF0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBDaGFpbkRpc2sgZm9ybWF0Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgZmlsZSA9IGNoYWluRGlza0RhdGEuZmlsZXNbMF07CiAgICAgICAgICAgIGNvbnRlbnQgPSB7CiAgICAgICAgICAgICAgICBkYXRhOiBhdG9iKGZpbGUuY29udGVudCksCiAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUgfHwgJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lCiAgICAgICAgICAgIH07CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29udGVudCA9IHsKICAgICAgICAgICAgICAgIGRhdGE6IHJhd0RhdGEsCiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICBuYW1lOiAnbWVzc2FnZS50eHQnCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGNvbnN0IGVtYWlsTGlua3MgPSB0aGlzLmNyZWF0ZU1haWx0b0xpbmsodHhpZCwgY29udGVudC5kYXRhLCBjb250ZW50LnR5cGUpOwogICAgICAgIGNvbnN0IG1lc3NhZ2VMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2VMaXN0Jyk7CiAgICAgICAgbWVzc2FnZUxpc3QuaW5uZXJIVE1MID0gYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlLXZpZXciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ3aW5kb3cuc2V0dXBGb2xkZXIoJ2luYm94JykiIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIHRvIEluYm94CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImRlbGV0ZU1lc3NhZ2UoJyR7dHhpZH0nKSIgY2xhc3M9ImJ0biBidG4tZGFuZ2VyIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNXJlbTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlIE1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW4tbGVmdDogMC41cmVtOyBwb3NpdGlvbjogcmVsYXRpdmU7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGhpcy5uZXh0RWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LnRvZ2dsZSgnaGlkZGVuJykiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nd2hpdGUnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTQgNGgxNmMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY2YzAtMS4xLjktMiAyLTJ6JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScyMiw2IDEyLDEzIDIsNiclM0UlM0MvcG9seWxpbmUlM0UlM0Mvc3ZnJTNFIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9Im1hcmdpbi1yaWdodDogMC4yNXJlbTsgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOyIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZSDilrwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGlkZGVuIGFic29sdXRlIGJnLXdoaXRlIGJvcmRlciByb3VuZGVkIHNoYWRvdy1sZyBtdC0xIHB5LTEgcmlnaHQtMCIgc3R5bGU9InotaW5kZXg6IDEwMDsgbWluLXdpZHRoOiAyMDBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiR7ZW1haWxMaW5rcy5nbWFpbH0iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iYmxvY2sgcHgtNCBweS0yIGhvdmVyOmJnLWdyYXktMTAwIHRleHQtZ3JheS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIGluIEdtYWlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiR7ZW1haWxMaW5rcy5vdXRsb29rfSIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJibG9jayBweC00IHB5LTIgaG92ZXI6YmctZ3JheS0xMDAgdGV4dC1ncmF5LTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW4gaW4gT3V0bG9vawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIke2VtYWlsTGlua3MueWFob299IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImJsb2NrIHB4LTQgcHktMiBob3ZlcjpiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbiBpbiBZYWhvbyBNYWlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiR7ZW1haWxMaW5rcy5tYWlsdG99IiBjbGFzcz0iYmxvY2sgcHgtNCBweS0yIGhvdmVyOmJnLWdyYXktMTAwIHRleHQtZ3JheS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIGluIERlZmF1bHQgTWFpbCBBcHAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgnJHtlbWFpbExpbmtzLmNvbnRlbnQucmVwbGFjZSgvJy9nLCAiXFwnIil9JykudGhlbigoKSA9PiBhbGVydCgnTWVzc2FnZSBjb3BpZWQgdG8gY2xpcGJvYXJkIScpKSIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYmxvY2sgdy1mdWxsIHRleHQtbGVmdCBweC00IHB5LTIgaG92ZXI6YmctZ3JheS0xMDAgdGV4dC1ncmF5LTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHkgdG8gQ2xpcGJvYXJkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZS1pbmZvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5GaWxlOiAke2NvbnRlbnQubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5UeXBlOiAke2NvbnRlbnQudHlwZX08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZS1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5mb3JtYXRDb250ZW50KGNvbnRlbnQpfQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICB9CgogICAgZm9ybWF0Q29udGVudChjb250ZW50KSB7CiAgICAgICAgaWYgKGNvbnRlbnQudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgewogICAgICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gYnRvYShjb250ZW50LmRhdGEpOwogICAgICAgICAgICByZXR1cm4gYDxpbWcgc3JjPSJkYXRhOiR7Y29udGVudC50eXBlfTtiYXNlNjQsJHtiYXNlNjREYXRhfSIgYWx0PSJJbWFnZSIgLz5gOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbnRlbnQudHlwZS5zdGFydHNXaXRoKCd2aWRlby8nKSkgewogICAgICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gYnRvYShjb250ZW50LmRhdGEpOwogICAgICAgICAgICByZXR1cm4gYAogICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzPgogICAgICAgICAgICAgICAgICAgIDxzb3VyY2Ugc3JjPSJkYXRhOiR7Y29udGVudC50eXBlfTtiYXNlNjQsJHtiYXNlNjREYXRhfSIgdHlwZT0iJHtjb250ZW50LnR5cGV9Ij4KICAgICAgICAgICAgICAgICAgICBZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBwbGF5YmFjay4KICAgICAgICAgICAgICAgIDwvdmlkZW8+CiAgICAgICAgICAgIGA7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29udGVudC50eXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpKSB7CiAgICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSBidG9hKGNvbnRlbnQuZGF0YSk7CiAgICAgICAgICAgIHJldHVybiBgCiAgICAgICAgICAgICAgICA8YXVkaW8gY29udHJvbHM+CiAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBzcmM9ImRhdGE6JHtjb250ZW50LnR5cGV9O2Jhc2U2NCwke2Jhc2U2NERhdGF9IiB0eXBlPSIke2NvbnRlbnQudHlwZX0iPgogICAgICAgICAgICAgICAgICAgIFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGF1ZGlvIHBsYXliYWNrLgogICAgICAgICAgICAgICAgPC9hdWRpbz4KICAgICAgICAgICAgYDsKICAgICAgICB9CgogICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09ICd0ZXh0L2h0bWwnKSB7CiAgICAgICAgICAgIHJldHVybiBgCiAgICAgICAgICAgICAgICA8aWZyYW1lIAogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpZnJhbWUtY29udGFpbmVyIgogICAgICAgICAgICAgICAgICAgIHNhbmRib3g9ImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4iCiAgICAgICAgICAgICAgICAgICAgc3JjZG9jPSIke2NvbnRlbnQuZGF0YS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKX0iPgogICAgICAgICAgICAgICAgPC9pZnJhbWU+CiAgICAgICAgICAgIGA7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29udGVudC50eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgewogICAgICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gYnRvYShjb250ZW50LmRhdGEpOwogICAgICAgICAgICByZXR1cm4gYAogICAgICAgICAgICAgICAgPGlmcmFtZSAKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaWZyYW1lLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgICBzcmM9ImRhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwke2Jhc2U2NERhdGF9Ij4KICAgICAgICAgICAgICAgIDwvaWZyYW1lPgogICAgICAgICAgICBgOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbnRlbnQudHlwZS5zdGFydHNXaXRoKCd0ZXh0LycpKSB7CiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjb250ZW50LmRhdGEKICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpCiAgICAgICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpCiAgICAgICAgICAgICAgICAucmVwbGFjZSgvIi9nLCAnJnF1b3Q7JykKICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICcmIzAzOTsnKQogICAgICAgICAgICAgICAgLnJlcGxhY2UoLyhodHRwcz86XC9cL1teXHNdKykvZywgJzxhIGhyZWY9IiQxIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InRleHQtYmx1ZS01MDAgaG92ZXI6dW5kZXJsaW5lIj4kMTwvYT4nKTsKCiAgICAgICAgICAgIHJldHVybiBgPHByZT4ke3RleHR9PC9wcmU+YDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBgPHByZT4ke2NvbnRlbnQuZGF0YX08L3ByZT5gOwogICAgfQp9Cgp3aW5kb3cubWVzc2FnZUhhbmRsZXIgPSBuZXcgTWVzc2FnZUhhbmRsZXIoKTsK"}]}
    https://whatsonchain.com/tx/undefined
  • jMîB<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="chrome-extension://lbjapbcmmceacocpimbpbidpgmlmoaao/content.js"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js" async></script> <title>Course Tee Management</title> </head> <style> body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100vh; } .container { background-color: white; padding: 20px; border-radius: 10px; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1); width: 50%; max-height: 100vh; } input, button, select { padding: 10px; border-radius: 5px; border: 1px solid #ccc; width: 100%; margin-top: 10px; } button { background-color: #2a9d8f; color: white; border: none; cursor: pointer; margin-top: 20px; } button:hover { background-color: #21867a; } label { font-weight: bold; } select { margin-top: 20px; } .input-section { margin-bottom: 20px; } </style> <body> <div class="container"> <h2>Course Tee Management</h2> <!-- Password Section --> <div id="passwordSection" class="input-section"> <label for="password">Enter Password:</label> <input type="password" id="password" placeholder="Enter password"> <button onclick="verifyPassword()">Submit</button> <p id="errorMessage" style="color: red; display: none;">Incorrect password. Try again.</p> </div> <!-- Manual Input for Country Code and Course Code --> <div id="manualInputSection" class="input-section" style="display: none;"> <label for="manualCountry">Enter Country Code:</label> <input type="text" id="manualCountry" placeholder="Country Code (e.g., 064)"> <label for="manualCourseCode">Enter Course Code:</label> <input type="text" id="manualCourseCode" placeholder="Course Code (e.g., 271)"> <button onclick="setManualEntry()">Use Manual Entry</button> </div> <!-- Tee Selection Section --> <div id="teeSelectionSection" class="input-section" style="display: none;"> <label for="teeSelect">Select Tee Type:</label> <select id="teeSelect"></select> <button onclick="loadTeeData()">Load Tee Data</button> <button onclick="addNewTeeFile()">Add New Tee</button> <button onclick="deleteTeeFile()">Delete Selected Tee</button> </div> <!-- Edit Section --> <div id="editSection" class="input-section" style="display: none;"> <label for="courseName">Course Name:</label> <input type="text" id="courseName"> <label for="country">Country:</label> <input type="text" id="country"> <label for="courseCode">Course Code:</label> <input type="text" id="courseCode"> <h3>Holes (Par, Difficulty, Distance)</h3> <table id="holesTable"> <thead> <tr> <th>Hole</th> <th>Par</th> <th>Difficulty</th> <th>Distance</th> </tr> </thead> <tbody id="holesContainer"></tbody> </table> <p id="totalPar">Total Par: 0</p> <p id="totalDistance">Total Distance: 0</p> <button onclick="updateCourseData()">Update Course Data</button> <button onclick="cancelUpdate()">Cancel</button> <p id="updateMessage" style="color: green; display: none;">Course data updated successfully!</p> </div> </div> <script> const correctPassword = "new"; // Password for verification let isManualEntry = false; // Function to verify password function verifyPassword() { const passwordInput = document.getElementById("password").value; if (passwordInput === correctPassword) { document.getElementById("passwordSection").style.display = "none"; document.getElementById("manualInputSection").style.display = "block"; // Show the next section after password is verified } else { document.getElementById("errorMessage").style.display = "block"; } } // Function to set the manual entry flag function setManualEntry() { const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; if (manualCountry && manualCourseCode) { isManualEntry = true; populateTeeList(); document.getElementById("manualInputSection").style.display = "none"; document.getElementById("teeSelectionSection").style.display = "block"; } else { alert("Please enter both country and course code."); } } // Function to populate the tee list function populateTeeList() { const teeSelect = document.getElementById("teeSelect"); const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; fetch(`https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/listTees`) .then(response => response.json()) .then(teeList => { teeSelect.innerHTML = ''; teeList.forEach(tee => { const option = document.createElement("option"); option.value = tee; option.text = tee.charAt(0).toUpperCase() + tee.slice(1) + " Tee"; teeSelect.appendChild(option); }); }) .catch(error => console.error('Error fetching tee list:', error)); } function loadTeeData() { const teeType = document.getElementById("teeSelect").value; const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; // Ensure .json is added only once const teeFile = teeType.endsWith(".json") ? teeType : `${teeType}.json`; fetch(`https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/${teeFile}`) .then(response => response.json()) .then(data => { document.getElementById("editSection").style.display = "block"; document.getElementById('courseName').value = data.Course; document.getElementById('country').value = data.country; document.getElementById('courseCode').value = data.courseCode; const holesContainer = document.getElementById('holesContainer'); holesContainer.innerHTML = ''; data.Par.forEach((par, index) => { const difficulty = data.Difficulty[index]; const distance = data.Distance[index]; const row = ` <tr> <td>${index + 1}</td> <td><input type="number" id="par${index}" value="${par}" style="width: 60px;"></td> <td><input type="number" id="difficulty${index}" value="${difficulty}" style="width: 80px;"></td> <td><input type="number" id="distance${index}" value="${distance}" style="width: 100px;"></td> </tr> `; holesContainer.innerHTML += row; }); calculateTotals(); }) .catch(error => console.error('Error loading tee data:', error)); } function updateCourseData() { const parValues = []; const difficultyValues = []; const distanceValues = []; for (let i = 0; i < 18; i++) { parValues.push(parseInt(document.getElementById(`par${i}`).value)); difficultyValues.push(parseInt(document.getElementById(`difficulty${i}`).value)); distanceValues.push(parseInt(document.getElementById(`distance${i}`).value)); } const updatedData = { Course: document.getElementById('courseName').value, country: document.getElementById('country').value, courseCode: document.getElementById('courseCode').value, Par: parValues, Difficulty: difficultyValues, Distance: distanceValues }; const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; const teeFileName = document.getElementById("teeSelect").value; // Updated URL to match the server route we'll create const url = `https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/updateTee/${teeFileName}`; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(updatedData) }) .then(response => { console.log('Response status:', response.status); if (response.ok) { console.log('Update successful'); document.getElementById('updateMessage').textContent = 'Course data updated successfully!'; document.getElementById('updateMessage').style.display = 'block'; setTimeout(() => { document.getElementById('editSection').style.display = 'none'; document.getElementById('teeSelectionSection').style.display = 'block'; }, 2000); } else { console.error('Failed to update course data.'); document.getElementById('updateMessage').textContent = 'Failed to update course data. Please try again.'; document.getElementById('updateMessage').style.display = 'block'; } }) .catch(error => { console.error('Error updating course data:', error); document.getElementById('updateMessage').textContent = 'Error updating course data. Please try again.'; document.getElementById('updateMessage').style.display = 'block'; }); } function cancelUpdate() { document.getElementById('editSection').style.display = 'none'; document.getElementById('teeSelectionSection').style.display = 'block'; } // Function to calculate totals for holes function calculateTotals() { let totalPar = 0; let totalDistance = 0; for (let i = 0; i < 18; i++) { totalPar += parseInt(document.getElementById(`par${i}`).value) || 0; totalDistance += parseInt(document.getElementById(`distance${i}`).value) || 0; } document.getElementById('totalPar').textContent = `Total Par: ${totalPar}`; document.getElementById('totalDistance').textContent = `Total Distance: ${totalDistance}`; } function addNewTeeFile() { // Clear all the form fields document.getElementById('courseName').value = ''; document.getElementById('country').value = ''; document.getElementById('courseCode').value = ''; // Generate blank fields for 18 holes const holesContainer = document.getElementById('holesContainer'); holesContainer.innerHTML = ''; for (let i = 0; i < 18; i++) { const row = ` <tr> <td>${i + 1}</td> <td><input type="number" id="par${i}" value="" style="width: 60px;"></td> <td><input type="number" id="difficulty${i}" value="" style="width: 80px;"></td> <td><input type="number" id="distance${i}" value="" style="width: 100px;"></td> </tr> `; holesContainer.innerHTML += row; } // Show the edit section with the blank form document.getElementById('editSection').style.display = 'block'; document.getElementById('teeSelectionSection').style.display = 'none'; // Set the currentTee to a new value from user input const newTee = prompt("Enter the name for the new Tee (e.g., bluetee):"); if (newTee) { currentTee = newTee; // Add a save button for the new tee const saveButton = document.createElement('button'); saveButton.textContent = 'Save New Tee'; saveButton.onclick = function() { saveNewTee(newTee); }; document.getElementById('editSection').appendChild(saveButton); } else { alert("Tee name cannot be empty."); } } function saveNewTee(teeName) { const parValues = []; const difficultyValues = []; const distanceValues = []; for (let i = 0; i < 18; i++) { parValues.push(parseInt(document.getElementById(`par${i}`).value) || 0); difficultyValues.push(parseInt(document.getElementById(`difficulty${i}`).value) || 0); distanceValues.push(parseInt(document.getElementById(`distance${i}`).value) || 0); } const newTeeData = { Course: document.getElementById('courseName').value, country: document.getElementById('country').value, courseCode: document.getElementById('courseCode').value, Par: parValues, Difficulty: difficultyValues, Distance: distanceValues }; const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; const url = `https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/createTee/${teeName}`; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(newTeeData) }) .then(response => { console.log('Response status:', response.status); if (response.ok) { console.log('New tee created successfully'); document.getElementById('updateMessage').textContent = 'New tee created successfully!'; document.getElementById('updateMessage').style.display = 'block'; setTimeout(() => { document.getElementById('editSection').style.display = 'none'; document.getElementById('teeSelectionSection').style.display = 'block'; // Refresh the tee list populateTeeList(); }, 2000); } else { console.error('Failed to create new tee.'); document.getElementById('updateMessage').textContent = 'Failed to create new tee. Please try again.'; document.getElementById('updateMessage').style.display = 'block'; } }) .catch(error => { console.error('Error creating new tee:', error); document.getElementById('updateMessage').textContent = 'Error creating new tee. Please try again.'; document.getElementById('updateMessage').style.display = 'block'; }); } function deleteTeeFile() { const selectedTee = document.getElementById("teeSelect").value; const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; if (!selectedTee) { alert("Please select a tee to delete."); return; } // Confirm the delete action const confirmed = confirm(`Are you sure you want to delete the tee: ${selectedTee}?`); if (!confirmed) { return; } const url = `https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/${selectedTee}`; fetch(url, { method: 'DELETE', }) .then(response => { if (response.ok) { alert(`Tee file ${selectedTee} deleted successfully.`); // Remove the deleted tee from the select list const teeSelect = document.getElementById("teeSelect"); const optionToDelete = teeSelect.querySelector(`option[value="${selectedTee}"]`); teeSelect.removeChild(optionToDelete); } else { throw new Error('Failed to delete the tee file.'); } }) .catch(error => { console.error('Error deleting tee file:', error); alert('Error deleting tee file. Please try again.'); }); } </script> </body> </html>
    https://whatsonchain.com/tx/undefined
  • jNÑð<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Embedded Image Container</title> </head> <body> <div id="imageContainer" data-image="‰PNG  IHDRÒÌa¼)ÝsRGB®ÎégAMA± üa pHYsÃÃÇo¨dÿ¥IDATx^ìýù“eKv× ®3Ÿ˜‡Œœ3oÞ±êNUukTRIPÄ{hhëæÑÖ¯ÿ~C†aú~Ì 6kŒ6Ã0ãñ`’žTP%©¤nÕ½uç)ïósęûûYË}Ÿ}"#2óÂ¥*ŠXë¸owßîËǯ/ß¾}WÌl$>¤C:¤C:¤C:¤@ÕdÒ!Ò!Ò!Ò
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jN~?<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Screenshot 2024-04-16 192658.png</title> <style> body { margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; min-height: 100vh; background: #fff; } img { max-width: 100%; hei
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jMn {"name":"EncodedFiles","files":[{"name":"exportalbum3.html","size":1922,"type":"text/html","content":"YXN5bmMgZnVuY3Rpb24gZXhwb3J0SW5kZXhlZERCKCkgew0KICAgIGxldCBkYiA9IG51bGw7DQogICAgdHJ5IHsNCiAgICAgICAgLy8gT3BlbiB0aGUgY29ycmVjdCBkYXRhYmFzZQ0KICAgICAgICBkYiA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbignUGhvdG9BbGJ1bURCJywgMSk7DQogICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7DQogICAgICAgICAgIC
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jM­-<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Welcome to BSVGolf.com</title> <style> body, html { margin: 0; padding: 0; font-family: Arial, sans-serif; height: 100%; overflow: hidden; } #header { background-color: #4CAF50; color: white; padding:
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jM;{"name":"EncodedFiles","files":[{"name":"blog_phanpp.json","size":536,"type":"application/json","content":"eyJVVWlkIjoiYmxvZ18xNzM3MDMxMjIwMzU4X2FiZ25hbmh4byIsInR5cGUiOiJCbG9nIiwic3RvcmFnZSI6ImxvY2FsIiwidGl0bGUiOiJodHRwczovL21lZGl1bS5jb20vQHBoYW5wcDExL2ludHJvZHVjaW5nLWNoYWluZGlzay00OTg5NmJmZTBkNDciLCJjb250ZW50IjoiIiwidGFncyI6IiIsIkFsdCI6InBoYW5wcCIsImxvbmdVUkwiOiJodHRwczovL21lZGl1bS5jb20vQHBoYW5wcDExL2ludHJvZHVjaW5nLWNoYWluZGlzay00OTg5NmJmZTBkNDciLCJSZWNvcmRfdHhpZCI6IiIsInBheW1lbnRUeElkIjoiI
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jNLÈ<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>golf-ball.png</title> <style> body { margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; min-height: 100vh; background: #fff; } img { max-width: 100%; height: auto;
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jM!<{"name":"EncodedFiles","files":[{"name":"publishmodalA4.html","size":11463,"type":"text/html","content":"Y29uc3QgUHVibGlzaE1vZGFsID0gZnVuY3Rpb24oeyB0eGlkLCBwb3N0Z3Jlc1JlY29yZCwgb25DbG9zZSwgb25TdWNjZXNzIH0pIHsKICAgIC8vIENoYW5nZSB0aGUgY29tcG9uZW50IHRvIHVzZSBob29rcyBkaXJlY3RseSB3aXRob3V0IGRlc3RydWN0dXJpbmcgZnJvbSBSZWFjdAogICAgY29uc3QgbG9hZGluZyA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGVycm9yID0gUmVhY3QudXNlU3RhdGUoJycpOwogICAgY29uc3Qgc3RlcCA9IFJlYWN0LnVzZVN0YXRlKCdpbml0aWFsJyk7CiAgICBjb25
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jMŸ{"name":"EncodedFiles","files":[{"name":"dualcltvcontract2.html","size":5219,"type":"text/html","content":"Ly8gTWFpbiBDTFRWIG1hbmFnZXIgZXhwb3J0IGZ1bmN0aW9uCmNvbnN0IGNsdHZDb2RlID0gYApmdW5jdGlvbiBleHBvcnREdWFsQ0xUVk1hbmFnZXIoKSB7CiAgICByZXR1cm4gKGNsdHZDb2RlKSA9PiB7CiAgICAgICAgcmV0dXJuIFxgPCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICAgIDx0aXRsZT5EdWFsIENMVFYgQ29ud
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
Total Output:
0.00022932 BSV

2 Outputs

Total Output:
0.00022929 BSV