<?php
/********************************************************************
//                         Koi downloader
//                     =======================
//                   Copyright (C) 2007 Steve H
//                      http://ComicCMS.com/
//-------------------------------------------------------------------
//  This program is free software; you can redistribute it and/or
//  modify it under the terms of the GNU General Public License
//  as published by the Free Software Foundation; either version 3
//  of the License, or (at your option) any later version.
//  
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  
//  http://www.gnu.org/copyleft/gpl.html
//
********************************************************************/

header('cache-control: no-cache');
header('pragma: no-cache');

$GLOBALS['project'] = array(
    'name'=>'ComicCMS',
    'author'=>'Steve H',
    'url'=>'http://comiccms.com/',
    'version'=>'0.2',
    'blurb'=>'A php program that can set up and manage an entire webcomic site without the need for mysql',
    'continue'=>'admin/', // The url to direct the user to after Koi has finished
);

// setting => value
// Koi settings
$GLOBALS['settings'] = array(
    'gz'=>true, // Allow gz compressed transfer? (Need gz files on all mirrors)
    'keeplock'=>true, // Keep lock.php file for IP lock in your installation script
);


// url => weight
// If Koi is left to decide which mirror to use the weight will
// dictate the likelyhood of each mirror being used. It's relative
// to the list so 10:100 is the same as 1:10
$GLOBALS['mirrors'] = array(
    'http://comiccms.com/repo/'=>1,
);


// ext => content-type
// File extensions to send headers for
$GLOBALS['filetypes'] = array(
    'png'=>'image/png',
    'gif'=>'image/gif',
    'jpg'=>'image/jpeg',
    'jpeg'=>'image/jpeg',
    'js'=>'text/javascript',
    'css'=>'text/css',
    'txt'=>'text/plain',
    'html'=>'text/html',
    'xml'=>'text/xml',
);



/*
 * =============================================
 *         Do not edit below this point
 * =============================================
 * 
 *  Any further modifications should be done in
 *  design.php and whatever other files you use
 * 
 */



//////////////////////////////
// Other files
if (isset($_GET['f'])) {
    // Headers
    $ext = strtolower(substr($_GET['f'],(strrpos($_GET['f'],'.')+1)));
    if (isset($GLOBALS['filetypes'][$ext])) header('content-type: '.$GLOBALS['filetypes'][$ext]);
    // Print file
    echo koi_file_unpack($_GET['f']);
    exit;
}



//////////////////////////////
// AJAJ calls
if (isset($_GET['stage'])) koi_import('koi_apply.php');



//////////////////////////////
// HTML call
$status = 'good';
$write = false;
if (is_file('lock.php')) {
    $lock = file('./lock.php');
    if ( (rtrim($lock[0])=='<?php exit; ?' . '>') && ($_SERVER['REMOTE_ADDR']!=$lock[1]) ) {
        $status = 'lock';
        $write = true;
    } elseif (is_writeable('./')) {
        $write = true;
    }
} elseif ($fhandle = @fopen('./lock.php','w')) {
    if (@fwrite($fhandle,'<?php exit; ?' . '>' . "\n" . $_SERVER['REMOTE_ADDR'])) {
        $write = true;
    }
    fclose($fhandle);
}
if (!$write) $status = 'write';

koi_import('design.php');



/*
 * ==============================================
 *            Now the file handlers
 * ==============================================
 * 
 */



function koi_import($file) {
    global $status; // Pass the variable status across for design.php
    eval('?>'.koi_file_unpack($file));
}


function koi_file_unpack($file) {
    $filelist = koi_filelist();
    $func = 'koifile_'.str_replace('.','_',$file);
    if ( (in_array($file,$filelist)) && (function_exists($func)) ) {
        return base64_decode($func());
    } else return false;
}



/*
 * ==============================================
 *        Every single file (in base64)
 * ==============================================
 * 
 */

