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("PD9waHANCmluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7DQpvYl9zdGF..
Decoded Output download
?>b'<?php
ini_set(\'display_errors\', 0);
ob_start();
include("include/session.php");
ini_set(\'date.timezone\', \'Africa/Nairobi\');
//ini_set(\'display_errors\', 0);
$conn = connectToDB();
$pid = $_GET[\'pid\'];
if($session->logged_in)
{
setcookie("loggedinuser",$session->username);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<title>Drilling Company</title>
<link rel="apple-touch-icon" sizes="180x180" href="images/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png">
<link rel="manifest" href="images/site.webmanifest">
<link href="css/style.default.css" rel="stylesheet">
<link href="css/jquery.tagsinput.css" rel="stylesheet" />
<link href="css/toggles.css" rel="stylesheet" />
<link href="css/bootstrap-timepicker.min.css" rel="stylesheet" />
<link href="css/select2.css" rel="stylesheet" />
<link href="css/style.datatables.css" rel="stylesheet">
<link href="css/colorpicker.css" rel="stylesheet" />
<link href="css/dropzone.css" rel="stylesheet" />
<!---start-date-piker---->
<link href="css/jquery-ui.css" rel="stylesheet">
<!---/End-date-piker---->
<link href="alerts/sweetalert.css" rel="stylesheet">
<script src="js/jquery-1.11.1.min.js"></script>
<script src="alerts/sweetalert-dev.js"></script>
<script src="include/js_functions.js"></script>
<link href="pcss/dist/css/custom.css" rel="stylesheet">
<!-- <link href="pcss/dist/css/adminlte.css" rel="stylesheet"> -->
<!-- adminlte -->
<script type="text/javascript" src="pcss/dist/js/script.js"></script>
<script type="text/javascript">
var GB_ROOT_DIR = "./greybox/";
</script>
<!-- Grey Box -->
<script type="text/javascript" src="greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/gb_scripts.js"></script>
<link href="greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- sweet alert -->
<link rel="stylesheet" href="sweetalert2-8.15.0/dist/sweetalert2.min.css">
<?php if($_GET[\'pid\']!=44){?>
<script src="sweetalert2-8.15.0/dist/sweetalert2.all.min.js"></script>
<?php }?>
<!-- Optional: include a polyfill for ES6 Promises for IE11 and Android browser -->
<!--<script src="https://cdn.jsdelivr.net/npm/promise-polyfill"></script>-->
<!-- End sweet alert -->
</head>
<body>
<header>
<div class="headerwrapper">
<div class="header-left">
<a href="index.php" class="logo">
<!-- <img src="images/logo.png" alt="" /> -->
</a>
<div class="pull-right">
<a href="" class="menu-collapse">
<i class="fa fa-bars"></i>
</a>
</div>
</div><!-- header-left -->
<div class="header-right">
<span class="suntraheading">BCI Water Drilling Experts </span> <font size="1" color="#FFFFFF">v1.0</font>
<div class="pull-right">
<div class="btn-group btn-group-option">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<?php echo $session->firstname.\' \'.$session->lastname;?> <i class="fa fa-caret-down"></i>
</button>
<ul class="dropdown-menu pull-right" role="menu">
<li><a href="#"><i class="glyphicon glyphicon-user"></i> My Profile</a></li>
<li><a href="#"><i class="glyphicon glyphicon-star"></i> Activity Log</a></li>
<li><a href="useredit.php"><i class="glyphicon glyphicon-cog"></i> Password Reset</a></li>
<li><a href="#"><i class="glyphicon glyphicon-question-sign"></i> Help</a></li>
<li class="divider"></li>
<li><a href="process.php"><i class="glyphicon glyphicon-log-out"></i>Sign Out</a></li>
</ul>
</div><!-- btn-group -->
</div><!-- pull-right -->
</div><!-- header-right -->
</div><!-- headerwrapper -->
</header>
<section>
<div class="mainwrapper">
<div class="leftpanel">
<div class="media profile-left">
<a class="pull-left profile-thumb" href="index.php">
<img class="img-circle" src="images/reportlogo.PNG" alt="">
</a>
<div class="media-body">
<h4 class="media-heading">Logged In as</h4>
<small class="text-muted"><?php echo $session->username;?></small>
</div>
</div><!-- media -->
<!-- Navigation here-->
<?php
include("nav.php");
?>
</div><!-- leftpanel -->
<div class="mainpanel">
<div class="pageheader">
<div class="media">
<div class="pageicon pull-left">
<i class="fa fa-home"></i>
</div>
<div class="media-body">
<ul class="breadcrumb">
<li><a href=""><i class="glyphicon glyphicon-home"></i></a></li>
<li><a href="">Drilling / company</a></li>
<li><?php echo $_GET[\'Iname\'];?></li>
</ul>
<h4><?php if($_GET[\'Iname\']!=\'\') { echo $_GET[\'Iname\']; }else{?>Dashboard<?php }?></h4>
</div>
</div><!-- media -->
</div><!-- pageheader -->
<div class="contentpanel">
<!-- CONTENT GOES HERE -->
<div class="toast" id="alert_toast" role="alert" aria-live="assertive" aria-atomic="true" style="padding: 12px;">
<div class="toast-body text-white">
</div>
</div>
<div class="modal fade" id="confirm_modal" role=\'dialog\'>
<div class="modal-dialog modal-md" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Confirmation</h5>
</div>
<div class="modal-body">
<div id="delete_content"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id=\'confirm\' onclick="">Continue</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="uni_modal" role=\'dialog\'>
<div class="modal-dialog modal-md" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"></h5>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id=\'submit\' onclick="$(\'#uni_modal form\').submit()">Save</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
</div>
</div>
</div>
</div>
<?php
if($_GET[\'mod\']==\'\') //&& $session->userlevel==9)
{
include("dashboard/index2.php");
}
if(isset($_GET[\'mod\'])==\'documents\')
{
include("documents/docpanel.php");
}
if(isset($_GET[\'mod\'])==\'settings\')
{
include("settings/settpanel.php");
}
if(isset($_GET[\'mod\'])==\'security\')
{
include("security/securitypanel.php");
}
if(isset($_GET[\'mod\'])==\'purchaseorders\')
{
include("purchaseorders/purpanel.php");
}
if(isset($_GET[\'mod\'])==\'leaves\')
{
include("leaves/lvpanel.php");
}
if(isset($_GET[\'mod\'])==\'leads\')
{
include("leads/leadpanel.php");
}
if(isset($_GET[\'mod\'])==\'invent\')
{
include("invent/inventorypanels.php");
}
if(isset($_GET[\'mod\'])==\'contracts\')
{
include("contracts/ctrpanel.php");
}
if(isset($_GET[\'mod\'])==\'payments\')
{
include("payments/bgpanel.php");
}
if($_GET[\'mod\']==\'servicecentre\')
{
include("servicecentre/servcentrepanel.php");
}
if(isset($_GET[\'mod\'])==\'employees\')
{
include("employees/accpanel.php");
}
if(isset($_GET[\'mod\'])==\'invoice\')
{
include("invoice/invpanel.php");
}
if(isset($_GET[\'mod\'])==\'products\')
{
include("products/prodpanel.php");
}
if(isset($_GET[\'mod\'])=="projects")
{
include("projects/projpanel.php");
}
if($_GET[\'mod\']==\'mondayreport\')
{
include("reports/reportspanel.php");
}
if($_GET[\'mod\']==\'customers\')
{
include("customers/custompanel.php");
}
else if($_GET[\'pid\']==\'121\')
{
logOut();
}
?>
</div><!-- contentpanel -->
</div>
</div><!-- mainwrapper -->
</section>
<!-- <script src="js/jquery-migrate-1.2.1.min.js"></script>
<script src="js/jquery-ui-1.10.3.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/modernizr.min.js"></script>
<script src="js/pace.min.js"></script>
<script src="js/retina.min.js"></script>
<script src="js/jquery.cookies.js"></script>
<script src="js/bootstrap-wizard.min.js"></script>
<script src="js/jquery.validate.min.js"></script>
<script src="js/jquery.dataTables.min.js"></script>
<?php if($_GET[\'action\']!=\'edit\') {?>
<script src="js/select2.min.js"></script>
<?php }?>
<script src="js/custom.js"></script>-->
<script src="js/jquery-1.11.1.min.js"></script>
<script src="js/jquery-migrate-1.2.1.min.js"></script>
<script src="js/jquery-ui-1.10.3.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/modernizr.min.js"></script>
<script src="js/pace.min.js"></script>
<script src="js/retina.min.js"></script>
<script src="js/jquery.cookies.js"></script>
<script src="js/jquery.autogrow-textarea.js"></script>
<script src="js/jquery.mousewheel.js"></script>
<script src="js/jquery.tagsinput.min.js"></script>
<script src="js/toggles.min.js"></script>
<script src="js/bootstrap-timepicker.min.js"></script>
<script src="js/jquery.maskedinput.min.js"></script>
<script src="js/jquery.dataTables.min.js"></script>
<script src="js/select2.min.js"></script>
<script src="js/jquery.validate.min.js"></script>
<script src="js/colorpicker.js"></script>
<script src="js/dropzone.min.js"></script>
<script src="js/custom.js"></script>
</body>
</html>
<script>
jQuery(document).ready(function() {
// Basic Form
jQuery("#basicForm").validate({
highlight: function(element) {
jQuery(element).closest(\'.form-group\').removeClass(\'has-success\').addClass(\'has-error\');
},
success: function(element) {
jQuery(element).closest(\'.form-group\').removeClass(\'has-error\');
}
});
jQuery(\'#basicTable\').DataTable({
responsive: true,
});
jQuery(\'#basicTable2\').DataTable({
responsive: true,
});
jQuery(\'#basicTable3\').DataTable({
responsive: true,
});
var shTable = jQuery(\'#shTable\').DataTable({
"fnDrawCallback": function(oSettings) {
jQuery(\'#shTable_paginate ul\').addClass(\'pagination-active-dark\');
},
responsive: true
});
// Show/Hide Columns Dropdown
jQuery(\'#shCol\').click(function(event){
event.stopPropagation();
});
jQuery(\'#shCol input\').on(\'click\', function() {
// Get the column API object
var column = shTable.column($(this).val());
// Toggle the visibility
if ($(this).is(\':checked\'))
column.visible(true);
else
column.visible(false);
});
var exRowTable = jQuery(\'#exRowTable\').DataTable({
responsive: true,
"fnDrawCallback": function(oSettings) {
jQuery(\'#exRowTable_paginate ul\').addClass(\'pagination-active-success\');
},
"ajax": "ajax/objects.txt",
"columns": [
{
"class": \'details-control\',
"orderable": false,
"data": null,
"defaultContent": \'\'
},
{ "data": "name" },
{ "data": "position" },
{ "data": "office" },
{ "data": "salary" }
],
"order": [[1, \'asc\']]
});
// Add event listener for opening and closing details
jQuery(\'#exRowTable tbody\').on(\'click\', \'td.details-control\', function () {
var tr = $(this).closest(\'tr\');
var row = exRowTable.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass(\'shown\');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass(\'shown\');
}
});
// Tags Input
jQuery(\'#tags\').tagsInput({width:\'auto\'});
// Textarea Autogrow
jQuery(\'#autoResizeTA\').autogrow();
// Spinner
var spinner = jQuery(\'#spinner\').spinner();
spinner.spinner(\'value\', 0);
// Form Toggles
jQuery(\'.toggle\').toggles({on: true});
// Time Picker
jQuery(\'#timepicker\').timepicker({defaultTIme: false});
jQuery(\'.timepicker2\').timepicker({showMeridian: false});
jQuery(\'#timepicker3\').timepicker({minuteStep: 15});
// Date Picker
jQuery(\'.datepicker\').datepicker({
changeMonth: true,
changeYear: true,
dateFormat: "yy-mm-dd"
});
jQuery(\'#datepicker-inline\').datepicker();
jQuery(\'#datepicker-multiple\').datepicker({
numberOfMonths: 3,
showButtonPanel: true
});
// Select2
jQuery("#select-basic, #select-multi").select2();
jQuery("#select-basic3").select2();
jQuery(\'#select-search-hide\').select2({
minimumResultsForSearch: -1
});
jQuery(".select-basic, .select-multi").select2();
jQuery(\'.select-search-hide\').select2({
minimumResultsForSearch: -1
});
function format(item) {
return \'<i class="fa \' + ((item.element[0].getAttribute(\'rel\') === undefined)?"":item.element[0].getAttribute(\'rel\') ) + \' mr10"></i>\' + item.text;
}
// This will empty first option in select to enable placeholder
// jQuery(\'select option:first-child\').text(\'\');
jQuery("#select-templating").select2({
formatResult: format,
formatSelection: format,
escapeMarkup: function(m) { return m; }
});
// Color Picker
if(jQuery(\'#colorpicker\').length > 0) {
jQuery(\'#colorSelector\').ColorPicker({
onShow: function (colpkr) {
jQuery(colpkr).fadeIn(500);
return false;
},
onHide: function (colpkr) {
jQuery(colpkr).fadeOut(500);
return false;
},
onChange: function (hsb, hex, rgb) {
jQuery(\'#colorSelector span\').css(\'backgroundColor\', \'#\' + hex);
jQuery(\'#colorpicker\').val(\'#\'+hex);
}
});
}
// Color Picker Flat Mode
jQuery(\'#colorpickerholder\').ColorPicker({
flat: true,
onChange: function (hsb, hex, rgb) {
jQuery(\'#colorpicker3\').val(\'#\'+hex);
}
});
});
window.start_load = function(){
$(\'body\').prepend(\'<div id="preloader2"></div>\');
$("#uni_modal").hide();
}
window.end_load = function(){
$(\'#preloader2\').fadeOut(\'fast\', function() {
$(this).remove();
})
}
window.uni_modal = function($title = \'\' , $url=\'\',$size=""){
//start_load()
$.ajax({
url:$url,
error:err=>{
console.log()
alert("An error occured");
},
success:function(resp){
if(resp){
$(\'#uni_modal .modal-title\').html($title);
$(\'#uni_modal .modal-body\').html(resp);
if($size != \'\'){
$(\'#uni_modal .modal-dialog\').addClass($size);
}else{
$(\'#uni_modal .modal-dialog\').removeAttr("class").addClass("modal-dialog modal-md");
}
$(\'#uni_modal\').modal(\'show\');
end_load();
}
}
})
}
window._conf = function($msg=\'\',$func=\'\',$params = []){
$(\'#confirm_modal #confirm\').attr(\'onclick\',$func+"("+$params.join(\',\')+")");
$(\'#confirm_modal .modal-body\').html($msg);
$(\'#confirm_modal\').modal(\'show\');
}
window.alert_toast= function($msg = \'TEST\',$bg = \'success\'){
$(\'#alert_toast\').removeClass(\'bg-success\');
$(\'#alert_toast\').removeClass(\'bg-danger\');
$(\'#alert_toast\').removeClass(\'bg-info\');
$(\'#alert_toast\').removeClass(\'bg-warning\');
if($bg == \'success\')
$(\'#alert_toast\').addClass(\'bg-success\');
if($bg == \'danger\')
$(\'#alert_toast\').addClass(\'bg-danger\');
if($bg == \'info\')
$(\'#alert_toast\').addClass(\'bg-info\');
if($bg == \'warning\')
$(\'#alert_toast\').addClass(\'bg-warning\');
$(\'#alert_toast .toast-body\').html($msg);
$(\'#alert_toast\').toast({delay:3000}).toast(\'show\');
}
// Refreshable pages
GB_myShow_ref = function(caption, url, /* optional */ height, width, callback_fn, is_reload_on_close,callback_fn) {
//alert("dd");
var options = {
caption: caption,
height: height || 500,
width: width || 800,
fullscreen: false,
show_loading: true,
callback_fn: callback_fn,
overlay_click_close: true,
reload_on_close: is_reload_on_close || true,
callback_fn: callback_fn
}
var win = new GB_Window(options);
return win.show(url);
}
GB_myShow = function(caption, url, /* optional */ height, width, callback_fn, is_reload_on_close,callback_fn) {
//alert("dd");
var options = {
caption: caption,
height: height || 500,
width: width || 800,
fullscreen: false,
show_loading: true,
callback_fn: callback_fn,
overlay_click_close: true,
reload_on_close: is_reload_on_close || false,
callback_fn: callback_fn
}
var win = new GB_Window(options);
return win.show(url);
}
</script>
<!-- <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content"></div>
</div>
</div>
</div>-->
<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" data-backdrop="static">
<div class="modal-dialog modal-lg">
<div class="modal-content">
</div>
</div>
</div>
<?php }else{
// echo "no session";
include("signin.php");
}
?>
'
Did this file decode correctly?
Original Code
<?php eval("?>".base64_decode("PD9waHANCmluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7DQpvYl9zdGFydCgpOw0KaW5jbHVkZSgiaW5jbHVkZS9zZXNzaW9uLnBocCIpOw0KaW5pX3NldCgnZGF0ZS50aW1lem9uZScsICdBZnJpY2EvTmFpcm9iaScpOw0KLy9pbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOw0KJGNvbm4gPSBjb25uZWN0VG9EQigpOw0KJHBpZCA9ICRfR0VUWydwaWQnXTsNCmlmKCRzZXNzaW9uLT5sb2dnZWRfaW4pDQp7ICAgIA0KDQpzZXRjb29raWUoImxvZ2dlZGludXNlciIsJHNlc3Npb24tPnVzZXJuYW1lKTsNCg0KPz4gICANCg0KPCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCI+DQo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4NCjxtZXRhIG5hbWU9ImF1dGhvciIgY29udGVudD0iIj4NCg0KPHRpdGxlPkRyaWxsaW5nIENvbXBhbnk8L3RpdGxlPg0KDQoNCjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjE4MHgxODAiIGhyZWY9ImltYWdlcy9hcHBsZS10b3VjaC1pY29uLnBuZyI+DQo8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjMyeDMyIiBocmVmPSJpbWFnZXMvZmF2aWNvbi0zMngzMi5wbmciPg0KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS9wbmciIHNpemVzPSIxNngxNiIgaHJlZj0iaW1hZ2VzL2Zhdmljb24tMTZ4MTYucG5nIj4NCjxsaW5rIHJlbD0ibWFuaWZlc3QiIGhyZWY9ImltYWdlcy9zaXRlLndlYm1hbmlmZXN0Ij4NCg0KPGxpbmsgaHJlZj0iY3NzL3N0eWxlLmRlZmF1bHQuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KPGxpbmsgaHJlZj0iY3NzL2pxdWVyeS50YWdzaW5wdXQuY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+DQo8bGluayBocmVmPSJjc3MvdG9nZ2xlcy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4NCjxsaW5rIGhyZWY9ImNzcy9ib290c3RyYXAtdGltZXBpY2tlci5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+DQo8bGluayBocmVmPSJjc3Mvc2VsZWN0Mi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4NCjxsaW5rIGhyZWY9ImNzcy9zdHlsZS5kYXRhdGFibGVzLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCjxsaW5rIGhyZWY9ImNzcy9jb2xvcnBpY2tlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4NCjxsaW5rIGhyZWY9ImNzcy9kcm9wem9uZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4NCjwhLS0tc3RhcnQtZGF0ZS1waWtlci0tLS0+DQo8bGluayBocmVmPSJjc3MvanF1ZXJ5LXVpLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCjwhLS0tL0VuZC1kYXRlLXBpa2VyLS0tLT4gIA0KPGxpbmsgaHJlZj0iYWxlcnRzL3N3ZWV0YWxlcnQuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS0xLjExLjEubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJhbGVydHMvc3dlZXRhbGVydC1kZXYuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImluY2x1ZGUvanNfZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4NCg0KDQoNCjxsaW5rIGhyZWY9InBjc3MvZGlzdC9jc3MvY3VzdG9tLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCjwhLS0gPGxpbmsgaHJlZj0icGNzcy9kaXN0L2Nzcy9hZG1pbmx0ZS5jc3MiIHJlbD0ic3R5bGVzaGVldCI+IC0tPg0KDQo8IS0tIGFkbWlubHRlIC0tPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJwY3NzL2Rpc3QvanMvc2NyaXB0LmpzIj48L3NjcmlwdD4NCg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp2YXIgR0JfUk9PVF9ESVIgPSAiLi9ncmV5Ym94LyI7DQo8L3NjcmlwdD4NCg0KPCEtLSBHcmV5IEJveCAtLT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImdyZXlib3gvQUpTLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImdyZXlib3gvQUpTX2Z4LmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImdyZXlib3gvZ2Jfc2NyaXB0cy5qcyI+PC9zY3JpcHQ+DQo8bGluayBocmVmPSJncmV5Ym94L2diX3N0eWxlcy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+DQoNCjwhLS0gc3dlZXQgYWxlcnQgLS0+ICANCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3dlZXRhbGVydDItOC4xNS4wL2Rpc3Qvc3dlZXRhbGVydDIubWluLmNzcyI+DQo8P3BocCBpZigkX0dFVFsncGlkJ10hPTQ0KXs/Pg0KPHNjcmlwdCBzcmM9InN3ZWV0YWxlcnQyLTguMTUuMC9kaXN0L3N3ZWV0YWxlcnQyLmFsbC5taW4uanMiPjwvc2NyaXB0Pg0KPD9waHAgfT8+DQo8IS0tIE9wdGlvbmFsOiBpbmNsdWRlIGEgcG9seWZpbGwgZm9yIEVTNiBQcm9taXNlcyBmb3IgSUUxMSBhbmQgQW5kcm9pZCBicm93c2VyIC0tPg0KPCEtLTxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3Byb21pc2UtcG9seWZpbGwiPjwvc2NyaXB0Pi0tPg0KPCEtLSBFbmQgc3dlZXQgYWxlcnQgLS0+DQo8L2hlYWQ+DQoNCjxib2R5Pg0KDQo8aGVhZGVyPg0KPGRpdiBjbGFzcz0iaGVhZGVyd3JhcHBlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXItbGVmdCI+DQo8YSBocmVmPSJpbmRleC5waHAiIGNsYXNzPSJsb2dvIj4NCjwhLS0gIDxpbWcgc3JjPSJpbWFnZXMvbG9nby5wbmciIGFsdD0iIiAvPiAtLT4NCjwvYT4NCjxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPg0KPGEgaHJlZj0iIiBjbGFzcz0ibWVudS1jb2xsYXBzZSI+DQo8aSBjbGFzcz0iZmEgZmEtYmFycyI+PC9pPg0KPC9hPg0KPC9kaXY+DQo8L2Rpdj48IS0tIGhlYWRlci1sZWZ0IC0tPg0KDQo8ZGl2IGNsYXNzPSJoZWFkZXItcmlnaHQiPg0KPHNwYW4gY2xhc3M9InN1bnRyYWhlYWRpbmciPkJDSSBXYXRlciBEcmlsbGluZyBFeHBlcnRzIDwvc3Bhbj4gPGZvbnQgc2l6ZT0iMSIgY29sb3I9IiNGRkZGRkYiPnYxLjA8L2ZvbnQ+IA0KPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+DQo8ZGl2IGNsYXNzPSJidG4tZ3JvdXAgYnRuLWdyb3VwLW9wdGlvbiI+DQo8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+DQo8P3BocCBlY2hvICRzZXNzaW9uLT5maXJzdG5hbWUuJyAnLiRzZXNzaW9uLT5sYXN0bmFtZTs/PiA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPg0KPC9idXR0b24+DQo8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgcHVsbC1yaWdodCIgcm9sZT0ibWVudSI+DQo8bGk+PGEgaHJlZj0iIyI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tdXNlciI+PC9pPiBNeSBQcm9maWxlPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iIyI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tc3RhciI+PC9pPiBBY3Rpdml0eSBMb2c8L2E+PC9saT4NCjxsaT48YSBocmVmPSJ1c2VyZWRpdC5waHAiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNvZyI+PC9pPiBQYXNzd29yZCBSZXNldDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiMiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24iPjwvaT4gSGVscDwvYT48L2xpPg0KPGxpIGNsYXNzPSJkaXZpZGVyIj48L2xpPg0KPGxpPjxhIGhyZWY9InByb2Nlc3MucGhwIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1sb2ctb3V0Ij48L2k+U2lnbiBPdXQ8L2E+PC9saT4NCjwvdWw+DQo8L2Rpdj48IS0tIGJ0bi1ncm91cCAtLT4NCg0KPC9kaXY+PCEtLSBwdWxsLXJpZ2h0IC0tPg0KDQo8L2Rpdj48IS0tIGhlYWRlci1yaWdodCAtLT4NCg0KPC9kaXY+PCEtLSBoZWFkZXJ3cmFwcGVyIC0tPg0KPC9oZWFkZXI+DQoNCjxzZWN0aW9uPg0KPGRpdiBjbGFzcz0ibWFpbndyYXBwZXIiPg0KPGRpdiBjbGFzcz0ibGVmdHBhbmVsIj4NCjxkaXYgY2xhc3M9Im1lZGlhIHByb2ZpbGUtbGVmdCI+DQo8YSBjbGFzcz0icHVsbC1sZWZ0IHByb2ZpbGUtdGh1bWIiIGhyZWY9ImluZGV4LnBocCI+DQo8aW1nIGNsYXNzPSJpbWctY2lyY2xlIiBzcmM9ImltYWdlcy9yZXBvcnRsb2dvLlBORyIgYWx0PSIiPg0KPC9hPg0KPGRpdiBjbGFzcz0ibWVkaWEtYm9keSI+DQo8aDQgY2xhc3M9Im1lZGlhLWhlYWRpbmciPkxvZ2dlZCBJbiBhczwvaDQ+DQo8c21hbGwgY2xhc3M9InRleHQtbXV0ZWQiPjw/cGhwIGVjaG8gJHNlc3Npb24tPnVzZXJuYW1lOz8+PC9zbWFsbD4NCjwvZGl2Pg0KPC9kaXY+PCEtLSBtZWRpYSAtLT4NCg0KPCEtLSBOYXZpZ2F0aW9uIGhlcmUtLT4NCjw/cGhwDQppbmNsdWRlKCJuYXYucGhwIik7DQo/Pg0KDQo8L2Rpdj48IS0tIGxlZnRwYW5lbCAtLT4NCg0KPGRpdiBjbGFzcz0ibWFpbnBhbmVsIj4NCjxkaXYgY2xhc3M9InBhZ2VoZWFkZXIiPg0KPGRpdiBjbGFzcz0ibWVkaWEiPg0KPGRpdiBjbGFzcz0icGFnZWljb24gcHVsbC1sZWZ0Ij4NCjxpIGNsYXNzPSJmYSBmYS1ob21lIj48L2k+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9Im1lZGlhLWJvZHkiPg0KPHVsIGNsYXNzPSJicmVhZGNydW1iIj4NCjxsaT48YSBocmVmPSIiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWhvbWUiPjwvaT48L2E+PC9saT4NCjxsaT48YSBocmVmPSIiPkRyaWxsaW5nIC8gY29tcGFueTwvYT48L2xpPg0KPGxpPjw/cGhwIGVjaG8gJF9HRVRbJ0luYW1lJ107Pz48L2xpPg0KPC91bD4NCjxoND48P3BocCBpZigkX0dFVFsnSW5hbWUnXSE9JycpIHsgZWNobyAkX0dFVFsnSW5hbWUnXTsgfWVsc2V7Pz5EYXNoYm9hcmQ8P3BocCB9Pz48L2g0Pg0KPC9kaXY+DQo8L2Rpdj48IS0tIG1lZGlhIC0tPg0KPC9kaXY+PCEtLSBwYWdlaGVhZGVyIC0tPg0KDQo8ZGl2IGNsYXNzPSJjb250ZW50cGFuZWwiPg0KPCEtLSBDT05URU5UIEdPRVMgSEVSRSAtLT4NCg0KPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJhbGVydF90b2FzdCIgcm9sZT0iYWxlcnQiIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgc3R5bGU9InBhZGRpbmc6IDEycHg7Ij4gDQogICAgPGRpdiBjbGFzcz0idG9hc3QtYm9keSB0ZXh0LXdoaXRlIj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCg0KPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbmZpcm1fbW9kYWwiIHJvbGU9J2RpYWxvZyc+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLW1kIiByb2xlPSJkb2N1bWVudCI+DQogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCiAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSI+Q29uZmlybWF0aW9uPC9oNT4NCiAgICAgIDwvZGl2Pg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgICAgIDxkaXYgaWQ9ImRlbGV0ZV9jb250ZW50Ij48L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4NCiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGlkPSdjb25maXJtJyBvbmNsaWNrPSIiPkNvbnRpbnVlPC9idXR0b24+DQogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNsb3NlPC9idXR0b24+DQogICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InVuaV9tb2RhbCIgcm9sZT0nZGlhbG9nJz4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtbWQiIHJvbGU9ImRvY3VtZW50Ij4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPg0KICAgICAgICA8aDUgY2xhc3M9Im1vZGFsLXRpdGxlIj48L2g1Pg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgIDwvZGl2Pg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4NCiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGlkPSdzdWJtaXQnIG9uY2xpY2s9IiQoJyN1bmlfbW9kYWwgZm9ybScpLnN1Ym1pdCgpIj5TYXZlPC9idXR0b24+DQogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPg0KICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCg0KPD9waHANCmlmKCRfR0VUWydtb2QnXT09JycpIC8vJiYgJHNlc3Npb24tPnVzZXJsZXZlbD09OSkNCnsNCmluY2x1ZGUoImRhc2hib2FyZC9pbmRleDIucGhwIik7DQp9DQppZihpc3NldCgkX0dFVFsnbW9kJ10pPT0nZG9jdW1lbnRzJykNCnsNCmluY2x1ZGUoImRvY3VtZW50cy9kb2NwYW5lbC5waHAiKTsNCn0gICANCmlmKGlzc2V0KCRfR0VUWydtb2QnXSk9PSdzZXR0aW5ncycpDQp7DQppbmNsdWRlKCJzZXR0aW5ncy9zZXR0cGFuZWwucGhwIik7DQp9IA0KaWYoaXNzZXQoJF9HRVRbJ21vZCddKT09J3NlY3VyaXR5JykNCnsNCmluY2x1ZGUoInNlY3VyaXR5L3NlY3VyaXR5cGFuZWwucGhwIik7DQp9IA0KDQppZihpc3NldCgkX0dFVFsnbW9kJ10pPT0ncHVyY2hhc2VvcmRlcnMnKQ0Kew0KaW5jbHVkZSgicHVyY2hhc2VvcmRlcnMvcHVycGFuZWwucGhwIik7DQp9IA0KDQppZihpc3NldCgkX0dFVFsnbW9kJ10pPT0nbGVhdmVzJykNCnsNCmluY2x1ZGUoImxlYXZlcy9sdnBhbmVsLnBocCIpOw0KfSANCg0KaWYoaXNzZXQoJF9HRVRbJ21vZCddKT09J2xlYWRzJykNCnsNCmluY2x1ZGUoImxlYWRzL2xlYWRwYW5lbC5waHAiKTsNCn0gDQoNCmlmKGlzc2V0KCRfR0VUWydtb2QnXSk9PSdpbnZlbnQnKQ0Kew0KaW5jbHVkZSgiaW52ZW50L2ludmVudG9yeXBhbmVscy5waHAiKTsNCn0gDQoNCg0KaWYoaXNzZXQoJF9HRVRbJ21vZCddKT09J2NvbnRyYWN0cycpDQp7DQppbmNsdWRlKCJjb250cmFjdHMvY3RycGFuZWwucGhwIik7DQp9IA0KDQoNCmlmKGlzc2V0KCRfR0VUWydtb2QnXSk9PSdwYXltZW50cycpDQp7DQppbmNsdWRlKCJwYXltZW50cy9iZ3BhbmVsLnBocCIpOw0KfSANCmlmKCRfR0VUWydtb2QnXT09J3NlcnZpY2VjZW50cmUnKQ0Kew0KaW5jbHVkZSgic2VydmljZWNlbnRyZS9zZXJ2Y2VudHJlcGFuZWwucGhwIik7DQp9DQppZihpc3NldCgkX0dFVFsnbW9kJ10pPT0nZW1wbG95ZWVzJykNCnsNCg0KaW5jbHVkZSgiZW1wbG95ZWVzL2FjY3BhbmVsLnBocCIpOw0KfQ0KDQppZihpc3NldCgkX0dFVFsnbW9kJ10pPT0naW52b2ljZScpDQp7DQoNCmluY2x1ZGUoImludm9pY2UvaW52cGFuZWwucGhwIik7DQp9DQoNCmlmKGlzc2V0KCRfR0VUWydtb2QnXSk9PSdwcm9kdWN0cycpDQp7DQoNCmluY2x1ZGUoInByb2R1Y3RzL3Byb2RwYW5lbC5waHAiKTsNCn0NCg0KaWYoaXNzZXQoJF9HRVRbJ21vZCddKT09InByb2plY3RzIikNCnsNCmluY2x1ZGUoInByb2plY3RzL3Byb2pwYW5lbC5waHAiKTsNCn0NCmlmKCRfR0VUWydtb2QnXT09J21vbmRheXJlcG9ydCcpDQp7DQppbmNsdWRlKCJyZXBvcnRzL3JlcG9ydHNwYW5lbC5waHAiKTsNCn0gIA0KDQppZigkX0dFVFsnbW9kJ109PSdjdXN0b21lcnMnKQ0Kew0KaW5jbHVkZSgiY3VzdG9tZXJzL2N1c3RvbXBhbmVsLnBocCIpOw0KfSAgICAgICAgICANCg0KZWxzZSBpZigkX0dFVFsncGlkJ109PScxMjEnKQ0Kew0KbG9nT3V0KCk7DQp9ICAgICAgICAgIA0KPz4gIA0KDQo8L2Rpdj48IS0tIGNvbnRlbnRwYW5lbCAtLT4NCg0KPC9kaXY+DQo8L2Rpdj48IS0tIG1haW53cmFwcGVyIC0tPg0KPC9zZWN0aW9uPg0KDQoNCg0KPCEtLSA8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LW1pZ3JhdGUtMS4yLjEubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJqcy9qcXVlcnktdWktMS4xMC4zLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvbW9kZXJuaXpyLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvcGFjZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL3JldGluYS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5jb29raWVzLmpzIj48L3NjcmlwdD4NCg0KPHNjcmlwdCBzcmM9ImpzL2Jvb3RzdHJhcC13aXphcmQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJqcy9qcXVlcnkudmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCg0KPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5kYXRhVGFibGVzLm1pbi5qcyI+PC9zY3JpcHQ+DQo8P3BocCBpZigkX0dFVFsnYWN0aW9uJ10hPSdlZGl0Jykgez8+DQo8c2NyaXB0IHNyYz0ianMvc2VsZWN0Mi5taW4uanMiPjwvc2NyaXB0Pg0KPD9waHAgfT8+DQoNCjxzY3JpcHQgc3JjPSJqcy9jdXN0b20uanMiPjwvc2NyaXB0Pi0tPg0KDQo8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LTEuMTEuMS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS1taWdyYXRlLTEuMi4xLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LXVpLTEuMTAuMy5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL21vZGVybml6ci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL3BhY2UubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJqcy9yZXRpbmEubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuY29va2llcy5qcyI+PC9zY3JpcHQ+DQoNCjxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuYXV0b2dyb3ctdGV4dGFyZWEuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5tb3VzZXdoZWVsLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJqcy9qcXVlcnkudGFnc2lucHV0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvdG9nZ2xlcy5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL2Jvb3RzdHJhcC10aW1lcGlja2VyLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvanF1ZXJ5Lm1hc2tlZGlucHV0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmRhdGFUYWJsZXMubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJqcy9zZWxlY3QyLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LnZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvY29sb3JwaWNrZXIuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9ImpzL2Ryb3B6b25lLm1pbi5qcyI+PC9zY3JpcHQ+DQoNCjxzY3JpcHQgc3JjPSJqcy9jdXN0b20uanMiPjwvc2NyaXB0Pg0KDQoNCjwvYm9keT4NCjwvaHRtbD4NCjxzY3JpcHQ+DQpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KLy8gQmFzaWMgRm9ybQ0KalF1ZXJ5KCIjYmFzaWNGb3JtIikudmFsaWRhdGUoew0KaGlnaGxpZ2h0OiBmdW5jdGlvbihlbGVtZW50KSB7DQpqUXVlcnkoZWxlbWVudCkuY2xvc2VzdCgnLmZvcm0tZ3JvdXAnKS5yZW1vdmVDbGFzcygnaGFzLXN1Y2Nlc3MnKS5hZGRDbGFzcygnaGFzLWVycm9yJyk7DQp9LA0Kc3VjY2VzczogZnVuY3Rpb24oZWxlbWVudCkgew0KalF1ZXJ5KGVsZW1lbnQpLmNsb3Nlc3QoJy5mb3JtLWdyb3VwJykucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpOw0KfQ0KfSk7ICAgICAgICAgICAgICAgICAgICANCg0KalF1ZXJ5KCcjYmFzaWNUYWJsZScpLkRhdGFUYWJsZSh7DQpyZXNwb25zaXZlOiB0cnVlLA0KfSk7DQpqUXVlcnkoJyNiYXNpY1RhYmxlMicpLkRhdGFUYWJsZSh7DQpyZXNwb25zaXZlOiB0cnVlLA0KfSk7DQpqUXVlcnkoJyNiYXNpY1RhYmxlMycpLkRhdGFUYWJsZSh7DQpyZXNwb25zaXZlOiB0cnVlLA0KfSk7DQoNCnZhciBzaFRhYmxlID0galF1ZXJ5KCcjc2hUYWJsZScpLkRhdGFUYWJsZSh7DQoiZm5EcmF3Q2FsbGJhY2siOiBmdW5jdGlvbihvU2V0dGluZ3MpIHsNCmpRdWVyeSgnI3NoVGFibGVfcGFnaW5hdGUgdWwnKS5hZGRDbGFzcygncGFnaW5hdGlvbi1hY3RpdmUtZGFyaycpOw0KfSwNCnJlc3BvbnNpdmU6IHRydWUNCn0pOw0KDQovLyBTaG93L0hpZGUgQ29sdW1ucyBEcm9wZG93bg0KalF1ZXJ5KCcjc2hDb2wnKS5jbGljayhmdW5jdGlvbihldmVudCl7DQpldmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCn0pOw0KDQpqUXVlcnkoJyNzaENvbCBpbnB1dCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KDQovLyBHZXQgdGhlIGNvbHVtbiBBUEkgb2JqZWN0DQp2YXIgY29sdW1uID0gc2hUYWJsZS5jb2x1bW4oJCh0aGlzKS52YWwoKSk7DQoNCi8vIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eQ0KaWYgKCQodGhpcykuaXMoJzpjaGVja2VkJykpDQpjb2x1bW4udmlzaWJsZSh0cnVlKTsNCmVsc2UNCmNvbHVtbi52aXNpYmxlKGZhbHNlKTsNCn0pOw0KDQp2YXIgZXhSb3dUYWJsZSA9IGpRdWVyeSgnI2V4Um93VGFibGUnKS5EYXRhVGFibGUoew0KcmVzcG9uc2l2ZTogdHJ1ZSwNCiJmbkRyYXdDYWxsYmFjayI6IGZ1bmN0aW9uKG9TZXR0aW5ncykgew0KalF1ZXJ5KCcjZXhSb3dUYWJsZV9wYWdpbmF0ZSB1bCcpLmFkZENsYXNzKCdwYWdpbmF0aW9uLWFjdGl2ZS1zdWNjZXNzJyk7DQp9LA0KImFqYXgiOiAiYWpheC9vYmplY3RzLnR4dCIsDQoiY29sdW1ucyI6IFsNCnsNCiJjbGFzcyI6ICAgICAgICAgICdkZXRhaWxzLWNvbnRyb2wnLA0KIm9yZGVyYWJsZSI6ICAgICAgZmFsc2UsDQoiZGF0YSI6ICAgICAgICAgICBudWxsLA0KImRlZmF1bHRDb250ZW50IjogJycNCn0sDQp7ICJkYXRhIjogIm5hbWUiIH0sDQp7ICJkYXRhIjogInBvc2l0aW9uIiB9LA0KeyAiZGF0YSI6ICJvZmZpY2UiIH0sDQp7ICJkYXRhIjogInNhbGFyeSIgfQ0KXSwNCiJvcmRlciI6IFtbMSwgJ2FzYyddXSANCn0pOw0KDQovLyBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGV0YWlscw0KalF1ZXJ5KCcjZXhSb3dUYWJsZSB0Ym9keScpLm9uKCdjbGljaycsICd0ZC5kZXRhaWxzLWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7DQp2YXIgdHIgPSAkKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7DQp2YXIgcm93ID0gZXhSb3dUYWJsZS5yb3coIHRyICk7DQoNCmlmICggcm93LmNoaWxkLmlzU2hvd24oKSApIHsNCi8vIFRoaXMgcm93IGlzIGFscmVhZHkgb3BlbiAtIGNsb3NlIGl0DQpyb3cuY2hpbGQuaGlkZSgpOw0KdHIucmVtb3ZlQ2xhc3MoJ3Nob3duJyk7DQp9DQplbHNlIHsNCi8vIE9wZW4gdGhpcyByb3cNCnJvdy5jaGlsZCggZm9ybWF0KHJvdy5kYXRhKCkpICkuc2hvdygpOw0KdHIuYWRkQ2xhc3MoJ3Nob3duJyk7DQp9DQp9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCi8vIFRhZ3MgSW5wdXQNCmpRdWVyeSgnI3RhZ3MnKS50YWdzSW5wdXQoe3dpZHRoOidhdXRvJ30pOw0KDQovLyBUZXh0YXJlYSBBdXRvZ3Jvdw0KalF1ZXJ5KCcjYXV0b1Jlc2l6ZVRBJykuYXV0b2dyb3coKTsNCg0KLy8gU3Bpbm5lcg0KdmFyIHNwaW5uZXIgPSBqUXVlcnkoJyNzcGlubmVyJykuc3Bpbm5lcigpOw0Kc3Bpbm5lci5zcGlubmVyKCd2YWx1ZScsIDApOw0KDQovLyBGb3JtIFRvZ2dsZXMNCmpRdWVyeSgnLnRvZ2dsZScpLnRvZ2dsZXMoe29uOiB0cnVlfSk7DQoNCi8vIFRpbWUgUGlja2VyDQpqUXVlcnkoJyN0aW1lcGlja2VyJykudGltZXBpY2tlcih7ZGVmYXVsdFRJbWU6IGZhbHNlfSk7DQpqUXVlcnkoJy50aW1lcGlja2VyMicpLnRpbWVwaWNrZXIoe3Nob3dNZXJpZGlhbjogZmFsc2V9KTsNCmpRdWVyeSgnI3RpbWVwaWNrZXIzJykudGltZXBpY2tlcih7bWludXRlU3RlcDogMTV9KTsNCg0KLy8gRGF0ZSBQaWNrZXINCmpRdWVyeSgnLmRhdGVwaWNrZXInKS5kYXRlcGlja2VyKHsNCmNoYW5nZU1vbnRoOiB0cnVlLA0KY2hhbmdlWWVhcjogdHJ1ZSwNCmRhdGVGb3JtYXQ6ICJ5eS1tbS1kZCINCn0pOw0KalF1ZXJ5KCcjZGF0ZXBpY2tlci1pbmxpbmUnKS5kYXRlcGlja2VyKCk7DQpqUXVlcnkoJyNkYXRlcGlja2VyLW11bHRpcGxlJykuZGF0ZXBpY2tlcih7DQpudW1iZXJPZk1vbnRoczogMywNCnNob3dCdXR0b25QYW5lbDogdHJ1ZQ0KfSk7DQoNCg0KDQoNCg0KLy8gU2VsZWN0Mg0KalF1ZXJ5KCIjc2VsZWN0LWJhc2ljLCAjc2VsZWN0LW11bHRpIikuc2VsZWN0MigpOw0KalF1ZXJ5KCIjc2VsZWN0LWJhc2ljMyIpLnNlbGVjdDIoKTsNCmpRdWVyeSgnI3NlbGVjdC1zZWFyY2gtaGlkZScpLnNlbGVjdDIoew0KbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IC0xDQp9KTsNCg0KalF1ZXJ5KCIuc2VsZWN0LWJhc2ljLCAuc2VsZWN0LW11bHRpIikuc2VsZWN0MigpOw0KalF1ZXJ5KCcuc2VsZWN0LXNlYXJjaC1oaWRlJykuc2VsZWN0Mih7DQptaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogLTENCn0pOw0KDQpmdW5jdGlvbiBmb3JtYXQoaXRlbSkgew0KcmV0dXJuICc8aSBjbGFzcz0iZmEgJyArICgoaXRlbS5lbGVtZW50WzBdLmdldEF0dHJpYnV0ZSgncmVsJykgPT09IHVuZGVmaW5lZCk/IiI6aXRlbS5lbGVtZW50WzBdLmdldEF0dHJpYnV0ZSgncmVsJykgKSArICcgbXIxMCI+PC9pPicgKyBpdGVtLnRleHQ7DQp9DQoNCi8vIFRoaXMgd2lsbCBlbXB0eSBmaXJzdCBvcHRpb24gaW4gc2VsZWN0IHRvIGVuYWJsZSBwbGFjZWhvbGRlcg0KLy8gICAgalF1ZXJ5KCdzZWxlY3Qgb3B0aW9uOmZpcnN0LWNoaWxkJykudGV4dCgnJyk7DQoNCmpRdWVyeSgiI3NlbGVjdC10ZW1wbGF0aW5nIikuc2VsZWN0Mih7DQpmb3JtYXRSZXN1bHQ6IGZvcm1hdCwNCmZvcm1hdFNlbGVjdGlvbjogZm9ybWF0LA0KZXNjYXBlTWFya3VwOiBmdW5jdGlvbihtKSB7IHJldHVybiBtOyB9DQp9KTsNCg0KLy8gQ29sb3IgUGlja2VyDQppZihqUXVlcnkoJyNjb2xvcnBpY2tlcicpLmxlbmd0aCA+IDApIHsNCmpRdWVyeSgnI2NvbG9yU2VsZWN0b3InKS5Db2xvclBpY2tlcih7DQpvblNob3c6IGZ1bmN0aW9uIChjb2xwa3IpIHsNCmpRdWVyeShjb2xwa3IpLmZhZGVJbig1MDApOw0KcmV0dXJuIGZhbHNlOw0KfSwNCm9uSGlkZTogZnVuY3Rpb24gKGNvbHBrcikgew0KalF1ZXJ5KGNvbHBrcikuZmFkZU91dCg1MDApOw0KcmV0dXJuIGZhbHNlOw0KfSwNCm9uQ2hhbmdlOiBmdW5jdGlvbiAoaHNiLCBoZXgsIHJnYikgew0KalF1ZXJ5KCcjY29sb3JTZWxlY3RvciBzcGFuJykuY3NzKCdiYWNrZ3JvdW5kQ29sb3InLCAnIycgKyBoZXgpOw0KalF1ZXJ5KCcjY29sb3JwaWNrZXInKS52YWwoJyMnK2hleCk7DQp9DQp9KTsNCn0NCg0KLy8gQ29sb3IgUGlja2VyIEZsYXQgTW9kZQ0KalF1ZXJ5KCcjY29sb3JwaWNrZXJob2xkZXInKS5Db2xvclBpY2tlcih7DQpmbGF0OiB0cnVlLA0Kb25DaGFuZ2U6IGZ1bmN0aW9uIChoc2IsIGhleCwgcmdiKSB7DQpqUXVlcnkoJyNjb2xvcnBpY2tlcjMnKS52YWwoJyMnK2hleCk7DQp9DQp9KTsNCg0KDQp9KTsNCg0KICAgICB3aW5kb3cuc3RhcnRfbG9hZCA9IGZ1bmN0aW9uKCl7DQogICAgJCgnYm9keScpLnByZXBlbmQoJzxkaXYgaWQ9InByZWxvYWRlcjIiPjwvZGl2PicpOw0KICAgICQoIiN1bmlfbW9kYWwiKS5oaWRlKCk7DQogIH0NCiAgd2luZG93LmVuZF9sb2FkID0gZnVuY3Rpb24oKXsNCiAgICAkKCcjcHJlbG9hZGVyMicpLmZhZGVPdXQoJ2Zhc3QnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsNCiAgICAgIH0pDQogIH0NCg0KDQp3aW5kb3cudW5pX21vZGFsID0gZnVuY3Rpb24oJHRpdGxlID0gJycgLCAkdXJsPScnLCRzaXplPSIiKXsNCiAgICAvL3N0YXJ0X2xvYWQoKQ0KICAgICQuYWpheCh7DQogICAgICAgIHVybDokdXJsLA0KICAgICAgICBlcnJvcjplcnI9PnsNCiAgICAgICAgICAgIGNvbnNvbGUubG9nKCkNCiAgICAgICAgICAgIGFsZXJ0KCJBbiBlcnJvciBvY2N1cmVkIik7DQogICAgICAgIH0sDQogICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24ocmVzcCl7DQogICAgICAgICAgICBpZihyZXNwKXsNCiAgICAgICAgICAgICAgICAkKCcjdW5pX21vZGFsIC5tb2RhbC10aXRsZScpLmh0bWwoJHRpdGxlKTsNCiAgICAgICAgICAgICAgICAkKCcjdW5pX21vZGFsIC5tb2RhbC1ib2R5JykuaHRtbChyZXNwKTsNCiAgICAgICAgICAgICAgICBpZigkc2l6ZSAhPSAnJyl7DQogICAgICAgICAgICAgICAgICAgICQoJyN1bmlfbW9kYWwgLm1vZGFsLWRpYWxvZycpLmFkZENsYXNzKCRzaXplKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgJCgnI3VuaV9tb2RhbCAubW9kYWwtZGlhbG9nJykucmVtb3ZlQXR0cigiY2xhc3MiKS5hZGRDbGFzcygibW9kYWwtZGlhbG9nIG1vZGFsLW1kIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQoJyN1bmlfbW9kYWwnKS5tb2RhbCgnc2hvdycpOw0KICAgICAgICAgICAgICAgIGVuZF9sb2FkKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9KQ0KfQ0Kd2luZG93Ll9jb25mID0gZnVuY3Rpb24oJG1zZz0nJywkZnVuYz0nJywkcGFyYW1zID0gW10pew0KICAgICAkKCcjY29uZmlybV9tb2RhbCAjY29uZmlybScpLmF0dHIoJ29uY2xpY2snLCRmdW5jKyIoIiskcGFyYW1zLmpvaW4oJywnKSsiKSIpOw0KICAgICAkKCcjY29uZmlybV9tb2RhbCAubW9kYWwtYm9keScpLmh0bWwoJG1zZyk7DQogICAgICQoJyNjb25maXJtX21vZGFsJykubW9kYWwoJ3Nob3cnKTsNCiAgfQ0KDQoNCndpbmRvdy5hbGVydF90b2FzdD0gZnVuY3Rpb24oJG1zZyA9ICdURVNUJywkYmcgPSAnc3VjY2Vzcycpew0KICAgICAgJCgnI2FsZXJ0X3RvYXN0JykucmVtb3ZlQ2xhc3MoJ2JnLXN1Y2Nlc3MnKTsNCiAgICAgICQoJyNhbGVydF90b2FzdCcpLnJlbW92ZUNsYXNzKCdiZy1kYW5nZXInKTsNCiAgICAgICQoJyNhbGVydF90b2FzdCcpLnJlbW92ZUNsYXNzKCdiZy1pbmZvJyk7DQogICAgICAkKCcjYWxlcnRfdG9hc3QnKS5yZW1vdmVDbGFzcygnYmctd2FybmluZycpOw0KDQogICAgaWYoJGJnID09ICdzdWNjZXNzJykNCiAgICAgICQoJyNhbGVydF90b2FzdCcpLmFkZENsYXNzKCdiZy1zdWNjZXNzJyk7DQogICAgaWYoJGJnID09ICdkYW5nZXInKQ0KICAgICAgJCgnI2FsZXJ0X3RvYXN0JykuYWRkQ2xhc3MoJ2JnLWRhbmdlcicpOw0KICAgIGlmKCRiZyA9PSAnaW5mbycpDQogICAgICAkKCcjYWxlcnRfdG9hc3QnKS5hZGRDbGFzcygnYmctaW5mbycpOw0KICAgIGlmKCRiZyA9PSAnd2FybmluZycpDQogICAgICAkKCcjYWxlcnRfdG9hc3QnKS5hZGRDbGFzcygnYmctd2FybmluZycpOw0KICAgICQoJyNhbGVydF90b2FzdCAudG9hc3QtYm9keScpLmh0bWwoJG1zZyk7DQogICAgJCgnI2FsZXJ0X3RvYXN0JykudG9hc3Qoe2RlbGF5OjMwMDB9KS50b2FzdCgnc2hvdycpOw0KICB9DQoNCg0KLy8gUmVmcmVzaGFibGUgcGFnZXMNCkdCX215U2hvd19yZWYgPSBmdW5jdGlvbihjYXB0aW9uLCB1cmwsIC8qIG9wdGlvbmFsICovIGhlaWdodCwgd2lkdGgsIGNhbGxiYWNrX2ZuLCBpc19yZWxvYWRfb25fY2xvc2UsY2FsbGJhY2tfZm4pIHsNCi8vYWxlcnQoImRkIik7DQp2YXIgb3B0aW9ucyA9IHsNCmNhcHRpb246IGNhcHRpb24sDQpoZWlnaHQ6IGhlaWdodCB8fCA1MDAsDQp3aWR0aDogd2lkdGggfHwgODAwLA0KZnVsbHNjcmVlbjogZmFsc2UsDQpzaG93X2xvYWRpbmc6IHRydWUsDQpjYWxsYmFja19mbjogY2FsbGJhY2tfZm4sDQpvdmVybGF5X2NsaWNrX2Nsb3NlOiB0cnVlLA0KcmVsb2FkX29uX2Nsb3NlOiBpc19yZWxvYWRfb25fY2xvc2UgfHwgdHJ1ZSwNCmNhbGxiYWNrX2ZuOiBjYWxsYmFja19mbg0KfQ0KdmFyIHdpbiA9IG5ldyBHQl9XaW5kb3cob3B0aW9ucyk7DQpyZXR1cm4gd2luLnNob3codXJsKTsNCn0NCg0KR0JfbXlTaG93ID0gZnVuY3Rpb24oY2FwdGlvbiwgdXJsLCAvKiBvcHRpb25hbCAqLyBoZWlnaHQsIHdpZHRoLCBjYWxsYmFja19mbiwgaXNfcmVsb2FkX29uX2Nsb3NlLGNhbGxiYWNrX2ZuKSB7DQovL2FsZXJ0KCJkZCIpOw0KdmFyIG9wdGlvbnMgPSB7DQpjYXB0aW9uOiBjYXB0aW9uLA0KaGVpZ2h0OiBoZWlnaHQgfHwgNTAwLA0Kd2lkdGg6IHdpZHRoIHx8IDgwMCwNCmZ1bGxzY3JlZW46IGZhbHNlLA0Kc2hvd19sb2FkaW5nOiB0cnVlLA0KY2FsbGJhY2tfZm46IGNhbGxiYWNrX2ZuLA0Kb3ZlcmxheV9jbGlja19jbG9zZTogdHJ1ZSwNCnJlbG9hZF9vbl9jbG9zZTogaXNfcmVsb2FkX29uX2Nsb3NlIHx8IGZhbHNlLA0KY2FsbGJhY2tfZm46IGNhbGxiYWNrX2ZuDQp9DQp2YXIgd2luID0gbmV3IEdCX1dpbmRvdyhvcHRpb25zKTsNCnJldHVybiB3aW4uc2hvdyh1cmwpOw0KfQ0KDQo8L3NjcmlwdD4NCg0KPCEtLSA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIGJzLWV4YW1wbGUtbW9kYWwtbGciIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBkYXRhLWJhY2tkcm9wPSJzdGF0aWMiPg0KPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIj4NCjxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1sZyI+DQo8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij48L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4tLT4NCg0KPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSBicy1leGFtcGxlLW1vZGFsLWxnIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgZGF0YS1iYWNrZHJvcD0ic3RhdGljIj4NCjxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1sZyI+DQo8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCg0KDQo8P3BocCAgfWVsc2V7DQovLyBlY2hvICJubyBzZXNzaW9uIjsNCmluY2x1ZGUoInNpZ25pbi5waHAiKTsNCn0NCj8+ICAgDQo=")); ?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 04647a83d288186630601afc1ed7fa4b |
Eval Count | 1 |
Decode Time | 46 ms |