Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php /* Dev By Hoang Skyht 18-06-2024 */$OOO000000=urldecode('%66%67%36%73%62%65%68%70%72..
Decoded Output download
$O000O0O00=$OOO000O00($OOO0O0O00,'rb');$O0O00OO00($O000O0O00,0x4a2);$OO00O00O0=$OOO0000O0($OOO00000O($O0O00OO00($O000O0O00,0x17c),'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPpQqSsVvXxZz0123456789+/=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'));eval($OO00O00O0);$OO00O00O0=str_replace('__FILE__',"'".$OOO0O0O00."'",$OOO0000O0($OOO00000O($O0O00OO00($O000O0O00,$OO00O0000),'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPpQqSsVvXxZz0123456789+/=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));fclose($O000O0O00);eval($OO00O00O0);
namespace App\Models;
use App\Models\Exceptions\CouponException;
use App\Models\Exceptions\OrderException;
use App\Models\Traits\Serialize;
use Eloquent;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Throwable;
class Order extends Model
{
use Serialize;
const FIELD_ID = "id";
const FIELD_INVITE_USER_ID = "invite_user_id";
const FIELD_USER_ID = "user_id";
const FIELD_PLAN_ID = "plan_id";
const FIELD_COUPON_ID = "coupon_id";
const FIELD_PAYMENT_ID = "payment_id";
const FIELD_TYPE = "type";
const FIELD_PRICE_META = "price_meta";
const FIELD_PRICE_NAME = "price_name";
const FIELD_TRADE_NO = "trade_no";
const FIELD_CALLBACK_NO = "callback_no";
const FIELD_TOTAL_AMOUNT = "total_amount";
const FIELD_DISCOUNT_AMOUNT = "discount_amount";
const FIELD_BALANCE_AMOUNT = "balance_amount";
const FIELD_STATUS = "status";
const FIELD_COMMISSION_STATUS = "commission_status";
const FIELD_COMMISSION_RATE = "commission_rate";
const FIELD_COMMISSION_BALANCE = "commission_balance";
const FIELD_PAID_AT = "paid_at";
const FIELD_CREATED_AT = "created_at";
const FIELD_UPDATED_AT = "updated_at";
const CALLBACK_NO_MANUAL_OPERATION = "manual_operation";
const STATUS_UNPAID = 0;
const STATUS_PENDING = 1;
const STATUS_CANCELLED = 2;
const STATUS_COMPLETED = 3;
const TYPE_NEW_ORDER = 1;
const TYPE_RENEW = 2;
const TYPE_CHANGE = 3;
const TYPE_RESET_PRICE = 4;
const TYPE_ONETIME = 5;
const TYPE_RECHARGE = 6;
const COMMISSION_STATUS_NEW = 0;
const COMMISSION_STATUS_PENDING = 1;
const COMMISSION_STATUS_VALID = 2;
const COMMISSION_STATUS_INVALID = 3;
protected $table = 'order';
protected $dateFormat = 'U';
protected $casts = [
self::FIELD_PRICE_META =>'collection',
self::FIELD_CREATED_AT =>'timestamp',
self::FIELD_UPDATED_AT =>'timestamp',
];
public function user()
{
return $this->belongsTo('App\Models\User')->first();
}
public function plan()
{
return $this->belongsTo("App\Models\Plan")->first();
}
public function coupon()
{
return $this->belongsTo("App\Models\Coupon")->first();
}
public function payment()
{
return $this->belongsTo("App\Models\Payment")->first();
}
public function isNewOrder(): bool
{
return $this->getAttribute(Order::FIELD_TYPE) === Order::TYPE_NEW_ORDER;
}
public function setUserDiscount(User $user)
{
$discountAmount = $this->getAttribute(self::FIELD_DISCOUNT_AMOUNT);
$totalAmount = $this->getAttribute(self::FIELD_TOTAL_AMOUNT);
$userDiscount = $user->getAttribute(User::FIELD_DISCOUNT);
if ($userDiscount >0) {
$this->setAttribute(self::FIELD_DISCOUNT_AMOUNT,$discountAmount +($totalAmount * ($userDiscount / 100)));
}
$this->setAttribute(self::FIELD_TOTAL_AMOUNT,($totalAmount -$this->getAttribute(self::FIELD_DISCOUNT_AMOUNT)));
}
public function setOrderType(User $user)
{
$priceMeta = $this->getAttribute(self::FIELD_PRICE_META);
$priceType = $priceMeta->get(Plan::SUB_FIELD_PRICE_TYPE);
$userPlanId = (int)$user->getAttribute(User::FIELD_PLAN_ID);
$planId = (int)$this->getAttribute(Order::FIELD_PLAN_ID);
$userExpiredAt = $user->getAttribute(User::FIELD_EXPIRED_AT);
if ($priceType === Plan::PRICE_TYPE_RESET) {
$type = self::TYPE_RESET_PRICE;
}else if ($priceType === Plan::PRICE_TYPE_ONETIME) {
$type = self::TYPE_ONETIME;
}else if ($userPlanId !== 0 &&$planId !== $userPlanId &&$userExpiredAt >time()) {
$type = self::TYPE_CHANGE;
}else if ($planId === $userPlanId &&$userExpiredAt >time()) {
$type = self::TYPE_RENEW;
}else {
$type = self::TYPE_NEW_ORDER;
}
$this->setAttribute(self::FIELD_TYPE,$type);
}
public function setInvite(User $user,bool $commissionFirstTimeEnable = true,int $commissionRate = 10)
{
$userInviteId = (int)$user->getAttribute(User::FIELD_INVITE_USER_ID);
$EmailMuaHang = $user->getAttribute(User::FIELD_EMAIL);
$totalAmount = (int)$this->getAttribute(self::FIELD_TOTAL_AMOUNT);
if ($userInviteId >0 &&$totalAmount >0) {
$this->setAttribute(self::FIELD_INVITE_USER_ID,$userInviteId);
$isCommission = false;
switch ($user->getAttribute(User::FIELD_COMMISSION_TYPE)) {
case User::COMMISSION_TYPE_SYSTEM:
$isCommission = (!$commissionFirstTimeEnable ||$user->countValidOrders() == 0);
break;
case User::COMMISSION_TYPE_CYCLE:
$isCommission = true;
break;
case User::COMMISSION_TYPE_ONETIME:
$isCommission = $user->countValidOrders() == 0;
break;
}
if ($isCommission) {
$inviter = User::find($userInviteId);
$totalAmount = $this->getAttribute(Order::FIELD_TOTAL_AMOUNT);
$Telegram_ID = (int)$inviter['telegram_id'];
if ($inviter &&$inviter->getAttribute(User::FIELD_COMMISSION_RATE)) {
$commissionBalance = $totalAmount * ($inviter->getAttribute(User::FIELD_COMMISSION_RATE) / 100);
}else {
$commissionBalance = $totalAmount * ($commissionRate / 100);
}
$this->setAttribute(self::FIELD_COMMISSION_BALANCE,$commissionBalance);
$this->setAttribute(self::FIELD_COMMISSION_RATE,$commissionRate);
}
}
}
public static function sumMonthIncome()
{
return self::where(self::FIELD_CREATED_AT,'>=',strtotime(date('Y-m-1')))
->where(self::FIELD_CREATED_AT,'<',time())
->whereNotIn(self::FIELD_STATUS,[self::STATUS_UNPAID,self::STATUS_CANCELLED])
->sum(self::FIELD_TOTAL_AMOUNT);
}
public static function sumDayIncome()
{
return self::where(self::FIELD_CREATED_AT,'>=',strtotime(date('Y-m-d')))
->where(self::FIELD_CREATED_AT,'<',time())
->whereNotIn(self::FIELD_STATUS,[self::STATUS_UNPAID,self::STATUS_CANCELLED])
->sum(self::FIELD_TOTAL_AMOUNT);
}
public static function sumLastMonthIncome()
{
return Order::where(self::FIELD_CREATED_AT,'>=',strtotime('-1 month',strtotime(date('Y-m-1'))))
->where(self::FIELD_CREATED_AT,'<',strtotime(date('Y-m-1')))
->whereNotIn(self::FIELD_STATUS,[self::STATUS_UNPAID,self::STATUS_CANCELLED])
->sum(self::FIELD_TOTAL_AMOUNT);
}
public static function countCommissionPending(): int
{
return self::where(self::FIELD_COMMISSION_STATUS,self::COMMISSION_STATUS_NEW)
->where(self::FIELD_INVITE_USER_ID,'!=',0)
->whereNotIn(self::FIELD_STATUS,[self::STATUS_UNPAID,self::STATUS_CANCELLED])
->where(self::FIELD_COMMISSION_STATUS,'>',0)
->count();
}
public static function findByTradeNo(string $tradeNo)
{
return self::where(self::FIELD_TRADE_NO,$tradeNo)->first();
}
public function useCoupon(string $couponCode)
{
$planId = $this->getAttribute(Order::FIELD_PLAN_ID);
$userId = $this->getAttribute(Order::FIELD_USER_ID);
$priceMeta = $this->getAttribute(Order::FIELD_PRICE_META);
$priceId = $priceMeta->get(Plan::SUB_FIELD_PRICE_ID);
$coupon = Coupon::checkCode($couponCode,$planId,$userId,$priceId);
$couponType = $coupon->getAttribute(Coupon::FIELD_TYPE);
$couponValue = $coupon->getAttribute(Coupon::FIELD_VALUE);
$couponLimitUse = $coupon->getAttribute(Coupon::FIELD_LIMIT_USE);
$totalAmount = $this->getAttribute(Order::FIELD_TOTAL_AMOUNT);
switch ($couponType) {
case 1:
$this->setAttribute(Order::FIELD_DISCOUNT_AMOUNT,$couponValue * 100);
break;
case 2:
$this->setAttribute(Order::FIELD_DISCOUNT_AMOUNT,$totalAmount * ($couponValue / 100));
break;
}
if ($this->getAttribute(Order::FIELD_DISCOUNT_AMOUNT) >$totalAmount) {
$this->setAttribute(Order::FIELD_DISCOUNT_AMOUNT,$totalAmount);
}
if ($couponLimitUse >0) {
$coupon->setAttribute(Coupon::FIELD_LIMIT_USE,$couponLimitUse -1);
}
return $coupon->save() ?$coupon->getKey() : 0;
}
public function cancel(): bool
{
$user = $this->user();
if ($user === null) {
throw new OrderException("user not exist",1);
}
DB::beginTransaction();
$balanceAmount = $this->getAttribute(Order::FIELD_BALANCE_AMOUNT);
if ($balanceAmount >0) {
$user->addBalance($balanceAmount);
if (!$user->save()) {
DB::rollBack();
throw new OrderException("user save failed, rollback: ".$user->getKey(),2);
}
}
$this->setAttribute(Order::FIELD_STATUS,Order::STATUS_CANCELLED);
if (!$this->save()) {
DB::rollBack();
throw new OrderException("order save failed, rollback: ".$this->getKey(),3);
}
DB::commit();
return true;
}
public function open(): bool
{
$user = $this->user();
if ($user === null) {
throw new OrderException("user not exist",1);
}
if ($this->getAttribute(self::FIELD_TYPE) === Order::TYPE_RECHARGE) {
return $this->_openRecharge($user);
}
$plan = $this->plan();
if ($plan === null) {
throw new OrderException("plan not found, break: ".$this->getAttribute(Order::FIELD_PLAN_ID),4);
}
DB::beginTransaction();
$orderPriceMeta = $this->getAttribute(Order::FIELD_PRICE_META);
$orderPriceType = $orderPriceMeta->get(Plan::SUB_FIELD_PRICE_TYPE);
switch ($orderPriceType) {
case Plan::PRICE_TYPE_ONETIME:
$user->resetTraffic();
$user->buyPlan($plan);
break;
case Plan::PRICE_TYPE_RESET:
$user->resetTraffic();
break;
case Plan::PRICE_TYPE_LOOP_LIMIT:
$orderType = $this->getAttribute(Order::FIELD_TYPE);
$priceExpireType = $orderPriceMeta->get(Plan::SUB_FIELD_PRICE_EXPIRE_TYPE);
$priceExpireValue = $orderPriceMeta->get(Plan::SUB_FIELD_PRICE_EXPIRE_VALUE);
$userExpiredAt = $user->getAttribute(User::FIELD_EXPIRED_AT);
$userOrderDay = $user->getAttribute(User::FIELD_ORDER_DAY);
if ($orderType === Order::TYPE_NEW_ORDER ||$orderType === Order::TYPE_CHANGE) {
$user->resetTraffic();
$userExpiredAt = time();
}
if ($priceExpireValue === null) {
$priceExpireValue = 0;
}
if ($orderType === Order::TYPE_RENEW) {
$user->buyPlan($plan,Plan::expiredTime($priceExpireType,$priceExpireValue,$userExpiredAt),$userOrderDay);
}else {
$user->buyPlan($plan,Plan::expiredTime($priceExpireType,$priceExpireValue,$userExpiredAt),date('d',time()));
}
break;
default:
break;
}
if (!$user->save()) {
DB::rollBack();
throw new OrderException("user saved failed, rollback: ".$user->getKey(),2);
}
$this->setAttribute(Order::FIELD_STATUS,Order::STATUS_COMPLETED);
if (!$this->save()) {
DB::rollBack();
throw new OrderException("order save failed, rollback: ".$this->getKey(),3);
}
DB::commit();
return true;
}
private function _openRecharge(User $user): bool
{
DB::beginTransaction();
$totalAmount = $this->getAttribute(Order::FIELD_TOTAL_AMOUNT);
$user->increment(User::FIELD_BALANCE,$totalAmount);
$this->setAttribute(Order::FIELD_STATUS,Order::STATUS_COMPLETED);
if (!$user->save()) {
DB::rollBack();
throw new OrderException("user saved failed, rollback: ".$user->getKey(),2);
}
$this->setAttribute(Order::FIELD_STATUS,Order::STATUS_COMPLETED);
if (!$this->save()) {
DB::rollBack();
throw new OrderException("order save failed, rollback: ".$this->getKey(),3);
}
DB::commit();
return true;
}
public static function getCouponUsedCount($couponId,$userId): int
{
return self::where(self::FIELD_COUPON_ID,$couponId)
->where(self::FIELD_USER_ID,$userId)
->whereNotIn(self::FIELD_STATUS,[self::STATUS_UNPAID,self::STATUS_CANCELLED])
->count();
}
};
Did this file decode correctly?
Original Code
<?php /* Dev By Hoang Skyht 18-06-2024 */$OOO000000=urldecode('%66%67%36%73%62%65%68%70%72%61%34%63%6f%5f%74%6e%64');$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$OOO000O00=$OOO000000{0}.$OOO000000{12}.$OOO000000{7}.$OOO000000{5}.$OOO000000{15};$O0O000O00=$OOO000000{0}.$OOO000000{1}.$OOO000000{5}.$OOO000000{14};$O0O000O0O=$O0O000O00.$OOO000000{11};$O0O000O00=$O0O000O00.$OOO000000{3};$O0O00OO00=$OOO000000{0}.$OOO000000{8}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};$OOO00000O=$OOO000000{3}.$OOO000000{14}.$OOO000000{8}.$OOO000000{14}.$OOO000000{8};$OOO0O0O00=__FILE__;$OO00O0000=0x3728;eval($OOO0000O0('JE8wMDBPME8wMD0kT09PMDAwTzAwKCRPT08wTzBPMDAsJ3JiJyk7JE8wTzAwT08wMCgkTzAwME8wTzAwLDB4NGEyKTskT08wME8wME8wPSRPT08wMDAwTzAoJE9PTzAwMDAwTygkTzBPMDBPTzAwKCRPMDAwTzBPMDAsMHgxN2MpLCdFbnRlcnlvdXdraFJIWUtOV09VVEFhQmJDY0RkRmZHZ0lpSmpMbE1tUHBRcVNzVnZYeFp6MDEyMzQ1Njc4OSsvPScsJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nKSk7ZXZhbCgkT08wME8wME8wKTs='));return;?>gJYvmPBIMhkr9NHenNHenNHe1zfukgFMaXdoyjcUImb19oUAxyb18mRtwmwJ4LT09NHr8XTzEXRJwmwJXLT09NHeEXHr8XhtONT08XHeEXHr8Pkr8XTzEXT08XHtILTzEXHr8XTzEXRtONTzEXTzEXHeEpRtfydmOlFmlvfbfqDykwBAsKa09aaryiWMkeC0OLOMcuc0lpUMpHdr1sAunOFaYzamcCGyp6HerZHzW1YjF4KUSvNUFSk0ytW0OyOLfwUApRTr1KT1nOAlYAaacbBylDCBkjcoaMc2ipDMsSdB5vFuyZF3O1fmf4GbPXHTwzYeA2YzI5hZ8mhULpK2cjdo9zcUILTzEXHr8XTzEXhTslfMyShtONTzEXTzEXTzEpKX==tM5idBazFoyjcUnnFunFTB9LcBxzKXp1F2AIWbnXbr1vcoaSF1xyGoYlFuOpd25zbrYvfbnvdLa4C2aXfolvdjShfbYlwryXFyxYd2OlduYFObijcbn0DB9VF1xNFMOlFLa4C2aXfolvdjShfbYlwryXFyxYd2OlduYFaukiDbOzbyYlFMlidol6cTShfbYlwraSd3y1cB50KXp1F2AIUBxSfB1pdMy0caxrCbOiCMyzcaxydo9xfBaVfyxtfBlScoaZKXp1F2AIUBxSfB1pdMy0caxrCbOiCMyzcaxydo9xfBaVfyxYd2OldeShfbYlwrlSduasDB5ifoaFOoy0CBkiF2aFOBxvFbaldmOFAMaSCbOpd25zbrkldo9Vc3YAdzShfbYlwrlSduasDB5ifoaFA3aXFo9Zfyxed2xScBY0DB9VKXp1F2AIUBxSfB1pdMy0caxTfbnXd3k0brciC2yLcbYFOrw7tmazcUnADukvf2yJdoA7tMYSCbYzwr9ZcoaZwoa4foaVcuHITB9LcBXhGXp1F2AIA2aZDBySDbplKXpjd25zftnoUAaHOy9kOtE9wtkpctw7tMYvdmY0wrckOAxrb0lKaLlAOa9aA0aUb0lrwe0IwMlVfMl0ca91F2aZb2lLwjShC29VF3WIOLlyTrOgaaYyAl9kOtE9wtk1F2aZb2lLwjShC29VF3WIOLlyTrOgArxnTl9kOtE9wtkXdoyVb2lLwjShC29VF3WIOLlyTrOgW09aAr9Kb0lrwe0IwMYvfbnvdl9pctw7tMYvdmY0wrckOAxrb1nnBA1yTlOgUAWINUEJFoy5dBaVfy9pctw7tMYvdmY0wrckOAxrb1OcArAINUEJfulXcUw7tMYvdmY0wrckOAxrb1nUUAYyb01yarrINUEJFukpC2agdBa0CUw7tMYvdmY0wrckOAxrb1nUUAYyb05nTAAINUEJFukpC2agdMyscUw7tMYvdmY0wrckOAxrb1OUWAOyb05Nwe0IwmOZCBOlb25vwjShC29VF3WIOLlyTrOgW0yHTrknW0sgTL8INUEJC2ySdokiC2sgdM8JKXpjd25zftnoUAaHOy9AT1OnTy9nTA9aTlWINUEJfo90CBxgCB1vfB50wjShC29VF3WIOLlyTrOgOrlTW09aTlOgWA1NaA5Awe0IwMOpF2YvfB50b2ysd3aVftw7tMYvdmY0wrckOAxrb0knTryKW0agWA1NaA5Awe0IwMkidoyVC2agCB1vfB50wjShC29VF3WIOLlyTrOgA1OnayaTwe0IwmY0CbO1FZw7tMYvdmY0wrckOAxrb0YNTA1kA1YkT05gA1OnayaTwe0IwMYvdB1pF3Ypd25gF3OifuazwjShC29VF3WIOLlyTrOgW09YTAlTA0lNTl9UWaOywe0IwMYvdB1pF3Ypd25gFMy0cUw7tMYvdmY0wrckOAxrb0YNTA1kA1YkT05gWLyHWA5eOUE9wtkjd21sDbYzDB9Vb2kidoyVC2AJKXpjd25zftnoUAaHOy9WWAlrb0yAwe0IwmniDBOgCbWJKXpjd25zftnoUAaHOy9eALanararb0yAwe0IwMYZcBy0cBOgCbWJKXpjd25zftnoUAaHOy9aArOnararb0yAwe0IwmaXcoy0cBOgCbWJKXpjd25zftneWAxHWLyeU19KT19YWA5aWAxgT1nyALyAUA9Kwe0IwM1idmaidy9vFoaZCbOpd24JKXpjd25zftnTaryAaaYgaA5WWAlrwe0IHeShC29VF3WIA1OnayaTb1nyTLOkTLFINUExKXpjd25zftnTaryAaaYgW0yKW0aHTrarwe0IHjShC29VF3WIA1OnayaTb0YNTanHOaOyOtE9weH7tMYvdmY0wyOcAragTLabb09UOraUwe0IHTShC29VF3WIaylWOa9UOA5yaZE9wew7tMYvdmY0wyOcAragW0inTLfywe0IHzShC29VF3WIaylWOa9UOaYyay9WALleOUE9weW7tMYvdmY0wyOcAragT05yarlYOUE9weA7tMYvdmY0wyOcAragALaeUryUO0AINUE2KXpjd25zftneT01YUaYTUA9Kb1YAWaOaA19KOaFINUEXKXpjd25zftneT01YUaYTUA9Kb1YAWaOaA19WOA5rUA5uwe0IHTShC29VF3WIW09YTAlTA0lNTl9TaryAaaYgaLyHUAWINUEZKXpjd25zftneT01YUaYTUA9Kb1YAWaOaA19kTlcnTrlrwe0IHzShFukvfoajfoaLwtO0CBkScUE9wtfvFMOlFJF7tmnZd3OlC3OlctELcoy0cAcvFM1iftE9wtfakzShFukvfoajfoaLwtOjCbY0FZE9wyShF2aScjP6OLlyTrOgAykkW0agTAaAWUE9NJfjd2xScBY0DB9VkZXhF2aScjP6OLlyTrOgW1kyWaOyOy9natE9NJf0DB1lF3OidbEmREpzcBxMKjpoUAaHOy9aArOnararb0yAwe0+k3OpdBazfoysFtFStl07tmn1CMxpCZnMfB5jfolvdJn1F2aZhtLhGXpZcbO1FM4IkuOPDbHsNMkldo9Vc3YAdZImWbnXbr1vcoaSF1xaF2aZkZLsNMcpFmY0htL7tm0hFuaJdoljwoc1dMY0DB9VwunSCB4PhWp7tmklfuaZdJELfoipFZ0+CMaSd25mF1OvhtknFunFTB9LcBxzbynSCB4JhU0+cMlZF3WPhTShgWpXfBkSDBHIcmaVC3Opd24IC291Fo9VhtLhGXpZcbO1FM4IkuOPDbHsNMkldo9Vc3YAdZIJWbnXbr1vcoaSF1xed3aXd24JhU0+cMlZF3WPhTShgWpXfBkSDBHIcmaVC3Opd24IFoy5dBaVftIptmShFMa0fbkVwtO0DolzRT5JcBxvdMfzao8PwLyXFyxYd2OlduYFAoy5dBaVftwpRT5MDbkzftIpKXp9tmn1CMxpCZnMfB5jfolvdJnpF05lf09ZcoaZhtL6wokvd2XhGXpZcbO1FM4IkuOPDbHsNMflfry0fukpCma0cUiNFMOlFjP6OLlyTrOgaylWOULINT09wr9ZcoaZKjpABanyb05ya19NALOyAjShgWpXfBkSDBHIcmaVC3Opd24IF2a0abYlFLOpF2YvfB50hyazcbwIkuazcbwptmShkoOpF2YvfB50WB1vfB50we0IkuOPDbHsNMflfry0fukpCma0cUizcBxMKjpoUAaHOy9rUaYeT1aKay9nTA9aTlWpKXPLfo90CBxndB91dmWINUELfoipFZ0+c2a0WbO0FMlJfbOlhuYldoC6KLckOAxrb1ONaryHb0yYT1aKatL7tJO1F2aZOolzC291dmWINUELfbYlFJ0+c2a0WbO0FMlJfbOlhyazcbw6KLckOAxrb0OkA0YNaA5AhTShDBCIhtO1F2aZOolzC291dmWINjEpwuShkuOPDbHsNmYlfry0fukpCma0cUizcBxMKjpoUAaHOy9rUaYeT1aKay9nTA9aTlWSkoOpF2YvfB50WB1vfB50wtSPkuOvfoySWB1vfB50wtPIhtO1F2aZOolzC291dmWIRZExHeEphUL7tm0hkuOPDbHsNmYlfry0fukpCma0cUizcBxMKjpoUAaHOy9AT1OnTy9nTA9aTlWShtO0d3Oidrysd3aVftEskuOPDbHsNMflfry0fukpCma0cUizcBxMKjpoUAaHOy9rUaYeT1aKay9nTA9aTlWphUL7tm0hFuaJdoljwoc1dMY0DB9VwuYlfr9ZcoaZaulXcUiaF2aZwtO1F2aZhWp7tJOXFMljcA1lforINUELfoipFZ0+c2a0WbO0FMlJfbOlhuYldoC6KLckOAxrb1nUUAYyb01yarrpKXPLFukpC2aAGbnlwe0IkunZDBYlTBa0CU0+c2a0hynSCB46KlYaWl9oUAaHOy9WALleOa9ABanyhTShkuazcbkWdoyVUBWINUEPDB50hUO1F2aZRT5mcbOnfuOZDBk1foAPabYlFjP6OLlyTrOgArxnTl9kOtL7tJOXdoyVUBWINUEPDB50hUO0DolzRT5mcbOnfuOZDBk1foAPT3kLcbw6KLckOAxrb1nHWA5gUAWpKXPLfbYlFLa4FolZcBOnftE9wtO1F2aZRT5mcbOnfuOZDBk1foAPabYlFjP6OLlyTrOgOaiWUakyOy9natL7tMlMwtILFukpC2aAGbnlwe09NUnWdoyVKjpWALleOa9ABanyb1kyA0aAhUn7tJO0Gbnlwe0IF2aScjP6aylWOa9UOaYyay9WALleOTShgBaSF2AIDBCIhtOXFMljcaO5FoAINT09wynSCB46KlnUUAYyb1OcAragT05yarlYOULIGXPLfulXcUE9wuYldoC6KlOcAragT05yarlYOTShgBaSF2AIDBCIhtO1F2aZAoxidLlLwtr9NUEXwtCMkunSCB5kctEiNT0IkuazcbkWdoyVUBWIkJCLfbYlFLa4FolZcBOnftE+folscUIphUn7tJO0Gbnlwe0IF2aScjP6aylWOa9eUryKO0A7tm1lduYlwolMwtILFoxidLlLwe09NUELfbYlFlnSCB5kctEMkJO1F2aZObiXDbklcry0we50DB1lhtLpwuShkuO5FoAINUnzcBxMKjpABanyb1kyTLabKXp9cBxzcUn7tJO0Gbnlwe0IF2aScjP6aylWOa9KOafgT1krOaw7tm0hkuOPDbHsNmYlfry0fukpCma0cUizcBxMKjpoUAaHOy9ABanyRtO0Gbnl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@Tq{jeQhA
Function Calls
| fopen | 1 |
| fread | 3 |
| strtr | 2 |
| fclose | 1 |
| urldecode | 1 |
| str_replace | 1 |
| base64_decode | 3 |
Stats
| MD5 | 3a45ee45b6f99ef70993bd0a19e99730 |
| Eval Count | 3 |
| Decode Time | 95 ms |