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 eval("?>".base64_decode("PD9waHANCg0KbmFtZXNwYWNlIEFwcFxIdHRwXENvbnRyb2xsZXJzOw0KDQp..

Decoded Output download

?>b'<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Mixins\Installment\InstallmentPlans;
use App\Models\AdvertisingBanner;
use App\Models\Blog;
use App\CoursePrice;
use App\Models\Bundle;
use App\Models\Cart;
use App\Models\FeatureWebinar;
use App\Models\HomePageStatistic;
use App\Models\HomeSection;
use App\Models\Head;
use App\Models\Product;
use App\Models\Role;
use App\Models\Sale;
use App\Models\SpecialOffer;
use App\Models\Subscribe;
use App\Models\Ticket;
use App\Models\TrendCategory;
use App\Models\UpcomingCourse;
use App\Models\Webinar;
use App\Models\Testimonial;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\CourseApplication;
use File;
use Validator;
use App\Models\Category;
use Auth;
use App\Models\Cookie;
use App\Models\AcademicScholarship;
use App\Models\CountryScholarship;
use App\Models\Query;
use App\Models\Fee;
use App\Models\UserLearningTime;



class ApplyFormController extends Controller
{
    public function apply($id)
    {

        $data = CoursePrice::find($id);
        $webinar=Webinar::where(\'status\', \'active\')->get();
        $heads = Head::all();

       return view(\'web.default.pages.apply\',compact(\'data\',\'webinar\',\'heads\'));
    }
    
    public function query()
    {
       $webinar=Webinar::where(\'status\', \'active\')->get();
       return view(\'web.default.pages.query\',compact(\'webinar\'));
    }
    
    
    
     public function query_store(request $request){
        
             
          $validatedData = $request->validate([
             \'fname\' => \'required\',
             \'email\' => \'required\',
             \'number\' => \'required\',
             \'country\' => \'required\',
             \'program\' => \'required\',
        ]);
        
        
        $query = new Query();
        $query->fname   =     $request->fname;
        $query->email   =     $request->email;
        $query->number  =     $request->number;
        $query->country =     $request->country;
        $query->program =     $request->program;
        
        $query->save();
        return redirect(\'query-applied\');
        
        
     }
    
      public function scholarship_applied(request $request){
            return view(\'web.default.pages.thanks\');
        }
        
        
        
       public function query_applied(){
            return view(\'web.default.pages.ThanksForm\');
       }
    
        public function new_apply()
    {
         $webinar=Webinar::where(\'status\', \'active\')->get();
         $heads = Head::all();
         return view(\'web.default.pages.new_apply\',compact(\'webinar\',\'heads\'));
    }
    
     public function storeform(request $request){
         
         $item_id = $request->program;
         $user = auth()->user();
        
        $validatedData = $request->validate([
            \'dob\' => \'required|date\',
            \'nationality\' => \'required|string\',
            \'education\' => \'required|string\',
            \'institute\' => \'required|string\',
            \'graduation_year\' => \'required|numeric\',
            \'program\' => \'required|string\',
            \'declaration\' => \'required|boolean\',
        ]);
          


        $courseApplication = new CourseApplication();
        $courseApplication->course_id = auth()->user()->course_id ?? null;
        $courseApplication->email = auth()->user()->email;
        $courseApplication->name = auth()->user()->full_name;
        $courseApplication->phone_no = auth()->user()->mobile;
        $courseApplication->dob = $request->dob;
        $courseApplication->nationality = $request->nationality;
        $courseApplication->postal_address = $request->postal_address;
        $courseApplication->education = $request->education;
        $courseApplication->institute = $request->institute;
        $courseApplication->graduation_year = $request->graduation_year;
        $courseApplication->exprience = $request->exprience;
        $courseApplication->current_employment = $request->current_employment;
        $courseApplication->existing_job_title = $request->existing_job_title;
        $courseApplication->program = $request->program;
        $courseApplication->payment = $request->payment;
        $courseApplication->declaration = $request->declaration;
        $courseApplication->user_id = Auth::user()->id;


        if ($request->hasfile(\'certificate\')) {
            $destination = \'assets/admin/img/\' . $courseApplication->certificate;
            if (File::exists($destination)) {
                File::delete($destination);
            }
            $file = $request->file(\'certificate\');
            $extension = $file->getClientOriginalExtension();
            $filename = time() . \'.\' . $extension;
            $file->move(\'assets/admin/img/\', $filename);
            $courseApplication->certificate = $filename;
        }

        if ($request->hasfile(\'resume\')) {
            $destination = \'assets/admin/img/\' . $courseApplication->resume;
            if (File::exists($destination)) {
                File::delete($destination);
            }
            $file = $request->file(\'resume\');
            $extension = $file->getClientOriginalExtension();
            $filename = time() . \'.\' . $extension;
            $file->move(\'admin/img/\', $filename);
            $courseApplication->resume = $filename;
        }
        
        $item_name=\'webinar_id\';
          
          

   
   $data = [
    \'item_name\' => $item_name,
    \'item_id\' => $item_id
];
          if ($item_name == \'webinar_id\') {
                $result = $this->storeUserWebinarCart($user, $data);
            }
            
             if ($result != \'ok\') {
                return $result;
            }

        $courseApplication->save();

       
        
        return redirect(\'/cart\');
        
    }
    
    
    public function storeUserWebinarCart($user, $data)
    {
        $admissionFee =Fee::first();
        session([\'admission_fee\' => $admissionFee]);
        $webinar_id = $data[\'item_id\'];
        $ticket_id = $data[\'ticket_id\'] ?? null;

        $webinar = Webinar::where(\'id\', $webinar_id)
            ->where(\'private\', false)
            ->where(\'status\', \'active\')
            ->first();

        if (!empty($webinar) and !empty($user)) {
            $checkCourseForSale = checkCourseForSale($webinar, $user);

            if ($checkCourseForSale != \'ok\') {
                return $checkCourseForSale;
            }

            $activeSpecialOffer = $webinar->activeSpecialOffer();

            Cart::updateOrCreate([
                \'creator_id\' => $user->id,
                \'webinar_id\' => $webinar_id,
            ], [
                \'ticket_id\' => $ticket_id,
                \'special_offer_id\' => !empty($activeSpecialOffer) ? $activeSpecialOffer->id : null,
                \'created_at\' => time()
            ]);

            return \'ok\';
        }

        $toastData = [
            \'title\' => trans(\'public.request_failed\'),
            \'msg\' => trans(\'cart.course_not_found\'),
            \'status\' => \'error\'
        ];
        return back()->with([\'toast\' => $toastData]);
    }
    

    
  

    private function showGiftModal($user)
    {
        $gift = Gift::query()->where(\'email\', $user->email)
            ->where(\'status\', \'active\')
            ->where(\'viewed\', false)
            ->where(function ($query) {
                $query->whereNull(\'date\');
                $query->orWhere(\'date\', \'<\', time());
            })
            ->whereHas(\'sale\')
            ->first();

        if (!empty($gift)) {
            $gift->update([
                \'viewed\' => true
            ]);

            $data = [
                \'gift\' => $gift
            ];

            $result = (string)view()->make(\'web.default.panel.dashboard.gift_modal\', $data);
            $result = str_replace(array("\r\n", "\n", "  "), \'\', $result);

            return $result;
        }

        return null;
    }

    private function getMonthlySalesOrPurchase($user)
    {
        $months = [];
        $data = [];

        // all 12 months
        for ($month = 1; $month <= 12; $month++) {
            $date = Carbon::create(date(\'Y\'), $month);

            $start_date = $date->timestamp;
            $end_date = $date->copy()->endOfMonth()->timestamp;

            $months[] = trans(\'panel.month_\' . $month);

            if (!$user->isUser()) {
                $monthlySales = Sale::where(\'seller_id\', $user->id)
                    ->whereNull(\'refund_at\')
                    ->whereBetween(\'created_at\', [$start_date, $end_date])
                    ->sum(\'total_amount\');

                $data[] = round($monthlySales, 2);
            } else {
                $monthlyPurchase = Sale::where(\'buyer_id\', $user->id)
                    ->whereNull(\'refund_at\')
                    ->whereBetween(\'created_at\', [$start_date, $end_date])
                    ->count();

                $data[] = $monthlyPurchase;
            }
        }

        return [
            \'months\' => $months,
            \'data\' => $data
        ];
    }
    
     public function scholarship_form_one(request $request){
          return view(\'web.default.pages.scholarshipFormOne\');
      }
      
      public function scholarship_form_two(request $request){
          return view(\'web.default.pages.scholarshipFormTwo\');
      }
      
      
        public function academic_store(request $request){
          
           $validatedData = $request->validate([
            \'name\' => \'required\',
            \'email\' => \'required\',
            \'phone_number\' => \'required\',
            \'nationality\' => \'required\',
            \'current_address\' => \'required\',
            \'city\' => \'required\',
            \'country\' => \'required\',
            \'education\' => \'required\',
            \'institute\' => \'required\',
            \'transcript\' => \'required\',
            \'Question\' => \'required\',
        ]);
        
        

        
        
        
         $scholarship = new AcademicScholarship();
         $scholarship->name =  $request->name;
         $scholarship->user_id =  auth()->user()->id;
         $scholarship->email =  $request->email;
         $scholarship->phone_number = $request->phone_number;
         $scholarship->nationality = $request->nationality;
         $scholarship->city = $request->city;
         $scholarship->current_address = $request->current_address;
         $scholarship->country = $request->country;
         $scholarship->education = $request->education;
         $scholarship->institute = $request->institute;
         $scholarship->Question = $request->Question;
        



        if ($request->hasfile(\'transcript\')) {
            $destination = \'assets/admin/Scholarship/Academic/transcript\' . $scholarship->transcript;
            if (File::exists($destination)) {
                File::delete($destination);
            }
            $file = $request->file(\'transcript\');
            $extension = $file->getClientOriginalExtension();
            $filename = time() . \'.\' . $extension;
            $file->move(\'assets/admin/Scholarship/Academic/transcript\', $filename);
            $scholarship->transcript = $filename;
        }



        if ($request->hasfile(\'certificate\')) {
            $destination = \'assets/admin/Scholarship/Academic/certificate\' . $scholarship->certificate;
            if (File::exists($destination)) {
                File::delete($destination);
            }
            $file = $request->file(\'certificate\');
            $extension = $file->getClientOriginalExtension();
            $filename = time() . \'.\' . $extension;
            $file->move(\'assets/admin/Scholarship/Academic/certificate\', $filename);
            $scholarship->certificate = $filename;
        }
   
            $scholarship->save();
            return redirect(\'scholarship-applied\');

        
      }
      
      
      
      
      
      
      
      public function form_two_store(request $request){
          
           $validatedData = $request->validate([
            \'name\' => \'required\',
            \'email\' => \'required\',
            \'phone_number\' => \'required\',
            \'nationality\' => \'required\',
            \'dob\' => \'required\',
            \'country\' => \'required\',
            \'education\' => \'required\',
            \'institute\' => \'required\',
            \'passport\' => \'required\',
            \'Proof_of_residency\' => \'required\',
        ]);
        
        

        
        
        
         $scholarship = new CountryScholarship();
         $scholarship->name =  $request->name;
         $scholarship->user_id =  auth()->user()->id;
         $scholarship->email =  $request->email;
         $scholarship->phone_number = $request->phone_number;
         $scholarship->nationality = $request->nationality;
         $scholarship->dob = $request->dob;
         $scholarship->country = $request->country;
         $scholarship->education = $request->education;
         $scholarship->institute = $request->institute;
         $scholarship->passport = $request->passport;
         $scholarship->Proof_of_residency = $request->Proof_of_residency;
        



        if ($request->hasfile(\'passport\')) {
            $destination = \'assets/admin/Scholarship/Country/passport\' . $scholarship->passport;
            if (File::exists($destination)) {
                File::delete($destination);
            }
            $file = $request->file(\'passport\');
            $extension = $file->getClientOriginalExtension();
            $filename = time() . \'.\' . $extension;
            $file->move(\'assets/admin/Scholarship/Country/passport\', $filename);
            $scholarship->passport = $filename;
        }



        if ($request->hasfile(\'Proof_of_residency\')) {
            $destination = \'assets/admin/Scholarship/Country/ProofOfResidency\' . $scholarship->Proof_of_residency;
            if (File::exists($destination)) {
                File::delete($destination);
            }
            $file = $request->file(\'Proof_of_residency\');
            $extension = $file->getClientOriginalExtension();
            $filename = time() . \'.\' . $extension;
            $file->move(\'assets/admin/Scholarship/Country/ProofOfResidency\', $filename);
            $scholarship->Proof_of_residency = $filename;
        }
   
            $scholarship->save();
            return redirect(\'scholarship-applied\');
        
        
        
      }
      
      
         
 public function saveLearningTime(Request $request)
{
    $user_id = auth()->id(); // Assuming you are using Laravel\'s authentication
    $course_slug = $request->input(\'course_slug\');
    $time_spent_minutes = $request->input(\'time_spent_minutes\');

    // Assuming you have a record for each user and course
    $learningTime = UserLearningTime::where(\'user_id\', $user_id)
        ->where(\'course_slug\', $course_slug)
        ->first();

    if ($learningTime) {
        // Update existing record
        $learningTime->time_spent_minutes += $time_spent_minutes;
        $learningTime->save();
    } else {
        // Create a new record
        UserLearningTime::create([
            \'user_id\' => $user_id,
            \'course_slug\' => $course_slug,
            \'time_spent_minutes\' => $time_spent_minutes,
        ]);
    }

    return response()->json([\'success\' => true]);
} 
      
    
}'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCg0KbmFtZXNwYWNlIEFwcFxIdHRwXENvbnRyb2xsZXJzOw0KDQp1c2UgQXBwXEh0dHBcQ29udHJvbGxlcnNcQ29udHJvbGxlcjsNCnVzZSBBcHBcTWl4aW5zXEluc3RhbGxtZW50XEluc3RhbGxtZW50UGxhbnM7DQp1c2UgQXBwXE1vZGVsc1xBZHZlcnRpc2luZ0Jhbm5lcjsNCnVzZSBBcHBcTW9kZWxzXEJsb2c7DQp1c2UgQXBwXENvdXJzZVByaWNlOw0KdXNlIEFwcFxNb2RlbHNcQnVuZGxlOw0KdXNlIEFwcFxNb2RlbHNcQ2FydDsNCnVzZSBBcHBcTW9kZWxzXEZlYXR1cmVXZWJpbmFyOw0KdXNlIEFwcFxNb2RlbHNcSG9tZVBhZ2VTdGF0aXN0aWM7DQp1c2UgQXBwXE1vZGVsc1xIb21lU2VjdGlvbjsNCnVzZSBBcHBcTW9kZWxzXEhlYWQ7DQp1c2UgQXBwXE1vZGVsc1xQcm9kdWN0Ow0KdXNlIEFwcFxNb2RlbHNcUm9sZTsNCnVzZSBBcHBcTW9kZWxzXFNhbGU7DQp1c2UgQXBwXE1vZGVsc1xTcGVjaWFsT2ZmZXI7DQp1c2UgQXBwXE1vZGVsc1xTdWJzY3JpYmU7DQp1c2UgQXBwXE1vZGVsc1xUaWNrZXQ7DQp1c2UgQXBwXE1vZGVsc1xUcmVuZENhdGVnb3J5Ow0KdXNlIEFwcFxNb2RlbHNcVXBjb21pbmdDb3Vyc2U7DQp1c2UgQXBwXE1vZGVsc1xXZWJpbmFyOw0KdXNlIEFwcFxNb2RlbHNcVGVzdGltb25pYWw7DQp1c2UgQXBwXFVzZXI7DQp1c2UgSWxsdW1pbmF0ZVxIdHRwXFJlcXVlc3Q7DQp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcREI7DQp1c2UgQXBwXE1vZGVsc1xDb3Vyc2VBcHBsaWNhdGlvbjsNCnVzZSBGaWxlOw0KdXNlIFZhbGlkYXRvcjsNCnVzZSBBcHBcTW9kZWxzXENhdGVnb3J5Ow0KdXNlIEF1dGg7DQp1c2UgQXBwXE1vZGVsc1xDb29raWU7DQp1c2UgQXBwXE1vZGVsc1xBY2FkZW1pY1NjaG9sYXJzaGlwOw0KdXNlIEFwcFxNb2RlbHNcQ291bnRyeVNjaG9sYXJzaGlwOw0KdXNlIEFwcFxNb2RlbHNcUXVlcnk7DQp1c2UgQXBwXE1vZGVsc1xGZWU7DQp1c2UgQXBwXE1vZGVsc1xVc2VyTGVhcm5pbmdUaW1lOw0KDQoNCg0KY2xhc3MgQXBwbHlGb3JtQ29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXINCnsNCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwbHkoJGlkKQ0KICAgIHsNCg0KICAgICAgICAkZGF0YSA9IENvdXJzZVByaWNlOjpmaW5kKCRpZCk7DQogICAgICAgICR3ZWJpbmFyPVdlYmluYXI6OndoZXJlKCdzdGF0dXMnLCAnYWN0aXZlJyktPmdldCgpOw0KICAgICAgICAkaGVhZHMgPSBIZWFkOjphbGwoKTsNCg0KICAgICAgIHJldHVybiB2aWV3KCd3ZWIuZGVmYXVsdC5wYWdlcy5hcHBseScsY29tcGFjdCgnZGF0YScsJ3dlYmluYXInLCdoZWFkcycpKTsNCiAgICB9DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5KCkNCiAgICB7DQogICAgICAgJHdlYmluYXI9V2ViaW5hcjo6d2hlcmUoJ3N0YXR1cycsICdhY3RpdmUnKS0+Z2V0KCk7DQogICAgICAgcmV0dXJuIHZpZXcoJ3dlYi5kZWZhdWx0LnBhZ2VzLnF1ZXJ5Jyxjb21wYWN0KCd3ZWJpbmFyJykpOw0KICAgIH0NCiAgICANCiAgICANCiAgICANCiAgICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5X3N0b3JlKHJlcXVlc3QgJHJlcXVlc3Qpew0KICAgICAgICANCiAgICAgICAgICAgICANCiAgICAgICAgICAkdmFsaWRhdGVkRGF0YSA9ICRyZXF1ZXN0LT52YWxpZGF0ZShbDQogICAgICAgICAgICAgJ2ZuYW1lJyA9PiAncmVxdWlyZWQnLA0KICAgICAgICAgICAgICdlbWFpbCcgPT4gJ3JlcXVpcmVkJywNCiAgICAgICAgICAgICAnbnVtYmVyJyA9PiAncmVxdWlyZWQnLA0KICAgICAgICAgICAgICdjb3VudHJ5JyA9PiAncmVxdWlyZWQnLA0KICAgICAgICAgICAgICdwcm9ncmFtJyA9PiAncmVxdWlyZWQnLA0KICAgICAgICBdKTsNCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICAkcXVlcnkgPSBuZXcgUXVlcnkoKTsNCiAgICAgICAgJHF1ZXJ5LT5mbmFtZSAgID0gICAgICRyZXF1ZXN0LT5mbmFtZTsNCiAgICAgICAgJHF1ZXJ5LT5lbWFpbCAgID0gICAgICRyZXF1ZXN0LT5lbWFpbDsNCiAgICAgICAgJHF1ZXJ5LT5udW1iZXIgID0gICAgICRyZXF1ZXN0LT5udW1iZXI7DQogICAgICAgICRxdWVyeS0+Y291bnRyeSA9ICAgICAkcmVxdWVzdC0+Y291bnRyeTsNCiAgICAgICAgJHF1ZXJ5LT5wcm9ncmFtID0gICAgICRyZXF1ZXN0LT5wcm9ncmFtOw0KICAgICAgICANCiAgICAgICAgJHF1ZXJ5LT5zYXZlKCk7DQogICAgICAgIHJldHVybiByZWRpcmVjdCgncXVlcnktYXBwbGllZCcpOw0KICAgICAgICANCiAgICAgICAgDQogICAgIH0NCiAgICANCiAgICAgIHB1YmxpYyBmdW5jdGlvbiBzY2hvbGFyc2hpcF9hcHBsaWVkKHJlcXVlc3QgJHJlcXVlc3Qpew0KICAgICAgICAgICAgcmV0dXJuIHZpZXcoJ3dlYi5kZWZhdWx0LnBhZ2VzLnRoYW5rcycpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5X2FwcGxpZWQoKXsNCiAgICAgICAgICAgIHJldHVybiB2aWV3KCd3ZWIuZGVmYXVsdC5wYWdlcy5UaGFua3NGb3JtJyk7DQogICAgICAgfQ0KICAgIA0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gbmV3X2FwcGx5KCkNCiAgICB7DQogICAgICAgICAkd2ViaW5hcj1XZWJpbmFyOjp3aGVyZSgnc3RhdHVzJywgJ2FjdGl2ZScpLT5nZXQoKTsNCiAgICAgICAgICRoZWFkcyA9IEhlYWQ6OmFsbCgpOw0KICAgICAgICAgcmV0dXJuIHZpZXcoJ3dlYi5kZWZhdWx0LnBhZ2VzLm5ld19hcHBseScsY29tcGFjdCgnd2ViaW5hcicsJ2hlYWRzJykpOw0KICAgIH0NCiAgICANCiAgICAgcHVibGljIGZ1bmN0aW9uIHN0b3JlZm9ybShyZXF1ZXN0ICRyZXF1ZXN0KXsNCiAgICAgICAgIA0KICAgICAgICAgJGl0ZW1faWQgPSAkcmVxdWVzdC0+cHJvZ3JhbTsNCiAgICAgICAgICR1c2VyID0gYXV0aCgpLT51c2VyKCk7DQogICAgICAgIA0KICAgICAgICAkdmFsaWRhdGVkRGF0YSA9ICRyZXF1ZXN0LT52YWxpZGF0ZShbDQogICAgICAgICAgICAnZG9iJyA9PiAncmVxdWlyZWR8ZGF0ZScsDQogICAgICAgICAgICAnbmF0aW9uYWxpdHknID0+ICdyZXF1aXJlZHxzdHJpbmcnLA0KICAgICAgICAgICAgJ2VkdWNhdGlvbicgPT4gJ3JlcXVpcmVkfHN0cmluZycsDQogICAgICAgICAgICAnaW5zdGl0dXRlJyA9PiAncmVxdWlyZWR8c3RyaW5nJywNCiAgICAgICAgICAgICdncmFkdWF0aW9uX3llYXInID0+ICdyZXF1aXJlZHxudW1lcmljJywNCiAgICAgICAgICAgICdwcm9ncmFtJyA9PiAncmVxdWlyZWR8c3RyaW5nJywNCiAgICAgICAgICAgICdkZWNsYXJhdGlvbicgPT4gJ3JlcXVpcmVkfGJvb2xlYW4nLA0KICAgICAgICBdKTsNCiAgICAgICAgICANCg0KDQogICAgICAgICRjb3Vyc2VBcHBsaWNhdGlvbiA9IG5ldyBDb3Vyc2VBcHBsaWNhdGlvbigpOw0KICAgICAgICAkY291cnNlQXBwbGljYXRpb24tPmNvdXJzZV9pZCA9IGF1dGgoKS0+dXNlcigpLT5jb3Vyc2VfaWQgPz8gbnVsbDsNCiAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5lbWFpbCA9IGF1dGgoKS0+dXNlcigpLT5lbWFpbDsNCiAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5uYW1lID0gYXV0aCgpLT51c2VyKCktPmZ1bGxfbmFtZTsNCiAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5waG9uZV9ubyA9IGF1dGgoKS0+dXNlcigpLT5tb2JpbGU7DQogICAgICAgICRjb3Vyc2VBcHBsaWNhdGlvbi0+ZG9iID0gJHJlcXVlc3QtPmRvYjsNCiAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5uYXRpb25hbGl0eSA9ICRyZXF1ZXN0LT5uYXRpb25hbGl0eTsNCiAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5wb3N0YWxfYWRkcmVzcyA9ICRyZXF1ZXN0LT5wb3N0YWxfYWRkcmVzczsNCiAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5lZHVjYXRpb24gPSAkcmVxdWVzdC0+ZWR1Y2F0aW9uOw0KICAgICAgICAkY291cnNlQXBwbGljYXRpb24tPmluc3RpdHV0ZSA9ICRyZXF1ZXN0LT5pbnN0aXR1dGU7DQogICAgICAgICRjb3Vyc2VBcHBsaWNhdGlvbi0+Z3JhZHVhdGlvbl95ZWFyID0gJHJlcXVlc3QtPmdyYWR1YXRpb25feWVhcjsNCiAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5leHByaWVuY2UgPSAkcmVxdWVzdC0+ZXhwcmllbmNlOw0KICAgICAgICAkY291cnNlQXBwbGljYXRpb24tPmN1cnJlbnRfZW1wbG95bWVudCA9ICRyZXF1ZXN0LT5jdXJyZW50X2VtcGxveW1lbnQ7DQogICAgICAgICRjb3Vyc2VBcHBsaWNhdGlvbi0+ZXhpc3Rpbmdfam9iX3RpdGxlID0gJHJlcXVlc3QtPmV4aXN0aW5nX2pvYl90aXRsZTsNCiAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5wcm9ncmFtID0gJHJlcXVlc3QtPnByb2dyYW07DQogICAgICAgICRjb3Vyc2VBcHBsaWNhdGlvbi0+cGF5bWVudCA9ICRyZXF1ZXN0LT5wYXltZW50Ow0KICAgICAgICAkY291cnNlQXBwbGljYXRpb24tPmRlY2xhcmF0aW9uID0gJHJlcXVlc3QtPmRlY2xhcmF0aW9uOw0KICAgICAgICAkY291cnNlQXBwbGljYXRpb24tPnVzZXJfaWQgPSBBdXRoOjp1c2VyKCktPmlkOw0KDQoNCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXNmaWxlKCdjZXJ0aWZpY2F0ZScpKSB7DQogICAgICAgICAgICAkZGVzdGluYXRpb24gPSAnYXNzZXRzL2FkbWluL2ltZy8nIC4gJGNvdXJzZUFwcGxpY2F0aW9uLT5jZXJ0aWZpY2F0ZTsNCiAgICAgICAgICAgIGlmIChGaWxlOjpleGlzdHMoJGRlc3RpbmF0aW9uKSkgew0KICAgICAgICAgICAgICAgIEZpbGU6OmRlbGV0ZSgkZGVzdGluYXRpb24pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGZpbGUgPSAkcmVxdWVzdC0+ZmlsZSgnY2VydGlmaWNhdGUnKTsNCiAgICAgICAgICAgICRleHRlbnNpb24gPSAkZmlsZS0+Z2V0Q2xpZW50T3JpZ2luYWxFeHRlbnNpb24oKTsNCiAgICAgICAgICAgICRmaWxlbmFtZSA9IHRpbWUoKSAuICcuJyAuICRleHRlbnNpb247DQogICAgICAgICAgICAkZmlsZS0+bW92ZSgnYXNzZXRzL2FkbWluL2ltZy8nLCAkZmlsZW5hbWUpOw0KICAgICAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5jZXJ0aWZpY2F0ZSA9ICRmaWxlbmFtZTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICgkcmVxdWVzdC0+aGFzZmlsZSgncmVzdW1lJykpIHsNCiAgICAgICAgICAgICRkZXN0aW5hdGlvbiA9ICdhc3NldHMvYWRtaW4vaW1nLycgLiAkY291cnNlQXBwbGljYXRpb24tPnJlc3VtZTsNCiAgICAgICAgICAgIGlmIChGaWxlOjpleGlzdHMoJGRlc3RpbmF0aW9uKSkgew0KICAgICAgICAgICAgICAgIEZpbGU6OmRlbGV0ZSgkZGVzdGluYXRpb24pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGZpbGUgPSAkcmVxdWVzdC0+ZmlsZSgncmVzdW1lJyk7DQogICAgICAgICAgICAkZXh0ZW5zaW9uID0gJGZpbGUtPmdldENsaWVudE9yaWdpbmFsRXh0ZW5zaW9uKCk7DQogICAgICAgICAgICAkZmlsZW5hbWUgPSB0aW1lKCkgLiAnLicgLiAkZXh0ZW5zaW9uOw0KICAgICAgICAgICAgJGZpbGUtPm1vdmUoJ2FkbWluL2ltZy8nLCAkZmlsZW5hbWUpOw0KICAgICAgICAgICAgJGNvdXJzZUFwcGxpY2F0aW9uLT5yZXN1bWUgPSAkZmlsZW5hbWU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICRpdGVtX25hbWU9J3dlYmluYXJfaWQnOw0KICAgICAgICAgIA0KICAgICAgICAgIA0KDQogICANCiAgICRkYXRhID0gWw0KICAgICdpdGVtX25hbWUnID0+ICRpdGVtX25hbWUsDQogICAgJ2l0ZW1faWQnID0+ICRpdGVtX2lkDQpdOw0KICAgICAgICAgIGlmICgkaXRlbV9uYW1lID09ICd3ZWJpbmFyX2lkJykgew0KICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c3RvcmVVc2VyV2ViaW5hckNhcnQoJHVzZXIsICRkYXRhKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgIGlmICgkcmVzdWx0ICE9ICdvaycpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAkY291cnNlQXBwbGljYXRpb24tPnNhdmUoKTsNCg0KICAgICAgIA0KICAgICAgICANCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCcvY2FydCcpOw0KICAgICAgICANCiAgICB9DQogICAgDQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIHN0b3JlVXNlcldlYmluYXJDYXJ0KCR1c2VyLCAkZGF0YSkNCiAgICB7DQogICAgICAgICRhZG1pc3Npb25GZWUgPUZlZTo6Zmlyc3QoKTsNCiAgICAgICAgc2Vzc2lvbihbJ2FkbWlzc2lvbl9mZWUnID0+ICRhZG1pc3Npb25GZWVdKTsNCiAgICAgICAgJHdlYmluYXJfaWQgPSAkZGF0YVsnaXRlbV9pZCddOw0KICAgICAgICAkdGlja2V0X2lkID0gJGRhdGFbJ3RpY2tldF9pZCddID8/IG51bGw7DQoNCiAgICAgICAgJHdlYmluYXIgPSBXZWJpbmFyOjp3aGVyZSgnaWQnLCAkd2ViaW5hcl9pZCkNCiAgICAgICAgICAgIC0+d2hlcmUoJ3ByaXZhdGUnLCBmYWxzZSkNCiAgICAgICAgICAgIC0+d2hlcmUoJ3N0YXR1cycsICdhY3RpdmUnKQ0KICAgICAgICAgICAgLT5maXJzdCgpOw0KDQogICAgICAgIGlmICghZW1wdHkoJHdlYmluYXIpIGFuZCAhZW1wdHkoJHVzZXIpKSB7DQogICAgICAgICAgICAkY2hlY2tDb3Vyc2VGb3JTYWxlID0gY2hlY2tDb3Vyc2VGb3JTYWxlKCR3ZWJpbmFyLCAkdXNlcik7DQoNCiAgICAgICAgICAgIGlmICgkY2hlY2tDb3Vyc2VGb3JTYWxlICE9ICdvaycpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gJGNoZWNrQ291cnNlRm9yU2FsZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGFjdGl2ZVNwZWNpYWxPZmZlciA9ICR3ZWJpbmFyLT5hY3RpdmVTcGVjaWFsT2ZmZXIoKTsNCg0KICAgICAgICAgICAgQ2FydDo6dXBkYXRlT3JDcmVhdGUoWw0KICAgICAgICAgICAgICAgICdjcmVhdG9yX2lkJyA9PiAkdXNlci0+aWQsDQogICAgICAgICAgICAgICAgJ3dlYmluYXJfaWQnID0+ICR3ZWJpbmFyX2lkLA0KICAgICAgICAgICAgXSwgWw0KICAgICAgICAgICAgICAgICd0aWNrZXRfaWQnID0+ICR0aWNrZXRfaWQsDQogICAgICAgICAgICAgICAgJ3NwZWNpYWxfb2ZmZXJfaWQnID0+ICFlbXB0eSgkYWN0aXZlU3BlY2lhbE9mZmVyKSA/ICRhY3RpdmVTcGVjaWFsT2ZmZXItPmlkIDogbnVsbCwNCiAgICAgICAgICAgICAgICAnY3JlYXRlZF9hdCcgPT4gdGltZSgpDQogICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgcmV0dXJuICdvayc7DQogICAgICAgIH0NCg0KICAgICAgICAkdG9hc3REYXRhID0gWw0KICAgICAgICAgICAgJ3RpdGxlJyA9PiB0cmFucygncHVibGljLnJlcXVlc3RfZmFpbGVkJyksDQogICAgICAgICAgICAnbXNnJyA9PiB0cmFucygnY2FydC5jb3Vyc2Vfbm90X2ZvdW5kJyksDQogICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InDQogICAgICAgIF07DQogICAgICAgIHJldHVybiBiYWNrKCktPndpdGgoWyd0b2FzdCcgPT4gJHRvYXN0RGF0YV0pOw0KICAgIH0NCiAgICANCg0KICAgIA0KICANCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gc2hvd0dpZnRNb2RhbCgkdXNlcikNCiAgICB7DQogICAgICAgICRnaWZ0ID0gR2lmdDo6cXVlcnkoKS0+d2hlcmUoJ2VtYWlsJywgJHVzZXItPmVtYWlsKQ0KICAgICAgICAgICAgLT53aGVyZSgnc3RhdHVzJywgJ2FjdGl2ZScpDQogICAgICAgICAgICAtPndoZXJlKCd2aWV3ZWQnLCBmYWxzZSkNCiAgICAgICAgICAgIC0+d2hlcmUoZnVuY3Rpb24gKCRxdWVyeSkgew0KICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmVOdWxsKCdkYXRlJyk7DQogICAgICAgICAgICAgICAgJHF1ZXJ5LT5vcldoZXJlKCdkYXRlJywgJzwnLCB0aW1lKCkpOw0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIC0+d2hlcmVIYXMoJ3NhbGUnKQ0KICAgICAgICAgICAgLT5maXJzdCgpOw0KDQogICAgICAgIGlmICghZW1wdHkoJGdpZnQpKSB7DQogICAgICAgICAgICAkZ2lmdC0+dXBkYXRlKFsNCiAgICAgICAgICAgICAgICAndmlld2VkJyA9PiB0cnVlDQogICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgJGRhdGEgPSBbDQogICAgICAgICAgICAgICAgJ2dpZnQnID0+ICRnaWZ0DQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAkcmVzdWx0ID0gKHN0cmluZyl2aWV3KCktPm1ha2UoJ3dlYi5kZWZhdWx0LnBhbmVsLmRhc2hib2FyZC5naWZ0X21vZGFsJywgJGRhdGEpOw0KICAgICAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKGFycmF5KCJcclxuIiwgIlxuIiwgIiAgIiksICcnLCAkcmVzdWx0KTsNCg0KICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbnVsbDsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldE1vbnRobHlTYWxlc09yUHVyY2hhc2UoJHVzZXIpDQogICAgew0KICAgICAgICAkbW9udGhzID0gW107DQogICAgICAgICRkYXRhID0gW107DQoNCiAgICAgICAgLy8gYWxsIDEyIG1vbnRocw0KICAgICAgICBmb3IgKCRtb250aCA9IDE7ICRtb250aCA8PSAxMjsgJG1vbnRoKyspIHsNCiAgICAgICAgICAgICRkYXRlID0gQ2FyYm9uOjpjcmVhdGUoZGF0ZSgnWScpLCAkbW9udGgpOw0KDQogICAgICAgICAgICAkc3RhcnRfZGF0ZSA9ICRkYXRlLT50aW1lc3RhbXA7DQogICAgICAgICAgICAkZW5kX2RhdGUgPSAkZGF0ZS0+Y29weSgpLT5lbmRPZk1vbnRoKCktPnRpbWVzdGFtcDsNCg0KICAgICAgICAgICAgJG1vbnRoc1tdID0gdHJhbnMoJ3BhbmVsLm1vbnRoXycgLiAkbW9udGgpOw0KDQogICAgICAgICAgICBpZiAoISR1c2VyLT5pc1VzZXIoKSkgew0KICAgICAgICAgICAgICAgICRtb250aGx5U2FsZXMgPSBTYWxlOjp3aGVyZSgnc2VsbGVyX2lkJywgJHVzZXItPmlkKQ0KICAgICAgICAgICAgICAgICAgICAtPndoZXJlTnVsbCgncmVmdW5kX2F0JykNCiAgICAgICAgICAgICAgICAgICAgLT53aGVyZUJldHdlZW4oJ2NyZWF0ZWRfYXQnLCBbJHN0YXJ0X2RhdGUsICRlbmRfZGF0ZV0pDQogICAgICAgICAgICAgICAgICAgIC0+c3VtKCd0b3RhbF9hbW91bnQnKTsNCg0KICAgICAgICAgICAgICAgICRkYXRhW10gPSByb3VuZCgkbW9udGhseVNhbGVzLCAyKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG1vbnRobHlQdXJjaGFzZSA9IFNhbGU6OndoZXJlKCdidXllcl9pZCcsICR1c2VyLT5pZCkNCiAgICAgICAgICAgICAgICAgICAgLT53aGVyZU51bGwoJ3JlZnVuZF9hdCcpDQogICAgICAgICAgICAgICAgICAgIC0+d2hlcmVCZXR3ZWVuKCdjcmVhdGVkX2F0JywgWyRzdGFydF9kYXRlLCAkZW5kX2RhdGVdKQ0KICAgICAgICAgICAgICAgICAgICAtPmNvdW50KCk7DQoNCiAgICAgICAgICAgICAgICAkZGF0YVtdID0gJG1vbnRobHlQdXJjaGFzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBbDQogICAgICAgICAgICAnbW9udGhzJyA9PiAkbW9udGhzLA0KICAgICAgICAgICAgJ2RhdGEnID0+ICRkYXRhDQogICAgICAgIF07DQogICAgfQ0KICAgIA0KICAgICBwdWJsaWMgZnVuY3Rpb24gc2Nob2xhcnNoaXBfZm9ybV9vbmUocmVxdWVzdCAkcmVxdWVzdCl7DQogICAgICAgICAgcmV0dXJuIHZpZXcoJ3dlYi5kZWZhdWx0LnBhZ2VzLnNjaG9sYXJzaGlwRm9ybU9uZScpOw0KICAgICAgfQ0KICAgICAgDQogICAgICBwdWJsaWMgZnVuY3Rpb24gc2Nob2xhcnNoaXBfZm9ybV90d28ocmVxdWVzdCAkcmVxdWVzdCl7DQogICAgICAgICAgcmV0dXJuIHZpZXcoJ3dlYi5kZWZhdWx0LnBhZ2VzLnNjaG9sYXJzaGlwRm9ybVR3bycpOw0KICAgICAgfQ0KICAgICAgDQogICAgICANCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFjYWRlbWljX3N0b3JlKHJlcXVlc3QgJHJlcXVlc3Qpew0KICAgICAgICAgIA0KICAgICAgICAgICAkdmFsaWRhdGVkRGF0YSA9ICRyZXF1ZXN0LT52YWxpZGF0ZShbDQogICAgICAgICAgICAnbmFtZScgPT4gJ3JlcXVpcmVkJywNCiAgICAgICAgICAgICdlbWFpbCcgPT4gJ3JlcXVpcmVkJywNCiAgICAgICAgICAgICdwaG9uZV9udW1iZXInID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAnbmF0aW9uYWxpdHknID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAnY3VycmVudF9hZGRyZXNzJyA9PiAncmVxdWlyZWQnLA0KICAgICAgICAgICAgJ2NpdHknID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAnY291bnRyeScgPT4gJ3JlcXVpcmVkJywNCiAgICAgICAgICAgICdlZHVjYXRpb24nID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAnaW5zdGl0dXRlJyA9PiAncmVxdWlyZWQnLA0KICAgICAgICAgICAgJ3RyYW5zY3JpcHQnID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAnUXVlc3Rpb24nID0+ICdyZXF1aXJlZCcsDQogICAgICAgIF0pOw0KICAgICAgICANCiAgICAgICAgDQoNCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgICRzY2hvbGFyc2hpcCA9IG5ldyBBY2FkZW1pY1NjaG9sYXJzaGlwKCk7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPm5hbWUgPSAgJHJlcXVlc3QtPm5hbWU7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPnVzZXJfaWQgPSAgYXV0aCgpLT51c2VyKCktPmlkOw0KICAgICAgICAgJHNjaG9sYXJzaGlwLT5lbWFpbCA9ICAkcmVxdWVzdC0+ZW1haWw7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPnBob25lX251bWJlciA9ICRyZXF1ZXN0LT5waG9uZV9udW1iZXI7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPm5hdGlvbmFsaXR5ID0gJHJlcXVlc3QtPm5hdGlvbmFsaXR5Ow0KICAgICAgICAgJHNjaG9sYXJzaGlwLT5jaXR5ID0gJHJlcXVlc3QtPmNpdHk7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPmN1cnJlbnRfYWRkcmVzcyA9ICRyZXF1ZXN0LT5jdXJyZW50X2FkZHJlc3M7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPmNvdW50cnkgPSAkcmVxdWVzdC0+Y291bnRyeTsNCiAgICAgICAgICRzY2hvbGFyc2hpcC0+ZWR1Y2F0aW9uID0gJHJlcXVlc3QtPmVkdWNhdGlvbjsNCiAgICAgICAgICRzY2hvbGFyc2hpcC0+aW5zdGl0dXRlID0gJHJlcXVlc3QtPmluc3RpdHV0ZTsNCiAgICAgICAgICRzY2hvbGFyc2hpcC0+UXVlc3Rpb24gPSAkcmVxdWVzdC0+UXVlc3Rpb247DQogICAgICAgIA0KDQoNCg0KICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc2ZpbGUoJ3RyYW5zY3JpcHQnKSkgew0KICAgICAgICAgICAgJGRlc3RpbmF0aW9uID0gJ2Fzc2V0cy9hZG1pbi9TY2hvbGFyc2hpcC9BY2FkZW1pYy90cmFuc2NyaXB0JyAuICRzY2hvbGFyc2hpcC0+dHJhbnNjcmlwdDsNCiAgICAgICAgICAgIGlmIChGaWxlOjpleGlzdHMoJGRlc3RpbmF0aW9uKSkgew0KICAgICAgICAgICAgICAgIEZpbGU6OmRlbGV0ZSgkZGVzdGluYXRpb24pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGZpbGUgPSAkcmVxdWVzdC0+ZmlsZSgndHJhbnNjcmlwdCcpOw0KICAgICAgICAgICAgJGV4dGVuc2lvbiA9ICRmaWxlLT5nZXRDbGllbnRPcmlnaW5hbEV4dGVuc2lvbigpOw0KICAgICAgICAgICAgJGZpbGVuYW1lID0gdGltZSgpIC4gJy4nIC4gJGV4dGVuc2lvbjsNCiAgICAgICAgICAgICRmaWxlLT5tb3ZlKCdhc3NldHMvYWRtaW4vU2Nob2xhcnNoaXAvQWNhZGVtaWMvdHJhbnNjcmlwdCcsICRmaWxlbmFtZSk7DQogICAgICAgICAgICAkc2Nob2xhcnNoaXAtPnRyYW5zY3JpcHQgPSAkZmlsZW5hbWU7DQogICAgICAgIH0NCg0KDQoNCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXNmaWxlKCdjZXJ0aWZpY2F0ZScpKSB7DQogICAgICAgICAgICAkZGVzdGluYXRpb24gPSAnYXNzZXRzL2FkbWluL1NjaG9sYXJzaGlwL0FjYWRlbWljL2NlcnRpZmljYXRlJyAuICRzY2hvbGFyc2hpcC0+Y2VydGlmaWNhdGU7DQogICAgICAgICAgICBpZiAoRmlsZTo6ZXhpc3RzKCRkZXN0aW5hdGlvbikpIHsNCiAgICAgICAgICAgICAgICBGaWxlOjpkZWxldGUoJGRlc3RpbmF0aW9uKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRmaWxlID0gJHJlcXVlc3QtPmZpbGUoJ2NlcnRpZmljYXRlJyk7DQogICAgICAgICAgICAkZXh0ZW5zaW9uID0gJGZpbGUtPmdldENsaWVudE9yaWdpbmFsRXh0ZW5zaW9uKCk7DQogICAgICAgICAgICAkZmlsZW5hbWUgPSB0aW1lKCkgLiAnLicgLiAkZXh0ZW5zaW9uOw0KICAgICAgICAgICAgJGZpbGUtPm1vdmUoJ2Fzc2V0cy9hZG1pbi9TY2hvbGFyc2hpcC9BY2FkZW1pYy9jZXJ0aWZpY2F0ZScsICRmaWxlbmFtZSk7DQogICAgICAgICAgICAkc2Nob2xhcnNoaXAtPmNlcnRpZmljYXRlID0gJGZpbGVuYW1lOw0KICAgICAgICB9DQogICANCiAgICAgICAgICAgICRzY2hvbGFyc2hpcC0+c2F2ZSgpOw0KICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCdzY2hvbGFyc2hpcC1hcHBsaWVkJyk7DQoNCiAgICAgICAgDQogICAgICB9DQogICAgICANCiAgICAgIA0KICAgICAgDQogICAgICANCiAgICAgIA0KICAgICAgDQogICAgICANCiAgICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtX3R3b19zdG9yZShyZXF1ZXN0ICRyZXF1ZXN0KXsNCiAgICAgICAgICANCiAgICAgICAgICAgJHZhbGlkYXRlZERhdGEgPSAkcmVxdWVzdC0+dmFsaWRhdGUoWw0KICAgICAgICAgICAgJ25hbWUnID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAnZW1haWwnID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAncGhvbmVfbnVtYmVyJyA9PiAncmVxdWlyZWQnLA0KICAgICAgICAgICAgJ25hdGlvbmFsaXR5JyA9PiAncmVxdWlyZWQnLA0KICAgICAgICAgICAgJ2RvYicgPT4gJ3JlcXVpcmVkJywNCiAgICAgICAgICAgICdjb3VudHJ5JyA9PiAncmVxdWlyZWQnLA0KICAgICAgICAgICAgJ2VkdWNhdGlvbicgPT4gJ3JlcXVpcmVkJywNCiAgICAgICAgICAgICdpbnN0aXR1dGUnID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAncGFzc3BvcnQnID0+ICdyZXF1aXJlZCcsDQogICAgICAgICAgICAnUHJvb2Zfb2ZfcmVzaWRlbmN5JyA9PiAncmVxdWlyZWQnLA0KICAgICAgICBdKTsNCiAgICAgICAgDQogICAgICAgIA0KDQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgICAkc2Nob2xhcnNoaXAgPSBuZXcgQ291bnRyeVNjaG9sYXJzaGlwKCk7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPm5hbWUgPSAgJHJlcXVlc3QtPm5hbWU7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPnVzZXJfaWQgPSAgYXV0aCgpLT51c2VyKCktPmlkOw0KICAgICAgICAgJHNjaG9sYXJzaGlwLT5lbWFpbCA9ICAkcmVxdWVzdC0+ZW1haWw7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPnBob25lX251bWJlciA9ICRyZXF1ZXN0LT5waG9uZV9udW1iZXI7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPm5hdGlvbmFsaXR5ID0gJHJlcXVlc3QtPm5hdGlvbmFsaXR5Ow0KICAgICAgICAgJHNjaG9sYXJzaGlwLT5kb2IgPSAkcmVxdWVzdC0+ZG9iOw0KICAgICAgICAgJHNjaG9sYXJzaGlwLT5jb3VudHJ5ID0gJHJlcXVlc3QtPmNvdW50cnk7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPmVkdWNhdGlvbiA9ICRyZXF1ZXN0LT5lZHVjYXRpb247DQogICAgICAgICAkc2Nob2xhcnNoaXAtPmluc3RpdHV0ZSA9ICRyZXF1ZXN0LT5pbnN0aXR1dGU7DQogICAgICAgICAkc2Nob2xhcnNoaXAtPnBhc3Nwb3J0ID0gJHJlcXVlc3QtPnBhc3Nwb3J0Ow0KICAgICAgICAgJHNjaG9sYXJzaGlwLT5Qcm9vZl9vZl9yZXNpZGVuY3kgPSAkcmVxdWVzdC0+UHJvb2Zfb2ZfcmVzaWRlbmN5Ow0KICAgICAgICANCg0KDQoNCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXNmaWxlKCdwYXNzcG9ydCcpKSB7DQogICAgICAgICAgICAkZGVzdGluYXRpb24gPSAnYXNzZXRzL2FkbWluL1NjaG9sYXJzaGlwL0NvdW50cnkvcGFzc3BvcnQnIC4gJHNjaG9sYXJzaGlwLT5wYXNzcG9ydDsNCiAgICAgICAgICAgIGlmIChGaWxlOjpleGlzdHMoJGRlc3RpbmF0aW9uKSkgew0KICAgICAgICAgICAgICAgIEZpbGU6OmRlbGV0ZSgkZGVzdGluYXRpb24pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGZpbGUgPSAkcmVxdWVzdC0+ZmlsZSgncGFzc3BvcnQnKTsNCiAgICAgICAgICAgICRleHRlbnNpb24gPSAkZmlsZS0+Z2V0Q2xpZW50T3JpZ2luYWxFeHRlbnNpb24oKTsNCiAgICAgICAgICAgICRmaWxlbmFtZSA9IHRpbWUoKSAuICcuJyAuICRleHRlbnNpb247DQogICAgICAgICAgICAkZmlsZS0+bW92ZSgnYXNzZXRzL2FkbWluL1NjaG9sYXJzaGlwL0NvdW50cnkvcGFzc3BvcnQnLCAkZmlsZW5hbWUpOw0KICAgICAgICAgICAgJHNjaG9sYXJzaGlwLT5wYXNzcG9ydCA9ICRmaWxlbmFtZTsNCiAgICAgICAgfQ0KDQoNCg0KICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc2ZpbGUoJ1Byb29mX29mX3Jlc2lkZW5jeScpKSB7DQogICAgICAgICAgICAkZGVzdGluYXRpb24gPSAnYXNzZXRzL2FkbWluL1NjaG9sYXJzaGlwL0NvdW50cnkvUHJvb2ZPZlJlc2lkZW5jeScgLiAkc2Nob2xhcnNoaXAtPlByb29mX29mX3Jlc2lkZW5jeTsNCiAgICAgICAgICAgIGlmIChGaWxlOjpleGlzdHMoJGRlc3RpbmF0aW9uKSkgew0KICAgICAgICAgICAgICAgIEZpbGU6OmRlbGV0ZSgkZGVzdGluYXRpb24pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGZpbGUgPSAkcmVxdWVzdC0+ZmlsZSgnUHJvb2Zfb2ZfcmVzaWRlbmN5Jyk7DQogICAgICAgICAgICAkZXh0ZW5zaW9uID0gJGZpbGUtPmdldENsaWVudE9yaWdpbmFsRXh0ZW5zaW9uKCk7DQogICAgICAgICAgICAkZmlsZW5hbWUgPSB0aW1lKCkgLiAnLicgLiAkZXh0ZW5zaW9uOw0KICAgICAgICAgICAgJGZpbGUtPm1vdmUoJ2Fzc2V0cy9hZG1pbi9TY2hvbGFyc2hpcC9Db3VudHJ5L1Byb29mT2ZSZXNpZGVuY3knLCAkZmlsZW5hbWUpOw0KICAgICAgICAgICAgJHNjaG9sYXJzaGlwLT5Qcm9vZl9vZl9yZXNpZGVuY3kgPSAkZmlsZW5hbWU7DQogICAgICAgIH0NCiAgIA0KICAgICAgICAgICAgJHNjaG9sYXJzaGlwLT5zYXZlKCk7DQogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoJ3NjaG9sYXJzaGlwLWFwcGxpZWQnKTsNCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiAgICAgIH0NCiAgICAgIA0KICAgICAgDQogICAgICAgICANCiBwdWJsaWMgZnVuY3Rpb24gc2F2ZUxlYXJuaW5nVGltZShSZXF1ZXN0ICRyZXF1ZXN0KQ0Kew0KICAgICR1c2VyX2lkID0gYXV0aCgpLT5pZCgpOyAvLyBBc3N1bWluZyB5b3UgYXJlIHVzaW5nIExhcmF2ZWwncyBhdXRoZW50aWNhdGlvbg0KICAgICRjb3Vyc2Vfc2x1ZyA9ICRyZXF1ZXN0LT5pbnB1dCgnY291cnNlX3NsdWcnKTsNCiAgICAkdGltZV9zcGVudF9taW51dGVzID0gJHJlcXVlc3QtPmlucHV0KCd0aW1lX3NwZW50X21pbnV0ZXMnKTsNCg0KICAgIC8vIEFzc3VtaW5nIHlvdSBoYXZlIGEgcmVjb3JkIGZvciBlYWNoIHVzZXIgYW5kIGNvdXJzZQ0KICAgICRsZWFybmluZ1RpbWUgPSBVc2VyTGVhcm5pbmdUaW1lOjp3aGVyZSgndXNlcl9pZCcsICR1c2VyX2lkKQ0KICAgICAgICAtPndoZXJlKCdjb3Vyc2Vfc2x1ZycsICRjb3Vyc2Vfc2x1ZykNCiAgICAgICAgLT5maXJzdCgpOw0KDQogICAgaWYgKCRsZWFybmluZ1RpbWUpIHsNCiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIHJlY29yZA0KICAgICAgICAkbGVhcm5pbmdUaW1lLT50aW1lX3NwZW50X21pbnV0ZXMgKz0gJHRpbWVfc3BlbnRfbWludXRlczsNCiAgICAgICAgJGxlYXJuaW5nVGltZS0+c2F2ZSgpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZWNvcmQNCiAgICAgICAgVXNlckxlYXJuaW5nVGltZTo6Y3JlYXRlKFsNCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlcl9pZCwNCiAgICAgICAgICAgICdjb3Vyc2Vfc2x1ZycgPT4gJGNvdXJzZV9zbHVnLA0KICAgICAgICAgICAgJ3RpbWVfc3BlbnRfbWludXRlcycgPT4gJHRpbWVfc3BlbnRfbWludXRlcywNCiAgICAgICAgXSk7DQogICAgfQ0KDQogICAgcmV0dXJuIHJlc3BvbnNlKCktPmpzb24oWydzdWNjZXNzJyA9PiB0cnVlXSk7DQp9IA0KICAgICAgDQogICAgDQp9")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 90f576437372f5869a0341eb1fe13d14
Eval Count 1
Decode Time 69 ms