function koifile_background_png() {return 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAABmJLR0QA/wD/AP+gvaeTAAAASklEQVQ4y2O4cf/VfyYGIBhw4j8qgU2MdAnamYLTgMHkSCraSx1HDlPjBypSsEmQbgB1jKdxMqOOfwcqHdC4aBnaqZjqrmcYsQAAV8gEa9SPjEkAAAAASUVORK5CYII=';}
function koifile_cleanup_png() {return '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';}
function koifile_dark_png() {return 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAQAAAAm93DmAAAAAmJLR0QA/4ePzL8AAAAlSURBVEiJ7cwxDQAADAOg2q/rithOwk/SZ0KhUCgUCoVCoVB4MxL+WG5AQ05lAAAAAElFTkSuQmCC';}
function koifile_design_css() {return 'LyogQ29yZSBsYXlvdXQgKi8KKiB7bWFyZ2luOjBweDsgcGFkZGluZzowcHg7fQpib2R5IHtmb250LXNpemU6MTRweDsgZm9udC1mYW1pbHk6aGVsdmV0aWNhLCB2ZXJkYW5hLCBhcmlhbDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJhY2tncm91bmQtY29sb3I6I2ZmZjsgYmFja2dyb3VuZC1pbWFnZTp1cmwoP2Y9YmFja2dyb3VuZC5wbmcpOyBiYWNrZ3JvdW5kLXBvc2l0aW9uOnRvcCBsZWZ0OyBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsgb3ZlcmZsb3c6aGlkZGVuO30KCi8qIFRhZyBkZWZhdWx0cyAqLwphLCBhOmFjdGl2ZSB7b3V0bGluZTpub25lO30KcCB7bWFyZ2luOjEwcHg7fQp1bCB7bWFyZ2luLWxlZnQ6MjBweDt9Ci8qIEdlbmVyYWwgc3RhdHVzICovCi5nb29kIHtjb2xvcjojM2JiMTI1O30KLndhcm5pbmcge2NvbG9yOiNiYmIxMjU7fQouYmFkIHtjb2xvcjojYmI0MTI1OyBiYWNrZ3JvdW5kLWNvbG9yOiNmYmUxYzU7fQoKLyogTWFpbiBCb3ggKi8KI21haW5ib3gge3otaW5kZXg6MTsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDo0NSU7IGxlZnQ6NTAlOyBtYXJnaW46LTE1MHB4IDBweCAwcHggLTMyMHB4OyBoZWlnaHQ6MjgwcHg7IHdpZHRoOjYwMHB4OyBwYWRkaW5nOjEwcHggMjBweDsgYm9yZGVyOmRvdWJsZSAzcHggIzg4ODsgYmFja2dyb3VuZC1jb2xvcjojZmZmO30KI21haW5jb250ZW50IHttYXJnaW4tbGVmdDoxNDBweDsgcGFkZGluZy1sZWZ0OjIwcHg7fQpoMSB7aGVpZ2h0OjMwcHg7IHBhZGRpbmctcmlnaHQ6MjBweDsgbGluZS1oZWlnaHQ6MzBweDsgdGV4dC1hbGlnbjpyaWdodDsgZm9udC1zaXplOjE4cHg7IGJvcmRlci1ib3R0b206c29saWQgMXB4OyBjb2xvcjojODg4O30KI3NsaWRlcyB7cG9zaXRpb246cmVsYXRpdmU7IGhlaWdodDoyMDBweDsgbWFyZ2luOjE1cHggMHB4IDVweDt9CiNpbnRyb2JveCwgI3Byb2dyZXNzYm94LCAjZW5kYm94IHtwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjBweDsgbGVmdDowcHg7IHdpZHRoOjEwMCU7fQpoMiB7Zm9udC1mYW1pbHk6YXJpYWw7IGZvbnQtc2l6ZToxN3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgY29sb3I6IzNiN2M4Nzt9Ci5idXR0b24ge2ZvbnQtc2l6ZToxOHB4OyBtYXJnaW4tdG9wOjIwcHg7IHBhZGRpbmc6NXB4IDIwcHg7IGNvbG9yOiM0NDQ7IGZvbnQtd2VpZ2h0Om5vcm1hbDt9CgovKiBQcm9ncmVzcyB0YWJzICovCiNwcm9ncmVzc3RhYnMge2Zsb2F0OmxlZnQ7IHdpZHRoOjE0MHB4O30KLmN1cnJlbnQsIC5kb25lLCAucXVldWUge292ZXJmbG93OmhpZGRlbjsgY2xlYXI6bGVmdDsgcGFkZGluZzoxMXB4IDBweDsgaGVpZ2h0OjQ4cHg7IGxpbmUtaGVpZ2h0OjQ4cHg7IG1hcmdpbjowcHg7IHRleHQtYWxpZ246bGVmdDsgZm9udC1zaXplOjEycHg7fQouY3VycmVudCBpbWcsIC5kb25lIGltZywgLnF1ZXVlIGltZyB7ZmxvYXQ6bGVmdDsgcGFkZGluZy1yaWdodDoxMHB4O30KLmN1cnJlbnQge2JvcmRlci1yaWdodDpzb2xpZCAycHggIzg4ODsgb3BhY2l0eToxO30KLmRvbmUsIC5xdWV1ZSB7Ym9yZGVyLXJpZ2h0OmRvdHRlZCAycHggIzg4ODsgb3BhY2l0eTowLjQ7fQoKLyogUHJvZ3Jlc3MgYmFyICovCiNwcm9ncmVzc2JhciB7cG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbjowcHggYXV0bzsgd2lkdGg6NDAwcHg7IHBhZGRpbmc6MXB4IDBweDsgdGV4dC1hbGlnbjpsZWZ0O30KI3Byb2dyZXNzYmFjayB7aGVpZ2h0OjE4cHg7IG1hcmdpbi1ib3R0b206LTE4cHg7fQojcHJvZ3Jlc3N3aWR0aCB7aGVpZ2h0OjE4cHg7fQoKI3Byb2dyZXNzbm90ZSB7cG9zaXRpb246YWJzb2x1dGU7IHRvcDowcHg7IGxlZnQ6MHB4OyB3aWR0aDo0MDBweDsgaGVpZ2h0OjIwcHg7IGJhY2tncm91bmQtaW1hZ2U6dXJsKD9mPWZyYW1lLnBuZyk7IG92ZXJmbG93OmhpZGRlbjt9CiNwcm9ncmVzc3N0YXR1cyB7ZGlzcGxheTpibG9jazsgbGluZS1oZWlnaHQ6MThweDsgZm9udC1zaXplOjEycHg7IHRleHQtYWxpZ246Y2VudGVyOyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojNDQ0O30KCi8qIEFsZXJ0cyBqdW5rICovCiNhbGVydCB7ei1pbmRleDoxMDsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDowcHg7IGxlZnQ6MHB4OyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgYmFja2dyb3VuZC1pbWFnZTp1cmwoP2Y9ZGFyay5wbmcpO30KI2FsZXJ0bXNnIHttYXJnaW46MTUwcHggYXV0byAwcHg7IHBhZGRpbmc6MTBweDsgd2lkdGg6NDAwcHg7IGJvcmRlcjpzb2xpZCAycHggI2FhYTsgYmFja2dyb3VuZC1jb2xvcjojZWVlO30KI2FsZXJ0b2sge2Rpc3BsYXk6YmxvY2s7IHdpZHRoOjYwJTsgbWFyZ2luOjIwcHggYXV0byAxMHB4O30KCi8qIEluaXRpYWwgaGlkZSAqLwojYWxlcnQsICNpbnRyb2JveCwgI3Byb2dyZXNzYm94LCAjZW5kYm94LCAjZG93bmxvYWRlcnJvciB7ZGlzcGxheTpub25lO30=';}
function koifile_design_js() {return 'd2luZG93LmFkZEV2ZW50KCdkb21yZWFkeScsZnVuY3Rpb24gKCkgewogICAgJCgnaW50cm9ib3gnKS5zZXRTdHlsZXMoeydvcGFjaXR5JzowLCdkaXNwbGF5JzonYmxvY2snfSk7CiAgICBuZXcgRnguU3R5bGUoJCgnaW50cm9ib3gnKSwnb3BhY2l0eScseydkdXJhdGlvbic6MTUwMH0pLnN0YXJ0KDEpOwp9KTsKCmZ1bmN0aW9uIGtvaV9zdGFydCgpIHsKICAgIG5ldyBGeC5TdHlsZSgkKCdpbnRyb2JveCcpLCdvcGFjaXR5Jyx7J2R1cmF0aW9uJzoxMDAwLCdvbkNvbXBsZXRlJzpmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgnaW50cm9ib3gnKS5zZXRTdHlsZSgnZGlzcGxheScsJ25vbmUnKTsKICAgIH19KS5zdGFydCgwKTsKICAgICQoJ3Byb2dyZXNzYm94Jykuc2V0U3R5bGVzKHsnb3BhY2l0eSc6MCwnZGlzcGxheSc6J2Jsb2NrJ30pOwogICAgbmV3IEZ4LlN0eWxlKCQoJ3Byb2dyZXNzYm94JyksJ29wYWNpdHknLHsnZHVyYXRpb24nOjE1MDAsb25Db21wbGV0ZTpmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgncHJvZ3Jlc3N3aWR0aCcpLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywnIzU0NzZmZicpOwogICAgICAgIAogICAgICAgIC8vIENhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBpbnN0YWxsYXRpb24KICAgICAgICBrb2lfc3RhcnRjYWxsYmFjaygpOwogICAgfX0pLnN0YXJ0KDEpOwp9CgoKLy8gQ2FsbGVkIGFmdGVyIGV2ZXJ5IHF1ZXJ5CnZhciBsYXN0ZnggPSBmYWxzZTsKdmFyIGxhc3RzdGFnZSA9IGZhbHNlOwpmdW5jdGlvbiBrb2lfY2hhbmdlKHN0YWdlLG1lc3NhZ2UscGVyY2VudCxkdXJhdGlvbikgewogICAgLy8gUHJvZ3Jlc3MgYmFyCiAgICB2YXIgY29sb3IgPSBuZXcgQ29sb3IoJyM2NDg2ZmYnKS5taXgoJyM3NmZmNTQnLCBwZXJjZW50KTsKICAgIGlmIChsYXN0ZngpIGxhc3RmeC5zdG9wKCk7CiAgICBsYXN0ZnggPSBuZXcgRnguU3R5bGVzKCQoJ3Byb2dyZXNzd2lkdGgnKSx7CiAgICAgICAgJ2R1cmF0aW9uJzooZHVyYXRpb24rKGR1cmF0aW9uLzMpKSwKICAgICAgICAndHJhbnNpdGlvbic6IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZU91dCwKICAgICAgICAnd2FpdCc6ZmFsc2UKICAgIH0pLnN0YXJ0KHsKICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6Y29sb3IucmdiVG9IZXgoKSwKICAgICAgICAnd2lkdGgnOihwZXJjZW50KjQpCiAgICB9KTsKICAgIAogICAgCiAgICAvLyBTdGFnZSB0YWJzCiAgICBpZiAoc3RhZ2UgIT0gbGFzdHN0YWdlKSB7CiAgICAgICAgJChzdGFnZSArICd0YWInKS5yZW1vdmVDbGFzcygicXVldWUiKS5hZGRDbGFzcygiY3VycmVudCIpOwogICAgICAgICQoc3RhZ2UgKyAndGFiJykuc2V0U3R5bGUoJ2JvcmRlci1jb2xvcicsY29sb3IucmdiVG9IZXgoKSk7CiAgICAgICAgaWYgKGxhc3RzdGFnZSkgJChsYXN0c3RhZ2UgKyAndGFiJykucmVtb3ZlQ2xhc3MoImN1cnJlbnQiKS5hZGRDbGFzcygiZG9uZSIpOwogICAgICAgIGxhc3RzdGFnZSA9IHN0YWdlOwogICAgICAgIAogICAgICAgIC8vIFByb2dyZXNzIGJhciBtZXNzYWdlCiAgICAgICAgc3RhdHVzKG1lc3NhZ2UpOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoIXN0YWdlKSB7CiAgICAgICAgICAgIHN0YXR1cyhtZXNzYWdlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBQcm9ncmVzcyBiYXIgbWVzc2FnZSAod2l0aG91dCBlZmZlY3QpCiAgICAgICAgICAgIHN0YXR1cyhtZXNzYWdlLHRydWUpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHBlcmNlbnQ9PTEwMCkgewogICAgICAgIC8vIFdhaXQgdW50aWwgdGhlIHByb2dyZXNzIGJhciBoYXMgZmlsbGVkCiAgICAgICAgd2luZG93LnNldFRpbWVvdXQoImVuZCgpIixkdXJhdGlvbisoZHVyYXRpb24vMykpOwogICAgfQp9CgpmdW5jdGlvbiBlbmQoKSB7CiAgICBzdGF0dXMoIkFsbCBkb25lISIpOwogICAgJChsYXN0c3RhZ2UgKyAndGFiJykucmVtb3ZlQ2xhc3MoImN1cnJlbnQiKS5hZGRDbGFzcygiZG9uZSIpOwogICAgCiAgICBuZXcgRnguU3R5bGUoJCgncHJvZ3Jlc3Nib3gnKSwnb3BhY2l0eScseydkdXJhdGlvbic6MTAwMCwnb25Db21wbGV0ZSc6ZnVuY3Rpb24gKCkgewogICAgICAgICQoJ3Byb2dyZXNzYm94Jykuc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9fSkuc3RhcnQoMCk7CiAgICAkKCdlbmRib3gnKS5zZXRTdHlsZXMoeydvcGFjaXR5JzowLCdkaXNwbGF5JzonYmxvY2snfSk7CiAgICBuZXcgRnguU3R5bGUoJCgnZW5kYm94JyksJ29wYWNpdHknLHsnZHVyYXRpb24nOjE1MDB9KS5zdGFydCgxKTsKfQoKCi8vIENhbGxlZCBpZiBkb3dubG9hZCBmYWlscwpmdW5jdGlvbiBrb2lfZG93bmxvYWRlcnJvcigpIHsKICAgIG5ldyBGeC5TdHlsZSgkKCdwcm9ncmVzc2JveCcpLCdvcGFjaXR5Jyx7J2R1cmF0aW9uJzoxMDAwLCdvbkNvbXBsZXRlJzpmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgncHJvZ3Jlc3Nib3gnKS5zZXRTdHlsZSgnZGlzcGxheScsJ25vbmUnKTsKICAgIH19KS5zdGFydCgwKTsKICAgICQoJ2Rvd25sb2FkZXJyb3InKS5zZXRTdHlsZXMoeydvcGFjaXR5JzowLCdkaXNwbGF5JzonYmxvY2snfSk7CiAgICBuZXcgRnguU3R5bGUoJCgnZG93bmxvYWRlcnJvcicpLCdvcGFjaXR5Jyx7J2R1cmF0aW9uJzoxNTAwfSkuc3RhcnQoMSk7Cn0KCgovLyBDYWxsZWQgd2l0aCBzaG9ydCBlcnJvciBtZXNzYWdlIGlmIHRoZXJlIGlzIGFuIGVycm9yCi8vIGtvaV9hbGVydCB3aWxsIGFsc28gYmUgY2FsbGVkIHdpdGggbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IKZnVuY3Rpb24ga29pX2Vycm9yKG1zZykgewogICAgaWYgKGxhc3RmeCkgbGFzdGZ4LnN0b3AoKTsKICAgIHN0YXR1cyhtc2cpOwogICAgbmV3IEZ4LlN0eWxlcygkKCdwcm9ncmVzc3dpZHRoJyksewogICAgICAgICdkdXJhdGlvbic6NjAwLAogICAgICAgICd3YWl0JzpmYWxzZQogICAgfSkuc3RhcnQoewogICAgICAgICd3aWR0aCc6NDAwLAogICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzonI2Y2N2E3YScKICAgIH0pOwp9CgoKLy8gQWxlcnQgdG8gYmUgZGlzcGxheWVkIHRvIHVzZXIgY2FsbGVkIHdpdGggSFRNTCAoc28gY2Fubm90IHVzZSBhbGVydCgpKQpmdW5jdGlvbiBrb2lfYWxlcnQobXNnKSB7CiAgICAkKCdhbGVydCcpLnNldFN0eWxlcyh7J29wYWNpdHknOjAsJ2Rpc3BsYXknOidibG9jayd9KTsKICAgICRFKCdkaXYnLCdhbGVydG1zZycpLmlubmVySFRNTCA9IG1zZzsKICAgIG5ldyBGeC5TdHlsZSgkKCdhbGVydCcpLCdvcGFjaXR5Jyx7J2R1cmF0aW9uJzoxMDAwfSkuc3RhcnQoMCwxKTsKfQpmdW5jdGlvbiBhbGVydF9jbG9zZSgpIHsKICAgIG5ldyBGeC5TdHlsZSgkKCdhbGVydCcpLCdvcGFjaXR5Jyx7J2R1cmF0aW9uJzo1MDAsb25Db21wbGV0ZTpmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgnYWxlcnQnKS5zZXRTdHlsZSgnZGlzcGxheScsJ25vbmUnKTsKICAgIH19KS5zdGFydCgwKTsKICAgIAogICAgLy8gTXVzdCBjYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogICAga29pX2FsZXJ0Y2FsbGJhY2soKTsKfQoKCnZhciBzdGF0dXNtc2cgPSBmYWxzZTsKdmFyIHN0YXR1c2Z4ID0gZmFsc2U7CmZ1bmN0aW9uIHN0YXR1cyhtc2csbm9lZmZlY3QpIHsKICAgIGlmICggKG5vZWZmZWN0KSAmJiAoJCgna29pX251bScpKSApIHsKICAgICAgICBuZXcgRnguU3R5bGUoJCgna29pX251bScpLCdvcGFjaXR5Jyx7J29uQ29tcGxldGUnOmZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJCgncHJvZ3Jlc3NzdGF0dXMnKS5pbm5lckhUTUwgPSBtc2c7CiAgICAgICAgICAgICQoJ2tvaV9udW0nKS5zZXRTdHlsZSgnb3BhY2l0eScsMCk7CiAgICAgICAgICAgIG5ldyBGeC5TdHlsZSgkKCdrb2lfbnVtJyksJ29wYWNpdHknKS5zdGFydCgxKTsKICAgICAgICB9fSkuc3RhcnQoMCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAKICAgIGlmICghc3RhdHVzZngpIHN0YXR1c2Z4ID0gbmV3IEZ4LlN0eWxlcygkKCdwcm9ncmVzc3N0YXR1cycpLHsKICAgICAgICAnZHVyYXRpb24nOjIwMCwKICAgICAgICAnd2FpdCc6ZmFsc2UsCiAgICAgICAgJ29uQ29tcGxldGUnOmZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKCFzdGF0dXNtc2cpIHJldHVybjsKICAgICAgICAgICAgJCgncHJvZ3Jlc3NzdGF0dXMnKS5pbm5lckhUTUwgPSBzdGF0dXNtc2c7CiAgICAgICAgICAgIHN0YXR1c21zZyA9IGZhbHNlOwogICAgICAgICAgICAkKCdwcm9ncmVzc3N0YXR1cycpLnNldFN0eWxlcyh7J21hcmdpbi10b3AnOictMTBweCd9KTsKICAgICAgICAgICAgc3RhdHVzZnguc3RhcnQoeydtYXJnaW4tdG9wJzowLCdvcGFjaXR5JzoxfSk7CiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIHN0YXR1c21zZyA9IG1zZzsKICAgIHN0YXR1c2Z4LnN0YXJ0KHsnbWFyZ2luLXRvcCc6MTAsJ29wYWNpdHknOjB9KTsKfQ==';}
function koifile_design_php() {return 'PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CjxoZWFkPjx0aXRsZT48P3BocCBlY2hvICRHTE9CQUxTWydwcm9qZWN0J11bJ25hbWUnXTsgPz4gRG93bmxvYWQ8L3RpdGxlPgogICAgPCEtLSBSZXF1aXJlZCBLb2kgTGlicyAtLT4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9tb290b29scy8xLjExL21vb3Rvb2xzLXl1aS1jb21wcmVzc2VkLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ij9mPWtvaS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ij9mPWtvaS5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgogICAgPCEtLSBLb2kgRW5kIC0tPgogICAgCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI/Zj1kZXNpZ24uanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI/Zj1kZXNpZ24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KPC9oZWFkPgo8Ym9keT4KPD9waHAKICAgIC8vIFJlcXVpcmVkIEtvaSBsaWIKICAgIGtvaV9pbXBvcnQoJ2tvaS5waHAnKTsKPz4KICAgIAogICAgPGRpdiBpZD0ibWFpbmJveCI+CiAgICAgICAgPGRpdiBpZD0icHJvZ3Jlc3N0YWJzIj4KICAgICAgICAgICAgPHAgaWQ9ImRvd25sb2FkdGFiIiBjbGFzcz0icXVldWUiPjxpbWcgc3JjPSI/Zj1kb3dubG9hZC5wbmciIGFsdD0iIiAvPkRvd25sb2FkPC9wPgogICAgICAgICAgICA8cCBpZD0ic2NhbnRhYiIgY2xhc3M9InF1ZXVlIj48aW1nIHNyYz0iP2Y9c2Nhbi5wbmciIGFsdD0iIiAvPlNjYW48L3A+CiAgICAgICAgICAgIDxwIGlkPSJpbnN0YWxsdGFiIiBjbGFzcz0icXVldWUiPjxpbWcgc3JjPSI/Zj1pbnN0YWxsLnBuZyIgYWx0PSIiIC8+SW5zdGFsbDwvcD4KICAgICAgICAgICAgPHAgaWQ9ImNsZWFudXB0YWIiIGNsYXNzPSJxdWV1ZSI+PGltZyBzcmM9Ij9mPWNsZWFudXAucG5nIiBhbHQ9IiIgLz5DbGVhbnVwPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9Im1haW5jb250ZW50Ij4KICAgICAgICAgICAgPGgxPjw/cGhwIGVjaG8gJEdMT0JBTFNbJ3Byb2plY3QnXVsnbmFtZSddOyA/PjwvaDE+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGlkPSJzbGlkZXMiPgogICAgICAgICAgICAgICAgPG5vc2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iYmFkIj5KYXZhc2NyaXB0IGlzIG5vdCBlbmFibGVkITwvaDI+CiAgICAgICAgICAgICAgICAgICAgPHA+VGhpcyBpbnN0YWxsZXIgcmVxdWlyZXMgamF2YXNjcmlwdCBpbiBvcmRlciB0byBydW4gdGhyb3VnaC48L3A+CiAgICAgICAgICAgICAgICAgICAgPHA+UGxlYXNlIGVuYWJsZSBqYXZhc2NyaXB0IGluIHlvdXIgYnJvd3NlciBhbmQgY2xpY2sgcmVmcmVzaCB0byByZS1zdGFydCB0aGUgaW5zdGFsbGF0aW9uPC9wPgogICAgICAgICAgICAgICAgPC9ub3NjcmlwdD4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0iZG93bmxvYWRlcnJvciI+CiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJiYWQiPkRvd25sb2FkIEVycm9yPC9oMj4KICAgICAgICAgICAgICAgICAgICA8cD5Lb2kgY291bGQgbm90IGRvd25sb2FkIHRoZSBwYWNrYWdlIGZpbGVzIHJlcXVpcmVkIHRvIGluc3RhbGwgPD9waHAgZWNobyAkR0xPQkFMU1sncHJvamVjdCddWyduYW1lJ107ID8+LiBZb3Ugd2lsbCBuZWVkIHRvIGRvd25sb2FkIHRoZSAudGFyIGZpbGVzIG1hbnVhbGx5IGFuZCB1cGxvYWQgdGhlbSB0byB0aGlzIGZvbGRlci48L3A+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiIgb25jbGljaz0ibG9jYXRpb24ucmVsb2FkKCk7IiB2YWx1ZT0iUmVmcmVzaCIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpbnRyb2JveCI+Cjw/cGhwCi8vIEdvdCBhbnkgZXJyb3JzPwpzd2l0Y2ggKCRzdGF0dXMpIHsKICAgIGNhc2UgJ3dyaXRlJzogPz4KICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImJhZCI+UGVybWlzc2lvbiBFcnJvcjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPHA+UEhQIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSBmaWxlcyB0byB0aGlzIGZvbGRlci4gWW91IHNob3VsZCBiZSBhYmxlIHRvIGZpeCB0aGlzIGlzc3VlIGJ5IENITU9EaW5nIHRoaXMgZm9sZGVyIHRvIDc2NiwgNjY2IG9yIHNpbWlsYXIuPC9wPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24iIG9uY2xpY2s9ImxvY2F0aW9uLnJlbG9hZCgpOyIgdmFsdWU9IlJlZnJlc2giIC8+Cjw/cGhwIGJyZWFrOwogICAgCiAgICBjYXNlICdsb2NrJzogPz4KICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImJhZCI+SW5zdGFsbGF0aW9uIExvY2tlZDwvaDI+CiAgICAgICAgICAgICAgICAgICAgPHA+Rm9yIHNlY3VyaXR5IHB1cnBvc2VzIHRoaXMgaW5zdGFsbGF0aW9uIGhhcyBiZWVuIGxvY2tlZCB0byB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgZmlyc3QgdmlzaXRvci4gVG8gcmUtZ2FpbiBhY2Nlc3MgRlRQIHRvIHRoaXMgZm9sZGVyIGFuZCBkZWxldGUgbG9jay5waHA8L3A+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiIgb25jbGljaz0ibG9jYXRpb24ucmVsb2FkKCk7IiB2YWx1ZT0iUmVmcmVzaCIgLz4KPD9waHAgYnJlYWs7CiAgICAKICAgIGNhc2UgJ2dvb2QnOgogICAgICAgIGlmIChpc19maWxlKCcuL2xpYi9saWIucGhwJykpIHskdXBncmFkZSA9IHRydWU7CiAgICAgICAgICAgIGRlZmluZSgnc3VwcmVzcycsdHJ1ZSk7CiAgICAgICAgICAgIHJlcXVpcmVfb25jZSgnLi9saWIvbGliLnBocCcpOwogICAgICAgICAgICBpZiAoIWdldF9jb25maWcoJ2Jhc2VwYXRoJykpIHsgPz4KICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImJhZCI+QmFkIFVwZ3JhZGU8L2gyPgogICAgICAgICAgICAgICAgICAgIDxwPllvdXIgY3VycmVudCA8P3BocCBlY2hvICRHTE9CQUxTWydwcm9qZWN0J11bJ25hbWUnXTsgPz4gaW5zdGFsbGF0aW9uIGhhcyBub3QgYmVlbiBwcm9wZXJseSBjb25maWd1cmVkLCBoYXZlIHlvdSBldmVuIGluc3RhbGxlZCBpdCB5ZXQ/IFVwZ3JhZGUgY2Fubm90IGNvbnRpbnVlLjwvcD4KPD9waHAgICAgICAgfQogICAgICAgICAgICBpZiAoYXJyYXlfc2VhcmNoKGdldF9jb25maWcoJ3ZlcnNpb24nKSxhcnJheSgnMC4xLjViJywnMC4xLjdiJykpIT09ZmFsc2UpIHsgPz4KICAgICAgICAgICAgICAgICAgICA8aDI+UmVhZHkgdG8gVXBncmFkZTwvaDI+CiAgICAgICAgICAgICAgICAgICAgPHA+V2VsY29tZSB0byB0aGUgPD9waHAgZWNobyAkR0xPQkFMU1sncHJvamVjdCddWyduYW1lJ107ID8+IHVwZ3JhZGVyLjwvcD4KICAgICAgICAgICAgICAgICAgICA8cD5BbGwgaW5pdGlhbCB0ZXN0cyB3ZXJlIHN1Y2Vzc2Z1bC4gQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBiZWdpbiB0aGUgYXV0b21hdGVkIHNldHVwLjwvcD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIiBvbmNsaWNrPSJrb2lfc3RhcnQoKTsiIHZhbHVlPSJTdGFydCBVcGdyYWRlIiAvPgogICAgICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5rb2lfYWN0aW9uID0gJ3VwZ3JhZGUnOyAoZnVuY3Rpb24oKXtrb2lfYWxlcnQoIjxoMj5VcGdyYWRlIFdhcm5pbmc8L2gyPjxwPlRoaXMgaXMgYSBtYWpvciB1cGRhdGUgdG8gdGhlIENvbWljQ01TIHN5c3RlbSBhbmQgaXMgZ29pbmcgdG8gdGFrZSBhIHdoaWxlLiBZb3VyIGNvbWljcywgbmV3cyBwb3N0cyBhbmQgdXNlcnMgd2lsbCBiZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSBidXQgdGVtcGxhdGVzIHdpbGwgbmVlZCB0byBiZSB0d2Vha2VkIG1hbnVhbGx5LiBQbGVhc2Ugc2V0IGFzaWRlIDMwIG1pbnV0ZXMgdG8gZ28gdGhyb3VnaCB0aGUgdXBncmFkZSBwcm9jZXNzIHByb3Blcmx5LjwvcD48cD5NT1NUIElNUE9SVEFOVExZOiBCYWNrIHVwIHlvdXIgZmlsZXMgYnkgZG93bmxvYWRpbmcgdGhlIGZvbGRlciBjYWxsZWQgXCJzdG9yYWdlXCIgdGhyb3VnaCBGVFAgYmVmb3JlIGNvbnRpbnVpbmchPC9wPiIpO30pLmRlbGF5KDEwMCk7PC9zY3JpcHQ+Cjw/cGhwICAgICAgIH0gZWxzZSB7ID8+CiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJiYWQiPkJhZCBVcGdyYWRlPC9oMj4KICAgICAgICAgICAgICAgICAgICA8cD5UaGUgdmVyc2lvbiBvZiB5b3VyIGN1cnJlbnQgPD9waHAgZWNobyAkR0xPQkFMU1sncHJvamVjdCddWyduYW1lJ107ID8+IGluc3RhbGxhdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IHRoaXMgdXBncmFkZSBtZXRob2QuIFBsZWFzZSB2aXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2NvbWljY21zLmNvbS8iPkNvbWljQ01TLmNvbTwvYT4gd2Vic2l0ZSBmb3IgYWx0ZXJuYXRpdmUgaW5zdHJ1Y3Rpb25zLjwvcD4KPD9waHAgICAgICAgfSA/Pgo8P3BocCAgIH0gZWxzZSB7ICR1cGdyYWRlID0gZmFsc2U7ID8+CiAgICAgICAgICAgICAgICAgICAgPGgyPlJlYWR5IHRvIEluc3RhbGw8L2gyPgogICAgICAgICAgICAgICAgICAgIDxwPldlbGNvbWUgdG8gdGhlIDw/cGhwIGVjaG8gJEdMT0JBTFNbJ3Byb2plY3QnXVsnbmFtZSddOyA/PiBpbnN0YWxsZXIuPC9wPgogICAgICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRiYWQgPSBmYWxzZTsKICAgICAgICAgICAgJGRpcmxpc3QgPSBvcGVuZGlyKCcuLycpOwogICAgICAgICAgICB3aGlsZSggKCRmaWxlID0gcmVhZGRpcigkZGlybGlzdCkpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgaWYgKCAoIWlzX2RpcigkZmlsZSkpICYmICgkZmlsZSAhPSAnZG93bmxvYWQucGhwJykgJiYgKCRmaWxlICE9ICdsb2NrLnBocCcpICYmICghc3RycG9zKCRmaWxlLCcudGFyJykpICYmICghc3RycG9zKCRmaWxlLCcubHN0JykpICkgJGJhZD10cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkYmFkKSB7ID8+CiAgICAgICAgICAgICAgICAgICAgPHA+V0FSTklORzogVGhpcyBkaXJlY3RvcnkgaXMgbm90IGVtcHR5ISBUaGUgaW5zdGFsbGVyIHdpbGwgb3ZlcndyaXRlIGFueXRoaW5nIGluIGl0J3MgcGF0aC48L3A+Cjw/cGhwICAgICAgIH0gZWxzZSB7ID8+CiAgICAgICAgICAgICAgICAgICAgPHA+QWxsIGluaXRpYWwgdGVzdHMgd2VyZSBzdWNlc3NmdWwuIENsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYmVnaW4gdGhlIGF1dG9tYXRlZCBzZXR1cC48L3A+Cjw/cGhwICAgICAgIH0gPz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIiBvbmNsaWNrPSJrb2lfc3RhcnQoKTsiIHZhbHVlPSJTdGFydCBJbnN0YWxsYXRpb24iIC8+Cjw/cGhwICAgfQogICAgICAgIGJyZWFrOwp9Cj8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0icHJvZ3Jlc3Nib3giPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSI/Zj1zbGlkZS5qcGciIGFsdD0iS29pIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImVuZGJveCI+CiAgICAgICAgICAgICAgICAgICAgPGgyPkluc3RhbGxhdGlvbiBDb21wbGV0ZTwvaDI+CiAgICAgICAgICAgICAgICAgICAgPHA+RXZlcnl0aGluZyBoYXMgYmVlbiBkb3dubG9hZGVkIGFuZCBpbnN0YWxsZWQuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwPllvdSBjYW4gbm93IGdvIG9uIHRvIGNvbmZpZ3VyZSA8P3BocCBlY2hvICRHTE9CQUxTWydwcm9qZWN0J11bJ25hbWUnXTsgPz4uPC9wPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbiA9ICc8P3BocCBlY2hvICgkdXBncmFkZT8ndXBncmFkZS8nOiRHTE9CQUxTWydwcm9qZWN0J11bJ2NvbnRpbnVlJ10pOyA/Pic7IiB2YWx1ZT0iUHJvY2VlZCIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgaWQ9InByb2dyZXNzYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InByb2dyZXNzbm90ZSI+PHNwYW4gaWQ9InByb2dyZXNzc3RhdHVzIj48L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzc2JhY2siPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBpZD0icHJvZ3Jlc3N3aWR0aCIgc3R5bGU9IndpZHRoOjAlOyI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDwhLS0gQWxlcnQgbWVzc2FnZXMgLS0+CiAgICA8ZGl2IGlkPSJhbGVydCI+CiAgICAgICAgPGRpdiBpZD0iYWxlcnRtc2ciPgogICAgICAgICAgICA8ZGl2PjwvZGl2PgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iYWxlcnRvayIgb25jbGljaz0iYWxlcnRfY2xvc2UoKTsiIHZhbHVlPSJPayIgLz4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4=';}
function koifile_download_png() {return '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';}
function koifile_frame_png() {return 'iVBORw0KGgoAAAANSUhEUgAAAZAAAAAUCAYAAACj6Wu2AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9gHAgwlHjF2NJkAAAFmSURBVHja7d09bsIwAIbhz4lFsfjZWNk4BStMHXqEHiDnYWTo1JmhE1dBQixISKBI/CSgYOjSmnZy2vl9hhzgW15ZURwjSZPJ5C4AAGrKssyY73iMx+MPJgEAxMzn82dJspI0Go1mg8GgZBYAQEy/359Np9MXK0ne+6OkglkAADFJkvhwAvHenyQdmQUAUCMg9xCQ6/V6lHRgFgBATJqmIiAAgP8wISBVVR0l7dkEAFBDEgJyuVw4gQAA6rLhUZblgRMIAOA/ATlxAgEA1PQUArLZbJLFYpGwCQAgptVqJT8DclutVjdmAQDE9Hq9WwhInufVdrutmAUAEOOcq0JAdrudX6/XV2YBAMR0u93HVSbn89ns93vegQAAooqieHxImKZpQ1KDWQAAMd77RgiItbZpjHHMAgCoEZBmCMhwOHxfLpev7XZb1lo559TpdOQcTQEA/Jbn+Zv0dSEWv7QFAPxFlmXmE0DfdFsaAfF/AAAAAElFTkSuQmCC';}
function koifile_install_png() {return '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';}
function koifile_scan_png() {return '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';}
function koifile_slide_jpg() {return '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';}
function koifile_koi_css() {return 'I2tvaWxpbmUgewogICAgZm9udC1mYW1pbHk6aGVsdmV0aWNhLCB2ZXJkYW5hLCBhcmlhbDsKICAgIHotaW5kZXg6NTsKICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgYm90dG9tOjBweDsKICAgIGxlZnQ6MHB4OwogICAgd2lkdGg6MTAwJTsKICAgIGhlaWdodDoxNnB4OwogICAgdGV4dC1hbGlnbjpyaWdodDsKICAgIGJvcmRlci10b3A6c29saWQgMXB4ICM4OWE5ZGI7CiAgICAKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmZjsKICAgIGZvbnQtc2l6ZToxMHB4OwogICAgbGluZS1oZWlnaHQ6MTZweDsKICAgIG92ZXJmbG93OnZpc2libGU7Cn0KCmEja29pdGFnIHsKICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgYm90dG9tOjBweDsKICAgIHJpZ2h0OjBweDsKICAgIHRleHQtZGVjb3JhdGlvbjpub25lOwogICAgZm9udC13ZWlnaHQ6Ym9sZDsKICAgIGNvbG9yOiMwMDA7Cn0KI2tvaXRhZyBpbWcge2JvcmRlcjpub25lIDBweDt9CiNrb2l0YWcgaW1nIHtwYWRkaW5nOjBweCAxMHB4O30KCiNrb2ltZW51IHsKICAgIGRpc3BsYXk6YmxvY2s7CiAgICBmbG9hdDpsZWZ0OwogICAgaGVpZ2h0OjE2cHg7CiAgICBwYWRkaW5nOjBweCA1cHg7CiAgICAKICAgIHRleHQtYWxpZ246Y2VudGVyOwogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICAKICAgIGJhY2tncm91bmQtY29sb3I6I2VlZTsKICAgIGNvbG9yOiMwMDA7CiAgICBib3JkZXItcmlnaHQ6c29saWQgMXB4ICM4OWE5ZGI7CiAgICAKICAgIGN1cnNvcjpkZWZhdWx0ICFpbXBvcnRhbnQ7Cn0KI2tvaW1lbnU6aG92ZXIge2JhY2tncm91bmQtY29sb3I6IzljYjllNzt9Cgoja29pYWR2YW5jZWQgewogICAgZGlzcGxheTpub25lOwogICAgbWFyZ2luOjBweDtwYWRkaW5nOjBweDsKICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgbGVmdDowcHg7CiAgICBib3R0b206MTZweDsKICAgIGJhY2tncm91bmQtY29sb3I6I2VlZTsKICAgIHRleHQtYWxpZ246bGVmdDsKICAgIGZvbnQtc2l6ZToxNHB4OwogICAgbGlzdC1zdHlsZTpub25lOwogICAgYm9yZGVyLXRvcDpzb2xpZCAxcHggIzg5YTlkYjsKfQoja29pYWR2YW5jZWQgbGkgewogICAgcGFkZGluZzoycHggMTVweDsKICAgIGJvcmRlci1ib3R0b206c29saWQgMXB4ICM4OWE5ZGI7CiAgICBib3JkZXItcmlnaHQ6c29saWQgMXB4ICM4OWE5ZGI7Cn0KI2tvaWFkdmFuY2VkIGxpOmhvdmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IzljYjllNzsKfQoKI2tvaWxvZyB7CiAgICBkaXNwbGF5Om5vbmU7CiAgICB6LWluZGV4OjQ7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgIGJvdHRvbToxNnB4OwogICAgbGVmdDowcHg7CiAgICB3aWR0aDoxMDAlOwogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmOwogICAgYm9yZGVyLXRvcDpzb2xpZCAxcHggI2FhYTsKICAgIAogICAgdGV4dC1hbGlnbjpsZWZ0Owp9CiNrb2lsb2cgcHJlIHsKICAgIGRpc3BsYXk6YmxvY2s7CiAgICBtYXJnaW46MTBweCAwcHg7CiAgICBwYWRkaW5nOjVweCA1MHB4IDVweCAxMHB4OwogICAgZm9udC1mYW1pbHk6bW9ub3NwYWNlOwogICAgY29sb3I6IzIyMjsKICAgIGZvbnQtc2l6ZToxMnB4OwogICAgbWF4LWhlaWdodDoyMDBweDsKICAgIG92ZXJmbG93OmF1dG87Cn0KI2tvaWxvZyBwcmUgc3BhbiB7CiAgICBkaXNwbGF5OmJsb2NrOwogICAgbWFyZ2luOjVweCAwcHggMHB4OwogICAgcGFkZGluZzowcHggNXB4OwogICAgYm9yZGVyOnNvbGlkIDFweCAjYWFhOwogICAgYmFja2dyb3VuZC1jb2xvcjojZjVmNWY1Owp9Cgoja29pbWlycm9yLCAja29pbWV0aG9kIHtkaXNwbGF5Om5vbmU7IG1hcmdpbjoxMHB4IDBweCAwcHg7IHdpZHRoOjcwJTsgbWFyZ2luOjBweCBhdXRvOyB0ZXh0LWFsaWduOmxlZnQ7IGxpbmUtaGVpZ2h0OjJlbTt9CiNrb2ltaXJyb3IgbGFiZWwsICNrb2ltZXRob2QgbGFiZWwge3BhZGRpbmctbGVmdDoxNXB4O30KI2tvaW1pcnJvciBpbnB1dCwgI2tvaW1ldGhvZCBpbnB1dCB7ZGlzcGxheTppbmxpbmU7fQoKI2tvaWFib3V0LCAja29pYWJvdXRwcm9qIHtkaXNwbGF5Om5vbmU7fQ==';}
function koifile_koi_js() {return 'Ly8gRGVmYXVsdHMKdmFyIGtvaV9taXJyb3IgPSAwOwp2YXIga29pX21ldGhvZCA9IDA7CnZhciBrb2lfYWN0aW9uID0gJ2luc3RhbGwnOwoKCndpbmRvdy5hZGRFdmVudCgnZG9tcmVhZHknLGZ1bmN0aW9uICgpIHsKICAgIC8vIEJvdHRvbSBiYXIKICAgICQoJ2tvaWxpbmUnKS5zZXRTdHlsZSgnb3BhY2l0eScsMC41KTsKICAgIHZhciBrb2lsaW5lZnggPSBuZXcgRnguU3R5bGUoJCgna29pbGluZScpLCdvcGFjaXR5Jyx7J3dhaXQnOmZhbHNlfSk7CiAgICAkKCdrb2lsaW5lJykuYWRkRXZlbnQoJ21vdXNlZW50ZXInLGZ1bmN0aW9uICgpIHtrb2lsaW5lZnguc3RhcnQoMC45KTt9KTsKICAgICQoJ2tvaWxpbmUnKS5hZGRFdmVudCgnbW91c2VsZWF2ZScsZnVuY3Rpb24gKCkge2tvaWxpbmVmeC5zdGFydCgwLjUpO30pOwogICAgCiAgICAvLyBNZW51CiAgICAkKCdrb2ltZW51JykuYWRkRXZlbnQoJ21vdXNlZW50ZXInLGZ1bmN0aW9uICgpIHskKCdrb2lhZHZhbmNlZCcpLnNldFN0eWxlKCdkaXNwbGF5JywnYmxvY2snKTt9KTsKICAgICQoJ2tvaW1lbnUnKS5hZGRFdmVudCgnbW91c2VsZWF2ZScsZnVuY3Rpb24gKCkgeyQoJ2tvaWFkdmFuY2VkJykuc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7fSk7CiAgICAvLyBNZW51IGl0ZW1zCiAgICAkKCdrb2lfc2hvd2xvZycpLmFkZEV2ZW50KCdjbGljaycsa29pX3Nob3dsb2cpOwogICAgJCgna29pX3Nob3dtaXJyb3InKS5hZGRFdmVudCgnY2xpY2snLGtvaV9zaG93bWlycm9yKTsKICAgICQoJ2tvaV9zaG93bWV0aG9kJykuYWRkRXZlbnQoJ2NsaWNrJyxrb2lfc2hvd21ldGhvZCk7CiAgICAkKCdrb2lfc2hvd2Fib3V0cHJvaicpLmFkZEV2ZW50KCdjbGljaycsa29pX3Nob3dhYm91dHByb2opOwogICAgJCgna29pX3Nob3dhYm91dCcpLmFkZEV2ZW50KCdjbGljaycsa29pX3Nob3dhYm91dCk7CiAgICAKICAgICQoJ2tvaWxvZycpLnNldFN0eWxlKCdvcGFjaXR5JywwLjgpOwp9KTsKCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBDYWxsYmFja3MKCmZ1bmN0aW9uIGtvaV9zdGFydGNhbGxiYWNrKCkgewogICAga29pX2FkZGxvZygnS29pIEluaXRpYXRlZCcsJ2V2ZW50Jyk7CiAgICAKICAgICQoJ2tvaV9zaG93bWlycm9yJykuc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7CiAgICAkKCdrb2lfc2hvd21ldGhvZCcpLnNldFN0eWxlKCdkaXNwbGF5Jywnbm9uZScpOwogICAgCiAgICBrb2lfc3dpdGNoYm9hcmQoInN0YXJ0Iik7Cn0KCnZhciBrb2lfYWxlcnRzdGFnZSA9IGZhbHNlCmZ1bmN0aW9uIGtvaV9hbGVydGNhbGxiYWNrKCkgewogICAgaWYgKGtvaV9hbGVydHN0YWdlKSB7CiAgICAgICAga29pX2FkZGxvZygnQWxlcnQgY2xlYXJlZCAoJytrb2lfYWxlcnRzdGFnZSsnKScsJ2V2ZW50Jyk7CiAgICB9IGVsc2UgewogICAgICAgIGtvaV9hZGRsb2coJ0FsZXJ0IGNsZWFyZWQgKG5vIHN0YWdlKScsJ2V2ZW50Jyk7CiAgICB9CiAgICAKICAgIHZhciB0bXAgPSBrb2lfYWxlcnRzdGFnZTsKICAgIGtvaV9hbGVydHN0YWdlID0gZmFsc2U7CiAgICAKICAgIHN3aXRjaCAodG1wKSB7CiAgICAgICAgY2FzZSAnb3ZlcndyaXRlJzoga29pX2ZpbGVzdGVwKCdpbnN0YWxsJyxrb2lfdG1wKTsKICAgICAgICBjYXNlICdyZWZyZXNoJzogbG9jYXRpb24ucmVmcmVzaCgpOyBicmVhazsKICAgICAgICBjYXNlICdzZWxlY3RtaXJyb3InOiBrb2lfaGlkZW1pcnJvcigpOyBicmVhazsKICAgICAgICBjYXNlICdzZWxlY3RtZXRob2QnOiBrb2lfaGlkZW1ldGhvZCgpOyBicmVhazsKICAgIH0KfQoKZnVuY3Rpb24ga29pX2FkZGxvZyh0ZXh0LHR5cGUpIHsKICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKTsKICAgIAogICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgY2FzZSAnZXZlbnQnOiB0ZXh0ID0gIjxzcGFuPiIrdGV4dCsiPC9zcGFuPiI7IGJyZWFrOwogICAgICAgIGNhc2UgJ3dhcm5pbmcnOiB0ZXh0ID0gIjxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOyBjb2xvcjojOWI5MTE1O1wiPiIrdGV4dCsiPC9zcGFuPiI7IGJyZWFrOwogICAgICAgIGNhc2UgJ2Vycm9yJzogdGV4dCA9ICI8c3BhbiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2ZiZTFjNTtcIj4iK3RleHQrIjwvc3Bhbj4iOyBicmVhazsKICAgICAgICBkZWZhdWx0OiB0ZXh0ID0gdGV4dCsiXG4iOyBicmVhazsKICAgIH0KICAgICQoJ2tvaWxvZ3ByZScpLmlubmVySFRNTCA9ICQoJ2tvaWxvZ3ByZScpLmlubmVySFRNTCArIHRleHQ7Cn0KCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBNZW51IEl0ZW1zCgpmdW5jdGlvbiBrb2lfc2hvd2xvZygpIHsKICAgICQoJ2tvaWFkdmFuY2VkJykuc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7CiAgICAkKCdrb2lsb2cnKS5zZXRTdHlsZSgnZGlzcGxheScsJ2Jsb2NrJyk7Cn0KCmZ1bmN0aW9uIGtvaV9zaG93bWlycm9yKCkgewogICAga29pX2FsZXJ0c3RhZ2UgPSAnc2VsZWN0bWlycm9yJzsKICAgICQoJ2tvaWFkdmFuY2VkJykuc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7CiAgICAkKCdrb2lfbWlycm9yJytrb2lfbWlycm9yKS5jaGVja2VkID0gdHJ1ZTsKICAgIGtvaV9hbGVydCgnPGRpdiBpZD0ia29pX2hvbGQiPjxoMj5TZWxlY3QgTWlycm9yPC9oMj48L2Rpdj4nKTsKICAgICQoJ2tvaW1pcnJvcicpLmluamVjdEluc2lkZSgna29pX2hvbGQnKTsKICAgICQoJ2tvaW1pcnJvcicpLnNldFN0eWxlKCdkaXNwbGF5JywnYmxvY2snKTsKfQpmdW5jdGlvbiBrb2lfaGlkZW1pcnJvcigpIHsKICAgICQoJ2tvaW1pcnJvcicpLmdldEVsZW1lbnRzKCdpbnB1dFt0eXBlPXJhZGlvXScpLmVhY2goZnVuY3Rpb24oZWwpewogICAgICAgIGlmKGVsLmdldFZhbHVlKCkpIGtvaV9taXJyb3IgPSBlbC5nZXRWYWx1ZSgpOwogICAgfSk7CiAgICAKICAgICQoJ2tvaW1pcnJvcicpLnNldFN0eWxlKCdkaXNwbGF5Jywnbm9uZScpOwogICAgJCgna29pbWlycm9yJykuaW5qZWN0QmVmb3JlKCdrb2lsaW5lJyk7CiAgICAKICAgIGtvaV9hZGRsb2coJ01pcnJvciBjaGFuZ2VkIHRvICcra29pX21pcnJvcik7Cn0KCmZ1bmN0aW9uIGtvaV9zaG93bWV0aG9kKCkgewogICAga29pX2FsZXJ0c3RhZ2UgPSAnc2VsZWN0bWV0aG9kJzsKICAgICQoJ2tvaWFkdmFuY2VkJykuc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7CiAgICAkKCdrb2lfbWV0aG9kJytrb2lfbWV0aG9kKS5jaGVja2VkID0gdHJ1ZTsKICAgIGtvaV9hbGVydCgnPGRpdiBpZD0ia29pX2hvbGQiPjxoMj5TZWxlY3QgTWV0aG9kPC9oMj48L2Rpdj4nKTsKICAgICQoJ2tvaW1ldGhvZCcpLmluamVjdEluc2lkZSgna29pX2hvbGQnKTsKICAgICQoJ2tvaW1ldGhvZCcpLnNldFN0eWxlKCdkaXNwbGF5JywnYmxvY2snKTsKfQpmdW5jdGlvbiBrb2lfaGlkZW1ldGhvZCgpIHsKICAgICQoJ2tvaW1ldGhvZCcpLmdldEVsZW1lbnRzKCdpbnB1dFt0eXBlPXJhZGlvXScpLmVhY2goZnVuY3Rpb24oZWwpewogICAgICAgIGlmKGVsLmdldFZhbHVlKCkpIGtvaV9tZXRob2QgPSBlbC5nZXRWYWx1ZSgpOwogICAgfSk7CiAgICAkKCdrb2ltZXRob2QnKS5zZXRTdHlsZSgnZGlzcGxheScsJ25vbmUnKTsKICAgICQoJ2tvaW1ldGhvZCcpLmluamVjdEJlZm9yZSgna29pbGluZScpOwogICAgCiAgICBrb2lfYWRkbG9nKCdNZXRob2QgY2hhbmdlZCB0byAnK2tvaV9tZXRob2QpOwp9CgpmdW5jdGlvbiBrb2lfc2hvd2Fib3V0cHJvaigpIHsKICAgIGtvaV9hbGVydCgnPGRpdiBpZD0ia29pX2hvbGQiPjwvZGl2PicpOwogICAgJCgna29pYWJvdXRwcm9qJykuY2xvbmUoKS5zZXRTdHlsZSgnZGlzcGxheScsJ2Jsb2NrJykuaW5qZWN0SW5zaWRlKCdrb2lfaG9sZCcpOwp9CmZ1bmN0aW9uIGtvaV9zaG93YWJvdXQoKSB7CiAgICBrb2lfYWxlcnQoJzxkaXYgaWQ9ImtvaV9ob2xkIj48L2Rpdj4nKTsKICAgICQoJ2tvaWFib3V0JykuY2xvbmUoKS5zZXRTdHlsZSgnZGlzcGxheScsJ2Jsb2NrJykuaW5qZWN0SW5zaWRlKCdrb2lfaG9sZCcpOwp9CgoKCgoKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gVGhlIG1lYXQgb2YgaXQKCnZhciBrb2lfc3RhZ2VsZW5ndGg9MDsKdmFyIGtvaV9jdXJzdGFnZT0wOwpmdW5jdGlvbiBrb2lfbmV4dHN0YWdlKCkgewogICAga29pX2N1cnN0YWdlKys7CiAgICByZXR1cm4gKDEwMC9rb2lfc3RhZ2VsZW5ndGgpKmtvaV9jdXJzdGFnZTsKfQoKdmFyIGtvaV9maWxlbGlzdDsKdmFyIGtvaV9wb2ludGVyPTA7CnZhciBrb2lfdG1wPTA7CmZ1bmN0aW9uIGtvaV9maWxlc3RlcCh0eXBlLHRpbWUpIHsKICAgIGlmICgha29pX2ZpbGVsaXN0W2tvaV9wb2ludGVyXSkgewogICAgICAgIGtvaV9wb2ludGVyID0gMDsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnZG93bmxvYWQnOiBrb2lfZmlsZXN0ZXAoJ3NjYW4nLHRpbWUpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAnc2Nhbic6CiAgICAgICAgICAgICAgICBpZiAoIW92ZXJ3cml0ZSkgewogICAgICAgICAgICAgICAgICAgIGtvaV9maWxlc3RlcCgnaW5zdGFsbCcsdGltZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGtvaV9hbGVydHN0YWdlID0gJ292ZXJ3cml0ZSc7CiAgICAgICAgICAgICAgICAgICAga29pX3RtcCA9IHRpbWU7CiAgICAgICAgICAgICAgICAgICAga29pX2FsZXJ0KCI8cD5UaGUgaW5zdGFsbGF0aW9uIHdpbGwgb3ZlcndyaXRlICIgKyBvdmVyd3JpdGUgKyAiIGV4aXN0aW5nIGZpbGVzLjwvcD48cD5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/IFJlZnJlc2ggdGhpcyBwYWdlIHRvIGNhbmNlbDwvcD4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdpbnN0YWxsJzoga29pX3JlcXVlc3QoJ2NsZWFudXAnKTsgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgdmFyIGZpbGUgPSBrb2lfZmlsZWxpc3Rba29pX3BvaW50ZXJdOwogICAga29pX3BvaW50ZXIrKzsKICAgIAogICAga29pX2FkZGxvZygnRmlsZXN0ZXAgOjogJyt0eXBlKycgOjogJytrb2lfcG9pbnRlciwnZXZlbnQnKTsKICAgIGtvaV9hZGRsb2coJ0ZpbGU6ICcrZmlsZS5uYW1lKTsKICAgIGlmICh0eXBlPT0nZG93bmxvYWQnKSBrb2lfYWRkbG9nKCdGaWxlIEhhc2g6ICcrZmlsZS5oYXNoKTsKICAgIAogICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgY2FzZSAnZG93bmxvYWQnOiBrb2lfY2hhbmdlKHR5cGUsJ0Rvd25sb2FkaW5nIGZpbGUgPHNwYW4gaWQ9ImtvaV9udW0iPicra29pX3BvaW50ZXIrJzwvc3Bhbj4vJytrb2lfZmlsZWxpc3QubGVuZ3RoLGtvaV9uZXh0c3RhZ2UoKSx0aW1lKTsgYnJlYWs7CiAgICAgICAgY2FzZSAnc2Nhbic6IGtvaV9jaGFuZ2UodHlwZSwnU2Nhbm5pbmcgZmlsZSA8c3BhbiBpZD0ia29pX251bSI+Jytrb2lfcG9pbnRlcisnPC9zcGFuPi8nK2tvaV9maWxlbGlzdC5sZW5ndGgsa29pX25leHRzdGFnZSgpLHRpbWUpOyBicmVhazsKICAgICAgICBjYXNlICdpbnN0YWxsJzoga29pX2NoYW5nZSh0eXBlLCdJbnN0YWxsaW5nIGZpbGUgPHNwYW4gaWQ9ImtvaV9udW0iPicra29pX3BvaW50ZXIrJzwvc3Bhbj4vJytrb2lfZmlsZWxpc3QubGVuZ3RoLGtvaV9uZXh0c3RhZ2UoKSx0aW1lKTsgYnJlYWs7CiAgICB9CiAgICAKICAgIGtvaV9yZXF1ZXN0KHR5cGUsZmlsZS5uYW1lLGZpbGUuaGFzaCk7Cn0KCnZhciBzdGFydD1mYWxzZTsKZnVuY3Rpb24ga29pX3JlcXVlc3Qoc3RhZ2UsZmlsZSxoYXNoKSB7CiAgICBpZiAoIWZpbGUpIGZpbGUgPSAnJzsKICAgIGlmICghaGFzaCkgaGFzaCA9ICcnOwogICAgc3RhcnQgPSBuZXcgRGF0ZSgpOwogICAgCiAgICB2YXIgc2VuZCA9ICc/JytPYmplY3QudG9RdWVyeVN0cmluZyh7CiAgICAgICAgJ3N0YWdlJzpzdGFnZSwKICAgICAgICAnbWV0aG9kJzprb2lfbWV0aG9kLAogICAgICAgICdtaXJyb3InOmtvaV9taXJyb3IsCiAgICAgICAgJ2FjdGlvbic6a29pX2FjdGlvbiwKICAgICAgICAnZmlsZSc6ZmlsZSwKICAgICAgICAnaGFzaCc6aGFzaAogICAgfSk7CiAgICAKICAgIGtvaV9hZGRsb2coIlNlbmQ6ICIrc2VuZCk7CiAgICAKICAgIG5ldyBBamF4KHNlbmQsewogICAgICAgIG1ldGhvZDonZ2V0JywKICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbihqc29uKXsKICAgICAgICAgICAga29pX2FkZGxvZygiUmVzcG9uc2U6ICIranNvbik7CiAgICAgICAgICAgIAogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgdmFyIGpzb24gPSBKc29uLmV2YWx1YXRlKGpzb24pOwogICAgICAgICAgICB9IGNhdGNoKGVycikgewogICAgICAgICAgICAgICAga29pX2FkZGxvZygiUmVzcG9uc2UgSlNPTiBmYWlsZWQgdG8gZXZhbHVhdGUgLSAiK2VyciwnZXJyb3InKTsKICAgICAgICAgICAgICAgIGtvaV9lcnJvcigiUmVzcG9uc2UgSlNPTiBmYWlsZWQgdG8gZXZhbHVhdGUiKTsKICAgICAgICAgICAgICAgIGtvaV9hbGVydCgnPGgyPlVuZXhwZWN0ZWQgRXJyb3I8L2gyPjxwPlRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0aGUgbGFzdCBhY3Rpb24uIFBsZWFzZSBjaGVjayB0aGUgY29ubmVjdGlvbiBsb2cgKEFkdmFuY2VkJm5ic3A7Jmd0OyZuYnNwO1ZpZXcmbmJzcDtMb2cpIGluIHRoZSBtZW51IHRvIHRoZSBib3R0b20gbGVmdCBvZiB0aGUgcGFnZS48L3A+PHA+SWYgeW91IGNhbm5vdCBmaXggdGhlIHByb2JsZW0geW91cnNlbGYgdGhlbiBwbGVhc2UgYWRkIGEgbmV3IGlzc3VlIHJlcG9ydCB3aXRoIEtvaSAobGluayBhdCBib3R0b20gcmlnaHQgb2YgcGFnZSkgYW5kIGluY2x1ZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb25uZWN0aW9uIGxvZzwvcD4nKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gS29pIGluc3RhbGxlciBpcyB1c3VhbGx5IHRvbyBmYXN0IGZvciB0aGUgZXllIHRvCiAgICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2YsIGxldCBhbG9uZSB0aGUgcHJvZ3Jlc3MgYmFyIGVmZmVjdHMKICAgICAgICAgICAgdmFyIHN0b3AgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICB2YXIgdGltZSA9IChzdG9wLmdldFRpbWUoKSAtIHN0YXJ0LmdldFRpbWUoKSk7CiAgICAgICAgICAgIGlmICh0aW1lIDwgMTIwMCkgewogICAgICAgICAgICAgICAga29pX2FkZGxvZygiRGVmZXJyZWQgcmVzcG9uc2UuLi4iKTsKICAgICAgICAgICAgICAgIHRpbWUgKz0gODAwOwogICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCl7a29pX3N3aXRjaGJvYXJkKHN0YWdlLGpzb24sdGltZSk7fSkuZGVsYXkoODAwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGtvaV9zd2l0Y2hib2FyZChzdGFnZSxqc29uLHRpbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGtvaV9lcnJvcignVW5rbm93biBlcnJvciBkdXJpbmcgSlNPTiByZXF1ZXN0Jyk7CiAgICAgICAgfQogICAgfSkucmVxdWVzdCgpOwp9Cgp2YXIgbmV3d3JpdGU9MDsKdmFyIG92ZXJ3cml0ZT0wOwpmdW5jdGlvbiBrb2lfc3dpdGNoYm9hcmQoc3RhZ2UscmVzcG9uc2UsdGltZSkgewogICAgaWYgKCFzdGFnZSkgc3RhZ2UgPSAic3RhcnQiOwogICAgCiAgICBpZiAoIChyZXNwb25zZSkgJiYgKHJlc3BvbnNlLmVycm9yKSApIHsKICAgICAgICBrb2lfYWxlcnQoIjxoMj5FcnJvcjwvaDI+PHA+IityZXNwb25zZS5lcnJvcisiPC9wPiIpOwogICAgICAgIGtvaV9lcnJvcigiRXJyb3IgaW4gIitzdGFnZSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBzd2l0Y2ggKHN0YWdlKSB7CiAgICAgICAgY2FzZSAiY2xlYW51cCI6CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5mYWlsKSBrb2lfYWxlcnQocmVzcG9uc2UuZmFpbCk7CiAgICAgICAgICAgIGtvaV9hZGRsb2coJ1NodXR0aW5nIGRvd24uLi4nLCdldmVudCcpOwogICAgICAgICAgICBrb2lfY2hhbmdlKCJjbGVhbnVwIiwiQ2xlYW5pbmcgVXAiLDEwMCx0aW1lKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiaW5zdGFsbCI6CiAgICAgICAgICAgIGtvaV9maWxlc3RlcCgnaW5zdGFsbCcsdGltZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInNjYW4iOgogICAgICAgICAgICBpZiAocmVzcG9uc2Uub3ZlcndyaXRlWzBdKSBvdmVyd3JpdGUgPSBvdmVyd3JpdGUgKyByZXNwb25zZS5vdmVyd3JpdGUubGVuZ3RoOwogICAgICAgICAgICBpZiAocmVzcG9uc2UubmV3d3JpdGVbMF0pIG5ld3dyaXRlID0gbmV3d3JpdGUgKyByZXNwb25zZS5uZXd3cml0ZS5sZW5ndGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBrb2lfZmlsZXN0ZXAoJ3NjYW4nLHRpbWUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJkb3dubG9hZCI6CiAgICAgICAgICAgIGtvaV9maWxlc3RlcCgnZG93bmxvYWQnLHRpbWUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJyZWZyZXNoIjoKICAgICAgICAgICAga29pX2FsZXJ0c3RhZ2UgPSAncmVmcmVzaCc7CiAgICAgICAgICAgIGtvaV9hbGVydCgiPHA+VGhpcyBkb3dubG9hZC5waHAgZmlsZSB3YXMgb3V0IG9mIGRhdGUgYW5kIGhhcyBiZWVuIHVwZGF0ZWQ8L3A+PHA+Q2xpY2sgT2sgdG8gcmVmcmVzaCB0aGUgaW5zdGFsbGVyPC9wPiIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmaWxlY2hlY2siOgogICAgICAgICAgICAvLyBNZXRob2QgJiBtaXJyb3IgYXV0by1zZWxlY3QKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGhvZCkga29pX21ldGhvZCA9IHJlc3BvbnNlLm1ldGhvZDsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1pcnJvcikga29pX21pcnJvciA9IHJlc3BvbnNlLm1pcnJvcjsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE91dCBvZiBkYXRlCiAgICAgICAgICAgIGlmIChyZXNwb25zZS5taW5jb21wYXRhYmxlID4gMSkgewogICAgICAgICAgICAgICAga29pX2FkZGxvZygnTmVlZCB1cGRhdGUnLCdldmVudCcpOwogICAgICAgICAgICAgICAga29pX2NoYW5nZShmYWxzZSwiVXBkYXRpbmcuLi4iLDEwMCx0aW1lKTsKICAgICAgICAgICAgICAgIGtvaV9yZXF1ZXN0KCdyZWZyZXNoJyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE5vIGRvd25sb2FkCiAgICAgICAgICAgIGlmICghcmVzcG9uc2UubWluY29tcGF0YWJsZSkgewogICAgICAgICAgICAgICAga29pX2FkZGxvZygnQWxsIGRvd25sb2FkcyBmYWlsZWQnLCdlcnJvcicpOwogICAgICAgICAgICAgICAga29pX2Rvd25sb2FkZXJyb3IoKTsKICAgICAgICAgICAgICAgIGtvaV9lcnJvcigiT2ZmbGluZSBpbnN0YWxsIG5lY2Nlc2FyeSIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBTZXQgZ2xvYmFscwogICAgICAgICAgICBrb2lfc3RhZ2VsZW5ndGggPSAocmVzcG9uc2UuZmlsZXMubGVuZ3RoICogMykgKyAxOwogICAgICAgICAgICBrb2lfZmlsZWxpc3QgPSByZXNwb25zZS5maWxlczsKICAgICAgICAgICAgCiAgICAgICAgICAgIGtvaV9hZGRsb2coJ1N0YWdlIGxlbmd0aCA9ICcra29pX3N0YWdlbGVuZ3RoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE9mZiB3ZSBnbwogICAgICAgICAgICBrb2lfZmlsZXN0ZXAoJ2Rvd25sb2FkJyx0aW1lKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAic3RhcnQiOgogICAgICAgICAgICBrb2lfY2hhbmdlKGZhbHNlLCJRdWVyeWluZyBwYWNrYWdlIHNlcnZlcnMiLDAsMCk7CiAgICAgICAgICAgIGtvaV9yZXF1ZXN0KCdmaWxlY2hlY2snKTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn0=';}
function koifile_koi_php() {return 'ICAgIDxkaXYgaWQ9ImtvaWxvZyI+CiAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlgiIG9uY2xpY2s9IiQoJ2tvaWxvZycpLnNldFN0eWxlKCdkaXNwbGF5Jywnbm9uZScpOyIgc3R5bGU9Im1hcmdpbjotMTVweCAxMHB4IDBweDsgY29sb3I6I2EwMDsgcGFkZGluZzoxcHggNXB4OyBmbG9hdDpyaWdodDsiIC8+CiAgICAgICAgPHByZSBpZD0ia29pbG9ncHJlIj48c3Bhbj5QYWdlIGxvYWRlZDwvc3Bhbj5XYWl0aW5nIGZvciB1c2VyLi4uPC9wcmU+CiAgICA8L2Rpdj4KICAgIAogICAgPGZvcm0gYWN0aW9uPSIjIiBpZD0ia29pbWlycm9yIj4KICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIHZhbHVlPSIwIiBuYW1lPSJtaXJyb3IiIGlkPSJrb2lfbWlycm9yMCIgLz48bGFiZWwgZm9yPSJrb2lfbWlycm9yMCI+QXV0b21hdGljPC9sYWJlbD48YnIgLz4KPD9waHAKICAgICAgICAkbSA9IGFycmF5X2tleXMoJEdMT0JBTFNbJ21pcnJvcnMnXSk7CiAgICAgICAgZm9yZWFjaCAoJG0gYXMgJGsgPT4gJHVybCkgewogICAgICAgICAgICAkeCA9ICRrKzE7CiAgICAgICAgICAgICRoID0gcGFyc2VfdXJsKCR1cmwpOwogICAgICAgICAgICBlY2hvICcgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgdmFsdWU9IicuJHguJyIgbmFtZT0ibWlycm9yIiBpZD0ia29pX21pcnJvcicuJHguJyIgLz48bGFiZWwgZm9yPSJrb2lfbWlycm9yJy4keC4nIj4nLiRoWydob3N0J10uJzwvbGFiZWw+PGJyIC8+Jy4iXG4iOwogICAgICAgIH0KPz4KICAgIDwvZm9ybT4KICAgIDxmb3JtIGFjdGlvbj0iIyIgaWQ9ImtvaW1ldGhvZCI+CiAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiB2YWx1ZT0iMCIgbmFtZT0ibWV0aG9kIiBpZD0ia29pX21ldGhvZDAiIC8+PGxhYmVsIGZvcj0ia29pX21ldGhvZDAiPkF1dG9tYXRpYzwvbGFiZWw+PGJyIC8+CiAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiB2YWx1ZT0iY3VybCIgbmFtZT0ibWV0aG9kIiBpZD0ia29pX21ldGhvZGN1cmwiIC8+PGxhYmVsIGZvcj0ia29pX21ldGhvZGN1cmwiPmNVUkw8L2xhYmVsPjxiciAvPgogICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgdmFsdWU9ImZvcGVuIiBuYW1lPSJtZXRob2QiIGlkPSJrb2lfbWV0aG9kZm9wZW4iIC8+PGxhYmVsIGZvcj0ia29pX21ldGhvZGZvcGVuIj5mb3BlbjwvbGFiZWw+PGJyIC8+CiAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiB2YWx1ZT0iZnNvY2siIG5hbWU9Im1ldGhvZCIgaWQ9ImtvaV9tZXRob2Rmc29jayIgLz48bGFiZWwgZm9yPSJrb2lfbWV0aG9kZnNvY2siPmZzb2NrPC9sYWJlbD48YnIgLz4KICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIHZhbHVlPSJubyIgbmFtZT0ibWV0aG9kIiBpZD0ia29pX21ldGhvZG5vIiAvPjxsYWJlbCBmb3I9ImtvaV9tZXRob2RubyI+T2ZmbGluZSBJbnN0YWxsPC9sYWJlbD4KICAgIDwvZm9ybT4KICAgIAogICAgPGRpdiBpZD0ia29pYWJvdXRwcm9qIj4KICAgICAgICA8aDI+QWJvdXQgPD9waHAgZWNobyAkR0xPQkFMU1sncHJvamVjdCddWyduYW1lJ107ID8+PC9oMj4KICAgICAgICA8cD4KICAgICAgICA8P3BocCBpZiAoJEdMT0JBTFNbJ3Byb2plY3QnXVsndXJsJ10pIHsgPz4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICRHTE9CQUxTWydwcm9qZWN0J11bJ3VybCddOyA/PiIgdGFyZ2V0PSJfYmxhbmsiPjw/cGhwIGVjaG8gJEdMT0JBTFNbJ3Byb2plY3QnXVsnbmFtZSddOyA/PjwvYT4KICAgICAgICA8P3BocCB9IGVsc2UgeyA/PgogICAgICAgIDw/cGhwIGVjaG8gJEdMT0JBTFNbJ3Byb2plY3QnXVsnbmFtZSddOyA/PgogICAgICAgIDw/cGhwIH0gPz4KICAgICAgICB2ZXJzaW9uIDw/cGhwIGVjaG8gJEdMT0JBTFNbJ3Byb2plY3QnXVsndmVyc2lvbiddOyA/PjwvcD4KICAgICAgICA8cD4KICAgICAgICA8P3BocCBpZiAoJEdMT0JBTFNbJ3Byb2plY3QnXVsnYmx1cmInXSkgeyA/PjxwPjw/cGhwIGVjaG8gJEdMT0JBTFNbJ3Byb2plY3QnXVsnYmx1cmInXTsgPz48L3A+PD9waHAgfSA/PgogICAgICAgIDw/cGhwIGlmICgkR0xPQkFMU1sncHJvamVjdCddWyd1cmwnXSkgeyA/PgogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJEdMT0JBTFNbJ3Byb2plY3QnXVsndXJsJ107ID8+IiB0YXJnZXQ9Il9ibGFuayI+PD9waHAgZWNobyAoJEdMT0JBTFNbJ3Byb2plY3QnXVsnYXV0aG9yJ10/JEdMT0JBTFNbJ3Byb2plY3QnXVsnYXV0aG9yJ106JEdMT0JBTFNbJ3Byb2plY3QnXVsndXJsJ10pOyA/PjwvYT4KICAgICAgICA8P3BocCB9IGVsc2VpZiAoJEdMT0JBTFNbJ3Byb2plY3QnXVsnYXV0aG9yJ10pIHsgPz4KICAgICAgICA8P3BocCBlY2hvICRHTE9CQUxTWydwcm9qZWN0J11bJ2F1dGhvciddOyA/PgogICAgICAgIDw/cGhwIH0gPz4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBpZD0ia29pYWJvdXQiPgogICAgICAgIDxoMj5BYm91dCBLb2k8L2gyPgogICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9rb2kuZ29vZ2xlY29kZS5jb20vIiB0YXJnZXQ9Il9ibGFuayI+S29pPC9hPiB2ZXJzaW9uIDAuMWFscGhhPC9wPgogICAgICAgIDxwPkF1dG9tYXRlZCBkb3dubG9hZCAmYW1wOyBpbnN0YWxsYXRpb24gc29mdHdhcmU8L3A+CiAgICAgICAgPHA+JmNvcHk7IDxhIGhyZWY9Imh0dHA6Ly9mdWxsdm9sdW1lLmNvLnVrLyIgdGFyZ2V0PSJfYmxhbmsiPkZ1bGx2b2x1bWUuY28udWs8L2E+PC9wPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgaWQ9ImtvaWxpbmUiPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9rb2kuZ29vZ2xlY29kZS5jb20vIiB0YXJnZXQ9Il9ibGFuayIgaWQ9ImtvaXRhZyI+UG93ZXJlZCBieSBLb2kgaW5zdGFsbGVyPGltZyBzcmM9Ij9mPWtvaS5wbmciIGFsdD0iIiAvPjwvYT4KICAgICAgICA8ZGl2IGlkPSJrb2ltZW51Ij4KICAgICAgICAgICAgQWR2YW5jZWQKICAgICAgICAgICAgPHVsIGlkPSJrb2lhZHZhbmNlZCI+CiAgICAgICAgICAgICAgICA8bGkgaWQ9ImtvaV9zaG93bG9nIj5WaWV3IExvZzwvbGk+CiAgICAgICAgICAgICAgICA8bGkgaWQ9ImtvaV9zaG93bWlycm9yIj5TZWxlY3QgTWlycm9yPC9saT4KICAgICAgICAgICAgICAgIDxsaSBpZD0ia29pX3Nob3dtZXRob2QiPkRvd25sb2FkIE1ldGhvZDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgaWQ9ImtvaV9zaG93YWJvdXRwcm9qIj5BYm91dCA8P3BocCBlY2hvICRHTE9CQUxTWydwcm9qZWN0J11bJ25hbWUnXTsgPz48L2xpPgogICAgICAgICAgICAgICAgPGxpIGlkPSJrb2lfc2hvd2Fib3V0Ij5BYm91dCBLb2k8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+';}
function koifile_koi_png() {return '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';}
function koifile_koi_apply_php() {return 'PD9waHAKCgpjbGFzcyBrb2lfYXBwbHkgewogICAgdmFyICRyZXNwb25zZSA9IGFycmF5KCk7CiAgICAKICAgIGZ1bmN0aW9uIGVuZCgpIHsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9qc29uJyk7CiAgICAgICAgJGxhc3QgPSAneyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnJlc3BvbnNlIGFzICR2YXIgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGVjaG8gJGxhc3Q7CiAgICAgICAgICAgIGlmICgkdmFyPT0nSlNPTicpIHsKICAgICAgICAgICAgICAgICRsYXN0ID0gJHZhbHVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGxhc3QgPSAiXG4iIC4gJyAgICBcJycgLiBhZGRzbGFzaGVzKCR2YXIpIC4gJ1wnOic7CiAgICAgICAgICAgICAgICBpZiAoaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAkbGFzdCAuPSAnXCcnIC4gYWRkc2xhc2hlcygkdmFsdWUpIC4gJ1wnLCc7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9IGFycmF5X21hcCgiYWRkc2xhc2hlcyIsICR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgJGxhc3QgLj0gJ1tcJycgLiBpbXBsb2RlKCdcJyxcJycsJHZhbHVlKSAuICdcJ10sJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGxhc3QgLj0gdmFyX2V4cG9ydCgkdmFsdWUsdHJ1ZSkgLiAnLCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyBzdWJzdHIoJGxhc3QsMCwoc3RybGVuKCRsYXN0KS0xKSk7CiAgICAgICAgZWNobyAiXG4iLid9JzsKICAgICAgICBleGl0OwogICAgfQogICAgCiAgICBmdW5jdGlvbiBlbmRlcnIoJHN0cmluZykgewogICAgICAgICR0aGlzLT5hZGR2YXIoJ2Vycm9yJywkc3RyaW5nKTsKICAgICAgICAkdGhpcy0+YWRkdmFyKCdyZXF1ZXN0JywnZXJyb3InKTsKICAgICAgICAkdGhpcy0+ZW5kKCk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGFkZHZhcigkdmFyLCR2YWx1ZSkgewogICAgICAgICR0aGlzLT5yZXNwb25zZVskdmFyXSA9ICR2YWx1ZTsKICAgIH0KICAgIAogICAgLy8gTG9hZC1iYWxhbmNlIG1pcnJvcnMKICAgIGZ1bmN0aW9uIG1pcnJvcnMoKSB7CiAgICAgICAgJGFyciA9IGFycmF5KCk7CiAgICAgICAgJG1pcnJvcnMgPSAkR0xPQkFMU1snbWlycm9ycyddOwogICAgICAgICR3ZWlnaHQgPSBhcnJheV9zdW0oJG1pcnJvcnMpOwogICAgICAgIGZvcmVhY2ggKCRtaXJyb3JzIGFzICRrID0+ICRtKSAkbWlycm9yc1ska10gPSBjZWlsKCgkbS8kd2VpZ2h0KSoxMDApOwoKICAgICAgICBhc29ydCgkbWlycm9ycyk7CiAgICAgICAgLy8gT25seSBib3RoZXIgdG8gb3JkZXIgdGhlIGZpcnN0IG1pcnJvcgogICAgICAgIHdoaWxlIChlbXB0eSgkYXJyKSkgewogICAgICAgICAgICBpZiAoIW5leHQoJG1pcnJvcnMpKSByZXNldCgkbWlycm9ycyk7CiAgICAgICAgICAgIGlmIChyYW5kKDAsMTAwKSA8PSBjdXJyZW50KCRtaXJyb3JzKSkgewogICAgICAgICAgICAgICAgJG0gPSBrZXkoJG1pcnJvcnMpOwogICAgICAgICAgICAgICAgdW5zZXQoJG1pcnJvcnNba2V5KCRtaXJyb3JzKV0pOwogICAgICAgICAgICAgICAgJGFyciA9IGFycmF5X2tleXMoJG1pcnJvcnMpOwogICAgICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkYXJyLCRtKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhcnI7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGRvd25sb2FkX2N1cmwoJHVybCwkc3RyZWFtLCRzdXBwcmVzcz1mYWxzZSkgewogICAgICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkgewogICAgICAgICAgICBpZiAoISRzdXBwcmVzcykgJHRoaXMtPmVuZGVycignY1VSTCBpcyBub3Qgc3VwcG9ydGVkLiBSZWZyZXNoIHRvIHNlbGVjdCBhbm90aGVyIGRvd25sb2FkIG1ldGhvZCcpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgICRjaCA9IGN1cmxfaW5pdCgpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIDApOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GQUlMT05FUlJPUiwgMSk7CiAgICAgICAgCiAgICAgICAgaWYgKCRzdHJlYW0pIHsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZJTEUsICRzdHJlYW0pOwogICAgICAgIH0gZWxzZSBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwogICAgICAgIAogICAgICAgICRyID0gY3VybF9leGVjKCRjaCk7CiAgICAgICAgaWYgKCAoISRyKSAmJiAoISRzdXByZXNzKSApICR0aGlzLT5hZGR2YXIoJ2N1cmwnLGN1cmxfZXJyb3IoJGNoKSk7CiAgICAgICAgY3VybF9jbG9zZSgkY2gpOwogICAgICAgIHJldHVybiAkcjsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZG93bmxvYWRfZm9wZW4oJHVybCwkc3RyZWFtLCRzdXBwcmVzcz1mYWxzZSkgewogICAgICAgIGlmICghJGZpbGUgPSBAZm9wZW4oJHVybCwncmInKSkgewogICAgICAgICAgICBpZiAoISRzdXBwcmVzcykgJHRoaXMtPmVuZGVycignZm9wZW4gaXMgbm90IHN1cHBvcnRlZC4gUmVmcmVzaCB0byBzZWxlY3QgYW5vdGhlciBkb3dubG9hZCBtZXRob2QnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoJHN0cmVhbSkgewogICAgICAgICAgICAkciA9IHRydWU7CiAgICAgICAgICAgIHdoaWxlICgkYmxvY2sgPSBmcmVhZCgkZmlsZSw1MTIpKSBmd3JpdGUoJHN0cmVhbSwkYmxvY2spOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyID0gJyc7CiAgICAgICAgICAgIHdoaWxlICgkYmxvY2sgPSBmcmVhZCgkZmlsZSw1MTIpKSAkciAuPSAkYmxvY2s7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZjbG9zZSgkZmlsZSk7CiAgICAgICAgcmV0dXJuICRyOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBkb3dubG9hZF9mc29jaygkdXJsLCRzdHJlYW0sJHN1cHByZXNzPWZhbHNlKSB7CiAgICAgICAgJGRhdGEgPSBwYXJzZV91cmwoJHVybCk7CiAgICAgICAgCiAgICAgICAgaWYgKCEkY29ubmVjdCA9IEBmc29ja29wZW4oJGRhdGFbJ2hvc3QnXSw4MCwkZXJybm8sJGVycnN0cikpIHsKICAgICAgICAgICAgaWYgKCEkc3VwcHJlc3MpICR0aGlzLT5hZGR2YXIoJ2Zzb2NrJywkZXJyc3RyKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmd3JpdGUoJGNvbm5lY3QsICJHRVQgIi4kZGF0YVsncGF0aCddLiIgSFRUUC8xLjFcclxuIik7CiAgICAgICAgZndyaXRlKCRjb25uZWN0LCAiSG9zdDogIi4kZGF0YVsnaG9zdCddLiJcclxuIik7CiAgICAgICAgZndyaXRlKCRjb25uZWN0LCAiQ29ubmVjdGlvbjogQ2xvc2VcclxuXHJcbiIpOwogICAgICAgIAogICAgICAgIC8vIFNraXAgSFRUUCBoZWFkZXJzCiAgICAgICAgJHN0b3AgPSBmYWxzZTsKICAgICAgICB3aGlsZSAoISRzdG9wKSB7CiAgICAgICAgICAgICRyID0gc3RyX3JlcGxhY2UoIlxyIiwnJyxmZ2V0cygkY29ubmVjdCkpOwogICAgICAgICAgICBpZiAoc3RycG9zKCRyLCc0MDQgTm90IEZvdW5kJykpIHsKICAgICAgICAgICAgICAgIGlmICghJHN1cHJlc3MpICR0aGlzLT5hZGR2YXIoJ2Zzb2NrJywnNDA0Jyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRyID09ICJcbiIpICRzdG9wID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCRzdHJlYW0pIHsKICAgICAgICAgICAgJHIgPSB0cnVlOwogICAgICAgICAgICB3aGlsZSghZmVvZigkY29ubmVjdCkpIGZ3cml0ZSgkc3RyZWFtLGZyZWFkKCRjb25uZWN0LDUxMikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyID0gJyc7CiAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRjb25uZWN0KSkgJHIgLj0gc3RyX3JlcGxhY2UoIlxyIiwnJyxmcmVhZCgkY29ubmVjdCw1MTIpKTsKICAgICAgICB9CiAgICAgICAgZmNsb3NlKCRjb25uZWN0KTsKICAgICAgICAKICAgICAgICByZXR1cm4gJHI7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHB1bGxfZmlsZSgkZmlsZSwkaGFzaD1mYWxzZSwkZ3o9ZmFsc2UpIHsKICAgICAgICBpZiAoISRHTE9CQUxTWydzZXR0aW5ncyddWydneiddKSAkZ3o9ZmFsc2U7CiAgICAgICAgCiAgICAgICAgJGFyciA9IGFycmF5X2tleXMoJEdMT0JBTFNbJ21pcnJvcnMnXSk7CiAgICAgICAgJHVybCA9ICRhcnJbKCRfR0VUWydtaXJyb3InXS0xKV0gLiAkZmlsZSAuICgkZ3o/Jy5neic6JycpOwogICAgICAgIAogICAgICAgIAogICAgICAgIGlmIChpc19maWxlKCcuLycuJGZpbGUpKSBAdW5saW5rKCcuLycuJGZpbGUpOwogICAgICAgIGlmICggKCRneikgJiAoaXNfZmlsZSgnLi8nLiRmaWxlLicuZ3onKSkgKSBAdW5saW5rKCcuLycuJGZpbGUuJy5neicpOwogICAgICAgIGlmICghJHN0cmVhbSA9IGZvcGVuKCcuLycuJGZpbGUuKCRnej8nLmd6JzonJyksJ3diJykpIHsKICAgICAgICAgICAgJHRoaXMtPmVuZGVycignQ291bGQgbm90IHNhdmUgZG93bmxvYWRlZCBmaWxlKCcgLiAkZmlsZSAuICcpLiBJcyB0aGlzIGRpcmVjdG9yeSB3cml0YWJsZT8nKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBzd2l0Y2goJF9HRVRbJ21ldGhvZCddKSB7CiAgICAgICAgICAgIGNhc2UgJ2N1cmwnOiAkciA9ICR0aGlzLT5kb3dubG9hZF9jdXJsKCR1cmwsJHN0cmVhbSk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICdmb3Blbic6ICRyID0gJHRoaXMtPmRvd25sb2FkX2ZvcGVuKCR1cmwsJHN0cmVhbSk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICdmc29jayc6ICRyID0gJHRoaXMtPmRvd25sb2FkX2Zzb2NrKCR1cmwsJHN0cmVhbSk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICdubyc6ICR0aGlzLT5lbmRlcnIoJ09mZmxpbmUgaW5zdGFsbCBtZXRob2QgYWN0aXZlIGJ1dCBjYW5cJ3QgZmluZCB0aGUgcmVxdWlyZWQgZmlsZTogJyAuICRmaWxlKTsgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6ICR0aGlzLT5lbmRlcnIoJ0Rvd25sb2FkIG1ldGhvZCBub3QgcmVjb2duaXplZCcpOyBicmVhazsKICAgICAgICB9CiAgICAgICAgZmNsb3NlKCRzdHJlYW0pOwogICAgICAgIAogICAgICAgIGlmICghJHIpIHsKICAgICAgICAgICAgJHRoaXMtPmVuZGVycignRG93bmxvYWQgdXNpbmcgJyAuICRfR0VUWydtZXRob2QnXSAuICcgbWV0aG9kIGZhaWxlZCEgRmlsZSB1bmF2YWxpYWJsZTogJyAuICRmaWxlIC4gKCRnej8nLmd6JzonJykgLiAnIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIgb3IgcmVmcmVzaCBhbmQgc2VsZWN0IGEgZGlmZmVyZW50IGRvd25sb2FkIG1pcnJvciBvciBkb3dubG9hZCBtZXRob2QnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoJGd6KSB7CiAgICAgICAgICAgICRnemZpbGUgPSBnem9wZW4oJy4vJy4kZmlsZS4nLmd6JywncmInKTsKICAgICAgICAgICAgJG9maWxlID0gZm9wZW4oJy4vJy4kZmlsZSwnd2InKTsKICAgICAgICAgICAgd2hpbGUgKCRibG9jayA9IGd6cmVhZCgkZ3pmaWxlLDUxMikpIGZ3cml0ZSgkb2ZpbGUsJGJsb2NrKTsKICAgICAgICAgICAgZ3pjbG9zZSgkZ3pmaWxlKTsKICAgICAgICAgICAgZmNsb3NlKCRvZmlsZSk7CiAgICAgICAgICAgIEB1bmxpbmsoJy4vJy4kZmlsZS4nLmd6Jyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICggKCRoYXNoKSAmJiAoJGhhc2ggIT0gbWQ1X2ZpbGUoJy4vJy4kZmlsZSkpICkgewogICAgICAgICAgICAkdGhpcy0+ZW5kZXJyKCdDb3VsZCBub3QgdmFsaWRhdGUgZG93bmxvYWRlZCBmaWxlKCcgLiAkZmlsZSAuICcpLiBNRDUgaGFzaCBkb2VzIG5vdCBtYXRjaC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciBvciByZWZyZXNoIGFuZCBzZWxlY3QgYSBkaWZmZXJlbnQgZG93bmxvYWQgbWlycm9yIG9yIGRvd25sb2FkIG1ldGhvZCcpOwogICAgICAgICAgICB1bmxpbmsoJy4vJy4kZmlsZSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJHRoaXMtPmFkZHZhcigkZmlsZSwnZG93bmxvYWRlZCcuICgkZ3o/JyBbZ3pdJzonJykpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICAKICAgIAogICAgZnVuY3Rpb24gbWltaWNfdW5wYWsoJGZpbGUpIHsKICAgICAgICBrb2lfaW1wb3J0KCdsaWJ0YXIucGhwJyk7CiAgICAgICAgJHRhciA9IG5ldyB0YXIoJy4vJy4kZmlsZSk7CiAgICAgICAgCiAgICAgICAgJGZvbGRlcnMgPSBhcnJheSgpOwogICAgICAgICRmaXJzdCA9IHRydWU7CiAgICAgICAgd2hpbGUgKCAoJGZpcnN0KSB8fCAoJHRhci0+bmV4dCgpKSApIHsKICAgICAgICAgICAgJGZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgICRmaWxlID0gJHRhci0+ZGF0YSgpOwogICAgICAgICAgICBpZiAoJGZpbGVbJ3R5cGUnXT09NSkgewogICAgICAgICAgICAgICAgaWYgKHN1YnN0cigkZmlsZVsnbmFtZSddLDAsMSk9PScvJykgJGZpbGVbJ25hbWUnXSA9IHN1YnN0cigkZmlsZVsnbmFtZSddLDEpOwogICAgICAgICAgICAgICAgaWYgKHN1YnN0cigkZmlsZVsnbmFtZSddLC0xKSE9Jy8nKSAkZmlsZVsnbmFtZSddIC49ICcvJzsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGxldmVsID0gc3Vic3RyX2NvdW50KCRmaWxlWyduYW1lJ10sJy8nKTsKICAgICAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJGZvbGRlcnNbJGxldmVsXSkpICRmb2xkZXJzWyRsZXZlbF0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgJGZvbGRlcnNbJGxldmVsXVtdID0gYXJyYXkoJGZpbGVbJ25hbWUnXSwkZmlsZVsnbW9kZSddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBrc29ydCgkZm9sZGVycyk7CiAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGxldmVsKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRsZXZlbCBhcyAkZm9sZGVyKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzX2RpcigkZm9sZGVyWzBdKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc19maWxlKCRmb2xkZXJbMF0pKSAkdGhpcy0+ZW5kZXJyKCdGb2xkZXIgdG8gd3JpdGUgdG8gYWxyZWFkeSBleGlzdHMgYXMgYSBmaWxlOiAnIC4gJGZvbGRlclswXSAuICcgUGxlYXNlIGNvcnJlY3QgdGhpcyBlcnJvciB0aGVuIHJlZnJlc2ggdG8gcmV0ZXN0Jyk7CiAgICAgICAgICAgICAgICAgICAgQG1rZGlyKCRmb2xkZXJbMF0pOwogICAgICAgICAgICAgICAgICAgIGlmICghaXNfZGlyKCRmb2xkZXJbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEBjaG1vZChzdWJzdHIoJGZvbGRlclswXSwwLHN0cnJwb3MoJGZvbGRlclswXSwnLycsMSkpLDA3NzcpOwogICAgICAgICAgICAgICAgICAgICAgICBAbWtkaXIoJGZvbGRlclswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNfZGlyKCRmb2xkZXJbMF0pKSAkdGhpcy0+ZW5kZXJyKCdGb2xkZXIgY3JlYXRpb24gZmFpbGVkIC0gJyAuICRmb2xkZXJbMF0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBAY2htb2QoJGZvbGRlclswXSwkZm9sZGVyWzFdKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0gZWxzZSBAY2htb2QoJGZvbGRlclswXSwkZm9sZGVyWzFdKTsKICAgICAgICAgICAgICAgIGlmICghaXNfd3JpdGFibGUoJGZvbGRlclswXSkpICR0aGlzLT5lbmRlcnIoJ0ZvbGRlciBqdXN0IGNyZWF0ZWQgaXMgbm90IHdyaXRhYmxlIC0gJyAuICRmb2xkZXJbMF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRuZXcgPSBhcnJheSgpOwogICAgICAgICRvdmVyd3JpdGUgPSBhcnJheSgpOwogICAgICAgIAogICAgICAgICR0YXItPnNlZWsoMCk7CiAgICAgICAgJGZpcnN0ID0gdHJ1ZTsKICAgICAgICB3aGlsZSAoICgkZmlyc3QpIHx8ICgkdGFyLT5uZXh0KCkpICkgewogICAgICAgICAgICAkZmlyc3QgPSBmYWxzZTsKICAgICAgICAgICAgJGZpbGUgPSAkdGFyLT5kYXRhKCk7CiAgICAgICAgICAgIGlmICgkZmlsZVsndHlwZSddPT0wKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNfZmlsZSgkZmlsZVsnbmFtZSddKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc193cml0YWJsZSgkZmlsZVsnbmFtZSddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkb3ZlcndyaXRlW10gPSAkZmlsZVsnbmFtZSddOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSAkdGhpcy0+ZW5kZXJyKCdGaWxlIHRvIHdyaXRlIHRvIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3Qgd3JpdGFibGUgLSAnIC4gJGZpbGVbJ25hbWUnXSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChpc193cml0YWJsZSgnLi8nLnN1YnN0cigkZmlsZVsnbmFtZSddLDAsc3RycnBvcygkZmlsZVsnbmFtZSddLCcvJykpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbmV3W10gPSAkZmlsZVsnbmFtZSddOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSAkdGhpcy0+ZW5kZXJyKCdGb2xkZXIgdG8gd3JpdGUgdG8gaXMgbm90IHdyaXRhYmxlIC0gJyAuIHN1YnN0cigkZmlsZVsnbmFtZSddLDAsc3RycnBvcygkZmlsZVsnbmFtZSddLCcvJykpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAkdGFyLT5jbG9zZSgpOwogICAgICAgIAogICAgICAgICR0aGlzLT5hZGR2YXIoJ25ld3dyaXRlJywkbmV3KTsKICAgICAgICAkdGhpcy0+YWRkdmFyKCdvdmVyd3JpdGUnLCRvdmVyd3JpdGUpOwogICAgfQogICAgCiAgICAKICAgIAogICAgZnVuY3Rpb24gdW5wYWsoJHRhcmZpbGUpIHsKICAgICAgICBrb2lfaW1wb3J0KCdsaWJ0YXIucGhwJyk7CiAgICAgICAgJHRhciA9IG5ldyB0YXIoJy4vJy4kdGFyZmlsZSk7CiAgICAgICAgCiAgICAgICAgJHVucGFja2VkID0gYXJyYXkoKTsKICAgICAgICAkZmlyc3QgPSB0cnVlOwogICAgICAgIHdoaWxlICggKCRmaXJzdCkgfHwgKCR0YXItPm5leHQoKSkgKSB7CiAgICAgICAgICAgICRmaXJzdCA9IGZhbHNlOwogICAgICAgICAgICAkZmlsZSA9ICR0YXItPmRhdGEoKTsKICAgICAgICAgICAgaWYgKCRmaWxlWyd0eXBlJ109PTApIHsKICAgICAgICAgICAgICAgICRmaGFuZGxlID0gZm9wZW4oJy4vJyAuICRmaWxlWyduYW1lJ10sJ3diJyk7CiAgICAgICAgICAgICAgICBmd3JpdGUoJGZoYW5kbGUsJHRhci0+Y3VyZmlsZSgpKTsKICAgICAgICAgICAgICAgIGZjbG9zZSgkZmhhbmRsZSk7CiAgICAgICAgICAgICAgICBAY2htb2QoJGZpbGVbJ25hbWUnXSwkZmlsZVsnbW9kZSddKTsKICAgICAgICAgICAgICAgICR1bnBhY2tlZFtdID0gJGZpbGVbJ25hbWUnXSAuICcgKCcgLiAkZmlsZVsnbW9kZSddIC4gJyknOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR0YXItPmNsb3NlKCk7CiAgICAgICAgCiAgICAgICAgJHRoaXMtPmFkZHZhcigndW5wYWNrZWQnLCR1bnBhY2tlZCk7CiAgICAgICAgdW5saW5rKCcuLycgLiAkdGFyZmlsZSk7CiAgICB9CiAgICAKICAgIAogICAgCiAgICBmdW5jdGlvbiBzd2l0Y2hib2FyZCgkc3RhZ2UpIHsKICAgICAgICAkX0dFVFsnYWN0aW9uJ10gPSAoaXNzZXQoJF9HRVRbJ2FjdGlvbiddKT91cmxlbmNvZGUoJF9HRVRbJ2FjdGlvbiddKTonaW5zdGFsbCcpOwogICAgICAgIHN3aXRjaCgkc3RhZ2UpIHsKICAgICAgICAgICAgY2FzZSAnY2xlYW51cCc6CiAgICAgICAgICAgICAgICBpZiAoICghJEdMT0JBTFNbJ3NldHRpbmdzJ11bJ2tlZXBsb2NrJ10pICYmIChAdW5saW5rKCcuL2xvY2sucGhwJykpICkgJHRoaXMtPmFkZHZhcignbG9jay5waHAnLCdkZWxldGVkJyk7CiAgICAgICAgICAgICAgICBpZiAoQHVubGluaygnLi9kb3dubG9hZC5waHAnKSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5hZGR2YXIoJ2Rvd25sb2FkLnBocCcsJ2RlbGV0ZWQnKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19maWxlKCcuL2Rvd25sb2FkLnBocCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFkZHZhcignZG93bmxvYWQucGhwJywnbm90IGRlbGV0ZWQhJyk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFkZHZhcignZmFpbCcsJ2Rvd25sb2FkLnBocCB3YXMgbm90IGRlbGV0ZWQgc3VjY2Vzc2Z1bHkhIExlYXZpbmcgZG93bmxvYWQucGhwIHRoZXJlIGlzIGEgbWFqb3Igc2VjdXJpdHkgcmlzayAtIHBsZWFzZSBkZWxldGUgZG93bmxvYWQucGhwJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaW5zdGFsbCc6CiAgICAgICAgICAgICAgICAkdGhpcy0+dW5wYWsoJF9HRVRbJ2ZpbGUnXSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc2Nhbic6CiAgICAgICAgICAgICAgICAkdGhpcy0+bWltaWNfdW5wYWsoJF9HRVRbJ2ZpbGUnXSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZG93bmxvYWQnOgogICAgICAgICAgICAgICAgaWYgKCAoaXNfZmlsZSgnLi8nIC4gJF9HRVRbJ2ZpbGUnXSkpICYmIChtZDVfZmlsZSgnLi8nIC4gJF9HRVRbJ2ZpbGUnXSkgPT0gJF9HRVRbJ2hhc2gnXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFkZHZhcignY2FjaGUnLHRydWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cHVsbF9maWxlKCRfR0VUWydmaWxlJ10sJF9HRVRbJ2hhc2gnXSxmdW5jdGlvbl9leGlzdHMoJ2d6ZmlsZScpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdyZWZyZXNoJzoKICAgICAgICAgICAgICAgICR0aGlzLT5wdWxsX2ZpbGUoJ2Rvd25sb2FkLnBocCcpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZpbGVjaGVjayc6CiAgICAgICAgICAgICAgICBpZiAoaXNfZmlsZSgnLi8nIC4gJF9HRVRbJ2FjdGlvbiddIC4gJy5sc3QnKSkgewogICAgICAgICAgICAgICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L2pzb24nKTsKICAgICAgICAgICAgICAgICAgICAkcHVsbCA9IGltcGxvZGUoZmlsZSgnLi8nIC4gJF9HRVRbJ2FjdGlvbiddIC4gJy5sc3QnKSk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFkZHZhcignSlNPTicsc3Vic3RyKCRwdWxsLDEsc3RybGVuKCRwdWxsKS0zKS4nLCcpOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5hZGR2YXIoJ21ldGhvZCcsJ25vJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRwdWxsID0gJyc7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKCRfR0VUWydtaXJyb3InXSkgewogICAgICAgICAgICAgICAgICAgICAgICAkYXJyID0gYXJyYXlfa2V5cygkR0xPQkFMU1snbWlycm9ycyddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGFyciA9IGFycmF5KCRhcnJbKCRfR0VUWydtaXJyb3InXS0xKV0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSAkYXJyID0gJHRoaXMtPm1pcnJvcnMoKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYXJyIGFzICRpID0+ICRtaXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnN0cigkcHVsbCwwLDEpIT0neycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmwgPSAkbWlycm9yIC4gJF9HRVRbJ2FjdGlvbiddIC4gJy5sc3QnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgkX0dFVFsnbWV0aG9kJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdubyc6ICRwdWxsID0gZmFsc2U7ICRtZXRob2QgPSAnbm8nOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjdXJsJzogJHB1bGwgPSAkdGhpcy0+ZG93bmxvYWRfY3VybCgkdXJsLGZhbHNlLHRydWUpOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmb3Blbic6ICRwdWxsID0gJHRoaXMtPmRvd25sb2FkX2ZvcGVuKCR1cmwsZmFsc2UsdHJ1ZSk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Zzb2NrJzogJHB1bGwgPSAkdGhpcy0+ZG93bmxvYWRfZnNvY2soJHVybCxmYWxzZSx0cnVlKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHB1bGwgPSAkdGhpcy0+ZG93bmxvYWRfY3VybCgkdXJsLGZhbHNlLHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRwdWxsLDAsMSkhPSd7JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHB1bGwgPSAkdGhpcy0+ZG93bmxvYWRfZm9wZW4oJHVybCxmYWxzZSx0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdHIoJHB1bGwsMCwxKSE9J3snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHB1bGwgPSAkdGhpcy0+ZG93bmxvYWRfZnNvY2soJHVybCxmYWxzZSx0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRwdWxsLDAsMSk9PSd7JykgJG1ldGhvZCA9ICdmc29jayc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgJG1ldGhvZCA9ICdmb3Blbic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAkbWV0aG9kID0gJ2N1cmwnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRwdWxsLDAsMSkhPSd7JykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkdmFyKCdtZXRob2QnLCdubycpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hZGR2YXIoJ0pTT04nLHN1YnN0cigkcHVsbCwxLHN0cmxlbigkcHVsbCktMykuJywnKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFkZHZhcignbWV0aG9kJywoJG1ldGhvZD8kbWV0aG9kOiRfR0VUWydtZXRob2QnXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkdmFyKCdtaXJyb3InLCgkaSsxKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+ZW5kZXJyKCdTdGFnZSBnaXZlbiBub3QgcmVjb2duaXplZDogJyAuICRfR0VUWydzdGFnZSddKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQoKCgoka29pID0gbmV3IGtvaV9hcHBseTsKCi8vIFNhZmV0eSBsb2NrCmlmIChpc19maWxlKCcuL2xvY2sucGhwJykpIHsKICAgICRsb2NrID0gZmlsZSgnLi9sb2NrLnBocCcpOwogICAgaWYgKCAocnRyaW0oJGxvY2tbMF0pPT0nPD9waHAgZXhpdDsgPycgLiAnPicpICYmICgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSE9JGxvY2tbMV0pICkgewogICAgICAgICRrb2ktPmVuZGVycignRm9yIHNlY3VyaXR5IHRoaXMgZmlsZSBpcyBsb2NrZWQgZG93biB0byB0aGUgb3JpZ2luYWwgdXNlciBvbmx5LiBUbyB1bmxvY2sgdGhpcyBmaWxlIEZUUCB0byB5b3VyIHNpdGUgYW5kIGRlbGV0ZSBsb2NrLnBocCBmcm9tIHRoaXMgZm9sZGVyLicpOwogICAgfQp9Cgoka29pLT5zd2l0Y2hib2FyZCgkX0dFVFsnc3RhZ2UnXSk7CiRrb2ktPmVuZCgpOwoKPz4=';}
function koifile_libtar_php() {return 'PD9waHAKLy8gCi8vIFRhciBjbGFzcwovLyBVbnBhY2tzIHRhciBmaWxlcyAob3B0aW9uYWwgLmd6IGNvbXByZXNzaW9uKQovLyAKLy8gKGMpIFN0ZXZlIEggMjAwOCA6OiBHUEwgdjMKLy8gCmNsYXNzIHRhciB7CiAgICAvLyBJbml0aWFsIHZhcmlhYmxlcwogICAgdmFyICRmaWxlID0gZmFsc2U7CiAgICB2YXIgJGZpbGVuYW1lID0gZmFsc2U7CiAgICB2YXIgJHBvaW50ZXIgPSAwOwogICAgdmFyICRtYXJrcyA9IGFycmF5KCk7CiAgICB2YXIgJGN1cmRhdGEgPSBmYWxzZTsKICAgIHZhciAkZmlsZWxpc3QgPSBhcnJheSgpOwogICAgdmFyICR0cmF2ZXJzZWQgPSBmYWxzZTsKICAgIAogICAgCiAgICBmdW5jdGlvbiB0YXIoJGZpbGU9ZmFsc2UsJGd6PWZhbHNlKSB7CiAgICAgICAgaWYgKCRmaWxlKSAkdGhpcy0+bG9hZCgkZmlsZSwkZ3opOwogICAgfQogICAgCiAgICAvLyBMb2FkIHRhciBmaWxlCiAgICBmdW5jdGlvbiBsb2FkKCRmaWxlLCRnej1mYWxzZSkgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwogICAgICAgIAogICAgICAgIGlmICggKCRneikgJiYgKCFmdW5jdGlvbl9leGlzdHMoJ2d6b3BlbicpKSApIHsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcignZ3ogY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIFBIUCBpbnN0YWxsYXRpb24nLEVfVVNFUl9FUlJPUik7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCEkdGhpcy0+ZmlsZSA9ICgkZ3o/Z3pvcGVuKCRmaWxlLCdyYicpOmZvcGVuKCRmaWxlLCdyYicpKSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCd0YXIgZmlsZSBmYWlsZWQgdG8gbG9hZCcsRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZmlsZW5hbWUgPSAkZmlsZTsKICAgICAgICAkdGhpcy0+cmVzZXQoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIAogICAgLy8gQ2xvc2UgdGFyIGZpbGUKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICAgIGlmICgkdGhpcy0+ZmlsZSkgewogICAgICAgICAgICAkdGhpcy0+cmVzZXQoKTsKICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5maWxlKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmZpbGUgPSBmYWxzZTsKICAgICAgICAkdGhpcy0+ZmlsZW5hbWUgPSBmYWxzZTsKICAgICAgICAkdGhpcy0+bWFya3MgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5maWxlbGlzdCA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPnRyYXZlcnNlZCA9IGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICAKICAgIAogICAgLy8gUmVzZXQgaW50ZXJuYWwgZmlsZSBwb2ludGVyCiAgICBmdW5jdGlvbiByZXNldCgpIHsKICAgICAgICBpZiAoISR0aGlzLT5maWxlKSByZXR1cm4gJHRoaXMtPm5vZmlsZSgpOwogICAgICAgIHJld2luZCgkdGhpcy0+ZmlsZSk7CiAgICAgICAgJHRoaXMtPnBvaW50ZXIgPSAwOwogICAgICAgICR0aGlzLT5jdXJkYXRhID0gZmFsc2U7CiAgICAgICAgcmV0dXJuICR0aGlzLT5sb2FkY3VyKCk7CiAgICB9CiAgICAKICAgIAogICAgCiAgICAvLyBTZXQgcG9pbnRlciB0byBwcmV2aW91cyBmaWxlCiAgICBmdW5jdGlvbiBwcmV2KCkgewogICAgICAgIGlmICghJHRoaXMtPmZpbGUpIHJldHVybiAkdGhpcy0+bm9maWxlKCk7CiAgICAgICAgCiAgICAgICAgaWYgKCR0aGlzLT5wb2ludGVyID09IDApIHJldHVybiBmYWxzZTsKICAgICAgICAkdGhpcy0+cG9pbnRlci0tOwogICAgICAgIAogICAgICAgIGZzZWVrKCR0aGlzLT5maWxlLCR0aGlzLT5tYXJrc1skdGhpcy0+cG9pbnRlcl0pOwogICAgICAgIHJldHVybiAkdGhpcy0+bG9hZGN1cigpOwogICAgfQogICAgLy8gU2V0IHBvaW50ZXIgdG8gbmV4dCBmaWxlCiAgICBmdW5jdGlvbiBuZXh0KCkgewogICAgICAgIGlmICghJHRoaXMtPmZpbGUpIHJldHVybiAkdGhpcy0+bm9maWxlKCk7CiAgICAgICAgCiAgICAgICAgJHRoaXMtPnBvaW50ZXIrKzsKICAgICAgICAKICAgICAgICByZXR1cm4gJHRoaXMtPmxvYWRjdXIoKTsKICAgIH0KICAgIC8vIEdvdG8gc3BlY2lmaWVkIGZpbGUKICAgIGZ1bmN0aW9uIHNlZWsoJGkpIHsKICAgICAgICBpZiAoJHRoaXMtPnBvaW50ZXIgPT0gJGkpIHJldHVybiB0cnVlOwogICAgICAgIGlmICgkdGhpcy0+cG9pbnRlciA+ICRpKSB7CiAgICAgICAgICAgIGZzZWVrKCR0aGlzLT5maWxlLCR0aGlzLT5tYXJrc1skaV0pOwogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmxvYWRjdXIoKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKCAoJHIgPSAkdGhpcy0+bmV4dCgpKSAmJiAoJHRoaXMtPnBvaW50ZXIgPCAkaSkgKTsKICAgICAgICByZXR1cm4gJHI7CiAgICB9CiAgICAvLyBMb2FkIHNlbGVjdGVkIGZpbGUKICAgIGZ1bmN0aW9uIGxvYWRjdXIoKSB7CiAgICAgICAgJHBvaW50ZXIgPSBmdGVsbCgkdGhpcy0+ZmlsZSk7CiAgICAgICAgCiAgICAgICAgJGhlYWRlcnMgPSBmcmVhZCgkdGhpcy0+ZmlsZSw1MTIpOwogICAgICAgIGlmICgkaGVhZGVycyA9PSBzdHJfcmVwZWF0KGNocigwKSw1MTIpKSB7CiAgICAgICAgICAgICR0aGlzLT50cmF2ZXJzZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICR0aGlzLT5jdXJkYXRhID0gYXJyYXkoCiAgICAgICAgICAgICduYW1lJz0+c3RyX3JlcGxhY2UoY2hyKDApLCcnLHN1YnN0cigkaGVhZGVycywwLDEwMCkpLAogICAgICAgICAgICAnbW9kZSc9Pm9jdGRlYyhzdWJzdHIoJGhlYWRlcnMsMTAwLDgpKSwKICAgICAgICAgICAgJ3VpZCc9Pm9jdGRlYyhzdWJzdHIoJGhlYWRlcnMsMTA4LDgpKSwKICAgICAgICAgICAgJ2dpZCc9Pm9jdGRlYyhzdWJzdHIoJGhlYWRlcnMsMTE2LDgpKSwKICAgICAgICAgICAgJ3NpemUnPT5vY3RkZWMoc3Vic3RyKCRoZWFkZXJzLDEyNCwxMikpLAogICAgICAgICAgICAndGltZSc9Pm9jdGRlYyhzdWJzdHIoJGhlYWRlcnMsMTM2LDEyKSksCiAgICAgICAgICAgICdjaGVja3N1bSc9Pm9jdGRlYyhzdWJzdHIoJGhlYWRlcnMsMTQ4LDYpKSwKICAgICAgICAgICAgJ3R5cGUnPT5vY3RkZWMoc3Vic3RyKCRoZWFkZXJzLDE1NiwxKSksCiAgICAgICAgKTsKICAgICAgICAKICAgICAgICBpZiAoc3Vic3RyKCRoZWFkZXJzLDI1Nyw1KSA9PSAndXN0YXInKSB7CiAgICAgICAgICAgICR0aGlzLT5jdXJkYXRhWyduYW1lJ10gPSBzdHJfcmVwbGFjZShjaHIoMCksJycsc3Vic3RyKCRoZWFkZXJzLDM0NSwxNTUpKS4kdGhpcy0+Y3VyZGF0YVsnbmFtZSddOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoJHRoaXMtPmNoZWNrc3VtKCRoZWFkZXJzKSAhPSAkdGhpcy0+Y3VyZGF0YVsnY2hlY2tzdW0nXSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCdUYXIgY2hlY2tzdW0gZmFpbGVkJyxFX1VTRVJfRVJST1IpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICR0aGlzLT5tYXJrc1skdGhpcy0+cG9pbnRlcl0gPSAkcG9pbnRlcjsKICAgICAgICAkdGhpcy0+ZmlsZWxpc3RbJHRoaXMtPnBvaW50ZXJdID0gJHRoaXMtPmN1cmRhdGFbJ25hbWUnXTsKICAgICAgICAKICAgICAgICBmc2VlaygkdGhpcy0+ZmlsZSwoJHBvaW50ZXIrNTEyKyhjZWlsKCR0aGlzLT5jdXJkYXRhWydzaXplJ10vNTEyKSo1MTIpKSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAKICAgIAogICAgCiAgICBmdW5jdGlvbiBjaGVja3N1bSgkc3RyKSB7CiAgICAgICAgJHN1bSA9IDI1NjsKICAgICAgICBmb3IgKCRuPTA7JG48NTEyOyRuKyspIGlmICgoJG48MTQ4KXx8KCRuPjE1NSkpICRzdW0gKz0gb3JkKCRzdHJbJG5dKTsKICAgICAgICByZXR1cm4gJHN1bTsKICAgIH0KICAgIAogICAgCiAgICAKICAgIC8vIFJldHVybiBmaWxlIGRhdGEKICAgIGZ1bmN0aW9uIGRhdGEoJGRhdGE9ZmFsc2UpIHsKICAgICAgICBpZiAoISR0aGlzLT5maWxlKSByZXR1cm4gJHRoaXMtPm5vZmlsZSgpOwogICAgICAgIHJldHVybiAkdGhpcy0+Y3VyZGF0YTsKICAgIH0KICAgIC8vIFJldHVybiBmaWxlIGNvbnRlbnRzCiAgICBmdW5jdGlvbiBjdXJmaWxlKCkgewogICAgICAgIGlmICghJHRoaXMtPmZpbGUpIHJldHVybiAkdGhpcy0+bm9maWxlKCk7CiAgICAgICAgaWYgKCR0aGlzLT5jdXJkYXRhWydzaXplJ10pIHsKICAgICAgICAgICAgZnNlZWsoJHRoaXMtPmZpbGUsKCR0aGlzLT5tYXJrc1skdGhpcy0+cG9pbnRlcl0rNTEyKSk7CiAgICAgICAgICAgICRkYXRhID0gZnJlYWQoJHRoaXMtPmZpbGUsJHRoaXMtPmN1cmRhdGFbJ3NpemUnXSk7CiAgICAgICAgICAgIGZzZWVrKCR0aGlzLT5maWxlLCgkdGhpcy0+bWFya3NbJHRoaXMtPnBvaW50ZXJdKzUxMisoY2VpbCgkdGhpcy0+Y3VyZGF0YVsnc2l6ZSddLzUxMikqNTEyKSkpOwogICAgICAgICAgICByZXR1cm4gJGRhdGE7CiAgICAgICAgfSBlbHNlIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICAKICAgIAogICAgLy8gUmV0dXJuIGZpbGVsaXN0IG9mIGVudGlyZSB0YXIgZmlsZQogICAgZnVuY3Rpb24gZmlsZWxpc3QoKSB7CiAgICAgICAgaWYgKCR0aGlzLT50cmF2ZXJzZWQpIHJldHVybiAkdGhpcy0+ZmlsZWxpc3Q7CiAgICAgICAgaWYgKCEkdGhpcy0+cmVzZXQoKSkgcmV0dXJuIGFycmF5KCk7IC8vIEVtcHR5IGZpbGU/CiAgICAgICAgd2hpbGUgKCR0aGlzLT5uZXh0KCkpOwogICAgICAgIHJldHVybiAkdGhpcy0+ZmlsZWxpc3Q7CiAgICB9CiAgICAKICAgIAogICAgCiAgICAvLyBUcmlnZ2VyIGNsYXNzIGVycm9yCiAgICBmdW5jdGlvbiBub2ZpbGUoKSB7CiAgICAgICAgdHJpZ2dlcl9lcnJvcignTm8gZmlsZSBsb2FkZWQgaW4gY2xhc3NfdGFyJyxFX1VTRVJfV0FSTklORyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgCn0KCj8+';}

function koi_filelist() {return array('background.png','cleanup.png','dark.png','design.css','design.js','design.php','download.png','frame.png','install.png','scan.png','slide.jpg','koi.css','koi.js','koi.php','koi.png','koi_apply.php','libtar.php');}
?>