<? #//v.3.2.1
#///////////////////////////////////////////////////////
echo "<script>document.location.href='install.php'</script>" ;
} else {
#///////////////////////////////////////////////////////
require_once ( './includes/config.inc.php' ) ;
#// Run cron according to SETTINGS
if ( $SETTINGS [ 'cron' ] == 2 )
{
include_once "cron.php" ;
}
require_once ( "./header.php" ) ;
function get_next_bid( $auction_id ) {
$result = mysql_query ( "SELECT * FROM BPPENNYAUTOBID_auctions WHERE id=" . intval ( $auction_id ) ) ; $result_bids = mysql_query ( "select max(bid) AS maxbid, bidder FROM BPPENNYAUTOBID_bids WHERE auction=" . intval ( $auction_id ) . " GROUP BY auction, bidder ORDER BY maxbid DESC" ) ;
if ( $max_bid == 0 ) {
$MAX_BID = $minimum_bid ;
//// Added by Yosi 22 Jul 2009 - consider if auction starts with some value
$max_bid = $minimum_bid ;
} else
{
$MAX_BID = $max_bid ;
}
/* Get bid increment for current bid and calculate minimum bid */
$query = "SELECT increment FROM BPPENNYAUTOBID_increments WHERE " . "((low <= $MAX_BID AND high >= $MAX_BID ) OR " . "(low < $MAX_BID AND high < $MAX_BID )) ORDER BY increment DESC" ;
//echo "<div style='display:none;'>sql:<br>";
//echo "$query</div>";
{
}
if ( $customincrement > 0 )
{
$increment = $customincrement ;
}
if ( $max_bid == 0 || $atype == 2 )
{
$next_bid = $minimum_bid ;
} else
{
$next_bid = $max_bid + $increment ;
}
return $next_bid ;
} else {
return 0 ;
}
}
function get_winner_name( $auction_id ) {
$sql = "SELECT b.bid, b.bidder, COUNT(bid) AS bid_count,u.nick
FROM BPPENNYAUTOBID_bids b
INNER JOIN BPPENNYAUTOBID_users u ON b.bidder=u.id
WHERE b.auction=" . $auction_id . " GROUP BY b.bid ORDER BY b.bid DESC " ;
return $row1 [ 'nick' ] ;
} else {
return "" ;
}
}
//echo "<br />";
$NOW = date ( "YmdHis" , $TIME ) ; /*
prepare data for templates/template
*/
/* prepare categories list for templates/template */
# Prepare categories sorting
if ( $SETTINGS [ 'catsorting' ] == 'alpha' )
{
$catsorting = " ORDER BY t.cat_name ASC" ;
} else
{
$catsorting = " ORDER BY sub_counter DESC" ;
}
$TPL_categories_value = "" ;
$query = "select distinct * from BPPENNYAUTOBID_categories c, BPPENNYAUTOBID_cats_translated t
WHERE c.parent_id=0
AND t.cat_id=c.cat_id
AND t.lang='" . $USERLANG . "'
$catsorting " ;
if ( ! $result )
{
MySQLError( $query ) ;
} else
{
$i = 0 ;
$TPL_categories_value = "<ul>\n " ;
while ( $i < $num_cat && $i < $SETTINGS [ 'catstoshow' ] )
{
$catlink = "" ;
if ( $sub_count != 0 )
$cat_counter = "(" . $sub_count . ")" ;
else
{
$cat_counter = "" ;
}
$cat_url = "./browse.php?id=$cat_id " ;
if ( $cat_image != "" )
{
$catlink = "<A HREF=\" $cat_url \" ><IMG SRC=\" $cat_image \" BORDER=0></a>" ;
}
#// Select the translated category name
$cat_name = @ mysql_result ( mysql_query ( "SELECT cat_name FROM BPPENNYAUTOBID_cats_translated WHERE cat_id=$cat_id AND lang='" . $USERLANG . "'" ) , 0 , "cat_name" ) ; $catlink .= "<A HREF=\" $cat_url \" >$cat_name </A>" . " $cat_counter " ;
if ( $cat_colour != "" )
{
$catlink = setsspan( $catlink , "background-color:$cat_colour " ) ;
}
$TPL_categories_value .= "<li>" . $catlink . "</li>\n " ;
$i ++;
}
$TPL_categories_value .= "</ul>\n " ;
$TPL_categories_value .= "<A HREF=\" browse.php?id=0\" >$MSG_277 </A>" ;
}
/********************************************************************************************/
//------------------------------------------------------------------------------
// prepare classic auctions values (get last created auctions)
$query = "SELECT id,title,starts, ends, pict_url, auction_type, item_value, minimum_bid, bid_value FROM BPPENNYAUTOBID_auctions WHERE closed='0' AND suspended=0 AND auction_type = 1 AND is_main_auction = 0 AND " ;
if ( $SETTINGS [ 'adultonly' ] == 'y' && ! isset ( $_SESSION [ "BPPENNYAUTOBID_LOGGED_IN" ] ) ) {
$query .= "adultonly='n' AND " ;
}
if ( $category_id != "" ) {
if ( subCategoriesList( $category_id ) != "" ) {
$query .= "(category = " . $category_id . " OR category IN (" . subCategoriesList( $category_id ) . ")) AND " ;
} else {
$query .= "category = " . $category_id . " AND " ;
}
}
$query .= "starts <= " . $NOW . " ORDER BY ends ASC LIMIT " . $SETTINGS [ 'lastitemsnumber' ] ;
if ( $result )
else
$num_auction = 0 ;
$i = 0 ;
$TPL_auctions_classic = array ( ) ;
while ( $i < $num_auction )
{
if ( $pict_url == "" )
{
$pict_url = 'no_image.png' ;
}
$minutes = substr ( $date , 10 , 2 ) ; $seconds = substr ( $date , 12 , 2 ) ; $sql = "SELECT MAX(bid) AS max_bid FROM BPPENNYAUTOBID_bids WHERE auction=" . $id ;
#// Check bold and highlighted options
$ISBOLD = FALSE ;
$ISHIGHLIGHTED = FALSE ;
$TPL_auctions_classic [ $i ] = array ( ) ; $TPL_auctions_classic [ $i ] [ "date_created" ] = $month . "/" . $day . "/" . $year . " " . $hours . ":" . $minutes . ":" . $seconds ;
$TPL_auctions_classic [ $i ] [ "remained_seconds" ] = strtotime ( $TPL_auctions_classic [ $i ] [ "date_created" ] ) - time ( ) ; //ArrangeDateNoCorrection($day,$month,$year,$hours,$minutes);
$TPL_auctions_classic [ $i ] [ "link_href" ] = "./item.php?id=" . $id . "&history=view#history" ;
$TPL_auctions_classic [ $i ] [ "pict_url" ] = $pict_url ;
$TPL_auctions_classic [ $i ] [ "item_value" ] = stripslashes ( $item_value ) ; $TPL_auctions_classic [ $i ] [ "bid_value" ] = stripslashes ( $bid_value ) ; $TPL_auctions_classic [ $i ] [ "next_bid" ] = get_next_bid( $id ) ;
$TPL_auctions_classic [ $i ] [ "winner" ] = get_winner_name( $id ) ;
$TPL_auctions_classic [ $i ] [ "current_bid" ] = mysql_result ( $result_bid , 0 , "max_bid" ) ; if ( $TPL_auctions_classic [ $i ] [ "current_bid" ] == "" ) {
$TPL_auctions_classic [ $i ] [ "current_bid" ] = $minimum_a_bid ;
}
$TPL_auctions_classic [ $i ] [ "auction_id" ] = $id ;
$i ++;
}
/********************************************************************************************/
//------------------------------------------------------------------------------
// prepare "more live auctions"
$query = "SELECT id,title,starts, ends, pict_url, auction_type, item_value, minimum_bid, bid_value FROM BPPENNYAUTOBID_auctions WHERE closed='0' AND suspended=0 AND auction_type = 1 AND is_main_auction = 0 AND " ;
if ( $SETTINGS [ 'adultonly' ] == 'y' && ! isset ( $_SESSION [ "BPPENNYAUTOBID_LOGGED_IN" ] ) ) {
$query .= "adultonly='n' AND " ;
}
if ( $category_id != "" ) {
if ( subCategoriesList( $category_id ) != "" ) {
$query .= "(category = " . $category_id . " OR category IN (" . subCategoriesList( $category_id ) . ")) AND " ;
} else {
$query .= "category = " . $category_id . " AND " ;
}
}
$query .= "starts <= " . $NOW . " ORDER BY ends ASC LIMIT " . ( $SETTINGS [ 'lastitemsnumber' ] ) . ",30" ;
if ( $result )
else
$num_auction1 = 0 ;
$i = 0 ;
$TPL_more_auctions = array ( ) ; while ( $i < $num_auction1 )
{
if ( $pict_url == "" )
{
$pict_url = 'no_image.png' ;
}
$minutes = substr ( $date , 10 , 2 ) ; $seconds = substr ( $date , 12 , 2 ) ; $sql = "SELECT MAX(bid) AS max_bid FROM BPPENNYAUTOBID_bids WHERE auction=" . $id ;
#// Check bold and highlighted options
$ISBOLD = FALSE ;
$ISHIGHLIGHTED = FALSE ;
$TPL_more_auctions [ $i ] = array ( ) ; $TPL_more_auctions [ $i ] [ "date_created" ] = $month . "/" . $day . "/" . $year . " " . $hours . ":" . $minutes . ":" . $seconds ;
$TPL_more_auctions [ $i ] [ "remained_seconds" ] = strtotime ( $TPL_more_auctions [ $i ] [ "date_created" ] ) - time ( ) ; //ArrangeDateNoCorrection($day,$month,$year,$hours,$minutes);
$TPL_more_auctions [ $i ] [ "link_href" ] = "./item.php?id=" . $id . "&history=view#history" ;
$TPL_more_auctions [ $i ] [ "pict_url" ] = $pict_url ;
$TPL_more_auctions [ $i ] [ "item_value" ] = stripslashes ( $item_value ) ; $TPL_more_auctions [ $i ] [ "bid_value" ] = stripslashes ( $bid_value ) ; $TPL_more_auctions [ $i ] [ "next_bid" ] = get_next_bid( $id ) ;
$TPL_more_auctions [ $i ] [ "winner" ] = get_winner_name( $id ) ;
$TPL_more_auctions [ $i ] [ "current_bid" ] = mysql_result ( $result_bid , 0 , "max_bid" ) ; $TPL_more_auctions [ $i ] [ "auction_id" ] = $id ;
if ( $TPL_more_auctions [ $i ] [ "current_bid" ] == "" ) {
$TPL_more_auctions [ $i ] [ "current_bid" ] = $minimum_a_bid ;
}
$i ++;
}
$open_auction_num = $num_auction + $num_auction1 ;
/****************************************************************************************/
/**
* NOTE: get higher bids
*/
$TPL_maximum_bids = "" ;
$query = "select auction,max(bid) AS max_bid
FROM BPPENNYAUTOBID_bids b, BPPENNYAUTOBID_auctions a WHERE a.suspended=0 AND a.closed=0 AND a.id=b.auction GROUP BY b.bid,b.auction ORDER BY max_bid desc" ;
if ( $result )
else
$num_auction = 0 ;
$i = 0 ;
$j = 0 ;
$bgcolor = "#FFFFFF" ;
while ( $i < $num_auction && $j < $SETTINGS [ 'higherbidsnumber' ] )
{
//-- Get auction data
$query = "SELECT title,closed,id from BPPENNYAUTOBID_auctions
WHERE id=\" $auction \" AND" ;
$query .= "'" . $NOW . "'>=starts" ;
//print $query;
{
}
if ( $closed == "0" && ! in_array ( $auction , $AU ) ) {
#// Check bold and highlighted options
$ISBOLD = FALSE ;
$ISHIGHLIGHTED = FALSE ;
$TPL_maximum_bids .= "
<p style=\" background-color:$bgcolor ;display:block\" ><A HREF=javascript:window_open('converter.php?AMOUNT=$max_bid ','incre',650,200,30,30)>" . print_money( $max_bid ) . " <A HREF=\" ./item.php?id=$auc_id \" >" ;
if ( $ISHIGHLIGHTED )
{
$TPL_maximum_bids .= "<SPAN CLASS=hg>" ;
}
if ( $ISBOLD )
{
$TPL_maximum_bids .= "<B>" ;
}
if ( $ISBOLD )
{
$TPL_maximum_bids .= "</B>" ;
}
if ( $ISHIGHLIGHTED )
{
$TPL_maximum_bids .= "</SPAN>" ;
}
$TPL_maximum_bids .= "</A></p>" ;
if ( $bgcolor == "#FFFFFF" )
{
$bgcolor = $FONTCOLOR [ $SETTINGS [ 'headercolor' ] ] ;
} else
{
$bgcolor = "#FFFFFF" ;
}
$AU [ ] = $auction ;
$j ++;
}
$i ++;
}
//-- Build news list
if ( ( $SETTINGS [ 'newsbox' ] == 1 ) && ! isset ( $_SESSION [ "BPPENNYAUTOBID_LOGGED_IN" ] ) ) {
$query = "SELECT title,id,new_date from BPPENNYAUTOBID_news where suspended=0 order by new_date DESC limit " . $SETTINGS [ 'newstoshow' ] ;
if ( ! $res )
{
MySQLError( $query ) ;
}
$TPL_news_list = "" ;
{
$TPL_news_list .= "<div class='newsfont'>" ;
$new [ 'title' ] = $TR [ 'title' ] ;
$new [ 'content' ] = $TR [ 'content' ] ;
$new_date = $new [ 'new_date' ] ;
$F_date = FormatDate( $new_date ) ;
$TPL_news_list .= "<div class='newstital'>
<div class='icone'><img src='" . $SETTINGS [ 'siteurl' ] . "themes/mytheme/img/icone.png' width='11' height='12' align='absmiddle' /></div>
<div class='image'><a href='viewnew.php?id=" . $new [ 'id' ] . "' class='newstitle'>" . $new [ 'title' ] . "</a></div>
</div>" ;
$TPL_news_list .= $F_date . " - " . substr ( $new [ 'content' ] , 0 , 90 ) . "... <a href='viewnew.php?id=" . $new [ 'id' ] . "' class='linkmore'>More</a>" ; $TPL_news_list .= "</div>" ;
$TPL_news_list .= "<div class='image'><img src='" . $SETTINGS [ 'siteurl' ] . "themes/mytheme/img/line.png' /></div>" ;
}
} else
{
$TPL_news_list = " " ;
}
$TPL_news_list .= " <a href='viewallnews.php'>" . $MSG_31_0046 . "</a>" ;
//-- Build closed auctions list
$query = "SELECT DISTINCT
a.title, a.id, a.pict_url,
w.bid, w.winner, a.ends AS closingdate,
w.bid,
u.nick
FROM BPPENNYAUTOBID_auctions a
LEFT OUTER JOIN BPPENNYAUTOBID_winners w ON a.id = w.auction
LEFT OUTER JOIN BPPENNYAUTOBID_users u ON w.winner = u.id
WHERE
auction_type = '1' AND closed = '1'
ORDER BY ends DESC limit 0, 7" ;
if ( ! $res )
{
//MySQLError($query);
//exit;
}
$TPL_closed_auctions_list = "" ;
{
$title = ( ( strlen ( $row [ 'title' ] ) > 12 ) ?
substr ( $row [ 'title' ] , 0 , 12 ) . "..." : $row [ 'title' ] ) ; $closed_date = $row [ 'closingdate' ] ;
$pict_url = $row [ 'pict_url' ] ;
if ( $pict_url == "" )
{
$pict_url = 'no_image.png' ;
}
$winner = ( $row [ 'winner' ] != "" ) ? " Winner: " . $row [ 'nick' ] : "" ;
$bid = ( $row [ 'bid' ] != "" ) ? " Won bid: " . $row [ 'bid' ] : "" ;
$F_date = FormatDate( $closed_date ) ;
$TPL_closed_auctions_list .= "<div class='newsfont'>" ;
$TPL_closed_auctions_list .= "<table><tr>" ;
$TPL_closed_auctions_list .= "<td><a href=\" item.php?id=" . $row [ 'id' ] . "\" >" . $title . "</a></td>" ;
$TPL_closed_auctions_list .= "<td>" . $F_date . "</td>" ;
$TPL_closed_auctions_list .= "</tr>" ;
$TPL_closed_auctions_list .= "<tr>" ;
if ( $row [ 'pict_url' ] != "" ) {
$TPL_closed_auctions_list .= "<td><a href=\" item.php?id=" . $row [ 'id' ] . "\" title='" . $row [ 'title' ] . "' ><img alt='" . $row [ 'title' ] . "' border='0' width='60px' height='60px' src='" . $SETTINGS [ 'siteurl' ] . "uploaded/" . $row [ "pict_url" ] . "' style='filter:alpha(opacity=100);-moz-opacity:1.0; cursor:pointer; border:1px solid #cdcdcd;' onmouseover='makevisible(this,1)' onmouseout='makevisible(this,0)' /></a></td>" ;
} else {
$TPL_closed_auctions_list .= "<td><a href=\" item.php?id=" . $row [ 'id' ] . "\" title='" . $row [ 'title' ] . "' ><img alt='" . $row [ 'title' ] . "' border='0' width='60px' height='60px' src='" . $SETTINGS [ 'siteurl' ] . "images/no-image.jpg' style='filter:alpha(opacity=100);-moz-opacity:1.0; cursor:pointer; border:1px solid #cdcdcd;' onmouseover='makevisible(this,1)' onmouseout='makevisible(this,0)' /></a></td>" ;
}
$TPL_closed_auctions_list .= "<td>" ;
$TPL_closed_auctions_list .= $MSG_40_020 . " <font style='color:#FF9900'><br /><b> " . print_money( $row [ 'bid' ] , 2 , '.' , ' ' ) . "</b></font><br>" ;
$TPL_closed_auctions_list .= $MSG_40_021 . " <font style='color:#777777'><br /><b>" . $row [ 'nick' ] . "</b></font><br>" ;
$TPL_closed_auctions_list .= "<td>" ;
$TPL_closed_auctions_list .= "</tr></table>" ;
$TPL_closed_auctions_list .= "</div>" ;
}
$TPL_closed_auctions_list .= "<div class='image'><img src='" . $SETTINGS [ 'siteurl' ] . "themes/mytheme/img/line.png' /></div>" ;
$TPL_closed_auctions_list .= " <a href='viewallclosedauctions.php'>" . $MSG_31_0046 . "</a>" ;
require_once ( phpa_include( "template_index_php.html" ) ) ;
require_once ( './footer.php' ) ;
}
?>
PD8gIy8vdi4zLjIuMQojLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwppZiAoIWZpbGVfZXhpc3RzKCJpbmNsdWRlcy9wYXNzd2QuaW5jLnBocCIpKSB7CgllY2hvICI8c2NyaXB0PmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9J2luc3RhbGwucGhwJzwvc2NyaXB0PiI7Cgl9IGVsc2UgewojLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKcmVxdWlyZV9vbmNlICgnLi9pbmNsdWRlcy9jb25maWcuaW5jLnBocCcpOwoKIy8vIFJ1biBjcm9uIGFjY29yZGluZyB0byBTRVRUSU5HUwppZigkU0VUVElOR1NbJ2Nyb24nXSA9PSAyKQp7CglpbmNsdWRlX29uY2UgImNyb24ucGhwIjsKfQpyZXF1aXJlX29uY2UgKCIuL2hlYWRlci5waHAiKTsKCmZ1bmN0aW9uIGdldF9uZXh0X2JpZCgkYXVjdGlvbl9pZCkgewoJCglpZiAoaW50dmFsKCRhdWN0aW9uX2lkKT4wKSB7CgkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIEJQUEVOTllBVVRPQklEX2F1Y3Rpb25zIFdIRVJFIGlkPSIgLiBpbnR2YWwoJGF1Y3Rpb25faWQpKTsKCQkkcmVzdWx0X2JpZHMgPSBteXNxbF9xdWVyeSgic2VsZWN0IG1heChiaWQpIEFTIG1heGJpZCwgYmlkZGVyIEZST00gQlBQRU5OWUFVVE9CSURfYmlkcyBXSEVSRSBhdWN0aW9uPSIgLiBpbnR2YWwoJGF1Y3Rpb25faWQpIC4gIiBHUk9VUCBCWSBhdWN0aW9uLCBiaWRkZXIgT1JERVIgQlkgbWF4YmlkIERFU0MiKTsKCgkJJGN1c3RvbWluY3JlbWVudCA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAwLCAiaW5jcmVtZW50Iik7CgkJJG1heF9iaWQgPSBteXNxbF9yZXN1bHQoJHJlc3VsdF9iaWRzLCAwLCAibWF4YmlkIik7CgkJJG1pbmltdW1fYmlkID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsIDAsICJtaW5pbXVtX2JpZCIpOwoJCWlmKCRtYXhfYmlkID09IDApIHsKCQkJJE1BWF9CSUQgPSAkbWluaW11bV9iaWQ7CgkJCS8vLy8gQWRkZWQgYnkgWW9zaSAyMiBKdWwgMjAwOSAtIGNvbnNpZGVyIGlmIGF1Y3Rpb24gc3RhcnRzIHdpdGggc29tZSB2YWx1ZQoJCQkkbWF4X2JpZCA9ICRtaW5pbXVtX2JpZDsKCQl9ZWxzZQoJCXsKCQkJJE1BWF9CSUQgPSAkbWF4X2JpZDsKCQl9CgkJLyogR2V0IGJpZCBpbmNyZW1lbnQgZm9yIGN1cnJlbnQgYmlkIGFuZCBjYWxjdWxhdGUgbWluaW11bSBiaWQgKi8KCQkKCQkkcXVlcnkgPSAiU0VMRUNUIGluY3JlbWVudCBGUk9NIEJQUEVOTllBVVRPQklEX2luY3JlbWVudHMgV0hFUkUgIiAuICIoKGxvdyA8PSAkTUFYX0JJRCBBTkQgaGlnaCA+PSAkTUFYX0JJRCkgT1IgIiAuICIobG93IDwgJE1BWF9CSUQgQU5EIGhpZ2ggPCAkTUFYX0JJRCkpIE9SREVSIEJZIGluY3JlbWVudCBERVNDIjsKCQkKCQkvL2VjaG8gIjxkaXYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPnNxbDo8YnI+IjsKCQkvL2VjaG8gIiRxdWVyeTwvZGl2PiI7CgkJCgkJJHJlc3VsdF9pbmNyID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCQlpZihteXNxbF9udW1fcm93cygkcmVzdWx0X2luY3IpICE9IDApCgkJewoJCQkkaW5jcmVtZW50ID0gbXlzcWxfcmVzdWx0KCRyZXN1bHRfaW5jciwgMCwgImluY3JlbWVudCIpOwoJCX0KCQlpZigkY3VzdG9taW5jcmVtZW50ID4gMCkKCQl7CQoJCQkkaW5jcmVtZW50ID0gJGN1c3RvbWluY3JlbWVudDsKCQl9CgkJCgkJaWYoJG1heF9iaWQgPT0gMCB8fCAkYXR5cGUgPT0gMikKCQl7CgkJCSRuZXh0X2JpZCA9ICRtaW5pbXVtX2JpZDsKCQl9ZWxzZQoJCXsJCgkJCSRuZXh0X2JpZCA9ICRtYXhfYmlkICsgJGluY3JlbWVudDsKCQl9CgkJcmV0dXJuICRuZXh0X2JpZDsKCX0gZWxzZSB7CgkJcmV0dXJuIDA7Cgl9Cn0KZnVuY3Rpb24gZ2V0X3dpbm5lcl9uYW1lKCRhdWN0aW9uX2lkKSB7Cgkkc3FsID0gIlNFTEVDVCBiLmJpZCwgYi5iaWRkZXIsIENPVU5UKGJpZCkgQVMgYmlkX2NvdW50LHUubmljawoJCSAgRlJPTSBCUFBFTk5ZQVVUT0JJRF9iaWRzIGIKCQkgIElOTkVSIEpPSU4gQlBQRU5OWUFVVE9CSURfdXNlcnMgdSBPTiBiLmJpZGRlcj11LmlkCgkJICBXSEVSRSBiLmF1Y3Rpb249Ii4kYXVjdGlvbl9pZC4iIEdST1VQIEJZIGIuYmlkIE9SREVSIEJZIGIuYmlkIERFU0MgIjsKCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsKTsKCWlmICgkcm93MT1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgewoJCXJldHVybiAkcm93MVsnbmljayddOwoJfSBlbHNlIHsKCQlyZXR1cm4gIiI7Cgl9Cn0KCiRUSU1FID0gbWt0aW1lKGRhdGUoIkgiKSArICRTRVRUSU5HU1sndGltZWNvcnJlY3Rpb24nXSwgZGF0ZSgiaSIpLCBkYXRlKCJzIiksIGRhdGUoIm0iKSwgZGF0ZSgiZCIpLCBkYXRlKCJZIikpOwovL2VjaG8gIjxiciAvPiI7CiROT1cgPSBkYXRlKCJZbWRIaXMiLCAkVElNRSk7Ci8qCnByZXBhcmUgZGF0YSBmb3IgdGVtcGxhdGVzL3RlbXBsYXRlCiovCi8qIHByZXBhcmUgY2F0ZWdvcmllcyBsaXN0IGZvciB0ZW1wbGF0ZXMvdGVtcGxhdGUgKi8KIyBQcmVwYXJlIGNhdGVnb3JpZXMgc29ydGluZwppZigkU0VUVElOR1NbJ2NhdHNvcnRpbmcnXSA9PSAnYWxwaGEnKQp7CgkkY2F0c29ydGluZyA9ICIgT1JERVIgQlkgdC5jYXRfbmFtZSBBU0MiOwp9ZWxzZQp7CgkkY2F0c29ydGluZyA9ICIgT1JERVIgQlkgc3ViX2NvdW50ZXIgREVTQyI7Cn0KJFRQTF9jYXRlZ29yaWVzX3ZhbHVlID0gIiI7CiRxdWVyeSA9ICJzZWxlY3QgZGlzdGluY3QgKiBmcm9tIEJQUEVOTllBVVRPQklEX2NhdGVnb3JpZXMgYywgQlBQRU5OWUFVVE9CSURfY2F0c190cmFuc2xhdGVkIHQgCiAgICAgICAgICBXSEVSRSBjLnBhcmVudF9pZD0wCiAgICAgICAgICBBTkQgdC5jYXRfaWQ9Yy5jYXRfaWQKICAgICAgICAgIEFORCB0Lmxhbmc9JyIgLiAkVVNFUkxBTkcgLiAiJyAgCiAgICAgICAgICAkY2F0c29ydGluZyI7CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOwppZighJHJlc3VsdCkKewoJTXlTUUxFcnJvcigkcXVlcnkpOwoJZXhpdCgpOwp9ZWxzZQp7CgkkbnVtX2NhdCA9IG15c3FsX251bV9yb3dzKCRyZXN1bHQpOwoJJGkgPSAwOwoJJFRQTF9jYXRlZ29yaWVzX3ZhbHVlID0gIjx1bD5cbiI7Cgl3aGlsZSgkaSA8ICRudW1fY2F0ICYmICRpIDwgJFNFVFRJTkdTWydjYXRzdG9zaG93J10pCgl7CgkJJGNhdGxpbmsgPSAiIjsKCQkkY2F0X2lkID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAiY2F0X2lkIik7CgkJJGNhdF9uYW1lID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAiY2F0X25hbWUiKTsKCQkkc3ViX2NvdW50ID0gaW50dmFsKG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgInN1Yl9jb3VudGVyIikpOwoJCSRjYXRfY29sb3VyID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAiY2F0X2NvbG91ciIpOwoJCSRjYXRfaW1hZ2UgPSBteXNxbF9yZXN1bHQoJHJlc3VsdCwgJGksICJjYXRfaW1hZ2UiKTsKCQkkY2F0X2NvdW50ZXIgPSAoaW50KW15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgImNvdW50ZXIiKTsKCQlpZigkc3ViX2NvdW50ICE9IDApCgkJCSRjYXRfY291bnRlciA9ICIoIiAuICRzdWJfY291bnQgLiAiKSI7CgkJZWxzZQoJCXsKCQkJJGNhdF9jb3VudGVyID0gIiI7CgkJfQoJCSRjYXRfdXJsID0gIi4vYnJvd3NlLnBocD9pZD0kY2F0X2lkIjsKCQlpZigkY2F0X2ltYWdlICE9ICIiKQoJCXsKCQkJJGNhdGxpbmsgPSAiPEEgSFJFRj1cIiRjYXRfdXJsXCI+PElNRyBTUkM9XCIkY2F0X2ltYWdlXCIgQk9SREVSPTA+PC9hPiI7CgkJfQoJCSMvLyAgU2VsZWN0IHRoZSB0cmFuc2xhdGVkIGNhdGVnb3J5IG5hbWUKCQkkY2F0X25hbWUgPSBAbXlzcWxfcmVzdWx0KG15c3FsX3F1ZXJ5KCJTRUxFQ1QgY2F0X25hbWUgRlJPTSBCUFBFTk5ZQVVUT0JJRF9jYXRzX3RyYW5zbGF0ZWQgV0hFUkUgY2F0X2lkPSRjYXRfaWQgQU5EIGxhbmc9JyIgLiAkVVNFUkxBTkcgLiAiJyIpLCAwLCAiY2F0X25hbWUiKTsKCQkkY2F0bGluayAuPSAiPEEgSFJFRj1cIiRjYXRfdXJsXCI+JGNhdF9uYW1lPC9BPiIgLiAiICRjYXRfY291bnRlciI7CgkJaWYoJGNhdF9jb2xvdXIgIT0gIiIpCgkJewoJCQkkY2F0bGluayA9IHNldHNzcGFuKCRjYXRsaW5rLCAiYmFja2dyb3VuZC1jb2xvcjokY2F0X2NvbG91ciIpOwoJCX0KCQkkVFBMX2NhdGVnb3JpZXNfdmFsdWUgLj0gIjxsaT4iIC4gJGNhdGxpbmsgLiAiPC9saT5cbiI7CgkJJGkrKzsKCX0KCSRUUExfY2F0ZWdvcmllc192YWx1ZSAuPSAiPC91bD5cbiI7CgkkVFBMX2NhdGVnb3JpZXNfdmFsdWUgLj0gIjxBIEhSRUY9XCJicm93c2UucGhwP2lkPTBcIj4kTVNHXzI3NzwvQT4iOwp9CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gcHJlcGFyZSBjbGFzc2ljIGF1Y3Rpb25zIHZhbHVlcyAoZ2V0IGxhc3QgY3JlYXRlZCBhdWN0aW9ucykKCiRxdWVyeSA9ICJTRUxFQ1QgaWQsdGl0bGUsc3RhcnRzLCBlbmRzLCBwaWN0X3VybCwgYXVjdGlvbl90eXBlLCBpdGVtX3ZhbHVlLCBtaW5pbXVtX2JpZCwgYmlkX3ZhbHVlIEZST00gQlBQRU5OWUFVVE9CSURfYXVjdGlvbnMgV0hFUkUgY2xvc2VkPScwJyBBTkQgc3VzcGVuZGVkPTAgQU5EIGF1Y3Rpb25fdHlwZSA9IDEgQU5EIGlzX21haW5fYXVjdGlvbiA9IDAgQU5EICI7CmlmKCRTRVRUSU5HU1snYWR1bHRvbmx5J10gPT0gJ3knICYmICFpc3NldCgkX1NFU1NJT05bIkJQUEVOTllBVVRPQklEX0xPR0dFRF9JTiJdKSkKewoJJHF1ZXJ5IC49ICJhZHVsdG9ubHk9J24nIEFORCAiOwp9CmlmKCRjYXRlZ29yeV9pZCAhPSAiIil7CiAgICBpZiAoc3ViQ2F0ZWdvcmllc0xpc3QoJGNhdGVnb3J5X2lkKSAhPSIiKSB7CgkJJHF1ZXJ5IC49ICIoY2F0ZWdvcnkgPSAiLiRjYXRlZ29yeV9pZC4iIE9SIGNhdGVnb3J5IElOICgiLnN1YkNhdGVnb3JpZXNMaXN0KCRjYXRlZ29yeV9pZCkuIikpIEFORCAiOwogICAgfSBlbHNlIHsKICAgIAkkcXVlcnkgLj0gImNhdGVnb3J5ID0gIi4kY2F0ZWdvcnlfaWQuIiAgQU5EICI7CiAgICB9Cn0KJHF1ZXJ5IC49ICJzdGFydHMgPD0gIiAuICROT1cgLiAiIE9SREVSIEJZIGVuZHMgQVNDIExJTUlUICIgLiAkU0VUVElOR1NbJ2xhc3RpdGVtc251bWJlciddOwoKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgoKaWYoJHJlc3VsdCkKCSRudW1fYXVjdGlvbiA9IG15c3FsX251bV9yb3dzKCRyZXN1bHQpOwplbHNlCgkkbnVtX2F1Y3Rpb24gPSAwOwokaSA9IDA7CiRUUExfYXVjdGlvbnNfY2xhc3NpYyA9IGFycmF5KCk7CiAKd2hpbGUoJGkgPCAkbnVtX2F1Y3Rpb24pCnsKCgoJJHRpdGxlID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAidGl0bGUiKTsKCSRpZCA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgImlkIik7CgkkZGF0ZSA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgImVuZHMiKTsKCSRwaWN0X3VybCA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgInBpY3RfdXJsIik7CglpZigkcGljdF91cmwgPT0gIiIpCgl7CgkJJHBpY3RfdXJsID0gJ25vX2ltYWdlLnBuZyc7Cgl9CgkkYXVjdGlvbl90eXBlID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAiYXVjdGlvbl90eXBlIik7CgkkaXRlbV92YWx1ZSA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgIml0ZW1fdmFsdWUiKTsKCSRiaWRfdmFsdWUgPSBteXNxbF9yZXN1bHQoJHJlc3VsdCwgJGksICJiaWRfdmFsdWUiKTsKCSR5ZWFyID0gc3Vic3RyKCRkYXRlLCAwLCA0KTsKCSRtb250aCA9IHN1YnN0cigkZGF0ZSwgNCwgMik7CgkkZGF5ID0gc3Vic3RyKCRkYXRlLCA2LCAyKTsKCSRob3VycyA9IHN1YnN0cigkZGF0ZSwgOCwgMik7CgkkbWludXRlcyA9IHN1YnN0cigkZGF0ZSwgMTAsIDIpOwoJJHNlY29uZHMgPSBzdWJzdHIoJGRhdGUsIDEyLCAyKTsKCSRtaW5pbXVtX2FfYmlkID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAibWluaW11bV9iaWQiKTsKCSRzcWw9IlNFTEVDVCBNQVgoYmlkKSBBUyBtYXhfYmlkIEZST00gQlBQRU5OWUFVVE9CSURfYmlkcyBXSEVSRSBhdWN0aW9uPSIuJGlkOwoJJHJlc3VsdF9iaWQgPSBteXNxbF9xdWVyeSgkc3FsKTsKCQoJIy8vIENoZWNrIGJvbGQgYW5kIGhpZ2hsaWdodGVkIG9wdGlvbnMKCSRJU0JPTEQgPSBGQUxTRTsKCSRJU0hJR0hMSUdIVEVEID0gRkFMU0U7CgkkVFBMX2F1Y3Rpb25zX2NsYXNzaWNbJGldID0gYXJyYXkoKTsKCSRUUExfYXVjdGlvbnNfY2xhc3NpY1skaV1bImRhdGVfY3JlYXRlZCJdID0gJG1vbnRoIC4gIi8iIC4gJGRheSAuICIvIiAuICR5ZWFyIC4gIiAiIC4gJGhvdXJzIC4gIjoiIC4gJG1pbnV0ZXMgLiAiOiIgLiAkc2Vjb25kczsKCSRUUExfYXVjdGlvbnNfY2xhc3NpY1skaV1bInJlbWFpbmVkX3NlY29uZHMiXT1zdHJ0b3RpbWUoJFRQTF9hdWN0aW9uc19jbGFzc2ljWyRpXVsiZGF0ZV9jcmVhdGVkIl0pLXRpbWUoKTsKCS8vQXJyYW5nZURhdGVOb0NvcnJlY3Rpb24oJGRheSwkbW9udGgsJHllYXIsJGhvdXJzLCRtaW51dGVzKTsKCSRUUExfYXVjdGlvbnNfY2xhc3NpY1skaV1bIm5hbWUiXSA9IHN0cmlwc2xhc2hlcygkdGl0bGUpOwoJJFRQTF9hdWN0aW9uc19jbGFzc2ljWyRpXVsibGlua19ocmVmIl0gPSAiLi9pdGVtLnBocD9pZD0iLiRpZC4iJmhpc3Rvcnk9dmlldyNoaXN0b3J5IjsKCSRUUExfYXVjdGlvbnNfY2xhc3NpY1skaV1bInBpY3RfdXJsIl0gPSAkcGljdF91cmw7CgkkVFBMX2F1Y3Rpb25zX2NsYXNzaWNbJGldWyJpdGVtX3ZhbHVlIl0gPSBzdHJpcHNsYXNoZXMoJGl0ZW1fdmFsdWUpOwoJJFRQTF9hdWN0aW9uc19jbGFzc2ljWyRpXVsiYmlkX3ZhbHVlIl0gPSBzdHJpcHNsYXNoZXMoJGJpZF92YWx1ZSk7CgkkVFBMX2F1Y3Rpb25zX2NsYXNzaWNbJGldWyJuZXh0X2JpZCJdPWdldF9uZXh0X2JpZCgkaWQpOwoJJFRQTF9hdWN0aW9uc19jbGFzc2ljWyRpXVsid2lubmVyIl09Z2V0X3dpbm5lcl9uYW1lKCRpZCk7CgkkVFBMX2F1Y3Rpb25zX2NsYXNzaWNbJGldWyJjdXJyZW50X2JpZCJdPW15c3FsX3Jlc3VsdCgkcmVzdWx0X2JpZCwgMCwgIm1heF9iaWQiKTsKCWlmICgkVFBMX2F1Y3Rpb25zX2NsYXNzaWNbJGldWyJjdXJyZW50X2JpZCJdPT0iIikgewoJCSRUUExfYXVjdGlvbnNfY2xhc3NpY1skaV1bImN1cnJlbnRfYmlkIl09JG1pbmltdW1fYV9iaWQ7Cgl9CgkkVFBMX2F1Y3Rpb25zX2NsYXNzaWNbJGldWyJhdWN0aW9uX2lkIl0gPSAkaWQ7CgkkaSsrOwp9CgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHByZXBhcmUgIm1vcmUgbGl2ZSBhdWN0aW9ucyIKJHF1ZXJ5ID0gIlNFTEVDVCBpZCx0aXRsZSxzdGFydHMsIGVuZHMsIHBpY3RfdXJsLCBhdWN0aW9uX3R5cGUsIGl0ZW1fdmFsdWUsIG1pbmltdW1fYmlkLCBiaWRfdmFsdWUgRlJPTSBCUFBFTk5ZQVVUT0JJRF9hdWN0aW9ucyBXSEVSRSBjbG9zZWQ9JzAnIEFORCBzdXNwZW5kZWQ9MCBBTkQgYXVjdGlvbl90eXBlID0gMSBBTkQgaXNfbWFpbl9hdWN0aW9uID0gMCBBTkQgIjsKaWYoJFNFVFRJTkdTWydhZHVsdG9ubHknXSA9PSAneScgJiYgIWlzc2V0KCRfU0VTU0lPTlsiQlBQRU5OWUFVVE9CSURfTE9HR0VEX0lOIl0pKQp7CgkkcXVlcnkgLj0gImFkdWx0b25seT0nbicgQU5EICI7Cn0KaWYoJGNhdGVnb3J5X2lkICE9ICIiKXsKICAgIGlmIChzdWJDYXRlZ29yaWVzTGlzdCgkY2F0ZWdvcnlfaWQpICE9IiIpIHsKCQkkcXVlcnkgLj0gIihjYXRlZ29yeSA9ICIuJGNhdGVnb3J5X2lkLiIgT1IgY2F0ZWdvcnkgSU4gKCIuc3ViQ2F0ZWdvcmllc0xpc3QoJGNhdGVnb3J5X2lkKS4iKSkgQU5EICI7CiAgICB9IGVsc2UgewogICAgCSRxdWVyeSAuPSAiY2F0ZWdvcnkgPSAiLiRjYXRlZ29yeV9pZC4iICBBTkQgIjsKICAgIH0KfQoKJHF1ZXJ5IC49ICJzdGFydHMgPD0gIiAuICROT1cgLiAiIE9SREVSIEJZIGVuZHMgQVNDIExJTUlUICIgLiAoJFNFVFRJTkdTWydsYXN0aXRlbXNudW1iZXInXSkuIiwzMCI7CgokcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCgppZigkcmVzdWx0KQoJJG51bV9hdWN0aW9uMSA9IG15c3FsX251bV9yb3dzKCRyZXN1bHQpOwplbHNlCgkkbnVtX2F1Y3Rpb24xID0gMDsKJGkgPSAwOwokVFBMX21vcmVfYXVjdGlvbnMgPSBhcnJheSgpOwp3aGlsZSgkaSA8ICRudW1fYXVjdGlvbjEpCnsKCgoJJHRpdGxlID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAidGl0bGUiKTsKCSRpZCA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgImlkIik7CgkkZGF0ZSA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgImVuZHMiKTsKCSRwaWN0X3VybCA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgInBpY3RfdXJsIik7CglpZigkcGljdF91cmwgPT0gIiIpCgl7CgkJJHBpY3RfdXJsID0gJ25vX2ltYWdlLnBuZyc7Cgl9CgkkYXVjdGlvbl90eXBlID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAiYXVjdGlvbl90eXBlIik7CgkkaXRlbV92YWx1ZSA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgIml0ZW1fdmFsdWUiKTsKCSRiaWRfdmFsdWUgPSBteXNxbF9yZXN1bHQoJHJlc3VsdCwgJGksICJiaWRfdmFsdWUiKTsKCSR5ZWFyID0gc3Vic3RyKCRkYXRlLCAwLCA0KTsKCSRtb250aCA9IHN1YnN0cigkZGF0ZSwgNCwgMik7CgkkZGF5ID0gc3Vic3RyKCRkYXRlLCA2LCAyKTsKCSRob3VycyA9IHN1YnN0cigkZGF0ZSwgOCwgMik7CgkkbWludXRlcyA9IHN1YnN0cigkZGF0ZSwgMTAsIDIpOwoJJHNlY29uZHMgPSBzdWJzdHIoJGRhdGUsIDEyLCAyKTsKCSRtaW5pbXVtX2FfYmlkID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAibWluaW11bV9iaWQiKTsKCSRzcWw9IlNFTEVDVCBNQVgoYmlkKSBBUyBtYXhfYmlkIEZST00gQlBQRU5OWUFVVE9CSURfYmlkcyBXSEVSRSBhdWN0aW9uPSIuJGlkOwoJJHJlc3VsdF9iaWQgPSBteXNxbF9xdWVyeSgkc3FsKTsKCQoJIy8vIENoZWNrIGJvbGQgYW5kIGhpZ2hsaWdodGVkIG9wdGlvbnMKCSRJU0JPTEQgPSBGQUxTRTsKCSRJU0hJR0hMSUdIVEVEID0gRkFMU0U7CgkkVFBMX21vcmVfYXVjdGlvbnNbJGldID0gYXJyYXkoKTsKCSRUUExfbW9yZV9hdWN0aW9uc1skaV1bImRhdGVfY3JlYXRlZCJdID0gJG1vbnRoIC4gIi8iIC4gJGRheSAuICIvIiAuICR5ZWFyIC4gIiAiIC4gJGhvdXJzIC4gIjoiIC4gJG1pbnV0ZXMgLiAiOiIgLiAkc2Vjb25kczsKCSRUUExfbW9yZV9hdWN0aW9uc1skaV1bInJlbWFpbmVkX3NlY29uZHMiXT1zdHJ0b3RpbWUoJFRQTF9tb3JlX2F1Y3Rpb25zWyRpXVsiZGF0ZV9jcmVhdGVkIl0pLXRpbWUoKTsKCS8vQXJyYW5nZURhdGVOb0NvcnJlY3Rpb24oJGRheSwkbW9udGgsJHllYXIsJGhvdXJzLCRtaW51dGVzKTsKCSRUUExfbW9yZV9hdWN0aW9uc1skaV1bIm5hbWUiXSA9IHN0cmlwc2xhc2hlcygkdGl0bGUpOwoJJFRQTF9tb3JlX2F1Y3Rpb25zWyRpXVsibGlua19ocmVmIl0gPSAiLi9pdGVtLnBocD9pZD0iLiRpZC4iJmhpc3Rvcnk9dmlldyNoaXN0b3J5IjsKCSRUUExfbW9yZV9hdWN0aW9uc1skaV1bInBpY3RfdXJsIl0gPSAkcGljdF91cmw7CgkkVFBMX21vcmVfYXVjdGlvbnNbJGldWyJpdGVtX3ZhbHVlIl0gPSBzdHJpcHNsYXNoZXMoJGl0ZW1fdmFsdWUpOwoJJFRQTF9tb3JlX2F1Y3Rpb25zWyRpXVsiYmlkX3ZhbHVlIl0gPSBzdHJpcHNsYXNoZXMoJGJpZF92YWx1ZSk7CgkkVFBMX21vcmVfYXVjdGlvbnNbJGldWyJuZXh0X2JpZCJdPWdldF9uZXh0X2JpZCgkaWQpOwoJJFRQTF9tb3JlX2F1Y3Rpb25zWyRpXVsid2lubmVyIl09Z2V0X3dpbm5lcl9uYW1lKCRpZCk7CgkkVFBMX21vcmVfYXVjdGlvbnNbJGldWyJjdXJyZW50X2JpZCJdPW15c3FsX3Jlc3VsdCgkcmVzdWx0X2JpZCwgMCwgIm1heF9iaWQiKTsKCSRUUExfbW9yZV9hdWN0aW9uc1skaV1bImF1Y3Rpb25faWQiXSA9ICRpZDsKCWlmICgkVFBMX21vcmVfYXVjdGlvbnNbJGldWyJjdXJyZW50X2JpZCJdPT0iIikgewoJCSRUUExfbW9yZV9hdWN0aW9uc1skaV1bImN1cnJlbnRfYmlkIl09JG1pbmltdW1fYV9iaWQ7Cgl9CgkkaSsrOwp9Cgokb3Blbl9hdWN0aW9uX251bT0kbnVtX2F1Y3Rpb24rJG51bV9hdWN0aW9uMTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioKICogTk9URTogZ2V0IGhpZ2hlciBiaWRzCiAqLwokVFBMX21heGltdW1fYmlkcyA9ICIiOwokcXVlcnkgPSAic2VsZWN0IGF1Y3Rpb24sbWF4KGJpZCkgQVMgbWF4X2JpZAogICAgICAgICBGUk9NIEJQUEVOTllBVVRPQklEX2JpZHMgYiwgQlBQRU5OWUFVVE9CSURfYXVjdGlvbnMgYSBXSEVSRSBhLnN1c3BlbmRlZD0wIEFORCBhLmNsb3NlZD0wIEFORCBhLmlkPWIuYXVjdGlvbiBHUk9VUCBCWSBiLmJpZCxiLmF1Y3Rpb24gT1JERVIgQlkgbWF4X2JpZCBkZXNjIjsKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CmlmKCRyZXN1bHQpCgkkbnVtX2F1Y3Rpb24gPSBteXNxbF9udW1fcm93cygkcmVzdWx0KTsKZWxzZQoJJG51bV9hdWN0aW9uID0gMDsKJGkgPSAwOwokaiA9IDA7CiRiZ2NvbG9yID0gIiNGRkZGRkYiOwokQVUgPSBhcnJheSgpOwp3aGlsZSgkaSA8ICRudW1fYXVjdGlvbiAmJiAkaiA8ICRTRVRUSU5HU1snaGlnaGVyYmlkc251bWJlciddKQp7CgkkbWF4X2JpZCA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkaSwgIm1heF9iaWQiKTsKCSRhdWN0aW9uID0gbXlzcWxfcmVzdWx0KCRyZXN1bHQsICRpLCAiYXVjdGlvbiIpOwoJLy8tLSBHZXQgYXVjdGlvbiBkYXRhCgkkcXVlcnkgPSAiU0VMRUNUIHRpdGxlLGNsb3NlZCxpZCBmcm9tIEJQUEVOTllBVVRPQklEX2F1Y3Rpb25zCgkgICAgICAgICBXSEVSRSBpZD1cIiRhdWN0aW9uXCIgQU5EIjsKCSRxdWVyeSAuPSAiJyIgLiAkTk9XIC4gIic+PXN0YXJ0cyI7CgkvL3ByaW50ICRxdWVyeTsKCSRyZXN1bHRfYmlkID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCWlmKG15c3FsX251bV9yb3dzKCRyZXN1bHRfYmlkKSA+IDApCgl7CgkJJHRpdGxlID0gbXlzcWxfcmVzdWx0KCRyZXN1bHRfYmlkLCAwLCAidGl0bGUiKTsKCQkkY2xvc2VkID0gbXlzcWxfcmVzdWx0KCRyZXN1bHRfYmlkLCAwLCAiY2xvc2VkIik7CgkJJGF1Y19pZCA9IG15c3FsX3Jlc3VsdCgkcmVzdWx0X2JpZCwgMCwgImlkIik7Cgl9CglpZigkY2xvc2VkID09ICIwIiAmJiAhaW5fYXJyYXkoJGF1Y3Rpb24sICRBVSkpCgl7CgkJIy8vIENoZWNrIGJvbGQgYW5kIGhpZ2hsaWdodGVkIG9wdGlvbnMKCQkkSVNCT0xEID0gRkFMU0U7CgkJJElTSElHSExJR0hURUQgPSBGQUxTRTsKCQkkVFBMX21heGltdW1fYmlkcyAuPSAiCgkJICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6JGJnY29sb3I7ZGlzcGxheTpibG9ja1wiPjxBIEhSRUY9amF2YXNjcmlwdDp3aW5kb3dfb3BlbignY29udmVydGVyLnBocD9BTU9VTlQ9JG1heF9iaWQnLCdpbmNyZScsNjUwLDIwMCwzMCwzMCk+IiAuIHByaW50X21vbmV5KCRtYXhfYmlkKSAuICImbmJzcDs8QSBIUkVGPVwiLi9pdGVtLnBocD9pZD0kYXVjX2lkXCI+IjsKCQlpZigkSVNISUdITElHSFRFRCkKCQl7CgkJCSRUUExfbWF4aW11bV9iaWRzIC49ICI8U1BBTiBDTEFTUz1oZz4iOwoJCX0KCQlpZigkSVNCT0xEKQoJCXsKCQkJJFRQTF9tYXhpbXVtX2JpZHMgLj0gIjxCPiI7CgkJfQoJCSRUUExfbWF4aW11bV9iaWRzIC49IHN0cmlwc2xhc2hlcygkdGl0bGUpOwoJCWlmKCRJU0JPTEQpCgkJewoJCQkkVFBMX21heGltdW1fYmlkcyAuPSAiPC9CPiI7CgkJfQoJCWlmKCRJU0hJR0hMSUdIVEVEKQoJCXsKCQkJJFRQTF9tYXhpbXVtX2JpZHMgLj0gIjwvU1BBTj4iOwoJCX0KCQkkVFBMX21heGltdW1fYmlkcyAuPSAiPC9BPjwvcD4iOwoJCWlmKCRiZ2NvbG9yID09ICIjRkZGRkZGIikKCQl7CgkJCSRiZ2NvbG9yID0gJEZPTlRDT0xPUlskU0VUVElOR1NbJ2hlYWRlcmNvbG9yJ11dOwoJCX1lbHNlCgkJewoJCQkkYmdjb2xvciA9ICIjRkZGRkZGIjsKCQl9CgkJJEFVW10gPSAkYXVjdGlvbjsKCQkkaisrOwoJfQoJJGkrKzsKfQoKLy8tLSBCdWlsZCBuZXdzIGxpc3QKaWYoKCRTRVRUSU5HU1snbmV3c2JveCddID09IDEpICYmICFpc3NldCgkX1NFU1NJT05bIkJQUEVOTllBVVRPQklEX0xPR0dFRF9JTiJdKSkKewoJJHF1ZXJ5ID0gIlNFTEVDVCB0aXRsZSxpZCxuZXdfZGF0ZSBmcm9tIEJQUEVOTllBVVRPQklEX25ld3Mgd2hlcmUgc3VzcGVuZGVkPTAgb3JkZXIgYnkgbmV3X2RhdGUgREVTQyBsaW1pdCAiIC4gJFNFVFRJTkdTWyduZXdzdG9zaG93J107CgkkcmVzID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCWlmKCEkcmVzKQoJewoJCU15U1FMRXJyb3IoJHF1ZXJ5KTsKCQlleGl0KCk7Cgl9CgkKCSRUUExfbmV3c19saXN0ID0gIiI7Cgl3aGlsZSgkbmV3ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcykpCgl7CgkJJFRQTF9uZXdzX2xpc3QgLj0gIjxkaXYgY2xhc3M9J25ld3Nmb250Jz4iOwoJCSRUUiA9IEBteXNxbF9mZXRjaF9hcnJheShAbXlzcWxfcXVlcnkoIlNFTEVDVCB0aXRsZSxjb250ZW50IEZST00gQlBQRU5OWUFVVE9CSURfbmV3c190cmFuc2xhdGVkIFdIRVJFIGlkPSIuaW50dmFsKCRuZXdbJ2lkJ10pLiIgQU5EIGxhbmc9JyIuYWRkc2xhc2hlcygkbGFuZ3VhZ2UpLiInIikpOwoJCSRuZXdbJ3RpdGxlJ109JFRSWyd0aXRsZSddOwoJCSRuZXdbJ2NvbnRlbnQnXT0kVFJbJ2NvbnRlbnQnXTsKCQkkbmV3X2RhdGUgPSAkbmV3WyduZXdfZGF0ZSddOwoJCSRGX2RhdGUgPSBGb3JtYXREYXRlKCRuZXdfZGF0ZSk7CQkKCQkkVFBMX25ld3NfbGlzdCAuPSAiPGRpdiBjbGFzcz0nbmV3c3RpdGFsJz4KCQkgICAgPGRpdiBjbGFzcz0naWNvbmUnPjxpbWcgc3JjPSciLiRTRVRUSU5HU1snc2l0ZXVybCddLiJ0aGVtZXMvbXl0aGVtZS9pbWcvaWNvbmUucG5nJyB3aWR0aD0nMTEnIGhlaWdodD0nMTInIGFsaWduPSdhYnNtaWRkbGUnIC8+PC9kaXY+CgkJICAgIDxkaXYgY2xhc3M9J2ltYWdlJz48YSBocmVmPSd2aWV3bmV3LnBocD9pZD0iLiRuZXdbJ2lkJ10uIicgY2xhc3M9J25ld3N0aXRsZSc+Ii4kbmV3Wyd0aXRsZSddLiI8L2E+PC9kaXY+CgkJPC9kaXY+IjsKCQkkVFBMX25ld3NfbGlzdCAuPSAkRl9kYXRlLiIgLSAiLnN1YnN0cigkbmV3Wydjb250ZW50J10sIDAsIDkwKS4iLi4uIDxhIGhyZWY9J3ZpZXduZXcucGhwP2lkPSIuJG5ld1snaWQnXS4iJyBjbGFzcz0nbGlua21vcmUnPk1vcmU8L2E+IjsKCQkkVFBMX25ld3NfbGlzdCAuPSAiPC9kaXY+IjsKCQkkVFBMX25ld3NfbGlzdCAuPSAiPGRpdiBjbGFzcz0naW1hZ2UnPjxpbWcgc3JjPSciLiRTRVRUSU5HU1snc2l0ZXVybCddLiJ0aGVtZXMvbXl0aGVtZS9pbWcvbGluZS5wbmcnIC8+PC9kaXY+IjsKCX0JCgkKfWVsc2UKewoJJFRQTF9uZXdzX2xpc3QgPSAiJm5ic3A7IjsKfQokVFBMX25ld3NfbGlzdCAuPSAiJm5ic3A7Jm5ic3A7PGEgaHJlZj0ndmlld2FsbG5ld3MucGhwJz4iIC4gJE1TR18zMV8wMDQ2IC4gIjwvYT4iOwovLy0tIEJ1aWxkIGNsb3NlZCBhdWN0aW9ucyBsaXN0ICAgIAokcXVlcnkgPSAiU0VMRUNUIERJU1RJTkNUCiAgICAgICAgICAgIGEudGl0bGUsIGEuaWQsIGEucGljdF91cmwsCiAgICAgICAgICAgIHcuYmlkLCB3Lndpbm5lciwgYS5lbmRzIEFTIGNsb3NpbmdkYXRlLAoJCQl3LmJpZCwKICAgICAgICAgICAgdS5uaWNrCiAgICAgICAgRlJPTSBCUFBFTk5ZQVVUT0JJRF9hdWN0aW9ucyBhCiAgICAgICAgICAgIExFRlQgT1VURVIgSk9JTiBCUFBFTk5ZQVVUT0JJRF93aW5uZXJzIHcgT04gYS5pZCA9IHcuYXVjdGlvbgogICAgICAgICAgICBMRUZUIE9VVEVSIEpPSU4gQlBQRU5OWUFVVE9CSURfdXNlcnMgdSBPTiB3Lndpbm5lciA9IHUuaWQKICAgICAgICBXSEVSRQogICAgICAgICAgICBhdWN0aW9uX3R5cGUgPSAnMScgQU5EIGNsb3NlZCA9ICcxJyAgICAgICAgICAgIAogICAgICAgIE9SREVSIEJZIGVuZHMgREVTQyBsaW1pdCAwLCA3IjsKJHJlcyA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CmlmKCEkcmVzKQp7CgkvL015U1FMRXJyb3IoJHF1ZXJ5KTsKLy9leGl0Owp9CiRUUExfY2xvc2VkX2F1Y3Rpb25zX2xpc3QgPSAiIjsKd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXMpKQp7CgkkdGl0bGUgPSAoKHN0cmxlbigkcm93Wyd0aXRsZSddKSA+IDEyKSA/IHN1YnN0cigkcm93Wyd0aXRsZSddLCAwLCAxMikgLiAiLi4uIiA6ICRyb3dbJ3RpdGxlJ10pOwoJJGNsb3NlZF9kYXRlID0gJHJvd1snY2xvc2luZ2RhdGUnXTsKCSRwaWN0X3VybCA9ICRyb3dbJ3BpY3RfdXJsJ107CglpZigkcGljdF91cmwgPT0gIiIpCgl7CgkJJHBpY3RfdXJsID0gJ25vX2ltYWdlLnBuZyc7Cgl9Cgkkd2lubmVyID0gKCRyb3dbJ3dpbm5lciddICE9ICIiKSA/ICIgV2lubmVyOiAiIC4gJHJvd1snbmljayddIDogIiI7CgkkYmlkID0gKCRyb3dbJ2JpZCddICE9ICIiKSA/ICIgV29uIGJpZDogIiAuICRyb3dbJ2JpZCddIDogIiI7CgkkRl9kYXRlID0gRm9ybWF0RGF0ZSgkY2xvc2VkX2RhdGUpOwoJJFRQTF9jbG9zZWRfYXVjdGlvbnNfbGlzdCAuPSAiPGRpdiBjbGFzcz0nbmV3c2ZvbnQnPiI7CgkkVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICI8dGFibGU+PHRyPiI7CgkkVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICI8dGQ+PGEgaHJlZj1cIml0ZW0ucGhwP2lkPSIgLiAkcm93WydpZCddIC4gIlwiPiIgLiAkdGl0bGUgLiAiPC9hPjwvdGQ+IjsKCSRUUExfY2xvc2VkX2F1Y3Rpb25zX2xpc3QgLj0gIjx0ZD4iIC4gJEZfZGF0ZSAuICI8L3RkPiI7CgkkVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICI8L3RyPiI7CgkkVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICI8dHI+IjsKCWlmKCRyb3dbJ3BpY3RfdXJsJ10hPSIiKSB7CgkJJFRQTF9jbG9zZWRfYXVjdGlvbnNfbGlzdCAuPSAiPHRkPjxhIGhyZWY9XCJpdGVtLnBocD9pZD0iIC4gJHJvd1snaWQnXSAuICJcIiAgdGl0bGU9JyIgLiAkcm93Wyd0aXRsZSddIC4gIicgPjxpbWcgYWx0PSciIC4gJHJvd1sndGl0bGUnXSAuICInIGJvcmRlcj0nMCcgd2lkdGg9JzYwcHgnIGhlaWdodD0nNjBweCcgc3JjPSciIC4gJFNFVFRJTkdTWydzaXRldXJsJ10gLiAidXBsb2FkZWQvIiAuICRyb3dbInBpY3RfdXJsIl0gLiAiJyBzdHlsZT0nZmlsdGVyOmFscGhhKG9wYWNpdHk9MTAwKTstbW96LW9wYWNpdHk6MS4wOyBjdXJzb3I6cG9pbnRlcjsgYm9yZGVyOjFweCBzb2xpZCAjY2RjZGNkOycgb25tb3VzZW92ZXI9J21ha2V2aXNpYmxlKHRoaXMsMSknIG9ubW91c2VvdXQ9J21ha2V2aXNpYmxlKHRoaXMsMCknIC8+PC9hPjwvdGQ+IjsKCX0gZWxzZSB7CgkJJFRQTF9jbG9zZWRfYXVjdGlvbnNfbGlzdCAuPSAiPHRkPjxhIGhyZWY9XCJpdGVtLnBocD9pZD0iIC4gJHJvd1snaWQnXSAuICJcIiAgdGl0bGU9JyIgLiAkcm93Wyd0aXRsZSddIC4gIicgPjxpbWcgYWx0PSciIC4gJHJvd1sndGl0bGUnXSAuICInIGJvcmRlcj0nMCcgd2lkdGg9JzYwcHgnIGhlaWdodD0nNjBweCcgc3JjPSciIC4gJFNFVFRJTkdTWydzaXRldXJsJ10gLiAiaW1hZ2VzL25vLWltYWdlLmpwZycgc3R5bGU9J2ZpbHRlcjphbHBoYShvcGFjaXR5PTEwMCk7LW1vei1vcGFjaXR5OjEuMDsgY3Vyc29yOnBvaW50ZXI7IGJvcmRlcjoxcHggc29saWQgI2NkY2RjZDsnIG9ubW91c2VvdmVyPSdtYWtldmlzaWJsZSh0aGlzLDEpJyBvbm1vdXNlb3V0PSdtYWtldmlzaWJsZSh0aGlzLDApJyAvPjwvYT48L3RkPiI7Cgl9CgkkVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICI8dGQ+IjsKCSRUUExfY2xvc2VkX2F1Y3Rpb25zX2xpc3QgLj0gJE1TR180MF8wMjAuIiA8Zm9udCBzdHlsZT0nY29sb3I6I0ZGOTkwMCc+PGJyIC8+PGI+ICIgLiBwcmludF9tb25leSgkcm93WydiaWQnXSwgMiwgJy4nLCAnICcpIC4gIjwvYj48L2ZvbnQ+PGJyPiI7CgkkVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICRNU0dfNDBfMDIxLiIgPGZvbnQgc3R5bGU9J2NvbG9yOiM3Nzc3NzcnPjxiciAvPjxiPiIgLiAkcm93WyduaWNrJ10gLiAiPC9iPjwvZm9udD48YnI+IjsKCSRUUExfY2xvc2VkX2F1Y3Rpb25zX2xpc3QgLj0gIjx0ZD4iOwoJJFRQTF9jbG9zZWRfYXVjdGlvbnNfbGlzdCAuPSAiPC90cj48L3RhYmxlPiI7CgkkVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICI8L2Rpdj4iOwp9CgokVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICI8ZGl2IGNsYXNzPSdpbWFnZSc+PGltZyBzcmM9JyIuJFNFVFRJTkdTWydzaXRldXJsJ10uInRoZW1lcy9teXRoZW1lL2ltZy9saW5lLnBuZycgLz48L2Rpdj4iOwokVFBMX2Nsb3NlZF9hdWN0aW9uc19saXN0IC49ICImbmJzcDsmbmJzcDs8YSBocmVmPSd2aWV3YWxsY2xvc2VkYXVjdGlvbnMucGhwJz4iIC4gJE1TR18zMV8wMDQ2IC4gIjwvYT4iOwoKcmVxdWlyZV9vbmNlIChwaHBhX2luY2x1ZGUoInRlbXBsYXRlX2luZGV4X3BocC5odG1sIikpOwpyZXF1aXJlX29uY2UgKCcuL2Zvb3Rlci5waHAnKTsKCX0KPz4=