Created
October 13, 2015 00:24
-
-
Save ckissane/9f13afc20715b19d6486 to your computer and use it in GitHub Desktop.
Colossal Cave Adventure 2.5 ONLINE!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html lang="en-us"> | |
<head> | |
<meta charset="utf-8"> | |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> | |
<script src="task.js"></script> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |
<title>Emscripten-Generated Code</title> | |
<style> | |
body { | |
font-family: arial; | |
margin: 0; | |
padding: none; | |
} | |
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; } | |
div.emscripten { text-align: center; } | |
div.emscripten_border { border: 1px solid black; } | |
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */ | |
canvas.emscripten { border: 0px none; } | |
#emscripten_logo { | |
display: none; | |
margin: 0; | |
} | |
.spinner { | |
height: 30px; | |
width: 30px; | |
margin: 0; | |
margin-top: 20px; | |
margin-left: 20px; | |
display: none; | |
vertical-align: top; | |
-webkit-animation: rotation .8s linear infinite; | |
-moz-animation: rotation .8s linear infinite; | |
-o-animation: rotation .8s linear infinite; | |
animation: rotation 0.8s linear infinite; | |
border-left: 5px solid rgb(235, 235, 235); | |
border-right: 5px solid rgb(235, 235, 235); | |
border-bottom: 5px solid rgb(235, 235, 235); | |
border-top: 5px solid rgb(120, 120, 120); | |
border-radius: 100%; | |
background-color: rgb(189, 215, 46); | |
} | |
@-webkit-keyframes rotation { | |
from {-webkit-transform: rotate(0deg);} | |
to {-webkit-transform: rotate(360deg);} | |
} | |
@-moz-keyframes rotation { | |
from {-moz-transform: rotate(0deg);} | |
to {-moz-transform: rotate(360deg);} | |
} | |
@-o-keyframes rotation { | |
from {-o-transform: rotate(0deg);} | |
to {-o-transform: rotate(360deg);} | |
} | |
@keyframes rotation { | |
from {transform: rotate(0deg);} | |
to {transform: rotate(360deg);} | |
} | |
#status { | |
display: none; | |
vertical-align: top; | |
margin-top: 30px; | |
margin-left: 20px; | |
font-weight: bold; | |
color: rgb(120, 120, 120); | |
} | |
#progress { | |
height: 20px; | |
width: 30px; | |
display:none; | |
} | |
#controls { | |
display: none; | |
float: right; | |
vertical-align: top; | |
margin-top: 30px; | |
margin-right: 20px; | |
} | |
html, body { | |
height:100%; | |
width:100%; | |
margin:0px; | |
} | |
.title-img { | |
width:100%; | |
margin-top:10px; | |
} | |
.catch-phrase-img { | |
width:500px; | |
display:absolute; | |
position:absolute; | |
left:90px; | |
top:76.6%; | |
} | |
.title-box { | |
display:relative; | |
position:relative; | |
width:600px; | |
margin-left:calc(50% - 300px); | |
} | |
.title-box-band { | |
width:100%; | |
height:200px; | |
background:url("venture cave image.png"); | |
background-position: calc(50% - 250px); | |
} | |
.output { | |
padding:10px; | |
height: calc(100% - 200px); | |
overflow-y:scroll; | |
} | |
.output li{ | |
list-style:none; | |
} | |
.input { | |
margin-left:10px; | |
width:calc(100% - 20px); | |
} | |
</style> | |
</head> | |
<body> | |
<div class="spinner" id='spinner'></div> | |
<div class="emscripten" id="status">Downloading...</div> | |
<span id='controls'> | |
<span><input type="checkbox" id="resize">Resize canvas</span> | |
<span><input type="checkbox" id="pointerLock" checked>Lock/hide mouse pointer </span> | |
<span><input type="button" value="Fullscreen" onclick="Module.requestFullScreen(document.getElementById('pointerLock').checked, | |
document.getElementById('resize').checked)"> | |
</span> | |
</span> | |
<div class="emscripten"> | |
<progress value="0" max="100" id="progress" hidden=1></progress> | |
</div> | |
<div class="title-box-band"> | |
<div class="title-box"> | |
<img class="title-img" src="VENTURE.png"> | |
<img class="catch-phrase-img" src="venture catch phrase.png"> | |
</div> | |
</div> | |
<div class="output" id="output"> | |
<ul class="console"> | |
</ul> | |
</div> | |
<input class="input"> | |
<script type='text/javascript'> | |
var w = $("body").width(); | |
var h = $("body").height(); | |
$(".output").height(h - 250); | |
var output = $(".console"); | |
var statusElement = document.getElementById('status'); | |
var progressElement = document.getElementById('progress'); | |
var spinnerElement = document.getElementById('spinner'); | |
var Module = { | |
preRun: [], | |
postRun: [], | |
print: (function() { | |
var element = document.getElementById('output'); | |
//if (element) element.value = ''; // clear browser cache | |
return function(text) { | |
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' '); | |
// These replacements are necessary if you render to raw HTML | |
//text = text.replace(/&/g, "&"); | |
//text = text.replace(/</g, "<"); | |
//text = text.replace(/>/g, ">"); | |
//text = text.replace('\n', '<br>', 'g'); | |
console.log(text); | |
if (element) { | |
element.scrollTop = element.scrollHeight; // focus on bottom | |
} | |
output.html(output.html() + "<li class='log'>" + text + "</li>"); | |
output.scrollTop = output.scrollHeight; | |
}; | |
})(), | |
printErr: function(text) { | |
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' '); | |
if (0) { // XXX disabled for safety typeof dump == 'function') { | |
dump(text + '\n'); // fast, straight to the real console | |
} else { | |
console.error(text); | |
} | |
}, | |
setStatus: function(text) { | |
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' }; | |
if (text === Module.setStatus.text) return; | |
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/); | |
var now = Date.now(); | |
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon | |
if (m) { | |
text = m[1]; | |
progressElement.value = parseInt(m[2])*100; | |
progressElement.max = parseInt(m[4])*100; | |
progressElement.hidden = false; | |
spinnerElement.hidden = false; | |
} else { | |
progressElement.value = null; | |
progressElement.max = null; | |
progressElement.hidden = true; | |
if (!text) spinnerElement.style.display = 'none'; | |
} | |
statusElement.innerHTML = text; | |
}, | |
totalDependencies: 0, | |
monitorRunDependencies: function(left) { | |
this.totalDependencies = Math.max(this.totalDependencies, left); | |
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.'); | |
} | |
}; | |
Module.setStatus('Downloading...'); | |
window.onerror = function(event) { | |
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus | |
Module.setStatus('Exception thrown, see JavaScript console'); | |
spinnerElement.style.display = 'none'; | |
Module.setStatus = function(text) { | |
if (text) Module.printErr('[post-exception status] ' + text); | |
}; | |
}; | |
//emscripten.stdin = function(){return myInput.value}; | |
</script> | |
<script async type="text/javascript" src="adventure.js"></script> | |
</body> | |
</html> |
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(".input").keypress(function(e) { | |
if (e.which == '13') { | |
e.preventDefault(); | |
lastInput = $(".input").val(); | |
$(".input").val(""); | |
} | |
}); | |
function sleep(n) { | |
console.log("sleep") | |
//var request = new XMLHttpRequest(); | |
//request.open('GET', 'http://www.editey.com/preview/0B-SZEiT_s4MAVkFEc1EtaGJySnM/sleep.php?n=' + n, false); | |
// `false` makes the request synchronous | |
var request = $.ajax({ | |
type: "POST", | |
url: 'http://www.editey.com/preview/0B-SZEiT_s4MAVkFEc1EtaGJySnM/sleep.php?n=' + n, | |
async: false, | |
data:null | |
}); | |
request.send(null); | |
} | |
var Module; | |
var lastInput = null; | |
var gettingInput = false; | |
function getInput() { | |
$(".input").val(""); | |
var runs = 0; | |
while (lastInput == null) { | |
spawn(function*() { | |
yield sleep(20); | |
}); | |
runs++; | |
if (runs > 100) { | |
lastInput = window.prompt("input?"); | |
break; | |
} | |
} | |
var inputEd = lastInput + ""; | |
lastInput = null; | |
return inputEd; | |
} | |
if (typeof Module === 'undefined') Module = {}; | |
if (!Module.expectedDataFileDownloads) { | |
Module.expectedDataFileDownloads = 0; | |
Module.finishedDataFileDownloads = 0; | |
} | |
Module.expectedDataFileDownloads++; | |
(function() { | |
var loadPackage = function(metadata) { | |
function runWithFS() { | |
function assert(check, msg) { | |
if (!check) throw msg + new Error().stack; | |
} | |
var fileData0 = []; | |
fileData0.push.apply(fileData0, [49, 10, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 115, 116, 97, 110, 100, 105, 110, 103, 32, 97, 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, 102, 32, 97, 32, 114, 111, 97, 100, 32, 98, 101, 102, 111, 114, 101, 32, 97, 32, 115, 109, 97, 108, 108, 32, 98, 114, 105, 99, 107, 32, 98, 117, 105, 108, 100, 105, 110, 103, 46, 10, 49, 9, 65, 114, 111, 117, 110, 100, 32, 121, 111, 117, 32, 105, 115, 32, 97, 32, 102, 111, 114, 101, 115, 116, 46, 32, 32, 65, 32, 115, 109, 97, 108, 108, 32, 115, 116, 114, 101, 97, 109, 32, 102, 108, 111, 119, 115, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 98, 117, 105, 108, 100, 105, 110, 103, 32, 97, 110, 100, 10, 49, 9, 100, 111, 119, 110, 32, 97, 32, 103, 117, 108, 108, 121, 46, 10, 50, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 119, 97, 108, 107, 101, 100, 32, 117, 112, 32, 97, 32, 104, 105, 108, 108, 44, 32, 115, 116, 105, 108, 108, 32, 105, 110, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 32, 32, 84, 104, 101, 32, 114, 111, 97, 100, 32, 115, 108, 111, 112, 101, 115, 32, 98, 97, 99, 107, 10, 50, 9, 100, 111, 119, 110, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 115, 105, 100, 101, 32, 111, 102, 32, 116, 104, 101, 32, 104, 105, 108, 108, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 98, 117, 105, 108, 100, 105, 110, 103, 32, 105, 110, 32, 116, 104, 101, 32, 100, 105, 115, 116, 97, 110, 99, 101, 46, 10, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 115, 105, 100, 101, 32, 97, 32, 98, 117, 105, 108, 100, 105, 110, 103, 44, 32, 97, 32, 119, 101, 108, 108, 32, 104, 111, 117, 115, 101, 32, 102, 111, 114, 32, 97, 32, 108, 97, 114, 103, 101, 32, 115, 112, 114, 105, 110, 103, 46, 10, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 118, 97, 108, 108, 101, 121, 32, 105, 110, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 32, 98, 101, 115, 105, 100, 101, 32, 97, 32, 115, 116, 114, 101, 97, 109, 32, 116, 117, 109, 98, 108, 105, 110, 103, 32, 97, 108, 111, 110, 103, 32, 97, 10, 52, 9, 114, 111, 99, 107, 121, 32, 98, 101, 100, 46, 10, 53, 9, 84, 104, 101, 32, 114, 111, 97, 100, 44, 32, 119, 104, 105, 99, 104, 32, 97, 112, 112, 114, 111, 97, 99, 104, 101, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 101, 97, 115, 116, 44, 32, 101, 110, 100, 115, 32, 104, 101, 114, 101, 32, 97, 109, 105, 100, 32, 116, 104, 101, 32, 116, 114, 101, 101, 115, 46, 10, 54, 9, 84, 104, 101, 32, 102, 111, 114, 101, 115, 116, 32, 116, 104, 105, 110, 115, 32, 111, 117, 116, 32, 104, 101, 114, 101, 32, 116, 111, 32, 114, 101, 118, 101, 97, 108, 32, 97, 32, 115, 116, 101, 101, 112, 32, 99, 108, 105, 102, 102, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 32, 119, 97, 121, 10, 54, 9, 100, 111, 119, 110, 44, 32, 98, 117, 116, 32, 97, 32, 115, 109, 97, 108, 108, 32, 108, 101, 100, 103, 101, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 101, 110, 32, 116, 111, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 46, 10, 55, 9, 65, 116, 32, 121, 111, 117, 114, 32, 102, 101, 101, 116, 32, 97, 108, 108, 32, 116, 104, 101, 32, 119, 97, 116, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 115, 116, 114, 101, 97, 109, 32, 115, 112, 108, 97, 115, 104, 101, 115, 32, 105, 110, 116, 111, 32, 97, 32, 50, 45, 105, 110, 99, 104, 32, 115, 108, 105, 116, 10, 55, 9, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 46, 32, 32, 68, 111, 119, 110, 115, 116, 114, 101, 97, 109, 32, 116, 104, 101, 32, 115, 116, 114, 101, 97, 109, 98, 101, 100, 32, 105, 115, 32, 98, 97, 114, 101, 32, 114, 111, 99, 107, 46, 10, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 50, 48, 45, 102, 111, 111, 116, 32, 100, 101, 112, 114, 101, 115, 115, 105, 111, 110, 32, 102, 108, 111, 111, 114, 101, 100, 32, 119, 105, 116, 104, 32, 98, 97, 114, 101, 32, 100, 105, 114, 116, 46, 32, 32, 83, 101, 116, 32, 105, 110, 116, 111, 32, 116, 104, 101, 10, 56, 9, 100, 105, 114, 116, 32, 105, 115, 32, 97, 32, 115, 116, 114, 111, 110, 103, 32, 115, 116, 101, 101, 108, 32, 103, 114, 97, 116, 101, 32, 109, 111, 117, 110, 116, 101, 100, 32, 105, 110, 32, 99, 111, 110, 99, 114, 101, 116, 101, 46, 32, 32, 65, 32, 100, 114, 121, 32, 115, 116, 114, 101, 97, 109, 98, 101, 100, 10, 56, 9, 108, 101, 97, 100, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 100, 101, 112, 114, 101, 115, 115, 105, 111, 110, 46, 10, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 104, 97, 109, 98, 101, 114, 32, 98, 101, 110, 101, 97, 116, 104, 32, 97, 32, 51, 120, 51, 32, 115, 116, 101, 101, 108, 32, 103, 114, 97, 116, 101, 32, 116, 111, 32, 116, 104, 101, 32, 115, 117, 114, 102, 97, 99, 101, 46, 10, 57, 9, 65, 32, 108, 111, 119, 32, 99, 114, 97, 119, 108, 32, 111, 118, 101, 114, 32, 99, 111, 98, 98, 108, 101, 115, 32, 108, 101, 97, 100, 115, 32, 105, 110, 119, 97, 114, 100, 32, 116, 111, 32, 116, 104, 101, 32, 119, 101, 115, 116, 46, 10, 49, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 99, 114, 97, 119, 108, 105, 110, 103, 32, 111, 118, 101, 114, 32, 99, 111, 98, 98, 108, 101, 115, 32, 105, 110, 32, 97, 32, 108, 111, 119, 32, 112, 97, 115, 115, 97, 103, 101, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 100, 105, 109, 32, 108, 105, 103, 104, 116, 10, 49, 48, 9, 97, 116, 32, 116, 104, 101, 32, 101, 97, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 49, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 100, 101, 98, 114, 105, 115, 32, 114, 111, 111, 109, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 115, 116, 117, 102, 102, 32, 119, 97, 115, 104, 101, 100, 32, 105, 110, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 117, 114, 102, 97, 99, 101, 46, 10, 49, 49, 9, 65, 32, 108, 111, 119, 32, 119, 105, 100, 101, 32, 112, 97, 115, 115, 97, 103, 101, 32, 119, 105, 116, 104, 32, 99, 111, 98, 98, 108, 101, 115, 32, 98, 101, 99, 111, 109, 101, 115, 32, 112, 108, 117, 103, 103, 101, 100, 32, 119, 105, 116, 104, 32, 109, 117, 100, 32, 97, 110, 100, 32, 100, 101, 98, 114, 105, 115, 10, 49, 49, 9, 104, 101, 114, 101, 44, 32, 98, 117, 116, 32, 97, 110, 32, 97, 119, 107, 119, 97, 114, 100, 32, 99, 97, 110, 121, 111, 110, 32, 108, 101, 97, 100, 115, 32, 117, 112, 119, 97, 114, 100, 32, 97, 110, 100, 32, 119, 101, 115, 116, 46, 32, 32, 73, 110, 32, 116, 104, 101, 32, 109, 117, 100, 32, 115, 111, 109, 101, 111, 110, 101, 10, 49, 49, 9, 104, 97, 115, 32, 115, 99, 114, 97, 119, 108, 101, 100, 44, 32, 34, 77, 65, 71, 73, 67, 32, 87, 79, 82, 68, 32, 88, 89, 90, 90, 89, 34, 46, 10, 49, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 110, 32, 97, 119, 107, 119, 97, 114, 100, 32, 115, 108, 111, 112, 105, 110, 103, 32, 101, 97, 115, 116, 47, 119, 101, 115, 116, 32, 99, 97, 110, 121, 111, 110, 46, 10, 49, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 112, 108, 101, 110, 100, 105, 100, 32, 99, 104, 97, 109, 98, 101, 114, 32, 116, 104, 105, 114, 116, 121, 32, 102, 101, 101, 116, 32, 104, 105, 103, 104, 46, 32, 32, 84, 104, 101, 32, 119, 97, 108, 108, 115, 32, 97, 114, 101, 32, 102, 114, 111, 122, 101, 110, 10, 49, 51, 9, 114, 105, 118, 101, 114, 115, 32, 111, 102, 32, 111, 114, 97, 110, 103, 101, 32, 115, 116, 111, 110, 101, 46, 32, 32, 65, 110, 32, 97, 119, 107, 119, 97, 114, 100, 32, 99, 97, 110, 121, 111, 110, 32, 97, 110, 100, 32, 97, 32, 103, 111, 111, 100, 32, 112, 97, 115, 115, 97, 103, 101, 32, 101, 120, 105, 116, 10, 49, 51, 9, 102, 114, 111, 109, 32, 101, 97, 115, 116, 32, 97, 110, 100, 32, 119, 101, 115, 116, 32, 115, 105, 100, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 99, 104, 97, 109, 98, 101, 114, 46, 10, 49, 52, 9, 65, 116, 32, 121, 111, 117, 114, 32, 102, 101, 101, 116, 32, 105, 115, 32, 97, 32, 115, 109, 97, 108, 108, 32, 112, 105, 116, 32, 98, 114, 101, 97, 116, 104, 105, 110, 103, 32, 116, 114, 97, 99, 101, 115, 32, 111, 102, 32, 119, 104, 105, 116, 101, 32, 109, 105, 115, 116, 46, 32, 32, 65, 110, 32, 101, 97, 115, 116, 10, 49, 52, 9, 112, 97, 115, 115, 97, 103, 101, 32, 101, 110, 100, 115, 32, 104, 101, 114, 101, 32, 101, 120, 99, 101, 112, 116, 32, 102, 111, 114, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 114, 97, 99, 107, 32, 108, 101, 97, 100, 105, 110, 103, 32, 111, 110, 46, 10, 49, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 111, 110, 101, 32, 101, 110, 100, 32, 111, 102, 32, 97, 32, 118, 97, 115, 116, 32, 104, 97, 108, 108, 32, 115, 116, 114, 101, 116, 99, 104, 105, 110, 103, 32, 102, 111, 114, 119, 97, 114, 100, 32, 111, 117, 116, 32, 111, 102, 32, 115, 105, 103, 104, 116, 32, 116, 111, 10, 49, 53, 9, 116, 104, 101, 32, 119, 101, 115, 116, 46, 32, 32, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 111, 112, 101, 110, 105, 110, 103, 115, 32, 116, 111, 32, 101, 105, 116, 104, 101, 114, 32, 115, 105, 100, 101, 46, 32, 32, 78, 101, 97, 114, 98, 121, 44, 32, 97, 32, 119, 105, 100, 101, 32, 115, 116, 111, 110, 101, 10, 49, 53, 9, 115, 116, 97, 105, 114, 99, 97, 115, 101, 32, 108, 101, 97, 100, 115, 32, 100, 111, 119, 110, 119, 97, 114, 100, 46, 32, 32, 84, 104, 101, 32, 104, 97, 108, 108, 32, 105, 115, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 119, 105, 115, 112, 115, 32, 111, 102, 32, 119, 104, 105, 116, 101, 32, 109, 105, 115, 116, 10, 49, 53, 9, 115, 119, 97, 121, 105, 110, 103, 32, 116, 111, 32, 97, 110, 100, 32, 102, 114, 111, 32, 97, 108, 109, 111, 115, 116, 32, 97, 115, 32, 105, 102, 32, 97, 108, 105, 118, 101, 46, 32, 32, 65, 32, 99, 111, 108, 100, 32, 119, 105, 110, 100, 32, 98, 108, 111, 119, 115, 32, 117, 112, 32, 116, 104, 101, 10, 49, 53, 9, 115, 116, 97, 105, 114, 99, 97, 115, 101, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 112, 97, 115, 115, 97, 103, 101, 32, 97, 116, 32, 116, 104, 101, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 100, 111, 109, 101, 32, 98, 101, 104, 105, 110, 100, 32, 121, 111, 117, 46, 10, 49, 54, 9, 84, 104, 101, 32, 99, 114, 97, 99, 107, 32, 105, 115, 32, 102, 97, 114, 32, 116, 111, 111, 32, 115, 109, 97, 108, 108, 32, 102, 111, 114, 32, 121, 111, 117, 32, 116, 111, 32, 102, 111, 108, 108, 111, 119, 46, 32, 32, 65, 116, 32, 105, 116, 115, 32, 119, 105, 100, 101, 115, 116, 32, 105, 116, 32, 105, 115, 10, 49, 54, 9, 98, 97, 114, 101, 108, 121, 32, 119, 105, 100, 101, 32, 101, 110, 111, 117, 103, 104, 32, 116, 111, 32, 97, 100, 109, 105, 116, 32, 121, 111, 117, 114, 32, 102, 111, 111, 116, 46, 10, 49, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 116, 104, 101, 32, 101, 97, 115, 116, 32, 98, 97, 110, 107, 32, 111, 102, 32, 97, 32, 102, 105, 115, 115, 117, 114, 101, 32, 115, 108, 105, 99, 105, 110, 103, 32, 99, 108, 101, 97, 114, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 104, 97, 108, 108, 46, 10, 49, 55, 9, 84, 104, 101, 32, 109, 105, 115, 116, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 116, 104, 105, 99, 107, 32, 104, 101, 114, 101, 44, 32, 97, 110, 100, 32, 116, 104, 101, 32, 102, 105, 115, 115, 117, 114, 101, 32, 105, 115, 32, 116, 111, 111, 32, 119, 105, 100, 101, 32, 116, 111, 32, 106, 117, 109, 112, 46, 10, 49, 56, 9, 84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 108, 111, 119, 32, 114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 97, 32, 99, 114, 117, 100, 101, 32, 110, 111, 116, 101, 32, 111, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 46, 32, 32, 84, 104, 101, 32, 110, 111, 116, 101, 32, 115, 97, 121, 115, 44, 10, 49, 56, 9, 34, 89, 111, 117, 32, 119, 111, 110, 39, 116, 32, 103, 101, 116, 32, 105, 116, 32, 117, 112, 32, 116, 104, 101, 32, 115, 116, 101, 112, 115, 34, 46, 10, 49, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 72, 97, 108, 108, 32, 111, 102, 32, 116, 104, 101, 32, 77, 111, 117, 110, 116, 97, 105, 110, 32, 75, 105, 110, 103, 44, 32, 119, 105, 116, 104, 32, 112, 97, 115, 115, 97, 103, 101, 115, 32, 111, 102, 102, 32, 105, 110, 32, 97, 108, 108, 10, 49, 57, 9, 100, 105, 114, 101, 99, 116, 105, 111, 110, 115, 46, 10, 50, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 116, 32, 119, 105, 116, 104, 32, 97, 32, 98, 114, 111, 107, 101, 110, 32, 110, 101, 99, 107, 46, 10, 50, 49, 9, 89, 111, 117, 32, 100, 105, 100, 110, 39, 116, 32, 109, 97, 107, 101, 32, 105, 116, 46, 10, 50, 50, 9, 84, 104, 101, 32, 100, 111, 109, 101, 32, 105, 115, 32, 117, 110, 99, 108, 105, 109, 98, 97, 98, 108, 101, 46, 10, 50, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 84, 119, 111, 112, 105, 116, 32, 82, 111, 111, 109, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 97, 114, 103, 101, 32, 104, 111, 108, 101, 32, 105, 110, 10, 50, 51, 9, 116, 104, 101, 32, 119, 97, 108, 108, 32, 97, 98, 111, 118, 101, 32, 116, 104, 101, 32, 112, 105, 116, 32, 97, 116, 32, 116, 104, 105, 115, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 114, 111, 111, 109, 46, 10, 50, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 116, 104, 101, 32, 101, 97, 115, 116, 101, 114, 110, 32, 112, 105, 116, 32, 105, 110, 32, 116, 104, 101, 32, 84, 119, 111, 112, 105, 116, 32, 82, 111, 111, 109, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 10, 50, 52, 9, 97, 32, 115, 109, 97, 108, 108, 32, 112, 111, 111, 108, 32, 111, 102, 32, 111, 105, 108, 32, 105, 110, 32, 111, 110, 101, 32, 99, 111, 114, 110, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 116, 46, 10, 50, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 116, 104, 101, 32, 119, 101, 115, 116, 101, 114, 110, 32, 112, 105, 116, 32, 105, 110, 32, 116, 104, 101, 32, 84, 119, 111, 112, 105, 116, 32, 82, 111, 111, 109, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 10, 50, 53, 9, 97, 32, 108, 97, 114, 103, 101, 32, 104, 111, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 32, 97, 98, 111, 117, 116, 32, 50, 53, 32, 102, 101, 101, 116, 32, 97, 98, 111, 118, 101, 32, 121, 111, 117, 46, 10, 50, 54, 9, 89, 111, 117, 32, 99, 108, 97, 109, 98, 101, 114, 32, 117, 112, 32, 116, 104, 101, 32, 112, 108, 97, 110, 116, 32, 97, 110, 100, 32, 115, 99, 117, 114, 114, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 104, 111, 108, 101, 32, 97, 116, 32, 116, 104, 101, 32, 116, 111, 112, 46, 10, 50, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 115, 105, 100, 101, 32, 111, 102, 32, 116, 104, 101, 32, 102, 105, 115, 115, 117, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 115, 116, 115, 46, 10, 50, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 111, 119, 32, 110, 47, 115, 32, 112, 97, 115, 115, 97, 103, 101, 32, 97, 116, 32, 97, 32, 104, 111, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 46, 32, 32, 84, 104, 101, 32, 104, 111, 108, 101, 32, 103, 111, 101, 115, 10, 50, 56, 9, 100, 111, 119, 110, 32, 116, 111, 32, 97, 110, 32, 101, 47, 119, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 50, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 32, 115, 105, 100, 101, 32, 99, 104, 97, 109, 98, 101, 114, 46, 10, 51, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 115, 105, 100, 101, 32, 99, 104, 97, 109, 98, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 72, 97, 108, 108, 32, 111, 102, 32, 116, 104, 101, 32, 77, 111, 117, 110, 116, 97, 105, 110, 32, 75, 105, 110, 103, 46, 10, 51, 48, 9, 65, 32, 112, 97, 115, 115, 97, 103, 101, 32, 99, 111, 110, 116, 105, 110, 117, 101, 115, 32, 119, 101, 115, 116, 32, 97, 110, 100, 32, 117, 112, 32, 104, 101, 114, 101, 46, 10, 51, 49, 9, 37, 33, 10, 51, 50, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 103, 101, 116, 32, 98, 121, 32, 116, 104, 101, 32, 115, 110, 97, 107, 101, 46, 10, 51, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 44, 32, 119, 105, 116, 104, 32, 97, 32, 112, 97, 115, 115, 97, 103, 101, 32, 116, 111, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 44, 32, 97, 32, 112, 97, 115, 115, 97, 103, 101, 32, 116, 111, 32, 116, 104, 101, 10, 51, 51, 9, 119, 101, 115, 116, 44, 32, 97, 110, 100, 32, 97, 32, 119, 97, 108, 108, 32, 111, 102, 32, 98, 114, 111, 107, 101, 110, 32, 114, 111, 99, 107, 32, 116, 111, 32, 116, 104, 101, 32, 101, 97, 115, 116, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 97, 114, 103, 101, 32, 34, 89, 50, 34, 32, 111, 110, 10, 51, 51, 9, 97, 32, 114, 111, 99, 107, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 39, 115, 32, 99, 101, 110, 116, 101, 114, 46, 10, 51, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 106, 117, 109, 98, 108, 101, 32, 111, 102, 32, 114, 111, 99, 107, 44, 32, 119, 105, 116, 104, 32, 99, 114, 97, 99, 107, 115, 32, 101, 118, 101, 114, 121, 119, 104, 101, 114, 101, 46, 10, 51, 53, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 97, 32, 108, 111, 119, 32, 119, 105, 110, 100, 111, 119, 32, 111, 118, 101, 114, 108, 111, 111, 107, 105, 110, 103, 32, 97, 32, 104, 117, 103, 101, 32, 112, 105, 116, 44, 32, 119, 104, 105, 99, 104, 32, 101, 120, 116, 101, 110, 100, 115, 32, 117, 112, 32, 111, 117, 116, 32, 111, 102, 10, 51, 53, 9, 115, 105, 103, 104, 116, 46, 32, 32, 65, 32, 102, 108, 111, 111, 114, 32, 105, 115, 32, 105, 110, 100, 105, 115, 116, 105, 110, 99, 116, 108, 121, 32, 118, 105, 115, 105, 98, 108, 101, 32, 111, 118, 101, 114, 32, 53, 48, 32, 102, 101, 101, 116, 32, 98, 101, 108, 111, 119, 46, 32, 32, 84, 114, 97, 99, 101, 115, 32, 111, 102, 10, 51, 53, 9, 119, 104, 105, 116, 101, 32, 109, 105, 115, 116, 32, 99, 111, 118, 101, 114, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 116, 44, 32, 98, 101, 99, 111, 109, 105, 110, 103, 32, 116, 104, 105, 99, 107, 101, 114, 32, 116, 111, 32, 116, 104, 101, 32, 114, 105, 103, 104, 116, 46, 10, 51, 53, 9, 77, 97, 114, 107, 115, 32, 105, 110, 32, 116, 104, 101, 32, 100, 117, 115, 116, 32, 97, 114, 111, 117, 110, 100, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 32, 119, 111, 117, 108, 100, 32, 115, 101, 101, 109, 32, 116, 111, 32, 105, 110, 100, 105, 99, 97, 116, 101, 32, 116, 104, 97, 116, 10, 51, 53, 9, 115, 111, 109, 101, 111, 110, 101, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 104, 101, 114, 101, 32, 114, 101, 99, 101, 110, 116, 108, 121, 46, 32, 32, 68, 105, 114, 101, 99, 116, 108, 121, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 112, 105, 116, 32, 102, 114, 111, 109, 32, 121, 111, 117, 32, 97, 110, 100, 10, 51, 53, 9, 50, 53, 32, 102, 101, 101, 116, 32, 97, 119, 97, 121, 32, 116, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 115, 105, 109, 105, 108, 97, 114, 32, 119, 105, 110, 100, 111, 119, 32, 108, 111, 111, 107, 105, 110, 103, 32, 105, 110, 116, 111, 32, 97, 32, 108, 105, 103, 104, 116, 101, 100, 32, 114, 111, 111, 109, 46, 32, 32, 65, 10, 51, 53, 9, 115, 104, 97, 100, 111, 119, 121, 32, 102, 105, 103, 117, 114, 101, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 101, 110, 32, 116, 104, 101, 114, 101, 32, 112, 101, 101, 114, 105, 110, 103, 32, 98, 97, 99, 107, 32, 97, 116, 32, 121, 111, 117, 46, 10, 51, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 100, 105, 114, 116, 121, 32, 98, 114, 111, 107, 101, 110, 32, 112, 97, 115, 115, 97, 103, 101, 46, 32, 32, 84, 111, 32, 116, 104, 101, 32, 101, 97, 115, 116, 32, 105, 115, 32, 97, 32, 99, 114, 97, 119, 108, 46, 32, 32, 84, 111, 32, 116, 104, 101, 10, 51, 54, 9, 119, 101, 115, 116, 32, 105, 115, 32, 97, 32, 108, 97, 114, 103, 101, 32, 112, 97, 115, 115, 97, 103, 101, 46, 32, 32, 65, 98, 111, 118, 101, 32, 121, 111, 117, 32, 105, 115, 32, 97, 32, 104, 111, 108, 101, 32, 116, 111, 32, 97, 110, 111, 116, 104, 101, 114, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 51, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 116, 104, 101, 32, 98, 114, 105, 110, 107, 32, 111, 102, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 108, 101, 97, 110, 32, 99, 108, 105, 109, 98, 97, 98, 108, 101, 32, 112, 105, 116, 46, 32, 32, 65, 32, 99, 114, 97, 119, 108, 32, 108, 101, 97, 100, 115, 10, 51, 55, 9, 119, 101, 115, 116, 46, 10, 51, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 97, 32, 115, 109, 97, 108, 108, 32, 112, 105, 116, 32, 119, 105, 116, 104, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 115, 116, 114, 101, 97, 109, 44, 32, 119, 104, 105, 99, 104, 10, 51, 56, 9, 101, 110, 116, 101, 114, 115, 32, 97, 110, 100, 32, 101, 120, 105, 116, 115, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 105, 110, 121, 32, 115, 108, 105, 116, 115, 46, 10, 51, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 32, 102, 117, 108, 108, 32, 111, 102, 32, 100, 117, 115, 116, 121, 32, 114, 111, 99, 107, 115, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 98, 105, 103, 32, 104, 111, 108, 101, 32, 105, 110, 10, 51, 57, 9, 116, 104, 101, 32, 102, 108, 111, 111, 114, 46, 32, 32, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 99, 114, 97, 99, 107, 115, 32, 101, 118, 101, 114, 121, 119, 104, 101, 114, 101, 44, 32, 97, 110, 100, 32, 97, 32, 112, 97, 115, 115, 97, 103, 101, 32, 108, 101, 97, 100, 105, 110, 103, 32, 101, 97, 115, 116, 46, 10, 52, 48, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 99, 114, 97, 119, 108, 101, 100, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 118, 101, 114, 121, 32, 108, 111, 119, 32, 119, 105, 100, 101, 32, 112, 97, 115, 115, 97, 103, 101, 32, 112, 97, 114, 97, 108, 108, 101, 108, 32, 116, 111, 32, 97, 110, 100, 32, 110, 111, 114, 116, 104, 10, 52, 48, 9, 111, 102, 32, 116, 104, 101, 32, 72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 115, 116, 115, 46, 10, 52, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 115, 116, 115, 46, 32, 32, 65, 32, 108, 111, 119, 32, 119, 105, 100, 101, 32, 99, 114, 97, 119, 108, 10, 52, 49, 9, 99, 111, 110, 116, 105, 110, 117, 101, 115, 32, 119, 101, 115, 116, 32, 97, 110, 100, 32, 97, 110, 111, 116, 104, 101, 114, 32, 103, 111, 101, 115, 32, 110, 111, 114, 116, 104, 46, 32, 32, 84, 111, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 32, 105, 115, 32, 97, 32, 108, 105, 116, 116, 108, 101, 10, 52, 49, 9, 112, 97, 115, 115, 97, 103, 101, 32, 54, 32, 102, 101, 101, 116, 32, 111, 102, 102, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 46, 10, 52, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 52, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 52, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 52, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 52, 54, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 52, 55, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 52, 56, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 52, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 53, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 53, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 53, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 53, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 53, 52, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 53, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 53, 54, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 53, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 116, 104, 101, 32, 98, 114, 105, 110, 107, 32, 111, 102, 32, 97, 32, 116, 104, 105, 114, 116, 121, 32, 102, 111, 111, 116, 32, 112, 105, 116, 32, 119, 105, 116, 104, 32, 97, 32, 109, 97, 115, 115, 105, 118, 101, 32, 111, 114, 97, 110, 103, 101, 32, 99, 111, 108, 117, 109, 110, 10, 53, 55, 9, 100, 111, 119, 110, 32, 111, 110, 101, 32, 119, 97, 108, 108, 46, 32, 32, 89, 111, 117, 32, 99, 111, 117, 108, 100, 32, 99, 108, 105, 109, 98, 32, 100, 111, 119, 110, 32, 104, 101, 114, 101, 32, 98, 117, 116, 32, 121, 111, 117, 32, 99, 111, 117, 108, 100, 32, 110, 111, 116, 32, 103, 101, 116, 32, 98, 97, 99, 107, 10, 53, 55, 9, 117, 112, 46, 32, 32, 84, 104, 101, 32, 109, 97, 122, 101, 32, 99, 111, 110, 116, 105, 110, 117, 101, 115, 32, 97, 116, 32, 116, 104, 105, 115, 32, 108, 101, 118, 101, 108, 46, 10, 53, 56, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 53, 57, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 99, 114, 97, 119, 108, 101, 100, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 118, 101, 114, 121, 32, 108, 111, 119, 32, 119, 105, 100, 101, 32, 112, 97, 115, 115, 97, 103, 101, 32, 112, 97, 114, 97, 108, 108, 101, 108, 32, 116, 111, 32, 97, 110, 100, 32, 110, 111, 114, 116, 104, 10, 53, 57, 9, 111, 102, 32, 116, 104, 101, 32, 72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 115, 116, 115, 46, 10, 54, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 101, 97, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 97, 32, 118, 101, 114, 121, 32, 108, 111, 110, 103, 32, 104, 97, 108, 108, 32, 97, 112, 112, 97, 114, 101, 110, 116, 108, 121, 32, 119, 105, 116, 104, 111, 117, 116, 32, 115, 105, 100, 101, 10, 54, 48, 9, 99, 104, 97, 109, 98, 101, 114, 115, 46, 32, 32, 84, 111, 32, 116, 104, 101, 32, 101, 97, 115, 116, 32, 97, 32, 108, 111, 119, 32, 119, 105, 100, 101, 32, 99, 114, 97, 119, 108, 32, 115, 108, 97, 110, 116, 115, 32, 117, 112, 46, 32, 32, 84, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 32, 97, 10, 54, 48, 9, 114, 111, 117, 110, 100, 32, 116, 119, 111, 32, 102, 111, 111, 116, 32, 104, 111, 108, 101, 32, 115, 108, 97, 110, 116, 115, 32, 100, 111, 119, 110, 46, 10, 54, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 97, 32, 118, 101, 114, 121, 32, 108, 111, 110, 103, 32, 102, 101, 97, 116, 117, 114, 101, 108, 101, 115, 115, 32, 104, 97, 108, 108, 46, 32, 32, 84, 104, 101, 32, 104, 97, 108, 108, 10, 54, 49, 9, 106, 111, 105, 110, 115, 32, 117, 112, 32, 119, 105, 116, 104, 32, 97, 32, 110, 97, 114, 114, 111, 119, 32, 110, 111, 114, 116, 104, 47, 115, 111, 117, 116, 104, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 54, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 97, 32, 99, 114, 111, 115, 115, 111, 118, 101, 114, 32, 111, 102, 32, 97, 32, 104, 105, 103, 104, 32, 110, 47, 115, 32, 112, 97, 115, 115, 97, 103, 101, 32, 97, 110, 100, 32, 97, 32, 108, 111, 119, 32, 101, 47, 119, 32, 111, 110, 101, 46, 10, 54, 51, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 54, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 97, 32, 99, 111, 109, 112, 108, 101, 120, 32, 106, 117, 110, 99, 116, 105, 111, 110, 46, 32, 32, 65, 32, 108, 111, 119, 32, 104, 97, 110, 100, 115, 32, 97, 110, 100, 32, 107, 110, 101, 101, 115, 32, 112, 97, 115, 115, 97, 103, 101, 32, 102, 114, 111, 109, 32, 116, 104, 101, 10, 54, 52, 9, 110, 111, 114, 116, 104, 32, 106, 111, 105, 110, 115, 32, 97, 32, 104, 105, 103, 104, 101, 114, 32, 99, 114, 97, 119, 108, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 101, 97, 115, 116, 32, 116, 111, 32, 109, 97, 107, 101, 32, 97, 32, 119, 97, 108, 107, 105, 110, 103, 32, 112, 97, 115, 115, 97, 103, 101, 10, 54, 52, 9, 103, 111, 105, 110, 103, 32, 119, 101, 115, 116, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 108, 115, 111, 32, 97, 32, 108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 32, 97, 98, 111, 118, 101, 46, 32, 32, 84, 104, 101, 32, 97, 105, 114, 32, 105, 115, 32, 100, 97, 109, 112, 32, 104, 101, 114, 101, 46, 10, 54, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 66, 101, 100, 113, 117, 105, 108, 116, 44, 32, 97, 32, 108, 111, 110, 103, 32, 101, 97, 115, 116, 47, 119, 101, 115, 116, 32, 112, 97, 115, 115, 97, 103, 101, 32, 119, 105, 116, 104, 32, 104, 111, 108, 101, 115, 32, 101, 118, 101, 114, 121, 119, 104, 101, 114, 101, 46, 10, 54, 53, 9, 84, 111, 32, 101, 120, 112, 108, 111, 114, 101, 32, 97, 116, 32, 114, 97, 110, 100, 111, 109, 32, 115, 101, 108, 101, 99, 116, 32, 110, 111, 114, 116, 104, 44, 32, 115, 111, 117, 116, 104, 44, 32, 117, 112, 44, 32, 111, 114, 32, 100, 111, 119, 110, 46, 10, 54, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 114, 111, 111, 109, 32, 119, 104, 111, 115, 101, 32, 119, 97, 108, 108, 115, 32, 114, 101, 115, 101, 109, 98, 108, 101, 32, 115, 119, 105, 115, 115, 32, 99, 104, 101, 101, 115, 101, 46, 32, 32, 79, 98, 118, 105, 111, 117, 115, 32, 112, 97, 115, 115, 97, 103, 101, 115, 10, 54, 54, 9, 103, 111, 32, 119, 101, 115, 116, 44, 32, 101, 97, 115, 116, 44, 32, 110, 101, 44, 32, 97, 110, 100, 32, 110, 119, 46, 32, 32, 80, 97, 114, 116, 32, 111, 102, 32, 116, 104, 101, 32, 114, 111, 111, 109, 32, 105, 115, 32, 111, 99, 99, 117, 112, 105, 101, 100, 32, 98, 121, 32, 97, 32, 108, 97, 114, 103, 101, 10, 54, 54, 9, 98, 101, 100, 114, 111, 99, 107, 32, 98, 108, 111, 99, 107, 46, 10, 54, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 101, 97, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 84, 119, 111, 112, 105, 116, 32, 82, 111, 111, 109, 46, 32, 32, 84, 104, 101, 32, 102, 108, 111, 111, 114, 32, 104, 101, 114, 101, 32, 105, 115, 10, 54, 55, 9, 108, 105, 116, 116, 101, 114, 101, 100, 32, 119, 105, 116, 104, 32, 116, 104, 105, 110, 32, 114, 111, 99, 107, 32, 115, 108, 97, 98, 115, 44, 32, 119, 104, 105, 99, 104, 32, 109, 97, 107, 101, 32, 105, 116, 32, 101, 97, 115, 121, 32, 116, 111, 32, 100, 101, 115, 99, 101, 110, 100, 32, 116, 104, 101, 32, 112, 105, 116, 115, 46, 10, 54, 55, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 112, 97, 116, 104, 32, 104, 101, 114, 101, 32, 98, 121, 112, 97, 115, 115, 105, 110, 103, 32, 116, 104, 101, 32, 112, 105, 116, 115, 32, 116, 111, 32, 99, 111, 110, 110, 101, 99, 116, 32, 112, 97, 115, 115, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 101, 97, 115, 116, 10, 54, 55, 9, 97, 110, 100, 32, 119, 101, 115, 116, 46, 32, 32, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 104, 111, 108, 101, 115, 32, 97, 108, 108, 32, 111, 118, 101, 114, 44, 32, 98, 117, 116, 32, 116, 104, 101, 32, 111, 110, 108, 121, 32, 98, 105, 103, 32, 111, 110, 101, 32, 105, 115, 32, 111, 110, 32, 116, 104, 101, 10, 54, 55, 9, 119, 97, 108, 108, 32, 100, 105, 114, 101, 99, 116, 108, 121, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 112, 105, 116, 32, 119, 104, 101, 114, 101, 32, 121, 111, 117, 32, 99, 97, 110, 39, 116, 32, 103, 101, 116, 32, 116, 111, 32, 105, 116, 46, 10, 54, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 108, 111, 119, 32, 99, 105, 114, 99, 117, 108, 97, 114, 32, 99, 104, 97, 109, 98, 101, 114, 32, 119, 104, 111, 115, 101, 32, 102, 108, 111, 111, 114, 32, 105, 115, 32, 97, 110, 32, 105, 109, 109, 101, 110, 115, 101, 32, 115, 108, 97, 98, 10, 54, 56, 9, 102, 97, 108, 108, 101, 110, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 99, 101, 105, 108, 105, 110, 103, 32, 40, 83, 108, 97, 98, 32, 82, 111, 111, 109, 41, 46, 32, 32, 69, 97, 115, 116, 32, 97, 110, 100, 32, 119, 101, 115, 116, 32, 116, 104, 101, 114, 101, 32, 111, 110, 99, 101, 32, 119, 101, 114, 101, 10, 54, 56, 9, 108, 97, 114, 103, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 98, 117, 116, 32, 116, 104, 101, 121, 32, 97, 114, 101, 32, 110, 111, 119, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 98, 111, 117, 108, 100, 101, 114, 115, 46, 32, 32, 76, 111, 119, 32, 115, 109, 97, 108, 108, 10, 54, 56, 9, 112, 97, 115, 115, 97, 103, 101, 115, 32, 103, 111, 32, 110, 111, 114, 116, 104, 32, 97, 110, 100, 32, 115, 111, 117, 116, 104, 44, 32, 97, 110, 100, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 32, 111, 110, 101, 32, 113, 117, 105, 99, 107, 108, 121, 32, 98, 101, 110, 100, 115, 32, 119, 101, 115, 116, 10, 54, 56, 9, 97, 114, 111, 117, 110, 100, 32, 116, 104, 101, 32, 98, 111, 117, 108, 100, 101, 114, 115, 46, 10, 54, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 101, 99, 114, 101, 116, 32, 110, 47, 115, 32, 99, 97, 110, 121, 111, 110, 32, 97, 98, 111, 118, 101, 32, 97, 32, 108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 46, 10, 55, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 101, 99, 114, 101, 116, 32, 110, 47, 115, 32, 99, 97, 110, 121, 111, 110, 32, 97, 98, 111, 118, 101, 32, 97, 32, 115, 105, 122, 97, 98, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 55, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 101, 99, 114, 101, 116, 32, 99, 97, 110, 121, 111, 110, 32, 97, 116, 32, 97, 32, 106, 117, 110, 99, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 114, 101, 101, 32, 99, 97, 110, 121, 111, 110, 115, 44, 32, 98, 101, 97, 114, 105, 110, 103, 10, 55, 49, 9, 110, 111, 114, 116, 104, 44, 32, 115, 111, 117, 116, 104, 44, 32, 97, 110, 100, 32, 115, 101, 46, 32, 32, 84, 104, 101, 32, 110, 111, 114, 116, 104, 32, 111, 110, 101, 32, 105, 115, 32, 97, 115, 32, 116, 97, 108, 108, 32, 97, 115, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 116, 119, 111, 10, 55, 49, 9, 99, 111, 109, 98, 105, 110, 101, 100, 46, 10, 55, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 108, 111, 119, 32, 114, 111, 111, 109, 46, 32, 32, 67, 114, 97, 119, 108, 115, 32, 108, 101, 97, 100, 32, 110, 111, 114, 116, 104, 44, 32, 115, 101, 44, 32, 97, 110, 100, 32, 115, 119, 46, 10, 55, 51, 9, 68, 101, 97, 100, 32, 101, 110, 100, 32, 99, 114, 97, 119, 108, 46, 10, 55, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 101, 99, 114, 101, 116, 32, 99, 97, 110, 121, 111, 110, 32, 119, 104, 105, 99, 104, 32, 104, 101, 114, 101, 32, 114, 117, 110, 115, 32, 101, 47, 119, 46, 32, 32, 73, 116, 32, 99, 114, 111, 115, 115, 101, 115, 32, 111, 118, 101, 114, 32, 97, 10, 55, 52, 9, 118, 101, 114, 121, 32, 116, 105, 103, 104, 116, 32, 99, 97, 110, 121, 111, 110, 32, 49, 53, 32, 102, 101, 101, 116, 32, 98, 101, 108, 111, 119, 46, 32, 32, 73, 102, 32, 121, 111, 117, 32, 103, 111, 32, 100, 111, 119, 110, 32, 121, 111, 117, 32, 109, 97, 121, 32, 110, 111, 116, 32, 98, 101, 32, 97, 98, 108, 101, 10, 55, 52, 9, 116, 111, 32, 103, 101, 116, 32, 98, 97, 99, 107, 32, 117, 112, 46, 10, 55, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 97, 32, 119, 105, 100, 101, 32, 112, 108, 97, 99, 101, 32, 105, 110, 32, 97, 32, 118, 101, 114, 121, 32, 116, 105, 103, 104, 116, 32, 110, 47, 115, 32, 99, 97, 110, 121, 111, 110, 46, 10, 55, 54, 9, 84, 104, 101, 32, 99, 97, 110, 121, 111, 110, 32, 104, 101, 114, 101, 32, 98, 101, 99, 111, 109, 101, 115, 32, 116, 111, 111, 32, 116, 105, 103, 104, 116, 32, 116, 111, 32, 103, 111, 32, 102, 117, 114, 116, 104, 101, 114, 32, 115, 111, 117, 116, 104, 46, 10, 55, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 116, 97, 108, 108, 32, 101, 47, 119, 32, 99, 97, 110, 121, 111, 110, 46, 32, 32, 65, 32, 108, 111, 119, 32, 116, 105, 103, 104, 116, 32, 99, 114, 97, 119, 108, 32, 103, 111, 101, 115, 32, 51, 32, 102, 101, 101, 116, 32, 110, 111, 114, 116, 104, 32, 97, 110, 100, 10, 55, 55, 9, 115, 101, 101, 109, 115, 32, 116, 111, 32, 111, 112, 101, 110, 32, 117, 112, 46, 10, 55, 56, 9, 84, 104, 101, 32, 99, 97, 110, 121, 111, 110, 32, 114, 117, 110, 115, 32, 105, 110, 116, 111, 32, 97, 32, 109, 97, 115, 115, 32, 111, 102, 32, 98, 111, 117, 108, 100, 101, 114, 115, 32, 45, 45, 32, 100, 101, 97, 100, 32, 101, 110, 100, 46, 10, 55, 57, 9, 84, 104, 101, 32, 115, 116, 114, 101, 97, 109, 32, 102, 108, 111, 119, 115, 32, 111, 117, 116, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 112, 97, 105, 114, 32, 111, 102, 32, 49, 32, 102, 111, 111, 116, 32, 100, 105, 97, 109, 101, 116, 101, 114, 32, 115, 101, 119, 101, 114, 32, 112, 105, 112, 101, 115, 46, 10, 55, 57, 9, 73, 116, 32, 119, 111, 117, 108, 100, 32, 98, 101, 32, 97, 100, 118, 105, 115, 97, 98, 108, 101, 32, 116, 111, 32, 117, 115, 101, 32, 116, 104, 101, 32, 101, 120, 105, 116, 46, 10, 56, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 56, 49, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 56, 50, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 56, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 56, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 56, 53, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 56, 54, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 56, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 97, 108, 105, 107, 101, 46, 10, 56, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 111, 110, 103, 44, 32, 110, 97, 114, 114, 111, 119, 32, 99, 111, 114, 114, 105, 100, 111, 114, 32, 115, 116, 114, 101, 116, 99, 104, 105, 110, 103, 32, 111, 117, 116, 32, 111, 102, 32, 115, 105, 103, 104, 116, 32, 116, 111, 32, 116, 104, 101, 10, 56, 56, 9, 119, 101, 115, 116, 46, 32, 32, 65, 116, 32, 116, 104, 101, 32, 101, 97, 115, 116, 101, 114, 110, 32, 101, 110, 100, 32, 105, 115, 32, 97, 32, 104, 111, 108, 101, 32, 116, 104, 114, 111, 117, 103, 104, 32, 119, 104, 105, 99, 104, 32, 121, 111, 117, 32, 99, 97, 110, 32, 115, 101, 101, 32, 97, 10, 56, 56, 9, 112, 114, 111, 102, 117, 115, 105, 111, 110, 32, 111, 102, 32, 108, 101, 97, 118, 101, 115, 46, 10, 56, 57, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 104, 101, 114, 101, 32, 116, 111, 32, 99, 108, 105, 109, 98, 46, 32, 32, 85, 115, 101, 32, 34, 117, 112, 34, 32, 111, 114, 32, 34, 111, 117, 116, 34, 32, 116, 111, 32, 108, 101, 97, 118, 101, 32, 116, 104, 101, 32, 112, 105, 116, 46, 10, 57, 48, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 99, 108, 105, 109, 98, 101, 100, 32, 117, 112, 32, 116, 104, 101, 32, 112, 108, 97, 110, 116, 32, 97, 110, 100, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 116, 46, 10, 57, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 115, 116, 101, 101, 112, 32, 105, 110, 99, 108, 105, 110, 101, 32, 97, 98, 111, 118, 101, 32, 97, 32, 108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 46, 32, 32, 89, 111, 117, 32, 99, 111, 117, 108, 100, 10, 57, 49, 9, 99, 108, 105, 109, 98, 32, 100, 111, 119, 110, 32, 104, 101, 114, 101, 44, 32, 98, 117, 116, 32, 121, 111, 117, 32, 119, 111, 117, 108, 100, 32, 110, 111, 116, 32, 98, 101, 32, 97, 98, 108, 101, 32, 116, 111, 32, 99, 108, 105, 109, 98, 32, 117, 112, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 10, 57, 49, 9, 112, 97, 115, 115, 97, 103, 101, 32, 108, 101, 97, 100, 105, 110, 103, 32, 98, 97, 99, 107, 32, 116, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 46, 10, 57, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 71, 105, 97, 110, 116, 32, 82, 111, 111, 109, 46, 32, 32, 84, 104, 101, 32, 99, 101, 105, 108, 105, 110, 103, 32, 104, 101, 114, 101, 32, 105, 115, 32, 116, 111, 111, 32, 104, 105, 103, 104, 32, 117, 112, 32, 102, 111, 114, 32, 121, 111, 117, 114, 10, 57, 50, 9, 108, 97, 109, 112, 32, 116, 111, 32, 115, 104, 111, 119, 32, 105, 116, 46, 32, 32, 67, 97, 118, 101, 114, 110, 111, 117, 115, 32, 112, 97, 115, 115, 97, 103, 101, 115, 32, 108, 101, 97, 100, 32, 101, 97, 115, 116, 44, 32, 110, 111, 114, 116, 104, 44, 32, 97, 110, 100, 32, 115, 111, 117, 116, 104, 46, 32, 32, 79, 110, 10, 57, 50, 9, 116, 104, 101, 32, 119, 101, 115, 116, 32, 119, 97, 108, 108, 32, 105, 115, 32, 115, 99, 114, 97, 119, 108, 101, 100, 32, 116, 104, 101, 32, 105, 110, 115, 99, 114, 105, 112, 116, 105, 111, 110, 44, 32, 34, 70, 69, 69, 32, 70, 73, 69, 32, 70, 79, 69, 32, 70, 79, 79, 34, 32, 91, 115, 105, 99, 93, 46, 10, 57, 51, 9, 84, 104, 101, 32, 112, 97, 115, 115, 97, 103, 101, 32, 104, 101, 114, 101, 32, 105, 115, 32, 98, 108, 111, 99, 107, 101, 100, 32, 98, 121, 32, 97, 32, 114, 101, 99, 101, 110, 116, 32, 99, 97, 118, 101, 45, 105, 110, 46, 10, 57, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 111, 110, 101, 32, 101, 110, 100, 32, 111, 102, 32, 97, 110, 32, 105, 109, 109, 101, 110, 115, 101, 32, 110, 111, 114, 116, 104, 47, 115, 111, 117, 116, 104, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 57, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 103, 110, 105, 102, 105, 99, 101, 110, 116, 32, 99, 97, 118, 101, 114, 110, 32, 119, 105, 116, 104, 32, 97, 32, 114, 117, 115, 104, 105, 110, 103, 32, 115, 116, 114, 101, 97, 109, 44, 32, 119, 104, 105, 99, 104, 32, 99, 97, 115, 99, 97, 100, 101, 115, 10, 57, 53, 9, 111, 118, 101, 114, 32, 97, 32, 115, 112, 97, 114, 107, 108, 105, 110, 103, 32, 119, 97, 116, 101, 114, 102, 97, 108, 108, 32, 105, 110, 116, 111, 32, 97, 32, 114, 111, 97, 114, 105, 110, 103, 32, 119, 104, 105, 114, 108, 112, 111, 111, 108, 32, 119, 104, 105, 99, 104, 32, 100, 105, 115, 97, 112, 112, 101, 97, 114, 115, 10, 57, 53, 9, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 104, 111, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 46, 32, 32, 80, 97, 115, 115, 97, 103, 101, 115, 32, 101, 120, 105, 116, 32, 116, 111, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 32, 97, 110, 100, 32, 119, 101, 115, 116, 46, 10, 57, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 83, 111, 102, 116, 32, 82, 111, 111, 109, 46, 32, 32, 84, 104, 101, 32, 119, 97, 108, 108, 115, 32, 97, 114, 101, 32, 99, 111, 118, 101, 114, 101, 100, 32, 119, 105, 116, 104, 32, 104, 101, 97, 118, 121, 32, 99, 117, 114, 116, 97, 105, 110, 115, 44, 10, 57, 54, 9, 116, 104, 101, 32, 102, 108, 111, 111, 114, 32, 119, 105, 116, 104, 32, 97, 32, 116, 104, 105, 99, 107, 32, 112, 105, 108, 101, 32, 99, 97, 114, 112, 101, 116, 46, 32, 32, 77, 111, 115, 115, 32, 99, 111, 118, 101, 114, 115, 32, 116, 104, 101, 32, 99, 101, 105, 108, 105, 110, 103, 46, 10, 57, 55, 9, 84, 104, 105, 115, 32, 105, 115, 32, 116, 104, 101, 32, 79, 114, 105, 101, 110, 116, 97, 108, 32, 82, 111, 111, 109, 46, 32, 32, 65, 110, 99, 105, 101, 110, 116, 32, 111, 114, 105, 101, 110, 116, 97, 108, 32, 99, 97, 118, 101, 32, 100, 114, 97, 119, 105, 110, 103, 115, 32, 99, 111, 118, 101, 114, 32, 116, 104, 101, 10, 57, 55, 9, 119, 97, 108, 108, 115, 46, 32, 32, 65, 32, 103, 101, 110, 116, 108, 121, 32, 115, 108, 111, 112, 105, 110, 103, 32, 112, 97, 115, 115, 97, 103, 101, 32, 108, 101, 97, 100, 115, 32, 117, 112, 119, 97, 114, 100, 32, 116, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 44, 32, 97, 110, 111, 116, 104, 101, 114, 10, 57, 55, 9, 112, 97, 115, 115, 97, 103, 101, 32, 108, 101, 97, 100, 115, 32, 115, 101, 44, 32, 97, 110, 100, 32, 97, 32, 104, 97, 110, 100, 115, 32, 97, 110, 100, 32, 107, 110, 101, 101, 115, 32, 99, 114, 97, 119, 108, 32, 108, 101, 97, 100, 115, 32, 119, 101, 115, 116, 46, 10, 57, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 97, 32, 119, 105, 100, 101, 32, 112, 97, 116, 104, 32, 97, 114, 111, 117, 110, 100, 32, 116, 104, 101, 32, 111, 117, 116, 101, 114, 32, 101, 100, 103, 101, 32, 111, 102, 32, 97, 32, 108, 97, 114, 103, 101, 32, 99, 97, 118, 101, 114, 110, 46, 10, 57, 56, 9, 70, 97, 114, 32, 98, 101, 108, 111, 119, 44, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 104, 101, 97, 118, 121, 32, 119, 104, 105, 116, 101, 32, 109, 105, 115, 116, 44, 32, 115, 116, 114, 97, 110, 103, 101, 32, 115, 112, 108, 97, 115, 104, 105, 110, 103, 32, 110, 111, 105, 115, 101, 115, 32, 99, 97, 110, 32, 98, 101, 10, 57, 56, 9, 104, 101, 97, 114, 100, 46, 32, 32, 84, 104, 101, 32, 109, 105, 115, 116, 32, 114, 105, 115, 101, 115, 32, 117, 112, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 102, 105, 115, 115, 117, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 99, 101, 105, 108, 105, 110, 103, 46, 32, 32, 84, 104, 101, 32, 112, 97, 116, 104, 10, 57, 56, 9, 101, 120, 105, 116, 115, 32, 116, 111, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 32, 97, 110, 100, 32, 119, 101, 115, 116, 46, 10, 57, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32]); | |
fileData0.push.apply(fileData0, [97, 110, 32, 97, 108, 99, 111, 118, 101, 46, 32, 32, 65, 32, 115, 109, 97, 108, 108, 32, 110, 119, 32, 112, 97, 116, 104, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 119, 105, 100, 101, 110, 32, 97, 102, 116, 101, 114, 32, 97, 32, 115, 104, 111, 114, 116, 10, 57, 57, 9, 100, 105, 115, 116, 97, 110, 99, 101, 46, 32, 32, 65, 110, 32, 101, 120, 116, 114, 101, 109, 101, 108, 121, 32, 116, 105, 103, 104, 116, 32, 116, 117, 110, 110, 101, 108, 32, 108, 101, 97, 100, 115, 32, 101, 97, 115, 116, 46, 32, 32, 73, 116, 32, 108, 111, 111, 107, 115, 32, 108, 105, 107, 101, 32, 97, 32, 118, 101, 114, 121, 10, 57, 57, 9, 116, 105, 103, 104, 116, 32, 115, 113, 117, 101, 101, 122, 101, 46, 32, 32, 65, 110, 32, 101, 101, 114, 105, 101, 32, 108, 105, 103, 104, 116, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 101, 110, 32, 97, 116, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 101, 110, 100, 46, 10, 49, 48, 48, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 104, 97, 109, 98, 101, 114, 32, 108, 105, 116, 32, 98, 121, 32, 97, 110, 32, 101, 101, 114, 105, 101, 32, 103, 114, 101, 101, 110, 32, 108, 105, 103, 104, 116, 46, 32, 32, 65, 110, 32, 101, 120, 116, 114, 101, 109, 101, 108, 121, 10, 49, 48, 48, 9, 110, 97, 114, 114, 111, 119, 32, 116, 117, 110, 110, 101, 108, 32, 101, 120, 105, 116, 115, 32, 116, 111, 32, 116, 104, 101, 32, 119, 101, 115, 116, 46, 32, 32, 65, 32, 100, 97, 114, 107, 32, 99, 111, 114, 114, 105, 100, 111, 114, 32, 108, 101, 97, 100, 115, 32, 110, 101, 46, 10, 49, 48, 49, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 100, 97, 114, 107, 45, 114, 111, 111, 109, 46, 32, 32, 65, 32, 99, 111, 114, 114, 105, 100, 111, 114, 32, 108, 101, 97, 100, 105, 110, 103, 32, 115, 111, 117, 116, 104, 32, 105, 115, 32, 116, 104, 101, 32, 111, 110, 108, 121, 32, 101, 120, 105, 116, 46, 10, 49, 48, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 110, 32, 97, 114, 99, 104, 101, 100, 32, 104, 97, 108, 108, 46, 32, 32, 65, 32, 99, 111, 114, 97, 108, 32, 112, 97, 115, 115, 97, 103, 101, 32, 111, 110, 99, 101, 32, 99, 111, 110, 116, 105, 110, 117, 101, 100, 32, 117, 112, 32, 97, 110, 100, 32, 101, 97, 115, 116, 10, 49, 48, 50, 9, 102, 114, 111, 109, 32, 104, 101, 114, 101, 44, 32, 98, 117, 116, 32, 105, 115, 32, 110, 111, 119, 32, 98, 108, 111, 99, 107, 101, 100, 32, 98, 121, 32, 100, 101, 98, 114, 105, 115, 46, 32, 32, 84, 104, 101, 32, 97, 105, 114, 32, 115, 109, 101, 108, 108, 115, 32, 111, 102, 32, 115, 101, 97, 32, 119, 97, 116, 101, 114, 46, 10, 49, 48, 51, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 32, 99, 97, 114, 118, 101, 100, 32, 111, 117, 116, 32, 111, 102, 32, 115, 101, 100, 105, 109, 101, 110, 116, 97, 114, 121, 32, 114, 111, 99, 107, 46, 32, 32, 84, 104, 101, 32, 102, 108, 111, 111, 114, 32, 97, 110, 100, 10, 49, 48, 51, 9, 119, 97, 108, 108, 115, 32, 97, 114, 101, 32, 108, 105, 116, 116, 101, 114, 101, 100, 32, 119, 105, 116, 104, 32, 98, 105, 116, 115, 32, 111, 102, 32, 115, 104, 101, 108, 108, 115, 32, 105, 109, 98, 101, 100, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 115, 116, 111, 110, 101, 46, 32, 32, 65, 10, 49, 48, 51, 9, 115, 104, 97, 108, 108, 111, 119, 32, 112, 97, 115, 115, 97, 103, 101, 32, 112, 114, 111, 99, 101, 101, 100, 115, 32, 100, 111, 119, 110, 119, 97, 114, 100, 44, 32, 97, 110, 100, 32, 97, 32, 115, 111, 109, 101, 119, 104, 97, 116, 32, 115, 116, 101, 101, 112, 101, 114, 32, 111, 110, 101, 32, 108, 101, 97, 100, 115, 10, 49, 48, 51, 9, 117, 112, 46, 32, 32, 65, 32, 108, 111, 119, 32, 104, 97, 110, 100, 115, 32, 97, 110, 100, 32, 107, 110, 101, 101, 115, 32, 112, 97, 115, 115, 97, 103, 101, 32, 101, 110, 116, 101, 114, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 46, 10, 49, 48, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 111, 110, 103, 32, 115, 108, 111, 112, 105, 110, 103, 32, 99, 111, 114, 114, 105, 100, 111, 114, 32, 119, 105, 116, 104, 32, 114, 97, 103, 103, 101, 100, 32, 115, 104, 97, 114, 112, 32, 119, 97, 108, 108, 115, 46, 10, 49, 48, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 99, 117, 108, 45, 100, 101, 45, 115, 97, 99, 32, 97, 98, 111, 117, 116, 32, 101, 105, 103, 104, 116, 32, 102, 101, 101, 116, 32, 97, 99, 114, 111, 115, 115, 46, 10, 49, 48, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 110, 32, 97, 110, 116, 101, 114, 111, 111, 109, 32, 108, 101, 97, 100, 105, 110, 103, 32, 116, 111, 32, 97, 32, 108, 97, 114, 103, 101, 32, 112, 97, 115, 115, 97, 103, 101, 32, 116, 111, 32, 116, 104, 101, 32, 101, 97, 115, 116, 46, 32, 32, 83, 109, 97, 108, 108, 10, 49, 48, 54, 9, 112, 97, 115, 115, 97, 103, 101, 115, 32, 103, 111, 32, 119, 101, 115, 116, 32, 97, 110, 100, 32, 117, 112, 46, 32, 32, 84, 104, 101, 32, 114, 101, 109, 110, 97, 110, 116, 115, 32, 111, 102, 32, 114, 101, 99, 101, 110, 116, 32, 100, 105, 103, 103, 105, 110, 103, 32, 97, 114, 101, 32, 101, 118, 105, 100, 101, 110, 116, 46, 10, 49, 48, 54, 9, 65, 32, 115, 105, 103, 110, 32, 105, 110, 32, 109, 105, 100, 97, 105, 114, 32, 104, 101, 114, 101, 32, 115, 97, 121, 115, 32, 34, 67, 97, 118, 101, 32, 117, 110, 100, 101, 114, 32, 99, 111, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 32, 98, 101, 121, 111, 110, 100, 32, 116, 104, 105, 115, 32, 112, 111, 105, 110, 116, 46, 10, 49, 48, 54, 9, 80, 114, 111, 99, 101, 101, 100, 32, 97, 116, 32, 111, 119, 110, 32, 114, 105, 115, 107, 46, 32, 32, 91, 87, 105, 116, 116, 32, 67, 111, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 32, 67, 111, 109, 112, 97, 110, 121, 93, 34, 10, 49, 48, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 48, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 87, 105, 116, 116, 39, 115, 32, 69, 110, 100, 46, 32, 32, 80, 97, 115, 115, 97, 103, 101, 115, 32, 108, 101, 97, 100, 32, 111, 102, 102, 32, 105, 110, 32, 42, 65, 76, 76, 42, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 115, 46, 10, 49, 48, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 110, 111, 114, 116, 104, 47, 115, 111, 117, 116, 104, 32, 99, 97, 110, 121, 111, 110, 32, 97, 98, 111, 117, 116, 32, 50, 53, 32, 102, 101, 101, 116, 32, 97, 99, 114, 111, 115, 115, 46, 32, 32, 84, 104, 101, 32, 102, 108, 111, 111, 114, 32, 105, 115, 10, 49, 48, 57, 9, 99, 111, 118, 101, 114, 101, 100, 32, 98, 121, 32, 119, 104, 105, 116, 101, 32, 109, 105, 115, 116, 32, 115, 101, 101, 112, 105, 110, 103, 32, 105, 110, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 46, 32, 32, 84, 104, 101, 32, 119, 97, 108, 108, 115, 32, 101, 120, 116, 101, 110, 100, 10, 49, 48, 57, 9, 117, 112, 119, 97, 114, 100, 32, 102, 111, 114, 32, 119, 101, 108, 108, 32, 111, 118, 101, 114, 32, 49, 48, 48, 32, 102, 101, 101, 116, 46, 32, 32, 83, 117, 115, 112, 101, 110, 100, 101, 100, 32, 102, 114, 111, 109, 32, 115, 111, 109, 101, 32, 117, 110, 115, 101, 101, 110, 32, 112, 111, 105, 110, 116, 32, 102, 97, 114, 10, 49, 48, 57, 9, 97, 98, 111, 118, 101, 32, 121, 111, 117, 44, 32, 97, 110, 32, 101, 110, 111, 114, 109, 111, 117, 115, 32, 116, 119, 111, 45, 115, 105, 100, 101, 100, 32, 109, 105, 114, 114, 111, 114, 32, 105, 115, 32, 104, 97, 110, 103, 105, 110, 103, 32, 112, 97, 114, 97, 108, 108, 101, 108, 32, 116, 111, 32, 97, 110, 100, 10, 49, 48, 57, 9, 109, 105, 100, 119, 97, 121, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 104, 101, 32, 99, 97, 110, 121, 111, 110, 32, 119, 97, 108, 108, 115, 46, 32, 32, 40, 84, 104, 101, 32, 109, 105, 114, 114, 111, 114, 32, 105, 115, 32, 111, 98, 118, 105, 111, 117, 115, 108, 121, 32, 112, 114, 111, 118, 105, 100, 101, 100, 10, 49, 48, 57, 9, 102, 111, 114, 32, 116, 104, 101, 32, 117, 115, 101, 32, 111, 102, 32, 116, 104, 101, 32, 100, 119, 97, 114, 118, 101, 115, 32, 119, 104, 111, 44, 32, 97, 115, 32, 121, 111, 117, 32, 107, 110, 111, 119, 44, 32, 97, 114, 101, 32, 101, 120, 116, 114, 101, 109, 101, 108, 121, 32, 118, 97, 105, 110, 46, 41, 32, 32, 65, 10, 49, 48, 57, 9, 115, 109, 97, 108, 108, 32, 119, 105, 110, 100, 111, 119, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 101, 110, 32, 105, 110, 32, 101, 105, 116, 104, 101, 114, 32, 119, 97, 108, 108, 44, 32, 115, 111, 109, 101, 32, 102, 105, 102, 116, 121, 32, 102, 101, 101, 116, 32, 117, 112, 46, 10, 49, 49, 48, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 97, 32, 108, 111, 119, 32, 119, 105, 110, 100, 111, 119, 32, 111, 118, 101, 114, 108, 111, 111, 107, 105, 110, 103, 32, 97, 32, 104, 117, 103, 101, 32, 112, 105, 116, 44, 32, 119, 104, 105, 99, 104, 32, 101, 120, 116, 101, 110, 100, 115, 32, 117, 112, 32, 111, 117, 116, 32, 111, 102, 10, 49, 49, 48, 9, 115, 105, 103, 104, 116, 46, 32, 32, 65, 32, 102, 108, 111, 111, 114, 32, 105, 115, 32, 105, 110, 100, 105, 115, 116, 105, 110, 99, 116, 108, 121, 32, 118, 105, 115, 105, 98, 108, 101, 32, 111, 118, 101, 114, 32, 53, 48, 32, 102, 101, 101, 116, 32, 98, 101, 108, 111, 119, 46, 32, 32, 84, 114, 97, 99, 101, 115, 32, 111, 102, 10, 49, 49, 48, 9, 119, 104, 105, 116, 101, 32, 109, 105, 115, 116, 32, 99, 111, 118, 101, 114, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 116, 44, 32, 98, 101, 99, 111, 109, 105, 110, 103, 32, 116, 104, 105, 99, 107, 101, 114, 32, 116, 111, 32, 116, 104, 101, 32, 108, 101, 102, 116, 46, 10, 49, 49, 48, 9, 77, 97, 114, 107, 115, 32, 105, 110, 32, 116, 104, 101, 32, 100, 117, 115, 116, 32, 97, 114, 111, 117, 110, 100, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 32, 119, 111, 117, 108, 100, 32, 115, 101, 101, 109, 32, 116, 111, 32, 105, 110, 100, 105, 99, 97, 116, 101, 32, 116, 104, 97, 116, 10, 49, 49, 48, 9, 115, 111, 109, 101, 111, 110, 101, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 104, 101, 114, 101, 32, 114, 101, 99, 101, 110, 116, 108, 121, 46, 32, 32, 68, 105, 114, 101, 99, 116, 108, 121, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 112, 105, 116, 32, 102, 114, 111, 109, 32, 121, 111, 117, 32, 97, 110, 100, 10, 49, 49, 48, 9, 50, 53, 32, 102, 101, 101, 116, 32, 97, 119, 97, 121, 32, 116, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 115, 105, 109, 105, 108, 97, 114, 32, 119, 105, 110, 100, 111, 119, 32, 108, 111, 111, 107, 105, 110, 103, 32, 105, 110, 116, 111, 32, 97, 32, 108, 105, 103, 104, 116, 101, 100, 32, 114, 111, 111, 109, 46, 32, 32, 65, 10, 49, 49, 48, 9, 115, 104, 97, 100, 111, 119, 121, 32, 102, 105, 103, 117, 114, 101, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 101, 110, 32, 116, 104, 101, 114, 101, 32, 112, 101, 101, 114, 105, 110, 103, 32, 98, 97, 99, 107, 32, 97, 116, 32, 121, 111, 117, 46, 10, 49, 49, 49, 9, 65, 32, 108, 97, 114, 103, 101, 32, 115, 116, 97, 108, 97, 99, 116, 105, 116, 101, 32, 101, 120, 116, 101, 110, 100, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 114, 111, 111, 102, 32, 97, 110, 100, 32, 97, 108, 109, 111, 115, 116, 32, 114, 101, 97, 99, 104, 101, 115, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 10, 49, 49, 49, 9, 98, 101, 108, 111, 119, 46, 32, 32, 89, 111, 117, 32, 99, 111, 117, 108, 100, 32, 99, 108, 105, 109, 98, 32, 100, 111, 119, 110, 32, 105, 116, 44, 32, 97, 110, 100, 32, 106, 117, 109, 112, 32, 102, 114, 111, 109, 32, 105, 116, 32, 116, 111, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 44, 32, 98, 117, 116, 10, 49, 49, 49, 9, 104, 97, 118, 105, 110, 103, 32, 100, 111, 110, 101, 32, 115, 111, 32, 121, 111, 117, 32, 119, 111, 117, 108, 100, 32, 98, 101, 32, 117, 110, 97, 98, 108, 101, 32, 116, 111, 32, 114, 101, 97, 99, 104, 32, 105, 116, 32, 116, 111, 32, 99, 108, 105, 109, 98, 32, 98, 97, 99, 107, 32, 117, 112, 46, 10, 49, 49, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 105, 110, 103, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 49, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 101, 100, 103, 101, 32, 111, 102, 32, 97, 32, 108, 97, 114, 103, 101, 32, 117, 110, 100, 101, 114, 103, 114, 111, 117, 110, 100, 32, 114, 101, 115, 101, 114, 118, 111, 105, 114, 46, 32, 32, 65, 110, 32, 111, 112, 97, 113, 117, 101, 32, 99, 108, 111, 117, 100, 10, 49, 49, 51, 9, 111, 102, 32, 119, 104, 105, 116, 101, 32, 109, 105, 115, 116, 32, 102, 105, 108, 108, 115, 32, 116, 104, 101, 32, 114, 111, 111, 109, 32, 97, 110, 100, 32, 114, 105, 115, 101, 115, 32, 114, 97, 112, 105, 100, 108, 121, 32, 117, 112, 119, 97, 114, 100, 46, 32, 32, 84, 104, 101, 32, 108, 97, 107, 101, 32, 105, 115, 10, 49, 49, 51, 9, 102, 101, 100, 32, 98, 121, 32, 97, 32, 115, 116, 114, 101, 97, 109, 44, 32, 119, 104, 105, 99, 104, 32, 116, 117, 109, 98, 108, 101, 115, 32, 111, 117, 116, 32, 111, 102, 32, 97, 32, 104, 111, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 32, 97, 98, 111, 117, 116, 32, 49, 48, 32, 102, 101, 101, 116, 10, 49, 49, 51, 9, 111, 118, 101, 114, 104, 101, 97, 100, 32, 97, 110, 100, 32, 115, 112, 108, 97, 115, 104, 101, 115, 32, 110, 111, 105, 115, 105, 108, 121, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 119, 97, 116, 101, 114, 32, 115, 111, 109, 101, 119, 104, 101, 114, 101, 32, 119, 105, 116, 104, 105, 110, 32, 116, 104, 101, 10, 49, 49, 51, 9, 109, 105, 115, 116, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 112, 97, 115, 115, 97, 103, 101, 32, 103, 111, 105, 110, 103, 32, 98, 97, 99, 107, 32, 116, 111, 119, 97, 114, 100, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 46, 10, 49, 49, 52, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 49, 49, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 101, 97, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 97, 110, 32, 105, 109, 109, 101, 110, 115, 101, 32, 114, 111, 111, 109, 44, 32, 101, 118, 101, 110, 32, 108, 97, 114, 103, 101, 114, 32, 116, 104, 97, 110, 32, 116, 104, 101, 10, 49, 49, 53, 9, 71, 105, 97, 110, 116, 32, 82, 111, 111, 109, 46, 32, 32, 73, 116, 32, 97, 112, 112, 101, 97, 114, 115, 32, 116, 111, 32, 98, 101, 32, 97, 32, 114, 101, 112, 111, 115, 105, 116, 111, 114, 121, 32, 102, 111, 114, 32, 116, 104, 101, 32, 34, 65, 100, 118, 101, 110, 116, 117, 114, 101, 34, 10, 49, 49, 53, 9, 112, 114, 111, 103, 114, 97, 109, 46, 32, 32, 77, 97, 115, 115, 105, 118, 101, 32, 116, 111, 114, 99, 104, 101, 115, 32, 102, 97, 114, 32, 111, 118, 101, 114, 104, 101, 97, 100, 32, 98, 97, 116, 104, 101, 32, 116, 104, 101, 32, 114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 115, 109, 111, 107, 121, 10, 49, 49, 53, 9, 121, 101, 108, 108, 111, 119, 32, 108, 105, 103, 104, 116, 46, 32, 32, 83, 99, 97, 116, 116, 101, 114, 101, 100, 32, 97, 98, 111, 117, 116, 32, 121, 111, 117, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 101, 110, 32, 97, 32, 112, 105, 108, 101, 32, 111, 102, 32, 98, 111, 116, 116, 108, 101, 115, 32, 40, 97, 108, 108, 10, 49, 49, 53, 9, 111, 102, 32, 116, 104, 101, 109, 32, 101, 109, 112, 116, 121, 41, 44, 32, 97, 32, 110, 117, 114, 115, 101, 114, 121, 32, 111, 102, 32, 121, 111, 117, 110, 103, 32, 98, 101, 97, 110, 115, 116, 97, 108, 107, 115, 32, 109, 117, 114, 109, 117, 114, 105, 110, 103, 32, 113, 117, 105, 101, 116, 108, 121, 44, 32, 97, 32, 98, 101, 100, 10, 49, 49, 53, 9, 111, 102, 32, 111, 121, 115, 116, 101, 114, 115, 44, 32, 97, 32, 98, 117, 110, 100, 108, 101, 32, 111, 102, 32, 98, 108, 97, 99, 107, 32, 114, 111, 100, 115, 32, 119, 105, 116, 104, 32, 114, 117, 115, 116, 121, 32, 115, 116, 97, 114, 115, 32, 111, 110, 32, 116, 104, 101, 105, 114, 32, 101, 110, 100, 115, 44, 32, 97, 110, 100, 10, 49, 49, 53, 9, 97, 32, 99, 111, 108, 108, 101, 99, 116, 105, 111, 110, 32, 111, 102, 32, 98, 114, 97, 115, 115, 32, 108, 97, 110, 116, 101, 114, 110, 115, 46, 32, 32, 79, 102, 102, 32, 116, 111, 32, 111, 110, 101, 32, 115, 105, 100, 101, 32, 97, 32, 103, 114, 101, 97, 116, 32, 109, 97, 110, 121, 32, 100, 119, 97, 114, 118, 101, 115, 10, 49, 49, 53, 9, 97, 114, 101, 32, 115, 108, 101, 101, 112, 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 44, 32, 115, 110, 111, 114, 105, 110, 103, 32, 108, 111, 117, 100, 108, 121, 46, 32, 32, 65, 32, 110, 111, 116, 105, 99, 101, 32, 110, 101, 97, 114, 98, 121, 32, 114, 101, 97, 100, 115, 58, 32, 34, 68, 111, 10, 49, 49, 53, 9, 110, 111, 116, 32, 100, 105, 115, 116, 117, 114, 98, 32, 116, 104, 101, 32, 100, 119, 97, 114, 118, 101, 115, 33, 34, 32, 32, 65, 110, 32, 105, 109, 109, 101, 110, 115, 101, 32, 109, 105, 114, 114, 111, 114, 32, 105, 115, 32, 104, 97, 110, 103, 105, 110, 103, 32, 97, 103, 97, 105, 110, 115, 116, 32, 111, 110, 101, 10, 49, 49, 53, 9, 119, 97, 108, 108, 44, 32, 97, 110, 100, 32, 115, 116, 114, 101, 116, 99, 104, 101, 115, 32, 116, 111, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 114, 111, 111, 109, 44, 32, 119, 104, 101, 114, 101, 32, 118, 97, 114, 105, 111, 117, 115, 32, 111, 116, 104, 101, 114, 10, 49, 49, 53, 9, 115, 117, 110, 100, 114, 121, 32, 111, 98, 106, 101, 99, 116, 115, 32, 99, 97, 110, 32, 98, 101, 32, 103, 108, 105, 109, 112, 115, 101, 100, 32, 100, 105, 109, 108, 121, 32, 105, 110, 32, 116, 104, 101, 32, 100, 105, 115, 116, 97, 110, 99, 101, 46, 10, 49, 49, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 119, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 114, 101, 112, 111, 115, 105, 116, 111, 114, 121, 46, 32, 32, 84, 111, 32, 111, 110, 101, 32, 115, 105, 100, 101, 32, 105, 115, 32, 97, 32, 112, 105, 116, 10, 49, 49, 54, 9, 102, 117, 108, 108, 32, 111, 102, 32, 102, 105, 101, 114, 99, 101, 32, 103, 114, 101, 101, 110, 32, 115, 110, 97, 107, 101, 115, 46, 32, 32, 79, 110, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 115, 105, 100, 101, 32, 105, 115, 32, 97, 32, 114, 111, 119, 32, 111, 102, 32, 115, 109, 97, 108, 108, 10, 49, 49, 54, 9, 119, 105, 99, 107, 101, 114, 32, 99, 97, 103, 101, 115, 44, 32, 101, 97, 99, 104, 32, 111, 102, 32, 119, 104, 105, 99, 104, 32, 99, 111, 110, 116, 97, 105, 110, 115, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 115, 117, 108, 107, 105, 110, 103, 32, 98, 105, 114, 100, 46, 32, 32, 73, 110, 32, 111, 110, 101, 10, 49, 49, 54, 9, 99, 111, 114, 110, 101, 114, 32, 105, 115, 32, 97, 32, 98, 117, 110, 100, 108, 101, 32, 111, 102, 32, 98, 108, 97, 99, 107, 32, 114, 111, 100, 115, 32, 119, 105, 116, 104, 32, 114, 117, 115, 116, 121, 32, 109, 97, 114, 107, 115, 32, 111, 110, 32, 116, 104, 101, 105, 114, 32, 101, 110, 100, 115, 46, 32, 32, 65, 10, 49, 49, 54, 9, 108, 97, 114, 103, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 118, 101, 108, 118, 101, 116, 32, 112, 105, 108, 108, 111, 119, 115, 32, 97, 114, 101, 32, 115, 99, 97, 116, 116, 101, 114, 101, 100, 32, 97, 98, 111, 117, 116, 32, 111, 110, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 46, 32, 32, 65, 10, 49, 49, 54, 9, 118, 97, 115, 116, 32, 109, 105, 114, 114, 111, 114, 32, 115, 116, 114, 101, 116, 99, 104, 101, 115, 32, 111, 102, 102, 32, 116, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 101, 97, 115, 116, 46, 32, 32, 65, 116, 32, 121, 111, 117, 114, 32, 102, 101, 101, 116, 32, 105, 115, 32, 97, 32, 108, 97, 114, 103, 101, 10, 49, 49, 54, 9, 115, 116, 101, 101, 108, 32, 103, 114, 97, 116, 101, 44, 32, 110, 101, 120, 116, 32, 116, 111, 32, 119, 104, 105, 99, 104, 32, 105, 115, 32, 97, 32, 115, 105, 103, 110, 32, 116, 104, 97, 116, 32, 114, 101, 97, 100, 115, 44, 32, 34, 84, 114, 101, 97, 115, 117, 114, 101, 32, 86, 97, 117, 108, 116, 46, 10, 49, 49, 54, 9, 75, 101, 121, 115, 32, 105, 110, 32, 109, 97, 105, 110, 32, 111, 102, 102, 105, 99, 101, 46, 34, 10, 49, 49, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 111, 110, 101, 32, 115, 105, 100, 101, 32, 111, 102, 32, 97, 32, 108, 97, 114, 103, 101, 44, 32, 100, 101, 101, 112, 32, 99, 104, 97, 115, 109, 46, 32, 32, 65, 32, 104, 101, 97, 118, 121, 32, 119, 104, 105, 116, 101, 32, 109, 105, 115, 116, 32, 114, 105, 115, 105, 110, 103, 10, 49, 49, 55, 9, 117, 112, 32, 102, 114, 111, 109, 32, 98, 101, 108, 111, 119, 32, 111, 98, 115, 99, 117, 114, 101, 115, 32, 97, 108, 108, 32, 118, 105, 101, 119, 32, 111, 102, 32, 116, 104, 101, 32, 102, 97, 114, 32, 115, 105, 100, 101, 46, 32, 32, 65, 32, 115, 119, 32, 112, 97, 116, 104, 32, 108, 101, 97, 100, 115, 32, 97, 119, 97, 121, 10, 49, 49, 55, 9, 102, 114, 111, 109, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 32, 105, 110, 116, 111, 32, 97, 32, 119, 105, 110, 100, 105, 110, 103, 32, 99, 111, 114, 114, 105, 100, 111, 114, 46, 10, 49, 49, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 111, 110, 103, 32, 119, 105, 110, 100, 105, 110, 103, 32, 99, 111, 114, 114, 105, 100, 111, 114, 32, 115, 108, 111, 112, 105, 110, 103, 32, 111, 117, 116, 32, 111, 102, 32, 115, 105, 103, 104, 116, 32, 105, 110, 32, 98, 111, 116, 104, 10, 49, 49, 56, 9, 100, 105, 114, 101, 99, 116, 105, 111, 110, 115, 46, 10, 49, 49, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 101, 99, 114, 101, 116, 32, 99, 97, 110, 121, 111, 110, 32, 119, 104, 105, 99, 104, 32, 101, 120, 105, 116, 115, 32, 116, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 32, 97, 110, 100, 32, 101, 97, 115, 116, 46, 10, 49, 50, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 101, 99, 114, 101, 116, 32, 99, 97, 110, 121, 111, 110, 32, 119, 104, 105, 99, 104, 32, 101, 120, 105, 116, 115, 32, 116, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 32, 97, 110, 100, 32, 101, 97, 115, 116, 46, 10, 49, 50, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 101, 99, 114, 101, 116, 32, 99, 97, 110, 121, 111, 110, 32, 119, 104, 105, 99, 104, 32, 101, 120, 105, 116, 115, 32, 116, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 32, 97, 110, 100, 32, 101, 97, 115, 116, 46, 10, 49, 50, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 116, 104, 101, 32, 102, 97, 114, 32, 115, 105, 100, 101, 32, 111, 102, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 46, 32, 32, 65, 32, 110, 101, 32, 112, 97, 116, 104, 32, 108, 101, 97, 100, 115, 32, 97, 119, 97, 121, 32, 102, 114, 111, 109, 32, 116, 104, 101, 10, 49, 50, 50, 9, 99, 104, 97, 115, 109, 32, 111, 110, 32, 116, 104, 105, 115, 32, 115, 105, 100, 101, 46, 10, 49, 50, 51, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 97, 32, 108, 111, 110, 103, 32, 101, 97, 115, 116, 47, 119, 101, 115, 116, 32, 99, 111, 114, 114, 105, 100, 111, 114, 46, 32, 32, 65, 32, 102, 97, 105, 110, 116, 32, 114, 117, 109, 98, 108, 105, 110, 103, 32, 110, 111, 105, 115, 101, 32, 99, 97, 110, 32, 98, 101, 10, 49, 50, 51, 9, 104, 101, 97, 114, 100, 32, 105, 110, 32, 116, 104, 101, 32, 100, 105, 115, 116, 97, 110, 99, 101, 46, 10, 49, 50, 52, 9, 84, 104, 101, 32, 112, 97, 116, 104, 32, 102, 111, 114, 107, 115, 32, 104, 101, 114, 101, 46, 32, 32, 84, 104, 101, 32, 108, 101, 102, 116, 32, 102, 111, 114, 107, 32, 108, 101, 97, 100, 115, 32, 110, 111, 114, 116, 104, 101, 97, 115, 116, 46, 32, 32, 65, 32, 100, 117, 108, 108, 32, 114, 117, 109, 98, 108, 105, 110, 103, 10, 49, 50, 52, 9, 115, 101, 101, 109, 115, 32, 116, 111, 32, 103, 101, 116, 32, 108, 111, 117, 100, 101, 114, 32, 105, 110, 32, 116, 104, 97, 116, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 46, 32, 32, 84, 104, 101, 32, 114, 105, 103, 104, 116, 32, 102, 111, 114, 107, 32, 108, 101, 97, 100, 115, 32, 115, 111, 117, 116, 104, 101, 97, 115, 116, 10, 49, 50, 52, 9, 100, 111, 119, 110, 32, 97, 32, 103, 101, 110, 116, 108, 101, 32, 115, 108, 111, 112, 101, 46, 32, 32, 84, 104, 101, 32, 109, 97, 105, 110, 32, 99, 111, 114, 114, 105, 100, 111, 114, 32, 101, 110, 116, 101, 114, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 119, 101, 115, 116, 46, 10, 49, 50, 53, 9, 84, 104, 101, 32, 119, 97, 108, 108, 115, 32, 97, 114, 101, 32, 113, 117, 105, 116, 101, 32, 119, 97, 114, 109, 32, 104, 101, 114, 101, 46, 32, 32, 70, 114, 111, 109, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 32, 99, 97, 110, 32, 98, 101, 32, 104, 101, 97, 114, 100, 32, 97, 32, 115, 116, 101, 97, 100, 121, 10, 49, 50, 53, 9, 114, 111, 97, 114, 44, 32, 115, 111, 32, 108, 111, 117, 100, 32, 116, 104, 97, 116, 32, 116, 104, 101, 32, 101, 110, 116, 105, 114, 101, 32, 99, 97, 118, 101, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 98, 101, 32, 116, 114, 101, 109, 98, 108, 105, 110, 103, 46, 32, 32, 65, 110, 111, 116, 104, 101, 114, 10, 49, 50, 53, 9, 112, 97, 115, 115, 97, 103, 101, 32, 108, 101, 97, 100, 115, 32, 115, 111, 117, 116, 104, 44, 32, 97, 110, 100, 32, 97, 32, 108, 111, 119, 32, 99, 114, 97, 119, 108, 32, 103, 111, 101, 115, 32, 101, 97, 115, 116, 46, 10, 49, 50, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 116, 104, 101, 32, 101, 100, 103, 101, 32, 111, 102, 32, 97, 32, 98, 114, 101, 97, 116, 104, 45, 116, 97, 107, 105, 110, 103, 32, 118, 105, 101, 119, 46, 32, 32, 70, 97, 114, 32, 98, 101, 108, 111, 119, 32, 121, 111, 117, 32, 105, 115, 32, 97, 110, 10, 49, 50, 54, 9, 97, 99, 116, 105, 118, 101, 32, 118, 111, 108, 99, 97, 110, 111, 44, 32, 102, 114, 111, 109, 32, 119, 104, 105, 99, 104, 32, 103, 114, 101, 97, 116, 32, 103, 111, 117, 116, 115, 32, 111, 102, 32, 109, 111, 108, 116, 101, 110, 32, 108, 97, 118, 97, 32, 99, 111, 109, 101, 32, 115, 117, 114, 103, 105, 110, 103, 10, 49, 50, 54, 9, 111, 117, 116, 44, 32, 99, 97, 115, 99, 97, 100, 105, 110, 103, 32, 98, 97, 99, 107, 32, 100, 111, 119, 110, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 100, 101, 112, 116, 104, 115, 46, 32, 32, 84, 104, 101, 32, 103, 108, 111, 119, 105, 110, 103, 32, 114, 111, 99, 107, 32, 102, 105, 108, 108, 115, 32, 116, 104, 101, 10, 49, 50, 54, 9, 102, 97, 114, 116, 104, 101, 115, 116, 32, 114, 101, 97, 99, 104, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 99, 97, 118, 101, 114, 110, 32, 119, 105, 116, 104, 32, 97, 32, 98, 108, 111, 111, 100, 45, 114, 101, 100, 32, 103, 108, 97, 114, 101, 44, 32, 103, 105, 118, 105, 110, 103, 32, 101, 118, 101, 114, 121, 45, 10, 49, 50, 54, 9, 116, 104, 105, 110, 103, 32, 97, 110, 32, 101, 101, 114, 105, 101, 44, 32, 109, 97, 99, 97, 98, 114, 101, 32, 97, 112, 112, 101, 97, 114, 97, 110, 99, 101, 46, 32, 32, 84, 104, 101, 32, 97, 105, 114, 32, 105, 115, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 102, 108, 105, 99, 107, 101, 114, 105, 110, 103, 10, 49, 50, 54, 9, 115, 112, 97, 114, 107, 115, 32, 111, 102, 32, 97, 115, 104, 32, 97, 110, 100, 32, 97, 32, 104, 101, 97, 118, 121, 32, 115, 109, 101, 108, 108, 32, 111, 102, 32, 98, 114, 105, 109, 115, 116, 111, 110, 101, 46, 32, 32, 84, 104, 101, 32, 119, 97, 108, 108, 115, 32, 97, 114, 101, 32, 104, 111, 116, 32, 116, 111, 10, 49, 50, 54, 9, 116, 104, 101, 32, 116, 111, 117, 99, 104, 44, 32, 97, 110, 100, 32, 116, 104, 101, 32, 116, 104, 117, 110, 100, 101, 114, 105, 110, 103, 32, 111, 102, 32, 116, 104, 101, 32, 118, 111, 108, 99, 97, 110, 111, 32, 100, 114, 111, 119, 110, 115, 32, 111, 117, 116, 32, 97, 108, 108, 32, 111, 116, 104, 101, 114, 10, 49, 50, 54, 9, 115, 111, 117, 110, 100, 115, 46, 32, 32, 69, 109, 98, 101, 100, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 106, 97, 103, 103, 101, 100, 32, 114, 111, 111, 102, 32, 102, 97, 114, 32, 111, 118, 101, 114, 104, 101, 97, 100, 32, 97, 114, 101, 32, 109, 121, 114, 105, 97, 100, 32, 116, 119, 105, 115, 116, 101, 100, 10, 49, 50, 54, 9, 102, 111, 114, 109, 97, 116, 105, 111, 110, 115, 32, 99, 111, 109, 112, 111, 115, 101, 100, 32, 111, 102, 32, 112, 117, 114, 101, 32, 119, 104, 105, 116, 101, 32, 97, 108, 97, 98, 97, 115, 116, 101, 114, 44, 32, 119, 104, 105, 99, 104, 32, 115, 99, 97, 116, 116, 101, 114, 32, 116, 104, 101, 32, 109, 117, 114, 107, 121, 10, 49, 50, 54, 9, 108, 105, 103, 104, 116, 32, 105, 110, 116, 111, 32, 115, 105, 110, 105, 115, 116, 101, 114, 32, 97, 112, 112, 97, 114, 105, 116, 105, 111, 110, 115, 32, 117, 112, 111, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 115, 46, 32, 32, 84, 111, 32, 111, 110, 101, 32, 115, 105, 100, 101, 32, 105, 115, 32, 97, 32, 100, 101, 101, 112, 10, 49, 50, 54, 9, 103, 111, 114, 103, 101, 44, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 97, 32, 98, 105, 122, 97, 114, 114, 101, 32, 99, 104, 97, 111, 115, 32, 111, 102, 32, 116, 111, 114, 116, 117, 114, 101, 100, 32, 114, 111, 99, 107, 32, 119, 104, 105, 99, 104, 32, 115, 101, 101, 109, 115, 32, 116, 111, 10, 49, 50, 54, 9, 104, 97, 118, 101, 32, 98, 101, 101, 110, 32, 99, 114, 97, 102, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 100, 101, 118, 105, 108, 32, 104, 105, 109, 115, 101, 108, 102, 46, 32, 32, 65, 110, 32, 105, 109, 109, 101, 110, 115, 101, 32, 114, 105, 118, 101, 114, 32, 111, 102, 32, 102, 105, 114, 101, 10, 49, 50, 54, 9, 99, 114, 97, 115, 104, 101, 115, 32, 111, 117, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 100, 101, 112, 116, 104, 115, 32, 111, 102, 32, 116, 104, 101, 32, 118, 111, 108, 99, 97, 110, 111, 44, 32, 98, 117, 114, 110, 115, 32, 105, 116, 115, 32, 119, 97, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 10, 49, 50, 54, 9, 103, 111, 114, 103, 101, 44, 32, 97, 110, 100, 32, 112, 108, 117, 109, 109, 101, 116, 115, 32, 105, 110, 116, 111, 32, 97, 32, 98, 111, 116, 116, 111, 109, 108, 101, 115, 115, 32, 112, 105, 116, 32, 102, 97, 114, 32, 111, 102, 102, 32, 116, 111, 32, 121, 111, 117, 114, 32, 108, 101, 102, 116, 46, 32, 32, 84, 111, 10, 49, 50, 54, 9, 116, 104, 101, 32, 114, 105, 103, 104, 116, 44, 32, 97, 110, 32, 105, 109, 109, 101, 110, 115, 101, 32, 103, 101, 121, 115, 101, 114, 32, 111, 102, 32, 98, 108, 105, 115, 116, 101, 114, 105, 110, 103, 32, 115, 116, 101, 97, 109, 32, 101, 114, 117, 112, 116, 115, 32, 99, 111, 110, 116, 105, 110, 117, 111, 117, 115, 108, 121, 10, 49, 50, 54, 9, 102, 114, 111, 109, 32, 97, 32, 98, 97, 114, 114, 101, 110, 32, 105, 115, 108, 97, 110, 100, 32, 105, 110, 32, 116, 104, 101, 32, 99, 101, 110, 116, 101, 114, 32, 111, 102, 32, 97, 32, 115, 117, 108, 102, 117, 114, 111, 117, 115, 32, 108, 97, 107, 101, 44, 32, 119, 104, 105, 99, 104, 32, 98, 117, 98, 98, 108, 101, 115, 10, 49, 50, 54, 9, 111, 109, 105, 110, 111, 117, 115, 108, 121, 46, 32, 32, 84, 104, 101, 32, 102, 97, 114, 32, 114, 105, 103, 104, 116, 32, 119, 97, 108, 108, 32, 105, 115, 32, 97, 102, 108, 97, 109, 101, 32, 119, 105, 116, 104, 32, 97, 110, 32, 105, 110, 99, 97, 110, 100, 101, 115, 99, 101, 110, 99, 101, 32, 111, 102, 32, 105, 116, 115, 10, 49, 50, 54, 9, 111, 119, 110, 44, 32, 119, 104, 105, 99, 104, 32, 108, 101, 110, 100, 115, 32, 97, 110, 32, 97, 100, 100, 105, 116, 105, 111, 110, 97, 108, 32, 105, 110, 102, 101, 114, 110, 97, 108, 32, 115, 112, 108, 101, 110, 100, 111, 114, 32, 116, 111, 32, 116, 104, 101, 32, 97, 108, 114, 101, 97, 100, 121, 10, 49, 50, 54, 9, 104, 101, 108, 108, 105, 115, 104, 32, 115, 99, 101, 110, 101, 46, 32, 32, 65, 32, 100, 97, 114, 107, 44, 32, 102, 111, 114, 101, 98, 111, 100, 105, 110, 103, 32, 112, 97, 115, 115, 97, 103, 101, 32, 101, 120, 105, 116, 115, 32, 116, 111, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 46, 10, 49, 50, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 104, 97, 109, 98, 101, 114, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 108, 97, 114, 103, 101, 32, 98, 111, 117, 108, 100, 101, 114, 115, 46, 32, 32, 84, 104, 101, 32, 119, 97, 108, 108, 115, 32, 97, 114, 101, 10, 49, 50, 55, 9, 118, 101, 114, 121, 32, 119, 97, 114, 109, 44, 32, 99, 97, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 97, 105, 114, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 32, 116, 111, 32, 98, 101, 32, 97, 108, 109, 111, 115, 116, 32, 115, 116, 105, 102, 108, 105, 110, 103, 32, 102, 114, 111, 109, 32, 116, 104, 101, 10, 49, 50, 55, 9, 104, 101, 97, 116, 46, 32, 32, 84, 104, 101, 32, 111, 110, 108, 121, 32, 101, 120, 105, 116, 32, 105, 115, 32, 97, 32, 99, 114, 97, 119, 108, 32, 104, 101, 97, 100, 105, 110, 103, 32, 119, 101, 115, 116, 44, 32, 116, 104, 114, 111, 117, 103, 104, 32, 119, 104, 105, 99, 104, 32, 105, 115, 32, 99, 111, 109, 105, 110, 103, 10, 49, 50, 55, 9, 97, 32, 108, 111, 119, 32, 114, 117, 109, 98, 108, 105, 110, 103, 46, 10, 49, 50, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 108, 107, 105, 110, 103, 32, 97, 108, 111, 110, 103, 32, 97, 32, 103, 101, 110, 116, 108, 121, 32, 115, 108, 111, 112, 105, 110, 103, 32, 110, 111, 114, 116, 104, 47, 115, 111, 117, 116, 104, 32, 112, 97, 115, 115, 97, 103, 101, 32, 108, 105, 110, 101, 100, 32, 119, 105, 116, 104, 10, 49, 50, 56, 9, 111, 100, 100, 108, 121, 32, 115, 104, 97, 112, 101, 100, 32, 108, 105, 109, 101, 115, 116, 111, 110, 101, 32, 102, 111, 114, 109, 97, 116, 105, 111, 110, 115, 46, 10, 49, 50, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 115, 116, 97, 110, 100, 105, 110, 103, 32, 97, 116, 32, 116, 104, 101, 32, 101, 110, 116, 114, 97, 110, 99, 101, 32, 116, 111, 32, 97, 32, 108, 97, 114, 103, 101, 44, 32, 98, 97, 114, 114, 101, 110, 32, 114, 111, 111, 109, 46, 32, 32, 65, 32, 110, 111, 116, 105, 99, 101, 10, 49, 50, 57, 9, 97, 98, 111, 118, 101, 32, 116, 104, 101, 32, 101, 110, 116, 114, 97, 110, 99, 101, 32, 114, 101, 97, 100, 115, 58, 32, 32, 34, 67, 97, 117, 116, 105, 111, 110, 33, 32, 32, 66, 101, 97, 114, 32, 105, 110, 32, 114, 111, 111, 109, 33, 34, 10, 49, 51, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 115, 105, 100, 101, 32, 97, 32, 98, 97, 114, 114, 101, 110, 32, 114, 111, 111, 109, 46, 32, 32, 84, 104, 101, 32, 99, 101, 110, 116, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 114, 111, 111, 109, 32, 105, 115, 32, 99, 111, 109, 112, 108, 101, 116, 101, 108, 121, 10, 49, 51, 48, 9, 101, 109, 112, 116, 121, 32, 101, 120, 99, 101, 112, 116, 32, 102, 111, 114, 32, 115, 111, 109, 101, 32, 100, 117, 115, 116, 46, 32, 32, 77, 97, 114, 107, 115, 32, 105, 110, 32, 116, 104, 101, 32, 100, 117, 115, 116, 32, 108, 101, 97, 100, 32, 97, 119, 97, 121, 32, 116, 111, 119, 97, 114, 100, 32, 116, 104, 101, 10, 49, 51, 48, 9, 102, 97, 114, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 114, 111, 111, 109, 46, 32, 32, 84, 104, 101, 32, 111, 110, 108, 121, 32, 101, 120, 105, 116, 32, 105, 115, 32, 116, 104, 101, 32, 119, 97, 121, 32, 121, 111, 117, 32, 99, 97, 109, 101, 32, 105, 110, 46, 10, 49, 51, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 105, 110, 103, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 51, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 109, 97, 122, 101, 32, 111, 102, 32, 116, 119, 105, 115, 116, 121, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 51, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 116, 119, 105, 115, 116, 105, 110, 103, 32, 109, 97, 122, 101, 32, 111, 102, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 51, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 116, 119, 105, 115, 116, 105, 110, 103, 32, 108, 105, 116, 116, 108, 101, 32, 109, 97, 122, 101, 32, 111, 102, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 51, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 116, 119, 105, 115, 116, 121, 32, 108, 105, 116, 116, 108, 101, 32, 109, 97, 122, 101, 32, 111, 102, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 51, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 116, 119, 105, 115, 116, 121, 32, 109, 97, 122, 101, 32, 111, 102, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 51, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 116, 119, 105, 115, 116, 121, 32, 109, 97, 122, 101, 32, 111, 102, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 51, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 108, 105, 116, 116, 108, 101, 32, 116, 119, 105, 115, 116, 105, 110, 103, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 51, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 109, 97, 122, 101, 32, 111, 102, 32, 108, 105, 116, 116, 108, 101, 32, 116, 119, 105, 115, 116, 121, 32, 112, 97, 115, 115, 97, 103, 101, 115, 44, 32, 97, 108, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 46, 10, 49, 52, 48, 9, 68, 101, 97, 100, 32, 101, 110, 100, 10, 49, 52, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 111, 110, 103, 44, 32, 114, 111, 117, 103, 104, 45, 104, 101, 119, 110, 44, 32, 110, 111, 114, 116, 104, 47, 115, 111, 117, 116, 104, 32, 99, 111, 114, 114, 105, 100, 111, 114, 46, 10, 49, 52, 50, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 32, 119, 97, 121, 32, 116, 111, 32, 103, 111, 32, 116, 104, 97, 116, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 46, 10, 49, 52, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 97, 32, 108, 97, 114, 103, 101, 32, 99, 104, 97, 109, 98, 101, 114, 32, 119, 105, 116, 104, 32, 112, 97, 115, 115, 97, 103, 101, 115, 32, 116, 111, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 97, 110, 100, 32, 110, 111, 114, 116, 104, 46, 10, 49, 52, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 111, 103, 114, 101, 39, 115, 32, 115, 116, 111, 114, 101, 114, 111, 111, 109, 46, 32, 32, 84, 104, 101, 32, 111, 110, 108, 121, 32, 101, 120, 105, 116, 32, 105, 115, 32, 116, 111, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 46, 10, 49, 52, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 52, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 52, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 52, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 52, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 53, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 105, 109, 108, 101, 115, 115, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 55, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 108, 101, 100, 103, 101, 32, 111, 110, 32, 111, 110, 101, 32, 102, 97, 99, 101, 32, 111, 102, 32, 97, 32, 115, 104, 101, 101, 114, 32, 99, 108, 105, 102, 102, 46, 32, 32, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 110, 111, 10, 49, 54, 55, 9, 112, 97, 116, 104, 115, 32, 97, 119, 97, 121, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 108, 101, 100, 103, 101, 46, 32, 32, 65, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 32, 105, 115, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 108, 101, 97, 114, 105, 110, 103, 10, 49, 54, 55, 9, 115, 117, 114, 114, 111, 117, 110, 100, 101, 100, 32, 98, 121, 32, 102, 111, 114, 101, 115, 116, 46, 10, 49, 54, 56, 9, 89, 111, 117, 32, 97, 114, 101, 32, 119, 97, 108, 107, 105, 110, 103, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 116, 104, 101, 32, 114, 101, 115, 101, 114, 118, 111, 105, 114, 46, 32, 32, 87, 97, 108, 108, 115, 32, 111, 102, 32, 119, 97, 116, 101, 114, 10, 49, 54, 56, 9, 114, 101, 97, 114, 32, 117, 112, 32, 111, 110, 32, 101, 105, 116, 104, 101, 114, 32, 115, 105, 100, 101, 46, 32, 32, 84, 104, 101, 32, 114, 111, 97, 114, 32, 111, 102, 32, 116, 104, 101, 32, 119, 97, 116, 101, 114, 32, 99, 97, 115, 99, 97, 100, 105, 110, 103, 32, 112, 97, 115, 116, 32, 105, 115, 10, 49, 54, 56, 9, 110, 101, 97, 114, 108, 121, 32, 100, 101, 97, 102, 101, 110, 105, 110, 103, 44, 32, 97, 110, 100, 32, 116, 104, 101, 32, 109, 105, 115, 116, 32, 105, 115, 32, 115, 111, 32, 116, 104, 105, 99, 107, 32, 121, 111, 117, 32, 99, 97, 110, 32, 98, 97, 114, 101, 108, 121, 32, 115, 101, 101, 46, 10, 49, 54, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 101, 114, 110, 32, 101, 100, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, 114, 101, 115, 101, 114, 118, 111, 105, 114, 46, 32, 32, 65, 32, 110, 111, 114, 116, 104, 119, 101, 115, 116, 32, 112, 97, 115, 115, 97, 103, 101, 10, 49, 54, 57, 9, 108, 101, 97, 100, 115, 32, 115, 104, 97, 114, 112, 108, 121, 32, 117, 112, 32, 102, 114, 111, 109, 32, 104, 101, 114, 101, 46, 10, 49, 55, 48, 9, 89, 111, 117, 32, 97, 114, 101, 32, 115, 99, 114, 97, 109, 98, 108, 105, 110, 103, 32, 97, 108, 111, 110, 103, 32, 97, 32, 116, 114, 101, 97, 99, 104, 101, 114, 111, 117, 115, 108, 121, 32, 115, 116, 101, 101, 112, 44, 32, 114, 111, 99, 107, 121, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 49, 55, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 97, 32, 118, 101, 114, 121, 32, 115, 116, 101, 101, 112, 32, 105, 110, 99, 108, 105, 110, 101, 44, 32, 119, 104, 105, 99, 104, 32, 119, 105, 100, 101, 110, 115, 32, 97, 116, 32, 105, 116, 32, 103, 111, 101, 115, 32, 117, 112, 119, 97, 114, 100, 46, 10, 49, 55, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 98, 97, 115, 101, 32, 111, 102, 32, 97, 32, 110, 101, 97, 114, 108, 121, 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 99, 108, 105, 102, 102, 46, 32, 32, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 115, 111, 109, 101, 10, 49, 55, 50, 9, 115, 108, 105, 109, 32, 102, 111, 111, 116, 104, 111, 108, 100, 115, 32, 119, 104, 105, 99, 104, 32, 119, 111, 117, 108, 100, 32, 101, 110, 97, 98, 108, 101, 32, 121, 111, 117, 32, 116, 111, 32, 99, 108, 105, 109, 98, 32, 117, 112, 44, 32, 98, 117, 116, 32, 105, 116, 32, 108, 111, 111, 107, 115, 10, 49, 55, 50, 9, 101, 120, 116, 114, 101, 109, 101, 108, 121, 32, 100, 97, 110, 103, 101, 114, 111, 117, 115, 46, 32, 32, 72, 101, 114, 101, 32, 97, 116, 32, 116, 104, 101, 32, 98, 97, 115, 101, 32, 111, 102, 32, 116, 104, 101, 32, 99, 108, 105]); | |
fileData0.push.apply(fileData0, [102, 102, 32, 108, 105, 101, 32, 116, 104, 101, 32, 114, 101, 109, 97, 105, 110, 115, 10, 49, 55, 50, 9, 111, 102, 32, 115, 101, 118, 101, 114, 97, 108, 32, 101, 97, 114, 108, 105, 101, 114, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 114, 115, 32, 119, 104, 111, 32, 97, 112, 112, 97, 114, 101, 110, 116, 108, 121, 32, 102, 97, 105, 108, 101, 100, 32, 116, 111, 32, 109, 97, 107, 101, 32, 105, 116, 46, 10, 49, 55, 51, 9, 89, 111, 117, 32, 97, 114, 101, 32, 99, 108, 105, 109, 98, 105, 110, 103, 32, 97, 108, 111, 110, 103, 32, 97, 32, 110, 101, 97, 114, 108, 121, 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 99, 108, 105, 102, 102, 46, 10, 49, 55, 52, 9, 74, 117, 115, 116, 32, 97, 115, 32, 121, 111, 117, 32, 114, 101, 97, 99, 104, 32, 116, 104, 101, 32, 116, 111, 112, 44, 32, 121, 111, 117, 114, 32, 102, 111, 111, 116, 32, 115, 108, 105, 112, 115, 32, 111, 110, 32, 97, 32, 108, 111, 111, 115, 101, 32, 114, 111, 99, 107, 32, 97, 110, 100, 32, 121, 111, 117, 10, 49, 55, 52, 9, 116, 117, 109, 98, 108, 101, 32, 115, 101, 118, 101, 114, 97, 108, 32, 104, 117, 110, 100, 114, 101, 100, 32, 102, 101, 101, 116, 32, 116, 111, 32, 106, 111, 105, 110, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 117, 110, 108, 117, 99, 107, 121, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 114, 115, 46, 10, 49, 55, 53, 9, 74, 117, 115, 116, 32, 97, 115, 32, 121, 111, 117, 32, 114, 101, 97, 99, 104, 32, 116, 104, 101, 32, 116, 111, 112, 44, 32, 121, 111, 117, 114, 32, 102, 111, 111, 116, 32, 115, 108, 105, 112, 115, 32, 111, 110, 32, 97, 32, 108, 111, 111, 115, 101, 32, 114, 111, 99, 107, 32, 97, 110, 100, 32, 121, 111, 117, 10, 49, 55, 53, 9, 109, 97, 107, 101, 32, 111, 110, 101, 32, 108, 97, 115, 116, 32, 100, 101, 115, 112, 101, 114, 97, 116, 101, 32, 103, 114, 97, 98, 46, 32, 32, 89, 111, 117, 114, 32, 108, 117, 99, 107, 32, 104, 111, 108, 100, 115, 44, 32, 97, 115, 32, 100, 111, 101, 115, 32, 121, 111, 117, 114, 32, 103, 114, 105, 112, 46, 10, 49, 55, 53, 9, 87, 105, 116, 104, 32, 97, 110, 32, 101, 110, 111, 114, 109, 111, 117, 115, 32, 104, 101, 97, 118, 101, 44, 32, 121, 111, 117, 32, 108, 105, 102, 116, 32, 121, 111, 117, 114, 115, 101, 108, 102, 32, 116, 111, 32, 116, 104, 101, 32, 108, 101, 100, 103, 101, 32, 97, 98, 111, 118, 101, 46, 10, 49, 55, 54, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 108, 101, 100, 103, 101, 32, 97, 116, 32, 116, 104, 101, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 110, 101, 97, 114, 108, 121, 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 99, 108, 105, 102, 102, 46, 10, 49, 55, 54, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 111, 119, 32, 99, 114, 97, 119, 108, 32, 108, 101, 97, 100, 105, 110, 103, 32, 111, 102, 102, 32, 116, 111, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 101, 97, 115, 116, 46, 10, 49, 55, 55, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 114, 101, 97, 99, 104, 101, 100, 32, 97, 32, 100, 101, 97, 100, 32, 101, 110, 100, 46, 10, 49, 55, 56, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 119, 32, 111, 110, 101, 32, 109, 111, 114, 101, 32, 103, 114, 117, 101, 115, 111, 109, 101, 32, 97, 115, 112, 101, 99, 116, 32, 116, 111, 32, 116, 104, 101, 32, 115, 112, 101, 99, 116, 97, 99, 117, 108, 97, 114, 32, 118, 105, 115, 116, 97, 46, 10, 49, 55, 57, 9, 62, 62, 70, 111, 111, 102, 33, 60, 60, 10, 49, 56, 48, 9, 62, 62, 70, 111, 111, 102, 33, 60, 60, 10, 49, 56, 49, 9, 62, 62, 70, 111, 111, 102, 33, 60, 60, 10, 49, 56, 50, 9, 62, 62, 70, 111, 111, 102, 33, 60, 60, 10, 49, 56, 51, 9, 62, 62, 70, 111, 111, 102, 33, 60, 60, 10, 49, 56, 52, 9, 62, 62, 70, 111, 111, 102, 33, 60, 60, 10, 45, 49, 10, 50, 10, 49, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 102, 114, 111, 110, 116, 32, 111, 102, 32, 98, 117, 105, 108, 100, 105, 110, 103, 46, 10, 50, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 104, 105, 108, 108, 32, 105, 110, 32, 114, 111, 97, 100, 46, 10, 51, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 115, 105, 100, 101, 32, 98, 117, 105, 108, 100, 105, 110, 103, 46, 10, 52, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 118, 97, 108, 108, 101, 121, 46, 10, 53, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 101, 110, 100, 32, 111, 102, 32, 114, 111, 97, 100, 46, 10, 54, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 99, 108, 105, 102, 102, 46, 10, 55, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 115, 108, 105, 116, 32, 105, 110, 32, 115, 116, 114, 101, 97, 109, 98, 101, 100, 46, 10, 56, 9, 89, 111, 117, 39, 114, 101, 32, 111, 117, 116, 115, 105, 100, 101, 32, 103, 114, 97, 116, 101, 46, 10, 57, 9, 89, 111, 117, 39, 114, 101, 32, 98, 101, 108, 111, 119, 32, 116, 104, 101, 32, 103, 114, 97, 116, 101, 46, 10, 49, 48, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 99, 111, 98, 98, 108, 101, 32, 99, 114, 97, 119, 108, 46, 10, 49, 49, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 100, 101, 98, 114, 105, 115, 32, 114, 111, 111, 109, 46, 10, 49, 51, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 98, 105, 114, 100, 32, 99, 104, 97, 109, 98, 101, 114, 46, 10, 49, 52, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 116, 111, 112, 32, 111, 102, 32, 115, 109, 97, 108, 108, 32, 112, 105, 116, 46, 10, 49, 53, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 115, 116, 115, 46, 10, 49, 55, 9, 89, 111, 117, 39, 114, 101, 32, 111, 110, 32, 101, 97, 115, 116, 32, 98, 97, 110, 107, 32, 111, 102, 32, 102, 105, 115, 115, 117, 114, 101, 46, 10, 49, 56, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 110, 117, 103, 103, 101, 116, 45, 111, 102, 45, 103, 111, 108, 100, 32, 114, 111, 111, 109, 46, 10, 49, 57, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 72, 97, 108, 108, 32, 111, 102, 32, 77, 116, 32, 75, 105, 110, 103, 46, 10, 50, 51, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 119, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 84, 119, 111, 112, 105, 116, 32, 82, 111, 111, 109, 46, 10, 50, 52, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 101, 97, 115, 116, 32, 112, 105, 116, 46, 10, 50, 53, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 119, 101, 115, 116, 32, 112, 105, 116, 46, 10, 50, 55, 9, 89, 111, 117, 39, 114, 101, 32, 111, 110, 32, 119, 101, 115, 116, 32, 98, 97, 110, 107, 32, 111, 102, 32, 102, 105, 115, 115, 117, 114, 101, 46, 10, 50, 56, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 110, 47, 115, 32, 112, 97, 115, 115, 97, 103, 101, 32, 97, 98, 111, 118, 101, 32, 101, 47, 119, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 51, 48, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 115, 105, 100, 101, 32, 99, 104, 97, 109, 98, 101, 114, 46, 10, 51, 51, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 34, 89, 50, 34, 46, 10, 51, 53, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 119, 105, 110, 100, 111, 119, 32, 111, 110, 32, 112, 105, 116, 46, 10, 51, 54, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 100, 105, 114, 116, 121, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 51, 55, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 98, 114, 105, 110, 107, 32, 111, 102, 32, 115, 109, 97, 108, 108, 32, 112, 105, 116, 46, 10, 51, 56, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 112, 105, 116, 32, 119, 105, 116, 104, 32, 115, 116, 114, 101, 97, 109, 46, 10, 51, 57, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 100, 117, 115, 116, 121, 32, 114, 111, 99, 107, 32, 114, 111, 111, 109, 46, 10, 52, 49, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 119, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 115, 116, 115, 46, 10, 53, 55, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 98, 114, 105, 110, 107, 32, 111, 102, 32, 112, 105, 116, 46, 10, 54, 48, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 101, 97, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 108, 111, 110, 103, 32, 104, 97, 108, 108, 46, 10, 54, 49, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 119, 101, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 108, 111, 110, 103, 32, 104, 97, 108, 108, 46, 10, 54, 52, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 99, 111, 109, 112, 108, 101, 120, 32, 106, 117, 110, 99, 116, 105, 111, 110, 46, 10, 54, 53, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 66, 101, 100, 113, 117, 105, 108, 116, 46, 10, 54, 54, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 83, 119, 105, 115, 115, 32, 67, 104, 101, 101, 115, 101, 32, 82, 111, 111, 109, 46, 10, 54, 55, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 101, 97, 115, 116, 32, 101, 110, 100, 32, 111, 102, 32, 84, 119, 111, 112, 105, 116, 32, 82, 111, 111, 109, 46, 10, 54, 56, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 83, 108, 97, 98, 32, 82, 111, 111, 109, 46, 10, 55, 49, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 106, 117, 110, 99, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 114, 101, 101, 32, 115, 101, 99, 114, 101, 116, 32, 99, 97, 110, 121, 111, 110, 115, 46, 10, 55, 50, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 108, 97, 114, 103, 101, 32, 108, 111, 119, 32, 114, 111, 111, 109, 46, 10, 55, 52, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 115, 101, 99, 114, 101, 116, 32, 101, 47, 119, 32, 99, 97, 110, 121, 111, 110, 32, 97, 98, 111, 118, 101, 32, 116, 105, 103, 104, 116, 32, 99, 97, 110, 121, 111, 110, 46, 10, 56, 56, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 110, 97, 114, 114, 111, 119, 32, 99, 111, 114, 114, 105, 100, 111, 114, 46, 10, 57, 49, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 115, 116, 101, 101, 112, 32, 105, 110, 99, 108, 105, 110, 101, 32, 97, 98, 111, 118, 101, 32, 108, 97, 114, 103, 101, 32, 114, 111, 111, 109, 46, 10, 57, 50, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 71, 105, 97, 110, 116, 32, 82, 111, 111, 109, 46, 10, 57, 53, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 99, 97, 118, 101, 114, 110, 32, 119, 105, 116, 104, 32, 119, 97, 116, 101, 114, 102, 97, 108, 108, 46, 10, 57, 54, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 83, 111, 102, 116, 32, 82, 111, 111, 109, 46, 10, 57, 55, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 79, 114, 105, 101, 110, 116, 97, 108, 32, 82, 111, 111, 109, 46, 10, 57, 56, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 109, 105, 115, 116, 121, 32, 99, 97, 118, 101, 114, 110, 46, 10, 57, 57, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 97, 108, 99, 111, 118, 101, 46, 10, 49, 48, 48, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 80, 108, 111, 118, 101, 114, 32, 82, 111, 111, 109, 46, 10, 49, 48, 49, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 100, 97, 114, 107, 45, 114, 111, 111, 109, 46, 10, 49, 48, 50, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 97, 114, 99, 104, 101, 100, 32, 104, 97, 108, 108, 46, 10, 49, 48, 51, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 83, 104, 101, 108, 108, 32, 82, 111, 111, 109, 46, 10, 49, 48, 54, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 97, 110, 116, 101, 114, 111, 111, 109, 46, 10, 49, 48, 56, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 87, 105, 116, 116, 39, 115, 32, 69, 110, 100, 46, 10, 49, 48, 57, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 77, 105, 114, 114, 111, 114, 32, 67, 97, 110, 121, 111, 110, 46, 10, 49, 49, 48, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 119, 105, 110, 100, 111, 119, 32, 111, 110, 32, 112, 105, 116, 46, 10, 49, 49, 49, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 116, 111, 112, 32, 111, 102, 32, 115, 116, 97, 108, 97, 99, 116, 105, 116, 101, 46, 10, 49, 49, 51, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 114, 101, 115, 101, 114, 118, 111, 105, 114, 46, 10, 49, 49, 53, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 110, 101, 32, 101, 110, 100, 46, 10, 49, 49, 54, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 115, 119, 32, 101, 110, 100, 46, 10, 49, 49, 55, 9, 89, 111, 117, 39, 114, 101, 32, 111, 110, 32, 115, 119, 32, 115, 105, 100, 101, 32, 111, 102, 32, 99, 104, 97, 115, 109, 46, 10, 49, 49, 56, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 115, 108, 111, 112, 105, 110, 103, 32, 99, 111, 114, 114, 105, 100, 111, 114, 46, 10, 49, 50, 50, 9, 89, 111, 117, 39, 114, 101, 32, 111, 110, 32, 110, 101, 32, 115, 105, 100, 101, 32, 111, 102, 32, 99, 104, 97, 115, 109, 46, 10, 49, 50, 51, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 99, 111, 114, 114, 105, 100, 111, 114, 46, 10, 49, 50, 52, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 102, 111, 114, 107, 32, 105, 110, 32, 112, 97, 116, 104, 46, 10, 49, 50, 53, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 106, 117, 110, 99, 116, 105, 111, 110, 32, 119, 105, 116, 104, 32, 119, 97, 114, 109, 32, 119, 97, 108, 108, 115, 46, 10, 49, 50, 54, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 98, 114, 101, 97, 116, 104, 45, 116, 97, 107, 105, 110, 103, 32, 118, 105, 101, 119, 46, 10, 49, 50, 55, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 67, 104, 97, 109, 98, 101, 114, 32, 111, 102, 32, 66, 111, 117, 108, 100, 101, 114, 115, 46, 10, 49, 50, 56, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 108, 105, 109, 101, 115, 116, 111, 110, 101, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 49, 50, 57, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 102, 114, 111, 110, 116, 32, 111, 102, 32, 66, 97, 114, 114, 101, 110, 32, 82, 111, 111, 109, 46, 10, 49, 51, 48, 9, 89, 111, 117, 39, 114, 101, 32, 105, 110, 32, 66, 97, 114, 114, 101, 110, 32, 82, 111, 111, 109, 46, 10, 49, 54, 55, 9, 89, 111, 117, 39, 114, 101, 32, 111, 110, 32, 108, 101, 100, 103, 101, 46, 10, 49, 54, 56, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 114, 101, 115, 101, 114, 118, 111, 105, 114, 46, 10, 49, 54, 57, 9, 89, 111, 117, 39, 114, 101, 32, 110, 111, 114, 116, 104, 32, 111, 102, 32, 114, 101, 115, 101, 114, 118, 111, 105, 114, 46, 10, 49, 55, 50, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 98, 97, 115, 101, 32, 111, 102, 32, 99, 108, 105, 102, 102, 46, 10, 49, 55, 54, 9, 89, 111, 117, 39, 114, 101, 32, 97, 116, 32, 116, 111, 112, 32, 111, 102, 32, 99, 108, 105, 102, 102, 46, 10, 45, 49, 10, 51, 10, 49, 9, 50, 9, 50, 9, 52, 52, 9, 50, 57, 10, 49, 9, 51, 9, 51, 9, 49, 50, 9, 49, 57, 9, 52, 51, 10, 49, 9, 52, 9, 53, 9, 49, 51, 9, 49, 52, 9, 52, 54, 9, 51, 48, 10, 49, 9, 49, 52, 53, 9, 54, 9, 52, 53, 10, 49, 9, 56, 9, 54, 51, 10, 50, 9, 49, 9, 49, 50, 9, 52, 51, 10, 50, 9, 53, 9, 52, 52, 10, 50, 9, 49, 54, 52, 9, 52, 53, 10, 50, 9, 49, 53, 55, 9, 52, 54, 9, 54, 10, 50, 9, 53, 56, 48, 9, 51, 48, 10, 51, 9, 49, 9, 49, 49, 9, 51, 50, 9, 52, 52, 10, 51, 9, 49, 55, 57, 9, 54, 50, 10, 51, 9, 49, 56, 49, 9, 54, 53, 10, 51, 9, 55, 57, 9, 53, 9, 49, 52, 10, 52, 9, 49, 9, 52, 9, 49, 50, 9, 52, 53, 10, 52, 9, 49, 53, 48, 9, 52, 51, 9, 54, 10, 52, 9, 49, 53, 54, 9, 52, 52, 10, 52, 9, 55, 9, 53, 9, 52, 54, 9, 51, 48, 10, 52, 9, 56, 9, 54, 51, 10, 52, 9, 55, 52, 53, 9, 49, 52, 10, 53, 9, 50, 9, 50, 9, 52, 51, 9, 50, 57, 10, 53, 9, 49, 9, 49, 50, 10, 53, 9, 49, 53, 56, 9, 52, 54, 9, 54, 10, 53, 9, 49, 53, 57, 9, 52, 52, 10, 53, 9, 49, 54, 53, 9, 52, 53, 10, 54, 9, 49, 54, 49, 9, 52, 54, 9, 54, 10, 54, 9, 49, 54, 51, 9, 52, 51, 10, 54, 9, 50, 49, 9, 51, 57, 10, 55, 9, 49, 9, 49, 50, 10, 55, 9, 52, 9, 52, 9, 52, 53, 10, 55, 9, 49, 53, 48, 9, 52, 51, 9, 54, 10, 55, 9, 49, 53, 52, 9, 52, 52, 10, 55, 9, 56, 9, 53, 9, 49, 54, 9, 52, 54, 9, 54, 51, 10, 55, 9, 53, 57, 53, 9, 54, 48, 9, 49, 52, 9, 51, 48, 9, 49, 57, 9, 51, 10, 56, 9, 49, 53, 49, 9, 52, 51, 9, 54, 10, 56, 9, 49, 53, 52, 9, 52, 54, 10, 56, 9, 49, 53, 51, 9, 52, 52, 10, 56, 9, 49, 9, 49, 50, 10, 56, 9, 55, 9, 52, 9, 49, 51, 9, 52, 53, 10, 56, 9, 51, 48, 51, 48, 48, 57, 9, 51, 9, 49, 57, 9, 51, 48, 10, 56, 9, 53, 57, 51, 9, 51, 10, 57, 9, 51, 48, 51, 48, 48, 56, 9, 49, 49, 9, 50, 57, 10, 57, 9, 53, 57, 51, 9, 49, 49, 10, 57, 9, 49, 48, 9, 49, 55, 9, 49, 56, 9, 49, 57, 9, 52, 52, 10, 57, 9, 49, 52, 9, 51, 49, 10, 57, 9, 49, 49, 9, 53, 49, 10, 49, 48, 9, 57, 9, 49, 49, 9, 50, 48, 9, 50, 49, 9, 52, 51, 10, 49, 48, 9, 49, 49, 9, 49, 57, 9, 50, 50, 9, 52, 52, 9, 53, 49, 10, 49, 48, 9, 49, 52, 9, 51, 49, 10, 49, 49, 9, 51, 48, 51, 48, 48, 56, 9, 54, 51, 10, 49, 49, 9, 57, 9, 54, 52, 10, 49, 49, 9, 49, 48, 9, 49, 55, 9, 49, 56, 9, 50, 51, 9, 50, 52, 9, 52, 51, 10, 49, 49, 9, 49, 50, 9, 50, 53, 9, 49, 57, 9, 50, 57, 9, 52, 52, 10, 49, 49, 9, 49, 56, 48, 9, 54, 50, 10, 49, 49, 9, 49, 52, 9, 51, 49, 10, 49, 50, 9, 51, 48, 51, 48, 48, 56, 9, 54, 51, 10, 49, 50, 9, 57, 9, 54, 52, 10, 49, 50, 9, 49, 49, 9, 51, 48, 9, 52, 51, 9, 53, 49, 10, 49, 50, 9, 49, 51, 9, 49, 57, 9, 50, 57, 9, 52, 52, 10, 49, 50, 9, 49, 52, 9, 51, 49, 10, 49, 51, 9, 51, 48, 51, 48, 48, 56, 9, 54, 51, 10, 49, 51, 9, 57, 9, 54, 52, 10, 49, 51, 9, 49, 49, 9, 53, 49, 10, 49, 51, 9, 49, 50, 9, 50, 53, 9, 52, 51, 10, 49, 51, 9, 49, 52, 9, 50, 51, 9, 51, 49, 9, 52, 52, 10, 49, 52, 9, 51, 48, 51, 48, 48, 56, 9, 54, 51, 10, 49, 52, 9, 57, 9, 54, 52, 10, 49, 52, 9, 49, 49, 9, 53, 49, 10, 49, 52, 9, 49, 51, 9, 50, 51, 9, 52, 51, 10, 49, 52, 9, 49, 53, 48, 48, 50, 48, 9, 51, 48, 9, 51, 49, 9, 51, 52, 10, 49, 52, 9, 49, 53, 9, 51, 48, 10, 49, 52, 9, 49, 54, 9, 51, 51, 9, 52, 52, 10, 49, 53, 9, 49, 56, 9, 51, 54, 9, 52, 54, 10, 49, 53, 9, 49, 55, 9, 55, 9, 51, 56, 9, 52, 52, 10, 49, 53, 9, 49, 57, 9, 49, 48, 9, 51, 48, 9, 52, 53, 10, 49, 53, 9, 49, 53, 48, 48, 50, 50, 9, 50, 57, 9, 51, 49, 9, 51, 52, 9, 51, 53, 9, 50, 51, 9, 52, 51, 10, 49, 53, 9, 49, 52, 9, 50, 57, 10, 49, 53, 9, 51, 52, 9, 53, 53, 10, 49, 54, 9, 49, 52, 9, 49, 10, 49, 55, 9, 49, 53, 9, 51, 56, 9, 52, 51, 10, 49, 55, 9, 51, 49, 50, 53, 57, 54, 9, 51, 57, 10, 49, 55, 9, 52, 49, 50, 48, 50, 49, 9, 55, 10, 49, 55, 9, 52, 49, 50, 53, 57, 55, 9, 52, 49, 9, 52, 50, 9, 52, 52, 9, 54, 57, 10, 49, 55, 9, 50, 55, 9, 52, 49, 10, 49, 56, 9, 49, 53, 9, 51, 56, 9, 49, 49, 9, 52, 53, 10, 49, 57, 9, 49, 53, 9, 49, 48, 9, 50, 57, 9, 52, 51, 10, 49, 57, 9, 51, 49, 49, 48, 50, 56, 9, 52, 53, 9, 51, 55, 10, 49, 57, 9, 51, 49, 49, 48, 50, 57, 9, 52, 54, 9, 51, 54, 10, 49, 57, 9, 51, 49, 49, 48, 51, 48, 9, 52, 52, 9, 55, 10, 49, 57, 9, 51, 50, 9, 52, 53, 10, 49, 57, 9, 51, 53, 48, 55, 52, 9, 52, 57, 10, 49, 57, 9, 50, 49, 49, 48, 51, 50, 9, 52, 57, 10, 49, 57, 9, 55, 52, 9, 54, 54, 10, 50, 48, 9, 48, 9, 49, 10, 50, 49, 9, 48, 9, 49, 10, 50, 50, 9, 49, 53, 9, 49, 10, 50, 51, 9, 54, 55, 9, 52, 51, 9, 52, 50, 10, 50, 51, 9, 54, 56, 9, 52, 52, 9, 54, 49, 10, 50, 51, 9, 50, 53, 9, 51, 48, 9, 51, 49, 10, 50, 51, 9, 54, 52, 56, 9, 53, 50, 10, 50, 52, 9, 54, 55, 9, 50, 57, 9, 49, 49, 10, 50, 53, 9, 50, 51, 9, 50, 57, 9, 49, 49, 10, 50, 53, 9, 53, 50, 52, 48, 51, 49, 9, 53, 54, 10, 50, 53, 9, 50, 54, 9, 53, 54, 10, 50, 54, 9, 56, 56, 9, 49, 10, 50, 55, 9, 51, 49, 50, 53, 57, 54, 9, 51, 57, 10, 50, 55, 9, 52, 49, 50, 48, 50, 49, 9, 55, 10, 50, 55, 9, 52, 49, 50, 53, 57, 55, 9, 52, 49, 9, 52, 50, 9, 52, 51, 9, 54, 57, 10, 50, 55, 9, 49, 55, 9, 52, 49, 10, 50, 55, 9, 52, 48, 9, 52, 53, 10, 50, 55, 9, 52, 49, 9, 52, 52, 10, 50, 56, 9, 49, 57, 9, 51, 56, 9, 49, 49, 9, 52, 54, 10, 50, 56, 9, 51, 51, 9, 52, 53, 9, 53, 53, 10, 50, 56, 9, 51, 54, 9, 51, 48, 9, 53, 50, 10, 50, 57, 9, 49, 57, 9, 51, 56, 9, 49, 49, 9, 52, 53, 10, 51, 48, 9, 49, 57, 9, 51, 56, 9, 49, 49, 9, 52, 51, 10, 51, 48, 9, 54, 50, 9, 52, 52, 9, 50, 57, 10, 51, 49, 9, 52, 50, 52, 48, 56, 57, 9, 49, 10, 51, 49, 9, 57, 48, 9, 49, 10, 51, 50, 9, 49, 57, 9, 49, 10, 51, 51, 9, 49, 56, 50, 9, 54, 53, 10, 51, 51, 9, 50, 56, 9, 52, 54, 10, 51, 51, 9, 51, 52, 9, 52, 51, 9, 53, 51, 9, 53, 52, 10, 51, 51, 9, 51, 53, 9, 52, 52, 10, 51, 51, 9, 49, 53, 57, 51, 48, 50, 9, 55, 49, 10, 51, 51, 9, 49, 56, 51, 9, 55, 49, 10, 51, 52, 9, 51, 51, 9, 51, 48, 9, 53, 53, 10, 51, 52, 9, 49, 53, 9, 50, 57, 10, 51, 53, 9, 51, 51, 9, 52, 51, 9, 53, 53, 10, 51, 53, 9, 50, 48, 9, 51, 57, 10, 51, 54, 9, 51, 55, 9, 52, 51, 9, 49, 55, 10, 51, 54, 9, 50, 56, 9, 50, 57, 9, 53, 50, 10, 51, 54, 9, 51, 57, 9, 52, 52, 10, 51, 54, 9, 54, 53, 9, 55, 48, 10, 51, 55, 9, 51, 54, 9, 52, 52, 9, 49, 55, 10, 51, 55, 9, 51, 56, 9, 51, 48, 9, 51, 49, 9, 53, 54, 10, 51, 56, 9, 51, 55, 9, 53, 54, 9, 50, 57, 9, 49, 49, 10, 51, 56, 9, 53, 57, 53, 9, 54, 48, 9, 49, 52, 9, 51, 48, 9, 52, 9, 53, 9, 51, 9, 49, 57, 10, 51, 57, 9, 51, 54, 9, 52, 51, 9, 50, 51, 10, 51, 57, 9, 54, 52, 9, 51, 48, 9, 53, 50, 9, 53, 56, 10, 51, 57, 9, 54, 53, 9, 55, 48, 10, 52, 48, 9, 52, 49, 9, 49, 10, 52, 49, 9, 52, 50, 9, 52, 54, 9, 50, 57, 9, 50, 51, 9, 53, 54, 10, 52, 49, 9, 50, 55, 9, 52, 51, 10, 52, 49, 9, 53, 57, 9, 52, 53, 10, 52, 49, 9, 54, 48, 9, 52, 52, 9, 49, 55, 10, 52, 50, 9, 52, 49, 9, 50, 57, 10, 52, 50, 9, 52, 50, 9, 52, 53, 10, 52, 50, 9, 52, 51, 9, 52, 51, 10, 52, 50, 9, 52, 53, 9, 52, 54, 10, 52, 50, 9, 56, 48, 9, 52, 52, 10, 52, 51, 9, 52, 50, 9, 52, 52, 10, 52, 51, 9, 52, 52, 9, 52, 54, 10, 52, 51, 9, 52, 53, 9, 52, 51, 10, 52, 52, 9, 52, 51, 9, 52, 51, 10, 52, 52, 9, 52, 56, 9, 51, 48, 10, 52, 52, 9, 53, 48, 9, 52, 54, 10, 52, 52, 9, 56, 50, 9, 52, 53, 10, 52, 53, 9, 52, 50, 9, 52, 52, 10, 52, 53, 9, 52, 51, 9, 52, 53, 10, 52, 53, 9, 52, 54, 9, 52, 51, 10, 52, 53, 9, 52, 55, 9, 52, 54, 10, 52, 53, 9, 56, 55, 9, 50, 57, 9, 51, 48, 10, 52, 54, 9, 52, 53, 9, 52, 52, 9, 49, 49, 10, 52, 55, 9, 52, 53, 9, 52, 51, 9, 49, 49, 10, 52, 56, 9, 52, 52, 9, 50, 57, 9, 49, 49, 10, 52, 57, 9, 53, 48, 9, 52, 51, 10, 52, 57, 9, 53, 49, 9, 52, 52, 10, 53, 48, 9, 52, 52, 9, 52, 51, 10, 53, 48, 9, 52, 57, 9, 52, 52, 10, 53, 48, 9, 53, 49, 9, 51, 48, 10, 53, 48, 9, 53, 50, 9, 52, 54, 10, 53, 49, 9, 52, 57, 9, 52, 52, 10, 53, 49, 9, 53, 48, 9, 50, 57, 10, 53, 49, 9, 53, 50, 9, 52, 51, 10, 53, 49, 9, 53, 51, 9, 52, 54, 10, 53, 50, 9, 53, 48, 9, 52, 52, 10, 53, 50, 9, 53, 49, 9, 52, 51, 10, 53, 50, 9, 53, 50, 9, 52, 54, 10, 53, 50, 9, 53, 51, 9, 50, 57, 10, 53, 50, 9, 53, 53, 9, 52, 53, 10, 53, 50, 9, 56, 54, 9, 51, 48, 10, 53, 51, 9, 53, 49, 9, 52, 52, 10, 53, 51, 9, 53, 50, 9, 52, 53, 10, 53, 51, 9, 53, 52, 9, 52, 54, 10, 53, 52, 9, 53, 51, 9, 52, 52, 9, 49, 49, 10, 53, 53, 9, 53, 50, 9, 52, 52, 10, 53, 53, 9, 53, 53, 9, 52, 53, 10, 53, 53, 9, 53, 54, 9, 51, 48, 10, 53, 53, 9, 53, 55, 9, 52, 51, 10, 53, 54, 9, 53, 53, 9, 50, 57, 9, 49, 49, 10, 53, 55, 9, 49, 51, 9, 51, 48, 9, 53, 54, 10, 53, 55, 9, 53, 53, 9, 52, 52, 10, 53, 55, 9, 53, 56, 9, 52, 54, 10, 53, 55, 9, 56, 51, 9, 52, 53, 10, 53, 55, 9, 56, 52, 9, 52, 51, 10, 53, 56, 9, 53, 55, 9, 52, 51, 9, 49, 49, 10, 53, 57, 9, 50, 55, 9, 49, 10, 54, 48, 9, 52, 49, 9, 52, 51, 9, 50, 57, 9, 49, 55, 10, 54, 48, 9, 54, 49, 9, 52, 52, 10, 54, 48, 9, 54, 50, 9, 52, 53, 9, 51, 48, 9, 53, 50, 10, 54, 49, 9, 54, 48, 9, 52, 51, 10, 54, 49, 9, 54, 50, 9, 52, 53, 10, 54, 49, 9, 49, 48, 48, 49, 48, 55, 9, 52, 54, 10, 54, 50, 9, 54, 48, 9, 52, 52, 10, 54, 50, 9, 54, 51, 9, 52, 53, 10, 54, 50, 9, 51, 48, 9, 52, 51, 10, 54, 50, 9, 54, 49, 9, 52, 54, 10, 54, 51, 9, 54, 50, 9, 52, 54, 9, 49, 49, 10, 54, 52, 9, 51, 57, 9, 50, 57, 9, 53, 54, 9, 53, 57, 10, 54, 52, 9, 54, 53, 9, 52, 52, 9, 55, 48, 10, 54, 52, 9, 49, 48, 51, 9, 52, 53, 9, 55, 52, 10, 54, 52, 9, 49, 48, 54, 9, 52, 51, 10, 54, 53, 9, 54, 52, 9, 52, 51, 10, 54, 53, 9, 54, 54, 9, 52, 52, 10, 54, 53, 9, 54, 53, 53, 53, 54, 9, 52, 54, 10, 54, 53, 9, 54, 56, 9, 54, 49, 10, 54, 53, 9, 54, 48, 53, 53, 54, 9, 50, 57, 10, 54, 53, 9, 55, 48, 48, 55, 48, 9, 50, 57, 10, 54, 53, 9, 51, 57, 9, 50, 57, 10, 54, 53, 9, 53, 48, 53, 53, 54, 9, 52, 53, 10, 54, 53, 9, 55, 53, 48, 55, 50, 9, 52, 53, 10, 54, 53, 9, 55, 49, 9, 52, 53, 10, 54, 53, 9, 54, 53, 53, 53, 54, 9, 51, 48, 10, 54, 53, 9, 49, 48, 54, 9, 51, 48, 10, 54, 54, 9, 54, 53, 9, 52, 55, 10, 54, 54, 9, 54, 55, 9, 52, 52, 10, 54, 54, 9, 56, 48, 53, 53, 54, 9, 52, 54, 10, 54, 54, 9, 55, 55, 9, 50, 53, 10, 54, 54, 9, 57, 54, 9, 52, 51, 10, 54, 54, 9, 53, 48, 53, 53, 54, 9, 53, 48, 10, 54, 54, 9, 57, 55, 9, 55, 50, 10, 54, 55, 9, 54, 54, 9, 52, 51, 10, 54, 55, 9, 50, 51, 9, 52, 52, 9, 52, 50, 10, 54, 55, 9, 50, 52, 9, 51, 48, 9, 51, 49, 10, 54, 56, 9, 50, 51, 9, 52, 54, 10, 54, 56, 9, 54, 57, 9, 50, 57, 9, 53, 54, 10, 54, 56, 9, 54, 53, 9, 52, 53, 10, 54, 57, 9, 54, 56, 9, 51, 48, 9, 54, 49, 10, 54, 57, 9, 51, 51, 49, 49, 50, 48, 9, 52, 54, 10, 54, 57, 9, 49, 49, 57, 9, 52, 54, 10, 54, 57, 9, 49, 48, 57, 9, 52, 53, 10, 54, 57, 9, 49, 49, 51, 9, 55, 53, 10, 55, 48, 9, 55, 49, 9, 52, 53, 10, 55, 48, 9, 54, 53, 9, 51, 48, 9, 50, 51, 10, 55, 48, 9, 49, 49, 49, 9, 52, 54, 10, 55, 49, 9, 54, 53, 9, 52, 56, 10, 55, 49, 9, 55, 48, 9, 52, 54, 10, 55, 49, 9, 49, 49, 48, 9, 52, 53, 10, 55, 50, 9, 54, 53, 9, 55, 48, 10, 55, 50, 9, 49, 49, 56, 9, 52, 57, 10, 55, 50, 9, 55, 51, 9, 52, 53, 10, 55, 50, 9, 57, 55, 9, 52, 56, 9, 55, 50, 10, 55, 51, 9, 55, 50, 9, 52, 54, 9, 49, 55, 9, 49, 49, 10, 55, 52, 9, 49, 57, 9, 52, 51, 10, 55, 52, 9, 51, 51, 49, 49, 50, 48, 9, 52, 52, 10, 55, 52, 9, 49, 50, 49, 9, 52, 52, 10, 55, 52, 9, 55, 53, 9, 51, 48, 10, 55, 53, 9, 55, 54, 9, 52, 54, 10, 55, 53, 9, 55, 55, 9, 52, 53, 10, 55, 54, 9, 55, 53, 9, 52, 53, 10, 55, 55, 9, 55, 53, 9, 52, 51, 10, 55, 55, 9, 55, 56, 9, 52, 52, 10, 55, 55, 9, 54, 54, 9, 52, 53, 9, 49, 55, 10, 55, 56, 9, 55, 55, 9, 52, 54, 10, 55, 57, 9, 51, 9, 49, 10, 56, 48, 9, 52, 50, 9, 52, 53, 10, 56, 48, 9, 56, 48, 9, 52, 52, 10, 56, 48, 9, 56, 48, 9, 52, 54, 10, 56, 48, 9, 56, 49, 9, 52, 51, 10, 56, 49, 9, 56, 48, 9, 52, 52, 9, 49, 49, 10, 56, 50, 9, 52, 52, 9, 52, 54, 9, 49, 49, 10, 56, 51, 9, 53, 55, 9, 52, 54, 10, 56, 51, 9, 56, 52, 9, 52, 51, 10, 56, 51, 9, 56, 53, 9, 52, 52, 10, 56, 52, 9, 53, 55, 9, 52, 53, 10, 56, 52, 9, 56, 51, 9, 52, 52, 10, 56, 52, 9, 49, 49, 52, 9, 53, 48, 10, 56, 53, 9, 56, 51, 9, 52, 51, 9, 49, 49, 10, 56, 54, 9, 53, 50, 9, 50, 57, 9, 49, 49, 10, 56, 55, 9, 52, 53, 9, 50, 57, 9, 51, 48, 10, 56, 56, 9, 50, 53, 9, 51, 48, 9, 53, 54, 9, 52, 51, 10, 56, 56, 9, 50, 48, 9, 51, 57, 10, 56, 56, 9, 57, 50, 9, 52, 52, 9, 50, 55, 10, 56, 57, 9, 50, 53, 9, 49, 10, 57, 48, 9, 50, 51, 9, 49, 10, 57, 49, 9, 57, 53, 9, 52, 53, 9, 55, 51, 9, 50, 51, 10, 57, 49, 9, 55, 50, 9, 51, 48, 9, 53, 54, 10, 57, 50, 9, 56, 56, 9, 52, 54, 10, 57, 50, 9, 57, 51, 9, 52, 51, 10, 57, 50, 9, 57, 52, 9, 52, 53, 10, 57, 51, 9, 57, 50, 9, 52, 54, 9, 50, 55, 9, 49, 49, 10, 57, 52, 9, 57, 50, 9, 52, 54, 9, 50, 55, 9, 50, 51, 10, 57, 52, 9, 51, 48, 57, 48, 57, 53, 9, 52, 53, 9, 51, 9, 55, 51, 10, 57, 52, 9, 54, 49, 49, 9, 52, 53, 10, 57, 53, 9, 57, 52, 9, 52, 54, 9, 49, 49, 10, 57, 53, 9, 57, 50, 9, 50, 55, 10, 57, 53, 9, 57, 49, 9, 52, 52, 10, 57, 54, 9, 54, 54, 9, 52, 52, 9, 49, 49, 10, 57, 55, 9, 54, 54, 9, 52, 56, 10, 57, 55, 9, 55, 50, 9, 52, 52, 9, 49, 55, 10, 57, 55, 9, 57, 56, 9, 50, 57, 9, 52, 53, 9, 55, 51, 10, 57, 56, 9, 57, 55, 9, 52, 54, 9, 55, 50, 10, 57, 56, 9, 57, 57, 9, 52, 52, 10, 57, 57, 9, 57, 56, 9, 53, 48, 9, 55, 51, 10, 57, 57, 9, 51, 48, 49, 9, 52, 51, 9, 50, 51, 10, 57, 57, 9, 49, 48, 48, 9, 52, 51, 10, 49, 48, 48, 9, 51, 48, 49, 9, 52, 52, 9, 50, 51, 9, 49, 49, 10, 49, 48, 48, 9, 57, 57, 9, 52, 52, 10, 49, 48, 48, 9, 49, 53, 57, 51, 48, 50, 9, 55, 49, 10, 49, 48, 48, 9, 49, 56, 52, 9, 55, 49, 10, 49, 48, 48, 9, 49, 48, 49, 9, 52, 55, 9, 50, 50, 10, 49, 48, 49, 9, 49, 48, 48, 9, 52, 54, 9, 55, 49, 9, 49, 49, 10, 49, 48, 50, 9, 49, 48, 51, 9, 51, 48, 9, 55, 52, 9, 49, 49, 10, 49, 48, 51, 9, 49, 48, 50, 9, 50, 57, 9, 51, 56, 10, 49, 48, 51, 9, 49, 48, 52, 9, 51, 48, 10, 49, 48, 51, 9, 49, 49, 52, 54, 49, 56, 9, 52, 54, 10, 49, 48, 51, 9, 49, 49, 53, 54, 49, 57, 9, 52, 54, 10, 49, 48, 51, 9, 54, 52, 9, 52, 54, 10, 49, 48, 52, 9, 49, 48, 51, 9, 50, 57, 9, 55, 52, 10, 49, 48, 52, 9, 49, 48, 53, 9, 51, 48, 10, 49, 48, 53, 9, 49, 48, 52, 9, 50, 57, 9, 49, 49, 10, 49, 48, 53, 9, 49, 48, 51, 9, 55, 52, 10, 49, 48, 54, 9, 54, 52, 9, 50, 57, 10, 49, 48, 54, 9, 54, 53, 9, 52, 52, 10, 49, 48, 54, 9, 49, 48, 56, 9, 52, 51, 10, 49, 48, 55, 9, 49, 51, 49, 9, 52, 54, 10, 49, 48, 55, 9, 49, 51, 50, 9, 52, 57, 10, 49, 48, 55, 9, 49, 51, 51, 9, 52, 55, 10, 49, 48, 55, 9, 49, 51, 52, 9, 52, 56, 10, 49, 48, 55, 9, 49, 51, 53, 9, 50, 57, 10, 49, 48, 55, 9, 49, 51, 54, 9, 53, 48, 10, 49, 48, 55, 9, 49, 51, 55, 9, 52, 51, 10, 49, 48, 55, 9, 49, 51, 56, 9, 52, 52, 10, 49, 48, 55, 9, 49, 51, 57, 9, 52, 53, 10, 49, 48, 55, 9, 54, 49, 9, 51, 48, 10, 49, 48, 56, 9, 57, 53, 53, 53, 54, 9, 52, 51, 9, 52, 53, 9, 52, 54, 9, 52, 55, 9, 52, 56, 9, 52, 57, 9, 53, 48, 9, 50, 57, 9, 51, 48, 10, 49, 48, 56, 9, 49, 48, 54, 9, 52, 51, 10, 49, 48, 56, 9, 54, 50, 54, 9, 52, 52, 10, 49, 48, 57, 9, 54, 57, 9, 52, 54, 10, 49, 48, 57, 9, 49, 49, 51, 9, 52, 53, 9, 55, 53, 10, 49, 49, 48, 9, 55, 49, 9, 52, 52, 10, 49, 49, 48, 9, 50, 48, 9, 51, 57, 10, 49, 49, 49, 9, 55, 48, 9, 52, 53, 10, 49, 49, 49, 9, 52, 48, 48, 53, 48, 9, 51, 48, 9, 51, 57, 9, 53, 54, 10, 49, 49, 49, 9, 53, 48, 48, 53, 51, 9, 51, 48, 10, 49, 49, 49, 9, 52, 53, 9, 51, 48, 10, 49, 49, 50, 9, 49, 51, 49, 9, 52, 57, 10, 49, 49, 50, 9, 49, 51, 50, 9, 52, 53, 10, 49, 49, 50, 9, 49, 51, 51, 9, 52, 51, 10, 49, 49, 50, 9, 49, 51, 52, 9, 53, 48, 10, 49, 49, 50, 9, 49, 51, 53, 9, 52, 56, 10, 49, 49, 50, 9, 49, 51, 54, 9, 52, 55, 10, 49, 49, 50, 9, 49, 51, 55, 9, 52, 52, 10, 49, 49, 50, 9, 49, 51, 56, 9, 51, 48, 10, 49, 49, 50, 9, 49, 51, 57, 9, 50, 57, 10, 49, 49, 50, 9, 49, 52, 48, 9, 52, 54, 10, 49, 49, 51, 9, 49, 48, 57, 9, 52, 54, 9, 49, 49, 10, 49, 49, 51, 9, 52, 52, 53, 53, 53, 50, 9, 52, 53, 9, 52, 50, 9, 54, 57, 10, 49, 49, 51, 9, 49, 54, 56, 9, 52, 53, 10, 49, 49, 52, 9, 56, 52, 9, 52, 56, 10, 49, 49, 53, 9, 49, 49, 54, 9, 52, 57, 10, 49, 49, 54, 9, 49, 49, 53, 9, 52, 55, 10, 49, 49, 54, 9, 53, 57, 51, 9, 51, 48, 10, 49, 49, 55, 9, 49, 49, 56, 9, 52, 57, 10, 49, 49, 55, 9, 50, 51, 51, 54, 54, 48, 9, 52, 49, 9, 52, 50, 9, 54, 57, 9, 52, 55, 10, 49, 49, 55, 9, 51, 51, 50, 54, 54, 49, 9, 52, 49, 10, 49, 49, 55, 9, 51, 48, 51, 9, 52, 49, 10, 49, 49, 55, 9, 51, 51, 50, 48, 50, 49, 9, 51, 57, 10, 49, 49, 55, 9, 53, 57, 54, 9, 51, 57, 10, 49, 49, 56, 9, 55, 50, 9, 51, 48, 10, 49, 49, 56, 9, 49, 49, 55, 9, 50, 57, 10, 49, 49, 57, 9, 54, 57, 9, 52, 53, 9, 49, 49, 10, 49, 49, 57, 9, 54, 53, 51, 9, 52, 51, 9, 55, 10, 49, 50, 48, 9, 54, 57, 9, 52, 53, 10, 49, 50, 48, 9, 55, 52, 9, 52, 51, 10, 49, 50, 49, 9, 55, 52, 9, 52, 51, 9, 49, 49, 10, 49, 50, 49, 9, 54, 53, 51, 9, 52, 53, 9, 55, 10, 49, 50, 50, 9, 49, 50, 51, 9, 52, 55, 10, 49, 50, 50, 9, 50, 51, 51, 54, 54, 48, 9, 52, 49, 9, 52, 50, 9, 54, 57, 9, 52, 57, 10, 49, 50, 50, 9, 51, 48, 51, 9, 52, 49, 10, 49, 50, 50, 9, 53, 57, 54, 9, 51, 57, 10, 49, 50, 50, 9, 49, 50, 52, 9, 49, 53, 10, 49, 50, 50, 9, 49, 50, 54, 9, 50, 56, 10, 49, 50, 50, 9, 49, 50, 57, 9, 52, 48, 10, 49, 50, 51, 9, 49, 50, 50, 9, 52, 52, 10, 49, 50, 51, 9, 49, 50, 52, 9, 52, 51, 9, 49, 53, 10, 49, 50, 51, 9, 49, 50, 54, 9, 50, 56, 10, 49, 50, 51, 9, 49, 50, 57, 9, 52, 48, 10, 49, 50, 52, 9, 49, 50, 51, 9, 52, 52, 10, 49, 50, 52, 9, 49, 50, 53, 9, 52, 55, 9, 51, 54, 10, 49, 50, 52, 9, 49, 50, 56, 9, 52, 56, 9, 51, 55, 9, 51, 48, 10, 49, 50, 52, 9, 49, 50, 54, 9, 50, 56, 10, 49, 50, 52, 9, 49, 50, 57, 9, 52, 48, 10, 49, 50, 53, 9, 49, 50, 52, 9, 52, 54, 9, 49, 53, 10, 49, 50, 53, 9, 49, 50, 54, 9, 52, 53, 9, 50, 56, 10, 49, 50, 53, 9, 49, 50, 55, 9, 52, 51, 9, 49, 55, 10, 49, 50, 54, 9, 49, 50, 53, 9, 52, 54, 9, 50, 51, 9, 49, 49, 10, 49, 50, 54, 9, 49, 50, 52, 9, 49, 53, 10, 49, 50, 54, 9, 54, 49, 48, 9, 51, 48, 10, 49, 50, 54, 9, 49, 55, 56, 9, 51, 57, 10, 49, 50, 55, 9, 49, 50, 53, 9, 52, 52, 9, 49, 49, 9, 49, 55, 10, 49, 50, 55, 9, 49, 50, 52, 9, 49, 53, 10, 49, 50, 55, 9, 49, 50, 54, 9, 50, 56, 10, 49, 50, 56, 9, 49, 50, 52, 9, 52, 53, 9, 50, 57, 9, 49, 53, 10, 49, 50, 56, 9, 49, 50, 57, 9, 52, 54, 9, 51, 48, 9, 52, 48, 10, 49, 50, 56, 9, 49, 50, 54, 9, 50, 56, 10, 49, 50, 57, 9, 49, 50, 56, 9, 52, 52, 9, 50, 57, 10, 49, 50, 57, 9, 49, 50, 52, 9, 49, 53, 10, 49, 50, 57, 9, 49, 51, 48, 9, 52, 51, 9, 49, 57, 9, 52, 48, 9, 51, 10, 49, 50, 57, 9, 49, 50, 54, 9, 50, 56, 10, 49, 51, 48, 9, 49, 50, 57, 9, 52, 52, 9, 49, 49, 10, 49, 51, 48, 9, 49, 50, 52, 9, 49, 53, 10, 49, 51, 48, 9, 49, 50, 54, 9, 50, 56, 10, 49, 51, 49, 9, 49, 48, 55, 9, 52, 52, 10, 49, 51, 49, 9, 49, 51, 50, 9, 52, 56, 10, 49, 51, 49, 9, 49, 51, 51, 9, 53, 48, 10, 49, 51, 49, 9, 49, 51, 52, 9, 52, 57, 10, 49, 51, 49, 9, 49, 51, 53, 9, 52, 55, 10, 49, 51, 49, 9, 49, 51, 54, 9, 50, 57, 10, 49, 51, 49, 9, 49, 51, 55, 9, 51, 48, 10, 49, 51, 49, 9, 49, 51, 56, 9, 52, 53, 10, 49, 51, 49, 9, 49, 51, 57, 9, 52, 54, 10, 49, 51, 49, 9, 49, 49, 50, 9, 52, 51, 10, 49, 51, 50, 9, 49, 48, 55, 9, 53, 48, 10, 49, 51, 50, 9, 49, 51, 49, 9, 50, 57, 10, 49, 51, 50, 9, 49, 51, 51, 9, 52, 53, 10, 49, 51, 50, 9, 49, 51, 52, 9, 52, 54, 10, 49, 51, 50, 9, 49, 51, 53, 9, 52, 52, 10, 49, 51, 50, 9, 49, 51, 54, 9, 52, 57, 10, 49, 51, 50, 9, 49, 51, 55, 9, 52, 55, 10, 49, 51, 50, 9, 49, 51, 56, 9, 52, 51, 10, 49, 51, 50, 9, 49, 51, 57, 9, 51, 48, 10, 49, 51, 50, 9, 49, 49, 50, 9, 52, 56, 10, 49, 51, 51, 9, 49, 48, 55, 9, 50, 57, 10, 49, 51, 51, 9, 49, 51, 49, 9, 51, 48, 10, 49, 51, 51, 9, 49, 51, 50, 9, 52, 52, 10, 49, 51, 51, 9, 49, 51, 52, 9, 52, 55, 10, 49, 51, 51, 9, 49, 51, 53, 9, 52, 57, 10, 49, 51, 51, 9, 49, 51, 54, 9, 52, 51, 10, 49, 51, 51, 9, 49, 51, 55, 9, 52, 53, 10, 49, 51, 51, 9, 49, 51, 56, 9, 53, 48, 10, 49, 51, 51, 9, 49, 51, 57, 9, 52, 56, 10, 49, 51, 51, 9, 49, 49, 50, 9, 52, 54, 10, 49, 51, 52, 9, 49, 48, 55, 9, 52, 55, 10, 49, 51, 52, 9, 49, 51, 49, 9, 52, 53, 10, 49, 51, 52, 9, 49, 51, 50, 9, 53, 48, 10, 49, 51, 52, 9, 49, 51, 51, 9, 52, 56, 10, 49, 51, 52, 9, 49, 51, 53, 9, 52, 51, 10, 49, 51, 52, 9, 49, 51, 54, 9, 51, 48, 10, 49, 51, 52, 9, 49, 51, 55, 9, 52, 54, 10, 49, 51, 52, 9, 49, 51, 56, 9, 50, 57, 10, 49, 51, 52, 9, 49, 51, 57, 9, 52, 52, 10, 49, 51, 52, 9, 49, 49, 50, 9, 52, 57, 10, 49, 51, 53, 9, 49, 48, 55, 9, 52, 53, 10, 49, 51, 53, 9, 49, 51, 49, 9, 52, 56, 10, 49, 51, 53, 9, 49, 51, 50, 9, 51, 48, 10, 49, 51, 53, 9, 49, 51, 51, 9, 52, 54, 10, 49, 51, 53, 9, 49, 51, 52, 9, 52, 51, 10, 49, 51, 53, 9, 49, 51, 54, 9, 52, 52, 10, 49, 51, 53, 9, 49, 51, 55, 9, 52, 57, 10, 49, 51, 53, 9, 49, 51, 56, 9, 52, 55, 10, 49, 51, 53, 9, 49, 51, 57, 9, 53, 48, 10, 49, 51, 53, 9, 49, 49, 50, 9, 50, 57, 10, 49, 51, 54, 9, 49, 48, 55, 9, 52, 51, 10, 49, 51, 54, 9, 49, 51, 49, 9, 52, 52, 10, 49, 51, 54, 9, 49, 51, 50, 9, 50, 57, 10, 49, 51, 54, 9, 49, 51, 51, 9, 52, 57, 10, 49, 51, 54, 9, 49, 51, 52, 9, 51, 48, 10, 49, 51, 54, 9, 49, 51, 53, 9, 52, 54, 10, 49, 51, 54, 9, 49, 51, 55, 9, 53, 48, 10, 49, 51, 54, 9, 49, 51, 56, 9, 52, 56, 10, 49, 51, 54, 9, 49, 51, 57, 9, 52, 55, 10, 49, 51, 54, 9, 49, 49, 50, 9, 52, 53, 10, 49, 51, 55, 9, 49, 48, 55, 9, 52, 56, 10, 49, 51, 55, 9, 49, 51, 49, 9, 52, 55, 10, 49, 51, 55, 9, 49, 51, 50, 9, 52, 54, 10, 49, 51, 55, 9, 49, 51, 51, 9, 51, 48, 10, 49, 51, 55, 9, 49, 51, 52, 9, 50, 57, 10, 49, 51, 55, 9, 49, 51, 53, 9, 53, 48, 10, 49, 51, 55, 9, 49, 51, 54, 9, 52, 53, 10, 49, 51, 55, 9, 49, 51, 56, 9, 52, 57, 10, 49, 51, 55, 9, 49, 51, 57, 9, 52, 51, 10, 49, 51, 55, 9, 49, 49, 50, 9, 52, 52, 10, 49, 51, 56, 9, 49, 48, 55, 9, 51, 48, 10, 49, 51, 56, 9, 49, 51, 49, 9, 52, 51, 10, 49, 51, 56, 9, 49, 51, 50, 9, 52, 55, 10, 49, 51, 56, 9, 49, 51, 51, 9, 50, 57, 10, 49, 51, 56, 9, 49, 51, 52, 9, 52, 52, 10, 49, 51, 56, 9, 49, 51, 53, 9, 52, 53, 10, 49, 51, 56, 9, 49, 51, 54, 9, 52, 54, 10, 49, 51, 56, 9, 49, 51, 55, 9, 52, 56, 10, 49, 51, 56, 9, 49, 51, 57, 9, 52, 57, 10, 49, 51, 56, 9, 49, 49, 50, 9, 53, 48, 10, 49, 51, 57, 9, 49, 48, 55, 9, 52, 57, 10, 49, 51, 57, 9, 49, 51, 49, 9, 53, 48, 10, 49, 51, 57, 9, 49, 51, 50, 9, 52, 51, 10, 49, 51, 57, 9, 49, 51, 51, 9, 52, 52, 10, 49, 51, 57, 9, 49, 51, 52, 9, 52, 53, 10, 49, 51, 57, 9, 49, 51, 53, 9, 51, 48, 10, 49, 51, 57, 9, 49, 51, 54, 9, 52, 56, 10, 49, 51, 57, 9, 49, 51, 55, 9, 50, 57, 10, 49, 51, 57, 9, 49, 51, 56, 9, 52, 54, 10, 49, 51, 57, 9, 49, 49, 50, 9, 52, 55, 10, 49, 52, 48, 9, 49, 49, 50, 9, 52, 53, 9, 49, 49, 10, 49, 52, 48, 9, 51, 51, 56, 49, 52, 49, 9, 52, 54, 10, 49, 52, 48, 9, 49, 52, 50, 9, 52, 54, 10, 49, 52, 49, 9, 49, 52, 48, 9, 52, 53, 10, 49, 52, 49, 9, 49, 52, 51, 9, 52, 54, 10, 49, 52, 50, 9, 49, 52, 48, 9, 49, 10, 49, 52, 51, 9, 49, 52, 49, 9, 52, 52, 10, 49, 52, 51, 9, 50, 52, 49, 53, 54, 48, 9, 52, 53, 10, 49, 52, 51, 9, 49, 52, 52, 9, 52, 53, 10, 49, 52, 52, 9, 49, 52, 51, 9, 52, 54, 9, 49, 49, 10, 49, 52, 53, 9, 49, 9, 52, 51, 10, 49, 52, 53, 9, 49, 53, 55, 9, 52, 52, 10, 49, 52, 53, 9, 49, 52, 54, 9, 52, 53, 10, 49, 52, 53, 9, 49, 52, 55, 9, 52, 54, 10, 49, 52, 54, 9, 49, 52, 53, 9, 52, 51, 10, 49, 52, 54, 9, 49, 54, 51, 9, 52, 52, 10, 49, 52, 54, 9, 49, 52, 55, 9, 52, 53, 10, 49, 52, 54, 9, 49, 54, 50, 9, 52, 54, 10, 49, 52, 55, 9, 49, 52, 56, 9, 52, 51, 9, 52, 52, 10, 49, 52, 55, 9, 49, 52, 54, 9, 52, 53, 10, 49, 52, 55, 9, 49, 52, 53, 9, 52, 54, 10, 49, 52, 56, 9, 49, 52, 55, 9, 52, 51, 9, 52, 53, 10, 49, 52, 56, 9, 49, 52, 57, 9, 52, 52, 9, 52, 54, 10, 49, 52, 57, 9, 49, 52, 56, 9, 52, 51, 9, 52, 53, 10, 49, 52, 57, 9, 49, 53, 49, 9, 52, 52, 10, 49, 52, 57, 9, 49, 53, 48, 9, 52, 54, 10, 49, 53, 48, 9, 49, 52, 57, 9, 52, 51, 10, 49, 53, 48, 9, 49, 53, 49, 9, 52, 52, 10, 49, 53, 48, 9, 52, 9, 52, 53, 10, 49, 53, 48, 9, 55, 9, 52, 54, 10, 49, 53, 49, 9, 49, 52, 57, 9, 52, 51, 10, 49, 53, 49, 9, 49, 53, 48, 9, 52, 52, 10, 49, 53, 49, 9, 56, 9, 52, 53, 10, 49, 53, 49, 9, 49, 53, 50, 9, 52, 54, 10, 49, 53, 50, 9, 49, 53, 51, 9, 52, 51, 10, 49, 53, 50, 9, 49, 53, 53, 9, 52, 52, 10, 49, 53, 50, 9, 49, 54, 54, 9, 52, 53, 10, 49, 53, 50, 9, 49, 53, 49, 9, 52, 54, 10, 49, 53, 51, 9, 49, 53, 53, 9, 52, 51, 10, 49, 53, 51, 9, 49, 53, 50, 9, 52, 52, 10, 49, 53, 51, 9, 49, 53, 52, 9, 52, 53, 10, 49, 53, 51, 9, 56, 9, 52, 54, 10, 49, 53, 52, 9, 55, 9, 52, 51, 10, 49, 53, 52, 9, 49, 53, 53, 9, 52, 52, 10, 49, 53, 52, 9, 49, 53, 51, 9, 52, 53, 10, 49, 53, 52, 9, 56, 9, 52, 54, 10, 49, 53, 53, 9, 49, 53, 52, 9, 52, 51, 10, 49, 53, 53, 9, 49, 53, 50, 9, 52, 52, 10, 49, 53, 53, 9, 49, 54, 54, 9, 52, 53, 10, 49, 53, 53, 9, 49, 53, 51, 9, 52, 54, 10, 49, 53, 54, 9, 49, 53, 55, 9, 52, 51, 10, 49, 53, 54, 9, 49, 53, 56, 9, 52, 52, 10, 49, 53, 54, 9, 49, 54, 54, 9, 52, 53, 10, 49, 53, 54, 9, 52, 9, 52, 54, 10, 49, 53, 55, 9, 49, 52, 53, 9, 52, 51, 10, 49, 53, 55, 9, 49, 53, 54, 9, 52, 52, 10, 49, 53, 55, 9, 49, 54, 52, 9, 52, 53, 10, 49, 53, 55, 9, 50, 9, 52, 54, 10, 49, 53, 56, 9, 53, 9, 52, 51, 10, 49, 53, 56, 9, 49, 54, 48, 9, 52, 52, 10, 49, 53, 56, 9, 49, 53, 57, 9, 52, 53, 10, 49, 53, 56, 9, 49, 53, 54, 9, 52, 54, 10, 49, 53, 57, 9, 49, 54, 48, 9, 52, 51, 10, 49, 53, 57, 9, 49, 54, 54, 9, 52, 52, 10, 49, 53, 57, 9, 53, 9, 52, 53, 10, 49, 53, 57, 9, 49, 53, 56, 9, 52, 54, 10, 49, 54, 48, 9, 49, 54, 49, 9, 52, 51, 9, 52, 53, 10, 49, 54, 48, 9, 49, 53, 56, 9, 52, 52, 10, 49, 54, 48, 9, 49, 53, 57, 9, 52, 54, 10, 49, 54, 49, 9, 49, 54, 50, 9, 52, 51, 10, 49, 54, 49, 9, 49, 54, 48, 9, 52, 52, 9, 52, 54, 10, 49, 54, 49, 9, 54, 9, 52, 53, 10, 49, 54, 50, 9, 49, 54, 51, 9, 52, 51, 10, 49, 54, 50, 9, 49, 54, 49, 9, 52, 52, 10, 49, 54, 50, 9, 49, 52, 54, 9, 52, 53, 10, 49, 54, 50, 9, 49, 54, 53, 9, 52, 54, 10, 49, 54, 51, 9, 49, 52, 54, 9, 52, 51, 10, 49, 54, 51, 9, 49, 54, 50, 9, 52, 52, 10, 49, 54, 51, 9, 54, 9, 52, 53, 10, 49, 54, 51, 9, 49, 54, 52, 9, 52, 54, 10, 49, 54, 52, 9, 50, 9, 52, 51, 10, 49, 54, 52, 9, 49, 54, 53, 9, 52, 52, 10, 49, 54, 52, 9, 49, 54, 51, 9, 52, 53, 10, 49, 54, 52, 9, 49, 53, 55, 9, 52, 54, 10, 49, 54, 53, 9, 49, 54, 52, 9, 52, 51, 10, 49, 54, 53, 9, 53, 9, 52, 52, 10, 49, 54, 53, 9, 49, 54, 50, 9, 52, 53, 10, 49, 54, 53, 9, 49, 54, 53, 9, 52, 54, 10, 49, 54, 54, 9, 49, 53, 50, 9, 52, 51, 10, 49, 54, 54, 9, 49, 53, 53, 9, 52, 52, 10, 49, 54, 54, 9, 49, 53, 57, 9, 52, 53, 10, 49, 54, 54, 9, 49, 53, 54, 9, 52, 54, 10, 49, 54, 55, 9, 50, 49, 9, 51, 57, 10, 49, 54, 56, 9, 49, 54, 57, 9, 52, 53, 10, 49, 54, 56, 9, 49, 49, 51, 9, 52, 54, 10, 49, 54, 57, 9, 52, 52, 53, 53, 53, 50, 9, 52, 54, 9, 52, 50, 9, 54, 57, 10, 49, 54, 57, 9, 49, 54, 56, 9, 52, 54, 10, 49, 54, 57, 9, 49, 55, 48, 9, 53, 48, 9, 50, 57, 9, 49, 49, 10, 49, 55, 48, 9, 49, 55, 49, 9, 50, 57, 9, 53, 48, 10, 49, 55, 48, 9, 49, 54, 57, 9, 51, 48, 9, 52, 56, 10, 49, 55, 49, 9, 49, 55, 48, 9, 51, 48, 9, 52, 56, 10, 49, 55, 49, 9, 49, 55, 50, 9, 50, 57, 9, 53, 48, 10, 49, 55, 50, 9, 49, 55, 49, 9, 51, 48, 9, 52, 56, 10, 49, 55, 50, 9, 49, 55, 51, 9, 50, 57, 9, 53, 54, 10, 49, 55, 51, 9, 49, 55, 50, 9, 51, 48, 10, 49, 55, 51, 9, 49, 52, 54, 49, 55, 53, 9, 50, 57, 10, 49, 55, 51, 9, 49, 55, 52, 9, 50, 57, 10, 49, 55, 52, 9, 48, 9, 49, 10, 49, 55, 53, 9, 49, 55, 54, 9, 49, 10, 49, 55, 54, 9, 49, 55, 51, 9, 53, 54, 9, 51, 48, 10, 49, 55, 54, 9, 49, 55, 55, 9, 52, 55, 9, 49, 55, 10, 49, 55, 55, 9, 49, 55, 54, 9, 52, 57, 9, 49, 49, 9, 49, 55, 10, 49, 55, 56, 9, 48, 9, 49, 10, 49, 55, 57, 9, 49, 49, 9, 49, 10, 49, 56, 48, 9, 51, 9, 49, 10, 49, 56, 49, 9, 51, 51, 9, 49, 10, 49, 56, 50, 9, 51, 9, 49, 10, 49, 56, 51, 9, 49, 48, 48, 9, 49, 10, 49, 56, 52, 9, 51, 51, 9, 49, 10, 45, 49, 10, 52, 10, 50, 9, 82, 79, 65, 68, 10, 50, 9, 72, 73, 76, 76, 10, 51, 9, 69, 78, 84, 69, 82, 10, 52, 9, 85, 80, 83, 84, 82, 10, 53, 9, 68, 79, 87, 78, 83, 10, 54, 9, 70, 79, 82, 69, 83, 10, 55, 9, 70, 79, 82, 87, 65, 10, 55, 9, 67, 79, 78, 84, 73, 10, 55, 9, 79, 78, 87, 65, 82, 10, 56, 9, 66, 65, 67, 75, 10, 56, 9, 82, 69, 84, 85, 82, 10, 56, 9, 82, 69, 84, 82]); | |
fileData0.push.apply(fileData0, [69, 10, 57, 9, 86, 65, 76, 76, 69, 10, 49, 48, 9, 83, 84, 65, 73, 82, 10, 49, 49, 9, 79, 85, 84, 10, 49, 49, 9, 79, 85, 84, 83, 73, 10, 49, 49, 9, 69, 88, 73, 84, 10, 49, 49, 9, 76, 69, 65, 86, 69, 10, 49, 50, 9, 66, 85, 73, 76, 68, 10, 49, 50, 9, 72, 79, 85, 83, 69, 10, 49, 51, 9, 71, 85, 76, 76, 89, 10, 49, 52, 9, 83, 84, 82, 69, 65, 10, 49, 53, 9, 70, 79, 82, 75, 10, 49, 54, 9, 66, 69, 68, 10, 49, 55, 9, 67, 82, 65, 87, 76, 10, 49, 56, 9, 67, 79, 66, 66, 76, 10, 49, 57, 9, 73, 78, 87, 65, 82, 10, 49, 57, 9, 73, 78, 83, 73, 68, 10, 49, 57, 9, 73, 78, 10, 50, 48, 9, 83, 85, 82, 70, 65, 10, 50, 49, 9, 78, 85, 76, 76, 10, 50, 49, 9, 78, 79, 87, 72, 69, 10, 50, 50, 9, 68, 65, 82, 75, 10, 50, 51, 9, 80, 65, 83, 83, 65, 10, 50, 51, 9, 84, 85, 78, 78, 69, 10, 50, 52, 9, 76, 79, 87, 10, 50, 53, 9, 67, 65, 78, 89, 79, 10, 50, 54, 9, 65, 87, 75, 87, 65, 10, 50, 55, 9, 71, 73, 65, 78, 84, 10, 50, 56, 9, 86, 73, 69, 87, 10, 50, 57, 9, 85, 80, 87, 65, 82, 10, 50, 57, 9, 85, 80, 10, 50, 57, 9, 85, 10, 50, 57, 9, 65, 66, 79, 86, 69, 10, 50, 57, 9, 65, 83, 67, 69, 78, 10, 51, 48, 9, 68, 10, 51, 48, 9, 68, 79, 87, 78, 87, 10, 51, 48, 9, 68, 79, 87, 78, 10, 51, 48, 9, 68, 69, 83, 67, 69, 10, 51, 49, 9, 80, 73, 84, 10, 51, 50, 9, 79, 85, 84, 68, 79, 10, 51, 51, 9, 67, 82, 65, 67, 75, 10, 51, 52, 9, 83, 84, 69, 80, 83, 10, 51, 53, 9, 68, 79, 77, 69, 10, 51, 54, 9, 76, 69, 70, 84, 10, 51, 55, 9, 82, 73, 71, 72, 84, 10, 51, 56, 9, 72, 65, 76, 76, 10, 51, 57, 9, 74, 85, 77, 80, 10, 52, 48, 9, 66, 65, 82, 82, 69, 10, 52, 49, 9, 79, 86, 69, 82, 10, 52, 50, 9, 65, 67, 82, 79, 83, 10, 52, 51, 9, 69, 65, 83, 84, 10, 52, 51, 9, 69, 10, 52, 52, 9, 87, 69, 83, 84, 10, 52, 52, 9, 87, 10, 52, 53, 9, 78, 79, 82, 84, 72, 10, 52, 53, 9, 78, 10, 52, 54, 9, 83, 79, 85, 84, 72, 10, 52, 54, 9, 83, 10, 52, 55, 9, 78, 69, 10, 52, 56, 9, 83, 69, 10, 52, 57, 9, 83, 87, 10, 53, 48, 9, 78, 87, 10, 53, 49, 9, 68, 69, 66, 82, 73, 10, 53, 50, 9, 72, 79, 76, 69, 10, 53, 51, 9, 87, 65, 76, 76, 10, 53, 52, 9, 66, 82, 79, 75, 69, 10, 53, 53, 9, 89, 50, 10, 53, 54, 9, 67, 76, 73, 77, 66, 10, 53, 55, 9, 76, 79, 79, 75, 10, 53, 55, 9, 69, 88, 65, 77, 73, 10, 53, 55, 9, 84, 79, 85, 67, 72, 10, 53, 55, 9, 68, 69, 83, 67, 82, 10, 53, 56, 9, 70, 76, 79, 79, 82, 10, 53, 57, 9, 82, 79, 79, 77, 10, 54, 48, 9, 83, 76, 73, 84, 10, 54, 49, 9, 83, 76, 65, 66, 10, 54, 49, 9, 83, 76, 65, 66, 82, 10, 54, 50, 9, 88, 89, 90, 90, 89, 10, 54, 51, 9, 68, 69, 80, 82, 69, 10, 54, 52, 9, 69, 78, 84, 82, 65, 10, 54, 53, 9, 80, 76, 85, 71, 72, 10, 54, 54, 9, 83, 69, 67, 82, 69, 10, 54, 55, 9, 67, 65, 86, 69, 10, 54, 57, 9, 67, 82, 79, 83, 83, 10, 55, 48, 9, 66, 69, 68, 81, 85, 10, 55, 49, 9, 80, 76, 79, 86, 69, 10, 55, 50, 9, 79, 82, 73, 69, 78, 10, 55, 51, 9, 67, 65, 86, 69, 82, 10, 55, 52, 9, 83, 72, 69, 76, 76, 10, 55, 53, 9, 82, 69, 83, 69, 82, 10, 55, 54, 9, 77, 65, 73, 78, 10, 55, 54, 9, 79, 70, 70, 73, 67, 10, 49, 48, 48, 49, 9, 75, 69, 89, 83, 10, 49, 48, 48, 49, 9, 75, 69, 89, 10, 49, 48, 48, 50, 9, 76, 65, 77, 80, 10, 49, 48, 48, 50, 9, 76, 65, 78, 84, 69, 10, 49, 48, 48, 51, 9, 71, 82, 65, 84, 69, 10, 49, 48, 48, 52, 9, 67, 65, 71, 69, 10, 49, 48, 48, 53, 9, 82, 79, 68, 10, 49, 48, 48, 54, 9, 82, 79, 68, 32, 32, 32, 32, 32, 40, 77, 85, 83, 84, 32, 66, 69, 32, 78, 69, 88, 84, 32, 79, 66, 74, 69, 67, 84, 32, 65, 70, 84, 69, 82, 32, 34, 82, 69, 65, 76, 34, 32, 82, 79, 68, 41, 10, 49, 48, 48, 55, 9, 83, 84, 69, 80, 83, 10, 49, 48, 48, 56, 9, 66, 73, 82, 68, 10, 49, 48, 48, 57, 9, 68, 79, 79, 82, 10, 49, 48, 49, 48, 9, 80, 73, 76, 76, 79, 10, 49, 48, 49, 48, 9, 86, 69, 76, 86, 69, 10, 49, 48, 49, 49, 9, 83, 78, 65, 75, 69, 10, 49, 48, 49, 50, 9, 70, 73, 83, 83, 85, 10, 49, 48, 49, 51, 9, 84, 65, 66, 76, 69, 10, 49, 48, 49, 52, 9, 67, 76, 65, 77, 10, 49, 48, 49, 53, 9, 79, 89, 83, 84, 69, 10, 49, 48, 49, 54, 9, 77, 65, 71, 65, 90, 10, 49, 48, 49, 54, 9, 73, 83, 83, 85, 69, 10, 49, 48, 49, 54, 9, 83, 80, 69, 76, 85, 10, 49, 48, 49, 54, 9, 34, 83, 80, 69, 76, 10, 49, 48, 49, 55, 9, 68, 87, 65, 82, 70, 10, 49, 48, 49, 55, 9, 68, 87, 65, 82, 86, 10, 49, 48, 49, 56, 9, 75, 78, 73, 70, 69, 10, 49, 48, 49, 56, 9, 75, 78, 73, 86, 69, 10, 49, 48, 49, 57, 9, 70, 79, 79, 68, 10, 49, 48, 49, 57, 9, 82, 65, 84, 73, 79, 10, 49, 48, 50, 48, 9, 66, 79, 84, 84, 76, 10, 49, 48, 50, 48, 9, 74, 65, 82, 10, 49, 48, 50, 49, 9, 87, 65, 84, 69, 82, 10, 49, 48, 50, 49, 9, 72, 50, 79, 10, 49, 48, 50, 50, 9, 79, 73, 76, 10, 49, 48, 50, 51, 9, 77, 73, 82, 82, 79, 10, 49, 48, 50, 52, 9, 80, 76, 65, 78, 84, 10, 49, 48, 50, 52, 9, 66, 69, 65, 78, 83, 10, 49, 48, 50, 53, 9, 80, 76, 65, 78, 84, 9, 40, 77, 85, 83, 84, 32, 66, 69, 32, 78, 69, 88, 84, 32, 79, 66, 74, 69, 67, 84, 32, 65, 70, 84, 69, 82, 32, 34, 82, 69, 65, 76, 34, 32, 80, 76, 65, 78, 84, 41, 10, 49, 48, 50, 54, 9, 83, 84, 65, 76, 65, 10, 49, 48, 50, 55, 9, 83, 72, 65, 68, 79, 10, 49, 48, 50, 55, 9, 70, 73, 71, 85, 82, 10, 49, 48, 50, 55, 9, 87, 73, 78, 68, 79, 9, 40, 83, 65, 77, 69, 32, 65, 83, 32, 70, 73, 71, 85, 82, 69, 41, 10, 49, 48, 50, 56, 9, 65, 88, 69, 10, 49, 48, 50, 57, 9, 68, 82, 65, 87, 73, 10, 49, 48, 51, 48, 9, 80, 73, 82, 65, 84, 10, 49, 48, 51, 48, 9, 71, 69, 78, 73, 69, 10, 49, 48, 51, 48, 9, 68, 74, 73, 78, 78, 10, 49, 48, 51, 49, 9, 68, 82, 65, 71, 79, 10, 49, 48, 51, 50, 9, 67, 72, 65, 83, 77, 10, 49, 48, 51, 51, 9, 84, 82, 79, 76, 76, 10, 49, 48, 51, 52, 9, 84, 82, 79, 76, 76, 9, 40, 77, 85, 83, 84, 32, 66, 69, 32, 78, 69, 88, 84, 32, 79, 66, 74, 69, 67, 84, 32, 65, 70, 84, 69, 82, 32, 34, 82, 69, 65, 76, 34, 32, 84, 82, 79, 76, 76, 41, 10, 49, 48, 51, 53, 9, 66, 69, 65, 82, 10, 49, 48, 51, 54, 9, 77, 69, 83, 83, 65, 10, 49, 48, 51, 55, 9, 86, 79, 76, 67, 65, 10, 49, 48, 51, 55, 9, 71, 69, 89, 83, 69, 9, 40, 83, 65, 77, 69, 32, 65, 83, 32, 86, 79, 76, 67, 65, 78, 79, 41, 10, 49, 48, 51, 56, 9, 77, 65, 67, 72, 73, 10, 49, 48, 51, 56, 9, 86, 69, 78, 68, 73, 10, 49, 48, 51, 57, 9, 66, 65, 84, 84, 69, 10, 49, 48, 52, 48, 9, 67, 65, 82, 80, 69, 10, 49, 48, 52, 48, 9, 77, 79, 83, 83, 10, 49, 48, 52, 48, 9, 67, 85, 82, 84, 65, 9, 40, 83, 65, 77, 69, 32, 65, 83, 32, 67, 65, 82, 80, 69, 84, 41, 10, 49, 48, 52, 49, 9, 79, 71, 82, 69, 10, 49, 48, 52, 50, 9, 85, 82, 78, 10, 49, 48, 52, 51, 9, 67, 65, 86, 73, 84, 10, 49, 48, 52, 52, 9, 66, 76, 79, 79, 68, 10, 49, 48, 52, 53, 9, 82, 69, 83, 69, 82, 9, 40, 86, 69, 82, 66, 32, 79, 86, 69, 82, 82, 73, 68, 69, 83, 41, 10, 49, 48, 52, 54, 9, 65, 80, 80, 69, 78, 10, 49, 48, 52, 54, 9, 76, 69, 80, 79, 82, 10, 49, 48, 52, 55, 9, 77, 85, 68, 10, 49, 48, 52, 56, 9, 78, 79, 84, 69, 10, 49, 48, 52, 57, 9, 83, 73, 71, 78, 10, 49, 48, 53, 48, 9, 71, 79, 76, 68, 10, 49, 48, 53, 48, 9, 78, 85, 71, 71, 69, 10, 49, 48, 53, 49, 9, 68, 73, 65, 77, 79, 10, 49, 48, 53, 50, 9, 83, 73, 76, 86, 69, 10, 49, 48, 53, 50, 9, 66, 65, 82, 83, 10, 49, 48, 53, 51, 9, 74, 69, 87, 69, 76, 10, 49, 48, 53, 52, 9, 67, 79, 73, 78, 83, 10, 49, 48, 53, 53, 9, 67, 72, 69, 83, 84, 10, 49, 48, 53, 53, 9, 66, 79, 88, 10, 49, 48, 53, 53, 9, 84, 82, 69, 65, 83, 10, 49, 48, 53, 54, 9, 69, 71, 71, 83, 10, 49, 48, 53, 54, 9, 69, 71, 71, 10, 49, 48, 53, 54, 9, 78, 69, 83, 84, 10, 49, 48, 53, 55, 9, 84, 82, 73, 68, 69, 10, 49, 48, 53, 56, 9, 86, 65, 83, 69, 10, 49, 48, 53, 56, 9, 77, 73, 78, 71, 10, 49, 48, 53, 56, 9, 83, 72, 65, 82, 68, 10, 49, 48, 53, 56, 9, 80, 79, 84, 84, 69, 10, 49, 48, 53, 57, 9, 69, 77, 69, 82, 65, 10, 49, 48, 54, 48, 9, 80, 76, 65, 84, 73, 10, 49, 48, 54, 48, 9, 80, 89, 82, 65, 77, 10, 49, 48, 54, 49, 9, 80, 69, 65, 82, 76, 10, 49, 48, 54, 50, 9, 82, 85, 71, 10, 49, 48, 54, 50, 9, 80, 69, 82, 83, 73, 10, 49, 48, 54, 51, 9, 83, 80, 73, 67, 69, 10, 49, 48, 54, 52, 9, 67, 72, 65, 73, 78, 10, 49, 48, 54, 53, 9, 82, 85, 66, 89, 10, 49, 48, 54, 54, 9, 74, 65, 68, 69, 10, 49, 48, 54, 54, 9, 78, 69, 67, 75, 76, 10, 49, 48, 54, 55, 9, 65, 77, 66, 69, 82, 10, 49, 48, 54, 55, 9, 71, 69, 77, 83, 84, 10, 49, 48, 54, 56, 9, 83, 65, 80, 80, 72, 10, 49, 48, 54, 57, 9, 69, 66, 79, 78, 89, 10, 49, 48, 54, 57, 9, 83, 84, 65, 84, 85, 10, 50, 48, 48, 49, 9, 67, 65, 82, 82, 89, 10, 50, 48, 48, 49, 9, 84, 65, 75, 69, 10, 50, 48, 48, 49, 9, 75, 69, 69, 80, 10, 50, 48, 48, 49, 9, 67, 65, 84, 67, 72, 10, 50, 48, 48, 49, 9, 83, 84, 69, 65, 76, 10, 50, 48, 48, 49, 9, 67, 65, 80, 84, 85, 10, 50, 48, 48, 49, 9, 71, 69, 84, 10, 50, 48, 48, 49, 9, 84, 79, 84, 69, 10, 50, 48, 48, 49, 9, 83, 78, 65, 82, 70, 10, 50, 48, 48, 50, 9, 68, 82, 79, 80, 10, 50, 48, 48, 50, 9, 82, 69, 76, 69, 65, 10, 50, 48, 48, 50, 9, 70, 82, 69, 69, 10, 50, 48, 48, 50, 9, 68, 73, 83, 67, 65, 10, 50, 48, 48, 50, 9, 68, 85, 77, 80, 10, 50, 48, 48, 51, 9, 83, 65, 89, 10, 50, 48, 48, 51, 9, 67, 72, 65, 78, 84, 10, 50, 48, 48, 51, 9, 83, 73, 78, 71, 10, 50, 48, 48, 51, 9, 85, 84, 84, 69, 82, 10, 50, 48, 48, 51, 9, 77, 85, 77, 66, 76, 10, 50, 48, 48, 52, 9, 85, 78, 76, 79, 67, 10, 50, 48, 48, 52, 9, 79, 80, 69, 78, 10, 50, 48, 48, 53, 9, 78, 79, 84, 72, 73, 10, 50, 48, 48, 54, 9, 76, 79, 67, 75, 10, 50, 48, 48, 54, 9, 67, 76, 79, 83, 69, 10, 50, 48, 48, 55, 9, 76, 73, 71, 72, 84, 10, 50, 48, 48, 55, 9, 79, 78, 10, 50, 48, 48, 56, 9, 69, 88, 84, 73, 78, 10, 50, 48, 48, 56, 9, 79, 70, 70, 10, 50, 48, 48, 57, 9, 87, 65, 86, 69, 10, 50, 48, 48, 57, 9, 83, 72, 65, 75, 69, 10, 50, 48, 48, 57, 9, 83, 87, 73, 78, 71, 10, 50, 48, 49, 48, 9, 67, 65, 76, 77, 10, 50, 48, 49, 48, 9, 80, 76, 65, 67, 65, 10, 50, 48, 49, 48, 9, 84, 65, 77, 69, 10, 50, 48, 49, 49, 9, 87, 65, 76, 75, 10, 50, 48, 49, 49, 9, 82, 85, 78, 10, 50, 48, 49, 49, 9, 84, 82, 65, 86, 69, 10, 50, 48, 49, 49, 9, 71, 79, 10, 50, 48, 49, 49, 9, 80, 82, 79, 67, 69, 10, 50, 48, 49, 49, 9, 67, 79, 78, 84, 73, 10, 50, 48, 49, 49, 9, 69, 88, 80, 76, 79, 10, 50, 48, 49, 49, 9, 70, 79, 76, 76, 79, 10, 50, 48, 49, 49, 9, 84, 85, 82, 78, 10, 50, 48, 49, 50, 9, 65, 84, 84, 65, 67, 10, 50, 48, 49, 50, 9, 75, 73, 76, 76, 10, 50, 48, 49, 50, 9, 70, 73, 71, 72, 84, 10, 50, 48, 49, 50, 9, 72, 73, 84, 10, 50, 48, 49, 50, 9, 83, 84, 82, 73, 75, 10, 50, 48, 49, 50, 9, 83, 76, 65, 89, 10, 50, 48, 49, 51, 9, 80, 79, 85, 82, 10, 50, 48, 49, 52, 9, 69, 65, 84, 10, 50, 48, 49, 52, 9, 68, 69, 86, 79, 85, 10, 50, 48, 49, 53, 9, 68, 82, 73, 78, 75, 10, 50, 48, 49, 54, 9, 82, 85, 66, 10, 50, 48, 49, 55, 9, 84, 72, 82, 79, 87, 10, 50, 48, 49, 55, 9, 84, 79, 83, 83, 10, 50, 48, 49, 56, 9, 81, 85, 73, 84, 10, 50, 48, 49, 57, 9, 70, 73, 78, 68, 10, 50, 48, 49, 57, 9, 87, 72, 69, 82, 69, 10, 50, 48, 50, 48, 9, 73, 78, 86, 69, 78, 10, 50, 48, 50, 49, 9, 70, 69, 69, 68, 10, 50, 48, 50, 50, 9, 70, 73, 76, 76, 10, 50, 48, 50, 51, 9, 66, 76, 65, 83, 84, 10, 50, 48, 50, 51, 9, 68, 69, 84, 79, 78, 10, 50, 48, 50, 51, 9, 73, 71, 78, 73, 84, 10, 50, 48, 50, 51, 9, 66, 76, 79, 87, 85, 10, 50, 48, 50, 52, 9, 83, 67, 79, 82, 69, 10, 50, 48, 50, 53, 9, 70, 69, 69, 10, 50, 48, 50, 53, 9, 70, 73, 69, 10, 50, 48, 50, 53, 9, 70, 79, 69, 10, 50, 48, 50, 53, 9, 70, 79, 79, 10, 50, 48, 50, 53, 9, 70, 85, 77, 10, 50, 48, 50, 54, 9, 66, 82, 73, 69, 70, 10, 50, 48, 50, 55, 9, 82, 69, 65, 68, 10, 50, 48, 50, 55, 9, 80, 69, 82, 85, 83, 10, 50, 48, 50, 56, 9, 66, 82, 69, 65, 75, 10, 50, 48, 50, 56, 9, 83, 72, 65, 84, 84, 10, 50, 48, 50, 56, 9, 83, 77, 65, 83, 72, 10, 50, 48, 50, 57, 9, 87, 65, 75, 69, 10, 50, 48, 50, 57, 9, 68, 73, 83, 84, 85, 10, 50, 48, 51, 48, 9, 83, 85, 83, 80, 69, 10, 50, 48, 51, 48, 9, 80, 65, 85, 83, 69, 10, 50, 48, 51, 48, 9, 83, 65, 86, 69, 10, 50, 48, 51, 49, 9, 82, 69, 83, 85, 77, 10, 50, 48, 51, 49, 9, 82, 69, 83, 84, 65, 10, 50, 48, 51, 50, 9, 70, 76, 89, 10, 50, 48, 51, 51, 9, 76, 73, 83, 84, 69, 10, 50, 48, 51, 52, 9, 90, 39, 90, 90, 90, 9, 40, 71, 69, 84, 83, 32, 82, 69, 80, 76, 65, 67, 69, 68, 41, 10, 51, 48, 48, 49, 9, 70, 69, 69, 10, 51, 48, 48, 50, 9, 70, 73, 69, 10, 51, 48, 48, 51, 9, 70, 79, 69, 10, 51, 48, 48, 52, 9, 70, 79, 79, 10, 51, 48, 48, 53, 9, 70, 85, 77, 10, 51, 48, 49, 51, 9, 84, 72, 65, 78, 75, 10, 51, 48, 53, 48, 9, 83, 69, 83, 65, 77, 10, 51, 48, 53, 48, 9, 79, 80, 69, 78, 83, 10, 51, 48, 53, 48, 9, 65, 66, 82, 65, 10, 51, 48, 53, 48, 9, 65, 66, 82, 65, 67, 10, 51, 48, 53, 48, 9, 83, 72, 65, 90, 65, 10, 51, 48, 53, 48, 9, 72, 79, 67, 85, 83, 10, 51, 48, 53, 48, 9, 80, 79, 67, 85, 83, 10, 51, 48, 53, 49, 9, 72, 69, 76, 80, 10, 51, 48, 53, 49, 9, 63, 10, 51, 48, 53, 52, 9, 78, 79, 10, 51, 48, 54, 52, 9, 84, 82, 69, 69, 10, 51, 48, 54, 52, 9, 84, 82, 69, 69, 83, 10, 51, 48, 54, 54, 9, 68, 73, 71, 10, 51, 48, 54, 54, 9, 69, 88, 67, 65, 86, 10, 51, 48, 54, 56, 9, 76, 79, 83, 84, 10, 51, 48, 54, 57, 9, 77, 73, 83, 84, 10, 51, 48, 55, 57, 9, 70, 85, 67, 75, 10, 51, 49, 51, 57, 9, 83, 84, 79, 80, 10, 51, 49, 52, 50, 9, 73, 78, 70, 79, 10, 51, 49, 52, 50, 9, 73, 78, 70, 79, 82, 10, 51, 49, 52, 55, 9, 83, 87, 73, 77, 10, 51, 50, 52, 54, 9, 87, 73, 90, 65, 82, 10, 51, 50, 55, 49, 9, 89, 69, 83, 10, 51, 50, 55, 53, 9, 78, 69, 87, 83, 10, 45, 49, 10, 53, 10, 49, 9, 83, 101, 116, 32, 111, 102, 32, 107, 101, 121, 115, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 115, 111, 109, 101, 32, 107, 101, 121, 115, 32, 111, 110, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 32, 104, 101, 114, 101, 46, 10, 50, 9, 66, 114, 97, 115, 115, 32, 108, 97, 110, 116, 101, 114, 110, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 115, 104, 105, 110, 121, 32, 98, 114, 97, 115, 115, 32, 108, 97, 109, 112, 32, 110, 101, 97, 114, 98, 121, 46, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 97, 109, 112, 32, 115, 104, 105, 110, 105, 110, 103, 32, 110, 101, 97, 114, 98, 121, 46, 10, 51, 9, 42, 103, 114, 97, 116, 101, 10, 48, 48, 48, 9, 84, 104, 101, 32, 103, 114, 97, 116, 101, 32, 105, 115, 32, 108, 111, 99, 107, 101, 100, 46, 10, 49, 48, 48, 9, 84, 104, 101, 32, 103, 114, 97, 116, 101, 32, 105, 115, 32, 111, 112, 101, 110, 46, 10, 52, 9, 87, 105, 99, 107, 101, 114, 32, 99, 97, 103, 101, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 115, 109, 97, 108, 108, 32, 119, 105, 99, 107, 101, 114, 32, 99, 97, 103, 101, 32, 100, 105, 115, 99, 97, 114, 100, 101, 100, 32, 110, 101, 97, 114, 98, 121, 46, 10, 53, 9, 66, 108, 97, 99, 107, 32, 114, 111, 100, 10, 48, 48, 48, 9, 65, 32, 116, 104, 114, 101, 101, 32, 102, 111, 111, 116, 32, 98, 108, 97, 99, 107, 32, 114, 111, 100, 32, 119, 105, 116, 104, 32, 97, 32, 114, 117, 115, 116, 121, 32, 115, 116, 97, 114, 32, 111, 110, 32, 97, 110, 32, 101, 110, 100, 32, 108, 105, 101, 115, 32, 110, 101, 97, 114, 98, 121, 46, 10, 54, 9, 66, 108, 97, 99, 107, 32, 114, 111, 100, 10, 48, 48, 48, 9, 65, 32, 116, 104, 114, 101, 101, 32, 102, 111, 111, 116, 32, 98, 108, 97, 99, 107, 32, 114, 111, 100, 32, 119, 105, 116, 104, 32, 97, 32, 114, 117, 115, 116, 121, 32, 109, 97, 114, 107, 32, 111, 110, 32, 97, 110, 32, 101, 110, 100, 32, 108, 105, 101, 115, 32, 110, 101, 97, 114, 98, 121, 46, 10, 55, 9, 42, 115, 116, 101, 112, 115, 10, 48, 48, 48, 9, 82, 111, 117, 103, 104, 32, 115, 116, 111, 110, 101, 32, 115, 116, 101, 112, 115, 32, 108, 101, 97, 100, 32, 100, 111, 119, 110, 32, 116, 104, 101, 32, 112, 105, 116, 46, 10, 49, 48, 48, 9, 82, 111, 117, 103, 104, 32, 115, 116, 111, 110, 101, 32, 115, 116, 101, 112, 115, 32, 108, 101, 97, 100, 32, 117, 112, 32, 116, 104, 101, 32, 100, 111, 109, 101, 46, 10, 56, 9, 76, 105, 116, 116, 108, 101, 32, 98, 105, 114, 100, 32, 105, 110, 32, 99, 97, 103, 101, 10, 48, 48, 48, 9, 65, 32, 99, 104, 101, 101, 114, 102, 117, 108, 32, 108, 105, 116, 116, 108, 101, 32, 98, 105, 114, 100, 32, 105, 115, 32, 115, 105, 116, 116, 105, 110, 103, 32, 104, 101, 114, 101, 32, 115, 105, 110, 103, 105, 110, 103, 46, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 98, 105, 114, 100, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 103, 101, 46, 10, 50, 48, 48, 9, 65, 32, 99, 104, 101, 101, 114, 102, 117, 108, 32, 108, 105, 116, 116, 108, 101, 32, 98, 105, 114, 100, 32, 105, 115, 32, 115, 105, 116, 116, 105, 110, 103, 32, 104, 101, 114, 101, 32, 115, 105, 110, 103, 105, 110, 103, 46, 10, 51, 48, 48, 9, 84, 104, 101, 32, 98, 105, 114, 100, 39, 115, 32, 115, 105, 110, 103, 105, 110, 103, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 109, 101, 108, 111, 100, 105, 111, 117, 115, 46, 10, 52, 48, 48, 9, 84, 104, 101, 32, 98, 105, 114, 100, 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 115, 101, 101, 109, 32, 105, 110, 99, 108, 105, 110, 101, 100, 32, 116, 111, 32, 115, 105, 110, 103, 32, 119, 104, 105, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 103, 101, 46, 10, 53, 48, 48, 9, 73, 116, 32, 97, 108, 109, 111, 115, 116, 32, 115, 101, 101, 109, 115, 32, 97, 115, 32, 116, 104, 111, 117, 103, 104, 32, 116, 104, 101, 32, 98, 105, 114, 100, 32, 105, 115, 32, 116, 114, 121, 105, 110, 103, 32, 116, 111, 32, 116, 101, 108, 108, 32, 121, 111, 117, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 46, 10, 54, 48, 48, 9, 84, 111, 32, 121, 111, 117, 114, 32, 115, 117, 114, 112, 114, 105, 115, 101, 44, 32, 121, 111, 117, 32, 99, 97, 110, 32, 117, 110, 100, 101, 114, 115, 116, 97, 110, 100, 32, 116, 104, 101, 32, 98, 105, 114, 100, 39, 115, 32, 99, 104, 105, 114, 112, 105, 110, 103, 59, 32, 105, 116, 32, 105, 115, 10, 54, 48, 48, 9, 115, 105, 110, 103, 105, 110, 103, 32, 97, 98, 111, 117, 116, 32, 116, 104, 101, 32, 106, 111, 121, 115, 32, 111, 102, 32, 105, 116, 115, 32, 102, 111, 114, 101, 115, 116, 32, 104, 111, 109, 101, 46, 10, 55, 48, 48, 9, 84, 104, 101, 32, 98, 105, 114, 100, 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 115, 101, 101, 109, 32, 105, 110, 99, 108, 105, 110, 101, 100, 32, 116, 111, 32, 115, 105, 110, 103, 32, 119, 104, 105, 108, 101, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 103, 101, 46, 10, 56, 48, 48, 9, 84, 104, 101, 32, 98, 105, 114, 100, 32, 105, 115, 32, 115, 105, 110, 103, 105, 110, 103, 32, 116, 111, 32, 121, 111, 117, 32, 105, 110, 32, 103, 114, 97, 116, 105, 116, 117, 100, 101, 32, 102, 111, 114, 32, 121, 111, 117, 114, 32, 104, 97, 118, 105, 110, 103, 32, 114, 101, 116, 117, 114, 110, 101, 100, 32, 105, 116, 32, 116, 111, 10, 56, 48, 48, 9, 105, 116, 115, 32, 104, 111, 109, 101, 46, 32, 32, 73, 110, 32, 114, 101, 116, 117, 114, 110, 44, 32, 105, 116, 32, 105, 110, 102, 111, 114, 109, 115, 32, 121, 111, 117, 32, 111, 102, 32, 97, 32, 109, 97, 103, 105, 99, 32, 119, 111, 114, 100, 32, 119, 104, 105, 99, 104, 32, 105, 116, 32, 116, 104, 105, 110, 107, 115, 10, 56, 48, 48, 9, 121, 111, 117, 32, 109, 97, 121, 32, 102, 105, 110, 100, 32, 117, 115, 101, 102, 117, 108, 32, 115, 111, 109, 101, 119, 104, 101, 114, 101, 32, 110, 101, 97, 114, 32, 116, 104, 101, 32, 72, 97, 108, 108, 32, 111, 102, 32, 77, 105, 115, 116, 115, 46, 32, 32, 84, 104, 101, 32, 109, 97, 103, 105, 99, 32, 119, 111, 114, 100, 10, 56, 48, 48, 9, 99, 104, 97, 110, 103, 101, 115, 32, 102, 114, 101, 113, 117, 101, 110, 116, 108, 121, 44, 32, 98, 117, 116, 32, 102, 111, 114, 32, 110, 111, 119, 32, 116, 104, 101, 32, 98, 105, 114, 100, 32, 98, 101, 108, 105, 101, 118, 101, 115, 32, 105, 116, 32, 105, 115, 32, 34, 37, 87, 34, 46, 32, 32, 89, 111, 117, 10, 56, 48, 48, 9, 116, 104, 97, 110, 107, 32, 116, 104, 101, 32, 98, 105, 114, 100, 32, 102, 111, 114, 32, 116, 104, 105, 115, 32, 105, 110, 102, 111, 114, 109, 97, 116, 105, 111, 110, 44, 32, 97, 110, 100, 32, 105, 116, 32, 102, 108, 105, 101, 115, 32, 111, 102, 102, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 10, 57, 9, 42, 114, 117, 115, 116, 121, 32, 100, 111, 111, 114, 10, 48, 48, 48, 9, 84, 104, 101, 32, 119, 97, 121, 32, 110, 111, 114, 116, 104, 32, 105, 115, 32, 98, 97, 114, 114, 101, 100, 32, 98, 121, 32, 97, 32, 109, 97, 115, 115, 105, 118, 101, 44, 32, 114, 117, 115, 116, 121, 44, 32, 105, 114, 111, 110, 32, 100, 111, 111, 114, 46, 10, 49, 48, 48, 9, 84, 104, 101, 32, 119, 97, 121, 32, 110, 111, 114, 116, 104, 32, 108, 101, 97, 100, 115, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 109, 97, 115, 115, 105, 118, 101, 44, 32, 114, 117, 115, 116, 121, 44, 32, 105, 114, 111, 110, 32, 100, 111, 111, 114, 46, 10, 49, 48, 9, 86, 101, 108, 118, 101, 116, 32, 112, 105, 108, 108, 111, 119, 10, 48, 48, 48, 9, 65, 32, 115, 109, 97, 108, 108, 32, 118, 101, 108, 118, 101, 116, 32, 112, 105, 108, 108, 111, 119, 32, 108, 105, 101, 115, 32, 111, 110, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 46, 10, 49, 49, 9, 42, 115, 110, 97, 107, 101, 10, 48, 48, 48, 9, 65, 32, 104, 117, 103, 101, 32, 103, 114, 101, 101, 110, 32, 102, 105, 101, 114, 99, 101, 32, 115, 110, 97, 107, 101, 32, 98, 97, 114, 115, 32, 116, 104, 101, 32, 119, 97, 121, 33, 10, 49, 48, 48, 9, 37, 33, 32, 32, 40, 99, 104, 97, 115, 101, 100, 32, 97, 119, 97, 121, 41, 10, 50, 48, 48, 9, 84, 104, 101, 32, 115, 110, 97, 107, 101, 32, 105, 115, 32, 104, 105, 115, 115, 105, 110, 103, 32, 118, 101, 110, 111, 109, 111, 117, 115, 108, 121, 46, 10, 49, 50, 9, 42, 102, 105, 115, 115, 117, 114, 101, 10, 48, 48, 48, 9, 37, 33, 10, 49, 48, 48, 9, 65, 32, 99, 114, 121, 115, 116, 97, 108, 32, 98, 114, 105, 100, 103, 101, 32, 110, 111, 119, 32, 115, 112, 97, 110, 115, 32, 116, 104, 101, 32, 102, 105, 115, 115, 117, 114, 101, 46, 10, 50, 48, 48, 9, 84, 104, 101, 32, 99, 114, 121, 115, 116, 97, 108, 32, 98, 114, 105, 100, 103, 101, 32, 104, 97, 115, 32, 118, 97, 110, 105, 115, 104, 101, 100, 33, 10, 49, 51, 9, 42, 115, 116, 111, 110, 101, 32, 116, 97, 98, 108, 101, 116, 10, 48, 48, 48, 9, 65, 32, 109, 97, 115, 115, 105, 118, 101, 32, 115, 116, 111, 110, 101, 32, 116, 97, 98, 108, 101, 116, 32, 105, 109, 98, 101, 100, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 119, 97, 108, 108, 32, 114, 101, 97, 100, 115, 58, 10, 48, 48, 48, 9, 34, 67, 111, 110, 103, 114, 97, 116, 117, 108, 97, 116, 105, 111, 110, 115, 32, 111, 110, 32, 98, 114, 105, 110, 103, 105, 110, 103, 32, 108, 105, 103, 104, 116, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 100, 97, 114, 107, 45, 114, 111, 111, 109, 33, 34, 10, 49, 48, 48, 9, 34, 67, 111, 110, 103, 114, 97, 116, 117, 108, 97, 116, 105, 111, 110, 115, 32, 111, 110, 32, 98, 114, 105, 110, 103, 105, 110, 103, 32, 108, 105, 103, 104, 116, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 100, 97, 114, 107, 45, 114, 111, 111, 109, 33, 34, 10, 49, 52, 9, 71, 105, 97, 110, 116, 32, 99, 108, 97, 109, 32, 32, 62, 71, 82, 85, 78, 84, 33, 60, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 110, 32, 101, 110, 111, 114, 109, 111, 117, 115, 32, 99, 108, 97, 109, 32, 104, 101, 114, 101, 32, 119, 105, 116, 104, 32, 105, 116, 115, 32, 115, 104, 101, 108, 108, 32, 116, 105, 103, 104, 116, 108, 121, 32, 99, 108, 111, 115, 101, 100, 46, 10, 49, 48, 48, 9, 84, 104, 101, 32, 99, 108, 97, 109, 32, 105, 115, 32, 97, 115, 32, 116, 105, 103, 104, 116, 45, 109, 111, 117, 116, 104, 101, 100, 32, 97, 115, 32, 97, 44, 32, 101, 114, 44, 32, 99, 108, 97, 109, 46, 10, 49, 53, 9, 71, 105, 97, 110, 116, 32, 111, 121, 115, 116, 101, 114, 32, 32, 62, 71, 82, 79, 65, 78, 33, 60, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 110, 32, 101, 110, 111, 114, 109, 111, 117, 115, 32, 111, 121, 115, 116, 101, 114, 32, 104, 101, 114, 101, 32, 119, 105, 116, 104, 32, 105, 116, 115, 32, 115, 104, 101, 108, 108, 32, 116, 105, 103, 104, 116, 108, 121, 32, 99, 108, 111, 115, 101, 100, 46, 10, 49, 48, 48, 9, 73, 110, 116, 101, 114, 101, 115, 116, 105, 110, 103, 46, 32, 32, 84, 104, 101, 114, 101, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 98, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 119, 114, 105, 116, 116, 101, 110, 32, 111, 110, 32, 116, 104, 101, 32, 117, 110, 100, 101, 114, 115, 105, 100, 101, 32, 111, 102, 10, 49, 48, 48, 9, 116, 104, 101, 32, 111, 121, 115, 116, 101, 114, 46, 10, 50, 48, 48, 9, 69, 118, 101, 110, 32, 116, 104, 111, 117, 103, 104, 32, 105, 116, 39, 115, 32, 97, 110, 32, 111, 121, 115, 116, 101, 114, 44, 32, 116, 104, 101, 32, 99, 114, 105, 116, 116, 101, 114, 39, 115, 32, 97, 115, 32, 116, 105, 103, 104, 116, 45, 109, 111, 117, 116, 104, 101, 100, 32, 97, 115, 32, 97, 32, 99, 108, 97, 109, 46, 10, 51, 48, 48, 9, 73, 116, 32, 115, 97, 121, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 116, 104, 105, 110, 103, 32, 105, 116, 32, 100, 105, 100, 32, 98, 101, 102, 111, 114, 101, 46, 32, 32, 72, 109, 44, 32, 109, 97, 121, 98, 101, 32, 105, 116, 39, 115, 32, 97, 32, 112, 117, 110, 63, 10, 49, 54, 9, 34, 83, 112, 101, 108, 117, 110, 107, 101, 114, 32, 84, 111, 100, 97, 121, 34, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 97, 32, 102, 101, 119, 32, 114, 101, 99, 101, 110, 116, 32, 105, 115, 115, 117, 101, 115, 32, 111, 102, 32, 34, 83, 112, 101, 108, 117, 110, 107, 101, 114, 32, 84, 111, 100, 97, 121, 34, 32, 109, 97, 103, 97, 122, 105, 110, 101, 32, 104, 101, 114, 101, 46, 10, 49, 48, 48, 9, 73, 39, 109, 32, 97, 102, 114, 97, 105, 100, 32, 116, 104, 101, 32, 109, 97, 103, 97, 122, 105, 110, 101, 32, 105, 115, 32, 119, 114, 105, 116, 116, 101, 110, 32, 105, 110, 32, 100, 119, 97, 114, 118, 105, 115, 104, 46, 32, 32, 66, 117, 116, 32, 112, 101, 110, 99, 105, 108, 108, 101, 100, 32, 111, 110, 32, 111, 110, 101, 10, 49, 48, 48, 9, 99, 111, 118, 101, 114, 32, 121, 111, 117, 32, 115, 101, 101, 44, 32, 34, 80, 108, 101, 97, 115, 101, 32, 108, 101, 97, 118, 101, 32, 116, 104, 101, 32, 109, 97, 103, 97, 122, 105, 110, 101, 115, 32, 97, 116, 32, 116, 104, 101, 32, 99, 111, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 32, 115, 105, 116, 101, 46, 34, 10, 49, 57, 9, 84, 97, 115, 116, 121, 32, 102, 111, 111, 100, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 102, 111, 111, 100, 32, 104, 101, 114, 101, 46, 10, 50, 48, 9, 83, 109, 97, 108, 108, 32, 98, 111, 116, 116, 108, 101, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 98, 111, 116, 116, 108, 101, 32, 111, 102, 32, 119, 97, 116, 101, 114, 32, 104, 101, 114, 101, 46, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 110, 32, 101, 109, 112, 116, 121, 32, 98, 111, 116, 116, 108, 101, 32, 104, 101, 114, 101, 46, 10, 50, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 98, 111, 116, 116, 108, 101, 32, 111, 102, 32, 111, 105, 108, 32, 104, 101, 114, 101, 46, 10, 50, 49, 9, 87, 97, 116, 101, 114, 32, 105, 110, 32, 116, 104, 101, 32, 98, 111, 116, 116, 108, 101, 10, 50, 50, 9, 79, 105, 108, 32, 105, 110, 32, 116, 104, 101, 32, 98, 111, 116, 116, 108, 101, 10, 50, 51, 9, 42, 109, 105, 114, 114, 111, 114, 10, 48, 48, 48, 9, 37, 33, 10, 50, 52, 9, 42, 112, 108, 97, 110, 116, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 116, 105, 110, 121, 32, 108, 105, 116, 116, 108, 101, 32, 112, 108, 97, 110, 116, 32, 105, 110, 32, 116, 104, 101, 32, 112, 105, 116, 44, 32, 109, 117, 114, 109, 117, 114, 105, 110, 103, 32, 34, 119, 97, 116, 101, 114, 44, 32, 119, 97, 116, 101, 114, 44, 32, 46, 46, 46, 34, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 49, 50, 45, 102, 111, 111, 116, 45, 116, 97, 108, 108, 32, 98, 101, 97, 110, 115, 116, 97, 108, 107, 32, 115, 116, 114, 101, 116, 99, 104, 105, 110, 103, 32, 117, 112, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 116, 44, 10, 49, 48, 48, 9, 98, 101, 108, 108, 111, 119, 105, 110, 103, 32, 34, 87, 65, 84, 69, 82, 33, 33, 32, 87, 65, 84, 69, 82, 33, 33, 34, 10, 50, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 103, 105, 103, 97, 110, 116, 105, 99, 32, 98, 101, 97, 110, 115, 116, 97, 108, 107, 32, 115, 116, 114, 101, 116, 99, 104, 105, 110, 103, 32, 97, 108, 108, 32, 116, 104, 101, 32, 119, 97, 121, 32, 117, 112, 32, 116, 111, 32, 116, 104, 101, 32, 104, 111, 108, 101, 46, 10, 51, 48, 48, 9, 84, 104, 101, 32, 112, 108, 97, 110, 116, 32, 115, 112, 117, 114, 116, 115, 32, 105, 110, 116, 111, 32, 102, 117, 114, 105, 111, 117, 115, 32, 103, 114, 111, 119, 116, 104, 32, 102, 111, 114, 32, 97, 32, 102, 101, 119, 32, 115, 101, 99, 111, 110, 100, 115, 46, 10, 52, 48, 48, 9, 84, 104, 101, 32, 112, 108, 97, 110, 116, 32, 103, 114, 111, 119, 115, 32, 101, 120, 112, 108, 111, 115, 105, 118, 101, 108, 121, 44, 32, 97, 108, 109, 111, 115, 116, 32, 102, 105, 108, 108, 105, 110, 103, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 116, 46, 10, 53, 48, 48, 9, 89, 111, 117, 39, 118, 101, 32, 111, 118, 101, 114, 45, 119, 97, 116, 101, 114, 101, 100, 32, 116, 104, 101, 32, 112, 108, 97, 110, 116, 33, 32, 32, 73, 116, 39, 115, 32, 115, 104, 114, 105, 118, 101, 108, 105, 110, 103, 32, 117, 112, 33, 32, 32, 65, 110, 100, 32, 110, 111, 119, 32, 46, 32, 46, 32, 46, 10, 54, 48, 48, 9, 84, 104, 101, 32, 112, 108, 97, 110, 116, 32, 99, 111, 110, 116, 105, 110, 117, 101, 115, 32, 116, 111, 32, 97, 115, 107, 32, 112, 108, 97, 105, 110, 116, 105, 118, 101, 108, 121, 32, 102, 111, 114, 32, 119, 97, 116, 101, 114, 46, 10, 55, 48, 48, 9, 84, 104, 101, 32, 112, 108, 97, 110, 116, 32, 99, 111, 110, 116, 105, 110, 117, 101, 115, 32, 116, 111, 32, 100, 101, 109, 97, 110, 100, 32, 119, 97, 116, 101, 114, 46, 10, 56, 48, 48, 9, 84, 104, 101, 32, 112, 108, 97, 110, 116, 32, 110, 111, 119, 32, 109, 97, 105, 110, 116, 97, 105, 110, 115, 32, 97, 32, 99, 111, 110, 116, 101, 110, 116, 101, 100, 32, 115, 105, 108, 101, 110, 99, 101, 46, 10, 50, 53, 9, 42, 112, 104, 111, 110, 121, 32, 112, 108, 97, 110, 116, 32, 40, 115, 101, 101, 110, 32, 105, 110, 32, 84, 119, 111, 112, 105, 116, 32, 82, 111, 111, 109, 32, 111, 110, 108, 121, 32, 119, 104, 101, 110, 32, 116, 97, 108, 108, 32, 101, 110, 111, 117, 103, 104, 41, 10, 48, 48, 48, 9, 37, 33, 10, 49, 48, 48, 9, 84, 104, 101, 32, 116, 111, 112, 32, 111, 102, 32, 97, 32, 49, 50, 45, 102, 111, 111, 116, 45, 116, 97, 108, 108, 32, 98, 101, 97, 110, 115, 116, 97, 108, 107, 32, 105, 115, 32, 112, 111, 107, 105, 110, 103, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 112, 105, 116, 46, 10, 50, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 104, 117, 103, 101, 32, 98, 101, 97, 110, 115, 116, 97, 108, 107, 32, 103, 114, 111, 119, 105, 110, 103, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 119, 101, 115, 116, 32, 112, 105, 116, 32, 117, 112, 32, 116, 111, 32, 116, 104, 101, 32, 104, 111, 108, 101, 46, 10, 50, 54, 9, 42, 115, 116, 97, 108, 97, 99, 116, 105, 116, 101, 10, 48, 48, 48, 9, 37, 33, 10, 50, 55, 9, 42, 115, 104, 97, 100, 111, 119, 121, 32, 102, 105, 103, 117, 114, 101, 32, 97, 110, 100, 47, 111, 114, 32, 119, 105, 110, 100, 111, 119, 10, 48, 48, 48, 9, 84, 104, 101, 32, 115, 104, 97, 100, 111, 119, 121, 32, 102, 105, 103, 117, 114, 101, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 98, 101, 32, 116, 114, 121, 105, 110, 103, 32, 116, 111, 32, 97, 116, 116, 114, 97, 99, 116, 32, 121, 111, 117, 114, 32, 97, 116, 116, 101, 110, 116, 105, 111, 110, 46, 10, 50, 56, 9, 68, 119, 97, 114, 102, 39, 115, 32, 97, 120, 101, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 97, 120, 101, 32, 104, 101, 114, 101, 46, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 97, 120, 101, 32, 108, 121, 105, 110, 103, 32, 98, 101, 115, 105, 100, 101, 32, 116, 104, 101, 32, 98, 101, 97, 114, 46, 10, 50, 57, 9, 42, 99, 97, 118, 101, 32, 100, 114, 97, 119, 105, 110, 103, 115, 10, 48, 48, 48, 9, 37, 33, 10, 51, 48, 9, 42, 112, 105, 114, 97, 116, 101, 47, 103, 101, 110, 105, 101, 10, 48, 48, 48, 9, 37, 33, 32, 32, 40, 110, 101, 118, 101, 114, 32, 112, 114, 101, 115, 101, 110, 116, 41, 10, 51, 49, 9, 42, 100, 114, 97, 103, 111, 110, 10, 48, 48, 48, 9, 65, 32, 104, 117, 103, 101, 32, 103, 114, 101, 101, 110, 32, 102, 105, 101, 114, 99, 101, 32, 100, 114, 97, 103, 111, 110, 32, 98, 97, 114, 115, 32, 116, 104, 101, 32, 119, 97, 121, 33, 10, 49, 48, 48, 9, 84, 104, 101, 32, 98, 108, 111, 111, 100, 45, 115, 112, 101, 99, 107, 101, 100, 32, 98, 111, 100, 121, 32, 111, 102, 32, 97, 32, 104, 117, 103, 101, 32, 103, 114, 101, 101, 110, 32, 100, 101, 97, 100, 32, 100, 114, 97, 103, 111, 110, 32, 108, 105, 101, 115, 32, 116, 111, 32, 111, 110, 101, 32, 115, 105, 100, 101, 46, 10, 50, 48, 48, 9, 84, 104, 101, 32, 98, 111, 100, 121, 32, 111, 102, 32, 97, 32, 104, 117, 103, 101, 32, 103, 114, 101, 101, 110, 32, 100, 101, 97, 100, 32, 100, 114, 97, 103, 111, 110, 32, 105, 115, 32, 108, 121, 105, 110, 103, 32, 111, 102, 102, 32, 116, 111, 32, 111, 110, 101, 32, 115, 105, 100, 101, 46, 10, 51, 48, 48, 9, 67, 111, 110, 103, 114, 97, 116, 117, 108, 97, 116, 105, 111, 110, 115, 33, 32, 32, 89, 111, 117, 32, 104, 97, 118, 101, 32, 106, 117, 115, 116, 32, 118, 97, 110, 113, 117, 105, 115, 104, 101, 100, 32, 97, 32, 100, 114, 97, 103, 111, 110, 32, 119, 105, 116, 104, 32, 121, 111, 117, 114, 32, 98, 97, 114, 101, 10, 51, 48, 48, 9, 104, 97, 110, 100, 115, 33, 32, 32, 40, 85, 110, 98, 101, 108, 105, 101, 118, 97, 98, 108, 101, 44, 32, 105, 115, 110, 39, 116, 32, 105, 116, 63, 41, 10, 52, 48, 48, 9, 84, 104, 101, 32, 100, 114, 97, 103, 111, 110, 39, 115, 32, 111, 109, 105, 110, 111, 117, 115, 32, 104, 105, 115, 115, 105, 110, 103, 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 98, 111, 100, 101, 32, 119, 101, 108, 108, 32, 102, 111, 114, 32, 121, 111, 117, 46, 10, 53, 48, 48, 9, 84, 104, 101, 32, 100, 114, 97, 103, 111, 110, 32, 105, 115, 44, 32, 110, 111, 116, 32, 115, 117, 114, 112, 114, 105, 115, 105, 110, 103, 108, 121, 44, 32, 115, 105, 108, 101, 110, 116, 46, 10, 54, 48, 48, 9, 84, 104, 101, 32, 100, 114, 97, 103, 111, 110, 32, 105, 115, 44, 32, 110, 111, 116, 32, 115, 117, 114, 112, 114, 105, 115, 105, 110, 103, 108, 121, 44, 32, 115, 105, 108, 101, 110, 116, 46, 10, 51, 50, 9, 42, 99, 104, 97, 115, 109, 10, 48, 48, 48, 9, 65, 32, 114, 105, 99, 107, 101, 116, 121, 32, 119, 111, 111, 100, 101, 110, 32, 98, 114, 105, 100, 103, 101, 32, 101, 120, 116, 101, 110, 100, 115, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 44, 32, 118, 97, 110, 105, 115, 104, 105, 110, 103, 32, 105, 110, 116, 111, 32, 116, 104, 101, 10, 48, 48, 48, 9, 109, 105, 115, 116, 46, 32, 32, 65, 32, 110, 111, 116, 105, 99, 101, 32, 112, 111, 115, 116, 101, 100, 32, 111, 110, 32, 116, 104, 101, 32, 98, 114, 105, 100, 103, 101, 32, 114, 101, 97, 100, 115, 44, 32, 34, 83, 116, 111, 112, 33, 32, 80, 97, 121, 32, 116, 114, 111, 108, 108, 33, 34, 10, 49, 48, 48, 9, 84, 104, 101, 32, 119, 114, 101, 99, 107, 97, 103, 101, 32, 111, 102, 32, 97, 32, 98, 114, 105, 100, 103, 101, 32, 40, 97, 110, 100, 32, 97, 32, 100, 101, 97, 100, 32, 98, 101, 97, 114, 41, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 101, 110, 32, 97, 116, 32, 116, 104, 101, 32, 98, 111, 116, 116, 111, 109, 10, 49, 48, 48, 9, 111, 102, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 46, 10, 51, 51, 9, 42, 116, 114, 111, 108, 108, 10, 48, 48, 48, 9, 65, 32, 98, 117, 114, 108, 121, 32, 116, 114, 111, 108, 108, 32, 115, 116, 97, 110, 100, 115, 32, 98, 121, 32, 116, 104, 101, 32, 98, 114, 105, 100, 103, 101, 32, 97, 110, 100, 32, 105, 110, 115, 105, 115, 116, 115, 32, 121, 111, 117, 32, 116, 104, 114, 111, 119, 32, 104, 105, 109, 32, 97, 10, 48, 48, 48, 9, 116, 114, 101, 97, 115, 117, 114, 101, 32, 98, 101, 102, 111, 114, 101, 32, 121, 111, 117, 32, 109, 97, 121, 32, 99, 114, 111, 115, 115, 46, 10, 49, 48, 48, 9, 84, 104, 101, 32, 116, 114, 111, 108, 108, 32, 115, 116, 101, 112, 115, 32, 111, 117, 116, 32, 102, 114, 111, 109, 32, 98, 101, 110, 101, 97, 116, 104, 32, 116, 104, 101, 32, 98, 114, 105, 100, 103, 101, 32, 97, 110, 100, 32, 98, 108, 111, 99, 107, 115, 32, 121, 111, 117, 114, 32, 119, 97, 121, 46, 10, 50, 48, 48, 9, 37, 33, 32, 32, 40, 99, 104, 97, 115, 101, 100, 32, 97, 119, 97, 121, 41, 10, 51, 48, 48, 9, 84, 104, 101, 32, 116, 114, 111, 108, 108, 32, 115, 111, 117, 110, 100, 115, 32, 113, 117, 105, 116, 101, 32, 97, 100, 97, 109, 97, 110, 116, 32, 105, 110, 32, 104, 105, 115, 32, 100, 101, 109, 97, 110, 100, 32, 102, 111, 114, 32, 97, 32, 116, 114, 101, 97, 115, 117, 114, 101, 46, 10, 51, 52, 9, 42, 112, 104, 111, 110, 121, 32, 116, 114, 111, 108, 108, 10, 48, 48, 48, 9, 84, 104, 101, 32, 116, 114, 111, 108, 108, 32, 105, 115, 32, 110, 111, 119, 104, 101, 114, 101, 32, 116, 111, 32, 98, 101, 32, 115, 101, 101, 110, 46, 10, 51, 53, 9, 37, 33, 32, 32, 40, 98, 101, 97, 114, 32, 117, 115, 101, 115, 32, 114, 116, 101, 120, 116, 32, 49, 52, 49, 41, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 102, 101, 114, 111, 99, 105, 111, 117, 115, 32, 99, 97, 118, 101, 32, 98, 101, 97, 114, 32, 101, 121, 105, 110, 103, 32, 121, 111, 117, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 97, 114, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 114, 111, 111, 109, 33, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 103, 101, 110, 116, 108, 101, 32, 99, 97, 118, 101, 32, 98, 101, 97, 114, 32, 115, 105, 116, 116, 105, 110, 103, 32, 112, 108, 97, 99, 105, 100, 108, 121, 32, 105, 110, 32, 111, 110, 101, 32, 99, 111, 114, 110, 101, 114, 46, 10, 50, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 99, 111, 110, 116, 101, 110, 116, 101, 100, 45, 108, 111, 111, 107, 105, 110, 103, 32, 98, 101, 97, 114, 32, 119, 97, 110, 100, 101, 114, 105, 110, 103, 32, 97, 98, 111, 117, 116, 32, 110, 101, 97, 114, 98, 121, 46, 10, 51, 48, 48, 9, 37, 33, 32, 32, 40, 100, 101, 97, 100, 41, 10, 51, 54, 9, 42, 109, 101, 115, 115, 97, 103, 101, 32, 105, 110, 32, 115, 101, 99, 111, 110, 100, 32, 109, 97, 122, 101, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 109, 101, 115, 115, 97, 103, 101, 32, 115, 99, 114, 97, 119, 108, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 100, 117, 115, 116, 32, 105, 110, 32, 97, 32, 102, 108, 111, 119, 101, 114, 121, 32, 115, 99, 114, 105, 112, 116, 44, 32, 114, 101, 97, 100, 105, 110, 103, 58, 10, 48, 48, 48, 9, 34, 84, 104, 105, 115, 32, 105, 115, 32, 110, 111, 116, 32, 116, 104, 101, 32, 109, 97, 122, 101, 32, 119, 104, 101, 114, 101, 32, 116, 104, 101, 32, 112, 105, 114, 97, 116, 101, 32, 108, 101, 97, 118, 101, 115, 32, 104, 105, 115, 32, 116, 114, 101, 97, 115, 117, 114, 101, 32, 99, 104, 101, 115, 116, 46, 34, 10, 49, 48, 48, 9, 34, 84, 104, 105, 115, 32, 105, 115, 32, 110, 111, 116, 32, 116, 104, 101, 32, 109, 97, 122, 101, 32, 119, 104, 101, 114, 101, 32, 116, 104, 101, 32, 112, 105, 114, 97, 116, 101, 32, 108, 101, 97, 118, 101, 115, 32, 104, 105, 115, 32, 116, 114, 101, 97, 115, 117, 114, 101, 32, 99, 104, 101, 115, 116, 46, 34, 10, 51, 55, 9, 42, 118, 111, 108, 99, 97, 110, 111, 32, 97, 110, 100, 47, 111, 114, 32, 103, 101, 121, 115, 101, 114, 10, 48, 48, 48, 9, 37, 33, 10, 51, 56, 9, 42, 118, 101, 110, 100, 105, 110, 103, 32, 109, 97, 99, 104, 105, 110, 101, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 109, 97, 115, 115, 105, 118, 101, 32, 97, 110, 100, 32, 115, 111, 109, 101, 119, 104, 97, 116, 32, 98, 97, 116, 116, 101, 114, 101, 100, 32, 118, 101, 110, 100, 105, 110, 103, 32, 109, 97, 99, 104, 105, 110, 101, 32, 104, 101, 114, 101, 46, 32, 32, 84, 104, 101, 10, 48, 48, 48, 9, 105, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 115, 32, 111, 110, 32, 105, 116, 32, 114, 101, 97, 100, 58, 32, 34, 68, 114, 111, 112, 32, 99, 111, 105, 110, 115, 32, 104, 101, 114, 101, 32, 116, 111, 32, 114, 101, 99, 101, 105, 118, 101, 32, 102, 114, 101, 115, 104, 32, 98, 97, 116, 116, 101, 114, 105, 101, 115, 46, 34, 10, 49, 48, 48, 9, 34, 68, 114, 111, 112, 32, 99, 111, 105, 110, 115, 32, 104, 101, 114, 101, 32, 116, 111, 32, 114, 101, 99, 101, 105, 118, 101, 32, 102, 114, 101, 115, 104, 32, 98, 97, 116, 116, 101, 114, 105, 101, 115, 46, 34, 10, 50, 48, 48, 9, 65, 115, 32, 121, 111, 117, 32, 115, 116, 114, 105, 107, 101, 32, 116, 104, 101, 32, 118, 101, 110, 100, 105, 110, 103, 32, 109, 97, 99, 104, 105, 110, 101, 44, 32, 105, 116, 32, 112, 105, 118, 111, 116, 115, 32, 98, 97, 99, 107, 119, 97, 114, 100, 32, 97, 108, 111, 110, 103, 32, 119, 105, 116, 104, 32, 97, 10, 50, 48, 48, 9, 115, 101, 99, 116, 105, 111, 110, 32, 111, 102, 32, 119, 97, 108, 108, 44, 32, 114, 101, 118, 101, 97, 108, 105, 110, 103, 32, 97, 32, 100, 97, 114, 107, 32, 112, 97, 115, 115, 97, 103, 101, 32, 108, 101, 97, 100, 105, 110, 103, 32, 115, 111, 117, 116, 104, 46, 10, 51, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 109, 97, 115, 115, 105, 118, 101, 32, 118, 101, 110, 100, 105, 110, 103, 32, 109, 97, 99, 104, 105, 110, 101, 32, 104, 101, 114, 101, 44, 32, 115, 119, 117, 110, 103, 32, 98, 97, 99, 107, 32, 116, 111, 32, 114, 101, 118, 101, 97, 108, 32, 97, 10, 51, 48, 48, 9, 115, 111, 117, 116, 104, 119, 97, 114, 100, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 52, 48, 48, 9, 34, 68, 114, 111, 112, 32, 99, 111, 105, 110, 115, 32, 104, 101, 114, 101, 32, 116, 111, 32, 114, 101, 99, 101, 105, 118, 101, 32, 102, 114, 101, 115, 104, 32, 98, 97, 116, 116, 101, 114, 105, 101, 115, 46, 34, 10, 53, 48, 48, 9, 84, 104, 101, 32, 118, 101, 110, 100, 105, 110, 103, 32, 109, 97, 99, 104, 105, 110, 101, 32, 115, 119, 105, 110, 103, 115, 32, 98, 97, 99, 107, 32, 116, 111, 32, 98, 108, 111, 99, 107, 32, 116, 104, 101, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 51, 57, 9, 66, 97, 116, 116, 101, 114, 105, 101, 115, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 102, 114, 101, 115, 104, 32, 98, 97, 116, 116, 101, 114, 105, 101, 115, 32, 104, 101, 114, 101, 46, 10, 49, 48, 48, 9, 83, 111, 109, 101, 32, 119, 111, 114, 110, 45, 111, 117, 116, 32, 98, 97, 116, 116, 101, 114, 105, 101, 115, 32, 104, 97, 118, 101, 32, 98, 101, 101, 110, 32, 100, 105, 115, 99, 97, 114, 100, 101, 100, 32, 110, 101, 97, 114, 98, 121, 46, 10, 52, 48, 9, 42, 99, 97, 114, 112, 101, 116, 32, 97, 110, 100, 47, 111, 114, 32, 109, 111, 115, 115, 32, 97, 110, 100, 47, 111, 114, 32, 99, 117, 114, 116, 97, 105, 110, 115, 10, 48, 48, 48, 9, 37, 33, 10, 52, 49, 9, 42, 111, 103, 114, 101, 10, 48, 48, 48, 9, 65, 32, 102, 111, 114, 109, 105, 100, 97, 98, 108, 101, 32, 111, 103, 114, 101, 32, 98, 97, 114, 115, 32, 116, 104, 101, 32, 110, 111, 114, 116, 104, 101, 114, 110, 32, 101, 120, 105, 116, 46, 10, 49, 48, 48, 9, 84, 104, 101, 32, 111, 103, 114, 101, 32, 105, 115, 32, 97, 112, 112, 97, 114, 101, 110, 116, 108, 121, 32, 116, 104, 101, 32, 115, 116, 114, 111, 110, 103, 44, 32, 115, 105, 108, 101, 110, 116, 32, 116, 121, 112, 101, 46, 10, 52, 50, 9, 42, 117, 114, 110, 10, 48, 48, 48, 9, 65, 32, 115, 109, 97, 108, 108, 32, 117, 114, 110, 32, 105, 115, 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 46, 10, 49, 48, 48, 9, 65, 32, 115, 109, 97, 108, 108, 32, 117, 114, 110, 32, 102, 117, 108, 108, 32, 111, 102, 32, 111, 105, 108, 32, 105, 115, 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 46, 10, 50, 48, 48, 9, 65, 32, 115, 109, 97, 108, 108, 32, 111, 105, 108, 32, 102, 108, 97, 109, 101, 32, 101, 120, 116, 114, 117, 100, 101, 115, 32, 102, 114, 111, 109, 32, 97, 110, 32, 117, 114, 110, 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 46, 10, 52, 51, 9, 42, 99, 97, 118, 105, 116, 121, 10, 48, 48, 48, 9, 37, 33, 32, 32, 40, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 105, 110, 32, 105, 116, 41, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 115, 109, 97, 108, 108, 32, 117, 114, 110, 45, 115, 104, 97, 112, 101, 100, 32, 99, 97, 118, 105, 116, 121, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 46, 10, 52, 52, 9, 42, 98, 108, 111, 111, 100, 10, 48, 48, 48, 9, 37, 33, 32, 32, 40, 100, 101, 115, 99, 114, 105, 98, 101, 100, 32, 119, 105, 116, 104, 32, 100, 114, 97, 103, 111, 110, 41, 10, 52, 53, 9, 42, 114, 101, 115, 101, 114, 118, 111, 105, 114, 10, 48, 48, 48, 9, 37, 33, 10, 49, 48, 48, 9, 84, 104, 101, 32, 119, 97, 116, 101, 114, 115, 32, 104, 97, 118, 101, 32, 112, 97, 114, 116, 101, 100, 32, 116, 111, 32, 102, 111, 114, 109, 32, 97, 32, 110, 97, 114, 114, 111, 119, 32, 112, 97, 116, 104, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 114, 101, 115, 101, 114, 118, 111, 105, 114, 46, 10, 50, 48, 48, 9, 84, 104, 101, 32, 119, 97, 116, 101, 114, 115, 32, 99, 114, 97, 115, 104, 32, 116, 111, 103, 101, 116, 104, 101, 114, 32, 97, 103, 97, 105, 110, 46, 10, 52, 54, 9, 76, 101, 112, 111, 114, 105, 110, 101, 32, 97, 112, 112, 101, 110, 100, 97, 103, 101, 10, 48, 48, 48, 9, 89, 111, 117, 114, 32, 107, 101, 101, 110, 32, 101, 121, 101, 32, 115, 112, 111, 116, 115, 32, 97, 32, 115, 101, 118, 101, 114, 101, 100, 32, 108, 101, 112, 111, 114, 105, 110, 101, 32, 97, 112, 112, 101, 110, 100, 97, 103, 101, 32, 108, 121, 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 46, 10, 52, 55, 9, 42, 109, 117, 100, 10, 48, 48, 48, 9, 37, 33, 10, 49, 48, 48, 9, 34, 77, 65, 71, 73, 67, 32, 87, 79, 82, 68, 32, 88, 89, 90, 90, 89, 34, 10, 52, 56, 9, 42, 110, 111, 116, 101, 10, 48, 48, 48, 9, 37, 33, 10, 49, 48, 48, 9, 34, 89, 111]); | |
fileData0.push.apply(fileData0, [117, 32, 119, 111, 110, 39, 116, 32, 103, 101, 116, 32, 105, 116, 32, 117, 112, 32, 116, 104, 101, 32, 115, 116, 101, 112, 115, 34, 10, 52, 57, 9, 42, 115, 105, 103, 110, 10, 48, 48, 48, 9, 37, 33, 10, 49, 48, 48, 9, 67, 97, 118, 101, 32, 117, 110, 100, 101, 114, 32, 99, 111, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 32, 98, 101, 121, 111, 110, 100, 32, 116, 104, 105, 115, 32, 112, 111, 105, 110, 116, 46, 10, 49, 48, 48, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 80, 114, 111, 99, 101, 101, 100, 32, 97, 116, 32, 111, 119, 110, 32, 114, 105, 115, 107, 46, 10, 49, 48, 48, 9, 32, 32, 32, 32, 32, 32, 32, 91, 87, 105, 116, 116, 32, 67, 111, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 32, 67, 111, 109, 112, 97, 110, 121, 93, 10, 50, 48, 48, 9, 34, 84, 114, 101, 97, 115, 117, 114, 101, 32, 86, 97, 117, 108, 116, 46, 32, 32, 75, 101, 121, 115, 32, 105, 110, 32, 109, 97, 105, 110, 32, 111, 102, 102, 105, 99, 101, 46, 34, 10, 53, 48, 9, 76, 97, 114, 103, 101, 32, 103, 111, 108, 100, 32, 110, 117, 103, 103, 101, 116, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 97, 114, 103, 101, 32, 115, 112, 97, 114, 107, 108, 105, 110, 103, 32, 110, 117, 103, 103, 101, 116, 32, 111, 102, 32, 103, 111, 108, 100, 32, 104, 101, 114, 101, 33, 10, 53, 49, 9, 83, 101, 118, 101, 114, 97, 108, 32, 100, 105, 97, 109, 111, 110, 100, 115, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 100, 105, 97, 109, 111, 110, 100, 115, 32, 104, 101, 114, 101, 33, 10, 53, 50, 9, 66, 97, 114, 115, 32, 111, 102, 32, 115, 105, 108, 118, 101, 114, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 98, 97, 114, 115, 32, 111, 102, 32, 115, 105, 108, 118, 101, 114, 32, 104, 101, 114, 101, 33, 10, 53, 51, 9, 80, 114, 101, 99, 105, 111, 117, 115, 32, 106, 101, 119, 101, 108, 114, 121, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 112, 114, 101, 99, 105, 111, 117, 115, 32, 106, 101, 119, 101, 108, 114, 121, 32, 104, 101, 114, 101, 33, 10, 53, 52, 9, 82, 97, 114, 101, 32, 99, 111, 105, 110, 115, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 109, 97, 110, 121, 32, 99, 111, 105, 110, 115, 32, 104, 101, 114, 101, 33, 10, 53, 53, 9, 84, 114, 101, 97, 115, 117, 114, 101, 32, 99, 104, 101, 115, 116, 10, 48, 48, 48, 9, 84, 104, 101, 32, 112, 105, 114, 97, 116, 101, 39, 115, 32, 116, 114, 101, 97, 115, 117, 114, 101, 32, 99, 104, 101, 115, 116, 32, 105, 115, 32, 104, 101, 114, 101, 33, 10, 53, 54, 9, 71, 111, 108, 100, 101, 110, 32, 101, 103, 103, 115, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 97, 114, 103, 101, 32, 110, 101, 115, 116, 32, 104, 101, 114, 101, 44, 32, 102, 117, 108, 108, 32, 111, 102, 32, 103, 111, 108, 100, 101, 110, 32, 101, 103, 103, 115, 33, 10, 49, 48, 48, 9, 84, 104, 101, 32, 110, 101, 115, 116, 32, 111, 102, 32, 103, 111, 108, 100, 101, 110, 32, 101, 103, 103, 115, 32, 104, 97, 115, 32, 118, 97, 110, 105, 115, 104, 101, 100, 33, 10, 50, 48, 48, 9, 68, 111, 110, 101, 33, 10, 53, 55, 9, 74, 101, 119, 101, 108, 101, 100, 32, 116, 114, 105, 100, 101, 110, 116, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 106, 101, 119, 101, 108, 45, 101, 110, 99, 114, 117, 115, 116, 101, 100, 32, 116, 114, 105, 100, 101, 110, 116, 32, 104, 101, 114, 101, 33, 10, 53, 56, 9, 77, 105, 110, 103, 32, 118, 97, 115, 101, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 100, 101, 108, 105, 99, 97, 116, 101, 44, 32, 112, 114, 101, 99, 105, 111, 117, 115, 44, 32, 109, 105, 110, 103, 32, 118, 97, 115, 101, 32, 104, 101, 114, 101, 33, 10, 49, 48, 48, 9, 84, 104, 101, 32, 118, 97, 115, 101, 32, 105, 115, 32, 110, 111, 119, 32, 114, 101, 115, 116, 105, 110, 103, 44, 32, 100, 101, 108, 105, 99, 97, 116, 101, 108, 121, 44, 32, 111, 110, 32, 97, 32, 118, 101, 108, 118, 101, 116, 32, 112, 105, 108, 108, 111, 119, 46, 10, 50, 48, 48, 9, 84, 104, 101, 32, 102, 108, 111, 111, 114, 32, 105, 115, 32, 108, 105, 116, 116, 101, 114, 101, 100, 32, 119, 105, 116, 104, 32, 119, 111, 114, 116, 104, 108, 101, 115, 115, 32, 115, 104, 97, 114, 100, 115, 32, 111, 102, 32, 112, 111, 116, 116, 101, 114, 121, 46, 10, 51, 48, 48, 9, 84, 104, 101, 32, 109, 105, 110, 103, 32, 118, 97, 115, 101, 32, 100, 114, 111, 112, 115, 32, 119, 105, 116, 104, 32, 97, 32, 100, 101, 108, 105, 99, 97, 116, 101, 32, 99, 114, 97, 115, 104, 46, 10, 53, 57, 9, 69, 103, 103, 45, 115, 105, 122, 101, 100, 32, 101, 109, 101, 114, 97, 108, 100, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 110, 32, 101, 109, 101, 114, 97, 108, 100, 32, 104, 101, 114, 101, 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 111, 102, 32, 97, 32, 112, 108, 111, 118, 101, 114, 39, 115, 32, 101, 103, 103, 33, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 110, 32, 101, 109, 101, 114, 97, 108, 100, 32, 114, 101, 115, 116, 105, 110, 103, 32, 105, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 97, 118, 105, 116, 121, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 33, 10, 54, 48, 9, 80, 108, 97, 116, 105, 110, 117, 109, 32, 112, 121, 114, 97, 109, 105, 100, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 112, 108, 97, 116, 105, 110, 117, 109, 32, 112, 121, 114, 97, 109, 105, 100, 32, 104, 101, 114, 101, 44, 32, 56, 32, 105, 110, 99, 104, 101, 115, 32, 111, 110, 32, 97, 32, 115, 105, 100, 101, 33, 10, 54, 49, 9, 71, 108, 105, 115, 116, 101, 110, 105, 110, 103, 32, 112, 101, 97, 114, 108, 10, 48, 48, 48, 9, 79, 102, 102, 32, 116, 111, 32, 111, 110, 101, 32, 115, 105, 100, 101, 32, 108, 105, 101, 115, 32, 97, 32, 103, 108, 105, 115, 116, 101, 110, 105, 110, 103, 32, 112, 101, 97, 114, 108, 33, 10, 54, 50, 9, 80, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 112, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 32, 115, 112, 114, 101, 97, 100, 32, 111, 117, 116, 32, 111, 110, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 33, 10, 49, 48, 48, 9, 84, 104, 101, 32, 100, 114, 97, 103, 111, 110, 32, 105, 115, 32, 115, 112, 114, 97, 119, 108, 101, 100, 32, 111, 117, 116, 32, 111, 110, 32, 97, 32, 112, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 33, 33, 10, 50, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 112, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 32, 104, 101, 114, 101, 44, 32, 104, 111, 118, 101, 114, 105, 110, 103, 32, 105, 110, 32, 109, 105, 100, 45, 97, 105, 114, 33, 10, 54, 51, 9, 82, 97, 114, 101, 32, 115, 112, 105, 99, 101, 115, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 114, 97, 114, 101, 32, 115, 112, 105, 99, 101, 115, 32, 104, 101, 114, 101, 33, 10, 54, 52, 9, 71, 111, 108, 100, 101, 110, 32, 99, 104, 97, 105, 110, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 103, 111, 108, 100, 101, 110, 32, 99, 104, 97, 105, 110, 32, 108, 121, 105, 110, 103, 32, 105, 110, 32, 97, 32, 104, 101, 97, 112, 32, 111, 110, 32, 116, 104, 101, 32, 102, 108, 111, 111, 114, 33, 10, 49, 48, 48, 9, 84, 104, 101, 32, 98, 101, 97, 114, 32, 105, 115, 32, 108, 111, 99, 107, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 119, 97, 108, 108, 32, 119, 105, 116, 104, 32, 97, 32, 103, 111, 108, 100, 101, 110, 32, 99, 104, 97, 105, 110, 33, 10, 50, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 103, 111, 108, 100, 101, 110, 32, 99, 104, 97, 105, 110, 32, 108, 111, 99, 107, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 119, 97, 108, 108, 33, 10, 54, 53, 9, 71, 105, 97, 110, 116, 32, 114, 117, 98, 121, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 110, 32, 101, 110, 111, 114, 109, 111, 117, 115, 32, 114, 117, 98, 121, 32, 104, 101, 114, 101, 33, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 114, 117, 98, 121, 32, 114, 101, 115, 116, 105, 110, 103, 32, 105, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 97, 118, 105, 116, 121, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 33, 10, 54, 54, 9, 74, 97, 100, 101, 32, 110, 101, 99, 107, 108, 97, 99, 101, 10, 48, 48, 48, 9, 65, 32, 112, 114, 101, 99, 105, 111, 117, 115, 32, 106, 97, 100, 101, 32, 110, 101, 99, 107, 108, 97, 99, 101, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 100, 114, 111, 112, 112, 101, 100, 32, 104, 101, 114, 101, 33, 10, 54, 55, 9, 65, 109, 98, 101, 114, 32, 103, 101, 109, 115, 116, 111, 110, 101, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 114, 97, 114, 101, 32, 97, 109, 98, 101, 114, 32, 103, 101, 109, 115, 116, 111, 110, 101, 32, 104, 101, 114, 101, 33, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 110, 32, 97, 109, 98, 101, 114, 32, 103, 101, 109, 115, 116, 111, 110, 101, 32, 114, 101, 115, 116, 105, 110, 103, 32, 105, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 97, 118, 105, 116, 121, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 33, 10, 54, 56, 9, 83, 116, 97, 114, 32, 115, 97, 112, 112, 104, 105, 114, 101, 10, 48, 48, 48, 9, 65, 32, 98, 114, 105, 108, 108, 105, 97, 110, 116, 32, 98, 108, 117, 101, 32, 115, 116, 97, 114, 32, 115, 97, 112, 112, 104, 105, 114, 101, 32, 105, 115, 32, 104, 101, 114, 101, 33, 10, 49, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 115, 116, 97, 114, 32, 115, 97, 112, 112, 104, 105, 114, 101, 32, 114, 101, 115, 116, 105, 110, 103, 32, 105, 110, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 97, 118, 105, 116, 121, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 33, 10, 54, 57, 9, 69, 98, 111, 110, 121, 32, 115, 116, 97, 116, 117, 101, 116, 116, 101, 10, 48, 48, 48, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 114, 105, 99, 104, 108, 121, 45, 99, 97, 114, 118, 101, 100, 32, 101, 98, 111, 110, 121, 32, 115, 116, 97, 116, 117, 101, 116, 116, 101, 32, 104, 101, 114, 101, 33, 10, 45, 49, 10, 54, 10, 49, 9, 83, 111, 109, 101, 119, 104, 101, 114, 101, 32, 110, 101, 97, 114, 98, 121, 32, 105, 115, 32, 67, 111, 108, 111, 115, 115, 97, 108, 32, 67, 97, 118, 101, 44, 32, 119, 104, 101, 114, 101, 32, 111, 116, 104, 101, 114, 115, 32, 104, 97, 118, 101, 32, 102, 111, 117, 110, 100, 32, 102, 111, 114, 116, 117, 110, 101, 115, 32, 105, 110, 10, 49, 9, 116, 114, 101, 97, 115, 117, 114, 101, 32, 97, 110, 100, 32, 103, 111, 108, 100, 44, 32, 116, 104, 111, 117, 103, 104, 32, 105, 116, 32, 105, 115, 32, 114, 117, 109, 111, 114, 101, 100, 32, 116, 104, 97, 116, 32, 115, 111, 109, 101, 32, 119, 104, 111, 32, 101, 110, 116, 101, 114, 32, 97, 114, 101, 32, 110, 101, 118, 101, 114, 10, 49, 9, 115, 101, 101, 110, 32, 97, 103, 97, 105, 110, 46, 32, 32, 77, 97, 103, 105, 99, 32, 105, 115, 32, 115, 97, 105, 100, 32, 116, 111, 32, 119, 111, 114, 107, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 118, 101, 46, 32, 32, 73, 32, 119, 105, 108, 108, 32, 98, 101, 32, 121, 111, 117, 114, 32, 101, 121, 101, 115, 10, 49, 9, 97, 110, 100, 32, 104, 97, 110, 100, 115, 46, 32, 32, 68, 105, 114, 101, 99, 116, 32, 109, 101, 32, 119, 105, 116, 104, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 111, 102, 32, 49, 32, 111, 114, 32, 50, 32, 119, 111, 114, 100, 115, 46, 32, 32, 73, 32, 115, 104, 111, 117, 108, 100, 32, 119, 97, 114, 110, 10, 49, 9, 121, 111, 117, 32, 116, 104, 97, 116, 32, 73, 32, 108, 111, 111, 107, 32, 97, 116, 32, 111, 110, 108, 121, 32, 116, 104, 101, 32, 102, 105, 114, 115, 116, 32, 102, 105, 118, 101, 32, 108, 101, 116, 116, 101, 114, 115, 32, 111, 102, 32, 101, 97, 99, 104, 32, 119, 111, 114, 100, 44, 32, 115, 111, 32, 121, 111, 117, 39, 108, 108, 10, 49, 9, 104, 97, 118, 101, 32, 116, 111, 32, 101, 110, 116, 101, 114, 32, 34, 110, 111, 114, 116, 104, 101, 97, 115, 116, 34, 32, 97, 115, 32, 34, 110, 101, 34, 32, 116, 111, 32, 100, 105, 115, 116, 105, 110, 103, 117, 105, 115, 104, 32, 105, 116, 32, 102, 114, 111, 109, 32, 34, 110, 111, 114, 116, 104, 34, 46, 10, 49, 9, 89, 111, 117, 32, 99, 97, 110, 32, 116, 121, 112, 101, 32, 34, 104, 101, 108, 112, 34, 32, 102, 111, 114, 32, 115, 111, 109, 101, 32, 103, 101, 110, 101, 114, 97, 108, 32, 104, 105, 110, 116, 115, 46, 32, 32, 70, 111, 114, 32, 105, 110, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 104, 111, 119, 10, 49, 9, 116, 111, 32, 101, 110, 100, 32, 121, 111, 117, 114, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 44, 32, 115, 99, 111, 114, 105, 110, 103, 44, 32, 101, 116, 99, 46, 44, 32, 116, 121, 112, 101, 32, 34, 105, 110, 102, 111, 34, 46, 10, 49, 9, 9, 9, 9, 32, 32, 32, 32, 32, 32, 45, 32, 45, 32, 45, 10, 49, 9, 84, 104, 105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 119, 97, 115, 32, 111, 114, 105, 103, 105, 110, 97, 108, 108, 121, 32, 100, 101, 118, 101, 108, 111, 112, 101, 100, 32, 98, 121, 32, 87, 105, 108, 108, 105, 101, 32, 67, 114, 111, 119, 116, 104, 101, 114, 46, 32, 32, 77, 111, 115, 116, 32, 111, 102, 32, 116, 104, 101, 10, 49, 9, 102, 101, 97, 116, 117, 114, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 103, 114, 97, 109, 32, 119, 101, 114, 101, 32, 97, 100, 100, 101, 100, 32, 98, 121, 32, 68, 111, 110, 32, 87, 111, 111, 100, 115, 46, 32, 32, 67, 111, 110, 116, 97, 99, 116, 32, 68, 111, 110, 10, 49, 9, 105, 102, 32, 121, 111, 117, 32, 104, 97, 118, 101, 32, 97, 110, 121, 32, 113, 117, 101, 115, 116, 105, 111, 110, 115, 44, 32, 99, 111, 109, 109, 101, 110, 116, 115, 44, 32, 101, 116, 99, 46, 10, 50, 9, 65, 32, 108, 105, 116, 116, 108, 101, 32, 100, 119, 97, 114, 102, 32, 119, 105, 116, 104, 32, 97, 32, 98, 105, 103, 32, 107, 110, 105, 102, 101, 32, 98, 108, 111, 99, 107, 115, 32, 121, 111, 117, 114, 32, 119, 97, 121, 46, 10, 51, 9, 65, 32, 108, 105, 116, 116, 108, 101, 32, 100, 119, 97, 114, 102, 32, 106, 117, 115, 116, 32, 119, 97, 108, 107, 101, 100, 32, 97, 114, 111, 117, 110, 100, 32, 97, 32, 99, 111, 114, 110, 101, 114, 44, 32, 115, 97, 119, 32, 121, 111, 117, 44, 32, 116, 104, 114, 101, 119, 32, 97, 32, 108, 105, 116, 116, 108, 101, 10, 51, 9, 97, 120, 101, 32, 97, 116, 32, 121, 111, 117, 32, 119, 104, 105, 99, 104, 32, 109, 105, 115, 115, 101, 100, 44, 32, 99, 117, 114, 115, 101, 100, 44, 32, 97, 110, 100, 32, 114, 97, 110, 32, 97, 119, 97, 121, 46, 10, 52, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 37, 49, 32, 116, 104, 114, 101, 97, 116, 101, 110, 105, 110, 103, 32, 108, 105, 116, 116, 108, 101, 32, 100, 119, 97, 114, 118, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 121, 111, 117, 46, 10, 53, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 116, 104, 114, 101, 97, 116, 101, 110, 105, 110, 103, 32, 108, 105, 116, 116, 108, 101, 32, 100, 119, 97, 114, 102, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 121, 111, 117, 33, 10, 54, 9, 79, 110, 101, 32, 115, 104, 97, 114, 112, 32, 110, 97, 115, 116, 121, 32, 107, 110, 105, 102, 101, 32, 105, 115, 32, 116, 104, 114, 111, 119, 110, 32, 97, 116, 32, 121, 111, 117, 33, 10, 55, 9, 65, 32, 104, 111, 108, 108, 111, 119, 32, 118, 111, 105, 99, 101, 32, 115, 97, 121, 115, 32, 34, 80, 76, 85, 71, 72, 34, 46, 10, 56, 9, 73, 116, 32, 103, 101, 116, 115, 32, 121, 111, 117, 33, 10, 57, 9, 73, 116, 32, 109, 105, 115, 115, 101, 115, 33, 10, 49, 48, 9, 73, 32, 97, 109, 32, 117, 110, 115, 117, 114, 101, 32, 104, 111, 119, 32, 121, 111, 117, 32, 97, 114, 101, 32, 102, 97, 99, 105, 110, 103, 46, 32, 32, 85, 115, 101, 32, 99, 111, 109, 112, 97, 115, 115, 32, 112, 111, 105, 110, 116, 115, 32, 111, 114, 32, 110, 101, 97, 114, 98, 121, 32, 111, 98, 106, 101, 99, 116, 115, 46, 10, 49, 49, 9, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 105, 110, 32, 102, 114, 111, 109, 32, 111, 117, 116, 32, 104, 101, 114, 101, 46, 32, 32, 85, 115, 101, 32, 99, 111, 109, 112, 97, 115, 115, 32, 112, 111, 105, 110, 116, 115, 32, 111, 114, 32, 110, 97, 109, 101, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 10, 49, 49, 9, 105, 110, 32, 116, 104, 101, 32, 103, 101, 110, 101, 114, 97, 108, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 116, 111, 32, 103, 111, 46, 10, 49, 50, 9, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 104, 111, 119, 32, 116, 111, 32, 97, 112, 112, 108, 121, 32, 116, 104, 97, 116, 32, 119, 111, 114, 100, 32, 104, 101, 114, 101, 46, 10, 49, 51, 9, 89, 111, 117, 39, 114, 101, 32, 113, 117, 105, 116, 101, 32, 119, 101, 108, 99, 111, 109, 101, 46, 10, 49, 52, 9, 73, 39, 109, 32, 103, 97, 109, 101, 46, 32, 32, 87, 111, 117, 108, 100, 32, 121, 111, 117, 32, 99, 97, 114, 101, 32, 116, 111, 32, 101, 120, 112, 108, 97, 105, 110, 32, 104, 111, 119, 63, 10, 49, 53, 9, 83, 111, 114, 114, 121, 44, 32, 98, 117, 116, 32, 73, 32, 97, 109, 32, 110, 111, 116, 32, 97, 108, 108, 111, 119, 101, 100, 32, 116, 111, 32, 103, 105, 118, 101, 32, 109, 111, 114, 101, 32, 100, 101, 116, 97, 105, 108, 46, 32, 32, 73, 32, 119, 105, 108, 108, 32, 114, 101, 112, 101, 97, 116, 32, 116, 104, 101, 10, 49, 53, 9, 108, 111, 110, 103, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 102, 32, 121, 111, 117, 114, 32, 108, 111, 99, 97, 116, 105, 111, 110, 46, 10, 49, 54, 9, 73, 116, 32, 105, 115, 32, 110, 111, 119, 32, 112, 105, 116, 99, 104, 32, 100, 97, 114, 107, 46, 32, 32, 73, 102, 32, 121, 111, 117, 32, 112, 114, 111, 99, 101, 101, 100, 32, 121, 111, 117, 32, 119, 105, 108, 108, 32, 108, 105, 107, 101, 108, 121, 32, 102, 97, 108, 108, 32, 105, 110, 116, 111, 32, 97, 32, 112, 105, 116, 46, 10, 49, 55, 9, 73, 102, 32, 121, 111, 117, 32, 112, 114, 101, 102, 101, 114, 44, 32, 115, 105, 109, 112, 108, 121, 32, 116, 121, 112, 101, 32, 119, 32, 114, 97, 116, 104, 101, 114, 32, 116, 104, 97, 110, 32, 119, 101, 115, 116, 46, 10, 49, 56, 9, 65, 114, 101, 32, 121, 111, 117, 32, 116, 114, 121, 105, 110, 103, 32, 116, 111, 32, 99, 97, 116, 99, 104, 32, 116, 104, 101, 32, 98, 105, 114, 100, 63, 10, 49, 57, 9, 83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 97, 98, 111, 117, 116, 32, 121, 111, 117, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 98, 101, 32, 102, 114, 105, 103, 104, 116, 101, 110, 105, 110, 103, 32, 116, 104, 101, 32, 98, 105, 114, 100, 46, 32, 32, 80, 101, 114, 104, 97, 112, 115, 32, 121, 111, 117, 10, 49, 57, 9, 109, 105, 103, 104, 116, 32, 102, 105, 103, 117, 114, 101, 32, 111, 117, 116, 32, 119, 104, 97, 116, 32, 105, 116, 32, 105, 115, 46, 10, 50, 48, 9, 65, 114, 101, 32, 121, 111, 117, 32, 116, 114, 121, 105, 110, 103, 32, 116, 111, 32, 115, 111, 109, 101, 104, 111, 119, 32, 100, 101, 97, 108, 32, 119, 105, 116, 104, 32, 116, 104, 101, 32, 115, 110, 97, 107, 101, 63, 10, 50, 49, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 107, 105, 108, 108, 32, 116, 104, 101, 32, 115, 110, 97, 107, 101, 44, 32, 111, 114, 32, 100, 114, 105, 118, 101, 32, 105, 116, 32, 97, 119, 97, 121, 44, 32, 111, 114, 32, 97, 118, 111, 105, 100, 32, 105, 116, 44, 32, 111, 114, 32, 97, 110, 121, 116, 104, 105, 110, 103, 10, 50, 49, 9, 108, 105, 107, 101, 32, 116, 104, 97, 116, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 119, 97, 121, 32, 116, 111, 32, 103, 101, 116, 32, 98, 121, 44, 32, 98, 117, 116, 32, 121, 111, 117, 32, 100, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 116, 104, 101, 32, 110, 101, 99, 101, 115, 115, 97, 114, 121, 10, 50, 49, 9, 114, 101, 115, 111, 117, 114, 99, 101, 115, 32, 114, 105, 103, 104, 116, 32, 110, 111, 119, 46, 10, 50, 50, 9, 68, 111, 32, 121, 111, 117, 32, 114, 101, 97, 108, 108, 121, 32, 119, 97, 110, 116, 32, 116, 111, 32, 113, 117, 105, 116, 32, 110, 111, 119, 63, 10, 50, 51, 9, 89, 111, 117, 32, 102, 101, 108, 108, 32, 105, 110, 116, 111, 32, 97, 32, 112, 105, 116, 32, 97, 110, 100, 32, 98, 114, 111, 107, 101, 32, 101, 118, 101, 114, 121, 32, 98, 111, 110, 101, 32, 105, 110, 32, 121, 111, 117, 114, 32, 98, 111, 100, 121, 33, 10, 50, 52, 9, 89, 111, 117, 32, 97, 114, 101, 32, 97, 108, 114, 101, 97, 100, 121, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 105, 116, 33, 10, 50, 53, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 98, 101, 32, 115, 101, 114, 105, 111, 117, 115, 33, 10, 50, 54, 9, 84, 104, 101, 32, 98, 105, 114, 100, 32, 115, 101, 101, 109, 101, 100, 32, 117, 110, 97, 102, 114, 97, 105, 100, 32, 97, 116, 32, 102, 105, 114, 115, 116, 44, 32, 98, 117, 116, 32, 97, 115, 32, 121, 111, 117, 32, 97, 112, 112, 114, 111, 97, 99, 104, 32, 105, 116, 32, 98, 101, 99, 111, 109, 101, 115, 10, 50, 54, 9, 100, 105, 115, 116, 117, 114, 98, 101, 100, 32, 97, 110, 100, 32, 121, 111, 117, 32, 99, 97, 110, 110, 111, 116, 32, 99, 97, 116, 99, 104, 32, 105, 116, 46, 10, 50, 55, 9, 89, 111, 117, 32, 99, 97, 110, 32, 99, 97, 116, 99, 104, 32, 116, 104, 101, 32, 98, 105, 114, 100, 44, 32, 98, 117, 116, 32, 121, 111, 117, 32, 99, 97, 110, 110, 111, 116, 32, 99, 97, 114, 114, 121, 32, 105, 116, 46, 10, 50, 56, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 104, 101, 114, 101, 32, 119, 105, 116, 104, 32, 97, 32, 108, 111, 99, 107, 33, 10, 50, 57, 9, 89, 111, 117, 32, 97, 114, 101, 110, 39, 116, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 105, 116, 33, 10, 51, 48, 9, 84, 104, 101, 32, 108, 105, 116, 116, 108, 101, 32, 98, 105, 114, 100, 32, 97, 116, 116, 97, 99, 107, 115, 32, 116, 104, 101, 32, 103, 114, 101, 101, 110, 32, 115, 110, 97, 107, 101, 44, 32, 97, 110, 100, 32, 105, 110, 32, 97, 110, 32, 97, 115, 116, 111, 117, 110, 100, 105, 110, 103, 32, 102, 108, 117, 114, 114, 121, 10, 51, 48, 9, 100, 114, 105, 118, 101, 115, 32, 116, 104, 101, 32, 115, 110, 97, 107, 101, 32, 97, 119, 97, 121, 46, 10, 51, 49, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 110, 111, 32, 107, 101, 121, 115, 33, 10, 51, 50, 9, 73, 116, 32, 104, 97, 115, 32, 110, 111, 32, 108, 111, 99, 107, 46, 10, 51, 51, 9, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 104, 111, 119, 32, 116, 111, 32, 108, 111, 99, 107, 32, 111, 114, 32, 117, 110, 108, 111, 99, 107, 32, 115, 117, 99, 104, 32, 97, 32, 116, 104, 105, 110, 103, 46, 10, 51, 52, 9, 73, 116, 32, 119, 97, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 108, 111, 99, 107, 101, 100, 46, 10, 51, 53, 9, 84, 104, 101, 32, 103, 114, 97, 116, 101, 32, 105, 115, 32, 110, 111, 119, 32, 108, 111, 99, 107, 101, 100, 46, 10, 51, 54, 9, 84, 104, 101, 32, 103, 114, 97, 116, 101, 32, 105, 115, 32, 110, 111, 119, 32, 117, 110, 108, 111, 99, 107, 101, 100, 46, 10, 51, 55, 9, 73, 116, 32, 119, 97, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 117, 110, 108, 111, 99, 107, 101, 100, 46, 10, 51, 56, 9, 84, 104, 101, 32, 117, 114, 110, 32, 105, 115, 32, 101, 109, 112, 116, 121, 32, 97, 110, 100, 32, 119, 105, 108, 108, 32, 110, 111, 116, 32, 108, 105, 103, 104, 116, 46, 10, 51, 57, 9, 89, 111, 117, 114, 32, 108, 97, 109, 112, 32, 105, 115, 32, 110, 111, 119, 32, 111, 110, 46, 10, 52, 48, 9, 89, 111, 117, 114, 32, 108, 97, 109, 112, 32, 105, 115, 32, 110, 111, 119, 32, 111, 102, 102, 46, 10, 52, 49, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 32, 119, 97, 121, 32, 116, 111, 32, 103, 101, 116, 32, 112, 97, 115, 116, 32, 116, 104, 101, 32, 98, 101, 97, 114, 32, 116, 111, 32, 117, 110, 108, 111, 99, 107, 32, 116, 104, 101, 32, 99, 104, 97, 105, 110, 44, 32, 119, 104, 105, 99, 104, 32, 105, 115, 10, 52, 49, 9, 112, 114, 111, 98, 97, 98, 108, 121, 32, 106, 117, 115, 116, 32, 97, 115, 32, 119, 101, 108, 108, 46, 10, 52, 50, 9, 78, 111, 116, 104, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 46, 10, 52, 51, 9, 87, 104, 101, 114, 101, 63, 10, 52, 52, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 104, 101, 114, 101, 32, 116, 111, 32, 97, 116, 116, 97, 99, 107, 46, 10, 52, 53, 9, 84, 104, 101, 32, 108, 105, 116, 116, 108, 101, 32, 98, 105, 114, 100, 32, 105, 115, 32, 110, 111, 119, 32, 100, 101, 97, 100, 46, 32, 32, 73, 116, 115, 32, 98, 111, 100, 121, 32, 100, 105, 115, 97, 112, 112, 101, 97, 114, 115, 46, 10, 52, 54, 9, 65, 116, 116, 97, 99, 107, 105, 110, 103, 32, 116, 104, 101, 32, 115, 110, 97, 107, 101, 32, 98, 111, 116, 104, 32, 100, 111, 101, 115, 110, 39, 116, 32, 119, 111, 114, 107, 32, 97, 110, 100, 32, 105, 115, 32, 118, 101, 114, 121, 32, 100, 97, 110, 103, 101, 114, 111, 117, 115, 46, 10, 52, 55, 9, 89, 111, 117, 32, 107, 105, 108, 108, 101, 100, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 100, 119, 97, 114, 102, 46, 10, 52, 56, 9, 89, 111, 117, 32, 97, 116, 116, 97, 99, 107, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 100, 119, 97, 114, 102, 44, 32, 98, 117, 116, 32, 104, 101, 32, 100, 111, 100, 103, 101, 115, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 119, 97, 121, 46, 10, 52, 57, 9, 87, 105, 116, 104, 32, 119, 104, 97, 116, 63, 32, 32, 89, 111, 117, 114, 32, 98, 97, 114, 101, 32, 104, 97, 110, 100, 115, 63, 10, 53, 48, 9, 71, 111, 111, 100, 32, 116, 114, 121, 44, 32, 98, 117, 116, 32, 116, 104, 97, 116, 32, 105, 115, 32, 97, 110, 32, 111, 108, 100, 32, 119, 111, 114, 110, 45, 111, 117, 116, 32, 109, 97, 103, 105, 99, 32, 119, 111, 114, 100, 46, 10, 53, 49, 9, 73, 32, 107, 110, 111, 119, 32, 111, 102, 32, 112, 108, 97, 99, 101, 115, 44, 32, 97, 99, 116, 105, 111, 110, 115, 44, 32, 97, 110, 100, 32, 116, 104, 105, 110, 103, 115, 46, 32, 32, 77, 111, 115, 116, 32, 111, 102, 32, 109, 121, 32, 118, 111, 99, 97, 98, 117, 108, 97, 114, 121, 10, 53, 49, 9, 100, 101, 115, 99, 114, 105, 98, 101, 115, 32, 112, 108, 97, 99, 101, 115, 32, 97, 110, 100, 32, 105, 115, 32, 117, 115, 101, 100, 32, 116, 111, 32, 109, 111, 118, 101, 32, 121, 111, 117, 32, 116, 104, 101, 114, 101, 46, 32, 32, 84, 111, 32, 109, 111, 118, 101, 44, 32, 116, 114, 121, 32, 119, 111, 114, 100, 115, 10, 53, 49, 9, 108, 105, 107, 101, 32, 102, 111, 114, 101, 115, 116, 44, 32, 98, 117, 105, 108, 100, 105, 110, 103, 44, 32, 100, 111, 119, 110, 115, 116, 114, 101, 97, 109, 44, 32, 101, 110, 116, 101, 114, 44, 32, 101, 97, 115, 116, 44, 32, 119, 101, 115, 116, 44, 32, 110, 111, 114, 116, 104, 44, 32, 115, 111, 117, 116, 104, 44, 10, 53, 49, 9, 117, 112, 44, 32, 111, 114, 32, 100, 111, 119, 110, 46, 32, 32, 73, 32, 107, 110, 111, 119, 32, 97, 98, 111, 117, 116, 32, 97, 32, 102, 101, 119, 32, 115, 112, 101, 99, 105, 97, 108, 32, 111, 98, 106, 101, 99, 116, 115, 44, 32, 108, 105, 107, 101, 32, 97, 32, 98, 108, 97, 99, 107, 32, 114, 111, 100, 10, 53, 49, 9, 104, 105, 100, 100, 101, 110, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 118, 101, 46, 32, 32, 84, 104, 101, 115, 101, 32, 111, 98, 106, 101, 99, 116, 115, 32, 99, 97, 110, 32, 98, 101, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 101, 100, 32, 117, 115, 105, 110, 103, 32, 115, 111, 109, 101, 32, 111, 102, 10, 53, 49, 9, 116, 104, 101, 32, 97, 99, 116, 105, 111, 110, 32, 119, 111, 114, 100, 115, 32, 116, 104, 97, 116, 32, 73, 32, 107, 110, 111, 119, 46, 32, 32, 85, 115, 117, 97, 108, 108, 121, 32, 121, 111, 117, 32, 119, 105, 108, 108, 32, 110, 101, 101, 100, 32, 116, 111, 32, 103, 105, 118, 101, 32, 98, 111, 116, 104, 32, 116, 104, 101, 10, 53, 49, 9, 111, 98, 106, 101, 99, 116, 32, 97, 110, 100, 32, 97, 99, 116, 105, 111, 110, 32, 119, 111, 114, 100, 115, 32, 40, 105, 110, 32, 101, 105, 116, 104, 101, 114, 32, 111, 114, 100, 101, 114, 41, 44, 32, 98, 117, 116, 32, 115, 111, 109, 101, 116, 105, 109, 101, 115, 32, 73, 32, 99, 97, 110, 32, 105, 110, 102, 101, 114, 10, 53, 49, 9, 116, 104, 101, 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 118, 101, 114, 98, 32, 97, 108, 111, 110, 101, 46, 32, 32, 83, 111, 109, 101, 32, 111, 98, 106, 101, 99, 116, 115, 32, 97, 108, 115, 111, 32, 105, 109, 112, 108, 121, 32, 118, 101, 114, 98, 115, 59, 32, 105, 110, 10, 53, 49, 9, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 44, 32, 34, 105, 110, 118, 101, 110, 116, 111, 114, 121, 34, 32, 105, 109, 112, 108, 105, 101, 115, 32, 34, 116, 97, 107, 101, 32, 105, 110, 118, 101, 110, 116, 111, 114, 121, 34, 44, 32, 119, 104, 105, 99, 104, 32, 99, 97, 117, 115, 101, 115, 32, 109, 101, 32, 116, 111, 10, 53, 49, 9, 103, 105, 118, 101, 32, 121, 111, 117, 32, 97, 32, 108, 105, 115, 116, 32, 111, 102, 32, 119, 104, 97, 116, 32, 121, 111, 117, 39, 114, 101, 32, 99, 97, 114, 114, 121, 105, 110, 103, 46, 32, 32, 83, 111, 109, 101, 32, 111, 98, 106, 101, 99, 116, 115, 32, 104, 97, 118, 101, 32, 117, 110, 101, 120, 112, 101, 99, 116, 101, 100, 10, 53, 49, 9, 101, 102, 102, 101, 99, 116, 115, 59, 32, 116, 104, 101, 32, 101, 102, 102, 101, 99, 116, 115, 32, 97, 114, 101, 32, 110, 111, 116, 32, 97, 108, 119, 97, 121, 115, 32, 100, 101, 115, 105, 114, 97, 98, 108, 101, 33, 32, 32, 85, 115, 117, 97, 108, 108, 121, 32, 112, 101, 111, 112, 108, 101, 32, 104, 97, 118, 105, 110, 103, 10, 53, 49, 9, 116, 114, 111, 117, 98, 108, 101, 32, 109, 111, 118, 105, 110, 103, 32, 106, 117, 115, 116, 32, 110, 101, 101, 100, 32, 116, 111, 32, 116, 114, 121, 32, 97, 32, 102, 101, 119, 32, 109, 111, 114, 101, 32, 119, 111, 114, 100, 115, 46, 32, 32, 85, 115, 117, 97, 108, 108, 121, 32, 112, 101, 111, 112, 108, 101, 10, 53, 49, 9, 116, 114, 121, 105, 110, 103, 32, 117, 110, 115, 117, 99, 99, 101, 115, 115, 102, 117, 108, 108, 121, 32, 116, 111, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 101, 32, 97, 110, 32, 111, 98, 106, 101, 99, 116, 32, 97, 114, 101, 32, 97, 116, 116, 101, 109, 112, 116, 105, 110, 103, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 10, 53, 49, 9, 98, 101, 121, 111, 110, 100, 32, 116, 104, 101, 105, 114, 32, 40, 111, 114, 32, 109, 121, 33, 41, 32, 99, 97, 112, 97, 98, 105, 108, 105, 116, 105, 101, 115, 32, 97, 110, 100, 32, 115, 104, 111, 117, 108, 100, 32, 116, 114, 121, 32, 97, 32, 99, 111, 109, 112, 108, 101, 116, 101, 108, 121, 10, 53, 49, 9, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 116, 97, 99, 107, 46, 32, 32, 79, 110, 101, 32, 112, 111, 105, 110, 116, 32, 111, 102, 116, 101, 110, 32, 99, 111, 110, 102, 117, 115, 105, 110, 103, 32, 116, 111, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 32, 105, 115, 32, 116, 104, 97, 116, 44, 32, 119, 104, 101, 110, 10, 53, 49, 9, 116, 104, 101, 114, 101, 32, 97, 114, 101, 32, 115, 101, 118, 101, 114, 97, 108, 32, 119, 97, 121, 115, 32, 116, 111, 32, 103, 111, 32, 105, 110, 32, 97, 32, 99, 101, 114, 116, 97, 105, 110, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 32, 40, 101, 46, 103, 46, 44, 32, 105, 102, 32, 116, 104, 101, 114, 101, 10, 53, 49, 9, 97, 114, 101, 32, 115, 101, 118, 101, 114, 97, 108, 32, 104, 111, 108, 101, 115, 32, 105, 110, 32, 97, 32, 119, 97, 108, 108, 41, 44, 32, 99, 104, 111, 111, 115, 105, 110, 103, 32, 116, 104, 97, 116, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 32, 105, 110, 32, 101, 102, 102, 101, 99, 116, 10, 53, 49, 9, 99, 104, 111, 111, 115, 101, 115, 32, 111, 110, 101, 32, 111, 102, 32, 116, 104, 101, 32, 119, 97, 121, 115, 32, 97, 116, 32, 114, 97, 110, 100, 111, 109, 59, 32, 111, 102, 116, 101, 110, 44, 32, 116, 104, 111, 117, 103, 104, 44, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 121, 105, 110, 103, 32, 116, 104, 101, 10, 53, 49, 9, 112, 108, 97, 99, 101, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 116, 111, 32, 114, 101, 97, 99, 104, 32, 121, 111, 117, 32, 99, 97, 110, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 32, 99, 104, 111, 111, 115, 105, 110, 103, 32, 116, 104, 101, 32, 114, 105, 103, 104, 116, 32, 112, 97, 116, 104, 46, 10, 53, 49, 9, 65, 108, 115, 111, 44, 32, 116, 111, 32, 115, 112, 101, 101, 100, 32, 116, 104, 101, 32, 103, 97, 109, 101, 32, 121, 111, 117, 32, 99, 97, 110, 32, 115, 111, 109, 101, 116, 105, 109, 101, 115, 32, 109, 111, 118, 101, 32, 108, 111, 110, 103, 32, 100, 105, 115, 116, 97, 110, 99, 101, 115, 32, 119, 105, 116, 104, 32, 97, 10, 53, 49, 9, 115, 105, 110, 103, 108, 101, 32, 119, 111, 114, 100, 46, 32, 32, 70, 111, 114, 32, 101, 120, 97, 109, 112, 108, 101, 44, 32, 34, 98, 117, 105, 108, 100, 105, 110, 103, 34, 32, 117, 115, 117, 97, 108, 108, 121, 32, 103, 101, 116, 115, 32, 121, 111, 117, 32, 116, 111, 32, 116, 104, 101, 32, 98, 117, 105, 108, 100, 105, 110, 103, 10, 53, 49, 9, 102, 114, 111, 109, 32, 97, 110, 121, 119, 104, 101, 114, 101, 32, 97, 98, 111, 118, 101, 32, 103, 114, 111, 117, 110, 100, 32, 101, 120, 99, 101, 112, 116, 32, 119, 104, 101, 110, 32, 108, 111, 115, 116, 32, 105, 110, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 46, 32, 32, 65, 108, 115, 111, 44, 32, 110, 111, 116, 101, 10, 53, 49, 9, 116, 104, 97, 116, 32, 99, 97, 118, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 32, 97, 110, 100, 32, 102, 111, 114, 101, 115, 116, 32, 112, 97, 116, 104, 115, 32, 116, 117, 114, 110, 32, 97, 32, 108, 111, 116, 44, 32, 115, 111, 32, 108, 101, 97, 118, 105, 110, 103, 32, 111, 110, 101, 32, 112, 108, 97, 99, 101, 10, 53, 49, 9, 104, 101, 97, 100, 105, 110, 103, 32, 110, 111, 114, 116, 104, 32, 100, 111, 101, 115, 110, 39, 116, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 32, 101, 110, 116, 101, 114, 105, 110, 103, 32, 116, 104, 101, 32, 110, 101, 120, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 111, 117, 116, 104, 46, 10, 53, 49, 9, 72, 111, 119, 101, 118, 101, 114, 32, 40, 97, 110, 111, 116, 104, 101, 114, 32, 105, 109, 112, 111, 114, 116, 97, 110, 116, 32, 112, 111, 105, 110, 116, 41, 44, 32, 101, 120, 99, 101, 112, 116, 32, 119, 104, 101, 110, 32, 121, 111, 117, 39, 118, 101, 32, 117, 115, 101, 100, 32, 97, 32, 34, 108, 111, 110, 103, 10, 53, 49, 9, 100, 105, 115, 116, 97, 110, 99, 101, 34, 32, 119, 111, 114, 100, 32, 115, 117, 99, 104, 32, 97, 115, 32, 34, 98, 117, 105, 108, 100, 105, 110, 103, 34, 44, 32, 116, 104, 101, 114, 101, 32, 105, 115, 32, 97, 108, 119, 97, 121, 115, 32, 97, 32, 119, 97, 121, 32, 116, 111, 32, 103, 111, 32, 98, 97, 99, 107, 10, 53, 49, 9, 119, 104, 101, 114, 101, 32, 121, 111, 117, 32, 106, 117, 115, 116, 32, 99, 97, 109, 101, 32, 102, 114, 111, 109, 32, 117, 110, 108, 101, 115, 115, 32, 73, 32, 119, 97, 114, 110, 32, 121, 111, 117, 32, 116, 111, 32, 116, 104, 101, 32, 99, 111, 110, 116, 114, 97, 114, 121, 44, 32, 101, 118, 101, 110, 10, 53, 49, 9, 116, 104, 111, 117, 103, 104, 32, 116, 104, 101, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 32, 116, 104, 97, 116, 32, 116, 97, 107, 101, 115, 32, 121, 111, 117, 32, 98, 97, 99, 107, 32, 109, 105, 103, 104, 116, 32, 110, 111, 116, 32, 98, 101, 32, 116, 104, 101, 32, 114, 101, 118, 101, 114, 115, 101, 32, 111, 102, 10, 53, 49, 9, 119, 104, 97, 116, 32, 103, 111, 116, 32, 121, 111, 117, 32, 104, 101, 114, 101, 46, 32, 32, 71, 111, 111, 100, 32, 108, 117, 99, 107, 44, 32, 97, 110, 100, 32, 104, 97, 118, 101, 32, 102, 117, 110, 33, 10, 53, 50, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 32, 119, 97, 121, 32, 116, 111, 32, 103, 111, 32, 116, 104, 97, 116, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 46, 10, 53, 51, 9, 80, 108, 101, 97, 115, 101, 32, 115, 116, 105, 99, 107, 32, 116, 111, 32, 49, 45, 32, 97, 110, 100, 32, 50, 45, 119, 111, 114, 100, 32, 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, 53, 52, 9, 79, 75, 10, 53, 53, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 117, 110, 108, 111, 99, 107, 32, 116, 104, 101, 32, 107, 101, 121, 115, 46, 10, 53, 54, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 99, 114, 97, 119, 108, 101, 100, 32, 97, 114, 111, 117, 110, 100, 32, 105, 110, 32, 115, 111, 109, 101, 32, 108, 105, 116, 116, 108, 101, 32, 104, 111, 108, 101, 115, 32, 97, 110, 100, 32, 119, 111, 117, 110, 100, 32, 117, 112, 32, 98, 97, 99, 107, 32, 105, 110, 32, 116, 104, 101, 10, 53, 54, 9, 109, 97, 105, 110, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 53, 55, 9, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 119, 104, 101, 114, 101, 32, 116, 104, 101, 32, 99, 97, 118, 101, 32, 105, 115, 44, 32, 98, 117, 116, 32, 104, 101, 114, 101, 97, 98, 111, 117, 116, 115, 32, 110, 111, 32, 115, 116, 114, 101, 97, 109, 32, 99, 97, 110, 32, 114, 117, 110, 32, 111, 110, 10, 53, 55, 9, 116, 104, 101, 32, 115, 117, 114, 102, 97, 99, 101, 32, 102, 111, 114, 32, 108, 111, 110, 103, 46, 32, 32, 73, 32, 119, 111, 117, 108, 100, 32, 116, 114, 121, 32, 116, 104, 101, 32, 115, 116, 114, 101, 97, 109, 46, 10, 53, 56, 9, 73, 32, 110, 101, 101, 100, 32, 109, 111, 114, 101, 32, 100, 101, 116, 97, 105, 108, 101, 100, 32, 105, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 115, 32, 116, 111, 32, 100, 111, 32, 116, 104, 97, 116, 46, 10, 53, 57, 9, 73, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 116, 101, 108, 108, 32, 121, 111, 117, 32, 119, 104, 97, 116, 32, 121, 111, 117, 32, 115, 101, 101, 32, 97, 115, 32, 121, 111, 117, 32, 109, 111, 118, 101, 32, 97, 98, 111, 117, 116, 32, 97, 110, 100, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 101, 10, 53, 57, 9, 116, 104, 105, 110, 103, 115, 46, 32, 32, 73, 32, 99, 97, 110, 110, 111, 116, 32, 116, 101, 108, 108, 32, 121, 111, 117, 32, 119, 104, 101, 114, 101, 32, 114, 101, 109, 111, 116, 101, 32, 116, 104, 105, 110, 103, 115, 32, 97, 114, 101, 46, 10, 54, 48, 9, 84, 104, 101, 32, 111, 103, 114, 101, 32, 115, 110, 97, 114, 108, 115, 32, 97, 110, 100, 32, 115, 104, 111, 118, 101, 115, 32, 121, 111, 117, 32, 98, 97, 99, 107, 46, 10, 54, 49, 9, 72, 117, 104, 63, 10, 54, 50, 9, 65, 114, 101, 32, 121, 111, 117, 32, 116, 114, 121, 105, 110, 103, 32, 116, 111, 32, 103, 101, 116, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 99, 97, 118, 101, 63, 10, 54, 51, 9, 84, 104, 101, 32, 103, 114, 97, 116, 101, 32, 105, 115, 32, 118, 101, 114, 121, 32, 115, 111, 108, 105, 100, 32, 97, 110, 100, 32, 104, 97, 115, 32, 97, 32, 104, 97, 114, 100, 101, 110, 101, 100, 32, 115, 116, 101, 101, 108, 32, 108, 111, 99, 107, 46, 32, 32, 89, 111, 117, 32, 99, 97, 110, 110, 111, 116, 10, 54, 51, 9, 101, 110, 116, 101, 114, 32, 119, 105, 116, 104, 111, 117, 116, 32, 97, 32, 107, 101, 121, 44, 32, 97, 110, 100, 32, 116, 104, 101, 114, 101, 32, 97, 114, 101, 32, 110, 111, 32, 107, 101, 121, 115, 32, 110, 101, 97, 114, 98, 121, 46, 32, 32, 73, 32, 119, 111, 117, 108, 100, 32, 114, 101, 99, 111, 109, 109, 101, 110, 100, 10, 54, 51, 9, 108, 111, 111, 107, 105, 110, 103, 32, 101, 108, 115, 101, 119, 104, 101, 114, 101, 32, 102, 111, 114, 32, 116, 104, 101, 32, 107, 101, 121, 115, 46, 10, 54, 52, 9, 84, 104, 101, 32, 116, 114, 101, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 32, 97, 114, 101, 32, 108, 97, 114, 103, 101, 32, 104, 97, 114, 100, 119, 111, 111, 100, 32, 111, 97, 107, 32, 97, 110, 100, 32, 109, 97, 112, 108, 101, 44, 32, 119, 105, 116, 104, 32, 97, 110, 10, 54, 52, 9, 111, 99, 99, 97, 115, 105, 111, 110, 97, 108, 32, 103, 114, 111, 118, 101, 32, 111, 102, 32, 112, 105, 110, 101, 32, 111, 114, 32, 115, 112, 114, 117, 99, 101, 46, 32, 32, 84, 104, 101, 114, 101, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 97, 32, 98, 105, 116, 32, 111, 102, 32, 117, 110, 100, 101, 114, 45, 10, 54, 52, 9, 103, 114, 111, 119, 116, 104, 44, 32, 108, 97, 114, 103, 101, 108, 121, 32, 98, 105, 114, 99, 104, 32, 97, 110, 100, 32, 97, 115, 104, 32, 115, 97, 112, 108, 105, 110, 103, 115, 32, 112, 108, 117, 115, 32, 110, 111, 110, 100, 101, 115, 99, 114, 105, 112, 116, 32, 98, 117, 115, 104, 101, 115, 32, 111, 102, 10, 54, 52, 9, 118, 97, 114, 105, 111, 117, 115, 32, 115, 111, 114, 116, 115, 46, 32, 32, 84, 104, 105, 115, 32, 116, 105, 109, 101, 32, 111, 102, 32, 121, 101, 97, 114, 32, 118, 105, 115, 105, 98, 105, 108, 105, 116, 121, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 114, 101, 115, 116, 114, 105, 99, 116, 101, 100, 32, 98, 121, 10, 54, 52, 9, 97, 108, 108, 32, 116, 104, 101, 32, 108, 101, 97, 118, 101, 115, 44, 32, 98, 117, 116, 32, 116, 114, 97, 118, 101, 108, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 101, 97, 115, 121, 32, 105, 102, 32, 121, 111, 117, 32, 100, 101, 116, 111, 117, 114, 32, 97, 114, 111, 117, 110, 100, 32, 116, 104, 101, 10, 54, 52, 9, 115, 112, 114, 117, 99, 101, 32, 97, 110, 100, 32, 98, 101, 114, 114, 121, 32, 98, 117, 115, 104, 101, 115, 46, 10, 54, 53, 9, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 33, 33, 32, 32, 87, 111, 117, 108, 100, 32, 121, 111, 117, 32, 108, 105, 107, 101, 32, 105, 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 115, 63, 10, 54, 54, 9, 68, 105, 103, 103, 105, 110, 103, 32, 119, 105, 116, 104, 111, 117, 116, 32, 97, 32, 115, 104, 111, 118, 101, 108, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 105, 109, 112, 114, 97, 99, 116, 105, 99, 97, 108, 46, 32, 32, 69, 118, 101, 110, 32, 119, 105, 116, 104, 32, 97, 32, 115, 104, 111, 118, 101, 108, 10, 54, 54, 9, 112, 114, 111, 103, 114, 101, 115, 115, 32, 105, 115, 32, 117, 110, 108, 105, 107, 101, 108, 121, 46, 10, 54, 55, 9, 66, 108, 97, 115, 116, 105, 110, 103, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 100, 121, 110, 97, 109, 105, 116, 101, 46, 10, 54, 56, 9, 73, 39, 109, 32, 97, 115, 32, 99, 111, 110, 102, 117, 115, 101, 100, 32, 97, 115, 32, 121, 111, 117, 32, 97, 114, 101, 46, 10, 54, 57, 9, 77, 105, 115, 116, 32, 105, 115, 32, 97, 32, 119, 104, 105, 116, 101, 32, 118, 97, 112, 111, 114, 44, 32, 117, 115, 117, 97, 108, 108, 121, 32, 119, 97, 116, 101, 114, 44, 32, 115, 101, 101, 110, 32, 102, 114, 111, 109, 32, 116, 105, 109, 101, 32, 116, 111, 32, 116, 105, 109, 101, 32, 105, 110, 10, 54, 57, 9, 99, 97, 118, 101, 114, 110, 115, 46, 32, 32, 73, 116, 32, 99, 97, 110, 32, 98, 101, 32, 102, 111, 117, 110, 100, 32, 97, 110, 121, 119, 104, 101, 114, 101, 32, 98, 117, 116, 32, 105, 115, 32, 102, 114, 101, 113, 117, 101, 110, 116, 108, 121, 32, 97, 32, 115, 105, 103, 110, 32, 111, 102, 32, 97, 32, 100, 101, 101, 112, 10, 54, 57, 9, 112, 105, 116, 32, 108, 101, 97, 100, 105, 110, 103, 32, 100, 111, 119, 110, 32, 116, 111, 32, 119, 97, 116, 101, 114, 46, 10, 55, 48, 9, 89, 111, 117, 114, 32, 102, 101, 101, 116, 32, 97, 114, 101, 32, 110, 111, 119, 32, 119, 101, 116, 46, 10, 55, 49, 9, 73, 32, 116, 104, 105, 110, 107, 32, 73, 32, 106, 117, 115, 116, 32, 108, 111, 115, 116, 32, 109, 121, 32, 97, 112, 112, 101, 116, 105, 116, 101, 46, 10, 55, 50, 9, 84, 104, 97, 110, 107, 32, 121, 111, 117, 44, 32, 105, 116, 32, 119, 97, 115, 32, 100, 101, 108, 105, 99, 105, 111, 117, 115, 33, 10, 55, 51, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 116, 97, 107, 101, 110, 32, 97, 32, 100, 114, 105, 110, 107, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 116, 114, 101, 97, 109, 46, 32, 32, 84, 104, 101, 32, 119, 97, 116, 101, 114, 32, 116, 97, 115, 116, 101, 115, 32, 115, 116, 114, 111, 110, 103, 108, 121, 32, 111, 102, 10, 55, 51, 9, 109, 105, 110, 101, 114, 97, 108, 115, 44, 32, 98, 117, 116, 32, 105, 115, 32, 110, 111, 116, 32, 117, 110, 112, 108, 101, 97, 115, 97, 110, 116, 46, 32, 32, 73, 116, 32, 105, 115, 32, 101, 120, 116, 114, 101, 109, 101, 108, 121, 32, 99, 111, 108, 100, 46, 10, 55, 52, 9, 84, 104, 101, 32, 98, 111, 116, 116, 108, 101, 32, 111, 102, 32, 119, 97, 116, 101, 114, 32, 105, 115, 32, 110, 111, 119, 32, 101, 109, 112, 116, 121, 46, 10, 55, 53, 9, 82, 117, 98, 98, 105, 110, 103, 32, 116, 104, 101, 32, 101, 108, 101, 99, 116, 114, 105, 99, 32, 108, 97, 109, 112, 32, 105, 115, 32, 110, 111, 116, 32, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 108, 121, 32, 114, 101, 119, 97, 114, 100, 105, 110, 103, 46, 32, 32, 65, 110, 121, 119, 97, 121, 44, 10, 55, 53, 9, 110, 111, 116, 104, 105, 110, 103, 32, 101, 120, 99, 105, 116, 105, 110, 103, 32, 104, 97, 112, 112, 101, 110, 115, 46, 10, 55, 54, 9, 80, 101, 99, 117, 108, 105, 97, 114, 46, 32, 32, 78, 111, 116, 104, 105, 110, 103, 32, 117, 110, 101, 120, 112, 101, 99, 116, 101, 100, 32, 104, 97, 112, 112, 101, 110, 115, 46, 10, 55, 55, 9, 89, 111, 117, 114, 32, 98, 111, 116, 116, 108, 101, 32, 105, 115, 32, 101, 109, 112, 116, 121, 32, 97, 110, 100, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 32, 105, 115, 32, 119, 101, 116, 46, 10, 55, 56, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 112, 111, 117, 114, 32, 116, 104, 97, 116, 46, 10, 55, 57, 9, 87, 97, 116, 99, 104, 32, 105, 116, 33, 10, 56, 48, 9, 87, 104, 105, 99, 104, 32, 119, 97, 121, 63, 10, 56, 49, 9, 79, 104, 32, 100, 101, 97, 114, 44, 32, 121, 111, 117, 32, 115, 101, 101, 109, 32, 116, 111, 32, 104, 97, 118, 101, 32, 103, 111, 116, 116, 101, 110, 32, 121, 111, 117, 114, 115, 101, 108, 102, 32, 107, 105, 108, 108, 101, 100, 46, 32, 32, 73, 32, 109, 105, 103, 104, 116, 32, 98, 101, 32, 97, 98, 108, 101, 32, 116, 111, 10, 56, 49, 9, 104, 101, 108, 112, 32, 121, 111, 117, 32, 111, 117, 116, 44, 32, 98, 117, 116, 32, 73, 39, 118, 101, 32, 110, 101, 118, 101, 114, 32, 114, 101, 97, 108, 108, 121, 32, 100, 111, 110, 101, 32, 116, 104, 105, 115, 32, 98, 101, 102, 111, 114, 101, 46, 32, 32, 68, 111, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 109, 101, 10, 56, 49, 9, 116, 111, 32, 116, 114, 121, 32, 116, 111, 32, 114, 101, 105, 110, 99, 97, 114, 110, 97, 116, 101, 32, 121, 111, 117, 63, 10, 56, 50, 9, 65, 108, 108, 32, 114, 105, 103, 104, 116, 46, 32, 32, 66, 117, 116, 32, 100, 111, 110, 39, 116, 32, 98, 108, 97, 109, 101, 32, 109, 101, 32, 105, 102, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 103, 111, 101, 115, 32, 119, 114, 46, 46, 46, 46, 46, 46, 10, 56, 50, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 45, 32, 80, 79, 79, 70, 33, 33, 32, 45, 45, 45, 10, 56, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 101, 110, 103, 117, 108, 102, 101, 100, 32, 105, 110, 32, 97, 32, 99, 108, 111, 117, 100, 32, 111, 102, 32, 111, 114, 97, 110, 103, 101, 32, 115, 109, 111, 107, 101, 46, 32, 32, 67, 111, 117, 103, 104, 105, 110, 103, 32, 97, 110, 100, 32, 103, 97, 115, 112, 105, 110, 103, 44, 10, 56, 50, 9, 121, 111, 117, 32, 101, 109, 101, 114, 103, 101, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 109, 111, 107, 101, 32, 97, 110, 100, 32, 102, 105, 110, 100, 46, 46, 46, 46, 10, 56, 51, 9, 89, 111, 117, 32, 99, 108, 117, 109, 115, 121, 32, 111, 97, 102, 44, 32, 121, 111, 117, 39, 118, 101, 32, 100, 111, 110, 101, 32, 105, 116, 32, 97, 103, 97, 105, 110, 33, 32, 32, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 104, 111, 119, 32, 108, 111, 110, 103, 32, 73, 32, 99, 97, 110, 10, 56, 51, 9, 107, 101, 101, 112, 32, 116, 104, 105, 115, 32, 117, 112, 46, 32, 32, 68, 111, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 109, 101, 32, 116, 111, 32, 116, 114, 121, 32, 114, 101, 105, 110, 99, 97, 114, 110, 97, 116, 105, 110, 103, 32, 121, 111, 117, 32, 97, 103, 97, 105, 110, 63, 10, 56, 52, 9, 79, 107, 97, 121, 44, 32, 110, 111, 119, 32, 119, 104, 101, 114, 101, 32, 100, 105, 100, 32, 73, 32, 112, 117, 116, 32, 109, 121, 32, 111, 114, 97, 110, 103, 101, 32, 115, 109, 111, 107, 101, 63, 46, 46, 46, 46, 32, 32, 62, 80, 79, 79, 70, 33, 60, 10, 56, 52, 9, 69, 118, 101, 114, 121, 116, 104, 105, 110, 103, 32, 100, 105, 115, 97, 112, 112, 101, 97, 114, 115, 32, 105, 110, 32, 97, 32, 100, 101, 110, 115, 101, 32, 99, 108, 111, 117, 100, 32, 111, 102, 32, 111, 114, 97, 110, 103, 101, 32, 115, 109, 111, 107, 101, 46, 10, 56, 53, 9, 78, 111, 119, 32, 121, 111, 117, 39, 118, 101, 32, 114, 101, 97, 108, 108, 121, 32, 100, 111, 110, 101, 32, 105, 116, 33, 32, 32, 73, 39, 109, 32, 111, 117, 116, 32, 111, 102, 32, 111, 114, 97, 110, 103, 101, 32, 115, 109, 111, 107, 101, 33, 32, 32, 89, 111, 117, 32, 100, 111, 110, 39, 116, 32, 101, 120, 112, 101, 99, 116, 10, 56, 53, 9, 109, 101, 32, 116, 111, 32, 100, 111, 32, 97, 32, 100, 101, 99, 101, 110, 116, 32, 114, 101, 105, 110, 99, 97, 114, 110, 97, 116, 105, 111, 110, 32, 119, 105, 116, 104, 111]); | |
fileData0.push.apply(fileData0, [117, 116, 32, 97, 110, 121, 32, 111, 114, 97, 110, 103, 101, 32, 115, 109, 111, 107, 101, 44, 32, 100, 111, 32, 121, 111, 117, 63, 10, 56, 54, 9, 79, 107, 97, 121, 44, 32, 105, 102, 32, 121, 111, 117, 39, 114, 101, 32, 115, 111, 32, 115, 109, 97, 114, 116, 44, 32, 100, 111, 32, 105, 116, 32, 121, 111, 117, 114, 115, 101, 108, 102, 33, 32, 32, 73, 39, 109, 32, 108, 101, 97, 118, 105, 110, 103, 33, 10, 57, 48, 9, 62, 62, 62, 32, 109, 101, 115, 115, 97, 103, 101, 115, 32, 56, 49, 32, 116, 104, 114, 117, 32, 57, 48, 32, 97, 114, 101, 32, 114, 101, 115, 101, 114, 118, 101, 100, 32, 102, 111, 114, 32, 34, 111, 98, 105, 116, 117, 97, 114, 105, 101, 115, 34, 46, 32, 60, 60, 60, 10, 57, 49, 9, 83, 111, 114, 114, 121, 44, 32, 98, 117, 116, 32, 73, 32, 110, 111, 32, 108, 111, 110, 103, 101, 114, 32, 115, 101, 101, 109, 32, 116, 111, 32, 114, 101, 109, 101, 109, 98, 101, 114, 32, 104, 111, 119, 32, 105, 116, 32, 119, 97, 115, 32, 121, 111, 117, 32, 103, 111, 116, 32, 104, 101, 114, 101, 46, 10, 57, 50, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 99, 97, 114, 114, 121, 32, 97, 110, 121, 116, 104, 105, 110, 103, 32, 109, 111, 114, 101, 46, 32, 32, 89, 111, 117, 39, 108, 108, 32, 104, 97, 118, 101, 32, 116, 111, 32, 100, 114, 111, 112, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 102, 105, 114, 115, 116, 46, 10, 57, 51, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 103, 111, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 108, 111, 99, 107, 101, 100, 32, 115, 116, 101, 101, 108, 32, 103, 114, 97, 116, 101, 33, 10, 57, 52, 9, 73, 32, 98, 101, 108, 105, 101, 118, 101, 32, 119, 104, 97, 116, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 105, 115, 32, 114, 105, 103, 104, 116, 32, 104, 101, 114, 101, 32, 119, 105, 116, 104, 32, 121, 111, 117, 46, 10, 57, 53, 9, 89, 111, 117, 32, 100, 111, 110, 39, 116, 32, 102, 105, 116, 32, 116, 104, 114, 111, 117, 103, 104, 32, 97, 32, 116, 119, 111, 45, 105, 110, 99, 104, 32, 115, 108, 105, 116, 33, 10, 57, 54, 9, 73, 32, 114, 101, 115, 112, 101, 99, 116, 102, 117, 108, 108, 121, 32, 115, 117, 103, 103, 101, 115, 116, 32, 121, 111, 117, 32, 103, 111, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 98, 114, 105, 100, 103, 101, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, 106, 117, 109, 112, 105, 110, 103, 46, 10, 57, 55, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 32, 119, 97, 121, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 102, 105, 115, 115, 117, 114, 101, 46, 10, 57, 56, 9, 89, 111, 117, 39, 114, 101, 32, 110, 111, 116, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 97, 110, 121, 116, 104, 105, 110, 103, 46, 10, 57, 57, 9, 89, 111, 117, 32, 97, 114, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 104, 111, 108, 100, 105, 110, 103, 32, 116, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 58, 10, 49, 48, 48, 9, 73, 116, 39, 115, 32, 110, 111, 116, 32, 104, 117, 110, 103, 114, 121, 32, 40, 105, 116, 39, 115, 32, 109, 101, 114, 101, 108, 121, 32, 112, 105, 110, 105, 110, 39, 32, 102, 111, 114, 32, 116, 104, 101, 32, 102, 106, 111, 114, 100, 115, 41, 46, 32, 32, 66, 101, 115, 105, 100, 101, 115, 44, 32, 121, 111, 117, 10, 49, 48, 48, 9, 104, 97, 118, 101, 32, 110, 111, 32, 98, 105, 114, 100, 32, 115, 101, 101, 100, 46, 10, 49, 48, 49, 9, 84, 104, 101, 32, 115, 110, 97, 107, 101, 32, 104, 97, 115, 32, 110, 111, 119, 32, 100, 101, 118, 111, 117, 114, 101, 100, 32, 121, 111, 117, 114, 32, 98, 105, 114, 100, 46, 10, 49, 48, 50, 9, 84, 104, 101, 114, 101, 39, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 104, 101, 114, 101, 32, 105, 116, 32, 119, 97, 110, 116, 115, 32, 116, 111, 32, 101, 97, 116, 32, 40, 101, 120, 99, 101, 112, 116, 32, 112, 101, 114, 104, 97, 112, 115, 32, 121, 111, 117, 41, 46, 10, 49, 48, 51, 9, 89, 111, 117, 32, 102, 111, 111, 108, 44, 32, 100, 119, 97, 114, 118, 101, 115, 32, 101, 97, 116, 32, 111, 110, 108, 121, 32, 99, 111, 97, 108, 33, 32, 32, 78, 111, 119, 32, 121, 111, 117, 39, 118, 101, 32, 109, 97, 100, 101, 32, 104, 105, 109, 32, 42, 82, 69, 65, 76, 76, 89, 42, 32, 109, 97, 100, 33, 33, 10, 49, 48, 52, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 105, 110, 32, 119, 104, 105, 99, 104, 32, 116, 111, 32, 99, 97, 114, 114, 121, 32, 105, 116, 46, 10, 49, 48, 53, 9, 89, 111, 117, 114, 32, 98, 111, 116, 116, 108, 101, 32, 105, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 102, 117, 108, 108, 46, 10, 49, 48, 54, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 104, 101, 114, 101, 32, 119, 105, 116, 104, 32, 119, 104, 105, 99, 104, 32, 116, 111, 32, 102, 105, 108, 108, 32, 116, 104, 101, 32, 98, 111, 116, 116, 108, 101, 46, 10, 49, 48, 55, 9, 89, 111, 117, 114, 32, 98, 111, 116, 116, 108, 101, 32, 105, 115, 32, 110, 111, 119, 32, 102, 117, 108, 108, 32, 111, 102, 32, 119, 97, 116, 101, 114, 46, 10, 49, 48, 56, 9, 89, 111, 117, 114, 32, 98, 111, 116, 116, 108, 101, 32, 105, 115, 32, 110, 111, 119, 32, 102, 117, 108, 108, 32, 111, 102, 32, 111, 105, 108, 46, 10, 49, 48, 57, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 102, 105, 108, 108, 32, 116, 104, 97, 116, 46, 10, 49, 49, 48, 9, 68, 111, 110, 39, 116, 32, 98, 101, 32, 114, 105, 100, 105, 99, 117, 108, 111, 117, 115, 33, 10, 49, 49, 49, 9, 84, 104, 101, 32, 100, 111, 111, 114, 32, 105, 115, 32, 101, 120, 116, 114, 101, 109, 101, 108, 121, 32, 114, 117, 115, 116, 121, 32, 97, 110, 100, 32, 114, 101, 102, 117, 115, 101, 115, 32, 116, 111, 32, 111, 112, 101, 110, 46, 10, 49, 49, 50, 9, 84, 104, 101, 32, 112, 108, 97, 110, 116, 32, 105, 110, 100, 105, 103, 110, 97, 110, 116, 108, 121, 32, 115, 104, 97, 107, 101, 115, 32, 116, 104, 101, 32, 111, 105, 108, 32, 111, 102, 102, 32, 105, 116, 115, 32, 108, 101, 97, 118, 101, 115, 32, 97, 110, 100, 32, 97, 115, 107, 115, 44, 32, 34, 87, 97, 116, 101, 114, 63, 34, 10, 49, 49, 51, 9, 84, 104, 101, 32, 104, 105, 110, 103, 101, 115, 32, 97, 114, 101, 32, 113, 117, 105, 116, 101, 32, 116, 104, 111, 114, 111, 117, 103, 104, 108, 121, 32, 114, 117, 115, 116, 101, 100, 32, 110, 111, 119, 32, 97, 110, 100, 32, 119, 111, 110, 39, 116, 32, 98, 117, 100, 103, 101, 46, 10, 49, 49, 52, 9, 84, 104, 101, 32, 111, 105, 108, 32, 104, 97, 115, 32, 102, 114, 101, 101, 100, 32, 117, 112, 32, 116, 104, 101, 32, 104, 105, 110, 103, 101, 115, 32, 115, 111, 32, 116, 104, 97, 116, 32, 116, 104, 101, 32, 100, 111, 111, 114, 32, 119, 105, 108, 108, 32, 110, 111, 119, 32, 109, 111, 118, 101, 44, 10, 49, 49, 52, 9, 97, 108, 116, 104, 111, 117, 103, 104, 32, 105, 116, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 115, 111, 109, 101, 32, 101, 102, 102, 111, 114, 116, 46, 10, 49, 49, 53, 9, 84, 104, 101, 32, 112, 108, 97, 110, 116, 32, 104, 97, 115, 32, 101, 120, 99, 101, 112, 116, 105, 111, 110, 97, 108, 108, 121, 32, 100, 101, 101, 112, 32, 114, 111, 111, 116, 115, 32, 97, 110, 100, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 112, 117, 108, 108, 101, 100, 32, 102, 114, 101, 101, 46, 10, 49, 49, 54, 9, 84, 104, 101, 32, 100, 119, 97, 114, 118, 101, 115, 39, 32, 107, 110, 105, 118, 101, 115, 32, 118, 97, 110, 105, 115, 104, 32, 97, 115, 32, 116, 104, 101, 121, 32, 115, 116, 114, 105, 107, 101, 32, 116, 104, 101, 32, 119, 97, 108, 108, 115, 32, 111, 102, 32, 116, 104, 101, 32, 99, 97, 118, 101, 46, 10, 49, 49, 55, 9, 83, 111, 109, 101, 116, 104, 105, 110, 103, 32, 121, 111, 117, 39, 114, 101, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 119, 111, 110, 39, 116, 32, 102, 105, 116, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 116, 117, 110, 110, 101, 108, 32, 119, 105, 116, 104, 32, 121, 111, 117, 46, 10, 49, 49, 55, 9, 89, 111, 117, 39, 100, 32, 98, 101, 115, 116, 32, 116, 97, 107, 101, 32, 105, 110, 118, 101, 110, 116, 111, 114, 121, 32, 97, 110, 100, 32, 100, 114, 111, 112, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 46, 10, 49, 49, 56, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 102, 105, 116, 32, 116, 104, 105, 115, 32, 102, 105, 118, 101, 45, 102, 111, 111, 116, 32, 99, 108, 97, 109, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 97, 116, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 33, 10, 49, 49, 57, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 102, 105, 116, 32, 116, 104, 105, 115, 32, 102, 105, 118, 101, 45, 102, 111, 111, 116, 32, 111, 121, 115, 116, 101, 114, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 97, 116, 32, 108, 105, 116, 116, 108, 101, 32, 112, 97, 115, 115, 97, 103, 101, 33, 10, 49, 50, 48, 9, 73, 32, 97, 100, 118, 105, 115, 101, 32, 121, 111, 117, 32, 116, 111, 32, 112, 117, 116, 32, 100, 111, 119, 110, 32, 116, 104, 101, 32, 99, 108, 97, 109, 32, 98, 101, 102, 111, 114, 101, 32, 111, 112, 101, 110, 105, 110, 103, 32, 105, 116, 46, 32, 32, 62, 83, 84, 82, 65, 73, 78, 33, 60, 10, 49, 50, 49, 9, 73, 32, 97, 100, 118, 105, 115, 101, 32, 121, 111, 117, 32, 116, 111, 32, 112, 117, 116, 32, 100, 111, 119, 110, 32, 116, 104, 101, 32, 111, 121, 115, 116, 101, 114, 32, 98, 101, 102, 111, 114, 101, 32, 111, 112, 101, 110, 105, 110, 103, 32, 105, 116, 46, 32, 32, 62, 87, 82, 69, 78, 67, 72, 33, 60, 10, 49, 50, 50, 9, 89, 111, 117, 32, 100, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 97, 110, 121, 116, 104, 105, 110, 103, 32, 115, 116, 114, 111, 110, 103, 32, 101, 110, 111, 117, 103, 104, 32, 116, 111, 32, 111, 112, 101, 110, 32, 116, 104, 101, 32, 99, 108, 97, 109, 46, 10, 49, 50, 51, 9, 89, 111, 117, 32, 100, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 97, 110, 121, 116, 104, 105, 110, 103, 32, 115, 116, 114, 111, 110, 103, 32, 101, 110, 111, 117, 103, 104, 32, 116, 111, 32, 111, 112, 101, 110, 32, 116, 104, 101, 32, 111, 121, 115, 116, 101, 114, 46, 10, 49, 50, 52, 9, 65, 32, 103, 108, 105, 115, 116, 101, 110, 105, 110, 103, 32, 112, 101, 97, 114, 108, 32, 102, 97, 108, 108, 115, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 99, 108, 97, 109, 32, 97, 110, 100, 32, 114, 111, 108, 108, 115, 32, 97, 119, 97, 121, 46, 32, 32, 71, 111, 111, 100, 110, 101, 115, 115, 44, 10, 49, 50, 52, 9, 116, 104, 105, 115, 32, 109, 117, 115, 116, 32, 114, 101, 97, 108, 108, 121, 32, 98, 101, 32, 97, 110, 32, 111, 121, 115, 116, 101, 114, 46, 32, 32, 40, 73, 32, 110, 101, 118, 101, 114, 32, 119, 97, 115, 32, 118, 101, 114, 121, 32, 103, 111, 111, 100, 32, 97, 116, 32, 105, 100, 101, 110, 116, 105, 102, 121, 105, 110, 103, 10, 49, 50, 52, 9, 98, 105, 118, 97, 108, 118, 101, 115, 46, 41, 32, 32, 87, 104, 97, 116, 101, 118, 101, 114, 32, 105, 116, 32, 105, 115, 44, 32, 105, 116, 32, 104, 97, 115, 32, 110, 111, 119, 32, 115, 110, 97, 112, 112, 101, 100, 32, 115, 104, 117, 116, 32, 97, 103, 97, 105, 110, 46, 10, 49, 50, 53, 9, 84, 104, 101, 32, 111, 121, 115, 116, 101, 114, 32, 99, 114, 101, 97, 107, 115, 32, 111, 112, 101, 110, 44, 32, 114, 101, 118, 101, 97, 108, 105, 110, 103, 32, 110, 111, 116, 104, 105, 110, 103, 32, 98, 117, 116, 32, 111, 121, 115, 116, 101, 114, 32, 105, 110, 115, 105, 100, 101, 46, 32, 32, 73, 116, 10, 49, 50, 53, 9, 112, 114, 111, 109, 112, 116, 108, 121, 32, 115, 110, 97, 112, 115, 32, 115, 104, 117, 116, 32, 97, 103, 97, 105, 110, 46, 10, 49, 50, 54, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 99, 114, 97, 119, 108, 101, 100, 32, 97, 114, 111, 117, 110, 100, 32, 105, 110, 32, 115, 111, 109, 101, 32, 108, 105, 116, 116, 108, 101, 32, 104, 111, 108, 101, 115, 32, 97, 110, 100, 32, 102, 111, 117, 110, 100, 32, 121, 111, 117, 114, 32, 119, 97, 121, 10, 49, 50, 54, 9, 98, 108, 111, 99, 107, 101, 100, 32, 98, 121, 32, 97, 32, 114, 101, 99, 101, 110, 116, 32, 99, 97, 118, 101, 45, 105, 110, 46, 32, 32, 89, 111, 117, 32, 97, 114, 101, 32, 110, 111, 119, 32, 98, 97, 99, 107, 32, 105, 110, 32, 116, 104, 101, 32, 109, 97, 105, 110, 32, 112, 97, 115, 115, 97, 103, 101, 46, 10, 49, 50, 55, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 102, 97, 105, 110, 116, 32, 114, 117, 115, 116, 108, 105, 110, 103, 32, 110, 111, 105, 115, 101, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 100, 97, 114, 107, 110, 101, 115, 115, 32, 98, 101, 104, 105, 110, 100, 32, 121, 111, 117, 46, 10, 49, 50, 56, 9, 79, 117, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 104, 97, 100, 111, 119, 115, 32, 98, 101, 104, 105, 110, 100, 32, 121, 111, 117, 32, 112, 111, 117, 110, 99, 101, 115, 32, 97, 32, 98, 101, 97, 114, 100, 101, 100, 32, 112, 105, 114, 97, 116, 101, 33, 32, 32, 34, 72, 97, 114, 44, 32, 104, 97, 114, 44, 34, 10, 49, 50, 56, 9, 104, 101, 32, 99, 104, 111, 114, 116, 108, 101, 115, 44, 32, 34, 73, 39, 108, 108, 32, 106, 117, 115, 116, 32, 116, 97, 107, 101, 32, 97, 108, 108, 32, 116, 104, 105, 115, 32, 98, 111, 111, 116, 121, 32, 97, 110, 100, 32, 104, 105, 100, 101, 32, 105, 116, 32, 97, 119, 97, 121, 32, 119, 105, 116, 104, 32, 109, 101, 10, 49, 50, 56, 9, 99, 104, 101, 115, 116, 32, 100, 101, 101, 112, 32, 105, 110, 32, 116, 104, 101, 32, 109, 97, 122, 101, 33, 34, 32, 32, 72, 101, 32, 115, 110, 97, 116, 99, 104, 101, 115, 32, 121, 111, 117, 114, 32, 116, 114, 101, 97, 115, 117, 114, 101, 32, 97, 110, 100, 32, 118, 97, 110, 105, 115, 104, 101, 115, 32, 105, 110, 116, 111, 10, 49, 50, 56, 9, 116, 104, 101, 32, 103, 108, 111, 111, 109, 46, 10, 49, 50, 57, 9, 65, 32, 115, 101, 112, 117, 108, 99, 104, 114, 97, 108, 32, 118, 111, 105, 99, 101, 32, 114, 101, 118, 101, 114, 98, 101, 114, 97, 116, 105, 110, 103, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 99, 97, 118, 101, 44, 32, 115, 97, 121, 115, 44, 32, 34, 67, 97, 118, 101, 32, 99, 108, 111, 115, 105, 110, 103, 10, 49, 50, 57, 9, 115, 111, 111, 110, 46, 32, 32, 65, 108, 108, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 114, 115, 32, 101, 120, 105, 116, 32, 105, 109, 109, 101, 100, 105, 97, 116, 101, 108, 121, 32, 116, 104, 114, 111, 117, 103, 104, 32, 109, 97, 105, 110, 32, 111, 102, 102, 105, 99, 101, 46, 34, 10, 49, 51, 48, 9, 65, 32, 109, 121, 115, 116, 101, 114, 105, 111, 117, 115, 32, 114, 101, 99, 111, 114, 100, 101, 100, 32, 118, 111, 105, 99, 101, 32, 103, 114, 111, 97, 110, 115, 32, 105, 110, 116, 111, 32, 108, 105, 102, 101, 32, 97, 110, 100, 32, 97, 110, 110, 111, 117, 110, 99, 101, 115, 58, 10, 49, 51, 48, 9, 32, 32, 32, 34, 84, 104, 105, 115, 32, 101, 120, 105, 116, 32, 105, 115, 32, 99, 108, 111, 115, 101, 100, 46, 32, 32, 80, 108, 101, 97, 115, 101, 32, 108, 101, 97, 118, 101, 32, 118, 105, 97, 32, 109, 97, 105, 110, 32, 111, 102, 102, 105, 99, 101, 46, 34, 10, 49, 51, 49, 9, 73, 116, 32, 108, 111, 111, 107, 115, 32, 97, 115, 32, 116, 104, 111, 117, 103, 104, 32, 121, 111, 117, 39, 114, 101, 32, 100, 101, 97, 100, 46, 32, 32, 87, 101, 108, 108, 44, 32, 115, 101, 101, 105, 110, 103, 32, 97, 115, 32, 104, 111, 119, 32, 105, 116, 39, 115, 32, 115, 111, 32, 99, 108, 111, 115, 101, 32, 116, 111, 10, 49, 51, 49, 9, 99, 108, 111, 115, 105, 110, 103, 32, 116, 105, 109, 101, 32, 97, 110, 121, 119, 97, 121, 44, 32, 73, 32, 116, 104, 105, 110, 107, 32, 119, 101, 39, 108, 108, 32, 106, 117, 115, 116, 32, 99, 97, 108, 108, 32, 105, 116, 32, 97, 32, 100, 97, 121, 46, 10, 49, 51, 50, 9, 84, 104, 101, 32, 115, 101, 112, 117, 108, 99, 104, 114, 97, 108, 32, 118, 111, 105, 99, 101, 32, 105, 110, 116, 111, 110, 101, 115, 44, 32, 34, 84, 104, 101, 32, 99, 97, 118, 101, 32, 105, 115, 32, 110, 111, 119, 32, 99, 108, 111, 115, 101, 100, 46, 34, 32, 32, 65, 115, 32, 116, 104, 101, 32, 101, 99, 104, 111, 101, 115, 10, 49, 51, 50, 9, 102, 97, 100, 101, 44, 32, 116, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 98, 108, 105, 110, 100, 105, 110, 103, 32, 102, 108, 97, 115, 104, 32, 111, 102, 32, 108, 105, 103, 104, 116, 32, 40, 97, 110, 100, 32, 97, 32, 115, 109, 97, 108, 108, 32, 112, 117, 102, 102, 32, 111, 102, 32, 111, 114, 97, 110, 103, 101, 10, 49, 51, 50, 9, 115, 109, 111, 107, 101, 41, 46, 32, 46, 32, 46, 32, 46, 32, 32, 32, 32, 65, 115, 32, 121, 111, 117, 114, 32, 101, 121, 101, 115, 32, 114, 101, 102, 111, 99, 117, 115, 44, 32, 121, 111, 117, 32, 108, 111, 111, 107, 32, 97, 114, 111, 117, 110, 100, 32, 97, 110, 100, 32, 102, 105, 110, 100, 46, 46, 46, 10, 49, 51, 51, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 111, 117, 100, 32, 101, 120, 112, 108, 111, 115, 105, 111, 110, 44, 32, 97, 110, 100, 32, 97, 32, 116, 119, 101, 110, 116, 121, 45, 102, 111, 111, 116, 32, 104, 111, 108, 101, 32, 97, 112, 112, 101, 97, 114, 115, 32, 105, 110, 32, 116, 104, 101, 32, 102, 97, 114, 10, 49, 51, 51, 9, 119, 97, 108, 108, 44, 32, 98, 117, 114, 121, 105, 110, 103, 32, 116, 104, 101, 32, 100, 119, 97, 114, 118, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 114, 117, 98, 98, 108, 101, 46, 32, 32, 89, 111, 117, 32, 109, 97, 114, 99, 104, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 104, 111, 108, 101, 10, 49, 51, 51, 9, 97, 110, 100, 32, 102, 105, 110, 100, 32, 121, 111, 117, 114, 115, 101, 108, 102, 32, 105, 110, 32, 116, 104, 101, 32, 109, 97, 105, 110, 32, 111, 102, 102, 105, 99, 101, 44, 32, 119, 104, 101, 114, 101, 32, 97, 32, 99, 104, 101, 101, 114, 105, 110, 103, 32, 98, 97, 110, 100, 32, 111, 102, 10, 49, 51, 51, 9, 102, 114, 105, 101, 110, 100, 108, 121, 32, 101, 108, 118, 101, 115, 32, 99, 97, 114, 114, 121, 32, 116, 104, 101, 32, 99, 111, 110, 113, 117, 101, 114, 105, 110, 103, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 114, 32, 111, 102, 102, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 115, 117, 110, 115, 101, 116, 46, 10, 49, 51, 52, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 111, 117, 100, 32, 101, 120, 112, 108, 111, 115, 105, 111, 110, 44, 32, 97, 110, 100, 32, 97, 32, 116, 119, 101, 110, 116, 121, 45, 102, 111, 111, 116, 32, 104, 111, 108, 101, 32, 97, 112, 112, 101, 97, 114, 115, 32, 105, 110, 32, 116, 104, 101, 32, 102, 97, 114, 10, 49, 51, 52, 9, 119, 97, 108, 108, 44, 32, 98, 117, 114, 121, 105, 110, 103, 32, 116, 104, 101, 32, 115, 110, 97, 107, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 114, 117, 98, 98, 108, 101, 46, 32, 32, 65, 32, 114, 105, 118, 101, 114, 32, 111, 102, 32, 109, 111, 108, 116, 101, 110, 32, 108, 97, 118, 97, 32, 112, 111, 117, 114, 115, 10, 49, 51, 52, 9, 105, 110, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 104, 111, 108, 101, 44, 32, 100, 101, 115, 116, 114, 111, 121, 105, 110, 103, 32, 101, 118, 101, 114, 121, 116, 104, 105, 110, 103, 32, 105, 110, 32, 105, 116, 115, 32, 112, 97, 116, 104, 44, 32, 105, 110, 99, 108, 117, 100, 105, 110, 103, 32, 121, 111, 117, 33, 10, 49, 51, 53, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 111, 117, 100, 32, 101, 120, 112, 108, 111, 115, 105, 111, 110, 44, 32, 97, 110, 100, 32, 121, 111, 117, 32, 97, 114, 101, 32, 115, 117, 100, 100, 101, 110, 108, 121, 32, 115, 112, 108, 97, 115, 104, 101, 100, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 10, 49, 51, 53, 9, 119, 97, 108, 108, 115, 32, 111, 102, 32, 116, 104, 101, 32, 114, 111, 111, 109, 46, 10, 49, 51, 54, 9, 84, 104, 101, 32, 114, 101, 115, 117, 108, 116, 105, 110, 103, 32, 114, 117, 99, 107, 117, 115, 32, 104, 97, 115, 32, 97, 119, 97, 107, 101, 110, 101, 100, 32, 116, 104, 101, 32, 100, 119, 97, 114, 118, 101, 115, 46, 32, 32, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 110, 111, 119, 32, 115, 101, 118, 101, 114, 97, 108, 10, 49, 51, 54, 9, 116, 104, 114, 101, 97, 116, 101, 110, 105, 110, 103, 32, 108, 105, 116, 116, 108, 101, 32, 100, 119, 97, 114, 118, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 32, 119, 105, 116, 104, 32, 121, 111, 117, 33, 32, 32, 77, 111, 115, 116, 32, 111, 102, 32, 116, 104, 101, 109, 32, 116, 104, 114, 111, 119, 10, 49, 51, 54, 9, 107, 110, 105, 118, 101, 115, 32, 97, 116, 32, 121, 111, 117, 33, 32, 32, 65, 108, 108, 32, 111, 102, 32, 116, 104, 101, 109, 32, 103, 101, 116, 32, 121, 111, 117, 33, 10, 49, 51, 55, 9, 79, 104, 44, 32, 108, 101, 97, 118, 101, 32, 116, 104, 101, 32, 112, 111, 111, 114, 32, 117, 110, 104, 97, 112, 112, 121, 32, 98, 105, 114, 100, 32, 97, 108, 111, 110, 101, 46, 10, 49, 51, 56, 9, 73, 32, 100, 97, 114, 101, 115, 97, 121, 32, 119, 104, 97, 116, 101, 118, 101, 114, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 105, 115, 32, 97, 114, 111, 117, 110, 100, 32, 104, 101, 114, 101, 32, 115, 111, 109, 101, 119, 104, 101, 114, 101, 46, 10, 49, 51, 57, 9, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 116, 104, 101, 32, 119, 111, 114, 100, 32, 34, 115, 116, 111, 112, 34, 46, 32, 32, 85, 115, 101, 32, 34, 113, 117, 105, 116, 34, 32, 105, 102, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 116, 111, 32, 103, 105, 118, 101, 32, 117, 112, 46, 10, 49, 52, 48, 9, 89, 111, 117, 32, 99, 97, 110, 39, 116, 32, 103, 101, 116, 32, 116, 104, 101, 114, 101, 32, 102, 114, 111, 109, 32, 104, 101, 114, 101, 46, 10, 49, 52, 49, 9, 89, 111, 117, 32, 97, 114, 101, 32, 98, 101, 105, 110, 103, 32, 102, 111, 108, 108, 111, 119, 101, 100, 32, 98, 121, 32, 97, 32, 118, 101, 114, 121, 32, 108, 97, 114, 103, 101, 44, 32, 116, 97, 109, 101, 32, 98, 101, 97, 114, 46, 10, 49, 52, 50, 9, 70, 111, 114, 32, 97, 32, 115, 117, 109, 109, 97, 114, 121, 32, 111, 102, 32, 116, 104, 101, 32, 109, 111, 115, 116, 32, 114, 101, 99, 101, 110, 116, 32, 99, 104, 97, 110, 103, 101, 115, 32, 116, 111, 32, 116, 104, 101, 32, 103, 97, 109, 101, 44, 32, 115, 97, 121, 32, 34, 110, 101, 119, 115, 34, 46, 10, 49, 52, 50, 9, 73, 102, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 116, 111, 32, 101, 110, 100, 32, 121, 111, 117, 114, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 32, 101, 97, 114, 108, 121, 44, 32, 115, 97, 121, 32, 34, 113, 117, 105, 116, 34, 46, 32, 32, 84, 111, 32, 115, 117, 115, 112, 101, 110, 100, 32, 121, 111, 117, 114, 10, 49, 52, 50, 9, 97, 100, 118, 101, 110, 116, 117, 114, 101, 32, 115, 117, 99, 104, 32, 116, 104, 97, 116, 32, 121, 111, 117, 32, 99, 97, 110, 32, 99, 111, 110, 116, 105, 110, 117, 101, 32, 108, 97, 116, 101, 114, 44, 32, 115, 97, 121, 32, 34, 115, 117, 115, 112, 101, 110, 100, 34, 32, 40, 111, 114, 32, 34, 112, 97, 117, 115, 101, 34, 10, 49, 52, 50, 9, 111, 114, 32, 34, 115, 97, 118, 101, 34, 41, 46, 32, 32, 84, 111, 32, 115, 101, 101, 32, 104, 111, 119, 32, 119, 101, 108, 108, 32, 121, 111, 117, 39, 114, 101, 32, 100, 111, 105, 110, 103, 44, 32, 115, 97, 121, 32, 34, 115, 99, 111, 114, 101, 34, 46, 32, 32, 84, 111, 32, 103, 101, 116, 32, 102, 117, 108, 108, 10, 49, 52, 50, 9, 99, 114, 101, 100, 105, 116, 32, 102, 111, 114, 32, 97, 32, 116, 114, 101, 97, 115, 117, 114, 101, 44, 32, 121, 111, 117, 32, 109, 117, 115, 116, 32, 104, 97, 118, 101, 32, 108, 101, 102, 116, 32, 105, 116, 32, 115, 97, 102, 101, 108, 121, 32, 105, 110, 32, 116, 104, 101, 32, 98, 117, 105, 108, 100, 105, 110, 103, 44, 10, 49, 52, 50, 9, 116, 104, 111, 117, 103, 104, 32, 121, 111, 117, 32, 103, 101, 116, 32, 112, 97, 114, 116, 105, 97, 108, 32, 99, 114, 101, 100, 105, 116, 32, 106, 117, 115, 116, 32, 102, 111, 114, 32, 108, 111, 99, 97, 116, 105, 110, 103, 32, 105, 116, 46, 32, 32, 89, 111, 117, 32, 108, 111, 115, 101, 32, 112, 111, 105, 110, 116, 115, 10, 49, 52, 50, 9, 102, 111, 114, 32, 103, 101, 116, 116, 105, 110, 103, 32, 107, 105, 108, 108, 101, 100, 44, 32, 111, 114, 32, 102, 111, 114, 32, 113, 117, 105, 116, 116, 105, 110, 103, 44, 32, 116, 104, 111, 117, 103, 104, 32, 116, 104, 101, 32, 102, 111, 114, 109, 101, 114, 32, 99, 111, 115, 116, 115, 32, 121, 111, 117, 32, 109, 111, 114, 101, 46, 10, 49, 52, 50, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 97, 108, 115, 111, 32, 112, 111, 105, 110, 116, 115, 32, 98, 97, 115, 101, 100, 32, 111, 110, 32, 104, 111, 119, 32, 109, 117, 99, 104, 32, 40, 105, 102, 32, 97, 110, 121, 41, 32, 111, 102, 32, 116, 104, 101, 32, 99, 97, 118, 101, 32, 121, 111, 117, 39, 118, 101, 10, 49, 52, 50, 9, 109, 97, 110, 97, 103, 101, 100, 32, 116, 111, 32, 101, 120, 112, 108, 111, 114, 101, 59, 32, 105, 110, 32, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 44, 32, 116, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 108, 97, 114, 103, 101, 32, 98, 111, 110, 117, 115, 32, 106, 117, 115, 116, 32, 102, 111, 114, 10, 49, 52, 50, 9, 103, 101, 116, 116, 105, 110, 103, 32, 105, 110, 32, 40, 116, 111, 32, 100, 105, 115, 116, 105, 110, 103, 117, 105, 115, 104, 32, 116, 104, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 114, 101, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, 112, 97, 99, 107, 41, 44, 10, 49, 52, 50, 9, 97, 110, 100, 32, 116, 104, 101, 114, 101, 32, 97, 114, 101, 32, 111, 116, 104, 101, 114, 32, 119, 97, 121, 115, 32, 116, 111, 32, 100, 101, 116, 101, 114, 109, 105, 110, 101, 32, 119, 104, 101, 116, 104, 101, 114, 32, 121, 111, 117, 39, 118, 101, 32, 98, 101, 101, 110, 32, 116, 104, 114, 111, 117, 103, 104, 32, 115, 111, 109, 101, 10, 49, 52, 50, 9, 111, 102, 32, 116, 104, 101, 32, 109, 111, 114, 101, 32, 104, 97, 114, 114, 111, 119, 105, 110, 103, 32, 115, 101, 99, 116, 105, 111, 110, 115, 46, 32, 32, 73, 102, 32, 121, 111, 117, 32, 116, 104, 105, 110, 107, 32, 121, 111, 117, 39, 118, 101, 32, 102, 111, 117, 110, 100, 32, 97, 108, 108, 32, 116, 104, 101, 10, 49, 52, 50, 9, 116, 114, 101, 97, 115, 117, 114, 101, 115, 44, 32, 106, 117, 115, 116, 32, 107, 101, 101, 112, 32, 101, 120, 112, 108, 111, 114, 105, 110, 103, 32, 102, 111, 114, 32, 97, 32, 119, 104, 105, 108, 101, 46, 32, 32, 73, 102, 32, 110, 111, 116, 104, 105, 110, 103, 32, 105, 110, 116, 101, 114, 101, 115, 116, 105, 110, 103, 10, 49, 52, 50, 9, 104, 97, 112, 112, 101, 110, 115, 44, 32, 121, 111, 117, 32, 104, 97, 118, 101, 110, 39, 116, 32, 102, 111, 117, 110, 100, 32, 116, 104, 101, 109, 32, 97, 108, 108, 32, 121, 101, 116, 46, 32, 32, 73, 102, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 105, 110, 116, 101, 114, 101, 115, 116, 105, 110, 103, 10, 49, 52, 50, 9, 42, 68, 79, 69, 83, 42, 32, 104, 97, 112, 112, 101, 110, 32, 40, 105, 110, 99, 105, 100, 101, 110, 116, 97, 108, 108, 121, 44, 32, 116, 104, 101, 114, 101, 32, 42, 65, 82, 69, 42, 32, 119, 97, 121, 115, 32, 116, 111, 32, 104, 97, 115, 116, 101, 110, 32, 116, 104, 105, 110, 103, 115, 32, 97, 108, 111, 110, 103, 41, 44, 10, 49, 52, 50, 9, 105, 116, 32, 109, 101, 97, 110, 115, 32, 121, 111, 117, 39, 114, 101, 32, 103, 101, 116, 116, 105, 110, 103, 32, 97, 32, 98, 111, 110, 117, 115, 32, 97, 110, 100, 32, 104, 97, 118, 101, 32, 97, 110, 32, 111, 112, 112, 111, 114, 116, 117, 110, 105, 116, 121, 32, 116, 111, 32, 103, 97, 114, 110, 101, 114, 32, 109, 97, 110, 121, 10, 49, 52, 50, 9, 109, 111, 114, 101, 32, 112, 111, 105, 110, 116, 115, 32, 105, 110, 32, 116, 104, 101, 32, 77, 97, 115, 116, 101, 114, 39, 115, 32, 115, 101, 99, 116, 105, 111, 110, 46, 32, 32, 73, 32, 109, 97, 121, 32, 111, 99, 99, 97, 115, 105, 111, 110, 97, 108, 108, 121, 32, 111, 102, 102, 101, 114, 32, 104, 105, 110, 116, 115, 10, 49, 52, 50, 9, 105, 102, 32, 121, 111, 117, 32, 115, 101, 101, 109, 32, 116, 111, 32, 98, 101, 32, 104, 97, 118, 105, 110, 103, 32, 116, 114, 111, 117, 98, 108, 101, 46, 32, 32, 73, 102, 32, 73, 32, 100, 111, 44, 32, 73, 39, 108, 108, 32, 119, 97, 114, 110, 32, 121, 111, 117, 32, 105, 110, 32, 97, 100, 118, 97, 110, 99, 101, 10, 49, 52, 50, 9, 104, 111, 119, 32, 109, 117, 99, 104, 32, 105, 116, 32, 119, 105, 108, 108, 32, 97, 102, 102, 101, 99, 116, 32, 121, 111, 117, 114, 32, 115, 99, 111, 114, 101, 32, 116, 111, 32, 97, 99, 99, 101, 112, 116, 32, 116, 104, 101, 32, 104, 105, 110, 116, 115, 46, 32, 32, 70, 105, 110, 97, 108, 108, 121, 44, 32, 116, 111, 10, 49, 52, 50, 9, 115, 97, 118, 101, 32, 116, 105, 109, 101, 44, 32, 121, 111, 117, 32, 109, 97, 121, 32, 115, 112, 101, 99, 105, 102, 121, 32, 34, 98, 114, 105, 101, 102, 34, 44, 32, 119, 104, 105, 99, 104, 32, 116, 101, 108, 108, 115, 32, 109, 101, 32, 110, 101, 118, 101, 114, 32, 116, 111, 32, 114, 101, 112, 101, 97, 116, 32, 116, 104, 101, 10, 49, 52, 50, 9, 102, 117, 108, 108, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 102, 32, 97, 32, 112, 108, 97, 99, 101, 32, 117, 110, 108, 101, 115, 115, 32, 121, 111, 117, 32, 101, 120, 112, 108, 105, 99, 105, 116, 108, 121, 32, 97, 115, 107, 32, 109, 101, 32, 116, 111, 46, 10, 49, 52, 51, 9, 78, 111, 119, 32, 108, 101, 116, 39, 115, 32, 115, 101, 101, 32, 121, 111, 117, 32, 100, 111, 32, 105, 116, 32, 119, 105, 116, 104, 111, 117, 116, 32, 115, 117, 115, 112, 101, 110, 100, 105, 110, 103, 32, 105, 110, 32, 109, 105, 100, 45, 65, 100, 118, 101, 110, 116, 117, 114, 101, 46, 10, 49, 52, 52, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 104, 101, 114, 101, 32, 119, 105, 116, 104, 32, 119, 104, 105, 99, 104, 32, 116, 111, 32, 102, 105, 108, 108, 32, 105, 116, 46, 10, 49, 52, 53, 9, 84, 104, 101, 32, 115, 117, 100, 100, 101, 110, 32, 99, 104, 97, 110, 103, 101, 32, 105, 110, 32, 116, 101, 109, 112, 101, 114, 97, 116, 117, 114, 101, 32, 104, 97, 115, 32, 100, 101, 108, 105, 99, 97, 116, 101, 108, 121, 32, 115, 104, 97, 116, 116, 101, 114, 101, 100, 32, 116, 104, 101, 32, 118, 97, 115, 101, 46, 10, 49, 52, 54, 9, 73, 116, 32, 105, 115, 32, 98, 101, 121, 111, 110, 100, 32, 121, 111, 117, 114, 32, 112, 111, 119, 101, 114, 32, 116, 111, 32, 100, 111, 32, 116, 104, 97, 116, 46, 10, 49, 52, 55, 9, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 104, 111, 119, 46, 10, 49, 52, 56, 9, 73, 116, 32, 105, 115, 32, 116, 111, 111, 32, 102, 97, 114, 32, 117, 112, 32, 102, 111, 114, 32, 121, 111, 117, 32, 116, 111, 32, 114, 101, 97, 99, 104, 46, 10, 49, 52, 57, 9, 89, 111, 117, 32, 107, 105, 108, 108, 101, 100, 32, 97, 32, 108, 105, 116, 116, 108, 101, 32, 100, 119, 97, 114, 102, 46, 32, 32, 84, 104, 101, 32, 98, 111, 100, 121, 32, 118, 97, 110, 105, 115, 104, 101, 115, 32, 105, 110, 32, 97, 32, 99, 108, 111, 117, 100, 32, 111, 102, 32, 103, 114, 101, 97, 115, 121, 10, 49, 52, 57, 9, 98, 108, 97, 99, 107, 32, 115, 109, 111, 107, 101, 46, 10, 49, 53, 48, 9, 84, 104, 101, 32, 115, 104, 101, 108, 108, 32, 105, 115, 32, 118, 101, 114, 121, 32, 115, 116, 114, 111, 110, 103, 32, 97, 110, 100, 32, 105, 115, 32, 105, 109, 112, 101, 114, 118, 105, 111, 117, 115, 32, 116, 111, 32, 97, 116, 116, 97, 99, 107, 46, 10, 49, 53, 49, 9, 87, 104, 97, 116, 39, 115, 32, 116, 104, 101, 32, 109, 97, 116, 116, 101, 114, 44, 32, 99, 97, 110, 39, 116, 32, 121, 111, 117, 32, 114, 101, 97, 100, 63, 32, 32, 78, 111, 119, 32, 121, 111, 117, 39, 100, 32, 98, 101, 115, 116, 32, 115, 116, 97, 114, 116, 32, 111, 118, 101, 114, 46, 10, 49, 53, 50, 9, 84, 104, 101, 32, 97, 120, 101, 32, 98, 111, 117, 110, 99, 101, 115, 32, 104, 97, 114, 109, 108, 101, 115, 115, 108, 121, 32, 111, 102, 102, 32, 116, 104, 101, 32, 100, 114, 97, 103, 111, 110, 39, 115, 32, 116, 104, 105, 99, 107, 32, 115, 99, 97, 108, 101, 115, 46, 10, 49, 53, 51, 9, 84, 104, 101, 32, 100, 114, 97, 103, 111, 110, 32, 108, 111, 111, 107, 115, 32, 114, 97, 116, 104, 101, 114, 32, 110, 97, 115, 116, 121, 46, 32, 32, 89, 111, 117, 39, 100, 32, 98, 101, 115, 116, 32, 110, 111, 116, 32, 116, 114, 121, 32, 116, 111, 32, 103, 101, 116, 32, 98, 121, 46, 10, 49, 53, 52, 9, 84, 104, 101, 32, 108, 105, 116, 116, 108, 101, 32, 98, 105, 114, 100, 32, 97, 116, 116, 97, 99, 107, 115, 32, 116, 104, 101, 32, 103, 114, 101, 101, 110, 32, 100, 114, 97, 103, 111, 110, 44, 32, 97, 110, 100, 32, 105, 110, 32, 97, 110, 32, 97, 115, 116, 111, 117, 110, 100, 105, 110, 103, 32, 102, 108, 117, 114, 114, 121, 10, 49, 53, 52, 9, 103, 101, 116, 115, 32, 98, 117, 114, 110, 116, 32, 116, 111, 32, 97, 32, 99, 105, 110, 100, 101, 114, 46, 32, 32, 84, 104, 101, 32, 97, 115, 104, 101, 115, 32, 98, 108, 111, 119, 32, 97, 119, 97, 121, 46, 10, 49, 53, 53, 9, 79, 110, 32, 119, 104, 97, 116, 63, 10, 49, 53, 54, 9, 79, 107, 97, 121, 44, 32, 102, 114, 111, 109, 32, 110, 111, 119, 32, 111, 110, 32, 73, 39, 108, 108, 32, 111, 110, 108, 121, 32, 100, 101, 115, 99, 114, 105, 98, 101, 32, 97, 32, 112, 108, 97, 99, 101, 32, 105, 110, 32, 102, 117, 108, 108, 32, 116, 104, 101, 32, 102, 105, 114, 115, 116, 32, 116, 105, 109, 101, 10, 49, 53, 54, 9, 121, 111, 117, 32, 99, 111, 109, 101, 32, 116, 111, 32, 105, 116, 46, 32, 32, 84, 111, 32, 103, 101, 116, 32, 116, 104, 101, 32, 102, 117, 108, 108, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 44, 32, 115, 97, 121, 32, 34, 108, 111, 111, 107, 34, 46, 10, 49, 53, 55, 9, 84, 114, 111, 108, 108, 115, 32, 97, 114, 101, 32, 99, 108, 111, 115, 101, 32, 114, 101, 108, 97, 116, 105, 118, 101, 115, 32, 119, 105, 116, 104, 32, 116, 104, 101, 32, 114, 111, 99, 107, 115, 32, 97, 110, 100, 32, 104, 97, 118, 101, 32, 115, 107, 105, 110, 32, 97, 115, 32, 116, 111, 117, 103, 104, 32, 97, 115, 10, 49, 53, 55, 9, 116, 104, 97, 116, 32, 111, 102, 32, 97, 32, 114, 104, 105, 110, 111, 99, 101, 114, 111, 115, 46, 32, 32, 84, 104, 101, 32, 116, 114, 111, 108, 108, 32, 102, 101, 110, 100, 115, 32, 111, 102, 102, 32, 121, 111, 117, 114, 32, 98, 108, 111, 119, 115, 32, 101, 102, 102, 111, 114, 116, 108, 101, 115, 115, 108, 121, 46, 10, 49, 53, 56, 9, 84, 104, 101, 32, 116, 114, 111, 108, 108, 32, 100, 101, 102, 116, 108, 121, 32, 99, 97, 116, 99, 104, 101, 115, 32, 116, 104, 101, 32, 97, 120, 101, 44, 32, 101, 120, 97, 109, 105, 110, 101, 115, 32, 105, 116, 32, 99, 97, 114, 101, 102, 117, 108, 108, 121, 44, 32, 97, 110, 100, 32, 116, 111, 115, 115, 101, 115, 32, 105, 116, 10, 49, 53, 56, 9, 98, 97, 99, 107, 44, 32, 100, 101, 99, 108, 97, 114, 105, 110, 103, 44, 32, 34, 71, 111, 111, 100, 32, 119, 111, 114, 107, 109, 97, 110, 115, 104, 105, 112, 44, 32, 98, 117, 116, 32, 105, 116, 39, 115, 32, 110, 111, 116, 32, 118, 97, 108, 117, 97, 98, 108, 101, 32, 101, 110, 111, 117, 103, 104, 46, 34, 10, 49, 53, 57, 9, 84, 104, 101, 32, 116, 114, 111, 108, 108, 32, 99, 97, 116, 99, 104, 101, 115, 32, 121, 111, 117, 114, 32, 116, 114, 101, 97, 115, 117, 114, 101, 32, 97, 110, 100, 32, 115, 99, 117, 114, 114, 105, 101, 115, 32, 97, 119, 97, 121, 32, 111, 117, 116, 32, 111, 102, 32, 115, 105, 103, 104, 116, 46, 10, 49, 54, 48, 9, 84, 104, 101, 32, 116, 114, 111, 108, 108, 32, 114, 101, 102, 117, 115, 101, 115, 32, 116, 111, 32, 108, 101, 116, 32, 121, 111, 117, 32, 99, 114, 111, 115, 115, 46, 10, 49, 54, 49, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 32, 108, 111, 110, 103, 101, 114, 32, 97, 110, 121, 32, 119, 97, 121, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 46, 10, 49, 54, 50, 9, 74, 117, 115, 116, 32, 97, 115, 32, 121, 111, 117, 32, 114, 101, 97, 99, 104, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 115, 105, 100, 101, 44, 32, 116, 104, 101, 32, 98, 114, 105, 100, 103, 101, 32, 98, 117, 99, 107, 108, 101, 115, 32, 98, 101, 110, 101, 97, 116, 104, 32, 116, 104, 101, 10, 49, 54, 50, 9, 119, 101, 105, 103, 104, 116, 32, 111, 102, 32, 116, 104, 101, 32, 98, 101, 97, 114, 44, 32, 119, 104, 105, 99, 104, 32, 119, 97, 115, 32, 115, 116, 105, 108, 108, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 121, 111, 117, 32, 97, 114, 111, 117, 110, 100, 46, 32, 32, 89, 111, 117, 10, 49, 54, 50, 9, 115, 99, 114, 97, 98, 98, 108, 101, 32, 100, 101, 115, 112, 101, 114, 97, 116, 101, 108, 121, 32, 102, 111, 114, 32, 115, 117, 112, 112, 111, 114, 116, 44, 32, 98, 117, 116, 32, 97, 115, 32, 116, 104, 101, 32, 98, 114, 105, 100, 103, 101, 32, 99, 111, 108, 108, 97, 112, 115, 101, 115, 32, 121, 111, 117, 10, 49, 54, 50, 9, 115, 116, 117, 109, 98, 108, 101, 32, 98, 97, 99, 107, 32, 97, 110, 100, 32, 102, 97, 108, 108, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 46, 10, 49, 54, 51, 9, 84, 104, 101, 32, 98, 101, 97, 114, 32, 108, 117, 109, 98, 101, 114, 115, 32, 116, 111, 119, 97, 114, 100, 32, 116, 104, 101, 32, 116, 114, 111, 108, 108, 44, 32, 119, 104, 111, 32, 108, 101, 116, 115, 32, 111, 117, 116, 32, 97, 32, 115, 116, 97, 114, 116, 108, 101, 100, 32, 115, 104, 114, 105, 101, 107, 32, 97, 110, 100, 10, 49, 54, 51, 9, 115, 99, 117, 114, 114, 105, 101, 115, 32, 97, 119, 97, 121, 46, 32, 32, 84, 104, 101, 32, 98, 101, 97, 114, 32, 115, 111, 111, 110, 32, 103, 105, 118, 101, 115, 32, 117, 112, 32, 116, 104, 101, 32, 112, 117, 114, 115, 117, 105, 116, 32, 97, 110, 100, 32, 119, 97, 110, 100, 101, 114, 115, 32, 98, 97, 99, 107, 46, 10, 49, 54, 52, 9, 84, 104, 101, 32, 97, 120, 101, 32, 109, 105, 115, 115, 101, 115, 32, 97, 110, 100, 32, 108, 97, 110, 100, 115, 32, 110, 101, 97, 114, 32, 116, 104, 101, 32, 98, 101, 97, 114, 32, 119, 104, 101, 114, 101, 32, 121, 111, 117, 32, 99, 97, 110, 39, 116, 32, 103, 101, 116, 32, 97, 116, 32, 105, 116, 46, 10, 49, 54, 53, 9, 87, 105, 116, 104, 32, 119, 104, 97, 116, 63, 32, 32, 89, 111, 117, 114, 32, 98, 97, 114, 101, 32, 104, 97, 110, 100, 115, 63, 32, 32, 65, 103, 97, 105, 110, 115, 116, 32, 42, 72, 73, 83, 42, 32, 98, 101, 97, 114, 32, 104, 97, 110, 100, 115, 63, 63, 10, 49, 54, 54, 9, 84, 104, 101, 32, 98, 101, 97, 114, 32, 105, 115, 32, 99, 111, 110, 102, 117, 115, 101, 100, 59, 32, 104, 101, 32, 111, 110, 108, 121, 32, 119, 97, 110, 116, 115, 32, 116, 111, 32, 98, 101, 32, 121, 111, 117, 114, 32, 102, 114, 105, 101, 110, 100, 46, 10, 49, 54, 55, 9, 70, 111, 114, 32, 99, 114, 121, 105, 110, 103, 32, 111, 117, 116, 32, 108, 111, 117, 100, 44, 32, 116, 104, 101, 32, 112, 111, 111, 114, 32, 116, 104, 105, 110, 103, 32, 105, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 100, 101, 97, 100, 33, 10, 49, 54, 56, 9, 84, 104, 101, 32, 98, 101, 97, 114, 32, 101, 97, 103, 101, 114, 108, 121, 32, 119, 111, 108, 102, 115, 32, 100, 111, 119, 110, 32, 121, 111, 117, 114, 32, 102, 111, 111, 100, 44, 32, 97, 102, 116, 101, 114, 32, 119, 104, 105, 99, 104, 32, 104, 101, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 99, 97, 108, 109, 10, 49, 54, 56, 9, 100, 111, 119, 110, 32, 99, 111, 110, 115, 105, 100, 101, 114, 97, 98, 108, 121, 32, 97, 110, 100, 32, 101, 118, 101, 110, 32, 98, 101, 99, 111, 109, 101, 115, 32, 114, 97, 116, 104, 101, 114, 32, 102, 114, 105, 101, 110, 100, 108, 121, 46, 10, 49, 54, 57, 9, 84, 104, 101, 32, 98, 101, 97, 114, 32, 105, 115, 32, 115, 116, 105, 108, 108, 32, 99, 104, 97, 105, 110, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 119, 97, 108, 108, 46, 10, 49, 55, 48, 9, 84, 104, 101, 32, 99, 104, 97, 105, 110, 32, 105, 115, 32, 115, 116, 105, 108, 108, 32, 108, 111, 99, 107, 101, 100, 46, 10, 49, 55, 49, 9, 84, 104, 101, 32, 99, 104, 97, 105, 110, 32, 105, 115, 32, 110, 111, 119, 32, 117, 110, 108, 111, 99, 107, 101, 100, 46, 10, 49, 55, 50, 9, 84, 104, 101, 32, 99, 104, 97, 105, 110, 32, 105, 115, 32, 110, 111, 119, 32, 108, 111, 99, 107, 101, 100, 46, 10, 49, 55, 51, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 104, 101, 114, 101, 32, 116, 111, 32, 119, 104, 105, 99, 104, 32, 116, 104, 101, 32, 99, 104, 97, 105, 110, 32, 99, 97, 110, 32, 98, 101, 32, 108, 111, 99, 107, 101, 100, 46, 10, 49, 55, 52, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 104, 101, 114, 101, 32, 116, 111, 32, 101, 97, 116, 46, 10, 49, 55, 53, 9, 68, 111, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 116, 104, 101, 32, 104, 105, 110, 116, 63, 10, 49, 55, 54, 9, 68, 111, 32, 121, 111, 117, 32, 110, 101, 101, 100, 32, 104, 101, 108, 112, 32, 103, 101, 116, 116, 105, 110, 103, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 109, 97, 122, 101, 63, 10, 49, 55, 55, 9, 89, 111, 117, 32, 99, 97, 110, 32, 109, 97, 107, 101, 32, 116, 104, 101, 32, 112, 97, 115, 115, 97, 103, 101, 115, 32, 108, 111, 111, 107, 32, 108, 101, 115, 115, 32, 97, 108, 105, 107, 101, 32, 98, 121, 32, 100, 114, 111, 112, 112, 105, 110, 103, 32, 116, 104, 105, 110, 103, 115, 46, 10, 49, 55, 56, 9, 65, 114, 101, 32, 121, 111, 117, 32, 116, 114, 121, 105, 110, 103, 32, 116, 111, 32, 101, 120, 112, 108, 111, 114, 101, 32, 98, 101, 121, 111, 110, 100, 32, 116, 104, 101, 32, 112, 108, 111, 118, 101, 114, 32, 114, 111, 111, 109, 63, 10, 49, 55, 57, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 119, 97, 121, 32, 116, 111, 32, 101, 120, 112, 108, 111, 114, 101, 32, 116, 104, 97, 116, 32, 114, 101, 103, 105, 111, 110, 32, 119, 105, 116, 104, 111, 117, 116, 32, 104, 97, 118, 105, 110, 103, 32, 116, 111, 32, 119, 111, 114, 114, 121, 32, 97, 98, 111, 117, 116, 10, 49, 55, 57, 9, 102, 97, 108, 108, 105, 110, 103, 32, 105, 110, 116, 111, 32, 97, 32, 112, 105, 116, 46, 32, 32, 78, 111, 110, 101, 32, 111, 102, 32, 116, 104, 101, 32, 111, 98, 106, 101, 99, 116, 115, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 105, 115, 32, 105, 109, 109, 101, 100, 105, 97, 116, 101, 108, 121, 10, 49, 55, 57, 9, 117, 115, 101, 102, 117, 108, 32, 105, 110, 32, 100, 105, 115, 99, 111, 118, 101, 114, 105, 110, 103, 32, 116, 104, 101, 32, 115, 101, 99, 114, 101, 116, 46, 10, 49, 56, 48, 9, 68, 111, 32, 121, 111, 117, 32, 110, 101, 101, 100, 32, 104, 101, 108, 112, 32, 103, 101, 116, 116, 105, 110, 103, 32, 111, 117, 116, 32, 111, 102, 32, 104, 101, 114, 101, 63, 10, 49, 56, 49, 9, 68, 111, 110, 39, 116, 32, 103, 111, 32, 119, 101, 115, 116, 46, 10, 49, 56, 50, 9, 71, 108, 117, 116, 116, 111, 110, 121, 32, 105, 115, 32, 110, 111, 116, 32, 111, 110, 101, 32, 111, 102, 32, 116, 104, 101, 32, 116, 114, 111, 108, 108, 39, 115, 32, 118, 105, 99, 101, 115, 46, 32, 32, 65, 118, 97, 114, 105, 99, 101, 44, 32, 104, 111, 119, 101, 118, 101, 114, 44, 32, 105, 115, 46, 10, 49, 56, 51, 9, 89, 111, 117, 114, 32, 108, 97, 109, 112, 32, 105, 115, 32, 103, 101, 116, 116, 105, 110, 103, 32, 100, 105, 109, 46, 32, 32, 89, 111, 117, 39, 100, 32, 98, 101, 115, 116, 32, 115, 116, 97, 114, 116, 32, 119, 114, 97, 112, 112, 105, 110, 103, 32, 116, 104, 105, 115, 32, 117, 112, 44, 32, 117, 110, 108, 101, 115, 115, 10, 49, 56, 51, 9, 121, 111, 117, 32, 99, 97, 110, 32, 102, 105, 110, 100, 32, 115, 111, 109, 101, 32, 102, 114, 101, 115, 104, 32, 98, 97, 116, 116, 101, 114, 105, 101, 115, 46, 32, 32, 73, 32, 115, 101, 101, 109, 32, 116, 111, 32, 114, 101, 99, 97, 108, 108, 32, 116, 104, 101, 114, 101, 39, 115, 32, 97, 32, 118, 101, 110, 100, 105, 110, 103, 10, 49, 56, 51, 9, 109, 97, 99, 104, 105, 110, 101, 32, 105, 110, 32, 116, 104, 101, 32, 109, 97, 122, 101, 46, 32, 32, 66, 114, 105, 110, 103, 32, 115, 111, 109, 101, 32, 99, 111, 105, 110, 115, 32, 119, 105, 116, 104, 32, 121, 111, 117, 46, 10, 49, 56, 52, 9, 89, 111, 117, 114, 32, 108, 97, 109, 112, 32, 104, 97, 115, 32, 114, 117, 110, 32, 111, 117, 116, 32, 111, 102, 32, 112, 111, 119, 101, 114, 46, 10, 49, 56, 53, 9, 80, 108, 101, 97, 115, 101, 32, 97, 110, 115, 119, 101, 114, 32, 116, 104, 101, 32, 113, 117, 101, 115, 116, 105, 111, 110, 46, 10, 49, 56, 54, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 102, 97, 105, 110, 116, 32, 114, 117, 115, 116, 108, 105, 110, 103, 32, 110, 111, 105, 115, 101, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 100, 97, 114, 107, 110, 101, 115, 115, 32, 98, 101, 104, 105, 110, 100, 32, 121, 111, 117, 46, 32, 32, 65, 115, 32, 121, 111, 117, 10, 49, 56, 54, 9, 116, 117, 114, 110, 32, 116, 111, 119, 97, 114, 100, 32, 116, 104, 101, 109, 44, 32, 116, 104, 101, 32, 98, 101, 97, 109, 32, 111, 102, 32, 121, 111, 117, 114, 32, 108, 97, 109, 112, 32, 102, 97, 108, 108, 115, 32, 97, 99, 114, 111, 115, 115, 32, 97, 32, 98, 101, 97, 114, 100, 101, 100, 32, 112, 105, 114, 97, 116, 101, 46, 10, 49, 56, 54, 9, 72, 101, 32, 105, 115, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 97, 32, 108, 97, 114, 103, 101, 32, 99, 104, 101, 115, 116, 46, 32, 32, 34, 83, 104, 105, 118, 101, 114, 32, 109, 101, 32, 116, 105, 109, 98, 101, 114, 115, 33, 34, 32, 104, 101, 32, 99, 114, 105, 101, 115, 44, 32, 34, 73, 39, 118, 101, 10, 49, 56, 54, 9, 98, 101, 101, 110, 32, 115, 112, 111, 116, 116, 101, 100, 33, 32, 32, 73, 39, 100, 32, 98, 101, 115, 116, 32, 104, 105, 101, 32, 109, 101, 115, 101, 108, 102, 32, 111, 102, 102, 32, 116, 111, 32, 116, 104, 101, 32, 109, 97, 122, 101, 32, 116, 111, 32, 104, 105, 100, 101, 32, 109, 101, 32, 99, 104, 101, 115, 116, 33, 34, 10, 49, 56, 54, 9, 87, 105, 116, 104, 32, 116, 104, 97, 116, 44, 32, 104, 101, 32, 118, 97, 110, 105, 115, 104, 101, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 103, 108, 111, 111, 109, 46, 10, 49, 56, 55, 9, 89, 111, 117, 114, 32, 108, 97, 109, 112, 32, 105, 115, 32, 103, 101, 116, 116, 105, 110, 103, 32, 100, 105, 109, 46, 32, 32, 89, 111, 117, 39, 100, 32, 98, 101, 115, 116, 32, 103, 111, 32, 98, 97, 99, 107, 32, 102, 111, 114, 32, 116, 104, 111, 115, 101, 32, 98, 97, 116, 116, 101, 114, 105, 101, 115, 46, 10, 49, 56, 56, 9, 89, 111, 117, 114, 32, 108, 97, 109, 112, 32, 105, 115, 32, 103, 101, 116, 116, 105, 110, 103, 32, 100, 105, 109, 46, 32, 32, 73, 39, 109, 32, 116, 97, 107, 105, 110, 103, 32, 116, 104, 101, 32, 108, 105, 98, 101, 114, 116, 121, 32, 111, 102, 32, 114, 101, 112, 108, 97, 99, 105, 110, 103, 32, 116, 104, 101, 10, 49, 56, 56, 9, 98, 97, 116, 116, 101, 114, 105, 101, 115, 46, 10, 49, 56, 57, 9, 89, 111, 117, 114, 32, 108, 97, 109, 112, 32, 105, 115, 32, 103, 101, 116, 116, 105, 110, 103, 32, 100, 105, 109, 44, 32, 97, 110, 100, 32, 121, 111, 117, 39, 114, 101, 32, 111, 117, 116, 32, 111, 102, 32, 115, 112, 97, 114, 101, 32, 98, 97, 116, 116, 101, 114, 105, 101, 115, 46, 32, 32, 89, 111, 117, 39, 100, 10, 49, 56, 57, 9, 98, 101, 115, 116, 32, 115, 116, 97, 114, 116, 32, 119, 114, 97, 112, 112, 105, 110, 103, 32, 116, 104, 105, 115, 32, 117, 112, 46, 10, 49, 57, 48, 9, 89, 111, 117, 32, 115, 105, 102, 116, 32, 121, 111, 117, 114, 32, 102, 105, 110, 103, 101, 114, 115, 32, 116, 104, 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 100, 117, 115, 116, 44, 32, 98, 117, 116, 32, 115, 117, 99, 99, 101, 101, 100, 32, 111, 110, 108, 121, 32, 105, 110, 10, 49, 57, 48, 9, 111, 98, 108, 105, 116, 101, 114, 97, 116, 105, 110, 103, 32, 116, 104, 101, 32, 99, 114, 121, 112, 116, 105, 99, 32, 109, 101, 115, 115, 97, 103, 101, 46, 10, 49, 57, 49, 9, 68, 111, 32, 121, 111, 117, 32, 110, 101, 101, 100, 32, 104, 101, 108, 112, 32, 100, 101, 97, 108, 105, 110, 103, 32, 119, 105, 116, 104, 32, 116, 104, 101, 32, 111, 103, 114, 101, 63, 10, 49, 57, 50, 9, 72, 109, 109, 109, 44, 32, 116, 104, 105, 115, 32, 108, 111, 111, 107, 115, 32, 108, 105, 107, 101, 32, 97, 32, 99, 108, 117, 101, 44, 32, 119, 104, 105, 99, 104, 32, 109, 101, 97, 110, 115, 32, 105, 116, 39, 108, 108, 32, 99, 111, 115, 116, 32, 121, 111, 117, 32, 49, 48, 32, 112, 111, 105, 110, 116, 115, 32, 116, 111, 10, 49, 57, 50, 9, 114, 101, 97, 100, 32, 105, 116, 46, 32, 32, 83, 104, 111, 117, 108, 100, 32, 73, 32, 103, 111, 32, 97, 104, 101, 97, 100, 32, 97, 110, 100, 32, 114, 101, 97, 100, 32, 105, 116, 32, 97, 110, 121, 119, 97, 121, 63, 10, 49, 57, 51, 9, 73, 116, 32, 115, 97, 121, 115, 44, 32, 34, 84, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 119, 97, 121, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 105, 115, 32, 112, 108, 97, 99, 101, 46, 32, 32, 68, 111, 32, 121, 111, 117, 32, 110, 101, 101, 100, 32, 97, 110, 121, 32, 109, 111, 114, 101, 10, 49, 57, 51, 9, 105, 110, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 116, 111, 32, 101, 115, 99, 97, 112, 101, 63, 32, 32, 83, 111, 114, 114, 121, 44, 32, 98, 117, 116, 32, 116, 104, 105, 115, 32, 105, 110, 105, 116, 105, 97, 108, 32, 104, 105, 110, 116, 32, 105, 115, 32, 97, 108, 108, 32, 121, 111, 117, 32, 103, 101, 116, 46, 34, 10, 49, 57, 52, 9, 84, 104, 101, 114, 101, 32, 105, 115, 32, 110, 111, 116, 104, 105, 110, 103, 32, 116, 104, 101, 32, 112, 114, 101, 115, 101, 110, 99, 101, 32, 111, 102, 32, 119, 104, 105, 99, 104, 32, 119, 105, 108, 108, 32, 112, 114, 101, 118, 101, 110, 116, 32, 121, 111, 117, 32, 102, 114, 111, 109, 32]); | |
fileData0.push.apply(fileData0, [100, 101, 102, 101, 97, 116, 105, 110, 103, 10, 49, 57, 52, 9, 104, 105, 109, 59, 32, 116, 104, 117, 115, 32, 105, 116, 32, 99, 97, 110, 39, 116, 32, 104, 117, 114, 116, 32, 116, 111, 32, 102, 101, 116, 99, 104, 32, 101, 118, 101, 114, 121, 116, 104, 105, 110, 103, 32, 121, 111, 117, 32, 112, 111, 115, 115, 105, 98, 108, 121, 32, 99, 97, 110, 46, 10, 49, 57, 53, 9, 73, 39, 109, 32, 97, 102, 114, 97, 105, 100, 32, 73, 32, 100, 111, 110, 39, 116, 32, 117, 110, 100, 101, 114, 115, 116, 97, 110, 100, 46, 10, 49, 57, 54, 9, 89, 111, 117, 114, 32, 104, 97, 110, 100, 32, 112, 97, 115, 115, 101, 115, 32, 116, 104, 114, 111, 117, 103, 104, 32, 105, 116, 32, 97, 115, 32, 116, 104, 111, 117, 103, 104, 32, 105, 116, 32, 119, 101, 114, 101, 110, 39, 116, 32, 116, 104, 101, 114, 101, 46, 10, 49, 57, 55, 9, 89, 111, 117, 32, 115, 116, 114, 105, 107, 101, 32, 116, 104, 101, 32, 109, 105, 114, 114, 111, 114, 32, 97, 32, 114, 101, 115, 111, 117, 110, 100, 105, 110, 103, 32, 98, 108, 111, 119, 44, 32, 119, 104, 101, 114, 101, 117, 112, 111, 110, 32, 105, 116, 32, 115, 104, 97, 116, 116, 101, 114, 115, 32, 105, 110, 116, 111, 32, 97, 10, 49, 57, 55, 9, 109, 121, 114, 105, 97, 100, 32, 116, 105, 110, 121, 32, 102, 114, 97, 103, 109, 101, 110, 116, 115, 46, 10, 49, 57, 56, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 116, 97, 107, 101, 110, 32, 116, 104, 101, 32, 118, 97, 115, 101, 32, 97, 110, 100, 32, 104, 117, 114, 108, 101, 100, 32, 105, 116, 32, 100, 101, 108, 105, 99, 97, 116, 101, 108, 121, 32, 116, 111, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 46, 10, 49, 57, 57, 9, 89, 111, 117, 32, 112, 114, 111, 100, 32, 116, 104, 101, 32, 110, 101, 97, 114, 101, 115, 116, 32, 100, 119, 97, 114, 102, 44, 32, 119, 104, 111, 32, 119, 97, 107, 101, 115, 32, 117, 112, 32, 103, 114, 117, 109, 112, 105, 108, 121, 44, 32, 116, 97, 107, 101, 115, 32, 111, 110, 101, 32, 108, 111, 111, 107, 32, 97, 116, 10, 49, 57, 57, 9, 121, 111, 117, 44, 32, 99, 117, 114, 115, 101, 115, 44, 32, 97, 110, 100, 32, 103, 114, 97, 98, 115, 32, 102, 111, 114, 32, 104, 105, 115, 32, 97, 120, 101, 46, 10, 50, 48, 48, 9, 73, 115, 32, 116, 104, 105, 115, 32, 97, 99, 99, 101, 112, 116, 97, 98, 108, 101, 63, 10, 50, 48, 49, 9, 84, 104, 105, 115, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 32, 105, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 111, 118, 101, 114, 46, 32, 32, 84, 111, 32, 115, 116, 97, 114, 116, 32, 97, 32, 110, 101, 119, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 44, 32, 111, 114, 32, 116, 111, 10, 50, 48, 49, 9, 114, 101, 115, 117, 109, 101, 32, 97, 110, 32, 101, 97, 114, 108, 105, 101, 114, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 44, 32, 112, 108, 101, 97, 115, 101, 32, 114, 117, 110, 32, 97, 32, 102, 114, 101, 115, 104, 32, 99, 111, 112, 121, 32, 111, 102, 32, 116, 104, 101, 32, 112, 114, 111, 103, 114, 97, 109, 46, 10, 50, 48, 50, 9, 84, 104, 101, 32, 111, 103, 114, 101, 32, 100, 111, 101, 115, 110, 39, 116, 32, 97, 112, 112, 101, 97, 114, 32, 116, 111, 32, 98, 101, 32, 104, 117, 110, 103, 114, 121, 46, 10, 50, 48, 51, 9, 84, 104, 101, 32, 111, 103, 114, 101, 44, 32, 119, 104, 111, 32, 100, 101, 115, 112, 105, 116, 101, 32, 104, 105, 115, 32, 98, 117, 108, 107, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 97, 103, 105, 108, 101, 44, 32, 101, 97, 115, 105, 108, 121, 32, 100, 111, 100, 103, 101, 115, 32, 121, 111, 117, 114, 10, 50, 48, 51, 9, 97, 116, 116, 97, 99, 107, 46, 32, 32, 72, 101, 32, 115, 101, 101, 109, 115, 32, 97, 108, 109, 111, 115, 116, 32, 97, 109, 117, 115, 101, 100, 32, 98, 121, 32, 121, 111, 117, 114, 32, 112, 117, 110, 121, 32, 101, 102, 102, 111, 114, 116, 46, 10, 50, 48, 52, 9, 84, 104, 101, 32, 111, 103, 114, 101, 44, 32, 100, 105, 115, 116, 114, 97, 99, 116, 101, 100, 32, 98, 121, 32, 121, 111, 117, 114, 32, 114, 117, 115, 104, 44, 32, 105, 115, 32, 115, 116, 114, 117, 99, 107, 32, 98, 121, 32, 116, 104, 101, 32, 107, 110, 105, 102, 101, 46, 32, 32, 87, 105, 116, 104, 32, 97, 10, 50, 48, 52, 9, 98, 108, 111, 111, 100, 45, 99, 117, 114, 100, 108, 105, 110, 103, 32, 121, 101, 108, 108, 32, 104, 101, 32, 116, 117, 114, 110, 115, 32, 97, 110, 100, 32, 98, 111, 117, 110, 100, 115, 32, 97, 102, 116, 101, 114, 32, 116, 104, 101, 32, 100, 119, 97, 114, 118, 101, 115, 44, 32, 119, 104, 111, 32, 102, 108, 101, 101, 10, 50, 48, 52, 9, 105, 110, 32, 112, 97, 110, 105, 99, 46, 32, 32, 89, 111, 117, 32, 97, 114, 101, 32, 108, 101, 102, 116, 32, 97, 108, 111, 110, 101, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 46, 10, 50, 48, 53, 9, 84, 104, 101, 32, 111, 103, 114, 101, 44, 32, 100, 105, 115, 116, 114, 97, 99, 116, 101, 100, 32, 98, 121, 32, 121, 111, 117, 114, 32, 114, 117, 115, 104, 44, 32, 105, 115, 32, 115, 116, 114, 117, 99, 107, 32, 98, 121, 32, 116, 104, 101, 32, 107, 110, 105, 102, 101, 46, 32, 32, 87, 105, 116, 104, 32, 97, 10, 50, 48, 53, 9, 98, 108, 111, 111, 100, 45, 99, 117, 114, 100, 108, 105, 110, 103, 32, 121, 101, 108, 108, 32, 104, 101, 32, 116, 117, 114, 110, 115, 32, 97, 110, 100, 32, 98, 111, 117, 110, 100, 115, 32, 97, 102, 116, 101, 114, 32, 116, 104, 101, 32, 100, 119, 97, 114, 102, 44, 32, 119, 104, 111, 32, 102, 108, 101, 101, 115, 10, 50, 48, 53, 9, 105, 110, 32, 112, 97, 110, 105, 99, 46, 32, 32, 89, 111, 117, 32, 97, 114, 101, 32, 108, 101, 102, 116, 32, 97, 108, 111, 110, 101, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 111, 109, 46, 10, 50, 48, 54, 9, 84, 104, 101, 32, 98, 105, 114, 100, 32, 102, 108, 105, 101, 115, 32, 97, 98, 111, 117, 116, 32, 97, 103, 105, 116, 97, 116, 101, 100, 108, 121, 32, 102, 111, 114, 32, 97, 32, 109, 111, 109, 101, 110, 116, 46, 10, 50, 48, 55, 9, 84, 104, 101, 32, 98, 105, 114, 100, 32, 102, 108, 105, 101, 115, 32, 97, 103, 105, 116, 97, 116, 101, 100, 108, 121, 32, 97, 98, 111, 117, 116, 32, 116, 104, 101, 32, 99, 97, 103, 101, 46, 10, 50, 48, 56, 9, 84, 104, 101, 32, 98, 105, 114, 100, 32, 102, 108, 105, 101, 115, 32, 97, 98, 111, 117, 116, 32, 97, 103, 105, 116, 97, 116, 101, 100, 108, 121, 32, 102, 111, 114, 32, 97, 32, 109, 111, 109, 101, 110, 116, 44, 32, 116, 104, 101, 110, 32, 100, 105, 115, 97, 112, 112, 101, 97, 114, 115, 32, 116, 104, 114, 111, 117, 103, 104, 10, 50, 48, 56, 9, 116, 104, 101, 32, 99, 114, 97, 99, 107, 46, 32, 32, 73, 116, 32, 114, 101, 97, 112, 112, 101, 97, 114, 115, 32, 115, 104, 111, 114, 116, 108, 121, 44, 32, 99, 97, 114, 114, 121, 105, 110, 103, 32, 105, 110, 32, 105, 116, 115, 32, 98, 101, 97, 107, 32, 97, 32, 106, 97, 100, 101, 10, 50, 48, 56, 9, 110, 101, 99, 107, 108, 97, 99, 101, 44, 32, 119, 104, 105, 99, 104, 32, 105, 116, 32, 100, 114, 111, 112, 115, 32, 97, 116, 32, 121, 111, 117, 114, 32, 102, 101, 101, 116, 46, 10, 50, 48, 57, 9, 84, 104, 101, 32, 117, 114, 110, 32, 105, 115, 32, 110, 111, 119, 32, 108, 105, 116, 46, 10, 50, 49, 48, 9, 84, 104, 101, 32, 117, 114, 110, 32, 105, 115, 32, 110, 111, 119, 32, 100, 97, 114, 107, 46, 10, 50, 49, 49, 9, 89, 111, 117, 32, 101, 109, 112, 116, 121, 32, 116, 104, 101, 32, 98, 111, 116, 116, 108, 101, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 117, 114, 110, 44, 32, 119, 104, 105, 99, 104, 32, 112, 114, 111, 109, 112, 116, 108, 121, 32, 101, 106, 101, 99, 116, 115, 32, 116, 104, 101, 32, 119, 97, 116, 101, 114, 10, 50, 49, 49, 9, 119, 105, 116, 104, 32, 117, 110, 99, 97, 110, 110, 121, 32, 97, 99, 99, 117, 114, 97, 99, 121, 44, 32, 115, 113, 117, 105, 114, 116, 105, 110, 103, 32, 121, 111, 117, 32, 100, 105, 114, 101, 99, 116, 108, 121, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 104, 101, 32, 101, 121, 101, 115, 46, 10, 50, 49, 50, 9, 89, 111, 117, 114, 32, 98, 111, 116, 116, 108, 101, 32, 105, 115, 32, 110, 111, 119, 32, 101, 109, 112, 116, 121, 32, 97, 110, 100, 32, 116, 104, 101, 32, 117, 114, 110, 32, 105, 115, 32, 102, 117, 108, 108, 32, 111, 102, 32, 111, 105, 108, 46, 10, 50, 49, 51, 9, 84, 104, 101, 32, 117, 114, 110, 32, 105, 115, 32, 97, 108, 114, 101, 97, 100, 121, 32, 102, 117, 108, 108, 32, 111, 102, 32, 111, 105, 108, 46, 10, 50, 49, 52, 9, 84, 104, 101, 114, 101, 39, 115, 32, 110, 111, 32, 119, 97, 121, 32, 116, 111, 32, 103, 101, 116, 32, 116, 104, 101, 32, 111, 105, 108, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 117, 114, 110, 46, 10, 50, 49, 53, 9, 84, 104, 101, 32, 117, 114, 110, 32, 105, 115, 32, 102, 97, 114, 32, 116, 111, 111, 32, 102, 105, 114, 109, 108, 121, 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 102, 111, 114, 32, 121, 111, 117, 114, 32, 112, 117, 110, 121, 32, 115, 116, 114, 101, 110, 103, 116, 104, 32, 116, 111, 32, 98, 117, 100, 103, 101, 32, 105, 116, 46, 10, 50, 49, 54, 9, 65, 115, 32, 121, 111, 117, 32, 114, 117, 98, 32, 116, 104, 101, 32, 117, 114, 110, 44, 32, 116, 104, 101, 114, 101, 32, 105, 115, 32, 97, 32, 102, 108, 97, 115, 104, 32, 111, 102, 32, 108, 105, 103, 104, 116, 32, 97, 110, 100, 32, 97, 32, 103, 101, 110, 105, 101, 32, 97, 112, 112, 101, 97, 114, 115, 46, 10, 50, 49, 54, 9, 72, 105, 115, 32, 97, 115, 112, 101, 99, 116, 32, 105, 115, 32, 115, 116, 101, 114, 110, 32, 97, 115, 32, 104, 101, 32, 97, 100, 118, 105, 115, 101, 115, 58, 32, 34, 79, 110, 101, 32, 119, 104, 111, 32, 119, 111, 117, 108, 100, 115, 116, 32, 116, 114, 97, 102, 102, 105, 99, 32, 105, 110, 10, 50, 49, 54, 9, 112, 114, 101, 99, 105, 111, 117, 115, 32, 115, 116, 111, 110, 101, 115, 32, 109, 117, 115, 116, 32, 102, 105, 114, 115, 116, 32, 108, 101, 97, 114, 110, 32, 116, 111, 32, 114, 101, 99, 111, 103, 110, 105, 122, 101, 32, 116, 104, 101, 32, 115, 105, 103, 110, 97, 108, 115, 32, 116, 104, 101, 114, 101, 111, 102, 46, 34, 10, 50, 49, 54, 9, 72, 101, 32, 119, 114, 101, 115, 116, 115, 32, 116, 104, 101, 32, 117, 114, 110, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 116, 111, 110, 101, 44, 32, 108, 101, 97, 118, 105, 110, 103, 32, 97, 32, 115, 109, 97, 108, 108, 32, 99, 97, 118, 105, 116, 121, 46, 32, 32, 84, 117, 114, 110, 105, 110, 103, 32, 116, 111, 10, 50, 49, 54, 9, 102, 97, 99, 101, 32, 121, 111, 117, 32, 97, 103, 97, 105, 110, 44, 32, 104, 101, 32, 102, 105, 120, 101, 115, 32, 121, 111, 117, 32, 119, 105, 116, 104, 32, 97, 32, 115, 116, 101, 101, 108, 121, 32, 101, 121, 101, 32, 97, 110, 100, 32, 105, 110, 116, 111, 110, 101, 115, 58, 32, 34, 67, 97, 117, 116, 105, 111, 110, 33, 34, 10, 50, 49, 54, 9, 71, 101, 110, 105, 101, 32, 97, 110, 100, 32, 117, 114, 110, 32, 118, 97, 110, 105, 115, 104, 32, 105, 110, 32, 97, 32, 99, 108, 111, 117, 100, 32, 111, 102, 32, 97, 109, 98, 101, 114, 32, 115, 109, 111, 107, 101, 46, 32, 32, 84, 104, 101, 32, 115, 109, 111, 107, 101, 32, 99, 111, 110, 100, 101, 110, 115, 101, 115, 10, 50, 49, 54, 9, 116, 111, 32, 102, 111, 114, 109, 32, 97, 32, 114, 97, 114, 101, 32, 97, 109, 98, 101, 114, 32, 103, 101, 109, 115, 116, 111, 110, 101, 44, 32, 114, 101, 115, 116, 105, 110, 103, 32, 105, 110, 32, 116, 104, 101, 32, 99, 97, 118, 105, 116, 121, 32, 105, 110, 32, 116, 104, 101, 32, 114, 111, 99, 107, 46, 10, 50, 49, 55, 9, 73, 32, 115, 117, 112, 112, 111, 115, 101, 32, 121, 111, 117, 32, 99, 111, 108, 108, 101, 99, 116, 32, 100, 111, 117, 103, 104, 110, 117, 116, 32, 104, 111, 108, 101, 115, 44, 32, 116, 111, 111, 63, 10, 50, 49, 56, 9, 84, 104, 101, 32, 103, 101, 109, 32, 102, 105, 116, 115, 32, 101, 97, 115, 105, 108, 121, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 99, 97, 118, 105, 116, 121, 46, 10, 50, 49, 57, 9, 84, 104, 101, 32, 112, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 32, 115, 116, 105, 102, 102, 101, 110, 115, 32, 97, 110, 100, 32, 114, 105, 115, 101, 115, 32, 97, 32, 102, 111, 111, 116, 32, 111, 114, 32, 115, 111, 32, 111, 102, 102, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 46, 10, 50, 50, 48, 9, 84, 104, 101, 32, 112, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 32, 100, 114, 97, 112, 101, 100, 32, 111, 118, 101, 114, 32, 121, 111, 117, 114, 32, 115, 104, 111, 117, 108, 100, 101, 114, 32, 115, 101, 101, 109, 115, 32, 116, 111, 32, 119, 114, 105, 103, 103, 108, 101, 32, 102, 111, 114, 32, 97, 10, 50, 50, 48, 9, 109, 111, 109, 101, 110, 116, 44, 32, 98, 117, 116, 32, 116, 104, 101, 110, 32, 115, 117, 98, 115, 105, 100, 101, 115, 46, 10, 50, 50, 49, 9, 84, 104, 101, 32, 112, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 32, 115, 101, 116, 116, 108, 101, 115, 32, 103, 101, 110, 116, 108, 121, 32, 116, 111, 32, 116, 104, 101, 32, 103, 114, 111, 117, 110, 100, 46, 10, 50, 50, 50, 9, 84, 104, 101, 32, 114, 117, 103, 32, 104, 111, 118, 101, 114, 115, 32, 115, 116, 117, 98, 98, 111, 114, 110, 108, 121, 32, 119, 104, 101, 114, 101, 32, 105, 116, 32, 105, 115, 46, 10, 50, 50, 51, 9, 84, 104, 101, 32, 114, 117, 103, 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 97, 112, 112, 101, 97, 114, 32, 105, 110, 99, 108, 105, 110, 101, 100, 32, 116, 111, 32, 99, 111, 111, 112, 101, 114, 97, 116, 101, 46, 10, 50, 50, 52, 9, 73, 102, 32, 121, 111, 117, 32, 109, 101, 97, 110, 32, 116, 111, 32, 117, 115, 101, 32, 116, 104, 101, 32, 112, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 44, 32, 105, 116, 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 97, 112, 112, 101, 97, 114, 32, 105, 110, 99, 108, 105, 110, 101, 100, 32, 116, 111, 10, 50, 50, 52, 9, 99, 111, 111, 112, 101, 114, 97, 116, 101, 46, 10, 50, 50, 53, 9, 84, 104, 111, 117, 103, 104, 32, 121, 111, 117, 32, 102, 108, 97, 112, 32, 121, 111, 117, 114, 32, 97, 114, 109, 115, 32, 102, 117, 114, 105, 111, 117, 115, 108, 121, 44, 32, 105, 116, 32, 105, 115, 32, 116, 111, 32, 110, 111, 32, 97, 118, 97, 105, 108, 46, 10, 50, 50, 54, 9, 89, 111, 117, 32, 98, 111, 97, 114, 100, 32, 116, 104, 101, 32, 112, 101, 114, 115, 105, 97, 110, 32, 114, 117, 103, 44, 32, 119, 104, 105, 99, 104, 32, 112, 114, 111, 109, 112, 116, 108, 121, 32, 119, 104, 105, 115, 107, 115, 32, 121, 111, 117, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 46, 10, 50, 50, 54, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 116, 105, 109, 101, 32, 102, 111, 114, 32, 97, 32, 102, 108, 101, 101, 116, 105, 110, 103, 32, 103, 108, 105, 109, 112, 115, 101, 32, 111, 102, 32, 97, 32, 116, 119, 111, 32, 116, 104, 111, 117, 115, 97, 110, 100, 32, 102, 111, 111, 116, 32, 100, 114, 111, 112, 32, 116, 111, 32, 97, 10, 50, 50, 54, 9, 109, 105, 103, 104, 116, 121, 32, 114, 105, 118, 101, 114, 59, 32, 116, 104, 101, 110, 32, 121, 111, 117, 32, 102, 105, 110, 100, 32, 121, 111, 117, 114, 115, 101, 108, 102, 32, 111, 110, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 115, 105, 100, 101, 46, 10, 50, 50, 55, 9, 84, 104, 101, 32, 114, 117, 103, 32, 102, 101, 114, 114, 105, 101, 115, 32, 121, 111, 117, 32, 98, 97, 99, 107, 32, 97, 99, 114, 111, 115, 115, 32, 116, 104, 101, 32, 99, 104, 97, 115, 109, 46, 10, 50, 50, 56, 9, 65, 108, 108, 32, 105, 115, 32, 115, 105, 108, 101, 110, 116, 46, 10, 50, 50, 57, 9, 84, 104, 101, 32, 115, 116, 114, 101, 97, 109, 32, 105, 115, 32, 103, 117, 114, 103, 108, 105, 110, 103, 32, 112, 108, 97, 99, 105, 100, 108, 121, 46, 10, 50, 51, 48, 9, 84, 104, 101, 32, 119, 105, 110, 100, 32, 119, 104, 105, 115, 116, 108, 101, 115, 32, 99, 111, 108, 100, 108, 121, 32, 112, 97, 115, 116, 32, 121, 111, 117, 114, 32, 101, 97, 114, 115, 46, 10, 50, 51, 49, 9, 84, 104, 101, 32, 115, 116, 114, 101, 97, 109, 32, 115, 112, 108, 97, 115, 104, 101, 115, 32, 108, 111, 117, 100, 108, 121, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 112, 111, 111, 108, 46, 10, 50, 51, 50, 9, 89, 111, 117, 32, 97, 114, 101, 32, 117, 110, 97, 98, 108, 101, 32, 116, 111, 32, 109, 97, 107, 101, 32, 97, 110, 121, 116, 104, 105, 110, 103, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 108, 97, 115, 104, 105, 110, 103, 32, 110, 111, 105, 115, 101, 46, 10, 50, 51, 51, 9, 89, 111, 117, 32, 99, 97, 110, 32, 104, 101, 97, 114, 32, 116, 104, 101, 32, 109, 117, 114, 109, 117, 114, 105, 110, 103, 32, 111, 102, 32, 116, 104, 101, 32, 98, 101, 97, 110, 115, 116, 97, 108, 107, 115, 32, 97, 110, 100, 32, 116, 104, 101, 32, 115, 110, 111, 114, 105, 110, 103, 32, 111, 102, 32, 116, 104, 101, 10, 50, 51, 51, 9, 100, 119, 97, 114, 118, 101, 115, 46, 10, 50, 51, 52, 9, 65, 32, 108, 111, 117, 100, 32, 104, 105, 115, 115, 105, 110, 103, 32, 101, 109, 97, 110, 97, 116, 101, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 110, 97, 107, 101, 32, 112, 105, 116, 46, 10, 50, 51, 53, 9, 84, 104, 101, 32, 97, 105, 114, 32, 105, 115, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 97, 32, 100, 117, 108, 108, 32, 114, 117, 109, 98, 108, 105, 110, 103, 32, 115, 111, 117, 110, 100, 46, 10, 50, 51, 54, 9, 84, 104, 101, 32, 114, 111, 97, 114, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 108, 111, 117, 100, 32, 104, 101, 114, 101, 46, 10, 50, 51, 55, 9, 84, 104, 101, 32, 114, 111, 97, 114, 105, 110, 103, 32, 105, 115, 32, 115, 111, 32, 108, 111, 117, 100, 32, 116, 104, 97, 116, 32, 105, 116, 32, 100, 114, 111, 119, 110, 115, 32, 111, 117, 116, 32, 97, 108, 108, 32, 111, 116, 104, 101, 114, 32, 115, 111, 117, 110, 100, 46, 10, 50, 51, 56, 9, 84, 104, 101, 32, 98, 105, 114, 100, 32, 101, 121, 101, 115, 32, 121, 111, 117, 32, 115, 117, 115, 112, 105, 99, 105, 111, 117, 115, 108, 121, 32, 97, 110, 100, 32, 102, 108, 117, 116, 116, 101, 114, 115, 32, 97, 119, 97, 121, 46, 32, 32, 65, 32, 109, 111, 109, 101, 110, 116, 32, 108, 97, 116, 101, 114, 32, 121, 111, 117, 10, 50, 51, 56, 9, 102, 101, 101, 108, 32, 115, 111, 109, 101, 116, 104, 105, 110, 103, 32, 119, 101, 116, 32, 108, 97, 110, 100, 32, 111, 110, 32, 121, 111, 117, 114, 32, 104, 101, 97, 100, 44, 32, 98, 117, 116, 32, 117, 112, 111, 110, 32, 108, 111, 111, 107, 105, 110, 103, 32, 117, 112, 32, 121, 111, 117, 32, 99, 97, 110, 32, 115, 101, 101, 10, 50, 51, 56, 9, 110, 111, 32, 115, 105, 103, 110, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 108, 112, 114, 105, 116, 46, 10, 50, 51, 57, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 111, 110, 108, 121, 32, 97, 32, 102, 101, 119, 32, 100, 114, 111, 112, 115, 45, 45, 110, 111, 116, 32, 101, 110, 111, 117, 103, 104, 32, 116, 111, 32, 99, 97, 114, 114, 121, 46, 10, 50, 52, 48, 9, 89, 111, 117, 114, 32, 104, 101, 97, 100, 32, 98, 117, 122, 122, 101, 115, 32, 115, 116, 114, 97, 110, 103, 101, 108, 121, 32, 102, 111, 114, 32, 97, 32, 109, 111, 109, 101, 110, 116, 46, 10, 50, 52, 49, 9, 40, 85, 104, 44, 32, 121, 39, 107, 110, 111, 119, 44, 32, 116, 104, 97, 116, 32, 119, 97, 115, 110, 39, 116, 32, 118, 101, 114, 121, 32, 98, 114, 105, 103, 104, 116, 46, 41, 10, 50, 52, 50, 9, 73, 116, 39, 115, 32, 97, 32, 112, 105, 116, 121, 32, 121, 111, 117, 32, 116, 111, 111, 107, 32, 115, 111, 32, 108, 111, 110, 103, 32, 97, 98, 111, 117, 116, 32, 105, 116, 46, 10, 50, 52, 51, 9, 65, 114, 101, 32, 121, 111, 117, 32, 119, 111, 110, 100, 101, 114, 105, 110, 103, 32, 119, 104, 97, 116, 32, 116, 111, 32, 100, 111, 32, 104, 101, 114, 101, 63, 10, 50, 52, 52, 9, 84, 104, 105, 115, 32, 115, 101, 99, 116, 105, 111, 110, 32, 105, 115, 32, 113, 117, 105, 116, 101, 32, 97, 100, 118, 97, 110, 99, 101, 100, 46, 32, 32, 70, 105, 110, 100, 32, 116, 104, 101, 32, 99, 97, 118, 101, 32, 102, 105, 114, 115, 116, 46, 10, 50, 52, 53, 9, 85, 112, 115, 116, 114, 101, 97, 109, 32, 111, 114, 32, 100, 111, 119, 110, 115, 116, 114, 101, 97, 109, 63, 10, 50, 52, 54, 9, 87, 105, 122, 97, 114, 100, 115, 32, 97, 114, 101, 32, 110, 111, 116, 32, 116, 111, 32, 98, 101, 32, 100, 105, 115, 116, 117, 114, 98, 101, 100, 32, 98, 121, 32, 115, 117, 99, 104, 32, 97, 115, 32, 121, 111, 117, 46, 10, 50, 52, 55, 9, 87, 111, 117, 108, 100, 32, 121, 111, 117, 32, 108, 105, 107, 101, 32, 116, 111, 32, 98, 101, 32, 115, 104, 111, 119, 110, 32, 111, 117, 116, 32, 111, 102, 32, 116, 104, 101, 32, 102, 111, 114, 101, 115, 116, 63, 10, 50, 52, 56, 9, 71, 111, 32, 101, 97, 115, 116, 32, 116, 101, 110, 32, 116, 105, 109, 101, 115, 46, 32, 32, 73, 102, 32, 116, 104, 97, 116, 32, 100, 111, 101, 115, 110, 39, 116, 32, 103, 101, 116, 32, 121, 111, 117, 32, 111, 117, 116, 44, 32, 116, 104, 101, 110, 32, 103, 111, 32, 115, 111, 117, 116, 104, 44, 32, 116, 104, 101, 110, 10, 50, 52, 56, 9, 119, 101, 115, 116, 32, 116, 119, 105, 99, 101, 44, 32, 116, 104, 101, 110, 32, 115, 111, 117, 116, 104, 46, 10, 50, 52, 57, 9, 84, 104, 101, 32, 119, 97, 116, 101, 114, 115, 32, 97, 114, 101, 32, 99, 114, 97, 115, 104, 105, 110, 103, 32, 108, 111, 117, 100, 108, 121, 32, 97, 103, 97, 105, 110, 115, 116, 32, 116, 104, 101, 32, 115, 104, 111, 114, 101, 46, 10, 50, 53, 48, 9, 37, 49, 32, 111, 102, 32, 116, 104, 101, 109, 32, 116, 104, 114, 111, 119, 32, 107, 110, 105, 118, 101, 115, 32, 97, 116, 32, 121, 111, 117, 33, 10, 50, 53, 49, 9, 37, 49, 32, 111, 102, 32, 116, 104, 101, 109, 32, 103, 101, 116, 32, 121, 111, 117, 33, 10, 50, 53, 50, 9, 79, 110, 101, 32, 111, 102, 32, 116, 104, 101, 109, 32, 103, 101, 116, 115, 32, 121, 111, 117, 33, 10, 50, 53, 51, 9, 78, 111, 110, 101, 32, 111, 102, 32, 116, 104, 101, 109, 32, 104, 105, 116, 115, 32, 121, 111, 117, 33, 10, 50, 53, 52, 9, 83, 111, 114, 114, 121, 44, 32, 73, 32, 100, 111, 110, 39, 116, 32, 107, 110, 111, 119, 32, 116, 104, 101, 32, 119, 111, 114, 100, 32, 34, 37, 87, 34, 46, 10, 50, 53, 53, 9, 87, 104, 97, 116, 32, 100, 111, 32, 121, 111, 117, 32, 119, 97, 110, 116, 32, 116, 111, 32, 100, 111, 32, 119, 105, 116, 104, 32, 116, 104, 101, 32, 37, 76, 63, 10, 50, 53, 54, 9, 73, 32, 115, 101, 101, 32, 110, 111, 32, 37, 76, 32, 104, 101, 114, 101, 46, 10, 50, 53, 55, 9, 37, 67, 32, 119, 104, 97, 116, 63, 10, 50, 53, 56, 9, 79, 107, 97, 121, 44, 32, 34, 37, 87, 34, 46, 10, 50, 53, 57, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 103, 97, 114, 110, 101, 114, 101, 100, 32, 37, 51, 32, 111, 117, 116, 32, 111, 102, 32, 97, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, 37, 51, 32, 112, 111, 105, 110, 116, 115, 44, 32, 117, 115, 105, 110, 103, 32, 37, 53, 32, 116, 117, 114, 110, 37, 83, 46, 10, 50, 54, 48, 9, 73, 32, 99, 97, 110, 32, 115, 117, 115, 112, 101, 110, 100, 32, 121, 111, 117, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 102, 111, 114, 32, 121, 111, 117, 32, 115, 111, 32, 116, 104, 97, 116, 32, 121, 111, 117, 32, 99, 97, 110, 32, 114, 101, 115, 117, 109, 101, 32, 108, 97, 116, 101, 114, 44, 32, 98, 117, 116, 10, 50, 54, 48, 9, 105, 116, 32, 119, 105, 108, 108, 32, 99, 111, 115, 116, 32, 121, 111, 117, 32, 53, 32, 112, 111, 105, 110, 116, 115, 46, 10, 50, 54, 49, 9, 73, 32, 97, 109, 32, 112, 114, 101, 112, 97, 114, 101, 100, 32, 116, 111, 32, 103, 105, 118, 101, 32, 121, 111, 117, 32, 97, 32, 104, 105, 110, 116, 44, 32, 98, 117, 116, 32, 105, 116, 32, 119, 105, 108, 108, 32, 99, 111, 115, 116, 32, 121, 111, 117, 32, 37, 49, 32, 112, 111, 105, 110, 116, 37, 83, 46, 10, 50, 54, 50, 9, 89, 111, 117, 32, 115, 99, 111, 114, 101, 100, 32, 37, 51, 32, 111, 117, 116, 32, 111, 102, 32, 97, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, 37, 51, 44, 32, 117, 115, 105, 110, 103, 37, 53, 32, 116, 117, 114, 110, 37, 83, 46, 10, 50, 54, 51, 9, 84, 111, 32, 97, 99, 104, 105, 101, 118, 101, 32, 116, 104, 101, 32, 110, 101, 120, 116, 32, 104, 105, 103, 104, 101, 114, 32, 114, 97, 116, 105, 110, 103, 44, 32, 121, 111, 117, 32, 110, 101, 101, 100, 32, 37, 50, 32, 109, 111, 114, 101, 32, 112, 111, 105, 110, 116, 37, 83, 46, 10, 50, 54, 52, 9, 84, 111, 32, 97, 99, 104, 105, 101, 118, 101, 32, 116, 104, 101, 32, 110, 101, 120, 116, 32, 104, 105, 103, 104, 101, 114, 32, 114, 97, 116, 105, 110, 103, 32, 119, 111, 117, 108, 100, 32, 98, 101, 32, 97, 32, 110, 101, 97, 116, 32, 116, 114, 105, 99, 107, 33, 10, 50, 54, 52, 9, 67, 111, 110, 103, 114, 97, 116, 117, 108, 97, 116, 105, 111, 110, 115, 33, 33, 10, 50, 54, 53, 9, 89, 111, 117, 32, 106, 117, 115, 116, 32, 119, 101, 110, 116, 32, 111, 102, 102, 32, 109, 121, 32, 115, 99, 97, 108, 101, 33, 33, 10, 50, 54, 54, 9, 84, 111, 32, 114, 101, 115, 117, 109, 101, 32, 121, 111, 117, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 44, 32, 115, 116, 97, 114, 116, 32, 97, 32, 110, 101, 119, 32, 103, 97, 109, 101, 32, 97, 110, 100, 32, 116, 104, 101, 110, 32, 115, 97, 121, 32, 34, 82, 69, 83, 85, 77, 69, 34, 46, 10, 50, 54, 55, 9, 84, 97, 98, 108, 101, 32, 115, 112, 97, 99, 101, 32, 117, 115, 101, 100, 58, 10, 50, 54, 55, 9, 37, 54, 32, 111, 102, 32, 37, 54, 32, 119, 111, 114, 100, 115, 32, 111, 102, 32, 109, 101, 115, 115, 97, 103, 101, 115, 32, 32, 32, 37, 54, 32, 111, 102, 32, 37, 54, 32, 116, 114, 97, 118, 101, 108, 32, 111, 112, 116, 105, 111, 110, 115, 10, 50, 54, 55, 9, 37, 54, 32, 111, 102, 32, 37, 54, 32, 118, 111, 99, 97, 98, 117, 108, 97, 114, 121, 32, 119, 111, 114, 100, 115, 32, 32, 32, 32, 37, 54, 32, 111, 102, 32, 37, 54, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 10, 50, 54, 55, 9, 37, 54, 32, 111, 102, 32, 37, 54, 32, 111, 98, 106, 101, 99, 116, 115, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 37, 54, 32, 111, 102, 32, 37, 54, 32, 97, 99, 116, 105, 111, 110, 32, 118, 101, 114, 98, 115, 10, 50, 54, 55, 9, 37, 54, 32, 111, 102, 32, 37, 54, 32, 34, 114, 97, 110, 100, 111, 109, 34, 32, 109, 101, 115, 115, 97, 103, 101, 115, 32, 32, 32, 37, 54, 32, 111, 102, 32, 37, 54, 32, 34, 99, 108, 97, 115, 115, 34, 32, 109, 101, 115, 115, 97, 103, 101, 115, 10, 50, 54, 55, 9, 37, 54, 32, 111, 102, 32, 37, 54, 32, 104, 105, 110, 116, 115, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 37, 54, 32, 111, 102, 32, 37, 54, 32, 116, 117, 114, 110, 32, 116, 104, 114, 101, 115, 104, 104, 111, 108, 100, 115, 10, 50, 54, 56, 9, 84, 111, 32, 114, 101, 115, 117, 109, 101, 32, 97, 110, 32, 101, 97, 114, 108, 105, 101, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 44, 32, 121, 111, 117, 32, 109, 117, 115, 116, 32, 97, 98, 97, 110, 100, 111, 110, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 111, 110, 101, 46, 10, 50, 54, 57, 9, 73, 39, 109, 32, 115, 111, 114, 114, 121, 44, 32, 98, 117, 116, 32, 116, 104, 97, 116, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 119, 97, 115, 32, 98, 101, 103, 117, 110, 32, 117, 115, 105, 110, 103, 32, 86, 101, 114, 115, 105, 111, 110, 37, 50, 46, 37, 49, 32, 111, 102, 32, 116, 104, 101, 10, 50, 54, 57, 9, 112, 114, 111, 103, 114, 97, 109, 44, 32, 97, 110, 100, 32, 116, 104, 105, 115, 32, 105, 115, 32, 86, 101, 114, 115, 105, 111, 110, 37, 50, 46, 37, 49, 46, 32, 32, 89, 111, 117, 32, 109, 117, 115, 116, 32, 102, 105, 110, 100, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 118, 101, 114, 115, 105, 111, 110, 10, 50, 54, 57, 9, 105, 110, 32, 111, 114, 100, 101, 114, 32, 116, 111, 32, 114, 101, 115, 117, 109, 101, 32, 116, 104, 97, 116, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 46, 10, 50, 55, 48, 9, 65, 32, 100, 97, 114, 107, 32, 102, 111, 103, 32, 99, 114, 101, 101, 112, 115, 32, 105, 110, 32, 116, 111, 32, 115, 117, 114, 114, 111, 117, 110, 100, 32, 121, 111, 117, 46, 32, 32, 70, 114, 111, 109, 32, 115, 111, 109, 101, 119, 104, 101, 114, 101, 32, 105, 110, 32, 116, 104, 101, 32, 102, 111, 103, 32, 121, 111, 117, 10, 50, 55, 48, 9, 104, 101, 97, 114, 32, 97, 32, 115, 116, 101, 114, 110, 32, 118, 111, 105, 99, 101, 46, 32, 32, 34, 84, 104, 105, 115, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 116, 97, 109, 112, 101, 114, 101, 100, 32, 119, 105, 116, 104, 33, 32, 32, 89, 111, 117, 32, 104, 97, 118, 101, 10, 50, 55, 48, 9, 98, 101, 101, 110, 32, 100, 97, 98, 98, 108, 105, 110, 103, 32, 105, 110, 32, 109, 97, 103, 105, 99, 44, 32, 107, 110, 111, 119, 105, 110, 103, 32, 110, 111, 116, 32, 116, 104, 101, 32, 104, 97, 118, 111, 99, 32, 121, 111, 117, 32, 109, 105, 103, 104, 116, 32, 99, 97, 117, 115, 101, 32, 116, 104, 101, 114, 101, 98, 121, 46, 10, 50, 55, 48, 9, 76, 101, 97, 118, 101, 32, 97, 116, 32, 111, 110, 99, 101, 44, 32, 98, 101, 102, 111, 114, 101, 32, 121, 111, 117, 32, 100, 111, 32, 105, 114, 114, 101, 118, 111, 99, 97, 98, 108, 101, 32, 104, 97, 114, 109, 33, 34, 32, 32, 84, 104, 101, 32, 102, 111, 103, 32, 116, 104, 105, 99, 107, 101, 110, 115, 44, 10, 50, 55, 48, 9, 117, 110, 116, 105, 108, 32, 97, 116, 32, 108, 97, 115, 116, 32, 121, 111, 117, 32, 99, 97, 110, 32, 115, 101, 101, 32, 110, 111, 116, 104, 105, 110, 103, 32, 97, 116, 32, 97, 108, 108, 46, 32, 32, 89, 111, 117, 114, 32, 118, 105, 115, 105, 111, 110, 32, 116, 104, 101, 110, 32, 99, 108, 101, 97, 114, 115, 44, 10, 50, 55, 48, 9, 97, 110, 100, 32, 121, 111, 117, 32, 102, 105, 110, 100, 32, 121, 111, 117, 114, 115, 101, 108, 102, 32, 98, 97, 99, 107, 32, 105, 110, 32, 84, 104, 101, 32, 82, 101, 97, 108, 32, 87, 111, 114, 108, 100, 46, 10, 50, 55, 49, 9, 71, 117, 101, 115, 115, 32, 97, 103, 97, 105, 110, 46, 10, 50, 55, 50, 9, 89, 111, 117, 39, 114, 101, 32, 109, 105, 115, 115, 105, 110, 103, 32, 111, 110, 108, 121, 32, 111, 110, 101, 32, 111, 116, 104, 101, 114, 32, 116, 114, 101, 97, 115, 117, 114, 101, 46, 32, 32, 68, 111, 32, 121, 111, 117, 32, 110, 101, 101, 100, 32, 104, 101, 108, 112, 32, 102, 105, 110, 100, 105, 110, 103, 32, 105, 116, 63, 10, 50, 55, 51, 9, 79, 110, 99, 101, 32, 121, 111, 117, 39, 118, 101, 32, 102, 111, 117, 110, 100, 32, 97, 108, 108, 32, 116, 104, 101, 32, 111, 116, 104, 101, 114, 32, 116, 114, 101, 97, 115, 117, 114, 101, 115, 44, 32, 105, 116, 32, 105, 115, 32, 110, 111, 32, 108, 111, 110, 103, 101, 114, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, 116, 111, 10, 50, 55, 51, 9, 108, 111, 99, 97, 116, 101, 32, 116, 104, 101, 32, 111, 110, 101, 32, 121, 111, 117, 39, 114, 101, 32, 110, 111, 119, 32, 109, 105, 115, 115, 105, 110, 103, 46, 10, 50, 55, 52, 9, 83, 111, 114, 114, 121, 44, 32, 98, 117, 116, 32, 116, 104, 101, 32, 112, 97, 116, 104, 32, 116, 119, 105, 115, 116, 101, 100, 32, 97, 110, 100, 32, 116, 117, 114, 110, 101, 100, 32, 115, 111, 32, 109, 117, 99, 104, 32, 116, 104, 97, 116, 32, 73, 32, 99, 97, 110, 39, 116, 32, 102, 105, 103, 117, 114, 101, 10, 50, 55, 52, 9, 111, 117, 116, 32, 119, 104, 105, 99, 104, 32, 119, 97, 121, 32, 116, 111, 32, 103, 111, 32, 116, 111, 32, 103, 101, 116, 32, 98, 97, 99, 107, 46, 10, 50, 55, 53, 9, 86, 101, 114, 115, 105, 111, 110, 32, 50, 46, 53, 32, 105, 115, 32, 101, 115, 115, 101, 110, 116, 105, 97, 108, 108, 121, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, 115, 32, 86, 101, 114, 115, 105, 111, 110, 32, 73, 73, 59, 32, 116, 104, 101, 32, 99, 97, 118, 101, 32, 97, 110, 100, 32, 116, 104, 101, 10, 50, 55, 53, 9, 104, 97, 122, 97, 114, 100, 115, 32, 116, 104, 101, 114, 101, 105, 110, 32, 97, 114, 101, 32, 117, 110, 99, 104, 97, 110, 103, 101, 100, 44, 32, 97, 110, 100, 32, 116, 111, 112, 32, 115, 99, 111, 114, 101, 32, 105, 115, 32, 115, 116, 105, 108, 108, 32, 52, 51, 48, 32, 112, 111, 105, 110, 116, 115, 46, 10, 50, 55, 53, 9, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 97, 32, 102, 101, 119, 32, 109, 111, 114, 101, 32, 104, 105, 110, 116, 115, 44, 32, 101, 115, 112, 101, 99, 105, 97, 108, 108, 121, 32, 102, 111, 114, 32, 115, 111, 109, 101, 32, 111, 102, 32, 116, 104, 101, 32, 109, 111, 114, 101, 32, 111, 98, 115, 99, 117, 114, 101, 10, 50, 55, 53, 9, 112, 117, 122, 122, 108, 101, 115, 46, 32, 32, 84, 104, 101, 114, 101, 32, 97, 114, 101, 32, 97, 32, 102, 101, 119, 32, 109, 105, 110, 111, 114, 32, 98, 117, 103, 102, 105, 120, 101, 115, 32, 97, 110, 100, 32, 99, 111, 115, 109, 101, 116, 105, 99, 32, 99, 104, 97, 110, 103, 101, 115, 46, 32, 32, 89, 111, 117, 10, 50, 55, 53, 9, 99, 97, 110, 32, 110, 111, 119, 32, 115, 97, 118, 101, 32, 97, 32, 103, 97, 109, 101, 32, 97, 110, 100, 32, 114, 101, 115, 117, 109, 101, 32, 105, 116, 32, 97, 116, 32, 111, 110, 99, 101, 32, 40, 102, 111, 114, 109, 101, 114, 108, 121, 32, 121, 111, 117, 32, 104, 97, 100, 32, 116, 111, 32, 119, 97, 105, 116, 32, 97, 10, 50, 55, 53, 9, 119, 104, 105, 108, 101, 32, 102, 105, 114, 115, 116, 41, 44, 32, 98, 117, 116, 32, 105, 116, 32, 110, 111, 119, 32, 99, 111, 115, 116, 115, 32, 121, 111, 117, 32, 97, 32, 102, 101, 119, 32, 112, 111, 105, 110, 116, 115, 32, 101, 97, 99, 104, 32, 116, 105, 109, 101, 32, 121, 111, 117, 32, 115, 97, 118, 101, 32, 116, 104, 101, 10, 50, 55, 53, 9, 103, 97, 109, 101, 46, 32, 32, 83, 97, 118, 101, 100, 32, 103, 97, 109, 101, 115, 32, 97, 114, 101, 32, 110, 111, 119, 32, 115, 116, 111, 114, 101, 100, 32, 105, 110, 32, 109, 117, 99, 104, 32, 115, 109, 97, 108, 108, 101, 114, 32, 102, 105, 108, 101, 115, 32, 116, 104, 97, 110, 32, 98, 101, 102, 111, 114, 101, 46, 10, 50, 55, 54, 9, 89, 111, 117, 32, 100, 111, 110, 39, 116, 32, 104, 97, 118, 101, 32, 116, 111, 32, 115, 97, 121, 32, 34, 103, 111, 34, 32, 101, 118, 101, 114, 121, 32, 116, 105, 109, 101, 59, 32, 106, 117, 115, 116, 32, 115, 112, 101, 99, 105, 102, 121, 32, 97, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 32, 111, 114, 44, 32, 105, 102, 10, 50, 55, 54, 9, 105, 116, 39, 115, 32, 110, 101, 97, 114, 98, 121, 44, 32, 110, 97, 109, 101, 32, 116, 104, 101, 32, 112, 108, 97, 99, 101, 32, 116, 111, 32, 119, 104, 105, 99, 104, 32, 121, 111, 117, 32, 119, 105, 115, 104, 32, 116, 111, 32, 109, 111, 118, 101, 46, 10, 45, 49, 10, 55, 10, 49, 9, 51, 10, 50, 9, 51, 10, 51, 9, 56, 9, 57, 10, 52, 9, 49, 48, 10, 53, 9, 49, 49, 10, 54, 9, 48, 10, 55, 9, 49, 52, 9, 49, 53, 10, 56, 9, 49, 51, 10, 57, 9, 57, 52, 9, 45, 49, 10, 49, 48, 9, 57, 54, 10, 49, 49, 9, 49, 57, 9, 45, 49, 10, 49, 50, 9, 49, 55, 9, 50, 55, 10, 49, 51, 9, 49, 48, 49, 9, 45, 49, 10, 49, 52, 9, 49, 48, 51, 10, 49, 53, 9, 48, 10, 49, 54, 9, 49, 48, 54, 10, 49, 55, 9, 48, 9, 45, 49, 10, 49, 56, 9, 48, 10, 49, 57, 9, 51, 10, 50, 48, 9, 51, 10, 50, 49, 9, 48, 10, 50, 50, 9, 48, 10, 50, 51, 9, 49, 48, 57, 9, 45, 49, 10, 50, 52, 9, 50, 53, 9, 45, 49, 10, 50, 53, 9, 50, 51, 9, 54, 55, 10, 50, 54, 9, 49, 49, 49, 9, 45, 49, 10, 50, 55, 9, 51, 53, 9, 49, 49, 48, 10, 50, 56, 9, 48, 10, 50, 57, 9, 57, 55, 9, 45, 49, 10, 51, 48, 9, 48, 9, 45, 49, 10, 51, 49, 9, 49, 49, 57, 9, 49, 50, 49, 10, 51, 50, 9, 49, 49, 55, 9, 49, 50, 50, 10, 51, 51, 9, 49, 49, 55, 9, 49, 50, 50, 10, 51, 52, 9, 48, 9, 48, 10, 51, 53, 9, 49, 51, 48, 9, 45, 49, 10, 51, 54, 9, 48, 9, 45, 49, 10, 51, 55, 9, 49, 50, 54, 9, 45, 49, 10, 51, 56, 9, 49, 52, 48, 9, 45, 49, 10, 51, 57, 9, 48, 10, 52, 48, 9, 57, 54, 9, 45, 49, 10, 52, 49, 9, 49, 52, 51, 9, 45, 49, 10, 52, 50, 9, 54, 9, 45, 49, 10, 52, 51, 9, 48, 9, 45, 49, 10, 52, 52, 9, 48, 9, 45, 49, 10, 52, 53, 9, 49, 49, 51, 9, 49, 54, 57, 10, 52, 54, 9, 49, 54, 54, 10, 52, 55, 9, 49, 49, 9, 45, 49, 10, 52, 56, 9, 49, 56, 9, 45, 49, 10, 52, 57, 9, 49, 48, 54, 9, 45, 49, 10, 53, 48, 9, 49, 56, 10, 53, 49, 9, 50, 55, 10, 53, 50, 9, 50, 56, 10, 53, 51, 9, 50, 57, 10, 53, 52, 9, 51, 48, 10, 53, 53, 9, 48, 10, 53, 54, 9, 57, 50, 10, 53, 55, 9, 57, 53, 10, 53, 56, 9, 57, 55, 10, 53, 57, 9, 49, 48, 48, 10, 54, 48, 9, 49, 48, 49, 10, 54, 49, 9, 48, 10, 54, 50, 9, 49, 49, 57, 9, 49, 50, 49, 10, 54, 51, 9, 49, 50, 55, 10, 54, 52, 9, 49, 51, 48, 9, 45, 49, 10, 54, 53, 9, 49, 52, 52, 10, 54, 54, 9, 48, 10, 54, 55, 9, 48, 10, 54, 56, 9, 49, 54, 55, 10, 54, 57, 9, 49, 55, 55, 10, 45, 49, 10, 56, 10, 49, 9, 50, 52, 10, 50, 9, 50, 57, 10, 51, 9, 48, 10, 52, 9, 51, 51, 10, 53, 9, 48, 10, 54, 9, 51, 51, 10, 55, 9, 49, 57, 53, 10, 56, 9, 49, 57, 53, 10, 57, 9, 52, 50, 10, 49, 48, 9, 49, 52, 10, 49, 49, 9, 52, 51, 10, 49, 50, 9, 49, 49, 48, 10, 49, 51, 9, 50, 57, 10, 49, 52, 9, 49, 49, 48, 10, 49, 53, 9, 55, 51, 10, 49, 54, 9, 55, 53, 10, 49, 55, 9, 50, 57, 10, 49, 56, 9, 54, 49, 10, 49, 57, 9, 53, 57, 10, 50, 48, 9, 53, 57, 10, 50, 49, 9, 49, 55, 52, 10, 50, 50, 9, 49, 48, 57, 10, 50, 51, 9, 54, 55, 10, 50, 52, 9, 54, 49, 10, 50, 53, 9, 49, 52, 55, 10, 50, 54, 9, 49, 53, 53, 10, 50, 55, 9, 49, 57, 53, 10, 50, 56, 9, 49, 52, 54, 10, 50, 57, 9, 49, 49, 48, 10, 51, 48, 9, 54, 49, 10, 51, 49, 9, 54, 49, 10, 51, 50, 9, 49, 52, 10, 51, 51, 9, 49, 57, 53, 10, 51, 52, 9, 52, 50, 10, 51, 53, 9, 54, 49, 10, 45, 49, 10, 57, 10, 48, 9, 49, 9, 50, 9, 51, 9, 52, 9, 53, 9, 54, 9, 55, 9, 56, 9, 57, 9, 49, 48, 10, 48, 9, 49, 48, 48, 9, 49, 49, 53, 9, 49, 49, 54, 9, 49, 50, 54, 9, 49, 52, 53, 9, 49, 52, 54, 9, 49, 52, 55, 9, 49, 52, 56, 9, 49, 52, 57, 9, 49, 53, 48, 10, 48, 9, 49, 53, 49, 9, 49, 53, 50, 9, 49, 53, 51, 9, 49, 53, 52, 9, 49, 53, 53, 9, 49, 53, 54, 9, 49, 53, 55, 9, 49, 53, 56, 9, 49, 53, 57, 9, 49, 54, 48, 10, 48, 9, 49, 54, 49, 9, 49, 54, 50, 9, 49, 54, 51, 9, 49, 54, 52, 9, 49, 54, 53, 9, 49, 54, 54, 9, 49, 54, 55, 10, 50, 9, 49, 9, 51, 9, 52, 9, 55, 9, 51, 56, 9, 57, 53, 9, 49, 49, 51, 9, 50, 52, 9, 49, 54, 56, 9, 49, 54, 57, 10, 49, 9, 50, 52, 10, 51, 9, 52, 54, 9, 52, 55, 9, 52, 56, 9, 53, 52, 9, 53, 54, 9, 53, 56, 9, 56, 50, 9, 56, 53, 9, 56, 54, 10, 51, 9, 49, 50, 50, 9, 49, 50, 51, 9, 49, 50, 52, 9, 49, 50, 53, 9, 49, 50, 54, 9, 49, 50, 55, 9, 49, 50, 56, 9, 49, 50, 57, 9, 49, 51, 48, 10, 52, 9, 54, 9, 49, 52, 53, 9, 49, 52, 54, 9, 49, 52, 55, 9, 49, 52, 56, 9, 49, 52, 57, 9, 49, 53, 48, 9, 49, 53, 49, 9, 49, 53, 50, 10, 52, 9, 49, 53, 51, 9, 49, 53, 52, 9, 49, 53, 53, 9, 49, 53, 54, 9, 49, 53, 55, 9, 49, 53, 56, 9, 49, 53, 57, 9, 49, 54, 48, 9, 49, 54, 49, 10, 52, 9, 49, 54, 50, 9, 49, 54, 51, 9, 49, 54, 52, 9, 49, 54, 53, 9, 49, 54, 54, 9, 52, 50, 9, 52, 51, 9, 52, 52, 9, 52, 53, 10, 52, 9, 52, 57, 9, 53, 48, 9, 53, 49, 9, 53, 50, 9, 53, 51, 9, 53, 53, 9, 53, 55, 9, 56, 48, 9, 56, 51, 10, 52, 9, 56, 52, 9, 56, 55, 9, 49, 48, 55, 9, 49, 49, 50, 9, 49, 51, 49, 9, 49, 51, 50, 9, 49, 51, 51, 9, 49, 51, 52, 9, 49, 51, 53, 10, 52, 9, 49, 51, 54, 9, 49, 51, 55, 9, 49, 51, 56, 9, 49, 51, 57, 9, 49, 48, 56, 10, 49, 49, 9, 56, 10, 49, 50, 9, 49, 51, 10, 49, 51, 9, 49, 57, 10, 49, 52, 9, 52, 50, 9, 52, 51, 9, 52, 52, 9, 52, 53, 9, 52, 54, 9, 52, 55, 9, 52, 56, 9, 52, 57, 9, 53, 48, 9, 53, 49, 10, 49, 52, 9, 53, 50, 9, 53, 51, 9, 53, 52, 9, 53, 53, 9, 53, 54, 9, 56, 48, 9, 56, 49, 9, 56, 50, 9, 56, 54, 9, 56, 55, 10, 49, 53, 9, 57, 57, 9, 49, 48, 48, 9, 49, 48, 49, 10, 49, 54, 9, 49, 48, 56, 10, 49, 55, 9, 54, 10, 49, 56, 9, 49, 52, 53, 9, 49, 52, 54, 9, 49, 52, 55, 9, 49, 52, 56, 9, 49, 52, 57, 9, 49, 53, 48, 9, 49, 53, 49, 9, 49, 53, 50, 9, 49, 53, 51, 9, 49, 53, 52, 10, 49, 56, 9, 49, 53, 53, 9, 49, 53, 54, 9, 49, 53, 55, 9, 49, 53, 56, 9, 49, 53, 57, 9, 49, 54, 48, 9, 49, 54, 49, 9, 49, 54, 50, 9, 49, 54, 51, 9, 49, 54, 52, 10, 49, 56, 9, 49, 54, 53, 9, 49, 54, 54, 10, 49, 57, 9, 49, 52, 51, 10, 50, 48, 9, 56, 9, 49, 53, 9, 54, 52, 9, 49, 48, 57, 9, 49, 50, 54, 10, 45, 49, 10, 49, 48, 10, 52, 53, 9, 89, 111, 117, 32, 97, 114, 101, 32, 111, 98, 118, 105, 111, 117, 115, 108, 121, 32, 97, 32, 114, 97, 110, 107, 32, 97, 109, 97, 116, 101, 117, 114, 46, 32, 32, 66, 101, 116, 116, 101, 114, 32, 108, 117, 99, 107, 32, 110, 101, 120, 116, 32, 116, 105, 109, 101, 46, 10, 49, 50, 48, 9, 89, 111, 117, 114, 32, 115, 99, 111, 114, 101, 32, 113, 117, 97, 108, 105, 102, 105, 101, 115, 32, 121, 111, 117, 32, 97, 115, 32, 97, 32, 110, 111, 118, 105, 99, 101, 32, 99, 108, 97, 115, 115, 32, 97, 100, 118, 101, 110, 116, 117, 114, 101, 114, 46, 10, 49, 55, 48, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 97, 99, 104, 105, 101, 118, 101, 100, 32, 116, 104, 101, 32, 114, 97, 116, 105, 110, 103, 58, 32, 34, 69, 120, 112, 101, 114, 105, 101, 110, 99, 101, 100, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 34, 46, 10, 50, 53, 48, 9, 89, 111, 117, 32, 109, 97, 121, 32, 110, 111, 119, 32, 99, 111, 110, 115, 105, 100, 101, 114, 32, 121, 111, 117, 114, 115, 101, 108, 102, 32, 97, 32, 34, 83, 101, 97, 115, 111, 110, 101, 100, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 34, 46, 10, 51, 50, 48, 9, 89, 111, 117, 32, 104, 97, 118, 101, 32, 114, 101, 97, 99, 104, 101, 100, 32, 34, 74, 117, 110, 105, 111, 114, 32, 77, 97, 115, 116, 101, 114, 34, 32, 115, 116, 97, 116, 117, 115, 46, 10, 51, 55, 53, 9, 89, 111, 117, 114, 32, 115, 99, 111, 114, 101, 32, 112, 117, 116, 115, 32, 121, 111, 117, 32, 105, 110, 32, 77, 97, 115, 116, 101, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 32, 67, 108, 97, 115, 115, 32, 67, 46, 10, 52, 49, 48, 9, 89, 111, 117, 114, 32, 115, 99, 111, 114, 101, 32, 112, 117, 116, 115, 32, 121, 111, 117, 32, 105, 110, 32, 77, 97, 115, 116, 101, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 32, 67, 108, 97, 115, 115, 32, 66, 46, 10, 52, 50, 54, 9, 89, 111, 117, 114, 32, 115, 99, 111, 114, 101, 32, 112, 117, 116, 115, 32, 121, 111, 117, 32, 105, 110, 32, 77, 97, 115, 116, 101, 114, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 32, 67, 108, 97, 115, 115, 32, 65, 46, 10, 52, 50, 57, 9, 65, 108, 108, 32, 111, 102, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 100, 111, 109, 32, 103, 105, 118, 101, 115, 32, 116, 114, 105, 98, 117, 116, 101, 32, 116, 111, 32, 121, 111, 117, 44, 32, 65, 100, 118, 101, 110, 116, 117, 114, 101, 114, 32, 71, 114, 97, 110, 100, 109, 97, 115, 116, 101, 114, 33, 10, 57, 57, 57, 57, 9, 65, 100, 118, 101, 110, 116, 117, 114, 101, 100, 111, 109, 32, 115, 116, 97, 110, 100, 115, 32, 105, 110, 32, 97, 119, 101, 32, 45, 45, 32, 121, 111, 117, 32, 104, 97, 118, 101, 32, 110, 111, 119, 32, 106, 111, 105, 110, 101, 100, 32, 116, 104, 101, 32, 114, 97, 110, 107, 115, 32, 111, 102, 32, 116, 104, 101, 10, 57, 57, 57, 57, 9, 32, 32, 32, 32, 32, 32, 32, 87, 32, 79, 32, 82, 32, 76, 32, 68, 32, 32, 32, 67, 32, 72, 32, 65, 32, 77, 32, 80, 32, 73, 32, 79, 32, 78, 32, 32, 32, 65, 32, 68, 32, 86, 32, 69, 32, 78, 32, 84, 32, 85, 32, 82, 32, 69, 32, 82, 32, 83, 32, 33, 10, 57, 57, 57, 57, 9, 73, 116, 32, 109, 97, 121, 32, 105, 110, 116, 101, 114, 101, 115, 116, 32, 121, 111, 117, 32, 116, 111, 32, 107, 110, 111, 119, 32, 116, 104, 97, 116, 32, 116, 104, 101, 32, 68, 117, 110, 103, 101, 111, 110, 45, 77, 97, 115, 116, 101, 114, 32, 104, 105, 109, 115, 101, 108, 102, 32, 104, 97, 115, 44, 32, 116, 111, 10, 57, 57, 57, 57, 9, 109, 121, 32, 107, 110, 111, 119, 108, 101, 100, 103, 101, 44, 32, 110, 101, 118, 101, 114, 32, 97, 99, 104, 105, 101, 118, 101, 100, 32, 116, 104, 105, 115, 32, 116, 104, 114, 101, 115, 104, 104, 111, 108, 100, 32, 105, 110, 32, 102, 101, 119, 101, 114, 32, 116, 104, 97, 110, 32, 51, 51, 48, 32, 116, 117, 114, 110, 115, 46, 10, 45, 49, 10, 49, 49, 10, 49, 9, 52, 9, 50, 9, 54, 50, 9, 54, 51, 10, 50, 9, 53, 9, 50, 9, 49, 56, 9, 49, 57, 10, 51, 9, 56, 9, 50, 9, 50, 48, 9, 50, 49, 10, 52, 9, 55, 53, 9, 52, 9, 49, 55, 54, 9, 49, 55, 55, 10, 53, 9, 50, 53, 9, 53, 9, 49, 55, 56, 9, 49, 55, 57, 10, 54, 9, 50, 48, 9, 51, 9, 49, 56, 48, 9, 49, 56, 49, 10, 55, 9, 56, 9, 50, 9, 50, 52, 51, 9, 50, 52, 52, 10, 56, 9, 50, 53, 9, 50, 9, 50, 52, 55, 9, 50, 52, 56, 10, 57, 9, 49, 48, 9, 52, 9, 49, 57, 49, 9, 49, 57, 52, 10, 49, 48, 9, 49, 9, 52, 9, 50, 55, 50, 9, 50, 55, 51, 10, 45, 49, 10, 49, 51, 10, 56, 9, 51, 9, 45, 49, 10, 49, 49, 9, 50, 9, 45, 49, 10, 49, 51, 9, 45, 49, 9, 49, 10, 49, 52, 9, 49, 9, 45, 49, 10, 49, 53, 9, 50, 9, 45, 49, 10, 49, 54, 9, 45, 49, 9, 49, 10, 50, 52, 9, 54, 9, 45, 49, 10, 51, 49, 9, 52, 9, 45, 49, 10, 51, 51, 9, 51, 9, 45, 49, 10, 51, 54, 9, 45, 49, 9, 49, 10, 51, 56, 9, 45, 49, 9, 49, 10, 52, 49, 9, 49, 9, 45, 49, 10, 52, 55, 9, 45, 49, 9, 49, 10, 52, 56, 9, 45, 49, 9, 49, 10, 52, 57, 9, 45, 49, 9, 49, 10, 49, 9, 50, 50, 57, 10, 51, 9, 50, 50, 57, 10, 52, 9, 50, 50, 57, 10, 55, 9, 50, 50, 57, 10, 49, 53, 9, 50, 51, 48, 10, 51, 56, 9, 50, 50, 57, 10, 54, 52, 9, 50, 51, 48, 10, 57, 52, 9, 50, 51, 48, 10, 57, 53, 9, 50, 51, 49, 10, 57, 56, 9, 50, 51, 50, 10, 49, 48, 57, 9, 50, 51, 48, 10, 49, 49, 51, 9, 50, 51, 49, 10, 49, 49, 53, 9, 50, 51, 51, 10, 49, 49, 54, 9, 50, 51, 52, 10, 49, 50, 51, 9, 50, 51, 53, 10, 49, 50, 52, 9, 50, 51, 53, 10, 49, 50, 53, 9, 50, 51, 54, 10, 49, 50, 54, 9, 45, 50, 51, 55, 10, 49, 50, 55, 9, 50, 51, 53, 10, 49, 54, 56, 9, 45, 50, 51, 55, 10, 49, 54, 57, 9, 50, 52, 57, 10, 45, 49, 10, 49, 52, 10, 50, 48, 48, 51, 53, 48, 9, 84, 115, 107, 33, 32, 32, 65, 32, 119, 105, 122, 97, 114, 100, 32, 119, 111, 117, 108, 100, 110, 39, 116, 32, 104, 97, 118, 101, 32, 116, 111, 32, 116, 97, 107, 101, 32, 51, 53, 48, 32, 116, 117, 114, 110, 115, 46, 32, 32, 84, 104, 105, 115, 32, 105, 115, 32, 103, 111, 105, 110, 103, 32, 116, 111, 32, 99, 111, 115, 116, 10, 50, 48, 48, 51, 53, 48, 9, 121, 111, 117, 32, 97, 32, 99, 111, 117, 112, 108, 101, 32, 111, 102, 32, 112, 111, 105, 110, 116, 115, 46, 10, 51, 48, 48, 53, 48, 48, 9, 53, 48, 48, 32, 116, 117, 114, 110, 115, 63, 32, 32, 84, 104, 97, 116, 39, 115, 32, 97, 110, 111, 116, 104, 101, 114, 32, 102, 101, 119, 32, 112, 111, 105, 110, 116, 115, 32, 121, 111, 117, 39, 118, 101, 32, 108, 111, 115, 116, 46, 10, 53, 48, 49, 48, 48, 48, 9, 65, 114, 101, 32, 121, 111, 117, 32, 115, 116, 105, 108, 108, 32, 97, 116, 32, 105, 116, 63, 32, 32, 70, 105, 118, 101, 32, 112, 111, 105, 110, 116, 115, 32, 111, 102, 102, 32, 102, 111, 114, 32, 101, 120, 99, 101, 101, 100, 105, 110, 103, 32, 49, 48, 48, 48, 32, 116, 117, 114, 110, 115, 33, 10, 49, 48, 48, 50, 53, 48, 48, 32, 71, 111, 111, 100, 32, 103, 114, 105, 101, 102, 44, 32, 100, 111, 110, 39, 116, 32, 121, 111, 117, 32, 42, 69, 86, 69, 82, 42, 32, 103, 105, 118, 101, 32, 117, 112, 63, 32, 32, 68, 111, 32, 121, 111, 117, 32, 114, 101, 97, 108, 105, 122, 101, 32, 121, 111, 117, 39, 118, 101, 32, 115, 112, 101, 110, 116, 10, 49, 48, 48, 50, 53, 48, 48, 32, 111, 118, 101, 114, 32, 50, 53, 48, 48, 32, 116, 117, 114, 110, 115, 32, 97, 116, 32, 116, 104, 105, 115, 63, 32, 32, 84, 104, 97, 116, 39, 115, 32, 97, 110, 111, 116, 104, 101, 114, 32, 116, 101, 110, 32, 112, 111, 105, 110, 116, 115, 32, 111, 102, 102, 44, 32, 97, 32, 116, 111, 116, 97, 108, 32, 111, 102, 10, 49, 48, 48, 50, 53, 48, 48, 32, 116, 119, 101, 110, 116, 121, 32, 112, 111, 105, 110, 116, 115, 32, 108, 111, 115, 116, 32, 102, 111, 114, 32, 116, 97, 107, 105, 110, 103, 32, 115, 111, 32, 108, 111, 110, 103, 46, 10, 45, 49, 10, 48, 10]); | |
Module['FS_createDataFile']('/', 'adventure.text', fileData0, true, true); | |
} | |
if (Module['calledRun']) { | |
runWithFS(); | |
} else { | |
if (!Module['preRun']) Module['preRun'] = []; | |
Module["preRun"].push(runWithFS); // FS is not initialized yet, wait for it | |
} | |
} | |
loadPackage(); | |
})(); | |
// The Module object: Our interface to the outside world. We import | |
// and export values on it, and do the work to get that through | |
// closure compiler if necessary. There are various ways Module can be used: | |
// 1. Not defined. We create it here | |
// 2. A function parameter, function(Module) { ..generated code.. } | |
// 3. pre-run appended it, var Module = {}; ..generated code.. | |
// 4. External script tag defines var Module. | |
// We need to do an eval in order to handle the closure compiler | |
// case, where this code here is minified but Module was defined | |
// elsewhere (e.g. case 4 above). We also need to check if Module | |
// already exists (e.g. case 3 above). | |
// Note that if you want to run closure, and also to use Module | |
// after the generated code, you will need to define var Module = {}; | |
// before the code. Then that object will be used in the code, and you | |
// can continue to use Module afterwards as well. | |
var Module; | |
if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {}; | |
// Sometimes an existing Module object exists with properties | |
// meant to overwrite the default module functionality. Here | |
// we collect those properties and reapply _after_ we configure | |
// the current environment's defaults to avoid having to be so | |
// defensive during initialization. | |
var moduleOverrides = {}; | |
for (var key in Module) { | |
if (Module.hasOwnProperty(key)) { | |
moduleOverrides[key] = Module[key]; | |
} | |
} | |
// The environment setup code below is customized to use Module. | |
// *** Environment setup code *** | |
var ENVIRONMENT_IS_WEB = typeof window === 'object'; | |
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB; | |
// Three configurations we can be running in: | |
// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false) | |
// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false) | |
// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true) | |
var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; | |
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; | |
if (ENVIRONMENT_IS_NODE) { | |
// Expose functionality in the same simple way that the shells work | |
// Note that we pollute the global namespace here, otherwise we break in node | |
if (!Module['print']) Module['print'] = function print(x) { | |
process['stdout'].write(x + '\n'); | |
}; | |
if (!Module['printErr']) Module['printErr'] = function printErr(x) { | |
process['stderr'].write(x + '\n'); | |
}; | |
var nodeFS = require('fs'); | |
var nodePath = require('path'); | |
Module['read'] = function read(filename, binary) { | |
filename = nodePath['normalize'](filename); | |
var ret = nodeFS['readFileSync'](filename); | |
// The path is absolute if the normalized version is the same as the resolved. | |
if (!ret && filename != nodePath['resolve'](filename)) { | |
filename = path.join(__dirname, '..', 'src', filename); | |
ret = nodeFS['readFileSync'](filename); | |
} | |
if (ret && !binary) ret = ret.toString(); | |
return ret; | |
}; | |
Module['readBinary'] = function readBinary(filename) { | |
return Module['read'](filename, true) | |
}; | |
Module['load'] = function load(f) { | |
globalEval(read(f)); | |
}; | |
if (!Module['thisProgram']) { | |
if (process['argv'].length > 1) { | |
Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/'); | |
} else { | |
Module['thisProgram'] = 'unknown-program'; | |
} | |
} | |
Module['arguments'] = process['argv'].slice(2); | |
if (typeof module !== 'undefined') { | |
module['exports'] = Module; | |
} | |
process['on']('uncaughtException', function(ex) { | |
// suppress ExitStatus exceptions from showing an error | |
if (!(ex instanceof ExitStatus)) { | |
throw ex; | |
} | |
}); | |
Module['inspect'] = function() { | |
return '[Emscripten Module object]'; | |
}; | |
} else if (ENVIRONMENT_IS_SHELL) { | |
if (!Module['print']) Module['print'] = print; | |
if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm | |
if (typeof read != 'undefined') { | |
Module['read'] = read; | |
} else { | |
Module['read'] = function read() { | |
throw 'no read() available (jsc?)' | |
}; | |
} | |
Module['readBinary'] = function readBinary(f) { | |
if (typeof readbuffer === 'function') { | |
return new Uint8Array(readbuffer(f)); | |
} | |
var data = read(f, 'binary'); | |
assert(typeof data === 'object'); | |
return data; | |
}; | |
if (typeof scriptArgs != 'undefined') { | |
Module['arguments'] = scriptArgs; | |
} else if (typeof arguments != 'undefined') { | |
Module['arguments'] = arguments; | |
} | |
} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { | |
Module['read'] = function read(url) { | |
var xhr = new XMLHttpRequest(); | |
xhr.open('GET', url, false); | |
xhr.send(null); | |
return xhr.responseText; | |
}; | |
if (typeof arguments != 'undefined') { | |
Module['arguments'] = arguments; | |
} | |
if (typeof console !== 'undefined') { | |
if (!Module['print']) Module['print'] = function print(x) { | |
console.log(x); | |
}; | |
if (!Module['printErr']) Module['printErr'] = function printErr(x) { | |
console.log(x); | |
}; | |
} else { | |
// Probably a worker, and without console.log. We can do very little here... | |
var TRY_USE_DUMP = false; | |
if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) { | |
dump(x); | |
}) : (function(x) { | |
// self.postMessage(x); // enable this if you want stdout to be sent as messages | |
})); | |
} | |
if (ENVIRONMENT_IS_WORKER) { | |
Module['load'] = importScripts; | |
} | |
if (typeof Module['setWindowTitle'] === 'undefined') { | |
Module['setWindowTitle'] = function(title) { | |
document.title = title | |
}; | |
} | |
} else { | |
// Unreachable because SHELL is dependant on the others | |
throw 'Unknown runtime environment. Where are we?'; | |
} | |
function globalEval(x) { | |
eval.call(null, x); | |
} | |
if (!Module['load'] && Module['read']) { | |
Module['load'] = function load(f) { | |
globalEval(Module['read'](f)); | |
}; | |
} | |
if (!Module['print']) { | |
Module['print'] = function() {}; | |
} | |
if (!Module['printErr']) { | |
Module['printErr'] = Module['print']; | |
} | |
if (!Module['arguments']) { | |
Module['arguments'] = []; | |
} | |
if (!Module['thisProgram']) { | |
Module['thisProgram'] = './this.program'; | |
} | |
// *** Environment setup code *** | |
// Closure helpers | |
Module.print = Module['print']; | |
Module.printErr = Module['printErr']; | |
// Callbacks | |
Module['preRun'] = []; | |
Module['postRun'] = []; | |
// Merge back in the overrides | |
for (var key in moduleOverrides) { | |
if (moduleOverrides.hasOwnProperty(key)) { | |
Module[key] = moduleOverrides[key]; | |
} | |
} | |
// === Preamble library stuff === | |
// Documentation for the public APIs defined in this file must be updated in: | |
// site/source/docs/api_reference/preamble.js.rst | |
// A prebuilt local version of the documentation is available at: | |
// site/build/text/docs/api_reference/preamble.js.txt | |
// You can also build docs locally as HTML or other formats in site/ | |
// An online HTML version (which may be of a different version of Emscripten) | |
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html | |
//======================================== | |
// Runtime code shared with compiler | |
//======================================== | |
var Runtime = { | |
setTempRet0: function(value) { | |
tempRet0 = value; | |
}, | |
getTempRet0: function() { | |
return tempRet0; | |
}, | |
stackSave: function() { | |
return STACKTOP; | |
}, | |
stackRestore: function(stackTop) { | |
STACKTOP = stackTop; | |
}, | |
getNativeTypeSize: function(type) { | |
switch (type) { | |
case 'i1': | |
case 'i8': | |
return 1; | |
case 'i16': | |
return 2; | |
case 'i32': | |
return 4; | |
case 'i64': | |
return 8; | |
case 'float': | |
return 4; | |
case 'double': | |
return 8; | |
default: | |
{ | |
if (type[type.length - 1] === '*') { | |
return Runtime.QUANTUM_SIZE; // A pointer | |
} else if (type[0] === 'i') { | |
var bits = parseInt(type.substr(1)); | |
assert(bits % 8 === 0); | |
return bits / 8; | |
} else { | |
return 0; | |
} | |
} | |
} | |
}, | |
getNativeFieldSize: function(type) { | |
return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE); | |
}, | |
STACK_ALIGN: 16, | |
prepVararg: function(ptr, type) { | |
if (type === 'double' || type === 'i64') { | |
// move so the load is aligned | |
if (ptr & 7) { | |
assert((ptr & 7) === 4); | |
ptr += 4; | |
} | |
} else { | |
assert((ptr & 3) === 0); | |
} | |
return ptr; | |
}, | |
getAlignSize: function(type, size, vararg) { | |
// we align i64s and doubles on 64-bit boundaries, unlike x86 | |
if (!vararg && (type == 'i64' || type == 'double')) return 8; | |
if (!type) return Math.min(size, 8); // align structures internally to 64 bits | |
return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE); | |
}, | |
dynCall: function(sig, ptr, args) { | |
if (args && args.length) { | |
if (!args.splice) args = Array.prototype.slice.call(args); | |
args.splice(0, 0, ptr); | |
return Module['dynCall_' + sig].apply(null, args); | |
} else { | |
return Module['dynCall_' + sig].call(null, ptr); | |
} | |
}, | |
functionPointers: [], | |
addFunction: function(func) { | |
for (var i = 0; i < Runtime.functionPointers.length; i++) { | |
if (!Runtime.functionPointers[i]) { | |
Runtime.functionPointers[i] = func; | |
return 2 * (1 + i); | |
} | |
} | |
throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.'; | |
}, | |
removeFunction: function(index) { | |
Runtime.functionPointers[(index - 2) / 2] = null; | |
}, | |
warnOnce: function(text) { | |
if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {}; | |
if (!Runtime.warnOnce.shown[text]) { | |
Runtime.warnOnce.shown[text] = 1; | |
Module.printErr(text); | |
} | |
}, | |
funcWrappers: {}, | |
getFuncWrapper: function(func, sig) { | |
assert(sig); | |
if (!Runtime.funcWrappers[sig]) { | |
Runtime.funcWrappers[sig] = {}; | |
} | |
var sigCache = Runtime.funcWrappers[sig]; | |
if (!sigCache[func]) { | |
sigCache[func] = function dynCall_wrapper() { | |
return Runtime.dynCall(sig, func, arguments); | |
}; | |
} | |
return sigCache[func]; | |
}, | |
getCompilerSetting: function(name) { | |
throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work'; | |
}, | |
stackAlloc: function(size) { | |
var ret = STACKTOP; | |
STACKTOP = (STACKTOP + size) | 0; | |
STACKTOP = (((STACKTOP) + 15) & -16); | |
return ret; | |
}, | |
staticAlloc: function(size) { | |
var ret = STATICTOP; | |
STATICTOP = (STATICTOP + size) | 0; | |
STATICTOP = (((STATICTOP) + 15) & -16); | |
return ret; | |
}, | |
dynamicAlloc: function(size) { | |
var ret = DYNAMICTOP; | |
DYNAMICTOP = (DYNAMICTOP + size) | 0; | |
DYNAMICTOP = (((DYNAMICTOP) + 15) & -16); | |
if (DYNAMICTOP >= TOTAL_MEMORY) { | |
var success = enlargeMemory(); | |
if (!success) { | |
DYNAMICTOP = ret; | |
return 0; | |
} | |
}; | |
return ret; | |
}, | |
alignMemory: function(size, quantum) { | |
var ret = size = Math.ceil((size) / (quantum ? quantum : 16)) * (quantum ? quantum : 16); | |
return ret; | |
}, | |
makeBigInt: function(low, high, unsigned) { | |
var ret = (unsigned ? ((+((low >>> 0))) + ((+((high >>> 0))) * (+4294967296))) : ((+((low >>> 0))) + ((+((high | 0))) * (+4294967296)))); | |
return ret; | |
}, | |
GLOBAL_BASE: 8, | |
QUANTUM_SIZE: 4, | |
__dummy__: 0 | |
} | |
Module['Runtime'] = Runtime; | |
//======================================== | |
// Runtime essentials | |
//======================================== | |
var __THREW__ = 0; // Used in checking for thrown exceptions. | |
var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort() | |
var EXITSTATUS = 0; | |
var undef = 0; | |
// tempInt is used for 32-bit signed values or smaller. tempBigInt is used | |
// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt | |
var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat; | |
var tempI64, tempI64b; | |
var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9; | |
function assert(condition, text) { | |
if (!condition) { | |
abort('Assertion failed: ' + text); | |
} | |
} | |
var globalScope = this; | |
// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) | |
function getCFunc(ident) { | |
var func = Module['_' + ident]; // closure exported function | |
if (!func) { | |
try { | |
func = eval('_' + ident); // explicit lookup | |
} catch (e) {} | |
} | |
assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)'); | |
return func; | |
} | |
var cwrap, ccall; | |
(function() { | |
var JSfuncs = { | |
// Helpers for cwrap -- it can't refer to Runtime directly because it might | |
// be renamed by closure, instead it calls JSfuncs['stackSave'].body to find | |
// out what the minified function name is. | |
'stackSave': function() { | |
Runtime.stackSave() | |
}, | |
'stackRestore': function() { | |
Runtime.stackRestore() | |
}, | |
// type conversion from js to c | |
'arrayToC': function(arr) { | |
var ret = Runtime.stackAlloc(arr.length); | |
writeArrayToMemory(arr, ret); | |
return ret; | |
}, | |
'stringToC': function(str) { | |
var ret = 0; | |
if (str !== null && str !== undefined && str !== 0) { // null string | |
// at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' | |
ret = Runtime.stackAlloc((str.length << 2) + 1); | |
writeStringToMemory(str, ret); | |
} | |
return ret; | |
} | |
}; | |
// For fast lookup of conversion functions | |
var toC = { | |
'string': JSfuncs['stringToC'], | |
'array': JSfuncs['arrayToC'] | |
}; | |
// C calling interface. | |
ccall = function ccallFunc(ident, returnType, argTypes, args, opts) { | |
var func = getCFunc(ident); | |
var cArgs = []; | |
var stack = 0; | |
if (args) { | |
for (var i = 0; i < args.length; i++) { | |
var converter = toC[argTypes[i]]; | |
if (converter) { | |
if (stack === 0) stack = Runtime.stackSave(); | |
cArgs[i] = converter(args[i]); | |
} else { | |
cArgs[i] = args[i]; | |
} | |
} | |
} | |
var ret = func.apply(null, cArgs); | |
if (returnType === 'string') ret = Pointer_stringify(ret); | |
if (stack !== 0) { | |
if (opts && opts.async) { | |
EmterpreterAsync.asyncFinalizers.push(function() { | |
Runtime.stackRestore(stack); | |
}); | |
return; | |
} | |
Runtime.stackRestore(stack); | |
} | |
return ret; | |
} | |
var sourceRegex = /^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/; | |
function parseJSFunc(jsfunc) { | |
// Match the body and the return value of a javascript function source | |
var parsed = jsfunc.toString().match(sourceRegex).slice(1); | |
return { | |
arguments: parsed[0], | |
body: parsed[1], | |
returnValue: parsed[2] | |
} | |
} | |
var JSsource = {}; | |
for (var fun in JSfuncs) { | |
if (JSfuncs.hasOwnProperty(fun)) { | |
// Elements of toCsource are arrays of three items: | |
// the code, and the return value | |
JSsource[fun] = parseJSFunc(JSfuncs[fun]); | |
} | |
} | |
cwrap = function cwrap(ident, returnType, argTypes) { | |
argTypes = argTypes || []; | |
var cfunc = getCFunc(ident); | |
// When the function takes numbers and returns a number, we can just return | |
// the original function | |
var numericArgs = argTypes.every(function(type) { | |
return type === 'number' | |
}); | |
var numericRet = (returnType !== 'string'); | |
if (numericRet && numericArgs) { | |
return cfunc; | |
} | |
// Creation of the arguments list (["$1","$2",...,"$nargs"]) | |
var argNames = argTypes.map(function(x, i) { | |
return '$' + i | |
}); | |
var funcstr = "(function(" + argNames.join(',') + ") {"; | |
var nargs = argTypes.length; | |
if (!numericArgs) { | |
// Generate the code needed to convert the arguments from javascript | |
// values to pointers | |
funcstr += 'var stack = ' + JSsource['stackSave'].body + ';'; | |
for (var i = 0; i < nargs; i++) { | |
var arg = argNames[i], | |
type = argTypes[i]; | |
if (type === 'number') continue; | |
var convertCode = JSsource[type + 'ToC']; // [code, return] | |
funcstr += 'var ' + convertCode.arguments + ' = ' + arg + ';'; | |
funcstr += convertCode.body + ';'; | |
funcstr += arg + '=' + convertCode.returnValue + ';'; | |
} | |
} | |
// When the code is compressed, the name of cfunc is not literally 'cfunc' anymore | |
var cfuncname = parseJSFunc(function() { | |
return cfunc | |
}).returnValue; | |
// Call the function | |
funcstr += 'var ret = ' + cfuncname + '(' + argNames.join(',') + ');'; | |
if (!numericRet) { // Return type can only by 'string' or 'number' | |
// Convert the result to a string | |
var strgfy = parseJSFunc(function() { | |
return Pointer_stringify | |
}).returnValue; | |
funcstr += 'ret = ' + strgfy + '(ret);'; | |
} | |
if (!numericArgs) { | |
// If we had a stack, restore it | |
funcstr += JSsource['stackRestore'].body.replace('()', '(stack)') + ';'; | |
} | |
funcstr += 'return ret})'; | |
return eval(funcstr); | |
}; | |
})(); | |
Module["cwrap"] = cwrap; | |
Module["ccall"] = ccall; | |
function setValue(ptr, value, type, noSafe) { | |
type = type || 'i8'; | |
if (type.charAt(type.length - 1) === '*') type = 'i32'; // pointers are 32-bit | |
switch (type) { | |
case 'i1': | |
HEAP8[((ptr) >> 0)] = value; | |
break; | |
case 'i8': | |
HEAP8[((ptr) >> 0)] = value; | |
break; | |
case 'i16': | |
HEAP16[((ptr) >> 1)] = value; | |
break; | |
case 'i32': | |
HEAP32[((ptr) >> 2)] = value; | |
break; | |
case 'i64': | |
(tempI64 = [value >>> 0, (tempDouble = value, (+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble) / (+4294967296)))), (+4294967295))) | 0) >>> 0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble))) >>> 0)) / (+4294967296)))))) >>> 0) : 0)], HEAP32[((ptr) >> 2)] = tempI64[0], HEAP32[(((ptr) + (4)) >> 2)] = tempI64[1]); | |
break; | |
case 'float': | |
HEAPF32[((ptr) >> 2)] = value; | |
break; | |
case 'double': | |
HEAPF64[((ptr) >> 3)] = value; | |
break; | |
default: | |
abort('invalid type for setValue: ' + type); | |
} | |
} | |
Module['setValue'] = setValue; | |
function getValue(ptr, type, noSafe) { | |
type = type || 'i8'; | |
if (type.charAt(type.length - 1) === '*') type = 'i32'; // pointers are 32-bit | |
switch (type) { | |
case 'i1': | |
return HEAP8[((ptr) >> 0)]; | |
case 'i8': | |
return HEAP8[((ptr) >> 0)]; | |
case 'i16': | |
return HEAP16[((ptr) >> 1)]; | |
case 'i32': | |
return HEAP32[((ptr) >> 2)]; | |
case 'i64': | |
return HEAP32[((ptr) >> 2)]; | |
case 'float': | |
return HEAPF32[((ptr) >> 2)]; | |
case 'double': | |
return HEAPF64[((ptr) >> 3)]; | |
default: | |
abort('invalid type for setValue: ' + type); | |
} | |
return null; | |
} | |
Module['getValue'] = getValue; | |
var ALLOC_NORMAL = 0; // Tries to use _malloc() | |
var ALLOC_STACK = 1; // Lives for the duration of the current function call | |
var ALLOC_STATIC = 2; // Cannot be freed | |
var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk | |
var ALLOC_NONE = 4; // Do not allocate | |
Module['ALLOC_NORMAL'] = ALLOC_NORMAL; | |
Module['ALLOC_STACK'] = ALLOC_STACK; | |
Module['ALLOC_STATIC'] = ALLOC_STATIC; | |
Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC; | |
Module['ALLOC_NONE'] = ALLOC_NONE; | |
// allocate(): This is for internal use. You can use it yourself as well, but the interface | |
// is a little tricky (see docs right below). The reason is that it is optimized | |
// for multiple syntaxes to save space in generated code. So you should | |
// normally not use allocate(), and instead allocate memory using _malloc(), | |
// initialize it with setValue(), and so forth. | |
// @slab: An array of data, or a number. If a number, then the size of the block to allocate, | |
// in *bytes* (note that this is sometimes confusing: the next parameter does not | |
// affect this!) | |
// @types: Either an array of types, one for each byte (or 0 if no type at that position), | |
// or a single type which is used for the entire block. This only matters if there | |
// is initial data - if @slab is a number, then this does not matter at all and is | |
// ignored. | |
// @allocator: How to allocate memory, see ALLOC_* | |
function allocate(slab, types, allocator, ptr) { | |
var zeroinit, size; | |
if (typeof slab === 'number') { | |
zeroinit = true; | |
size = slab; | |
} else { | |
zeroinit = false; | |
size = slab.length; | |
} | |
var singleType = typeof types === 'string' ? types : null; | |
var ret; | |
if (allocator == ALLOC_NONE) { | |
ret = ptr; | |
} else { | |
ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); | |
} | |
if (zeroinit) { | |
var ptr = ret, | |
stop; | |
assert((ret & 3) == 0); | |
stop = ret + (size & ~3); | |
for (; ptr < stop; ptr += 4) { | |
HEAP32[((ptr) >> 2)] = 0; | |
} | |
stop = ret + size; | |
while (ptr < stop) { | |
HEAP8[((ptr++) >> 0)] = 0; | |
} | |
return ret; | |
} | |
if (singleType === 'i8') { | |
if (slab.subarray || slab.slice) { | |
HEAPU8.set(slab, ret); | |
} else { | |
HEAPU8.set(new Uint8Array(slab), ret); | |
} | |
return ret; | |
} | |
var i = 0, | |
type, typeSize, previousType; | |
while (i < size) { | |
var curr = slab[i]; | |
if (typeof curr === 'function') { | |
curr = Runtime.getFunctionIndex(curr); | |
} | |
type = singleType || types[i]; | |
if (type === 0) { | |
i++; | |
continue; | |
} | |
if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later | |
setValue(ret + i, curr, type); | |
// no need to look up size unless type changes, so cache it | |
if (previousType !== type) { | |
typeSize = Runtime.getNativeTypeSize(type); | |
previousType = type; | |
} | |
i += typeSize; | |
} | |
return ret; | |
} | |
Module['allocate'] = allocate; | |
// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready | |
function getMemory(size) { | |
if (!staticSealed) return Runtime.staticAlloc(size); | |
if ((typeof _sbrk !== 'undefined' && !_sbrk.called) || !runtimeInitialized) return Runtime.dynamicAlloc(size); | |
return _malloc(size); | |
} | |
Module['getMemory'] = getMemory; | |
function Pointer_stringify(ptr, /* optional */ length) { | |
if (length === 0 || !ptr) return ''; | |
// TODO: use TextDecoder | |
// Find the length, and check for UTF while doing so | |
var hasUtf = 0; | |
var t; | |
var i = 0; | |
while (1) { | |
t = HEAPU8[(((ptr) + (i)) >> 0)]; | |
hasUtf |= t; | |
if (t == 0 && !length) break; | |
i++; | |
if (length && i == length) break; | |
} | |
if (!length) length = i; | |
var ret = ''; | |
if (hasUtf < 128) { | |
var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack | |
var curr; | |
while (length > 0) { | |
curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); | |
ret = ret ? ret + curr : curr; | |
ptr += MAX_CHUNK; | |
length -= MAX_CHUNK; | |
} | |
return ret; | |
} | |
return Module['UTF8ToString'](ptr); | |
} | |
Module['Pointer_stringify'] = Pointer_stringify; | |
// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns | |
// a copy of that string as a Javascript String object. | |
function AsciiToString(ptr) { | |
var str = ''; | |
while (1) { | |
var ch = HEAP8[((ptr++) >> 0)]; | |
if (!ch) return str; | |
str += String.fromCharCode(ch); | |
} | |
} | |
Module['AsciiToString'] = AsciiToString; | |
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', | |
// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. | |
function stringToAscii(str, outPtr) { | |
return writeAsciiToMemory(str, outPtr, false); | |
} | |
Module['stringToAscii'] = stringToAscii; | |
// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns | |
// a copy of that string as a Javascript String object. | |
function UTF8ArrayToString(u8Array, idx) { | |
var u0, u1, u2, u3, u4, u5; | |
var str = ''; | |
while (1) { | |
// For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 | |
u0 = u8Array[idx++]; | |
if (!u0) return str; | |
if (!(u0 & 0x80)) { | |
str += String.fromCharCode(u0); | |
continue; | |
} | |
u1 = u8Array[idx++] & 63; | |
if ((u0 & 0xE0) == 0xC0) { | |
str += String.fromCharCode(((u0 & 31) << 6) | u1); | |
continue; | |
} | |
u2 = u8Array[idx++] & 63; | |
if ((u0 & 0xF0) == 0xE0) { | |
u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; | |
} else { | |
u3 = u8Array[idx++] & 63; | |
if ((u0 & 0xF8) == 0xF0) { | |
u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3; | |
} else { | |
u4 = u8Array[idx++] & 63; | |
if ((u0 & 0xFC) == 0xF8) { | |
u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4; | |
} else { | |
u5 = u8Array[idx++] & 63; | |
u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5; | |
} | |
} | |
} | |
if (u0 < 0x10000) { | |
str += String.fromCharCode(u0); | |
} else { | |
var ch = u0 - 0x10000; | |
str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); | |
} | |
} | |
} | |
Module['UTF8ArrayToString'] = UTF8ArrayToString; | |
// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns | |
// a copy of that string as a Javascript String object. | |
function UTF8ToString(ptr) { | |
return UTF8ArrayToString(HEAPU8, ptr); | |
} | |
Module['UTF8ToString'] = UTF8ToString; | |
// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', | |
// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. | |
// Use the function lengthBytesUTF8() to compute the exact number of bytes (excluding null terminator) that this function will write. | |
// Parameters: | |
// str: the Javascript string to copy. | |
// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element. | |
// outIdx: The starting offset in the array to begin the copying. | |
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null | |
// terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. | |
// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. | |
// Returns the number of bytes written, EXCLUDING the null terminator. | |
function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { | |
if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. | |
return 0; | |
var startIdx = outIdx; | |
var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. | |
for (var i = 0; i < str.length; ++i) { | |
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. | |
// See http://unicode.org/faq/utf_bom.html#utf16-3 | |
// For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 | |
var u = str.charCodeAt(i); // possibly a lead surrogate | |
if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); | |
if (u <= 0x7F) { | |
if (outIdx >= endIdx) break; | |
outU8Array[outIdx++] = u; | |
} else if (u <= 0x7FF) { | |
if (outIdx + 1 >= endIdx) break; | |
outU8Array[outIdx++] = 0xC0 | (u >> 6); | |
outU8Array[outIdx++] = 0x80 | (u & 63); | |
} else if (u <= 0xFFFF) { | |
if (outIdx + 2 >= endIdx) break; | |
outU8Array[outIdx++] = 0xE0 | (u >> 12); | |
outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); | |
outU8Array[outIdx++] = 0x80 | (u & 63); | |
} else if (u <= 0x1FFFFF) { | |
if (outIdx + 3 >= endIdx) break; | |
outU8Array[outIdx++] = 0xF0 | (u >> 18); | |
outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); | |
outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); | |
outU8Array[outIdx++] = 0x80 | (u & 63); | |
} else if (u <= 0x3FFFFFF) { | |
if (outIdx + 4 >= endIdx) break; | |
outU8Array[outIdx++] = 0xF8 | (u >> 24); | |
outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63); | |
outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); | |
outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); | |
outU8Array[outIdx++] = 0x80 | (u & 63); | |
} else { | |
if (outIdx + 5 >= endIdx) break; | |
outU8Array[outIdx++] = 0xFC | (u >> 30); | |
outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63); | |
outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63); | |
outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); | |
outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); | |
outU8Array[outIdx++] = 0x80 | (u & 63); | |
} | |
} | |
// Null-terminate the pointer to the buffer. | |
outU8Array[outIdx] = 0; | |
return outIdx - startIdx; | |
} | |
Module['stringToUTF8Array'] = stringToUTF8Array; | |
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', | |
// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. | |
// Use the function lengthBytesUTF8() to compute the exact number of bytes (excluding null terminator) that this function will write. | |
// Returns the number of bytes written, EXCLUDING the null terminator. | |
function stringToUTF8(str, outPtr, maxBytesToWrite) { | |
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); | |
} | |
Module['stringToUTF8'] = stringToUTF8; | |
// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. | |
function lengthBytesUTF8(str) { | |
var len = 0; | |
for (var i = 0; i < str.length; ++i) { | |
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. | |
// See http://unicode.org/faq/utf_bom.html#utf16-3 | |
var u = str.charCodeAt(i); // possibly a lead surrogate | |
if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); | |
if (u <= 0x7F) { | |
++len; | |
} else if (u <= 0x7FF) { | |
len += 2; | |
} else if (u <= 0xFFFF) { | |
len += 3; | |
} else if (u <= 0x1FFFFF) { | |
len += 4; | |
} else if (u <= 0x3FFFFFF) { | |
len += 5; | |
} else { | |
len += 6; | |
} | |
} | |
return len; | |
} | |
Module['lengthBytesUTF8'] = lengthBytesUTF8; | |
// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns | |
// a copy of that string as a Javascript String object. | |
function UTF16ToString(ptr) { | |
var i = 0; | |
var str = ''; | |
while (1) { | |
var codeUnit = HEAP16[(((ptr) + (i * 2)) >> 1)]; | |
if (codeUnit == 0) | |
return str; | |
++i; | |
// fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. | |
str += String.fromCharCode(codeUnit); | |
} | |
} | |
Module['UTF16ToString'] = UTF16ToString; | |
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', | |
// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. | |
// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. | |
// Parameters: | |
// str: the Javascript string to copy. | |
// outPtr: Byte address in Emscripten HEAP where to write the string to. | |
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null | |
// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. | |
// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. | |
// Returns the number of bytes written, EXCLUDING the null terminator. | |
function stringToUTF16(str, outPtr, maxBytesToWrite) { | |
// Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. | |
if (maxBytesToWrite === undefined) { | |
maxBytesToWrite = 0x7FFFFFFF; | |
} | |
if (maxBytesToWrite < 2) return 0; | |
maxBytesToWrite -= 2; // Null terminator. | |
var startPtr = outPtr; | |
var numCharsToWrite = (maxBytesToWrite < str.length * 2) ? (maxBytesToWrite / 2) : str.length; | |
for (var i = 0; i < numCharsToWrite; ++i) { | |
// charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. | |
var codeUnit = str.charCodeAt(i); // possibly a lead surrogate | |
HEAP16[((outPtr) >> 1)] = codeUnit; | |
outPtr += 2; | |
} | |
// Null-terminate the pointer to the HEAP. | |
HEAP16[((outPtr) >> 1)] = 0; | |
return outPtr - startPtr; | |
} | |
Module['stringToUTF16'] = stringToUTF16; | |
// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. | |
function lengthBytesUTF16(str) { | |
return str.length * 2; | |
} | |
Module['lengthBytesUTF16'] = lengthBytesUTF16; | |
function UTF32ToString(ptr) { | |
var i = 0; | |
var str = ''; | |
while (1) { | |
var utf32 = HEAP32[(((ptr) + (i * 4)) >> 2)]; | |
if (utf32 == 0) | |
return str; | |
++i; | |
// Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. | |
// See http://unicode.org/faq/utf_bom.html#utf16-3 | |
if (utf32 >= 0x10000) { | |
var ch = utf32 - 0x10000; | |
str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); | |
} else { | |
str += String.fromCharCode(utf32); | |
} | |
} | |
} | |
Module['UTF32ToString'] = UTF32ToString; | |
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', | |
// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. | |
// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. | |
// Parameters: | |
// str: the Javascript string to copy. | |
// outPtr: Byte address in Emscripten HEAP where to write the string to. | |
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null | |
// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. | |
// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. | |
// Returns the number of bytes written, EXCLUDING the null terminator. | |
function stringToUTF32(str, outPtr, maxBytesToWrite) { | |
// Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. | |
if (maxBytesToWrite === undefined) { | |
maxBytesToWrite = 0x7FFFFFFF; | |
} | |
if (maxBytesToWrite < 4) return 0; | |
var startPtr = outPtr; | |
var endPtr = startPtr + maxBytesToWrite - 4; | |
for (var i = 0; i < str.length; ++i) { | |
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. | |
// See http://unicode.org/faq/utf_bom.html#utf16-3 | |
var codeUnit = str.charCodeAt(i); // possibly a lead surrogate | |
if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { | |
var trailSurrogate = str.charCodeAt(++i); | |
codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); | |
} | |
HEAP32[((outPtr) >> 2)] = codeUnit; | |
outPtr += 4; | |
if (outPtr + 4 > endPtr) break; | |
} | |
// Null-terminate the pointer to the HEAP. | |
HEAP32[((outPtr) >> 2)] = 0; | |
return outPtr - startPtr; | |
} | |
Module['stringToUTF32'] = stringToUTF32; | |
// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. | |
function lengthBytesUTF32(str) { | |
var len = 0; | |
for (var i = 0; i < str.length; ++i) { | |
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. | |
// See http://unicode.org/faq/utf_bom.html#utf16-3 | |
var codeUnit = str.charCodeAt(i); | |
if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF)++i; // possibly a lead surrogate, so skip over the tail surrogate. | |
len += 4; | |
} | |
return len; | |
} | |
Module['lengthBytesUTF32'] = lengthBytesUTF32; | |
function demangle(func) { | |
var hasLibcxxabi = !! Module['___cxa_demangle']; | |
if (hasLibcxxabi) { | |
try { | |
var buf = _malloc(func.length); | |
writeStringToMemory(func.substr(1), buf); | |
var status = _malloc(4); | |
var ret = Module['___cxa_demangle'](buf, 0, 0, status); | |
if (getValue(status, 'i32') === 0 && ret) { | |
return Pointer_stringify(ret); | |
} | |
// otherwise, libcxxabi failed, we can try ours which may return a partial result | |
} catch (e) { | |
// failure when using libcxxabi, we can try ours which may return a partial result | |
} finally { | |
if (buf) _free(buf); | |
if (status) _free(status); | |
if (ret) _free(ret); | |
} | |
} | |
var i = 3; | |
// params, etc. | |
var basicTypes = { | |
'v': 'void', | |
'b': 'bool', | |
'c': 'char', | |
's': 'short', | |
'i': 'int', | |
'l': 'long', | |
'f': 'float', | |
'd': 'double', | |
'w': 'wchar_t', | |
'a': 'signed char', | |
'h': 'unsigned char', | |
't': 'unsigned short', | |
'j': 'unsigned int', | |
'm': 'unsigned long', | |
'x': 'long long', | |
'y': 'unsigned long long', | |
'z': '...' | |
}; | |
var subs = []; | |
var first = true; | |
function dump(x) { | |
//return; | |
if (x) Module.print(x); | |
Module.print(func); | |
var pre = ''; | |
for (var a = 0; a < i; a++) pre += ' '; | |
Module.print(pre + '^'); | |
} | |
function parseNested() { | |
i++; | |
if (func[i] === 'K') i++; // ignore const | |
var parts = []; | |
while (func[i] !== 'E') { | |
if (func[i] === 'S') { // substitution | |
i++; | |
var next = func.indexOf('_', i); | |
var num = func.substring(i, next) || 0; | |
parts.push(subs[num] || '?'); | |
i = next + 1; | |
continue; | |
} | |
if (func[i] === 'C') { // constructor | |
parts.push(parts[parts.length - 1]); | |
i += 2; | |
continue; | |
} | |
var size = parseInt(func.substr(i)); | |
var pre = size.toString().length; | |
if (!size || !pre) { | |
i--; | |
break; | |
} // counter i++ below us | |
var curr = func.substr(i + pre, size); | |
parts.push(curr); | |
subs.push(curr); | |
i += pre + size; | |
} | |
i++; // skip E | |
return parts; | |
} | |
function parse(rawList, limit, allowVoid) { // main parser | |
limit = limit || Infinity; | |
var ret = '', | |
list = []; | |
function flushList() { | |
return '(' + list.join(', ') + ')'; | |
} | |
var name; | |
if (func[i] === 'N') { | |
// namespaced N-E | |
name = parseNested().join('::'); | |
limit--; | |
if (limit === 0) return rawList ? [name] : name; | |
} else { | |
// not namespaced | |
if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L' | |
var size = parseInt(func.substr(i)); | |
if (size) { | |
var pre = size.toString().length; | |
name = func.substr(i + pre, size); | |
i += pre + size; | |
} | |
} | |
first = false; | |
if (func[i] === 'I') { | |
i++; | |
var iList = parse(true); | |
var iRet = parse(true, 1, true); | |
ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>'; | |
} else { | |
ret = name; | |
} | |
paramLoop: while (i < func.length && limit-- > 0) { | |
//dump('paramLoop'); | |
var c = func[i++]; | |
if (c in basicTypes) { | |
list.push(basicTypes[c]); | |
} else { | |
switch (c) { | |
case 'P': | |
list.push(parse(true, 1, true)[0] + '*'); | |
break; // pointer | |
case 'R': | |
list.push(parse(true, 1, true)[0] + '&'); | |
break; // reference | |
case 'L': | |
{ // literal | |
i++; // skip basic type | |
var end = func.indexOf('E', i); | |
var size = end - i; | |
list.push(func.substr(i, size)); | |
i += size + 2; // size + 'EE' | |
break; | |
} | |
case 'A': | |
{ // array | |
var size = parseInt(func.substr(i)); | |
i += size.toString().length; | |
if (func[i] !== '_') throw '?'; | |
i++; // skip _ | |
list.push(parse(true, 1, true)[0] + ' [' + size + ']'); | |
break; | |
} | |
case 'E': | |
break paramLoop; | |
default: | |
ret += '?' + c; | |
break paramLoop; | |
} | |
} | |
} | |
if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void) | |
if (rawList) { | |
if (ret) { | |
list.push(ret + '?'); | |
} | |
return list; | |
} else { | |
return ret + flushList(); | |
} | |
} | |
var parsed = func; | |
try { | |
// Special-case the entry point, since its name differs from other name mangling. | |
if (func == 'Object._main' || func == '_main') { | |
return 'main()'; | |
} | |
if (typeof func === 'number') func = Pointer_stringify(func); | |
if (func[0] !== '_') return func; | |
if (func[1] !== '_') return func; // C function | |
if (func[2] !== 'Z') return func; | |
switch (func[3]) { | |
case 'n': | |
return 'operator new()'; | |
case 'd': | |
return 'operator delete()'; | |
} | |
parsed = parse(); | |
} catch (e) { | |
parsed += '?'; | |
} | |
if (parsed.indexOf('?') >= 0 && !hasLibcxxabi) { | |
Runtime.warnOnce('warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); | |
} | |
return parsed; | |
} | |
function demangleAll(text) { | |
return text.replace(/__Z[\w\d_]+/g, function(x) { | |
var y = demangle(x); | |
return x === y ? x : (x + ' [' + y + ']') | |
}); | |
} | |
function jsStackTrace() { | |
var err = new Error(); | |
if (!err.stack) { | |
// IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, | |
// so try that as a special-case. | |
try { | |
throw new Error(0); | |
} catch (e) { | |
err = e; | |
} | |
if (!err.stack) { | |
return '(no stack trace available)'; | |
} | |
} | |
return err.stack.toString(); | |
} | |
function stackTrace() { | |
return demangleAll(jsStackTrace()); | |
} | |
Module['stackTrace'] = stackTrace; | |
// Memory management | |
var PAGE_SIZE = 4096; | |
function alignMemoryPage(x) { | |
if (x % 4096 > 0) { | |
x += (4096 - (x % 4096)); | |
} | |
return x; | |
} | |
var HEAP; | |
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; | |
var STATIC_BASE = 0, | |
STATICTOP = 0, | |
staticSealed = false; // static area | |
var STACK_BASE = 0, | |
STACKTOP = 0, | |
STACK_MAX = 0; // stack area | |
var DYNAMIC_BASE = 0, | |
DYNAMICTOP = 0; // dynamic area handled by sbrk | |
function enlargeMemory() { | |
abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.'); | |
} | |
var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; | |
var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216; | |
var totalMemory = 64 * 1024; | |
while (totalMemory < TOTAL_MEMORY || totalMemory < 2 * TOTAL_STACK) { | |
if (totalMemory < 16 * 1024 * 1024) { | |
totalMemory *= 2; | |
} else { | |
totalMemory += 16 * 1024 * 1024 | |
} | |
} | |
if (totalMemory !== TOTAL_MEMORY) { | |
Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be compliant with the asm.js spec (and given that TOTAL_STACK=' + TOTAL_STACK + ')'); | |
TOTAL_MEMORY = totalMemory; | |
} | |
// Initialize the runtime's memory | |
// check for full engine support (use string 'subarray' to avoid closure compiler confusion) | |
assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !! (new Int32Array(1)['subarray']) && !! (new Int32Array(1)['set']), | |
'JS engine does not provide full typed array support'); | |
var buffer; | |
buffer = new ArrayBuffer(TOTAL_MEMORY); | |
HEAP8 = new Int8Array(buffer); | |
HEAP16 = new Int16Array(buffer); | |
HEAP32 = new Int32Array(buffer); | |
HEAPU8 = new Uint8Array(buffer); | |
HEAPU16 = new Uint16Array(buffer); | |
HEAPU32 = new Uint32Array(buffer); | |
HEAPF32 = new Float32Array(buffer); | |
HEAPF64 = new Float64Array(buffer); | |
// Endianness check (note: assumes compiler arch was little-endian) | |
HEAP32[0] = 255; | |
assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system'); | |
Module['HEAP'] = HEAP; | |
Module['buffer'] = buffer; | |
Module['HEAP8'] = HEAP8; | |
Module['HEAP16'] = HEAP16; | |
Module['HEAP32'] = HEAP32; | |
Module['HEAPU8'] = HEAPU8; | |
Module['HEAPU16'] = HEAPU16; | |
Module['HEAPU32'] = HEAPU32; | |
Module['HEAPF32'] = HEAPF32; | |
Module['HEAPF64'] = HEAPF64; | |
function callRuntimeCallbacks(callbacks) { | |
while (callbacks.length > 0) { | |
var callback = callbacks.shift(); | |
if (typeof callback == 'function') { | |
callback(); | |
continue; | |
} | |
var func = callback.func; | |
if (typeof func === 'number') { | |
if (callback.arg === undefined) { | |
Runtime.dynCall('v', func); | |
} else { | |
Runtime.dynCall('vi', func, [callback.arg]); | |
} | |
} else { | |
func(callback.arg === undefined ? null : callback.arg); | |
} | |
} | |
} | |
var __ATPRERUN__ = []; // functions called before the runtime is initialized | |
var __ATINIT__ = []; // functions called during startup | |
var __ATMAIN__ = []; // functions called when main() is to be run | |
var __ATEXIT__ = []; // functions called during shutdown | |
var __ATPOSTRUN__ = []; // functions called after the runtime has exited | |
var runtimeInitialized = false; | |
var runtimeExited = false; | |
function preRun() { | |
// compatibility - merge in anything from Module['preRun'] at this time | |
if (Module['preRun']) { | |
if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; | |
while (Module['preRun'].length) { | |
addOnPreRun(Module['preRun'].shift()); | |
} | |
} | |
callRuntimeCallbacks(__ATPRERUN__); | |
} | |
function ensureInitRuntime() { | |
if (runtimeInitialized) return; | |
runtimeInitialized = true; | |
callRuntimeCallbacks(__ATINIT__); | |
} | |
function preMain() { | |
callRuntimeCallbacks(__ATMAIN__); | |
} | |
function exitRuntime() { | |
callRuntimeCallbacks(__ATEXIT__); | |
runtimeExited = true; | |
} | |
function postRun() { | |
// compatibility - merge in anything from Module['postRun'] at this time | |
if (Module['postRun']) { | |
if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; | |
while (Module['postRun'].length) { | |
addOnPostRun(Module['postRun'].shift()); | |
} | |
} | |
callRuntimeCallbacks(__ATPOSTRUN__); | |
} | |
function addOnPreRun(cb) { | |
__ATPRERUN__.unshift(cb); | |
} | |
Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun; | |
function addOnInit(cb) { | |
__ATINIT__.unshift(cb); | |
} | |
Module['addOnInit'] = Module.addOnInit = addOnInit; | |
function addOnPreMain(cb) { | |
__ATMAIN__.unshift(cb); | |
} | |
Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain; | |
function addOnExit(cb) { | |
__ATEXIT__.unshift(cb); | |
} | |
Module['addOnExit'] = Module.addOnExit = addOnExit; | |
function addOnPostRun(cb) { | |
__ATPOSTRUN__.unshift(cb); | |
} | |
Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun; | |
// Tools | |
function intArrayFromString(stringy, dontAddNull, length /* optional */ ) { | |
var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; | |
var u8array = new Array(len); | |
var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); | |
if (dontAddNull) u8array.length = numBytesWritten; | |
return u8array; | |
} | |
Module['intArrayFromString'] = intArrayFromString; | |
function intArrayToString(array) { | |
var ret = []; | |
for (var i = 0; i < array.length; i++) { | |
var chr = array[i]; | |
if (chr > 0xFF) { | |
chr &= 0xFF; | |
} | |
ret.push(String.fromCharCode(chr)); | |
} | |
return ret.join(''); | |
} | |
Module['intArrayToString'] = intArrayToString; | |
function writeStringToMemory(string, buffer, dontAddNull) { | |
var array = intArrayFromString(string, dontAddNull); | |
var i = 0; | |
while (i < array.length) { | |
var chr = array[i]; | |
HEAP8[(((buffer) + (i)) >> 0)] = chr; | |
i = i + 1; | |
} | |
} | |
Module['writeStringToMemory'] = writeStringToMemory; | |
function writeArrayToMemory(array, buffer) { | |
for (var i = 0; i < array.length; i++) { | |
HEAP8[((buffer++) >> 0)] = array[i]; | |
} | |
} | |
Module['writeArrayToMemory'] = writeArrayToMemory; | |
function writeAsciiToMemory(str, buffer, dontAddNull) { | |
for (var i = 0; i < str.length; ++i) { | |
HEAP8[((buffer++) >> 0)] = str.charCodeAt(i); | |
} | |
// Null-terminate the pointer to the HEAP. | |
if (!dontAddNull) HEAP8[((buffer) >> 0)] = 0; | |
} | |
Module['writeAsciiToMemory'] = writeAsciiToMemory; | |
function unSign(value, bits, ignore) { | |
if (value >= 0) { | |
return value; | |
} | |
return bits <= 32 ? 2 * Math.abs(1 << (bits - 1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts | |
: Math.pow(2, bits) + value; | |
} | |
function reSign(value, bits, ignore) { | |
if (value <= 0) { | |
return value; | |
} | |
var half = bits <= 32 ? Math.abs(1 << (bits - 1)) // abs is needed if bits == 32 | |
: Math.pow(2, bits - 1); | |
if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that | |
// but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors | |
// TODO: In i64 mode 1, resign the two parts separately and safely | |
value = -2 * half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts | |
} | |
return value; | |
} | |
// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 ) | |
if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) { | |
var ah = a >>> 16; | |
var al = a & 0xffff; | |
var bh = b >>> 16; | |
var bl = b & 0xffff; | |
return (al * bl + ((ah * bl + al * bh) << 16)) | 0; | |
}; | |
Math.imul = Math['imul']; | |
if (!Math['clz32']) Math['clz32'] = function(x) { | |
x = x >>> 0; | |
for (var i = 0; i < 32; i++) { | |
if (x & (1 << (31 - i))) return i; | |
} | |
return 32; | |
}; | |
Math.clz32 = Math['clz32'] | |
var Math_abs = Math.abs; | |
var Math_cos = Math.cos; | |
var Math_sin = Math.sin; | |
var Math_tan = Math.tan; | |
var Math_acos = Math.acos; | |
var Math_asin = Math.asin; | |
var Math_atan = Math.atan; | |
var Math_atan2 = Math.atan2; | |
var Math_exp = Math.exp; | |
var Math_log = Math.log; | |
var Math_sqrt = Math.sqrt; | |
var Math_ceil = Math.ceil; | |
var Math_floor = Math.floor; | |
var Math_pow = Math.pow; | |
var Math_imul = Math.imul; | |
var Math_fround = Math.fround; | |
var Math_min = Math.min; | |
var Math_clz32 = Math.clz32; | |
// A counter of dependencies for calling run(). If we need to | |
// do asynchronous work before running, increment this and | |
// decrement it. Incrementing must happen in a place like | |
// PRE_RUN_ADDITIONS (used by emcc to add file preloading). | |
// Note that you can add dependencies in preRun, even though | |
// it happens right before run - run will be postponed until | |
// the dependencies are met. | |
var runDependencies = 0; | |
var runDependencyWatcher = null; | |
var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled | |
function getUniqueRunDependency(id) { | |
return id; | |
} | |
function addRunDependency(id) { | |
runDependencies++; | |
if (Module['monitorRunDependencies']) { | |
Module['monitorRunDependencies'](runDependencies); | |
} | |
} | |
Module['addRunDependency'] = addRunDependency; | |
function removeRunDependency(id) { | |
runDependencies--; | |
if (Module['monitorRunDependencies']) { | |
Module['monitorRunDependencies'](runDependencies); | |
} | |
if (runDependencies == 0) { | |
if (runDependencyWatcher !== null) { | |
clearInterval(runDependencyWatcher); | |
runDependencyWatcher = null; | |
} | |
if (dependenciesFulfilled) { | |
var callback = dependenciesFulfilled; | |
dependenciesFulfilled = null; | |
callback(); // can add another dependenciesFulfilled | |
} | |
} | |
} | |
Module['removeRunDependency'] = removeRunDependency; | |
Module["preloadedImages"] = {}; // maps url to image data | |
Module["preloadedAudios"] = {}; // maps url to audio data | |
var memoryInitializer = null; | |
// === Body === | |
var ASM_CONSTS = []; | |
STATIC_BASE = 8; | |
STATICTOP = STATIC_BASE + 21408; | |
/* global initializers */ | |
__ATINIT__.push(); | |
memoryInitializer = "adventure.html.mem"; | |
/* no memory initializer */ | |
var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8); | |
assert(tempDoublePtr % 8 == 0); | |
function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much | |
HEAP8[tempDoublePtr] = HEAP8[ptr]; | |
HEAP8[tempDoublePtr + 1] = HEAP8[ptr + 1]; | |
HEAP8[tempDoublePtr + 2] = HEAP8[ptr + 2]; | |
HEAP8[tempDoublePtr + 3] = HEAP8[ptr + 3]; | |
} | |
function copyTempDouble(ptr) { | |
HEAP8[tempDoublePtr] = HEAP8[ptr]; | |
HEAP8[tempDoublePtr + 1] = HEAP8[ptr + 1]; | |
HEAP8[tempDoublePtr + 2] = HEAP8[ptr + 2]; | |
HEAP8[tempDoublePtr + 3] = HEAP8[ptr + 3]; | |
HEAP8[tempDoublePtr + 4] = HEAP8[ptr + 4]; | |
HEAP8[tempDoublePtr + 5] = HEAP8[ptr + 5]; | |
HEAP8[tempDoublePtr + 6] = HEAP8[ptr + 6]; | |
HEAP8[tempDoublePtr + 7] = HEAP8[ptr + 7]; | |
} | |
// {{PRE_LIBRARY}} | |
Module["_memset"] = _memset; | |
var ___errno_state = 0; | |
function ___setErrNo(value) { | |
// For convenient setting and returning of errno. | |
HEAP32[((___errno_state) >> 2)] = value; | |
return value; | |
} | |
var ERRNO_CODES = { | |
EPERM: 1, | |
ENOENT: 2, | |
ESRCH: 3, | |
EINTR: 4, | |
EIO: 5, | |
ENXIO: 6, | |
E2BIG: 7, | |
ENOEXEC: 8, | |
EBADF: 9, | |
ECHILD: 10, | |
EAGAIN: 11, | |
EWOULDBLOCK: 11, | |
ENOMEM: 12, | |
EACCES: 13, | |
EFAULT: 14, | |
ENOTBLK: 15, | |
EBUSY: 16, | |
EEXIST: 17, | |
EXDEV: 18, | |
ENODEV: 19, | |
ENOTDIR: 20, | |
EISDIR: 21, | |
EINVAL: 22, | |
ENFILE: 23, | |
EMFILE: 24, | |
ENOTTY: 25, | |
ETXTBSY: 26, | |
EFBIG: 27, | |
ENOSPC: 28, | |
ESPIPE: 29, | |
EROFS: 30, | |
EMLINK: 31, | |
EPIPE: 32, | |
EDOM: 33, | |
ERANGE: 34, | |
ENOMSG: 42, | |
EIDRM: 43, | |
ECHRNG: 44, | |
EL2NSYNC: 45, | |
EL3HLT: 46, | |
EL3RST: 47, | |
ELNRNG: 48, | |
EUNATCH: 49, | |
ENOCSI: 50, | |
EL2HLT: 51, | |
EDEADLK: 35, | |
ENOLCK: 37, | |
EBADE: 52, | |
EBADR: 53, | |
EXFULL: 54, | |
ENOANO: 55, | |
EBADRQC: 56, | |
EBADSLT: 57, | |
EDEADLOCK: 35, | |
EBFONT: 59, | |
ENOSTR: 60, | |
ENODATA: 61, | |
ETIME: 62, | |
ENOSR: 63, | |
ENONET: 64, | |
ENOPKG: 65, | |
EREMOTE: 66, | |
ENOLINK: 67, | |
EADV: 68, | |
ESRMNT: 69, | |
ECOMM: 70, | |
EPROTO: 71, | |
EMULTIHOP: 72, | |
EDOTDOT: 73, | |
EBADMSG: 74, | |
ENOTUNIQ: 76, | |
EBADFD: 77, | |
EREMCHG: 78, | |
ELIBACC: 79, | |
ELIBBAD: 80, | |
ELIBSCN: 81, | |
ELIBMAX: 82, | |
ELIBEXEC: 83, | |
ENOSYS: 38, | |
ENOTEMPTY: 39, | |
ENAMETOOLONG: 36, | |
ELOOP: 40, | |
EOPNOTSUPP: 95, | |
EPFNOSUPPORT: 96, | |
ECONNRESET: 104, | |
ENOBUFS: 105, | |
EAFNOSUPPORT: 97, | |
EPROTOTYPE: 91, | |
ENOTSOCK: 88, | |
ENOPROTOOPT: 92, | |
ESHUTDOWN: 108, | |
ECONNREFUSED: 111, | |
EADDRINUSE: 98, | |
ECONNABORTED: 103, | |
ENETUNREACH: 101, | |
ENETDOWN: 100, | |
ETIMEDOUT: 110, | |
EHOSTDOWN: 112, | |
EHOSTUNREACH: 113, | |
EINPROGRESS: 115, | |
EALREADY: 114, | |
EDESTADDRREQ: 89, | |
EMSGSIZE: 90, | |
EPROTONOSUPPORT: 93, | |
ESOCKTNOSUPPORT: 94, | |
EADDRNOTAVAIL: 99, | |
ENETRESET: 102, | |
EISCONN: 106, | |
ENOTCONN: 107, | |
ETOOMANYREFS: 109, | |
EUSERS: 87, | |
EDQUOT: 122, | |
ESTALE: 116, | |
ENOTSUP: 95, | |
ENOMEDIUM: 123, | |
EILSEQ: 84, | |
EOVERFLOW: 75, | |
ECANCELED: 125, | |
ENOTRECOVERABLE: 131, | |
EOWNERDEAD: 130, | |
ESTRPIPE: 86 | |
}; | |
function _sysconf(name) { | |
// long sysconf(int name); | |
// http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html | |
switch (name) { | |
case 30: | |
return PAGE_SIZE; | |
case 85: | |
return totalMemory / PAGE_SIZE; | |
case 132: | |
case 133: | |
case 12: | |
case 137: | |
case 138: | |
case 15: | |
case 235: | |
case 16: | |
case 17: | |
case 18: | |
case 19: | |
case 20: | |
case 149: | |
case 13: | |
case 10: | |
case 236: | |
case 153: | |
case 9: | |
case 21: | |
case 22: | |
case 159: | |
case 154: | |
case 14: | |
case 77: | |
case 78: | |
case 139: | |
case 80: | |
case 81: | |
case 82: | |
case 68: | |
case 67: | |
case 164: | |
case 11: | |
case 29: | |
case 47: | |
case 48: | |
case 95: | |
case 52: | |
case 51: | |
case 46: | |
return 200809; | |
case 79: | |
return 0; | |
case 27: | |
case 246: | |
case 127: | |
case 128: | |
case 23: | |
case 24: | |
case 160: | |
case 161: | |
case 181: | |
case 182: | |
case 242: | |
case 183: | |
case 184: | |
case 243: | |
case 244: | |
case 245: | |
case 165: | |
case 178: | |
case 179: | |
case 49: | |
case 50: | |
case 168: | |
case 169: | |
case 175: | |
case 170: | |
case 171: | |
case 172: | |
case 97: | |
case 76: | |
case 32: | |
case 173: | |
case 35: | |
return -1; | |
case 176: | |
case 177: | |
case 7: | |
case 155: | |
case 8: | |
case 157: | |
case 125: | |
case 126: | |
case 92: | |
case 93: | |
case 129: | |
case 130: | |
case 131: | |
case 94: | |
case 91: | |
return 1; | |
case 74: | |
case 60: | |
case 69: | |
case 70: | |
case 4: | |
return 1024; | |
case 31: | |
case 42: | |
case 72: | |
return 32; | |
case 87: | |
case 26: | |
case 33: | |
return 2147483647; | |
case 34: | |
case 1: | |
return 47839; | |
case 38: | |
case 36: | |
return 99; | |
case 43: | |
case 37: | |
return 2048; | |
case 0: | |
return 2097152; | |
case 3: | |
return 65536; | |
case 28: | |
return 32768; | |
case 44: | |
return 32767; | |
case 75: | |
return 16384; | |
case 39: | |
return 1000; | |
case 89: | |
return 700; | |
case 71: | |
return 256; | |
case 40: | |
return 255; | |
case 2: | |
return 100; | |
case 180: | |
return 64; | |
case 25: | |
return 20; | |
case 5: | |
return 16; | |
case 6: | |
return 6; | |
case 73: | |
return 4; | |
case 84: | |
{ | |
if (typeof navigator === 'object') return navigator['hardwareConcurrency'] || 1; | |
return 1; | |
} | |
} | |
___setErrNo(ERRNO_CODES.EINVAL); | |
return -1; | |
} | |
var ERRNO_MESSAGES = { | |
0: "Success", | |
1: "Not super-user", | |
2: "No such file or directory", | |
3: "No such process", | |
4: "Interrupted system call", | |
5: "I/O error", | |
6: "No such device or address", | |
7: "Arg list too long", | |
8: "Exec format error", | |
9: "Bad file number", | |
10: "No children", | |
11: "No more processes", | |
12: "Not enough core", | |
13: "Permission denied", | |
14: "Bad address", | |
15: "Block device required", | |
16: "Mount device busy", | |
17: "File exists", | |
18: "Cross-device link", | |
19: "No such device", | |
20: "Not a directory", | |
21: "Is a directory", | |
22: "Invalid argument", | |
23: "Too many open files in system", | |
24: "Too many open files", | |
25: "Not a typewriter", | |
26: "Text file busy", | |
27: "File too large", | |
28: "No space left on device", | |
29: "Illegal seek", | |
30: "Read only file system", | |
31: "Too many links", | |
32: "Broken pipe", | |
33: "Math arg out of domain of func", | |
34: "Math result not representable", | |
35: "File locking deadlock error", | |
36: "File or path name too long", | |
37: "No record locks available", | |
38: "Function not implemented", | |
39: "Directory not empty", | |
40: "Too many symbolic links", | |
42: "No message of desired type", | |
43: "Identifier removed", | |
44: "Channel number out of range", | |
45: "Level 2 not synchronized", | |
46: "Level 3 halted", | |
47: "Level 3 reset", | |
48: "Link number out of range", | |
49: "Protocol driver not attached", | |
50: "No CSI structure available", | |
51: "Level 2 halted", | |
52: "Invalid exchange", | |
53: "Invalid request descriptor", | |
54: "Exchange full", | |
55: "No anode", | |
56: "Invalid request code", | |
57: "Invalid slot", | |
59: "Bad font file fmt", | |
60: "Device not a stream", | |
61: "No data (for no delay io)", | |
62: "Timer expired", | |
63: "Out of streams resources", | |
64: "Machine is not on the network", | |
65: "Package not installed", | |
66: "The object is remote", | |
67: "The link has been severed", | |
68: "Advertise error", | |
69: "Srmount error", | |
70: "Communication error on send", | |
71: "Protocol error", | |
72: "Multihop attempted", | |
73: "Cross mount point (not really error)", | |
74: "Trying to read unreadable message", | |
75: "Value too large for defined data type", | |
76: "Given log. name not unique", | |
77: "f.d. invalid for this operation", | |
78: "Remote address changed", | |
79: "Can access a needed shared lib", | |
80: "Accessing a corrupted shared lib", | |
81: ".lib section in a.out corrupted", | |
82: "Attempting to link in too many libs", | |
83: "Attempting to exec a shared library", | |
84: "Illegal byte sequence", | |
86: "Streams pipe error", | |
87: "Too many users", | |
88: "Socket operation on non-socket", | |
89: "Destination address required", | |
90: "Message too long", | |
91: "Protocol wrong type for socket", | |
92: "Protocol not available", | |
93: "Unknown protocol", | |
94: "Socket type not supported", | |
95: "Not supported", | |
96: "Protocol family not supported", | |
97: "Address family not supported by protocol family", | |
98: "Address already in use", | |
99: "Address not available", | |
100: "Network interface is not configured", | |
101: "Network is unreachable", | |
102: "Connection reset by network", | |
103: "Connection aborted", | |
104: "Connection reset by peer", | |
105: "No buffer space available", | |
106: "Socket is already connected", | |
107: "Socket is not connected", | |
108: "Can't send after socket shutdown", | |
109: "Too many references", | |
110: "Connection timed out", | |
111: "Connection refused", | |
112: "Host is down", | |
113: "Host is unreachable", | |
114: "Socket already connected", | |
115: "Connection already in progress", | |
116: "Stale file handle", | |
122: "Quota exceeded", | |
123: "No medium (in tape drive)", | |
125: "Operation canceled", | |
130: "Previous owner died", | |
131: "State not recoverable" | |
}; | |
var PATH = { | |
splitPath: function(filename) { | |
var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; | |
return splitPathRe.exec(filename).slice(1); | |
}, | |
normalizeArray: function(parts, allowAboveRoot) { | |
// if the path tries to go above the root, `up` ends up > 0 | |
var up = 0; | |
for (var i = parts.length - 1; i >= 0; i--) { | |
var last = parts[i]; | |
if (last === '.') { | |
parts.splice(i, 1); | |
} else if (last === '..') { | |
parts.splice(i, 1); | |
up++; | |
} else if (up) { | |
parts.splice(i, 1); | |
up--; | |
} | |
} | |
// if the path is allowed to go above the root, restore leading ..s | |
if (allowAboveRoot) { | |
for (; up--; up) { | |
parts.unshift('..'); | |
} | |
} | |
return parts; | |
}, | |
normalize: function(path) { | |
var isAbsolute = path.charAt(0) === '/', | |
trailingSlash = path.substr(-1) === '/'; | |
// Normalize the path | |
path = PATH.normalizeArray(path.split('/').filter(function(p) { | |
return !!p; | |
}), !isAbsolute).join('/'); | |
if (!path && !isAbsolute) { | |
path = '.'; | |
} | |
if (path && trailingSlash) { | |
path += '/'; | |
} | |
return (isAbsolute ? '/' : '') + path; | |
}, | |
dirname: function(path) { | |
var result = PATH.splitPath(path), | |
root = result[0], | |
dir = result[1]; | |
if (!root && !dir) { | |
// No dirname whatsoever | |
return '.'; | |
} | |
if (dir) { | |
// It has a dirname, strip trailing slash | |
dir = dir.substr(0, dir.length - 1); | |
} | |
return root + dir; | |
}, | |
basename: function(path) { | |
// EMSCRIPTEN return '/'' for '/', not an empty string | |
if (path === '/') return '/'; | |
var lastSlash = path.lastIndexOf('/'); | |
if (lastSlash === -1) return path; | |
return path.substr(lastSlash + 1); | |
}, | |
extname: function(path) { | |
return PATH.splitPath(path)[3]; | |
}, | |
join: function() { | |
var paths = Array.prototype.slice.call(arguments, 0); | |
return PATH.normalize(paths.join('/')); | |
}, | |
join2: function(l, r) { | |
return PATH.normalize(l + '/' + r); | |
}, | |
resolve: function() { | |
var resolvedPath = '', | |
resolvedAbsolute = false; | |
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { | |
var path = (i >= 0) ? arguments[i] : FS.cwd(); | |
// Skip empty and invalid entries | |
if (typeof path !== 'string') { | |
throw new TypeError('Arguments to path.resolve must be strings'); | |
} else if (!path) { | |
return ''; // an invalid portion invalidates the whole thing | |
} | |
resolvedPath = path + '/' + resolvedPath; | |
resolvedAbsolute = path.charAt(0) === '/'; | |
} | |
// At this point the path should be resolved to a full absolute path, but | |
// handle relative paths to be safe (might happen when process.cwd() fails) | |
resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) { | |
return !!p; | |
}), !resolvedAbsolute).join('/'); | |
return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; | |
}, | |
relative: function(from, to) { | |
from = PATH.resolve(from).substr(1); | |
to = PATH.resolve(to).substr(1); | |
function trim(arr) { | |
var start = 0; | |
for (; start < arr.length; start++) { | |
if (arr[start] !== '') break; | |
} | |
var end = arr.length - 1; | |
for (; end >= 0; end--) { | |
if (arr[end] !== '') break; | |
} | |
if (start > end) return []; | |
return arr.slice(start, end - start + 1); | |
} | |
var fromParts = trim(from.split('/')); | |
var toParts = trim(to.split('/')); | |
var length = Math.min(fromParts.length, toParts.length); | |
var samePartsLength = length; | |
for (var i = 0; i < length; i++) { | |
if (fromParts[i] !== toParts[i]) { | |
samePartsLength = i; | |
break; | |
} | |
} | |
var outputParts = []; | |
for (var i = samePartsLength; i < fromParts.length; i++) { | |
outputParts.push('..'); | |
} | |
outputParts = outputParts.concat(toParts.slice(samePartsLength)); | |
return outputParts.join('/'); | |
} | |
}; | |
var TTY = { | |
ttys: [], | |
init: function() { | |
// https://github.com/kripken/emscripten/pull/1555 | |
// if (ENVIRONMENT_IS_NODE) { | |
// // currently, FS.init does not distinguish if process.stdin is a file or TTY | |
// // device, it always assumes it's a TTY device. because of this, we're forcing | |
// // process.stdin to UTF8 encoding to at least make stdin reading compatible | |
// // with text files until FS.init can be refactored. | |
// process['stdin']['setEncoding']('utf8'); | |
// } | |
}, | |
shutdown: function() { | |
// https://github.com/kripken/emscripten/pull/1555 | |
// if (ENVIRONMENT_IS_NODE) { | |
// // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? | |
// // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation | |
// // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? | |
// // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle | |
// // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call | |
// process['stdin']['pause'](); | |
// } | |
}, | |
register: function(dev, ops) { | |
TTY.ttys[dev] = { | |
input: [], | |
output: [], | |
ops: ops | |
}; | |
FS.registerDevice(dev, TTY.stream_ops); | |
}, | |
stream_ops: { | |
open: function(stream) { | |
var tty = TTY.ttys[stream.node.rdev]; | |
if (!tty) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENODEV); | |
} | |
stream.tty = tty; | |
stream.seekable = false; | |
}, | |
close: function(stream) { | |
// flush any pending line data | |
stream.tty.ops.flush(stream.tty); | |
}, | |
flush: function(stream) { | |
stream.tty.ops.flush(stream.tty); | |
}, | |
read: function(stream, buffer, offset, length, pos /* ignored */ ) { | |
if (!stream.tty || !stream.tty.ops.get_char) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENXIO); | |
} | |
var bytesRead = 0; | |
for (var i = 0; i < length; i++) { | |
var result; | |
try { | |
result = stream.tty.ops.get_char(stream.tty); | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES.EIO); | |
} | |
if (result === undefined && bytesRead === 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); | |
} | |
if (result === null || result === undefined) break; | |
bytesRead++; | |
buffer[offset + i] = result; | |
} | |
if (bytesRead) { | |
stream.node.timestamp = Date.now(); | |
} | |
return bytesRead; | |
}, | |
write: function(stream, buffer, offset, length, pos) { | |
if (!stream.tty || !stream.tty.ops.put_char) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENXIO); | |
} | |
for (var i = 0; i < length; i++) { | |
try { | |
stream.tty.ops.put_char(stream.tty, buffer[offset + i]); | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES.EIO); | |
} | |
} | |
if (length) { | |
stream.node.timestamp = Date.now(); | |
} | |
return i; | |
} | |
}, | |
default_tty_ops: { | |
get_char: function(tty) { | |
if (!tty.input.length) { | |
var result = null; | |
if (ENVIRONMENT_IS_NODE) { | |
// we will read data by chunks of BUFSIZE | |
var BUFSIZE = 256; | |
var buf = new Buffer(BUFSIZE); | |
var bytesRead = 0; | |
var fd = process.stdin.fd; | |
// Linux and Mac cannot use process.stdin.fd (which isn't set up as sync) | |
var usingDevice = false; | |
try { | |
fd = fs.openSync('/dev/stdin', 'r'); | |
usingDevice = true; | |
} catch (e) {} | |
bytesRead = fs.readSync(fd, buf, 0, BUFSIZE, null); | |
if (usingDevice) { | |
fs.closeSync(fd); | |
} | |
if (bytesRead > 0) { | |
result = buf.slice(0, bytesRead).toString('utf-8'); | |
} else { | |
result = null; | |
} | |
} else if (typeof readline == 'function') { | |
// Command line. | |
result = readline(); | |
if (result !== null) { | |
result += '\n'; | |
} | |
} else if (typeof window != 'undefined' && | |
typeof window.prompt == 'function') { | |
// Browser. | |
result = window.prompt("input?"); | |
//console.log("look"); | |
if (result !== null) { | |
result += '\n'; | |
} | |
} | |
if (!result) { | |
return null; | |
} | |
tty.input = intArrayFromString(result, true); | |
} | |
return tty.input.shift(); | |
}, | |
put_char: function(tty, val) { | |
if (val === null || val === 10) { | |
Module['print'](UTF8ArrayToString(tty.output, 0)); | |
tty.output = []; | |
} else { | |
if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. | |
} | |
}, | |
flush: function(tty) { | |
if (tty.output && tty.output.length > 0) { | |
Module['print'](UTF8ArrayToString(tty.output, 0)); | |
tty.output = []; | |
} | |
} | |
}, | |
default_tty1_ops: { | |
put_char: function(tty, val) { | |
if (val === null || val === 10) { | |
Module['printErr'](UTF8ArrayToString(tty.output, 0)); | |
tty.output = []; | |
} else { | |
if (val != 0) tty.output.push(val); | |
} | |
}, | |
flush: function(tty) { | |
if (tty.output && tty.output.length > 0) { | |
Module['printErr'](UTF8ArrayToString(tty.output, 0)); | |
tty.output = []; | |
} | |
} | |
} | |
}; | |
var MEMFS = { | |
ops_table: null, | |
mount: function(mount) { | |
return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */ , 0); | |
}, | |
createNode: function(parent, name, mode, dev) { | |
if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { | |
// no supported | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
if (!MEMFS.ops_table) { | |
MEMFS.ops_table = { | |
dir: { | |
node: { | |
getattr: MEMFS.node_ops.getattr, | |
setattr: MEMFS.node_ops.setattr, | |
lookup: MEMFS.node_ops.lookup, | |
mknod: MEMFS.node_ops.mknod, | |
rename: MEMFS.node_ops.rename, | |
unlink: MEMFS.node_ops.unlink, | |
rmdir: MEMFS.node_ops.rmdir, | |
readdir: MEMFS.node_ops.readdir, | |
symlink: MEMFS.node_ops.symlink | |
}, | |
stream: { | |
llseek: MEMFS.stream_ops.llseek | |
} | |
}, | |
file: { | |
node: { | |
getattr: MEMFS.node_ops.getattr, | |
setattr: MEMFS.node_ops.setattr | |
}, | |
stream: { | |
llseek: MEMFS.stream_ops.llseek, | |
read: MEMFS.stream_ops.read, | |
write: MEMFS.stream_ops.write, | |
allocate: MEMFS.stream_ops.allocate, | |
mmap: MEMFS.stream_ops.mmap, | |
msync: MEMFS.stream_ops.msync | |
} | |
}, | |
link: { | |
node: { | |
getattr: MEMFS.node_ops.getattr, | |
setattr: MEMFS.node_ops.setattr, | |
readlink: MEMFS.node_ops.readlink | |
}, | |
stream: {} | |
}, | |
chrdev: { | |
node: { | |
getattr: MEMFS.node_ops.getattr, | |
setattr: MEMFS.node_ops.setattr | |
}, | |
stream: FS.chrdev_stream_ops | |
} | |
}; | |
} | |
var node = FS.createNode(parent, name, mode, dev); | |
if (FS.isDir(node.mode)) { | |
node.node_ops = MEMFS.ops_table.dir.node; | |
node.stream_ops = MEMFS.ops_table.dir.stream; | |
node.contents = {}; | |
} else if (FS.isFile(node.mode)) { | |
node.node_ops = MEMFS.ops_table.file.node; | |
node.stream_ops = MEMFS.ops_table.file.stream; | |
node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.buffer.byteLength which gives the whole capacity. | |
// When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred | |
// for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size | |
// penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. | |
node.contents = null; | |
} else if (FS.isLink(node.mode)) { | |
node.node_ops = MEMFS.ops_table.link.node; | |
node.stream_ops = MEMFS.ops_table.link.stream; | |
} else if (FS.isChrdev(node.mode)) { | |
node.node_ops = MEMFS.ops_table.chrdev.node; | |
node.stream_ops = MEMFS.ops_table.chrdev.stream; | |
} | |
node.timestamp = Date.now(); | |
// add the new node to the parent | |
if (parent) { | |
parent.contents[name] = node; | |
} | |
return node; | |
}, | |
getFileDataAsRegularArray: function(node) { | |
if (node.contents && node.contents.subarray) { | |
var arr = []; | |
for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); | |
return arr; // Returns a copy of the original data. | |
} | |
return node.contents; // No-op, the file contents are already in a JS array. Return as-is. | |
}, | |
getFileDataAsTypedArray: function(node) { | |
if (!node.contents) return new Uint8Array; | |
if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. | |
return new Uint8Array(node.contents); | |
}, | |
expandFileStorage: function(node, newCapacity) { | |
// If we are asked to expand the size of a file that already exists, revert to using a standard JS array to store the file | |
// instead of a typed array. This makes resizing the array more flexible because we can just .push() elements at the back to | |
// increase the size. | |
if (node.contents && node.contents.subarray && newCapacity > node.contents.length) { | |
node.contents = MEMFS.getFileDataAsRegularArray(node); | |
node.usedBytes = node.contents.length; // We might be writing to a lazy-loaded file which had overridden this property, so force-reset it. | |
} | |
if (!node.contents || node.contents.subarray) { // Keep using a typed array if creating a new storage, or if old one was a typed array as well. | |
var prevCapacity = node.contents ? node.contents.buffer.byteLength : 0; | |
if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. | |
// Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. | |
// For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to | |
// avoid overshooting the allocation cap by a very large margin. | |
var CAPACITY_DOUBLING_MAX = 1024 * 1024; | |
newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) | 0); | |
if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. | |
var oldContents = node.contents; | |
node.contents = new Uint8Array(newCapacity); // Allocate new storage. | |
if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. | |
return; | |
} | |
// Not using a typed array to back the file storage. Use a standard JS array instead. | |
if (!node.contents && newCapacity > 0) node.contents = []; | |
while (node.contents.length < newCapacity) node.contents.push(0); | |
}, | |
resizeFileStorage: function(node, newSize) { | |
if (node.usedBytes == newSize) return; | |
if (newSize == 0) { | |
node.contents = null; // Fully decommit when requesting a resize to zero. | |
node.usedBytes = 0; | |
return; | |
} | |
if (!node.contents || node.contents.subarray) { // Resize a typed array if that is being used as the backing store. | |
var oldContents = node.contents; | |
node.contents = new Uint8Array(new ArrayBuffer(newSize)); // Allocate new storage. | |
if (oldContents) { | |
node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. | |
} | |
node.usedBytes = newSize; | |
return; | |
} | |
// Backing with a JS array. | |
if (!node.contents) node.contents = []; | |
if (node.contents.length > newSize) node.contents.length = newSize; | |
else | |
while (node.contents.length < newSize) node.contents.push(0); | |
node.usedBytes = newSize; | |
}, | |
node_ops: { | |
getattr: function(node) { | |
var attr = {}; | |
// device numbers reuse inode numbers. | |
attr.dev = FS.isChrdev(node.mode) ? node.id : 1; | |
attr.ino = node.id; | |
attr.mode = node.mode; | |
attr.nlink = 1; | |
attr.uid = 0; | |
attr.gid = 0; | |
attr.rdev = node.rdev; | |
if (FS.isDir(node.mode)) { | |
attr.size = 4096; | |
} else if (FS.isFile(node.mode)) { | |
attr.size = node.usedBytes; | |
} else if (FS.isLink(node.mode)) { | |
attr.size = node.link.length; | |
} else { | |
attr.size = 0; | |
} | |
attr.atime = new Date(node.timestamp); | |
attr.mtime = new Date(node.timestamp); | |
attr.ctime = new Date(node.timestamp); | |
// NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), | |
// but this is not required by the standard. | |
attr.blksize = 4096; | |
attr.blocks = Math.ceil(attr.size / attr.blksize); | |
return attr; | |
}, | |
setattr: function(node, attr) { | |
if (attr.mode !== undefined) { | |
node.mode = attr.mode; | |
} | |
if (attr.timestamp !== undefined) { | |
node.timestamp = attr.timestamp; | |
} | |
if (attr.size !== undefined) { | |
MEMFS.resizeFileStorage(node, attr.size); | |
} | |
}, | |
lookup: function(parent, name) { | |
throw FS.genericErrors[ERRNO_CODES.ENOENT]; | |
}, | |
mknod: function(parent, name, mode, dev) { | |
return MEMFS.createNode(parent, name, mode, dev); | |
}, | |
rename: function(old_node, new_dir, new_name) { | |
// if we're overwriting a directory at new_name, make sure it's empty. | |
if (FS.isDir(old_node.mode)) { | |
var new_node; | |
try { | |
new_node = FS.lookupNode(new_dir, new_name); | |
} catch (e) {} | |
if (new_node) { | |
for (var i in new_node.contents) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); | |
} | |
} | |
} | |
// do the internal rewiring | |
delete old_node.parent.contents[old_node.name]; | |
old_node.name = new_name; | |
new_dir.contents[new_name] = old_node; | |
old_node.parent = new_dir; | |
}, | |
unlink: function(parent, name) { | |
delete parent.contents[name]; | |
}, | |
rmdir: function(parent, name) { | |
var node = FS.lookupNode(parent, name); | |
for (var i in node.contents) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); | |
} | |
delete parent.contents[name]; | |
}, | |
readdir: function(node) { | |
var entries = ['.', '..'] | |
for (var key in node.contents) { | |
if (!node.contents.hasOwnProperty(key)) { | |
continue; | |
} | |
entries.push(key); | |
} | |
return entries; | |
}, | |
symlink: function(parent, newname, oldpath) { | |
var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0); | |
node.link = oldpath; | |
return node; | |
}, | |
readlink: function(node) { | |
if (!FS.isLink(node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
return node.link; | |
} | |
}, | |
stream_ops: { | |
read: function(stream, buffer, offset, length, position) { | |
var contents = stream.node.contents; | |
if (position >= stream.node.usedBytes) return 0; | |
var size = Math.min(stream.node.usedBytes - position, length); | |
assert(size >= 0); | |
if (size > 8 && contents.subarray) { // non-trivial, and typed array | |
buffer.set(contents.subarray(position, position + size), offset); | |
} else { | |
for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; | |
} | |
return size; | |
}, | |
write: function(stream, buffer, offset, length, position, canOwn) { | |
if (!length) return 0; | |
var node = stream.node; | |
node.timestamp = Date.now(); | |
if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? | |
if (canOwn) { // Can we just reuse the buffer we are given? | |
node.contents = buffer.subarray(offset, offset + length); | |
node.usedBytes = length; | |
return length; | |
} else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. | |
node.contents = new Uint8Array(buffer.subarray(offset, offset + length)); | |
node.usedBytes = length; | |
return length; | |
} else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? | |
node.contents.set(buffer.subarray(offset, offset + length), position); | |
return length; | |
} | |
} | |
// Appending to an existing file and we need to reallocate, or source data did not come as a typed array. | |
MEMFS.expandFileStorage(node, position + length); | |
if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position); // Use typed array write if available. | |
else { | |
for (var i = 0; i < length; i++) { | |
node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. | |
} | |
} | |
node.usedBytes = Math.max(node.usedBytes, position + length); | |
return length; | |
}, | |
llseek: function(stream, offset, whence) { | |
var position = offset; | |
if (whence === 1) { // SEEK_CUR. | |
position += stream.position; | |
} else if (whence === 2) { // SEEK_END. | |
if (FS.isFile(stream.node.mode)) { | |
position += stream.node.usedBytes; | |
} | |
} | |
if (position < 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
return position; | |
}, | |
allocate: function(stream, offset, length) { | |
MEMFS.expandFileStorage(stream.node, offset + length); | |
stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); | |
}, | |
mmap: function(stream, buffer, offset, length, position, prot, flags) { | |
if (!FS.isFile(stream.node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENODEV); | |
} | |
var ptr; | |
var allocated; | |
var contents = stream.node.contents; | |
// Only make a new copy when MAP_PRIVATE is specified. | |
if (!(flags & 2) && | |
(contents.buffer === buffer || contents.buffer === buffer.buffer)) { | |
// We can't emulate MAP_SHARED when the file is not backed by the buffer | |
// we're mapping to (e.g. the HEAP buffer). | |
allocated = false; | |
ptr = contents.byteOffset; | |
} else { | |
// Try to avoid unnecessary slices. | |
if (position > 0 || position + length < stream.node.usedBytes) { | |
if (contents.subarray) { | |
contents = contents.subarray(position, position + length); | |
} else { | |
contents = Array.prototype.slice.call(contents, position, position + length); | |
} | |
} | |
allocated = true; | |
ptr = _malloc(length); | |
if (!ptr) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOMEM); | |
} | |
buffer.set(contents, ptr); | |
} | |
return { | |
ptr: ptr, | |
allocated: allocated | |
}; | |
}, | |
msync: function(stream, buffer, offset, length, mmapFlags) { | |
if (!FS.isFile(stream.node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENODEV); | |
} | |
if (mmapFlags & 2) { | |
// MAP_PRIVATE calls need not to be synced back to underlying fs | |
return 0; | |
} | |
var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); | |
// should we check if bytesWritten and length are the same? | |
return 0; | |
} | |
} | |
}; | |
var IDBFS = { | |
dbs: {}, | |
indexedDB: function() { | |
if (typeof indexedDB !== 'undefined') return indexedDB; | |
var ret = null; | |
if (typeof window === 'object') ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; | |
assert(ret, 'IDBFS used, but indexedDB not supported'); | |
return ret; | |
}, | |
DB_VERSION: 21, | |
DB_STORE_NAME: "FILE_DATA", | |
mount: function(mount) { | |
// reuse all of the core MEMFS functionality | |
return MEMFS.mount.apply(null, arguments); | |
}, | |
syncfs: function(mount, populate, callback) { | |
IDBFS.getLocalSet(mount, function(err, local) { | |
if (err) return callback(err); | |
IDBFS.getRemoteSet(mount, function(err, remote) { | |
if (err) return callback(err); | |
var src = populate ? remote : local; | |
var dst = populate ? local : remote; | |
IDBFS.reconcile(src, dst, callback); | |
}); | |
}); | |
}, | |
getDB: function(name, callback) { | |
// check the cache first | |
var db = IDBFS.dbs[name]; | |
if (db) { | |
return callback(null, db); | |
} | |
var req; | |
try { | |
req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION); | |
} catch (e) { | |
return callback(e); | |
} | |
req.onupgradeneeded = function(e) { | |
var db = e.target.result; | |
var transaction = e.target.transaction; | |
var fileStore; | |
if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) { | |
fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME); | |
} else { | |
fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME); | |
} | |
if (!fileStore.indexNames.contains('timestamp')) { | |
fileStore.createIndex('timestamp', 'timestamp', { | |
unique: false | |
}); | |
} | |
}; | |
req.onsuccess = function() { | |
db = req.result; | |
// add to the cache | |
IDBFS.dbs[name] = db; | |
callback(null, db); | |
}; | |
req.onerror = function(e) { | |
callback(this.error); | |
e.preventDefault(); | |
}; | |
}, | |
getLocalSet: function(mount, callback) { | |
var entries = {}; | |
function isRealDir(p) { | |
return p !== '.' && p !== '..'; | |
}; | |
function toAbsolute(root) { | |
return function(p) { | |
return PATH.join2(root, p); | |
} | |
}; | |
var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint)); | |
while (check.length) { | |
var path = check.pop(); | |
var stat; | |
try { | |
stat = FS.stat(path); | |
} catch (e) { | |
return callback(e); | |
} | |
if (FS.isDir(stat.mode)) { | |
check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path))); | |
} | |
entries[path] = { | |
timestamp: stat.mtime | |
}; | |
} | |
return callback(null, { | |
type: 'local', | |
entries: entries | |
}); | |
}, | |
getRemoteSet: function(mount, callback) { | |
var entries = {}; | |
IDBFS.getDB(mount.mountpoint, function(err, db) { | |
if (err) return callback(err); | |
var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly'); | |
transaction.onerror = function(e) { | |
callback(this.error); | |
e.preventDefault(); | |
}; | |
var store = transaction.objectStore(IDBFS.DB_STORE_NAME); | |
var index = store.index('timestamp'); | |
index.openKeyCursor().onsuccess = function(event) { | |
var cursor = event.target.result; | |
if (!cursor) { | |
return callback(null, { | |
type: 'remote', | |
db: db, | |
entries: entries | |
}); | |
} | |
entries[cursor.primaryKey] = { | |
timestamp: cursor.key | |
}; | |
cursor. | |
continue (); | |
}; | |
}); | |
}, | |
loadLocalEntry: function(path, callback) { | |
var stat, node; | |
try { | |
var lookup = FS.lookupPath(path); | |
node = lookup.node; | |
stat = FS.stat(path); | |
} catch (e) { | |
return callback(e); | |
} | |
if (FS.isDir(stat.mode)) { | |
return callback(null, { | |
timestamp: stat.mtime, | |
mode: stat.mode | |
}); | |
} else if (FS.isFile(stat.mode)) { | |
// Performance consideration: storing a normal JavaScript array to a IndexedDB is much slower than storing a typed array. | |
// Therefore always convert the file contents to a typed array first before writing the data to IndexedDB. | |
node.contents = MEMFS.getFileDataAsTypedArray(node); | |
return callback(null, { | |
timestamp: stat.mtime, | |
mode: stat.mode, | |
contents: node.contents | |
}); | |
} else { | |
return callback(new Error('node type not supported')); | |
} | |
}, | |
storeLocalEntry: function(path, entry, callback) { | |
try { | |
if (FS.isDir(entry.mode)) { | |
FS.mkdir(path, entry.mode); | |
} else if (FS.isFile(entry.mode)) { | |
FS.writeFile(path, entry.contents, { | |
encoding: 'binary', | |
canOwn: true | |
}); | |
} else { | |
return callback(new Error('node type not supported')); | |
} | |
FS.chmod(path, entry.mode); | |
FS.utime(path, entry.timestamp, entry.timestamp); | |
} catch (e) { | |
return callback(e); | |
} | |
callback(null); | |
}, | |
removeLocalEntry: function(path, callback) { | |
try { | |
var lookup = FS.lookupPath(path); | |
var stat = FS.stat(path); | |
if (FS.isDir(stat.mode)) { | |
FS.rmdir(path); | |
} else if (FS.isFile(stat.mode)) { | |
FS.unlink(path); | |
} | |
} catch (e) { | |
return callback(e); | |
} | |
callback(null); | |
}, | |
loadRemoteEntry: function(store, path, callback) { | |
var req = store.get(path); | |
req.onsuccess = function(event) { | |
callback(null, event.target.result); | |
}; | |
req.onerror = function(e) { | |
callback(this.error); | |
e.preventDefault(); | |
}; | |
}, | |
storeRemoteEntry: function(store, path, entry, callback) { | |
var req = store.put(entry, path); | |
req.onsuccess = function() { | |
callback(null); | |
}; | |
req.onerror = function(e) { | |
callback(this.error); | |
e.preventDefault(); | |
}; | |
}, | |
removeRemoteEntry: function(store, path, callback) { | |
var req = store.delete(path); | |
req.onsuccess = function() { | |
callback(null); | |
}; | |
req.onerror = function(e) { | |
callback(this.error); | |
e.preventDefault(); | |
}; | |
}, | |
reconcile: function(src, dst, callback) { | |
var total = 0; | |
var create = []; | |
Object.keys(src.entries).forEach(function(key) { | |
var e = src.entries[key]; | |
var e2 = dst.entries[key]; | |
if (!e2 || e.timestamp > e2.timestamp) { | |
create.push(key); | |
total++; | |
} | |
}); | |
var remove = []; | |
Object.keys(dst.entries).forEach(function(key) { | |
var e = dst.entries[key]; | |
var e2 = src.entries[key]; | |
if (!e2) { | |
remove.push(key); | |
total++; | |
} | |
}); | |
if (!total) { | |
return callback(null); | |
} | |
var errored = false; | |
var completed = 0; | |
var db = src.type === 'remote' ? src.db : dst.db; | |
var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite'); | |
var store = transaction.objectStore(IDBFS.DB_STORE_NAME); | |
function done(err) { | |
if (err) { | |
if (!done.errored) { | |
done.errored = true; | |
return callback(err); | |
} | |
return; | |
} | |
if (++completed >= total) { | |
return callback(null); | |
} | |
}; | |
transaction.onerror = function(e) { | |
done(this.error); | |
e.preventDefault(); | |
}; | |
// sort paths in ascending order so directory entries are created | |
// before the files inside them | |
create.sort().forEach(function(path) { | |
if (dst.type === 'local') { | |
IDBFS.loadRemoteEntry(store, path, function(err, entry) { | |
if (err) return done(err); | |
IDBFS.storeLocalEntry(path, entry, done); | |
}); | |
} else { | |
IDBFS.loadLocalEntry(path, function(err, entry) { | |
if (err) return done(err); | |
IDBFS.storeRemoteEntry(store, path, entry, done); | |
}); | |
} | |
}); | |
// sort paths in descending order so files are deleted before their | |
// parent directories | |
remove.sort().reverse().forEach(function(path) { | |
if (dst.type === 'local') { | |
IDBFS.removeLocalEntry(path, done); | |
} else { | |
IDBFS.removeRemoteEntry(store, path, done); | |
} | |
}); | |
} | |
}; | |
var NODEFS = { | |
isWindows: false, | |
staticInit: function() { | |
NODEFS.isWindows = !! process.platform.match(/^win/); | |
}, | |
mount: function(mount) { | |
assert(ENVIRONMENT_IS_NODE); | |
return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0); | |
}, | |
createNode: function(parent, name, mode, dev) { | |
if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
var node = FS.createNode(parent, name, mode); | |
node.node_ops = NODEFS.node_ops; | |
node.stream_ops = NODEFS.stream_ops; | |
return node; | |
}, | |
getMode: function(path) { | |
var stat; | |
try { | |
stat = fs.lstatSync(path); | |
if (NODEFS.isWindows) { | |
// On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so | |
// propagate write bits to execute bits. | |
stat.mode = stat.mode | ((stat.mode & 146) >> 1); | |
} | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
return stat.mode; | |
}, | |
realPath: function(node) { | |
var parts = []; | |
while (node.parent !== node) { | |
parts.push(node.name); | |
node = node.parent; | |
} | |
parts.push(node.mount.opts.root); | |
parts.reverse(); | |
return PATH.join.apply(null, parts); | |
}, | |
flagsToPermissionStringMap: { | |
0: "r", | |
1: "r+", | |
2: "r+", | |
64: "r", | |
65: "r+", | |
66: "r+", | |
129: "rx+", | |
193: "rx+", | |
514: "w+", | |
577: "w", | |
578: "w+", | |
705: "wx", | |
706: "wx+", | |
1024: "a", | |
1025: "a", | |
1026: "a+", | |
1089: "a", | |
1090: "a+", | |
1153: "ax", | |
1154: "ax+", | |
1217: "ax", | |
1218: "ax+", | |
4096: "rs", | |
4098: "rs+" | |
}, | |
flagsToPermissionString: function(flags) { | |
if (flags in NODEFS.flagsToPermissionStringMap) { | |
return NODEFS.flagsToPermissionStringMap[flags]; | |
} else { | |
return flags; | |
} | |
}, | |
node_ops: { | |
getattr: function(node) { | |
var path = NODEFS.realPath(node); | |
var stat; | |
try { | |
stat = fs.lstatSync(path); | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
// node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096. | |
// See http://support.microsoft.com/kb/140365 | |
if (NODEFS.isWindows && !stat.blksize) { | |
stat.blksize = 4096; | |
} | |
if (NODEFS.isWindows && !stat.blocks) { | |
stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0; | |
} | |
return { | |
dev: stat.dev, | |
ino: stat.ino, | |
mode: stat.mode, | |
nlink: stat.nlink, | |
uid: stat.uid, | |
gid: stat.gid, | |
rdev: stat.rdev, | |
size: stat.size, | |
atime: stat.atime, | |
mtime: stat.mtime, | |
ctime: stat.ctime, | |
blksize: stat.blksize, | |
blocks: stat.blocks | |
}; | |
}, | |
setattr: function(node, attr) { | |
var path = NODEFS.realPath(node); | |
try { | |
if (attr.mode !== undefined) { | |
fs.chmodSync(path, attr.mode); | |
// update the common node structure mode as well | |
node.mode = attr.mode; | |
} | |
if (attr.timestamp !== undefined) { | |
var date = new Date(attr.timestamp); | |
fs.utimesSync(path, date, date); | |
} | |
if (attr.size !== undefined) { | |
fs.truncateSync(path, attr.size); | |
} | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
}, | |
lookup: function(parent, name) { | |
var path = PATH.join2(NODEFS.realPath(parent), name); | |
var mode = NODEFS.getMode(path); | |
return NODEFS.createNode(parent, name, mode); | |
}, | |
mknod: function(parent, name, mode, dev) { | |
var node = NODEFS.createNode(parent, name, mode, dev); | |
// create the backing node for this in the fs root as well | |
var path = NODEFS.realPath(node); | |
try { | |
if (FS.isDir(node.mode)) { | |
fs.mkdirSync(path, node.mode); | |
} else { | |
fs.writeFileSync(path, '', { | |
mode: node.mode | |
}); | |
} | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
return node; | |
}, | |
rename: function(oldNode, newDir, newName) { | |
var oldPath = NODEFS.realPath(oldNode); | |
var newPath = PATH.join2(NODEFS.realPath(newDir), newName); | |
try { | |
fs.renameSync(oldPath, newPath); | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
}, | |
unlink: function(parent, name) { | |
var path = PATH.join2(NODEFS.realPath(parent), name); | |
try { | |
fs.unlinkSync(path); | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
}, | |
rmdir: function(parent, name) { | |
var path = PATH.join2(NODEFS.realPath(parent), name); | |
try { | |
fs.rmdirSync(path); | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
}, | |
readdir: function(node) { | |
var path = NODEFS.realPath(node); | |
try { | |
return fs.readdirSync(path); | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
}, | |
symlink: function(parent, newName, oldPath) { | |
var newPath = PATH.join2(NODEFS.realPath(parent), newName); | |
try { | |
fs.symlinkSync(oldPath, newPath); | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
}, | |
readlink: function(node) { | |
var path = NODEFS.realPath(node); | |
try { | |
path = fs.readlinkSync(path); | |
path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path); | |
return path; | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
} | |
}, | |
stream_ops: { | |
open: function(stream) { | |
var path = NODEFS.realPath(stream.node); | |
try { | |
if (FS.isFile(stream.node.mode)) { | |
stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags)); | |
} | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
}, | |
close: function(stream) { | |
try { | |
if (FS.isFile(stream.node.mode) && stream.nfd) { | |
fs.closeSync(stream.nfd); | |
} | |
} catch (e) { | |
if (!e.code) throw e; | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
}, | |
read: function(stream, buffer, offset, length, position) { | |
if (length === 0) return 0; // node errors on 0 length reads | |
// FIXME this is terrible. | |
var nbuffer = new Buffer(length); | |
var res; | |
try { | |
res = fs.readSync(stream.nfd, nbuffer, 0, length, position); | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
if (res > 0) { | |
for (var i = 0; i < res; i++) { | |
buffer[offset + i] = nbuffer[i]; | |
} | |
} | |
return res; | |
}, | |
write: function(stream, buffer, offset, length, position) { | |
// FIXME this is terrible. | |
var nbuffer = new Buffer(buffer.subarray(offset, offset + length)); | |
var res; | |
try { | |
res = fs.writeSync(stream.nfd, nbuffer, 0, length, position); | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
return res; | |
}, | |
llseek: function(stream, offset, whence) { | |
var position = offset; | |
if (whence === 1) { // SEEK_CUR. | |
position += stream.position; | |
} else if (whence === 2) { // SEEK_END. | |
if (FS.isFile(stream.node.mode)) { | |
try { | |
var stat = fs.fstatSync(stream.nfd); | |
position += stat.size; | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES[e.code]); | |
} | |
} | |
} | |
if (position < 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
return position; | |
} | |
} | |
}; | |
var _stdin = allocate(1, "i32*", ALLOC_STATIC); | |
var _stdout = allocate(1, "i32*", ALLOC_STATIC); | |
var _stderr = allocate(1, "i32*", ALLOC_STATIC); | |
function _fflush(stream) { | |
// int fflush(FILE *stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html | |
/* | |
// Disabled, see https://github.com/kripken/emscripten/issues/2770 | |
stream = FS.getStreamFromPtr(stream); | |
if (stream.stream_ops.flush) { | |
stream.stream_ops.flush(stream); | |
} | |
*/ | |
} | |
var FS = { | |
root: null, | |
mounts: [], | |
devices: [null], | |
streams: [], | |
nextInode: 1, | |
nameTable: null, | |
currentPath: "/", | |
initialized: false, | |
ignorePermissions: true, | |
trackingDelegate: {}, | |
tracking: { | |
openFlags: { | |
READ: 1, | |
WRITE: 2 | |
} | |
}, | |
ErrnoError: null, | |
genericErrors: {}, | |
handleFSError: function(e) { | |
if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace(); | |
return ___setErrNo(e.errno); | |
}, | |
lookupPath: function(path, opts) { | |
path = PATH.resolve(FS.cwd(), path); | |
opts = opts || {}; | |
if (!path) return { | |
path: '', | |
node: null | |
}; | |
var defaults = { | |
follow_mount: true, | |
recurse_count: 0 | |
}; | |
for (var key in defaults) { | |
if (opts[key] === undefined) { | |
opts[key] = defaults[key]; | |
} | |
} | |
if (opts.recurse_count > 8) { // max recursive lookup of 8 | |
throw new FS.ErrnoError(ERRNO_CODES.ELOOP); | |
} | |
// split the path | |
var parts = PATH.normalizeArray(path.split('/').filter(function(p) { | |
return !!p; | |
}), false); | |
// start at the root | |
var current = FS.root; | |
var current_path = '/'; | |
for (var i = 0; i < parts.length; i++) { | |
var islast = (i === parts.length - 1); | |
if (islast && opts.parent) { | |
// stop resolving | |
break; | |
} | |
current = FS.lookupNode(current, parts[i]); | |
current_path = PATH.join2(current_path, parts[i]); | |
// jump to the mount's root node if this is a mountpoint | |
if (FS.isMountpoint(current)) { | |
if (!islast || (islast && opts.follow_mount)) { | |
current = current.mounted.root; | |
} | |
} | |
// by default, lookupPath will not follow a symlink if it is the final path component. | |
// setting opts.follow = true will override this behavior. | |
if (!islast || opts.follow) { | |
var count = 0; | |
while (FS.isLink(current.mode)) { | |
var link = FS.readlink(current_path); | |
current_path = PATH.resolve(PATH.dirname(current_path), link); | |
var lookup = FS.lookupPath(current_path, { | |
recurse_count: opts.recurse_count | |
}); | |
current = lookup.node; | |
if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). | |
throw new FS.ErrnoError(ERRNO_CODES.ELOOP); | |
} | |
} | |
} | |
} | |
return { | |
path: current_path, | |
node: current | |
}; | |
}, | |
getPath: function(node) { | |
var path; | |
while (true) { | |
if (FS.isRoot(node)) { | |
var mount = node.mount.mountpoint; | |
if (!path) return mount; | |
return mount[mount.length - 1] !== '/' ? mount + '/' + path : mount + path; | |
} | |
path = path ? node.name + '/' + path : node.name; | |
node = node.parent; | |
} | |
}, | |
hashName: function(parentid, name) { | |
var hash = 0; | |
for (var i = 0; i < name.length; i++) { | |
hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; | |
} | |
return ((parentid + hash) >>> 0) % FS.nameTable.length; | |
}, | |
hashAddNode: function(node) { | |
var hash = FS.hashName(node.parent.id, node.name); | |
node.name_next = FS.nameTable[hash]; | |
FS.nameTable[hash] = node; | |
}, | |
hashRemoveNode: function(node) { | |
var hash = FS.hashName(node.parent.id, node.name); | |
if (FS.nameTable[hash] === node) { | |
FS.nameTable[hash] = node.name_next; | |
} else { | |
var current = FS.nameTable[hash]; | |
while (current) { | |
if (current.name_next === node) { | |
current.name_next = node.name_next; | |
break; | |
} | |
current = current.name_next; | |
} | |
} | |
}, | |
lookupNode: function(parent, name) { | |
var err = FS.mayLookup(parent); | |
if (err) { | |
throw new FS.ErrnoError(err, parent); | |
} | |
var hash = FS.hashName(parent.id, name); | |
for (var node = FS.nameTable[hash]; node; node = node.name_next) { | |
var nodeName = node.name; | |
if (node.parent.id === parent.id && nodeName === name) { | |
return node; | |
} | |
} | |
// if we failed to find it in the cache, call into the VFS | |
return FS.lookup(parent, name); | |
}, | |
createNode: function(parent, name, mode, rdev) { | |
if (!FS.FSNode) { | |
FS.FSNode = function(parent, name, mode, rdev) { | |
if (!parent) { | |
parent = this; // root node sets parent to itself | |
} | |
this.parent = parent; | |
this.mount = parent.mount; | |
this.mounted = null; | |
this.id = FS.nextInode++; | |
this.name = name; | |
this.mode = mode; | |
this.node_ops = {}; | |
this.stream_ops = {}; | |
this.rdev = rdev; | |
}; | |
FS.FSNode.prototype = {}; | |
// compatibility | |
var readMode = 292 | 73; | |
var writeMode = 146; | |
// NOTE we must use Object.defineProperties instead of individual calls to | |
// Object.defineProperty in order to make closure compiler happy | |
Object.defineProperties(FS.FSNode.prototype, { | |
read: { | |
get: function() { | |
return (this.mode & readMode) === readMode; | |
}, | |
set: function(val) { | |
val ? this.mode |= readMode : this.mode &= ~readMode; | |
} | |
}, | |
write: { | |
get: function() { | |
return (this.mode & writeMode) === writeMode; | |
}, | |
set: function(val) { | |
val ? this.mode |= writeMode : this.mode &= ~writeMode; | |
} | |
}, | |
isFolder: { | |
get: function() { | |
return FS.isDir(this.mode); | |
} | |
}, | |
isDevice: { | |
get: function() { | |
return FS.isChrdev(this.mode); | |
} | |
} | |
}); | |
} | |
var node = new FS.FSNode(parent, name, mode, rdev); | |
FS.hashAddNode(node); | |
return node; | |
}, | |
destroyNode: function(node) { | |
FS.hashRemoveNode(node); | |
}, | |
isRoot: function(node) { | |
return node === node.parent; | |
}, | |
isMountpoint: function(node) { | |
return !!node.mounted; | |
}, | |
isFile: function(mode) { | |
return (mode & 61440) === 32768; | |
}, | |
isDir: function(mode) { | |
return (mode & 61440) === 16384; | |
}, | |
isLink: function(mode) { | |
return (mode & 61440) === 40960; | |
}, | |
isChrdev: function(mode) { | |
return (mode & 61440) === 8192; | |
}, | |
isBlkdev: function(mode) { | |
return (mode & 61440) === 24576; | |
}, | |
isFIFO: function(mode) { | |
return (mode & 61440) === 4096; | |
}, | |
isSocket: function(mode) { | |
return (mode & 49152) === 49152; | |
}, | |
flagModes: { | |
"r": 0, | |
"rs": 1052672, | |
"r+": 2, | |
"w": 577, | |
"wx": 705, | |
"xw": 705, | |
"w+": 578, | |
"wx+": 706, | |
"xw+": 706, | |
"a": 1089, | |
"ax": 1217, | |
"xa": 1217, | |
"a+": 1090, | |
"ax+": 1218, | |
"xa+": 1218 | |
}, | |
modeStringToFlags: function(str) { | |
var flags = FS.flagModes[str]; | |
if (typeof flags === 'undefined') { | |
throw new Error('Unknown file open mode: ' + str); | |
} | |
return flags; | |
}, | |
flagsToPermissionString: function(flag) { | |
var accmode = flag & 2097155; | |
var perms = ['r', 'w', 'rw'][accmode]; | |
if ((flag & 512)) { | |
perms += 'w'; | |
} | |
return perms; | |
}, | |
nodePermissions: function(node, perms) { | |
if (FS.ignorePermissions) { | |
return 0; | |
} | |
// return 0 if any user, group or owner bits are set. | |
if (perms.indexOf('r') !== -1 && !(node.mode & 292)) { | |
return ERRNO_CODES.EACCES; | |
} else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) { | |
return ERRNO_CODES.EACCES; | |
} else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) { | |
return ERRNO_CODES.EACCES; | |
} | |
return 0; | |
}, | |
mayLookup: function(dir) { | |
var err = FS.nodePermissions(dir, 'x'); | |
if (err) return err; | |
if (!dir.node_ops.lookup) return ERRNO_CODES.EACCES; | |
return 0; | |
}, | |
mayCreate: function(dir, name) { | |
try { | |
var node = FS.lookupNode(dir, name); | |
return ERRNO_CODES.EEXIST; | |
} catch (e) {} | |
return FS.nodePermissions(dir, 'wx'); | |
}, | |
mayDelete: function(dir, name, isdir) { | |
var node; | |
try { | |
node = FS.lookupNode(dir, name); | |
} catch (e) { | |
return e.errno; | |
} | |
var err = FS.nodePermissions(dir, 'wx'); | |
if (err) { | |
return err; | |
} | |
if (isdir) { | |
if (!FS.isDir(node.mode)) { | |
return ERRNO_CODES.ENOTDIR; | |
} | |
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { | |
return ERRNO_CODES.EBUSY; | |
} | |
} else { | |
if (FS.isDir(node.mode)) { | |
return ERRNO_CODES.EISDIR; | |
} | |
} | |
return 0; | |
}, | |
mayOpen: function(node, flags) { | |
if (!node) { | |
return ERRNO_CODES.ENOENT; | |
} | |
if (FS.isLink(node.mode)) { | |
return ERRNO_CODES.ELOOP; | |
} else if (FS.isDir(node.mode)) { | |
if ((flags & 2097155) !== 0 || // opening for write | |
(flags & 512)) { | |
return ERRNO_CODES.EISDIR; | |
} | |
} | |
return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); | |
}, | |
MAX_OPEN_FDS: 4096, | |
nextfd: function(fd_start, fd_end) { | |
fd_start = fd_start || 0; | |
fd_end = fd_end || FS.MAX_OPEN_FDS; | |
for (var fd = fd_start; fd <= fd_end; fd++) { | |
if (!FS.streams[fd]) { | |
return fd; | |
} | |
} | |
throw new FS.ErrnoError(ERRNO_CODES.EMFILE); | |
}, | |
getStream: function(fd) { | |
return FS.streams[fd]; | |
}, | |
createStream: function(stream, fd_start, fd_end) { | |
if (!FS.FSStream) { | |
FS.FSStream = function() {}; | |
FS.FSStream.prototype = {}; | |
// compatibility | |
Object.defineProperties(FS.FSStream.prototype, { | |
object: { | |
get: function() { | |
return this.node; | |
}, | |
set: function(val) { | |
this.node = val; | |
} | |
}, | |
isRead: { | |
get: function() { | |
return (this.flags & 2097155) !== 1; | |
} | |
}, | |
isWrite: { | |
get: function() { | |
return (this.flags & 2097155) !== 0; | |
} | |
}, | |
isAppend: { | |
get: function() { | |
return (this.flags & 1024); | |
} | |
} | |
}); | |
} | |
// clone it, so we can return an instance of FSStream | |
var newStream = new FS.FSStream(); | |
for (var p in stream) { | |
newStream[p] = stream[p]; | |
} | |
stream = newStream; | |
var fd = FS.nextfd(fd_start, fd_end); | |
stream.fd = fd; | |
FS.streams[fd] = stream; | |
return stream; | |
}, | |
closeStream: function(fd) { | |
FS.streams[fd] = null; | |
}, | |
getStreamFromPtr: function(ptr) { | |
return FS.streams[ptr - 1]; | |
}, | |
getPtrForStream: function(stream) { | |
return stream ? stream.fd + 1 : 0; | |
}, | |
chrdev_stream_ops: { | |
open: function(stream) { | |
var device = FS.getDevice(stream.node.rdev); | |
// override node's stream ops with the device's | |
stream.stream_ops = device.stream_ops; | |
// forward the open call | |
if (stream.stream_ops.open) { | |
stream.stream_ops.open(stream); | |
} | |
}, | |
llseek: function() { | |
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); | |
} | |
}, | |
major: function(dev) { | |
return ((dev) >> 8); | |
}, | |
minor: function(dev) { | |
return ((dev) & 0xff); | |
}, | |
makedev: function(ma, mi) { | |
return ((ma) << 8 | (mi)); | |
}, | |
registerDevice: function(dev, ops) { | |
FS.devices[dev] = { | |
stream_ops: ops | |
}; | |
}, | |
getDevice: function(dev) { | |
return FS.devices[dev]; | |
}, | |
getMounts: function(mount) { | |
var mounts = []; | |
var check = [mount]; | |
while (check.length) { | |
var m = check.pop(); | |
mounts.push(m); | |
check.push.apply(check, m.mounts); | |
} | |
return mounts; | |
}, | |
syncfs: function(populate, callback) { | |
if (typeof(populate) === 'function') { | |
callback = populate; | |
populate = false; | |
} | |
var mounts = FS.getMounts(FS.root.mount); | |
var completed = 0; | |
function done(err) { | |
if (err) { | |
if (!done.errored) { | |
done.errored = true; | |
return callback(err); | |
} | |
return; | |
} | |
if (++completed >= mounts.length) { | |
callback(null); | |
} | |
}; | |
// sync all mounts | |
mounts.forEach(function(mount) { | |
if (!mount.type.syncfs) { | |
return done(null); | |
} | |
mount.type.syncfs(mount, populate, done); | |
}); | |
}, | |
mount: function(type, opts, mountpoint) { | |
var root = mountpoint === '/'; | |
var pseudo = !mountpoint; | |
var node; | |
if (root && FS.root) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBUSY); | |
} else if (!root && !pseudo) { | |
var lookup = FS.lookupPath(mountpoint, { | |
follow_mount: false | |
}); | |
mountpoint = lookup.path; // use the absolute path | |
node = lookup.node; | |
if (FS.isMountpoint(node)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBUSY); | |
} | |
if (!FS.isDir(node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); | |
} | |
} | |
var mount = { | |
type: type, | |
opts: opts, | |
mountpoint: mountpoint, | |
mounts: [] | |
}; | |
// create a root node for the fs | |
var mountRoot = type.mount(mount); | |
mountRoot.mount = mount; | |
mount.root = mountRoot; | |
if (root) { | |
FS.root = mountRoot; | |
} else if (node) { | |
// set as a mountpoint | |
node.mounted = mount; | |
// add the new mount to the current mount's children | |
if (node.mount) { | |
node.mount.mounts.push(mount); | |
} | |
} | |
return mountRoot; | |
}, | |
unmount: function(mountpoint) { | |
var lookup = FS.lookupPath(mountpoint, { | |
follow_mount: false | |
}); | |
if (!FS.isMountpoint(lookup.node)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
// destroy the nodes for this mount, and all its child mounts | |
var node = lookup.node; | |
var mount = node.mounted; | |
var mounts = FS.getMounts(mount); | |
Object.keys(FS.nameTable).forEach(function(hash) { | |
var current = FS.nameTable[hash]; | |
while (current) { | |
var next = current.name_next; | |
if (mounts.indexOf(current.mount) !== -1) { | |
FS.destroyNode(current); | |
} | |
current = next; | |
} | |
}); | |
// no longer a mountpoint | |
node.mounted = null; | |
// remove this mount from the child mounts | |
var idx = node.mount.mounts.indexOf(mount); | |
assert(idx !== -1); | |
node.mount.mounts.splice(idx, 1); | |
}, | |
lookup: function(parent, name) { | |
return parent.node_ops.lookup(parent, name); | |
}, | |
mknod: function(path, mode, dev) { | |
var lookup = FS.lookupPath(path, { | |
parent: true | |
}); | |
var parent = lookup.node; | |
var name = PATH.basename(path); | |
if (!name || name === '.' || name === '..') { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
var err = FS.mayCreate(parent, name); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
if (!parent.node_ops.mknod) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
return parent.node_ops.mknod(parent, name, mode, dev); | |
}, | |
create: function(path, mode) { | |
mode = mode !== undefined ? mode : 438 /* 0666 */ ; | |
mode &= 4095; | |
mode |= 32768; | |
return FS.mknod(path, mode, 0); | |
}, | |
mkdir: function(path, mode) { | |
mode = mode !== undefined ? mode : 511 /* 0777 */ ; | |
mode &= 511 | 512; | |
mode |= 16384; | |
return FS.mknod(path, mode, 0); | |
}, | |
mkdev: function(path, mode, dev) { | |
if (typeof(dev) === 'undefined') { | |
dev = mode; | |
mode = 438 /* 0666 */ ; | |
} | |
mode |= 8192; | |
return FS.mknod(path, mode, dev); | |
}, | |
symlink: function(oldpath, newpath) { | |
if (!PATH.resolve(oldpath)) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOENT); | |
} | |
var lookup = FS.lookupPath(newpath, { | |
parent: true | |
}); | |
var parent = lookup.node; | |
if (!parent) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOENT); | |
} | |
var newname = PATH.basename(newpath); | |
var err = FS.mayCreate(parent, newname); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
if (!parent.node_ops.symlink) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
return parent.node_ops.symlink(parent, newname, oldpath); | |
}, | |
rename: function(old_path, new_path) { | |
var old_dirname = PATH.dirname(old_path); | |
var new_dirname = PATH.dirname(new_path); | |
var old_name = PATH.basename(old_path); | |
var new_name = PATH.basename(new_path); | |
// parents must exist | |
var lookup, old_dir, new_dir; | |
try { | |
lookup = FS.lookupPath(old_path, { | |
parent: true | |
}); | |
old_dir = lookup.node; | |
lookup = FS.lookupPath(new_path, { | |
parent: true | |
}); | |
new_dir = lookup.node; | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBUSY); | |
} | |
if (!old_dir || !new_dir) throw new FS.ErrnoError(ERRNO_CODES.ENOENT); | |
// need to be part of the same mount | |
if (old_dir.mount !== new_dir.mount) { | |
throw new FS.ErrnoError(ERRNO_CODES.EXDEV); | |
} | |
// source must exist | |
var old_node = FS.lookupNode(old_dir, old_name); | |
// old path should not be an ancestor of the new path | |
var relative = PATH.relative(old_path, new_dirname); | |
if (relative.charAt(0) !== '.') { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
// new path should not be an ancestor of the old path | |
relative = PATH.relative(new_path, old_dirname); | |
if (relative.charAt(0) !== '.') { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); | |
} | |
// see if the new path already exists | |
var new_node; | |
try { | |
new_node = FS.lookupNode(new_dir, new_name); | |
} catch (e) { | |
// not fatal | |
} | |
// early out if nothing needs to change | |
if (old_node === new_node) { | |
return; | |
} | |
// we'll need to delete the old entry | |
var isdir = FS.isDir(old_node.mode); | |
var err = FS.mayDelete(old_dir, old_name, isdir); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
// need delete permissions if we'll be overwriting. | |
// need create permissions if new doesn't already exist. | |
err = new_node ? | |
FS.mayDelete(new_dir, new_name, isdir) : | |
FS.mayCreate(new_dir, new_name); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
if (!old_dir.node_ops.rename) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBUSY); | |
} | |
// if we are going to change the parent, check write permissions | |
if (new_dir !== old_dir) { | |
err = FS.nodePermissions(old_dir, 'w'); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
} | |
try { | |
if (FS.trackingDelegate['willMovePath']) { | |
FS.trackingDelegate['willMovePath'](old_path, new_path); | |
} | |
} catch (e) { | |
console.log("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message); | |
} | |
// remove the node from the lookup hash | |
FS.hashRemoveNode(old_node); | |
// do the underlying fs rename | |
try { | |
old_dir.node_ops.rename(old_node, new_dir, new_name); | |
} catch (e) { | |
throw e; | |
} finally { | |
// add the node back to the hash (in case node_ops.rename | |
// changed its name) | |
FS.hashAddNode(old_node); | |
} | |
try { | |
if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path); | |
} catch (e) { | |
console.log("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message); | |
} | |
}, | |
rmdir: function(path) { | |
var lookup = FS.lookupPath(path, { | |
parent: true | |
}); | |
var parent = lookup.node; | |
var name = PATH.basename(path); | |
var node = FS.lookupNode(parent, name); | |
var err = FS.mayDelete(parent, name, true); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
if (!parent.node_ops.rmdir) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
if (FS.isMountpoint(node)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBUSY); | |
} | |
try { | |
if (FS.trackingDelegate['willDeletePath']) { | |
FS.trackingDelegate['willDeletePath'](path); | |
} | |
} catch (e) { | |
console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message); | |
} | |
parent.node_ops.rmdir(parent, name); | |
FS.destroyNode(node); | |
try { | |
if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); | |
} catch (e) { | |
console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message); | |
} | |
}, | |
readdir: function(path) { | |
var lookup = FS.lookupPath(path, { | |
follow: true | |
}); | |
var node = lookup.node; | |
if (!node.node_ops.readdir) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); | |
} | |
return node.node_ops.readdir(node); | |
}, | |
unlink: function(path) { | |
var lookup = FS.lookupPath(path, { | |
parent: true | |
}); | |
var parent = lookup.node; | |
var name = PATH.basename(path); | |
var node = FS.lookupNode(parent, name); | |
var err = FS.mayDelete(parent, name, false); | |
if (err) { | |
// POSIX says unlink should set EPERM, not EISDIR | |
if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM; | |
throw new FS.ErrnoError(err); | |
} | |
if (!parent.node_ops.unlink) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
if (FS.isMountpoint(node)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBUSY); | |
} | |
try { | |
if (FS.trackingDelegate['willDeletePath']) { | |
FS.trackingDelegate['willDeletePath'](path); | |
} | |
} catch (e) { | |
console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message); | |
} | |
parent.node_ops.unlink(parent, name); | |
FS.destroyNode(node); | |
try { | |
if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); | |
} catch (e) { | |
console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message); | |
} | |
}, | |
readlink: function(path) { | |
var lookup = FS.lookupPath(path); | |
var link = lookup.node; | |
if (!link) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOENT); | |
} | |
if (!link.node_ops.readlink) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
return PATH.resolve(FS.getPath(lookup.node.parent), link.node_ops.readlink(link)); | |
}, | |
stat: function(path, dontFollow) { | |
var lookup = FS.lookupPath(path, { | |
follow: !dontFollow | |
}); | |
var node = lookup.node; | |
if (!node) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOENT); | |
} | |
if (!node.node_ops.getattr) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
return node.node_ops.getattr(node); | |
}, | |
lstat: function(path) { | |
return FS.stat(path, true); | |
}, | |
chmod: function(path, mode, dontFollow) { | |
var node; | |
if (typeof path === 'string') { | |
var lookup = FS.lookupPath(path, { | |
follow: !dontFollow | |
}); | |
node = lookup.node; | |
} else { | |
node = path; | |
} | |
if (!node.node_ops.setattr) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
node.node_ops.setattr(node, { | |
mode: (mode & 4095) | (node.mode & ~4095), | |
timestamp: Date.now() | |
}); | |
}, | |
lchmod: function(path, mode) { | |
FS.chmod(path, mode, true); | |
}, | |
fchmod: function(fd, mode) { | |
var stream = FS.getStream(fd); | |
if (!stream) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBADF); | |
} | |
FS.chmod(stream.node, mode); | |
}, | |
chown: function(path, uid, gid, dontFollow) { | |
var node; | |
if (typeof path === 'string') { | |
var lookup = FS.lookupPath(path, { | |
follow: !dontFollow | |
}); | |
node = lookup.node; | |
} else { | |
node = path; | |
} | |
if (!node.node_ops.setattr) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
node.node_ops.setattr(node, { | |
timestamp: Date.now() | |
// we ignore the uid / gid for now | |
}); | |
}, | |
lchown: function(path, uid, gid) { | |
FS.chown(path, uid, gid, true); | |
}, | |
fchown: function(fd, uid, gid) { | |
var stream = FS.getStream(fd); | |
if (!stream) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBADF); | |
} | |
FS.chown(stream.node, uid, gid); | |
}, | |
truncate: function(path, len) { | |
if (len < 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
var node; | |
if (typeof path === 'string') { | |
var lookup = FS.lookupPath(path, { | |
follow: true | |
}); | |
node = lookup.node; | |
} else { | |
node = path; | |
} | |
if (!node.node_ops.setattr) { | |
throw new FS.ErrnoError(ERRNO_CODES.EPERM); | |
} | |
if (FS.isDir(node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EISDIR); | |
} | |
if (!FS.isFile(node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
var err = FS.nodePermissions(node, 'w'); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
node.node_ops.setattr(node, { | |
size: len, | |
timestamp: Date.now() | |
}); | |
}, | |
ftruncate: function(fd, len) { | |
var stream = FS.getStream(fd); | |
if (!stream) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBADF); | |
} | |
if ((stream.flags & 2097155) === 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
FS.truncate(stream.node, len); | |
}, | |
utime: function(path, atime, mtime) { | |
var lookup = FS.lookupPath(path, { | |
follow: true | |
}); | |
var node = lookup.node; | |
node.node_ops.setattr(node, { | |
timestamp: Math.max(atime, mtime) | |
}); | |
}, | |
open: function(path, flags, mode, fd_start, fd_end) { | |
if (path === "") { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOENT); | |
} | |
flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags; | |
mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode; | |
if ((flags & 64)) { | |
mode = (mode & 4095) | 32768; | |
} else { | |
mode = 0; | |
} | |
var node; | |
if (typeof path === 'object') { | |
node = path; | |
} else { | |
path = PATH.normalize(path); | |
try { | |
var lookup = FS.lookupPath(path, { | |
follow: !(flags & 131072) | |
}); | |
node = lookup.node; | |
} catch (e) { | |
// ignore | |
} | |
} | |
// perhaps we need to create the node | |
var created = false; | |
if ((flags & 64)) { | |
if (node) { | |
// if O_CREAT and O_EXCL are set, error out if the node already exists | |
if ((flags & 128)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EEXIST); | |
} | |
} else { | |
// node doesn't exist, try to create it | |
node = FS.mknod(path, mode, 0); | |
created = true; | |
} | |
} | |
if (!node) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOENT); | |
} | |
// can't truncate a device | |
if (FS.isChrdev(node.mode)) { | |
flags &= ~512; | |
} | |
// check permissions, if this is not a file we just created now (it is ok to | |
// create and write to a file with read-only permissions; it is read-only | |
// for later use) | |
if (!created) { | |
var err = FS.mayOpen(node, flags); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
} | |
// do truncation if necessary | |
if ((flags & 512)) { | |
FS.truncate(node, 0); | |
} | |
// we've already handled these, don't pass down to the underlying vfs | |
flags &= ~(128 | 512); | |
// register the stream with the filesystem | |
var stream = FS.createStream({ | |
node: node, | |
path: FS.getPath(node), // we want the absolute path to the node | |
flags: flags, | |
seekable: true, | |
position: 0, | |
stream_ops: node.stream_ops, | |
// used by the file family libc calls (fopen, fwrite, ferror, etc.) | |
ungotten: [], | |
error: false | |
}, fd_start, fd_end); | |
// call the new stream's open function | |
if (stream.stream_ops.open) { | |
stream.stream_ops.open(stream); | |
} | |
if (Module['logReadFiles'] && !(flags & 1)) { | |
if (!FS.readFiles) FS.readFiles = {}; | |
if (!(path in FS.readFiles)) { | |
FS.readFiles[path] = 1; | |
Module['printErr']('read file: ' + path); | |
} | |
} | |
try { | |
if (FS.trackingDelegate['onOpenFile']) { | |
var trackingFlags = 0; | |
if ((flags & 2097155) !== 1) { | |
trackingFlags |= FS.tracking.openFlags.READ; | |
} | |
if ((flags & 2097155) !== 0) { | |
trackingFlags |= FS.tracking.openFlags.WRITE; | |
} | |
FS.trackingDelegate['onOpenFile'](path, trackingFlags); | |
} | |
} catch (e) { | |
console.log("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message); | |
} | |
return stream; | |
}, | |
close: function(stream) { | |
try { | |
if (stream.stream_ops.close) { | |
stream.stream_ops.close(stream); | |
} | |
} catch (e) { | |
throw e; | |
} finally { | |
FS.closeStream(stream.fd); | |
} | |
}, | |
llseek: function(stream, offset, whence) { | |
if (!stream.seekable || !stream.stream_ops.llseek) { | |
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); | |
} | |
stream.position = stream.stream_ops.llseek(stream, offset, whence); | |
stream.ungotten = []; | |
return stream.position; | |
}, | |
read: function(stream, buffer, offset, length, position) { | |
if (length < 0 || position < 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
if ((stream.flags & 2097155) === 1) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBADF); | |
} | |
if (FS.isDir(stream.node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EISDIR); | |
} | |
if (!stream.stream_ops.read) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
var seeking = true; | |
if (typeof position === 'undefined') { | |
position = stream.position; | |
seeking = false; | |
} else if (!stream.seekable) { | |
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); | |
} | |
var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); | |
if (!seeking) stream.position += bytesRead; | |
return bytesRead; | |
}, | |
write: function(stream, buffer, offset, length, position, canOwn) { | |
if (length < 0 || position < 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
if ((stream.flags & 2097155) === 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBADF); | |
} | |
if (FS.isDir(stream.node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EISDIR); | |
} | |
if (!stream.stream_ops.write) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
if (stream.flags & 1024) { | |
// seek to the end before writing in append mode | |
FS.llseek(stream, 0, 2); | |
} | |
var seeking = true; | |
if (typeof position === 'undefined') { | |
position = stream.position; | |
seeking = false; | |
} else if (!stream.seekable) { | |
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); | |
} | |
var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); | |
if (!seeking) stream.position += bytesWritten; | |
try { | |
if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path); | |
} catch (e) { | |
console.log("FS.trackingDelegate['onWriteToFile']('" + path + "') threw an exception: " + e.message); | |
} | |
return bytesWritten; | |
}, | |
allocate: function(stream, offset, length) { | |
if (offset < 0 || length <= 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
if ((stream.flags & 2097155) === 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EBADF); | |
} | |
if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENODEV); | |
} | |
if (!stream.stream_ops.allocate) { | |
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); | |
} | |
stream.stream_ops.allocate(stream, offset, length); | |
}, | |
mmap: function(stream, buffer, offset, length, position, prot, flags) { | |
// TODO if PROT is PROT_WRITE, make sure we have write access | |
if ((stream.flags & 2097155) === 1) { | |
throw new FS.ErrnoError(ERRNO_CODES.EACCES); | |
} | |
if (!stream.stream_ops.mmap) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENODEV); | |
} | |
return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags); | |
}, | |
msync: function(stream, buffer, offset, length, mmapFlags) { | |
if (!stream || !stream.stream_ops.msync) { | |
return 0; | |
} | |
return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); | |
}, | |
munmap: function(stream) { | |
return 0; | |
}, | |
ioctl: function(stream, cmd, arg) { | |
if (!stream.stream_ops.ioctl) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTTY); | |
} | |
return stream.stream_ops.ioctl(stream, cmd, arg); | |
}, | |
readFile: function(path, opts) { | |
opts = opts || {}; | |
opts.flags = opts.flags || 'r'; | |
opts.encoding = opts.encoding || 'binary'; | |
if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { | |
throw new Error('Invalid encoding type "' + opts.encoding + '"'); | |
} | |
var ret; | |
var stream = FS.open(path, opts.flags); | |
var stat = FS.stat(path); | |
var length = stat.size; | |
var buf = new Uint8Array(length); | |
FS.read(stream, buf, 0, length, 0); | |
if (opts.encoding === 'utf8') { | |
ret = UTF8ArrayToString(buf, 0); | |
} else if (opts.encoding === 'binary') { | |
ret = buf; | |
} | |
FS.close(stream); | |
return ret; | |
}, | |
writeFile: function(path, data, opts) { | |
opts = opts || {}; | |
opts.flags = opts.flags || 'w'; | |
opts.encoding = opts.encoding || 'utf8'; | |
if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { | |
throw new Error('Invalid encoding type "' + opts.encoding + '"'); | |
} | |
var stream = FS.open(path, opts.flags, opts.mode); | |
if (opts.encoding === 'utf8') { | |
var buf = new Uint8Array(lengthBytesUTF8(data) + 1); | |
var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); | |
FS.write(stream, buf, 0, actualNumBytes, 0, opts.canOwn); | |
} else if (opts.encoding === 'binary') { | |
FS.write(stream, data, 0, data.length, 0, opts.canOwn); | |
} | |
FS.close(stream); | |
}, | |
cwd: function() { | |
return FS.currentPath; | |
}, | |
chdir: function(path) { | |
var lookup = FS.lookupPath(path, { | |
follow: true | |
}); | |
if (!FS.isDir(lookup.node.mode)) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); | |
} | |
var err = FS.nodePermissions(lookup.node, 'x'); | |
if (err) { | |
throw new FS.ErrnoError(err); | |
} | |
FS.currentPath = lookup.path; | |
}, | |
createDefaultDirectories: function() { | |
FS.mkdir('/tmp'); | |
FS.mkdir('/home'); | |
FS.mkdir('/home/web_user'); | |
}, | |
createDefaultDevices: function() { | |
// create /dev | |
FS.mkdir('/dev'); | |
// setup /dev/null | |
FS.registerDevice(FS.makedev(1, 3), { | |
read: function() { | |
return 0; | |
}, | |
write: function(stream, buffer, offset, length, pos) { | |
return length; | |
} | |
}); | |
FS.mkdev('/dev/null', FS.makedev(1, 3)); | |
// setup /dev/tty and /dev/tty1 | |
// stderr needs to print output using Module['printErr'] | |
// so we register a second tty just for it. | |
TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); | |
TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); | |
FS.mkdev('/dev/tty', FS.makedev(5, 0)); | |
FS.mkdev('/dev/tty1', FS.makedev(6, 0)); | |
// setup /dev/[u]random | |
var random_device; | |
if (typeof crypto !== 'undefined') { | |
// for modern web browsers | |
var randomBuffer = new Uint8Array(1); | |
random_device = function() { | |
crypto.getRandomValues(randomBuffer); | |
return randomBuffer[0]; | |
}; | |
} else if (ENVIRONMENT_IS_NODE) { | |
// for nodejs | |
random_device = function() { | |
return require('crypto').randomBytes(1)[0]; | |
}; | |
} else { | |
// default for ES5 platforms | |
random_device = function() { | |
return (Math.random() * 256) | 0; | |
}; | |
} | |
FS.createDevice('/dev', 'random', random_device); | |
FS.createDevice('/dev', 'urandom', random_device); | |
// we're not going to emulate the actual shm device, | |
// just create the tmp dirs that reside in it commonly | |
FS.mkdir('/dev/shm'); | |
FS.mkdir('/dev/shm/tmp'); | |
}, | |
createStandardStreams: function() { | |
// TODO deprecate the old functionality of a single | |
// input / output callback and that utilizes FS.createDevice | |
// and instead require a unique set of stream ops | |
// by default, we symlink the standard streams to the | |
// default tty devices. however, if the standard streams | |
// have been overwritten we create a unique device for | |
// them instead. | |
if (Module['stdin']) { | |
FS.createDevice('/dev', 'stdin', Module['stdin']); | |
} else { | |
FS.symlink('/dev/tty', '/dev/stdin'); | |
} | |
if (Module['stdout']) { | |
FS.createDevice('/dev', 'stdout', null, Module['stdout']); | |
} else { | |
FS.symlink('/dev/tty', '/dev/stdout'); | |
} | |
if (Module['stderr']) { | |
FS.createDevice('/dev', 'stderr', null, Module['stderr']); | |
} else { | |
FS.symlink('/dev/tty1', '/dev/stderr'); | |
} | |
// open default streams for the stdin, stdout and stderr devices | |
var stdin = FS.open('/dev/stdin', 'r'); | |
HEAP32[((_stdin) >> 2)] = FS.getPtrForStream(stdin); | |
assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')'); | |
var stdout = FS.open('/dev/stdout', 'w'); | |
HEAP32[((_stdout) >> 2)] = FS.getPtrForStream(stdout); | |
assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')'); | |
var stderr = FS.open('/dev/stderr', 'w'); | |
HEAP32[((_stderr) >> 2)] = FS.getPtrForStream(stderr); | |
assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')'); | |
}, | |
ensureErrnoError: function() { | |
if (FS.ErrnoError) return; | |
FS.ErrnoError = function ErrnoError(errno, node) { | |
this.node = node; | |
this.setErrno = function(errno) { | |
this.errno = errno; | |
for (var key in ERRNO_CODES) { | |
if (ERRNO_CODES[key] === errno) { | |
this.code = key; | |
break; | |
} | |
} | |
}; | |
this.setErrno(errno); | |
this.message = ERRNO_MESSAGES[errno]; | |
}; | |
FS.ErrnoError.prototype = new Error(); | |
FS.ErrnoError.prototype.constructor = FS.ErrnoError; | |
// Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) | |
[ERRNO_CODES.ENOENT].forEach(function(code) { | |
FS.genericErrors[code] = new FS.ErrnoError(code); | |
FS.genericErrors[code].stack = '<generic error, no stack>'; | |
}); | |
}, | |
staticInit: function() { | |
FS.ensureErrnoError(); | |
FS.nameTable = new Array(4096); | |
FS.mount(MEMFS, {}, '/'); | |
FS.createDefaultDirectories(); | |
FS.createDefaultDevices(); | |
}, | |
init: function(input, output, error) { | |
assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); | |
FS.init.initialized = true; | |
FS.ensureErrnoError(); | |
// Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here | |
Module['stdin'] = input || Module['stdin']; | |
Module['stdout'] = output || Module['stdout']; | |
Module['stderr'] = error || Module['stderr']; | |
FS.createStandardStreams(); | |
}, | |
quit: function() { | |
FS.init.initialized = false; | |
for (var i = 0; i < FS.streams.length; i++) { | |
var stream = FS.streams[i]; | |
if (!stream) { | |
continue; | |
} | |
FS.close(stream); | |
} | |
}, | |
getMode: function(canRead, canWrite) { | |
var mode = 0; | |
if (canRead) mode |= 292 | 73; | |
if (canWrite) mode |= 146; | |
return mode; | |
}, | |
joinPath: function(parts, forceRelative) { | |
var path = PATH.join.apply(null, parts); | |
if (forceRelative && path[0] == '/') path = path.substr(1); | |
return path; | |
}, | |
absolutePath: function(relative, base) { | |
return PATH.resolve(base, relative); | |
}, | |
standardizePath: function(path) { | |
return PATH.normalize(path); | |
}, | |
findObject: function(path, dontResolveLastLink) { | |
var ret = FS.analyzePath(path, dontResolveLastLink); | |
if (ret.exists) { | |
return ret.object; | |
} else { | |
___setErrNo(ret.error); | |
return null; | |
} | |
}, | |
analyzePath: function(path, dontResolveLastLink) { | |
// operate from within the context of the symlink's target | |
try { | |
var lookup = FS.lookupPath(path, { | |
follow: !dontResolveLastLink | |
}); | |
path = lookup.path; | |
} catch (e) {} | |
var ret = { | |
isRoot: false, | |
exists: false, | |
error: 0, | |
name: null, | |
path: null, | |
object: null, | |
parentExists: false, | |
parentPath: null, | |
parentObject: null | |
}; | |
try { | |
var lookup = FS.lookupPath(path, { | |
parent: true | |
}); | |
ret.parentExists = true; | |
ret.parentPath = lookup.path; | |
ret.parentObject = lookup.node; | |
ret.name = PATH.basename(path); | |
lookup = FS.lookupPath(path, { | |
follow: !dontResolveLastLink | |
}); | |
ret.exists = true; | |
ret.path = lookup.path; | |
ret.object = lookup.node; | |
ret.name = lookup.node.name; | |
ret.isRoot = lookup.path === '/'; | |
} catch (e) { | |
ret.error = e.errno; | |
}; | |
return ret; | |
}, | |
createFolder: function(parent, name, canRead, canWrite) { | |
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); | |
var mode = FS.getMode(canRead, canWrite); | |
return FS.mkdir(path, mode); | |
}, | |
createPath: function(parent, path, canRead, canWrite) { | |
parent = typeof parent === 'string' ? parent : FS.getPath(parent); | |
var parts = path.split('/').reverse(); | |
while (parts.length) { | |
var part = parts.pop(); | |
if (!part) continue; | |
var current = PATH.join2(parent, part); | |
try { | |
FS.mkdir(current); | |
} catch (e) { | |
// ignore EEXIST | |
} | |
parent = current; | |
} | |
return current; | |
}, | |
createFile: function(parent, name, properties, canRead, canWrite) { | |
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); | |
var mode = FS.getMode(canRead, canWrite); | |
return FS.create(path, mode); | |
}, | |
createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { | |
var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent; | |
var mode = FS.getMode(canRead, canWrite); | |
var node = FS.create(path, mode); | |
if (data) { | |
if (typeof data === 'string') { | |
var arr = new Array(data.length); | |
for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); | |
data = arr; | |
} | |
// make sure we can write to the file | |
FS.chmod(node, mode | 146); | |
var stream = FS.open(node, 'w'); | |
FS.write(stream, data, 0, data.length, 0, canOwn); | |
FS.close(stream); | |
FS.chmod(node, mode); | |
} | |
return node; | |
}, | |
createDevice: function(parent, name, input, output) { | |
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); | |
var mode = FS.getMode( !! input, !! output); | |
if (!FS.createDevice.major) FS.createDevice.major = 64; | |
var dev = FS.makedev(FS.createDevice.major++, 0); | |
// Create a fake device that a set of stream ops to emulate | |
// the old behavior. | |
FS.registerDevice(dev, { | |
open: function(stream) { | |
stream.seekable = false; | |
}, | |
close: function(stream) { | |
// flush any pending line data | |
if (output && output.buffer && output.buffer.length) { | |
output(10); | |
} | |
}, | |
read: function(stream, buffer, offset, length, pos /* ignored */ ) { | |
var bytesRead = 0; | |
for (var i = 0; i < length; i++) { | |
var result; | |
try { | |
result = input(); | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES.EIO); | |
} | |
if (result === undefined && bytesRead === 0) { | |
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); | |
} | |
if (result === null || result === undefined) break; | |
bytesRead++; | |
buffer[offset + i] = result; | |
} | |
if (bytesRead) { | |
stream.node.timestamp = Date.now(); | |
} | |
return bytesRead; | |
}, | |
write: function(stream, buffer, offset, length, pos) { | |
for (var i = 0; i < length; i++) { | |
try { | |
output(buffer[offset + i]); | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES.EIO); | |
} | |
} | |
if (length) { | |
stream.node.timestamp = Date.now(); | |
} | |
return i; | |
} | |
}); | |
return FS.mkdev(path, mode, dev); | |
}, | |
createLink: function(parent, name, target, canRead, canWrite) { | |
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); | |
return FS.symlink(target, path); | |
}, | |
forceLoadFile: function(obj) { | |
if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; | |
var success = true; | |
if (typeof XMLHttpRequest !== 'undefined') { | |
throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); | |
} else if (Module['read']) { | |
// Command-line. | |
try { | |
// WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as | |
// read() will try to parse UTF8. | |
obj.contents = intArrayFromString(Module['read'](obj.url), true); | |
obj.usedBytes = obj.contents.length; | |
} catch (e) { | |
success = false; | |
} | |
} else { | |
throw new Error('Cannot load without read() or XMLHttpRequest.'); | |
} | |
if (!success) ___setErrNo(ERRNO_CODES.EIO); | |
return success; | |
}, | |
createLazyFile: function(parent, name, url, canRead, canWrite) { | |
// Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. | |
function LazyUint8Array() { | |
this.lengthKnown = false; | |
this.chunks = []; // Loaded chunks. Index is the chunk number | |
} | |
LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { | |
if (idx > this.length - 1 || idx < 0) { | |
return undefined; | |
} | |
var chunkOffset = idx % this.chunkSize; | |
var chunkNum = (idx / this.chunkSize) | 0; | |
return this.getter(chunkNum)[chunkOffset]; | |
} | |
LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { | |
this.getter = getter; | |
} | |
LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { | |
// Find length | |
var xhr = new XMLHttpRequest(); | |
xhr.open('HEAD', url, false); | |
xhr.send(null); | |
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); | |
var datalength = Number(xhr.getResponseHeader("Content-length")); | |
var header; | |
var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; | |
var chunkSize = 1024 * 1024; // Chunk size in bytes | |
if (!hasByteServing) chunkSize = datalength; | |
// Function to get a range from the remote URL. | |
var doXHR = (function(from, to) { | |
if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); | |
if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!"); | |
// TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. | |
var xhr = new XMLHttpRequest(); | |
xhr.open('GET', url, false); | |
if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); | |
// Some hints to the browser that we want binary data. | |
if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer'; | |
if (xhr.overrideMimeType) { | |
xhr.overrideMimeType('text/plain; charset=x-user-defined'); | |
} | |
xhr.send(null); | |
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); | |
if (xhr.response !== undefined) { | |
return new Uint8Array(xhr.response || []); | |
} else { | |
return intArrayFromString(xhr.responseText || '', true); | |
} | |
}); | |
var lazyArray = this; | |
lazyArray.setDataGetter(function(chunkNum) { | |
var start = chunkNum * chunkSize; | |
var end = (chunkNum + 1) * chunkSize - 1; // including this byte | |
end = Math.min(end, datalength - 1); // if datalength-1 is selected, this is the last block | |
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") { | |
lazyArray.chunks[chunkNum] = doXHR(start, end); | |
} | |
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!"); | |
return lazyArray.chunks[chunkNum]; | |
}); | |
this._length = datalength; | |
this._chunkSize = chunkSize; | |
this.lengthKnown = true; | |
} | |
if (typeof XMLHttpRequest !== 'undefined') { | |
if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; | |
var lazyArray = new LazyUint8Array(); | |
Object.defineProperty(lazyArray, "length", { | |
get: function() { | |
if (!this.lengthKnown) { | |
this.cacheLength(); | |
} | |
return this._length; | |
} | |
}); | |
Object.defineProperty(lazyArray, "chunkSize", { | |
get: function() { | |
if (!this.lengthKnown) { | |
this.cacheLength(); | |
} | |
return this._chunkSize; | |
} | |
}); | |
var properties = { | |
isDevice: false, | |
contents: lazyArray | |
}; | |
} else { | |
var properties = { | |
isDevice: false, | |
url: url | |
}; | |
} | |
var node = FS.createFile(parent, name, properties, canRead, canWrite); | |
// This is a total hack, but I want to get this lazy file code out of the | |
// core of MEMFS. If we want to keep this lazy file concept I feel it should | |
// be its own thin LAZYFS proxying calls to MEMFS. | |
if (properties.contents) { | |
node.contents = properties.contents; | |
} else if (properties.url) { | |
node.contents = null; | |
node.url = properties.url; | |
} | |
// Add a function that defers querying the file size until it is asked the first time. | |
Object.defineProperty(node, "usedBytes", { | |
get: function() { | |
return this.contents.length; | |
} | |
}); | |
// override each stream op with one that tries to force load the lazy file first | |
var stream_ops = {}; | |
var keys = Object.keys(node.stream_ops); | |
keys.forEach(function(key) { | |
var fn = node.stream_ops[key]; | |
stream_ops[key] = function forceLoadLazyFile() { | |
if (!FS.forceLoadFile(node)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EIO); | |
} | |
return fn.apply(null, arguments); | |
}; | |
}); | |
// use a custom read function | |
stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { | |
if (!FS.forceLoadFile(node)) { | |
throw new FS.ErrnoError(ERRNO_CODES.EIO); | |
} | |
var contents = stream.node.contents; | |
if (position >= contents.length) | |
return 0; | |
var size = Math.min(contents.length - position, length); | |
assert(size >= 0); | |
if (contents.slice) { // normal array | |
for (var i = 0; i < size; i++) { | |
buffer[offset + i] = contents[position + i]; | |
} | |
} else { | |
for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR | |
buffer[offset + i] = contents.get(position + i); | |
} | |
} | |
return size; | |
}; | |
node.stream_ops = stream_ops; | |
return node; | |
}, | |
createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { | |
Browser.init(); | |
// TODO we should allow people to just pass in a complete filename instead | |
// of parent and name being that we just join them anyways | |
var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent; | |
var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname | |
function processData(byteArray) { | |
function finish(byteArray) { | |
if (preFinish) preFinish(); | |
if (!dontCreateFile) { | |
FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); | |
} | |
if (onload) onload(); | |
removeRunDependency(dep); | |
} | |
var handled = false; | |
Module['preloadPlugins'].forEach(function(plugin) { | |
if (handled) return; | |
if (plugin['canHandle'](fullname)) { | |
plugin['handle'](byteArray, fullname, finish, function() { | |
if (onerror) onerror(); | |
removeRunDependency(dep); | |
}); | |
handled = true; | |
} | |
}); | |
if (!handled) finish(byteArray); | |
} | |
addRunDependency(dep); | |
if (typeof url == 'string') { | |
Browser.asyncLoad(url, function(byteArray) { | |
processData(byteArray); | |
}, onerror); | |
} else { | |
processData(url); | |
} | |
}, | |
indexedDB: function() { | |
return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; | |
}, | |
DB_NAME: function() { | |
return 'EM_FS_' + window.location.pathname; | |
}, | |
DB_VERSION: 20, | |
DB_STORE_NAME: "FILE_DATA", | |
saveFilesToDB: function(paths, onload, onerror) { | |
onload = onload || function() {}; | |
onerror = onerror || function() {}; | |
var indexedDB = FS.indexedDB(); | |
try { | |
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); | |
} catch (e) { | |
return onerror(e); | |
} | |
openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { | |
console.log('creating db'); | |
var db = openRequest.result; | |
db.createObjectStore(FS.DB_STORE_NAME); | |
}; | |
openRequest.onsuccess = function openRequest_onsuccess() { | |
var db = openRequest.result; | |
var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite'); | |
var files = transaction.objectStore(FS.DB_STORE_NAME); | |
var ok = 0, | |
fail = 0, | |
total = paths.length; | |
function finish() { | |
if (fail == 0) onload(); | |
else onerror(); | |
} | |
paths.forEach(function(path) { | |
var putRequest = files.put(FS.analyzePath(path).object.contents, path); | |
putRequest.onsuccess = function putRequest_onsuccess() { | |
ok++; | |
if (ok + fail == total) finish() | |
}; | |
putRequest.onerror = function putRequest_onerror() { | |
fail++; | |
if (ok + fail == total) finish() | |
}; | |
}); | |
transaction.onerror = onerror; | |
}; | |
openRequest.onerror = onerror; | |
}, | |
loadFilesFromDB: function(paths, onload, onerror) { | |
onload = onload || function() {}; | |
onerror = onerror || function() {}; | |
var indexedDB = FS.indexedDB(); | |
try { | |
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); | |
} catch (e) { | |
return onerror(e); | |
} | |
openRequest.onupgradeneeded = onerror; // no database to load from | |
openRequest.onsuccess = function openRequest_onsuccess() { | |
var db = openRequest.result; | |
try { | |
var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly'); | |
} catch (e) { | |
onerror(e); | |
return; | |
} | |
var files = transaction.objectStore(FS.DB_STORE_NAME); | |
var ok = 0, | |
fail = 0, | |
total = paths.length; | |
function finish() { | |
if (fail == 0) onload(); | |
else onerror(); | |
} | |
paths.forEach(function(path) { | |
var getRequest = files.get(path); | |
getRequest.onsuccess = function getRequest_onsuccess() { | |
if (FS.analyzePath(path).exists) { | |
FS.unlink(path); | |
} | |
FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); | |
ok++; | |
if (ok + fail == total) finish(); | |
}; | |
getRequest.onerror = function getRequest_onerror() { | |
fail++; | |
if (ok + fail == total) finish() | |
}; | |
}); | |
transaction.onerror = onerror; | |
}; | |
openRequest.onerror = onerror; | |
} | |
}; | |
function _mkport() { | |
throw 'TODO' | |
} | |
var SOCKFS = { | |
mount: function(mount) { | |
// If Module['websocket'] has already been defined (e.g. for configuring | |
// the subprotocol/url) use that, if not initialise it to a new object. | |
Module['websocket'] = (Module['websocket'] && | |
('object' === typeof Module['websocket'])) ? Module['websocket'] : {}; | |
// Add the Event registration mechanism to the exported websocket configuration | |
// object so we can register network callbacks from native JavaScript too. | |
// For more documentation see system/include/emscripten/emscripten.h | |
Module['websocket']._callbacks = {}; | |
Module['websocket']['on'] = function(event, callback) { | |
if ('function' === typeof callback) { | |
this._callbacks[event] = callback; | |
} | |
return this; | |
}; | |
Module['websocket'].emit = function(event, param) { | |
if ('function' === typeof this._callbacks[event]) { | |
this._callbacks[event].call(this, param); | |
} | |
}; | |
// If debug is enabled register simple default logging callbacks for each Event. | |
return FS.createNode(null, '/', 16384 | 511 /* 0777 */ , 0); | |
}, | |
createSocket: function(family, type, protocol) { | |
var streaming = type == 1; | |
if (protocol) { | |
assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp | |
} | |
// create our internal socket structure | |
var sock = { | |
family: family, | |
type: type, | |
protocol: protocol, | |
server: null, | |
error: null, // Used in getsockopt for SOL_SOCKET/SO_ERROR test | |
peers: {}, | |
pending: [], | |
recv_queue: [], | |
sock_ops: SOCKFS.websocket_sock_ops | |
}; | |
// create the filesystem node to store the socket structure | |
var name = SOCKFS.nextname(); | |
var node = FS.createNode(SOCKFS.root, name, 49152, 0); | |
node.sock = sock; | |
// and the wrapping stream that enables library functions such | |
// as read and write to indirectly interact with the socket | |
var stream = FS.createStream({ | |
path: name, | |
node: node, | |
flags: FS.modeStringToFlags('r+'), | |
seekable: false, | |
stream_ops: SOCKFS.stream_ops | |
}); | |
// map the new stream to the socket structure (sockets have a 1:1 | |
// relationship with a stream) | |
sock.stream = stream; | |
return sock; | |
}, | |
getSocket: function(fd) { | |
var stream = FS.getStream(fd); | |
if (!stream || !FS.isSocket(stream.node.mode)) { | |
return null; | |
} | |
return stream.node.sock; | |
}, | |
stream_ops: { | |
poll: function(stream) { | |
var sock = stream.node.sock; | |
return sock.sock_ops.poll(sock); | |
}, | |
ioctl: function(stream, request, varargs) { | |
var sock = stream.node.sock; | |
return sock.sock_ops.ioctl(sock, request, varargs); | |
}, | |
read: function(stream, buffer, offset, length, position /* ignored */ ) { | |
var sock = stream.node.sock; | |
var msg = sock.sock_ops.recvmsg(sock, length); | |
if (!msg) { | |
// socket is closed | |
return 0; | |
} | |
buffer.set(msg.buffer, offset); | |
return msg.buffer.length; | |
}, | |
write: function(stream, buffer, offset, length, position /* ignored */ ) { | |
var sock = stream.node.sock; | |
return sock.sock_ops.sendmsg(sock, buffer, offset, length); | |
}, | |
close: function(stream) { | |
var sock = stream.node.sock; | |
sock.sock_ops.close(sock); | |
} | |
}, | |
nextname: function() { | |
if (!SOCKFS.nextname.current) { | |
SOCKFS.nextname.current = 0; | |
} | |
return 'socket[' + (SOCKFS.nextname.current++) + ']'; | |
}, | |
websocket_sock_ops: { | |
createPeer: function(sock, addr, port) { | |
var ws; | |
if (typeof addr === 'object') { | |
ws = addr; | |
addr = null; | |
port = null; | |
} | |
if (ws) { | |
// for sockets that've already connected (e.g. we're the server) | |
// we can inspect the _socket property for the address | |
if (ws._socket) { | |
addr = ws._socket.remoteAddress; | |
port = ws._socket.remotePort; | |
} | |
// if we're just now initializing a connection to the remote, | |
// inspect the url property | |
else { | |
var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url); | |
if (!result) { | |
throw new Error('WebSocket URL must be in the format ws(s)://address:port'); | |
} | |
addr = result[1]; | |
port = parseInt(result[2], 10); | |
} | |
} else { | |
// create the actual websocket object and connect | |
try { | |
// runtimeConfig gets set to true if WebSocket runtime configuration is available. | |
var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket'])); | |
// The default value is 'ws://' the replace is needed because the compiler replaces '//' comments with '#' | |
// comments without checking context, so we'd end up with ws:#, the replace swaps the '#' for '//' again. | |
var url = 'ws:#'.replace('#', '//'); | |
if (runtimeConfig) { | |
if ('string' === typeof Module['websocket']['url']) { | |
url = Module['websocket']['url']; // Fetch runtime WebSocket URL config. | |
} | |
} | |
if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it. | |
var parts = addr.split('/'); | |
url = url + parts[0] + ":" + port + "/" + parts.slice(1).join('/'); | |
} | |
// Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set. | |
var subProtocols = 'binary'; // The default value is 'binary' | |
if (runtimeConfig) { | |
if ('string' === typeof Module['websocket']['subprotocol']) { | |
subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config. | |
} | |
} | |
// The regex trims the string (removes spaces at the beginning and end, then splits the string by | |
// <any space>,<any space> into an Array. Whitespace removal is important for Websockify and ws. | |
subProtocols = subProtocols.replace(/^ +| +$/g, "").split(/ *, */); | |
// The node ws library API for specifying optional subprotocol is slightly different than the browser's. | |
var opts = ENVIRONMENT_IS_NODE ? { | |
'protocol': subProtocols.toString() | |
} : subProtocols; | |
// If node we use the ws library. | |
var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket']; | |
ws = new WebSocket(url, opts); | |
ws.binaryType = 'arraybuffer'; | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH); | |
} | |
} | |
var peer = { | |
addr: addr, | |
port: port, | |
socket: ws, | |
dgram_send_queue: [] | |
}; | |
SOCKFS.websocket_sock_ops.addPeer(sock, peer); | |
SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer); | |
// if this is a bound dgram socket, send the port number first to allow | |
// us to override the ephemeral port reported to us by remotePort on the | |
// remote end. | |
if (sock.type === 2 && typeof sock.sport !== 'undefined') { | |
peer.dgram_send_queue.push(new Uint8Array([ | |
255, 255, 255, 255, | |
'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0), ((sock.sport & 0xff00) >> 8), (sock.sport & 0xff) | |
])); | |
} | |
return peer; | |
}, | |
getPeer: function(sock, addr, port) { | |
return sock.peers[addr + ':' + port]; | |
}, | |
addPeer: function(sock, peer) { | |
sock.peers[peer.addr + ':' + peer.port] = peer; | |
}, | |
removePeer: function(sock, peer) { | |
delete sock.peers[peer.addr + ':' + peer.port]; | |
}, | |
handlePeerEvents: function(sock, peer) { | |
var first = true; | |
var handleOpen = function() { | |
Module['websocket'].emit('open', sock.stream.fd); | |
try { | |
var queued = peer.dgram_send_queue.shift(); | |
while (queued) { | |
peer.socket.send(queued); | |
queued = peer.dgram_send_queue.shift(); | |
} | |
} catch (e) { | |
// not much we can do here in the way of proper error handling as we've already | |
// lied and said this data was sent. shut it down. | |
peer.socket.close(); | |
} | |
}; | |
function handleMessage(data) { | |
assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer | |
data = new Uint8Array(data); // make a typed array view on the array buffer | |
// if this is the port message, override the peer's port with it | |
var wasfirst = first; | |
first = false; | |
if (wasfirst && | |
data.length === 10 && | |
data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 && | |
data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) { | |
// update the peer's port and it's key in the peer map | |
var newport = ((data[8] << 8) | data[9]); | |
SOCKFS.websocket_sock_ops.removePeer(sock, peer); | |
peer.port = newport; | |
SOCKFS.websocket_sock_ops.addPeer(sock, peer); | |
return; | |
} | |
sock.recv_queue.push({ | |
addr: peer.addr, | |
port: peer.port, | |
data: data | |
}); | |
Module['websocket'].emit('message', sock.stream.fd); | |
}; | |
if (ENVIRONMENT_IS_NODE) { | |
peer.socket.on('open', handleOpen); | |
peer.socket.on('message', function(data, flags) { | |
if (!flags.binary) { | |
return; | |
} | |
handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer | |
}); | |
peer.socket.on('close', function() { | |
Module['websocket'].emit('close', sock.stream.fd); | |
}); | |
peer.socket.on('error', function(error) { | |
// Although the ws library may pass errors that may be more descriptive than | |
// ECONNREFUSED they are not necessarily the expected error code e.g. | |
// ENOTFOUND on getaddrinfo seems to be node.js specific, so using ECONNREFUSED | |
// is still probably the most useful thing to do. | |
sock.error = ERRNO_CODES.ECONNREFUSED; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. | |
Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']); | |
// don't throw | |
}); | |
} else { | |
peer.socket.onopen = handleOpen; | |
peer.socket.onclose = function() { | |
Module['websocket'].emit('close', sock.stream.fd); | |
}; | |
peer.socket.onmessage = function peer_socket_onmessage(event) { | |
handleMessage(event.data); | |
}; | |
peer.socket.onerror = function(error) { | |
// The WebSocket spec only allows a 'simple event' to be thrown on error, | |
// so we only really know as much as ECONNREFUSED. | |
sock.error = ERRNO_CODES.ECONNREFUSED; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. | |
Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']); | |
}; | |
} | |
}, | |
poll: function(sock) { | |
if (sock.type === 1 && sock.server) { | |
// listen sockets should only say they're available for reading | |
// if there are pending clients. | |
return sock.pending.length ? (64 | 1) : 0; | |
} | |
var mask = 0; | |
var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets | |
SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) : | |
null; | |
if (sock.recv_queue.length || !dest || // connection-less sockets are always ready to read | |
(dest && dest.socket.readyState === dest.socket.CLOSING) || | |
(dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed | |
mask |= (64 | 1); | |
} | |
if (!dest || // connection-less sockets are always ready to write | |
(dest && dest.socket.readyState === dest.socket.OPEN)) { | |
mask |= 4; | |
} | |
if ((dest && dest.socket.readyState === dest.socket.CLOSING) || | |
(dest && dest.socket.readyState === dest.socket.CLOSED)) { | |
mask |= 16; | |
} | |
return mask; | |
}, | |
ioctl: function(sock, request, arg) { | |
switch (request) { | |
case 21531: | |
var bytes = 0; | |
if (sock.recv_queue.length) { | |
bytes = sock.recv_queue[0].data.length; | |
} | |
HEAP32[((arg) >> 2)] = bytes; | |
return 0; | |
default: | |
return ERRNO_CODES.EINVAL; | |
} | |
}, | |
close: function(sock) { | |
// if we've spawned a listen server, close it | |
if (sock.server) { | |
try { | |
sock.server.close(); | |
} catch (e) {} | |
sock.server = null; | |
} | |
// close any peer connections | |
var peers = Object.keys(sock.peers); | |
for (var i = 0; i < peers.length; i++) { | |
var peer = sock.peers[peers[i]]; | |
try { | |
peer.socket.close(); | |
} catch (e) {} | |
SOCKFS.websocket_sock_ops.removePeer(sock, peer); | |
} | |
return 0; | |
}, | |
bind: function(sock, addr, port) { | |
if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound | |
} | |
sock.saddr = addr; | |
sock.sport = port || _mkport(); | |
// in order to emulate dgram sockets, we need to launch a listen server when | |
// binding on a connection-less socket | |
// note: this is only required on the server side | |
if (sock.type === 2) { | |
// close the existing server if it exists | |
if (sock.server) { | |
sock.server.close(); | |
sock.server = null; | |
} | |
// swallow error operation not supported error that occurs when binding in the | |
// browser where this isn't supported | |
try { | |
sock.sock_ops.listen(sock, 0); | |
} catch (e) { | |
if (!(e instanceof FS.ErrnoError)) throw e; | |
if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e; | |
} | |
} | |
}, | |
connect: function(sock, addr, port) { | |
if (sock.server) { | |
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); | |
} | |
// TODO autobind | |
// if (!sock.addr && sock.type == 2) { | |
// } | |
// early out if we're already connected / in the middle of connecting | |
if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') { | |
var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); | |
if (dest) { | |
if (dest.socket.readyState === dest.socket.CONNECTING) { | |
throw new FS.ErrnoError(ERRNO_CODES.EALREADY); | |
} else { | |
throw new FS.ErrnoError(ERRNO_CODES.EISCONN); | |
} | |
} | |
} | |
// add the socket to our peer list and set our | |
// destination address / port to match | |
var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); | |
sock.daddr = peer.addr; | |
sock.dport = peer.port; | |
// always "fail" in non-blocking mode | |
throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS); | |
}, | |
listen: function(sock, backlog) { | |
if (!ENVIRONMENT_IS_NODE) { | |
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); | |
} | |
if (sock.server) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening | |
} | |
var WebSocketServer = require('ws').Server; | |
var host = sock.saddr; | |
sock.server = new WebSocketServer({ | |
host: host, | |
port: sock.sport | |
// TODO support backlog | |
}); | |
Module['websocket'].emit('listen', sock.stream.fd); // Send Event with listen fd. | |
sock.server.on('connection', function(ws) { | |
if (sock.type === 1) { | |
var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol); | |
// create a peer on the new socket | |
var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws); | |
newsock.daddr = peer.addr; | |
newsock.dport = peer.port; | |
// push to queue for accept to pick up | |
sock.pending.push(newsock); | |
Module['websocket'].emit('connection', newsock.stream.fd); | |
} else { | |
// create a peer on the listen socket so calling sendto | |
// with the listen socket and an address will resolve | |
// to the correct client | |
SOCKFS.websocket_sock_ops.createPeer(sock, ws); | |
Module['websocket'].emit('connection', sock.stream.fd); | |
} | |
}); | |
sock.server.on('closed', function() { | |
Module['websocket'].emit('close', sock.stream.fd); | |
sock.server = null; | |
}); | |
sock.server.on('error', function(error) { | |
// Although the ws library may pass errors that may be more descriptive than | |
// ECONNREFUSED they are not necessarily the expected error code e.g. | |
// ENOTFOUND on getaddrinfo seems to be node.js specific, so using EHOSTUNREACH | |
// is still probably the most useful thing to do. This error shouldn't | |
// occur in a well written app as errors should get trapped in the compiled | |
// app's own getaddrinfo call. | |
sock.error = ERRNO_CODES.EHOSTUNREACH; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. | |
Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'EHOSTUNREACH: Host is unreachable']); | |
// don't throw | |
}); | |
}, | |
accept: function(listensock) { | |
if (!listensock.server) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
var newsock = listensock.pending.shift(); | |
newsock.stream.flags = listensock.stream.flags; | |
return newsock; | |
}, | |
getname: function(sock, peer) { | |
var addr, port; | |
if (peer) { | |
if (sock.daddr === undefined || sock.dport === undefined) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); | |
} | |
addr = sock.daddr; | |
port = sock.dport; | |
} else { | |
// TODO saddr and sport will be set for bind()'d UDP sockets, but what | |
// should we be returning for TCP sockets that've been connect()'d? | |
addr = sock.saddr || 0; | |
port = sock.sport || 0; | |
} | |
return { | |
addr: addr, | |
port: port | |
}; | |
}, | |
sendmsg: function(sock, buffer, offset, length, addr, port) { | |
if (sock.type === 2) { | |
// connection-less sockets will honor the message address, | |
// and otherwise fall back to the bound destination address | |
if (addr === undefined || port === undefined) { | |
addr = sock.daddr; | |
port = sock.dport; | |
} | |
// if there was no address to fall back to, error out | |
if (addr === undefined || port === undefined) { | |
throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ); | |
} | |
} else { | |
// connection-based sockets will only use the bound | |
addr = sock.daddr; | |
port = sock.dport; | |
} | |
// find the peer for the destination address | |
var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port); | |
// early out if not connected with a connection-based socket | |
if (sock.type === 1) { | |
if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); | |
} else if (dest.socket.readyState === dest.socket.CONNECTING) { | |
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); | |
} | |
} | |
// create a copy of the incoming data to send, as the WebSocket API | |
// doesn't work entirely with an ArrayBufferView, it'll just send | |
// the entire underlying buffer | |
var data; | |
if (buffer instanceof Array || buffer instanceof ArrayBuffer) { | |
data = buffer.slice(offset, offset + length); | |
} else { // ArrayBufferView | |
data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length); | |
} | |
// if we're emulating a connection-less dgram socket and don't have | |
// a cached connection, queue the buffer to send upon connect and | |
// lie, saying the data was sent now. | |
if (sock.type === 2) { | |
if (!dest || dest.socket.readyState !== dest.socket.OPEN) { | |
// if we're not connected, open a new connection | |
if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { | |
dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); | |
} | |
dest.dgram_send_queue.push(data); | |
return length; | |
} | |
} | |
try { | |
// send the actual data | |
dest.socket.send(data); | |
return length; | |
} catch (e) { | |
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); | |
} | |
}, | |
recvmsg: function(sock, length) { | |
// http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html | |
if (sock.type === 1 && sock.server) { | |
// tcp servers should not be recv()'ing on the listen socket | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); | |
} | |
var queued = sock.recv_queue.shift(); | |
if (!queued) { | |
if (sock.type === 1) { | |
var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); | |
if (!dest) { | |
// if we have a destination address but are not connected, error out | |
throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); | |
} else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { | |
// return null if the socket has closed | |
return null; | |
} else { | |
// else, our socket is in a valid state but truly has nothing available | |
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); | |
} | |
} else { | |
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); | |
} | |
} | |
// queued.data will be an ArrayBuffer if it's unadulterated, but if it's | |
// requeued TCP data it'll be an ArrayBufferView | |
var queuedLength = queued.data.byteLength || queued.data.length; | |
var queuedOffset = queued.data.byteOffset || 0; | |
var queuedBuffer = queued.data.buffer || queued.data; | |
var bytesRead = Math.min(length, queuedLength); | |
var res = { | |
buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead), | |
addr: queued.addr, | |
port: queued.port | |
}; | |
// push back any unread data for TCP connections | |
if (sock.type === 1 && bytesRead < queuedLength) { | |
var bytesRemaining = queuedLength - bytesRead; | |
queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining); | |
sock.recv_queue.unshift(queued); | |
} | |
return res; | |
} | |
} | |
}; | |
function _recv(fd, buf, len, flags) { | |
var sock = SOCKFS.getSocket(fd); | |
if (!sock) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} | |
// TODO honor flags | |
return _read(fd, buf, len); | |
} | |
function _pread(fildes, buf, nbyte, offset) { | |
// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html | |
var stream = FS.getStream(fildes); | |
if (!stream) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} | |
try { | |
var slab = HEAP8; | |
return FS.read(stream, slab, buf, nbyte, offset); | |
} catch (e) { | |
FS.handleFSError(e); | |
return -1; | |
} | |
} | |
function _read(fildes, buf, nbyte) { | |
// ssize_t read(int fildes, void *buf, size_t nbyte); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html | |
var stream = FS.getStream(fildes); | |
if (!stream) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} | |
try { | |
var slab = HEAP8; | |
return FS.read(stream, slab, buf, nbyte); | |
} catch (e) { | |
FS.handleFSError(e); | |
return -1; | |
} | |
} | |
function _fread(ptr, size, nitems, stream) { | |
// size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html | |
var bytesToRead = nitems * size; | |
if (bytesToRead == 0) { | |
return 0; | |
} | |
var bytesRead = 0; | |
var streamObj = FS.getStreamFromPtr(stream); | |
if (!streamObj) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return 0; | |
} | |
while (streamObj.ungotten.length && bytesToRead > 0) { | |
HEAP8[((ptr++) >> 0)] = streamObj.ungotten.pop(); | |
bytesToRead--; | |
bytesRead++; | |
} | |
var err = _read(streamObj.fd, ptr, bytesToRead); | |
if (err == -1) { | |
if (streamObj) streamObj.error = true; | |
return 0; | |
} | |
bytesRead += err; | |
if (bytesRead < bytesToRead) streamObj.eof = true; | |
return (bytesRead / size) | 0; | |
} | |
function _close(fildes) { | |
// int close(int fildes); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html | |
var stream = FS.getStream(fildes); | |
if (!stream) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} | |
try { | |
FS.close(stream); | |
return 0; | |
} catch (e) { | |
FS.handleFSError(e); | |
return -1; | |
} | |
} | |
function _fileno(stream) { | |
// int fileno(FILE *stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html | |
stream = FS.getStreamFromPtr(stream); | |
if (!stream) return -1; | |
return stream.fd; | |
} | |
function _fclose(stream) { | |
// int fclose(FILE *stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fclose.html | |
var fd = _fileno(stream); | |
return _close(fd); | |
} | |
var _environ = allocate(1, "i32*", ALLOC_STATIC); | |
var ___environ = _environ; | |
function ___buildEnvironment(env) { | |
// WARNING: Arbitrary limit! | |
var MAX_ENV_VALUES = 64; | |
var TOTAL_ENV_SIZE = 1024; | |
// Statically allocate memory for the environment. | |
var poolPtr; | |
var envPtr; | |
if (!___buildEnvironment.called) { | |
___buildEnvironment.called = true; | |
// Set default values. Use string keys for Closure Compiler compatibility. | |
ENV['USER'] = 'web_user'; | |
ENV['PATH'] = '/'; | |
ENV['PWD'] = '/'; | |
ENV['HOME'] = '/home/web_user'; | |
ENV['LANG'] = 'C'; | |
ENV['_'] = Module['thisProgram']; | |
// Allocate memory. | |
poolPtr = allocate(TOTAL_ENV_SIZE, 'i8', ALLOC_STATIC); | |
envPtr = allocate(MAX_ENV_VALUES * 4, | |
'i8*', ALLOC_STATIC); | |
HEAP32[((envPtr) >> 2)] = poolPtr; | |
HEAP32[((_environ) >> 2)] = envPtr; | |
} else { | |
envPtr = HEAP32[((_environ) >> 2)]; | |
poolPtr = HEAP32[((envPtr) >> 2)]; | |
} | |
// Collect key=value lines. | |
var strings = []; | |
var totalSize = 0; | |
for (var key in env) { | |
if (typeof env[key] === 'string') { | |
var line = key + '=' + env[key]; | |
strings.push(line); | |
totalSize += line.length; | |
} | |
} | |
if (totalSize > TOTAL_ENV_SIZE) { | |
throw new Error('Environment size exceeded TOTAL_ENV_SIZE!'); | |
} | |
// Make new. | |
var ptrSize = 4; | |
for (var i = 0; i < strings.length; i++) { | |
var line = strings[i]; | |
writeAsciiToMemory(line, poolPtr); | |
HEAP32[(((envPtr) + (i * ptrSize)) >> 2)] = poolPtr; | |
poolPtr += line.length + 1; | |
} | |
HEAP32[(((envPtr) + (strings.length * ptrSize)) >> 2)] = 0; | |
} | |
var ENV = {}; | |
function _getenv(name) { | |
// char *getenv(const char *name); | |
// http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html | |
if (name === 0) return 0; | |
name = Pointer_stringify(name); | |
if (!ENV.hasOwnProperty(name)) return 0; | |
if (_getenv.ret) _free(_getenv.ret); | |
_getenv.ret = allocate(intArrayFromString(ENV[name]), 'i8', ALLOC_NORMAL); | |
return _getenv.ret; | |
} | |
function _abort() { | |
Module['abort'](); | |
} | |
function _send(fd, buf, len, flags) { | |
var sock = SOCKFS.getSocket(fd); | |
if (!sock) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} | |
// TODO honor flags | |
return _write(fd, buf, len); | |
} | |
function _pwrite(fildes, buf, nbyte, offset) { | |
// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html | |
var stream = FS.getStream(fildes); | |
if (!stream) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} | |
try { | |
var slab = HEAP8; | |
return FS.write(stream, slab, buf, nbyte, offset); | |
} catch (e) { | |
FS.handleFSError(e); | |
return -1; | |
} | |
} | |
function _write(fildes, buf, nbyte) { | |
// ssize_t write(int fildes, const void *buf, size_t nbyte); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html | |
var stream = FS.getStream(fildes); | |
if (!stream) { | |
___setErrNo(ERRNO_CODES.EBADF); | |
return -1; | |
} | |
try { | |
var slab = HEAP8; | |
return FS.write(stream, slab, buf, nbyte); | |
} catch (e) { | |
FS.handleFSError(e); | |
return -1; | |
} | |
} | |
function _fwrite(ptr, size, nitems, stream) { | |
// size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html | |
var bytesToWrite = nitems * size; | |
if (bytesToWrite == 0) return 0; | |
var fd = _fileno(stream); | |
var bytesWritten = _write(fd, ptr, bytesToWrite); | |
if (bytesWritten == -1) { | |
var streamObj = FS.getStreamFromPtr(stream); | |
if (streamObj) streamObj.error = true; | |
return 0; | |
} else { | |
return (bytesWritten / size) | 0; | |
} | |
} | |
Module["_strlen"] = _strlen; | |
function __reallyNegative(x) { | |
return x < 0 || (x === 0 && (1 / x) === -Infinity); | |
} | |
function __formatString(format, varargs) { | |
assert((varargs & 3) === 0); | |
var textIndex = format; | |
var argIndex = 0; | |
function getNextArg(type) { | |
// NOTE: Explicitly ignoring type safety. Otherwise this fails: | |
// int x = 4; printf("%c\n", (char)x); | |
var ret; | |
argIndex = Runtime.prepVararg(argIndex, type); | |
if (type === 'double') { | |
ret = (HEAP32[((tempDoublePtr) >> 2)] = HEAP32[(((varargs) + (argIndex)) >> 2)], HEAP32[(((tempDoublePtr) + (4)) >> 2)] = HEAP32[(((varargs) + ((argIndex) + (4))) >> 2)], (+(HEAPF64[(tempDoublePtr) >> 3]))); | |
argIndex += 8; | |
} else if (type == 'i64') { | |
ret = [HEAP32[(((varargs) + (argIndex)) >> 2)], | |
HEAP32[(((varargs) + (argIndex + 4)) >> 2)] | |
]; | |
argIndex += 8; | |
} else { | |
assert((argIndex & 3) === 0); | |
type = 'i32'; // varargs are always i32, i64, or double | |
ret = HEAP32[(((varargs) + (argIndex)) >> 2)]; | |
argIndex += 4; | |
} | |
return ret; | |
} | |
var ret = []; | |
var curr, next, currArg; | |
while (1) { | |
var startTextIndex = textIndex; | |
curr = HEAP8[((textIndex) >> 0)]; | |
if (curr === 0) break; | |
next = HEAP8[((textIndex + 1) >> 0)]; | |
if (curr == 37) { | |
// Handle flags. | |
var flagAlwaysSigned = false; | |
var flagLeftAlign = false; | |
var flagAlternative = false; | |
var flagZeroPad = false; | |
var flagPadSign = false; | |
flagsLoop: while (1) { | |
switch (next) { | |
case 43: | |
flagAlwaysSigned = true; | |
break; | |
case 45: | |
flagLeftAlign = true; | |
break; | |
case 35: | |
flagAlternative = true; | |
break; | |
case 48: | |
if (flagZeroPad) { | |
break flagsLoop; | |
} else { | |
flagZeroPad = true; | |
break; | |
} | |
case 32: | |
flagPadSign = true; | |
break; | |
default: | |
break flagsLoop; | |
} | |
textIndex++; | |
next = HEAP8[((textIndex + 1) >> 0)]; | |
} | |
// Handle width. | |
var width = 0; | |
if (next == 42) { | |
width = getNextArg('i32'); | |
textIndex++; | |
next = HEAP8[((textIndex + 1) >> 0)]; | |
} else { | |
while (next >= 48 && next <= 57) { | |
width = width * 10 + (next - 48); | |
textIndex++; | |
next = HEAP8[((textIndex + 1) >> 0)]; | |
} | |
} | |
// Handle precision. | |
var precisionSet = false, | |
precision = -1; | |
if (next == 46) { | |
precision = 0; | |
precisionSet = true; | |
textIndex++; | |
next = HEAP8[((textIndex + 1) >> 0)]; | |
if (next == 42) { | |
precision = getNextArg('i32'); | |
textIndex++; | |
} else { | |
while (1) { | |
var precisionChr = HEAP8[((textIndex + 1) >> 0)]; | |
if (precisionChr < 48 || | |
precisionChr > 57) break; | |
precision = precision * 10 + (precisionChr - 48); | |
textIndex++; | |
} | |
} | |
next = HEAP8[((textIndex + 1) >> 0)]; | |
} | |
if (precision < 0) { | |
precision = 6; // Standard default. | |
precisionSet = false; | |
} | |
// Handle integer sizes. WARNING: These assume a 32-bit architecture! | |
var argSize; | |
switch (String.fromCharCode(next)) { | |
case 'h': | |
var nextNext = HEAP8[((textIndex + 2) >> 0)]; | |
if (nextNext == 104) { | |
textIndex++; | |
argSize = 1; // char (actually i32 in varargs) | |
} else { | |
argSize = 2; // short (actually i32 in varargs) | |
} | |
break; | |
case 'l': | |
var nextNext = HEAP8[((textIndex + 2) >> 0)]; | |
if (nextNext == 108) { | |
textIndex++; | |
argSize = 8; // long long | |
} else { | |
argSize = 4; // long | |
} | |
break; | |
case 'L': // long long | |
case 'q': // int64_t | |
case 'j': // intmax_t | |
argSize = 8; | |
break; | |
case 'z': // size_t | |
case 't': // ptrdiff_t | |
case 'I': // signed ptrdiff_t or unsigned size_t | |
argSize = 4; | |
break; | |
default: | |
argSize = null; | |
} | |
if (argSize) textIndex++; | |
next = HEAP8[((textIndex + 1) >> 0)]; | |
// Handle type specifier. | |
switch (String.fromCharCode(next)) { | |
case 'd': | |
case 'i': | |
case 'u': | |
case 'o': | |
case 'x': | |
case 'X': | |
case 'p': | |
{ | |
// Integer. | |
var signed = next == 100 || next == 105; | |
argSize = argSize || 4; | |
var currArg = getNextArg('i' + (argSize * 8)); | |
var origArg = currArg; | |
var argText; | |
// Flatten i64-1 [low, high] into a (slightly rounded) double | |
if (argSize == 8) { | |
currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117); | |
} | |
// Truncate to requested size. | |
if (argSize <= 4) { | |
var limit = Math.pow(256, argSize) - 1; | |
currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8); | |
} | |
// Format the number. | |
var currAbsArg = Math.abs(currArg); | |
var prefix = ''; | |
if (next == 100 || next == 105) { | |
if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); | |
else | |
argText = reSign(currArg, 8 * argSize, 1).toString(10); | |
} else if (next == 117) { | |
if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); | |
else | |
argText = unSign(currArg, 8 * argSize, 1).toString(10); | |
currArg = Math.abs(currArg); | |
} else if (next == 111) { | |
argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8); | |
} else if (next == 120 || next == 88) { | |
prefix = (flagAlternative && currArg != 0) ? '0x' : ''; | |
if (argSize == 8 && i64Math) { | |
if (origArg[1]) { | |
argText = (origArg[1] >>> 0).toString(16); | |
var lower = (origArg[0] >>> 0).toString(16); | |
while (lower.length < 8) lower = '0' + lower; | |
argText += lower; | |
} else { | |
argText = (origArg[0] >>> 0).toString(16); | |
} | |
} else | |
if (currArg < 0) { | |
// Represent negative numbers in hex as 2's complement. | |
currArg = -currArg; | |
argText = (currAbsArg - 1).toString(16); | |
var buffer = []; | |
for (var i = 0; i < argText.length; i++) { | |
buffer.push((0xF - parseInt(argText[i], 16)).toString(16)); | |
} | |
argText = buffer.join(''); | |
while (argText.length < argSize * 2) argText = 'f' + argText; | |
} else { | |
argText = currAbsArg.toString(16); | |
} | |
if (next == 88) { | |
prefix = prefix.toUpperCase(); | |
argText = argText.toUpperCase(); | |
} | |
} else if (next == 112) { | |
if (currAbsArg === 0) { | |
argText = '(nil)'; | |
} else { | |
prefix = '0x'; | |
argText = currAbsArg.toString(16); | |
} | |
} | |
if (precisionSet) { | |
while (argText.length < precision) { | |
argText = '0' + argText; | |
} | |
} | |
// Add sign if needed | |
if (currArg >= 0) { | |
if (flagAlwaysSigned) { | |
prefix = '+' + prefix; | |
} else if (flagPadSign) { | |
prefix = ' ' + prefix; | |
} | |
} | |
// Move sign to prefix so we zero-pad after the sign | |
if (argText.charAt(0) == '-') { | |
prefix = '-' + prefix; | |
argText = argText.substr(1); | |
} | |
// Add padding. | |
while (prefix.length + argText.length < width) { | |
if (flagLeftAlign) { | |
argText += ' '; | |
} else { | |
if (flagZeroPad) { | |
argText = '0' + argText; | |
} else { | |
prefix = ' ' + prefix; | |
} | |
} | |
} | |
// Insert the result into the buffer. | |
argText = prefix + argText; | |
argText.split('').forEach(function(chr) { | |
ret.push(chr.charCodeAt(0)); | |
}); | |
break; | |
} | |
case 'f': | |
case 'F': | |
case 'e': | |
case 'E': | |
case 'g': | |
case 'G': | |
{ | |
// Float. | |
var currArg = getNextArg('double'); | |
var argText; | |
if (isNaN(currArg)) { | |
argText = 'nan'; | |
flagZeroPad = false; | |
} else if (!isFinite(currArg)) { | |
argText = (currArg < 0 ? '-' : '') + 'inf'; | |
flagZeroPad = false; | |
} else { | |
var isGeneral = false; | |
var effectivePrecision = Math.min(precision, 20); | |
// Convert g/G to f/F or e/E, as per: | |
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html | |
if (next == 103 || next == 71) { | |
isGeneral = true; | |
precision = precision || 1; | |
var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10); | |
if (precision > exponent && exponent >= -4) { | |
next = ((next == 103) ? 'f' : 'F').charCodeAt(0); | |
precision -= exponent + 1; | |
} else { | |
next = ((next == 103) ? 'e' : 'E').charCodeAt(0); | |
precision--; | |
} | |
effectivePrecision = Math.min(precision, 20); | |
} | |
if (next == 101 || next == 69) { | |
argText = currArg.toExponential(effectivePrecision); | |
// Make sure the exponent has at least 2 digits. | |
if (/[eE][-+]\d$/.test(argText)) { | |
argText = argText.slice(0, -1) + '0' + argText.slice(-1); | |
} | |
} else if (next == 102 || next == 70) { | |
argText = currArg.toFixed(effectivePrecision); | |
if (currArg === 0 && __reallyNegative(currArg)) { | |
argText = '-' + argText; | |
} | |
} | |
var parts = argText.split('e'); | |
if (isGeneral && !flagAlternative) { | |
// Discard trailing zeros and periods. | |
while (parts[0].length > 1 && parts[0].indexOf('.') != -1 && | |
(parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) { | |
parts[0] = parts[0].slice(0, -1); | |
} | |
} else { | |
// Make sure we have a period in alternative mode. | |
if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.'; | |
// Zero pad until required precision. | |
while (precision > effectivePrecision++) parts[0] += '0'; | |
} | |
argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : ''); | |
// Capitalize 'E' if needed. | |
if (next == 69) argText = argText.toUpperCase(); | |
// Add sign. | |
if (currArg >= 0) { | |
if (flagAlwaysSigned) { | |
argText = '+' + argText; | |
} else if (flagPadSign) { | |
argText = ' ' + argText; | |
} | |
} | |
} | |
// Add padding. | |
while (argText.length < width) { | |
if (flagLeftAlign) { | |
argText += ' '; | |
} else { | |
if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) { | |
argText = argText[0] + '0' + argText.slice(1); | |
} else { | |
argText = (flagZeroPad ? '0' : ' ') + argText; | |
} | |
} | |
} | |
// Adjust case. | |
if (next < 97) argText = argText.toUpperCase(); | |
// Insert the result into the buffer. | |
argText.split('').forEach(function(chr) { | |
ret.push(chr.charCodeAt(0)); | |
}); | |
break; | |
} | |
case 's': | |
{ | |
// String. | |
var arg = getNextArg('i8*'); | |
var argLength = arg ? _strlen(arg) : '(null)'.length; | |
if (precisionSet) argLength = Math.min(argLength, precision); | |
if (!flagLeftAlign) { | |
while (argLength < width--) { | |
ret.push(32); | |
} | |
} | |
if (arg) { | |
for (var i = 0; i < argLength; i++) { | |
ret.push(HEAPU8[((arg++) >> 0)]); | |
} | |
} else { | |
ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true)); | |
} | |
if (flagLeftAlign) { | |
while (argLength < width--) { | |
ret.push(32); | |
} | |
} | |
break; | |
} | |
case 'c': | |
{ | |
// Character. | |
if (flagLeftAlign) ret.push(getNextArg('i8')); | |
while (--width > 0) { | |
ret.push(32); | |
} | |
if (!flagLeftAlign) ret.push(getNextArg('i8')); | |
break; | |
} | |
case 'n': | |
{ | |
// Write the length written so far to the next parameter. | |
var ptr = getNextArg('i32*'); | |
HEAP32[((ptr) >> 2)] = ret.length; | |
break; | |
} | |
case '%': | |
{ | |
// Literal percent sign. | |
ret.push(curr); | |
break; | |
} | |
default: | |
{ | |
// Unknown specifiers remain untouched. | |
for (var i = startTextIndex; i < textIndex + 2; i++) { | |
ret.push(HEAP8[((i) >> 0)]); | |
} | |
} | |
} | |
textIndex += 2; | |
// TODO: Support a/A (hex float) and m (last error) specifiers. | |
// TODO: Support %1${specifier} for arg selection. | |
} else { | |
ret.push(curr); | |
textIndex += 1; | |
} | |
} | |
return ret; | |
} | |
function _fprintf(stream, format, varargs) { | |
// int fprintf(FILE *restrict stream, const char *restrict format, ...); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html | |
var result = __formatString(format, varargs); | |
var stack = Runtime.stackSave(); | |
var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream); | |
Runtime.stackRestore(stack); | |
return ret; | |
} | |
function _printf(format, varargs) { | |
// int printf(const char *restrict format, ...); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html | |
var stdout = HEAP32[((_stdout) >> 2)]; | |
return _fprintf(stdout, format, varargs); | |
} | |
function _fgetc(stream) { | |
// int fgetc(FILE *stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fgetc.html | |
var streamObj = FS.getStreamFromPtr(stream); | |
if (!streamObj) return -1; | |
if (streamObj.eof || streamObj.error) return -1; | |
var ret = _fread(_fgetc.ret, 1, 1, stream); | |
if (ret == 0) { | |
return -1; | |
} else if (ret == -1) { | |
streamObj.error = true; | |
return -1; | |
} else { | |
return HEAPU8[((_fgetc.ret) >> 0)]; | |
} | |
} | |
function _fgets(s, n, stream) { | |
// char *fgets(char *restrict s, int n, FILE *restrict stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fgets.html | |
var streamObj = FS.getStreamFromPtr(stream); | |
if (!streamObj) return 0; | |
if (streamObj.error || streamObj.eof) return 0; | |
var byte_; | |
for (var i = 0; i < n - 1 && byte_ != 10; i++) { | |
byte_ = _fgetc(stream); | |
if (byte_ == -1) { | |
if (streamObj.error || (streamObj.eof && i == 0)) return 0; | |
else if (streamObj.eof) break; | |
} | |
HEAP8[(((s) + (i)) >> 0)] = byte_; | |
} | |
HEAP8[(((s) + (i)) >> 0)] = 0; | |
return s; | |
} | |
function _open(path, oflag, varargs) { | |
// int open(const char *path, int oflag, ...); | |
// http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html | |
var mode = HEAP32[((varargs) >> 2)]; | |
path = Pointer_stringify(path); | |
try { | |
var stream = FS.open(path, oflag, mode); | |
return stream.fd; | |
} catch (e) { | |
FS.handleFSError(e); | |
return -1; | |
} | |
} | |
function _fopen(filename, mode) { | |
// FILE *fopen(const char *restrict filename, const char *restrict mode); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html | |
var flags; | |
mode = Pointer_stringify(mode); | |
if (mode[0] == 'r') { | |
if (mode.indexOf('+') != -1) { | |
flags = 2; | |
} else { | |
flags = 0; | |
} | |
} else if (mode[0] == 'w') { | |
if (mode.indexOf('+') != -1) { | |
flags = 2; | |
} else { | |
flags = 1; | |
} | |
flags |= 64; | |
flags |= 512; | |
} else if (mode[0] == 'a') { | |
if (mode.indexOf('+') != -1) { | |
flags = 2; | |
} else { | |
flags = 1; | |
} | |
flags |= 64; | |
flags |= 1024; | |
} else { | |
___setErrNo(ERRNO_CODES.EINVAL); | |
return 0; | |
} | |
var fd = _open(filename, flags, allocate([0x1FF, 0, 0, 0], 'i32', ALLOC_STACK)); // All creation permissions. | |
return fd === -1 ? 0 : FS.getPtrForStream(FS.getStream(fd)); | |
} | |
function _feof(stream) { | |
// int feof(FILE *stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/feof.html | |
stream = FS.getStreamFromPtr(stream); | |
return Number(stream && stream.eof); | |
} | |
function _emscripten_memcpy_big(dest, src, num) { | |
HEAPU8.set(HEAPU8.subarray(src, src + num), dest); | |
return dest; | |
} | |
Module["_memcpy"] = _memcpy; | |
function _fputc(c, stream) { | |
// int fputc(int c, FILE *stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html | |
var chr = unSign(c & 0xFF); | |
HEAP8[((_fputc.ret) >> 0)] = chr; | |
var fd = _fileno(stream); | |
var ret = _write(fd, _fputc.ret, 1); | |
if (ret == -1) { | |
var streamObj = FS.getStreamFromPtr(stream); | |
if (streamObj) streamObj.error = true; | |
return -1; | |
} else { | |
return chr; | |
} | |
} | |
function _putchar(c) { | |
// int putchar(int c); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/putchar.html | |
return _fputc(c, HEAP32[((_stdout) >> 2)]); | |
} | |
function _sbrk(bytes) { | |
// Implement a Linux-like 'memory area' for our 'process'. | |
// Changes the size of the memory area by |bytes|; returns the | |
// address of the previous top ('break') of the memory area | |
// We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP | |
var self = _sbrk; | |
if (!self.called) { | |
DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned | |
self.called = true; | |
assert(Runtime.dynamicAlloc); | |
self.alloc = Runtime.dynamicAlloc; | |
Runtime.dynamicAlloc = function() { | |
abort('cannot dynamically allocate, sbrk now has control') | |
}; | |
} | |
var ret = DYNAMICTOP; | |
if (bytes != 0) { | |
var success = self.alloc(bytes); | |
if (!success) return -1 >>> 0; // sbrk failure code | |
} | |
return ret; // Previous break location. | |
} | |
function _fputs(s, stream) { | |
// int fputs(const char *restrict s, FILE *restrict stream); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html | |
var fd = _fileno(stream); | |
return _write(fd, s, _strlen(s)); | |
} | |
function _puts(s) { | |
// int puts(const char *s); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html | |
// NOTE: puts() always writes an extra newline. | |
var stdout = HEAP32[((_stdout) >> 2)]; | |
var ret = _fputs(s, stdout); | |
if (ret < 0) { | |
return ret; | |
} else { | |
var newlineRet = _fputc(10, stdout); | |
return (newlineRet < 0) ? -1 : ret + 1; | |
} | |
} | |
function ___errno_location() { | |
return ___errno_state; | |
} | |
function _emscripten_set_main_loop_timing(mode, value) { | |
Browser.mainLoop.timingMode = mode; | |
Browser.mainLoop.timingValue = value; | |
if (!Browser.mainLoop.func) { | |
return 1; // Return non-zero on failure, can't set timing mode when there is no main loop. | |
} | |
if (mode == 0 /*EM_TIMING_SETTIMEOUT*/ ) { | |
Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() { | |
setTimeout(Browser.mainLoop.runner, value); // doing this each time means that on exception, we stop | |
}; | |
Browser.mainLoop.method = 'timeout'; | |
} else if (mode == 1 /*EM_TIMING_RAF*/ ) { | |
Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() { | |
Browser.requestAnimationFrame(Browser.mainLoop.runner); | |
}; | |
Browser.mainLoop.method = 'rAF'; | |
} | |
return 0; | |
} | |
function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) { | |
Module['noExitRuntime'] = true; | |
assert(!Browser.mainLoop.func, 'emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.'); | |
Browser.mainLoop.func = func; | |
Browser.mainLoop.arg = arg; | |
var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop; | |
Browser.mainLoop.runner = function Browser_mainLoop_runner() { | |
if (ABORT) return; | |
if (Browser.mainLoop.queue.length > 0) { | |
var start = Date.now(); | |
var blocker = Browser.mainLoop.queue.shift(); | |
blocker.func(blocker.arg); | |
if (Browser.mainLoop.remainingBlockers) { | |
var remaining = Browser.mainLoop.remainingBlockers; | |
var next = remaining % 1 == 0 ? remaining - 1 : Math.floor(remaining); | |
if (blocker.counted) { | |
Browser.mainLoop.remainingBlockers = next; | |
} else { | |
// not counted, but move the progress along a tiny bit | |
next = next + 0.5; // do not steal all the next one's progress | |
Browser.mainLoop.remainingBlockers = (8 * remaining + next) / 9; | |
} | |
} | |
console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers); | |
Browser.mainLoop.updateStatus(); | |
setTimeout(Browser.mainLoop.runner, 0); | |
return; | |
} | |
// catch pauses from non-main loop sources | |
if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; | |
// Implement very basic swap interval control | |
Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0; | |
if (Browser.mainLoop.timingMode == 1 /*EM_TIMING_RAF*/ && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) { | |
// Not the scheduled time to render this frame - skip. | |
Browser.mainLoop.scheduler(); | |
return; | |
} | |
// Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize | |
// VBO double-buffering and reduce GPU stalls. | |
if (Browser.mainLoop.method === 'timeout' && Module.ctx) { | |
Module.printErr('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!'); | |
Browser.mainLoop.method = ''; // just warn once per call to set main loop | |
} | |
Browser.mainLoop.runIter(function() { | |
if (typeof arg !== 'undefined') { | |
Runtime.dynCall('vi', func, [arg]); | |
} else { | |
Runtime.dynCall('v', func); | |
} | |
}); | |
// catch pauses from the main loop itself | |
if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; | |
// Queue new audio data. This is important to be right after the main loop invocation, so that we will immediately be able | |
// to queue the newest produced audio samples. | |
// TODO: Consider adding pre- and post- rAF callbacks so that GL.newRenderingFrameStarted() and SDL.audio.queueNewAudioData() | |
// do not need to be hardcoded into this function, but can be more generic. | |
if (typeof SDL === 'object' && SDL.audio && SDL.audio.queueNewAudioData) SDL.audio.queueNewAudioData(); | |
Browser.mainLoop.scheduler(); | |
} | |
if (!noSetTiming) { | |
if (fps && fps > 0) _emscripten_set_main_loop_timing(0 /*EM_TIMING_SETTIMEOUT*/ , 1000.0 / fps); | |
else _emscripten_set_main_loop_timing(1 /*EM_TIMING_RAF*/ , 1); // Do rAF by rendering each frame (no decimating) | |
Browser.mainLoop.scheduler(); | |
} | |
if (simulateInfiniteLoop) { | |
throw 'SimulateInfiniteLoop'; | |
} | |
} | |
var Browser = { | |
mainLoop: { | |
scheduler: null, | |
method: "", | |
currentlyRunningMainloop: 0, | |
func: null, | |
arg: 0, | |
timingMode: 0, | |
timingValue: 0, | |
currentFrameNumber: 0, | |
queue: [], | |
pause: function() { | |
Browser.mainLoop.scheduler = null; | |
Browser.mainLoop.currentlyRunningMainloop++; // Incrementing this signals the previous main loop that it's now become old, and it must return. | |
}, | |
resume: function() { | |
Browser.mainLoop.currentlyRunningMainloop++; | |
var timingMode = Browser.mainLoop.timingMode; | |
var timingValue = Browser.mainLoop.timingValue; | |
var func = Browser.mainLoop.func; | |
Browser.mainLoop.func = null; | |
_emscripten_set_main_loop(func, 0, false, Browser.mainLoop.arg, true /* do not set timing and call scheduler, we will do it on the next lines */ ); | |
_emscripten_set_main_loop_timing(timingMode, timingValue); | |
Browser.mainLoop.scheduler(); | |
}, | |
updateStatus: function() { | |
if (Module['setStatus']) { | |
var message = Module['statusMessage'] || 'Please wait...'; | |
var remaining = Browser.mainLoop.remainingBlockers; | |
var expected = Browser.mainLoop.expectedBlockers; | |
if (remaining) { | |
if (remaining < expected) { | |
Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')'); | |
} else { | |
Module['setStatus'](message); | |
} | |
} else { | |
Module['setStatus'](''); | |
} | |
} | |
}, | |
runIter: function(func) { | |
if (ABORT) return; | |
if (Module['preMainLoop']) { | |
var preRet = Module['preMainLoop'](); | |
if (preRet === false) { | |
return; // |return false| skips a frame | |
} | |
} | |
try { | |
func(); | |
} catch (e) { | |
if (e instanceof ExitStatus) { | |
return; | |
} else { | |
if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); | |
throw e; | |
} | |
} | |
if (Module['postMainLoop']) Module['postMainLoop'](); | |
} | |
}, | |
isFullScreen: false, | |
pointerLock: false, | |
moduleContextCreatedCallbacks: [], | |
workers: [], | |
init: function() { | |
if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers | |
if (Browser.initted) return; | |
Browser.initted = true; | |
try { | |
new Blob(); | |
Browser.hasBlobConstructor = true; | |
} catch (e) { | |
Browser.hasBlobConstructor = false; | |
console.log("warning: no blob constructor, cannot create blobs with mimetypes"); | |
} | |
Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null)); | |
Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined; | |
if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') { | |
console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."); | |
Module.noImageDecoding = true; | |
} | |
// Support for plugins that can process preloaded files. You can add more of these to | |
// your app by creating and appending to Module.preloadPlugins. | |
// | |
// Each plugin is asked if it can handle a file based on the file's name. If it can, | |
// it is given the file's raw data. When it is done, it calls a callback with the file's | |
// (possibly modified) data. For example, a plugin might decompress a file, or it | |
// might create some side data structure for use later (like an Image element, etc.). | |
var imagePlugin = {}; | |
imagePlugin['canHandle'] = function imagePlugin_canHandle(name) { | |
return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name); | |
}; | |
imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) { | |
var b = null; | |
if (Browser.hasBlobConstructor) { | |
try { | |
b = new Blob([byteArray], { | |
type: Browser.getMimetype(name) | |
}); | |
if (b.size !== byteArray.length) { // Safari bug #118630 | |
// Safari's Blob can only take an ArrayBuffer | |
b = new Blob([(new Uint8Array(byteArray)).buffer], { | |
type: Browser.getMimetype(name) | |
}); | |
} | |
} catch (e) { | |
Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder'); | |
} | |
} | |
if (!b) { | |
var bb = new Browser.BlobBuilder(); | |
bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range | |
b = bb.getBlob(); | |
} | |
var url = Browser.URLObject.createObjectURL(b); | |
var img = new Image(); | |
img.onload = function img_onload() { | |
assert(img.complete, 'Image ' + name + ' could not be decoded'); | |
var canvas = document.createElement('canvas'); | |
canvas.width = img.width; | |
canvas.height = img.height; | |
var ctx = canvas.getContext('2d'); | |
ctx.drawImage(img, 0, 0); | |
Module["preloadedImages"][name] = canvas; | |
Browser.URLObject.revokeObjectURL(url); | |
if (onload) onload(byteArray); | |
}; | |
img.onerror = function img_onerror(event) { | |
console.log('Image ' + url + ' could not be decoded'); | |
if (onerror) onerror(); | |
}; | |
img.src = url; | |
}; | |
Module['preloadPlugins'].push(imagePlugin); | |
var audioPlugin = {}; | |
audioPlugin['canHandle'] = function audioPlugin_canHandle(name) { | |
return !Module.noAudioDecoding && name.substr(-4) in { | |
'.ogg': 1, | |
'.wav': 1, | |
'.mp3': 1 | |
}; | |
}; | |
audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) { | |
var done = false; | |
function finish(audio) { | |
if (done) return; | |
done = true; | |
Module["preloadedAudios"][name] = audio; | |
if (onload) onload(byteArray); | |
} | |
function fail() { | |
if (done) return; | |
done = true; | |
Module["preloadedAudios"][name] = new Audio(); // empty shim | |
if (onerror) onerror(); | |
} | |
if (Browser.hasBlobConstructor) { | |
try { | |
var b = new Blob([byteArray], { | |
type: Browser.getMimetype(name) | |
}); | |
} catch (e) { | |
return fail(); | |
} | |
var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this! | |
var audio = new Audio(); | |
audio.addEventListener('canplaythrough', function() { | |
finish(audio) | |
}, false); // use addEventListener due to chromium bug 124926 | |
audio.onerror = function audio_onerror(event) { | |
if (done) return; | |
console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach'); | |
function encode64(data) { | |
var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; | |
var PAD = '='; | |
var ret = ''; | |
var leftchar = 0; | |
var leftbits = 0; | |
for (var i = 0; i < data.length; i++) { | |
leftchar = (leftchar << 8) | data[i]; | |
leftbits += 8; | |
while (leftbits >= 6) { | |
var curr = (leftchar >> (leftbits - 6)) & 0x3f; | |
leftbits -= 6; | |
ret += BASE[curr]; | |
} | |
} | |
if (leftbits == 2) { | |
ret += BASE[(leftchar & 3) << 4]; | |
ret += PAD + PAD; | |
} else if (leftbits == 4) { | |
ret += BASE[(leftchar & 0xf) << 2]; | |
ret += PAD; | |
} | |
return ret; | |
} | |
audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray); | |
finish(audio); // we don't wait for confirmation this worked - but it's worth trying | |
}; | |
audio.src = url; | |
// workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror | |
Browser.safeSetTimeout(function() { | |
finish(audio); // try to use it even though it is not necessarily ready to play | |
}, 10000); | |
} else { | |
return fail(); | |
} | |
}; | |
Module['preloadPlugins'].push(audioPlugin); | |
// Canvas event setup | |
var canvas = Module['canvas']; | |
function pointerLockChange() { | |
Browser.pointerLock = document['pointerLockElement'] === canvas || | |
document['mozPointerLockElement'] === canvas || | |
document['webkitPointerLockElement'] === canvas || | |
document['msPointerLockElement'] === canvas; | |
} | |
if (canvas) { | |
// forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module | |
// Module['forcedAspectRatio'] = 4 / 3; | |
canvas.requestPointerLock = canvas['requestPointerLock'] || | |
canvas['mozRequestPointerLock'] || | |
canvas['webkitRequestPointerLock'] || | |
canvas['msRequestPointerLock'] || function() {}; | |
canvas.exitPointerLock = document['exitPointerLock'] || | |
document['mozExitPointerLock'] || | |
document['webkitExitPointerLock'] || | |
document['msExitPointerLock'] || function() {}; // no-op if function does not exist | |
canvas.exitPointerLock = canvas.exitPointerLock.bind(document); | |
document.addEventListener('pointerlockchange', pointerLockChange, false); | |
document.addEventListener('mozpointerlockchange', pointerLockChange, false); | |
document.addEventListener('webkitpointerlockchange', pointerLockChange, false); | |
document.addEventListener('mspointerlockchange', pointerLockChange, false); | |
if (Module['elementPointerLock']) { | |
canvas.addEventListener("click", function(ev) { | |
if (!Browser.pointerLock && canvas.requestPointerLock) { | |
canvas.requestPointerLock(); | |
ev.preventDefault(); | |
} | |
}, false); | |
} | |
} | |
}, | |
createContext: function(canvas, useWebGL, setInModule, webGLContextAttributes) { | |
if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx; // no need to recreate GL context if it's already been created for this canvas. | |
var ctx; | |
var contextHandle; | |
if (useWebGL) { | |
// For GLES2/desktop GL compatibility, adjust a few defaults to be different to WebGL defaults, so that they align better with the desktop defaults. | |
var contextAttributes = { | |
antialias: false, | |
alpha: false | |
}; | |
if (webGLContextAttributes) { | |
for (var attribute in webGLContextAttributes) { | |
contextAttributes[attribute] = webGLContextAttributes[attribute]; | |
} | |
} | |
contextHandle = GL.createContext(canvas, contextAttributes); | |
if (contextHandle) { | |
ctx = GL.getContext(contextHandle).GLctx; | |
} | |
// Set the background of the WebGL canvas to black | |
canvas.style.backgroundColor = "black"; | |
} else { | |
ctx = canvas.getContext('2d'); | |
} | |
if (!ctx) return null; | |
if (setInModule) { | |
if (!useWebGL) assert(typeof GLctx === 'undefined', 'cannot set in module if GLctx is used, but we are a non-GL context that would replace it'); | |
Module.ctx = ctx; | |
if (useWebGL) GL.makeContextCurrent(contextHandle); | |
Module.useWebGL = useWebGL; | |
Browser.moduleContextCreatedCallbacks.forEach(function(callback) { | |
callback() | |
}); | |
Browser.init(); | |
} | |
return ctx; | |
}, | |
destroyContext: function(canvas, useWebGL, setInModule) {}, | |
fullScreenHandlersInstalled: false, | |
lockPointer: undefined, | |
resizeCanvas: undefined, | |
requestFullScreen: function(lockPointer, resizeCanvas, vrDevice) { | |
Browser.lockPointer = lockPointer; | |
Browser.resizeCanvas = resizeCanvas; | |
Browser.vrDevice = vrDevice; | |
if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true; | |
if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false; | |
if (typeof Browser.vrDevice === 'undefined') Browser.vrDevice = null; | |
var canvas = Module['canvas']; | |
function fullScreenChange() { | |
Browser.isFullScreen = false; | |
var canvasContainer = canvas.parentNode; | |
if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || | |
document['mozFullScreenElement'] || document['mozFullscreenElement'] || | |
document['fullScreenElement'] || document['fullscreenElement'] || | |
document['msFullScreenElement'] || document['msFullscreenElement'] || | |
document['webkitCurrentFullScreenElement']) === canvasContainer) { | |
canvas.cancelFullScreen = document['cancelFullScreen'] || | |
document['mozCancelFullScreen'] || | |
document['webkitCancelFullScreen'] || | |
document['msExitFullscreen'] || | |
document['exitFullscreen'] || function() {}; | |
canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document); | |
if (Browser.lockPointer) canvas.requestPointerLock(); | |
Browser.isFullScreen = true; | |
if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize(); | |
} else { | |
// remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen | |
canvasContainer.parentNode.insertBefore(canvas, canvasContainer); | |
canvasContainer.parentNode.removeChild(canvasContainer); | |
if (Browser.resizeCanvas) Browser.setWindowedCanvasSize(); | |
} | |
if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen); | |
Browser.updateCanvasDimensions(canvas); | |
} | |
if (!Browser.fullScreenHandlersInstalled) { | |
Browser.fullScreenHandlersInstalled = true; | |
document.addEventListener('fullscreenchange', fullScreenChange, false); | |
document.addEventListener('mozfullscreenchange', fullScreenChange, false); | |
document.addEventListener('webkitfullscreenchange', fullScreenChange, false); | |
document.addEventListener('MSFullscreenChange', fullScreenChange, false); | |
} | |
// create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root | |
var canvasContainer = document.createElement("div"); | |
canvas.parentNode.insertBefore(canvasContainer, canvas); | |
canvasContainer.appendChild(canvas); | |
// use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size) | |
canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] || | |
canvasContainer['mozRequestFullScreen'] || | |
canvasContainer['msRequestFullscreen'] || | |
(canvasContainer['webkitRequestFullScreen'] ? function() { | |
canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) | |
} : null); | |
if (vrDevice) { | |
canvasContainer.requestFullScreen({ | |
vrDisplay: vrDevice | |
}); | |
} else { | |
canvasContainer.requestFullScreen(); | |
} | |
}, | |
nextRAF: 0, | |
fakeRequestAnimationFrame: function(func) { | |
// try to keep 60fps between calls to here | |
var now = Date.now(); | |
if (Browser.nextRAF === 0) { | |
Browser.nextRAF = now + 1000 / 60; | |
} else { | |
while (now + 2 >= Browser.nextRAF) { // fudge a little, to avoid timer jitter causing us to do lots of delay:0 | |
Browser.nextRAF += 1000 / 60; | |
} | |
} | |
var delay = Math.max(Browser.nextRAF - now, 0); | |
setTimeout(func, delay); | |
}, | |
requestAnimationFrame: function requestAnimationFrame(func) { | |
if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js) | |
Browser.fakeRequestAnimationFrame(func); | |
} else { | |
if (!window.requestAnimationFrame) { | |
window.requestAnimationFrame = window['requestAnimationFrame'] || | |
window['mozRequestAnimationFrame'] || | |
window['webkitRequestAnimationFrame'] || | |
window['msRequestAnimationFrame'] || | |
window['oRequestAnimationFrame'] || | |
Browser.fakeRequestAnimationFrame; | |
} | |
window.requestAnimationFrame(func); | |
} | |
}, | |
safeCallback: function(func) { | |
return function() { | |
if (!ABORT) return func.apply(null, arguments); | |
}; | |
}, | |
allowAsyncCallbacks: true, | |
queuedAsyncCallbacks: [], | |
pauseAsyncCallbacks: function() { | |
Browser.allowAsyncCallbacks = false; | |
}, | |
resumeAsyncCallbacks: function() { // marks future callbacks as ok to execute, and synchronously runs any remaining ones right now | |
Browser.allowAsyncCallbacks = true; | |
if (Browser.queuedAsyncCallbacks.length > 0) { | |
var callbacks = Browser.queuedAsyncCallbacks; | |
Browser.queuedAsyncCallbacks = []; | |
callbacks.forEach(function(func) { | |
func(); | |
}); | |
} | |
}, | |
safeRequestAnimationFrame: function(func) { | |
return Browser.requestAnimationFrame(function() { | |
if (ABORT) return; | |
if (Browser.allowAsyncCallbacks) { | |
func(); | |
} else { | |
Browser.queuedAsyncCallbacks.push(func); | |
} | |
}); | |
}, | |
safeSetTimeout: function(func, timeout) { | |
Module['noExitRuntime'] = true; | |
return setTimeout(function() { | |
if (ABORT) return; | |
if (Browser.allowAsyncCallbacks) { | |
func(); | |
} else { | |
Browser.queuedAsyncCallbacks.push(func); | |
} | |
}, timeout); | |
}, | |
safeSetInterval: function(func, timeout) { | |
Module['noExitRuntime'] = true; | |
return setInterval(function() { | |
if (ABORT) return; | |
if (Browser.allowAsyncCallbacks) { | |
func(); | |
} // drop it on the floor otherwise, next interval will kick in | |
}, timeout); | |
}, | |
getMimetype: function(name) { | |
return { | |
'jpg': 'image/jpeg', | |
'jpeg': 'image/jpeg', | |
'png': 'image/png', | |
'bmp': 'image/bmp', | |
'ogg': 'audio/ogg', | |
'wav': 'audio/wav', | |
'mp3': 'audio/mpeg' | |
}[name.substr(name.lastIndexOf('.') + 1)]; | |
}, | |
getUserMedia: function(func) { | |
if (!window.getUserMedia) { | |
window.getUserMedia = navigator['getUserMedia'] || | |
navigator['mozGetUserMedia']; | |
} | |
window.getUserMedia(func); | |
}, | |
getMovementX: function(event) { | |
return event['movementX'] || | |
event['mozMovementX'] || | |
event['webkitMovementX'] || | |
0; | |
}, | |
getMovementY: function(event) { | |
return event['movementY'] || | |
event['mozMovementY'] || | |
event['webkitMovementY'] || | |
0; | |
}, | |
getMouseWheelDelta: function(event) { | |
var delta = 0; | |
switch (event.type) { | |
case 'DOMMouseScroll': | |
delta = event.detail; | |
break; | |
case 'mousewheel': | |
delta = event.wheelDelta; | |
break; | |
case 'wheel': | |
delta = event['deltaY']; | |
break; | |
default: | |
throw 'unrecognized mouse wheel event: ' + event.type; | |
} | |
return delta; | |
}, | |
mouseX: 0, | |
mouseY: 0, | |
mouseMovementX: 0, | |
mouseMovementY: 0, | |
touches: {}, | |
lastTouches: {}, | |
calculateMouseEvent: function(event) { // event should be mousemove, mousedown or mouseup | |
if (Browser.pointerLock) { | |
// When the pointer is locked, calculate the coordinates | |
// based on the movement of the mouse. | |
// Workaround for Firefox bug 764498 | |
if (event.type != 'mousemove' && | |
('mozMovementX' in event)) { | |
Browser.mouseMovementX = Browser.mouseMovementY = 0; | |
} else { | |
Browser.mouseMovementX = Browser.getMovementX(event); | |
Browser.mouseMovementY = Browser.getMovementY(event); | |
} | |
// check if SDL is available | |
if (typeof SDL != "undefined") { | |
Browser.mouseX = SDL.mouseX + Browser.mouseMovementX; | |
Browser.mouseY = SDL.mouseY + Browser.mouseMovementY; | |
} else { | |
// just add the mouse delta to the current absolut mouse position | |
// FIXME: ideally this should be clamped against the canvas size and zero | |
Browser.mouseX += Browser.mouseMovementX; | |
Browser.mouseY += Browser.mouseMovementY; | |
} | |
} else { | |
// Otherwise, calculate the movement based on the changes | |
// in the coordinates. | |
var rect = Module["canvas"].getBoundingClientRect(); | |
var cw = Module["canvas"].width; | |
var ch = Module["canvas"].height; | |
// Neither .scrollX or .pageXOffset are defined in a spec, but | |
// we prefer .scrollX because it is currently in a spec draft. | |
// (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/) | |
var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset); | |
var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset); | |
if (event.type === 'touchstart' || event.type === 'touchend' || event.type === 'touchmove') { | |
var touch = event.touch; | |
if (touch === undefined) { | |
return; // the "touch" property is only defined in SDL | |
} | |
var adjustedX = touch.pageX - (scrollX + rect.left); | |
var adjustedY = touch.pageY - (scrollY + rect.top); | |
adjustedX = adjustedX * (cw / rect.width); | |
adjustedY = adjustedY * (ch / rect.height); | |
var coords = { | |
x: adjustedX, | |
y: adjustedY | |
}; | |
if (event.type === 'touchstart') { | |
Browser.lastTouches[touch.identifier] = coords; | |
Browser.touches[touch.identifier] = coords; | |
} else if (event.type === 'touchend' || event.type === 'touchmove') { | |
var last = Browser.touches[touch.identifier]; | |
if (!last) last = coords; | |
Browser.lastTouches[touch.identifier] = last; | |
Browser.touches[touch.identifier] = coords; | |
} | |
return; | |
} | |
var x = event.pageX - (scrollX + rect.left); | |
var y = event.pageY - (scrollY + rect.top); | |
// the canvas might be CSS-scaled compared to its backbuffer; | |
// SDL-using content will want mouse coordinates in terms | |
// of backbuffer units. | |
x = x * (cw / rect.width); | |
y = y * (ch / rect.height); | |
Browser.mouseMovementX = x - Browser.mouseX; | |
Browser.mouseMovementY = y - Browser.mouseY; | |
Browser.mouseX = x; | |
Browser.mouseY = y; | |
} | |
}, | |
xhrLoad: function(url, onload, onerror) { | |
var xhr = new XMLHttpRequest(); | |
xhr.open('GET', url, true); | |
xhr.responseType = 'arraybuffer'; | |
xhr.onload = function xhr_onload() { | |
if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 | |
onload(xhr.response); | |
} else { | |
onerror(); | |
} | |
}; | |
xhr.onerror = onerror; | |
xhr.send(null); | |
}, | |
asyncLoad: function(url, onload, onerror, noRunDep) { | |
Browser.xhrLoad(url, function(arrayBuffer) { | |
assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); | |
onload(new Uint8Array(arrayBuffer)); | |
if (!noRunDep) removeRunDependency('al ' + url); | |
}, function(event) { | |
if (onerror) { | |
onerror(); | |
} else { | |
throw 'Loading data file "' + url + '" failed.'; | |
} | |
}); | |
if (!noRunDep) addRunDependency('al ' + url); | |
}, | |
resizeListeners: [], | |
updateResizeListeners: function() { | |
var canvas = Module['canvas']; | |
Browser.resizeListeners.forEach(function(listener) { | |
listener(canvas.width, canvas.height); | |
}); | |
}, | |
setCanvasSize: function(width, height, noUpdates) { | |
var canvas = Module['canvas']; | |
Browser.updateCanvasDimensions(canvas, width, height); | |
if (!noUpdates) Browser.updateResizeListeners(); | |
}, | |
windowedWidth: 0, | |
windowedHeight: 0, | |
setFullScreenCanvasSize: function() { | |
// check if SDL is available | |
if (typeof SDL != "undefined") { | |
var flags = HEAPU32[((SDL.screen + Runtime.QUANTUM_SIZE * 0) >> 2)]; | |
flags = flags | 0x00800000; // set SDL_FULLSCREEN flag | |
HEAP32[((SDL.screen + Runtime.QUANTUM_SIZE * 0) >> 2)] = flags | |
} | |
Browser.updateResizeListeners(); | |
}, | |
setWindowedCanvasSize: function() { | |
// check if SDL is available | |
if (typeof SDL != "undefined") { | |
var flags = HEAPU32[((SDL.screen + Runtime.QUANTUM_SIZE * 0) >> 2)]; | |
flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag | |
HEAP32[((SDL.screen + Runtime.QUANTUM_SIZE * 0) >> 2)] = flags | |
} | |
Browser.updateResizeListeners(); | |
}, | |
updateCanvasDimensions: function(canvas, wNative, hNative) { | |
if (wNative && hNative) { | |
canvas.widthNative = wNative; | |
canvas.heightNative = hNative; | |
} else { | |
wNative = canvas.widthNative; | |
hNative = canvas.heightNative; | |
} | |
var w = wNative; | |
var h = hNative; | |
if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) { | |
if (w / h < Module['forcedAspectRatio']) { | |
w = Math.round(h * Module['forcedAspectRatio']); | |
} else { | |
h = Math.round(w / Module['forcedAspectRatio']); | |
} | |
} | |
if (((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || | |
document['mozFullScreenElement'] || document['mozFullscreenElement'] || | |
document['fullScreenElement'] || document['fullscreenElement'] || | |
document['msFullScreenElement'] || document['msFullscreenElement'] || | |
document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) { | |
var factor = Math.min(screen.width / w, screen.height / h); | |
w = Math.round(w * factor); | |
h = Math.round(h * factor); | |
} | |
if (Browser.resizeCanvas) { | |
if (canvas.width != w) canvas.width = w; | |
if (canvas.height != h) canvas.height = h; | |
if (typeof canvas.style != 'undefined') { | |
canvas.style.removeProperty("width"); | |
canvas.style.removeProperty("height"); | |
} | |
} else { | |
if (canvas.width != wNative) canvas.width = wNative; | |
if (canvas.height != hNative) canvas.height = hNative; | |
if (typeof canvas.style != 'undefined') { | |
if (w != wNative || h != hNative) { | |
canvas.style.setProperty("width", w + "px", "important"); | |
canvas.style.setProperty("height", h + "px", "important"); | |
} else { | |
canvas.style.removeProperty("width"); | |
canvas.style.removeProperty("height"); | |
} | |
} | |
} | |
}, | |
wgetRequests: {}, | |
nextWgetRequestHandle: 0, | |
getNextWgetRequestHandle: function() { | |
var handle = Browser.nextWgetRequestHandle; | |
Browser.nextWgetRequestHandle++; | |
return handle; | |
} | |
}; | |
function _time(ptr) { | |
var ret = (Date.now() / 1000) | 0; | |
if (ptr) { | |
HEAP32[((ptr) >> 2)] = ret; | |
} | |
return ret; | |
} | |
function __exit(status) { | |
// void _exit(int status); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html | |
Module['exit'](status); | |
} | |
function _exit(status) { | |
__exit(status); | |
} | |
function _gets(s) { | |
// char *gets(char *s); | |
// http://pubs.opengroup.org/onlinepubs/000095399/functions/gets.html | |
return _fgets(s, 1e6, HEAP32[((_stdin) >> 2)]); | |
} | |
var ___tm_current = allocate(44, "i8", ALLOC_STATIC); | |
var ___tm_timezone = allocate(intArrayFromString("GMT"), "i8", ALLOC_STATIC); | |
var _tzname = allocate(8, "i32*", ALLOC_STATIC); | |
var _daylight = allocate(1, "i32*", ALLOC_STATIC); | |
var _timezone = allocate(1, "i32*", ALLOC_STATIC); | |
function _tzset() { | |
// TODO: Use (malleable) environment variables instead of system settings. | |
if (_tzset.called) return; | |
_tzset.called = true; | |
HEAP32[((_timezone) >> 2)] = -(new Date()).getTimezoneOffset() * 60; | |
var winter = new Date(2000, 0, 1); | |
var summer = new Date(2000, 6, 1); | |
HEAP32[((_daylight) >> 2)] = Number(winter.getTimezoneOffset() != summer.getTimezoneOffset()); | |
function extractZone(date) { | |
var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); | |
return match ? match[1] : "GMT"; | |
}; | |
var winterName = extractZone(winter); | |
var summerName = extractZone(summer); | |
var winterNamePtr = allocate(intArrayFromString(winterName), 'i8', ALLOC_NORMAL); | |
var summerNamePtr = allocate(intArrayFromString(summerName), 'i8', ALLOC_NORMAL); | |
if (summer.getTimezoneOffset() < winter.getTimezoneOffset()) { | |
// Northern hemisphere | |
HEAP32[((_tzname) >> 2)] = winterNamePtr; | |
HEAP32[(((_tzname) + (4)) >> 2)] = summerNamePtr; | |
} else { | |
HEAP32[((_tzname) >> 2)] = summerNamePtr; | |
HEAP32[(((_tzname) + (4)) >> 2)] = winterNamePtr; | |
} | |
} | |
function _localtime_r(time, tmPtr) { | |
_tzset(); | |
var date = new Date(HEAP32[((time) >> 2)] * 1000); | |
HEAP32[((tmPtr) >> 2)] = date.getSeconds(); | |
HEAP32[(((tmPtr) + (4)) >> 2)] = date.getMinutes(); | |
HEAP32[(((tmPtr) + (8)) >> 2)] = date.getHours(); | |
HEAP32[(((tmPtr) + (12)) >> 2)] = date.getDate(); | |
HEAP32[(((tmPtr) + (16)) >> 2)] = date.getMonth(); | |
HEAP32[(((tmPtr) + (20)) >> 2)] = date.getFullYear() - 1900; | |
HEAP32[(((tmPtr) + (24)) >> 2)] = date.getDay(); | |
var start = new Date(date.getFullYear(), 0, 1); | |
var yday = ((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)) | 0; | |
HEAP32[(((tmPtr) + (28)) >> 2)] = yday; | |
HEAP32[(((tmPtr) + (36)) >> 2)] = -(date.getTimezoneOffset() * 60); | |
// DST is in December in South | |
var summerOffset = new Date(2000, 6, 1).getTimezoneOffset(); | |
var winterOffset = start.getTimezoneOffset(); | |
var dst = (date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0; | |
HEAP32[(((tmPtr) + (32)) >> 2)] = dst; | |
var zonePtr = HEAP32[(((_tzname) + (dst ? Runtime.QUANTUM_SIZE : 0)) >> 2)]; | |
HEAP32[(((tmPtr) + (40)) >> 2)] = zonePtr; | |
return tmPtr; | |
} | |
function _localtime(time) { | |
return _localtime_r(time, ___tm_current); | |
} | |
___errno_state = Runtime.staticAlloc(4); | |
HEAP32[((___errno_state) >> 2)] = 0; | |
FS.staticInit(); | |
__ATINIT__.unshift(function() { | |
if (!Module["noFSInit"] && !FS.init.initialized) FS.init() | |
}); | |
__ATMAIN__.push(function() { | |
FS.ignorePermissions = false | |
}); | |
__ATEXIT__.push(function() { | |
FS.quit() | |
}); | |
Module["FS_createFolder"] = FS.createFolder; | |
Module["FS_createPath"] = FS.createPath; | |
Module["FS_createDataFile"] = FS.createDataFile; | |
Module["FS_createPreloadedFile"] = FS.createPreloadedFile; | |
Module["FS_createLazyFile"] = FS.createLazyFile; | |
Module["FS_createLink"] = FS.createLink; | |
Module["FS_createDevice"] = FS.createDevice; | |
__ATINIT__.unshift(function() { | |
TTY.init() | |
}); | |
__ATEXIT__.push(function() { | |
TTY.shutdown() | |
}); | |
if (ENVIRONMENT_IS_NODE) { | |
var fs = require("fs"); | |
var NODEJS_PATH = require("path"); | |
NODEFS.staticInit(); | |
} | |
__ATINIT__.push(function() { | |
SOCKFS.root = FS.mount(SOCKFS, {}, null); | |
}); | |
___buildEnvironment(ENV); | |
_fgetc.ret = allocate([0], "i8", ALLOC_STATIC); | |
_fputc.ret = allocate([0], "i8", ALLOC_STATIC); | |
Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas, vrDevice) { | |
Browser.requestFullScreen(lockPointer, resizeCanvas, vrDevice) | |
}; | |
Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { | |
Browser.requestAnimationFrame(func) | |
}; | |
Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { | |
Browser.setCanvasSize(width, height, noUpdates) | |
}; | |
Module["pauseMainLoop"] = function Module_pauseMainLoop() { | |
Browser.mainLoop.pause() | |
}; | |
Module["resumeMainLoop"] = function Module_resumeMainLoop() { | |
Browser.mainLoop.resume() | |
}; | |
Module["getUserMedia"] = function Module_getUserMedia() { | |
Browser.getUserMedia() | |
} | |
Module["createContext"] = function Module_createContext(canvas, useWebGL, setInModule, webGLContextAttributes) { | |
return Browser.createContext(canvas, useWebGL, setInModule, webGLContextAttributes) | |
} | |
STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP); | |
staticSealed = true; // seal the static portion of memory | |
STACK_MAX = STACK_BASE + TOTAL_STACK; | |
DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX); | |
assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack"); | |
Module.asmGlobalArg = { | |
"Math": Math, | |
"Int8Array": Int8Array, | |
"Int16Array": Int16Array, | |
"Int32Array": Int32Array, | |
"Uint8Array": Uint8Array, | |
"Uint16Array": Uint16Array, | |
"Uint32Array": Uint32Array, | |
"Float32Array": Float32Array, | |
"Float64Array": Float64Array, | |
"NaN": NaN, | |
"Infinity": Infinity | |
}; | |
Module.asmLibraryArg = { | |
"abort": abort, | |
"assert": assert, | |
"_send": _send, | |
"_fread": _fread, | |
"_open": _open, | |
"_write": _write, | |
"_fopen": _fopen, | |
"___buildEnvironment": ___buildEnvironment, | |
"_fflush": _fflush, | |
"_pwrite": _pwrite, | |
"_localtime_r": _localtime_r, | |
"_tzset": _tzset, | |
"_emscripten_set_main_loop_timing": _emscripten_set_main_loop_timing, | |
"_sbrk": _sbrk, | |
"_emscripten_memcpy_big": _emscripten_memcpy_big, | |
"_fileno": _fileno, | |
"_sysconf": _sysconf, | |
"___setErrNo": ___setErrNo, | |
"__formatString": __formatString, | |
"_putchar": _putchar, | |
"_gets": _gets, | |
"_pread": _pread, | |
"_puts": _puts, | |
"_printf": _printf, | |
"_fclose": _fclose, | |
"__reallyNegative": __reallyNegative, | |
"_feof": _feof, | |
"_emscripten_set_main_loop": _emscripten_set_main_loop, | |
"___errno_location": ___errno_location, | |
"_recv": _recv, | |
"_fgetc": _fgetc, | |
"_getenv": _getenv, | |
"_mkport": _mkport, | |
"__exit": __exit, | |
"_read": _read, | |
"_fputc": _fputc, | |
"_abort": _abort, | |
"_fwrite": _fwrite, | |
"_time": _time, | |
"_fprintf": _fprintf, | |
"_fgets": _fgets, | |
"_fputs": _fputs, | |
"_localtime": _localtime, | |
"_exit": _exit, | |
"_close": _close, | |
"STACKTOP": STACKTOP, | |
"STACK_MAX": STACK_MAX, | |
"tempDoublePtr": tempDoublePtr, | |
"ABORT": ABORT, | |
"_stdin": _stdin | |
}; | |
// EMSCRIPTEN_START_ASM | |
var asm = (function(global, env, buffer) { | |
'use asm'; | |
var HEAP8 = new global.Int8Array(buffer); | |
var HEAP16 = new global.Int16Array(buffer); | |
var HEAP32 = new global.Int32Array(buffer); | |
var HEAPU8 = new global.Uint8Array(buffer); | |
var HEAPU16 = new global.Uint16Array(buffer); | |
var HEAPU32 = new global.Uint32Array(buffer); | |
var HEAPF32 = new global.Float32Array(buffer); | |
var HEAPF64 = new global.Float64Array(buffer); | |
var STACKTOP = env.STACKTOP | 0; | |
var STACK_MAX = env.STACK_MAX | 0; | |
var tempDoublePtr = env.tempDoublePtr | 0; | |
var ABORT = env.ABORT | 0; | |
var _stdin = env._stdin | 0; | |
var __THREW__ = 0; | |
var threwValue = 0; | |
var setjmpId = 0; | |
var undef = 0; | |
var nan = global.NaN, | |
inf = global.Infinity; | |
var tempInt = 0, | |
tempBigInt = 0, | |
tempBigIntP = 0, | |
tempBigIntS = 0, | |
tempBigIntR = 0.0, | |
tempBigIntI = 0, | |
tempBigIntD = 0, | |
tempValue = 0, | |
tempDouble = 0.0; | |
var tempRet0 = 0; | |
var tempRet1 = 0; | |
var tempRet2 = 0; | |
var tempRet3 = 0; | |
var tempRet4 = 0; | |
var tempRet5 = 0; | |
var tempRet6 = 0; | |
var tempRet7 = 0; | |
var tempRet8 = 0; | |
var tempRet9 = 0; | |
var Math_floor = global.Math.floor; | |
var Math_abs = global.Math.abs; | |
var Math_sqrt = global.Math.sqrt; | |
var Math_pow = global.Math.pow; | |
var Math_cos = global.Math.cos; | |
var Math_sin = global.Math.sin; | |
var Math_tan = global.Math.tan; | |
var Math_acos = global.Math.acos; | |
var Math_asin = global.Math.asin; | |
var Math_atan = global.Math.atan; | |
var Math_atan2 = global.Math.atan2; | |
var Math_exp = global.Math.exp; | |
var Math_log = global.Math.log; | |
var Math_ceil = global.Math.ceil; | |
var Math_imul = global.Math.imul; | |
var Math_min = global.Math.min; | |
var Math_clz32 = global.Math.clz32; | |
var abort = env.abort; | |
var assert = env.assert; | |
var _send = env._send; | |
var _fread = env._fread; | |
var _open = env._open; | |
var _write = env._write; | |
var _fopen = env._fopen; | |
var ___buildEnvironment = env.___buildEnvironment; | |
var _fflush = env._fflush; | |
var _pwrite = env._pwrite; | |
var _localtime_r = env._localtime_r; | |
var _tzset = env._tzset; | |
var _emscripten_set_main_loop_timing = env._emscripten_set_main_loop_timing; | |
var _sbrk = env._sbrk; | |
var _emscripten_memcpy_big = env._emscripten_memcpy_big; | |
var _fileno = env._fileno; | |
var _sysconf = env._sysconf; | |
var ___setErrNo = env.___setErrNo; | |
var __formatString = env.__formatString; | |
var _putchar = env._putchar; | |
var _gets = env._gets; | |
var _pread = env._pread; | |
var _puts = env._puts; | |
var _printf = env._printf; | |
var _fclose = env._fclose; | |
var __reallyNegative = env.__reallyNegative; | |
var _feof = env._feof; | |
var _emscripten_set_main_loop = env._emscripten_set_main_loop; | |
var ___errno_location = env.___errno_location; | |
var _recv = env._recv; | |
var _fgetc = env._fgetc; | |
var _getenv = env._getenv; | |
var _mkport = env._mkport; | |
var __exit = env.__exit; | |
var _read = env._read; | |
var _fputc = env._fputc; | |
var _abort = env._abort; | |
var _fwrite = env._fwrite; | |
var _time = env._time; | |
var _fprintf = env._fprintf; | |
var _fgets = env._fgets; | |
var _fputs = env._fputs; | |
var _localtime = env._localtime; | |
var _exit = env._exit; | |
var _close = env._close; | |
var tempFloat = 0.0; | |
// EMSCRIPTEN_START_FUNCS | |
function _main() { | |
var $$$163 = 0, | |
$$$164 = 0, | |
$$153 = 0, | |
$$85 = 0, | |
$$lcssa415 = 0, | |
$$lcssa418 = 0, | |
$$pr278 = 0, | |
$$pre342 = 0, | |
$$pre346 = 0, | |
$$pre347 = 0, | |
$$storemerge185 = 0, | |
$1026 = 0, | |
$1028 = 0, | |
$103 = 0, | |
$1030 = 0, | |
$1031 = 0, | |
$1061 = 0, | |
$1065 = 0, | |
$1068 = 0, | |
$107 = 0, | |
$1072 = 0, | |
$1076 = 0, | |
$108 = 0, | |
$1080 = 0, | |
$1081 = 0, | |
$1085 = 0, | |
$1089 = 0, | |
$109 = 0, | |
$1093 = 0, | |
$1101 = 0, | |
$1105 = 0, | |
$1109 = 0, | |
$1113 = 0, | |
$1117 = 0, | |
$1121 = 0, | |
$1125 = 0, | |
$1126 = 0, | |
$1133 = 0, | |
$1135 = 0, | |
$1144 = 0, | |
$115 = 0, | |
$1150 = 0, | |
$1158 = 0, | |
$1165 = 0, | |
$1166 = 0, | |
$1168 = 0, | |
$1169 = 0, | |
$1171 = 0, | |
$1172 = 0, | |
$1174 = 0, | |
$1189 = 0, | |
$1190 = 0, | |
$1191 = 0, | |
$1192 = 0, | |
$1193 = 0, | |
$128 = 0, | |
$13 = 0, | |
$139 = 0, | |
$142 = 0, | |
$15 = 0, | |
$151 = 0, | |
$152 = 0, | |
$154 = 0, | |
$155 = 0, | |
$156 = 0, | |
$157 = 0, | |
$160 = 0, | |
$161 = 0, | |
$163 = 0, | |
$170 = 0, | |
$173 = 0, | |
$175 = 0, | |
$179 = 0, | |
$181 = 0, | |
$182 = 0, | |
$184 = 0, | |
$185 = 0, | |
$195 = 0, | |
$2 = 0, | |
$205 = 0, | |
$210 = 0, | |
$212 = 0, | |
$234 = 0, | |
$236 = 0, | |
$245 = 0, | |
$248 = 0, | |
$25 = 0, | |
$250 = 0, | |
$253 = 0, | |
$255 = 0, | |
$258 = 0, | |
$270 = 0, | |
$28 = 0, | |
$280 = 0, | |
$282 = 0, | |
$286 = 0, | |
$29 = 0, | |
$302 = 0, | |
$310 = 0, | |
$313 = 0, | |
$317 = 0, | |
$32 = 0, | |
$321 = 0, | |
$326 = 0, | |
$327 = 0, | |
$343 = 0, | |
$349 = 0, | |
$357 = 0, | |
$36 = 0, | |
$362 = 0, | |
$363 = 0, | |
$369 = 0, | |
$370 = 0, | |
$378 = 0, | |
$383 = 0, | |
$384 = 0, | |
$394 = 0, | |
$399 = 0, | |
$4 = 0, | |
$401 = 0, | |
$403 = 0, | |
$404 = 0, | |
$421 = 0, | |
$422 = 0, | |
$423 = 0, | |
$425 = 0, | |
$426 = 0, | |
$434 = 0, | |
$442 = 0, | |
$445 = 0, | |
$446 = 0, | |
$455 = 0, | |
$46 = 0, | |
$460 = 0, | |
$461 = 0, | |
$468 = 0, | |
$470 = 0, | |
$471 = 0, | |
$476 = 0, | |
$481 = 0, | |
$488 = 0, | |
$493 = 0, | |
$500 = 0, | |
$501 = 0, | |
$505 = 0, | |
$508 = 0, | |
$515 = 0, | |
$516 = 0, | |
$519 = 0, | |
$520 = 0, | |
$521 = 0, | |
$523 = 0, | |
$524 = 0, | |
$527 = 0, | |
$528 = 0, | |
$529 = 0, | |
$531 = 0, | |
$533 = 0, | |
$543 = 0, | |
$55 = 0, | |
$558 = 0, | |
$56 = 0, | |
$564 = 0, | |
$566 = 0, | |
$573 = 0, | |
$581 = 0, | |
$582 = 0, | |
$591 = 0, | |
$592 = 0, | |
$594 = 0, | |
$6 = 0, | |
$614 = 0, | |
$617 = 0, | |
$62 = 0, | |
$623 = 0, | |
$625 = 0, | |
$628 = 0, | |
$632 = 0, | |
$633 = 0, | |
$640 = 0, | |
$647 = 0, | |
$651 = 0, | |
$653 = 0, | |
$655 = 0, | |
$659 = 0, | |
$662 = 0, | |
$666 = 0, | |
$672 = 0, | |
$673 = 0, | |
$677 = 0, | |
$678 = 0, | |
$680 = 0, | |
$692 = 0, | |
$694 = 0, | |
$698 = 0, | |
$699 = 0, | |
$701 = 0, | |
$705 = 0, | |
$708 = 0, | |
$713 = 0, | |
$714 = 0, | |
$715 = 0, | |
$722 = 0, | |
$726 = 0, | |
$730 = 0, | |
$735 = 0, | |
$738 = 0, | |
$744 = 0, | |
$748 = 0, | |
$754 = 0, | |
$756 = 0, | |
$763 = 0, | |
$764 = 0, | |
$765 = 0, | |
$77 = 0, | |
$772 = 0, | |
$775 = 0, | |
$78 = 0, | |
$79 = 0, | |
$799 = 0, | |
$803 = 0, | |
$807 = 0, | |
$808 = 0, | |
$809 = 0, | |
$821 = 0, | |
$824 = 0, | |
$825 = 0, | |
$828 = 0, | |
$836 = 0, | |
$840 = 0, | |
$844 = 0, | |
$852 = 0, | |
$855 = 0, | |
$861 = 0, | |
$862 = 0, | |
$865 = 0, | |
$868 = 0, | |
$879 = 0, | |
$88 = 0, | |
$883 = 0, | |
$888 = 0, | |
$893 = 0, | |
$894 = 0, | |
$9 = 0, | |
$90 = 0, | |
$906 = 0, | |
$91 = 0, | |
$911 = 0, | |
$919 = 0, | |
$923 = 0, | |
$924 = 0, | |
$932 = 0, | |
$936 = 0, | |
$937 = 0, | |
$94 = 0, | |
$940 = 0, | |
$947 = 0, | |
$95 = 0, | |
$952 = 0, | |
$954 = 0, | |
$955 = 0, | |
$961 = 0, | |
$972 = 0, | |
$974 = 0, | |
$975 = 0, | |
$98 = 0, | |
$981 = 0, | |
$983 = 0, | |
$or$cond232 = 0, | |
$storemerge171 = 0, | |
$storemerge179 = 0, | |
$storemerge180331 = 0, | |
$storemerge182326 = 0, | |
$storemerge185316 = 0, | |
$storemerge185317 = 0, | |
label = 0, | |
$185$looptemp = 0; | |
$2 = _calloc((HEAP32[12] | 0) + 1 | 0, 4) | 0; //@line 128 | |
HEAP32[30] = $2; //@line 129 | |
if (!$2) { | |
_puts(19392) | 0; //@line 132 | |
_exit(0); //@line 133 | |
} | |
HEAP8[129] = 0; //@line 136 | |
$4 = HEAP32[4] | 0; //@line 137 | |
if (!$4) { | |
_initialise() | 0; //@line 140 | |
$6 = HEAP32[4] | 0; //@line 142 | |
} else { | |
$6 = $4; //@line 144 | |
} | |
if (($6 | 0) <= 0) { | |
_fRSPEAK(201); //@line 148 | |
_exit(0); //@line 149 | |
} | |
HEAP32[4] = -1; //@line 152 | |
HEAP32[66] = _fRAN(-1) | 0; //@line 154 | |
$9 = _fRNDVOC(3, 0) | 0; //@line 155 | |
HEAP32[68] = (HEAP32[16] << 1) + $9; //@line 159 | |
$13 = _fYES(65, 1, 0) | 0; //@line 160 | |
HEAP32[70] = $13; //@line 161 | |
HEAP32[72] = 1; //@line 162 | |
HEAP32[74] = 1; //@line 163 | |
HEAP32[76] = ($13 | 0) != 0 ? 1e3 : 330; //@line 166 | |
$15 = 1; //@line 167 | |
L10: while (1) { | |
if (($15 | 0) < 9 | ($15 + -145 | 0) >>> 0 < 22) { | |
if (($15 | 0) != 0 & (HEAP32[182] | 0) != 0) { | |
label = 11; //@line 179 | |
} else { | |
$29 = $15; //@line 181 | |
} | |
} else { | |
if ((HEAP32[182] | 0) != 0 & ((($15 | 0) == 0 | (($15 & -3 | 0) != 180 ? ($15 | 0) != (HEAP32[320 + (HEAP32[78] << 2) >> 2] | 0) : 0)) ^ 1)) { | |
label = 11; //@line 198 | |
} else { | |
$29 = $15; //@line 200 | |
} | |
} | |
if ((label | 0) == 11) { | |
label = 0; //@line 204 | |
_fRSPEAK(130); //@line 205 | |
$25 = HEAP32[74] | 0; //@line 206 | |
HEAP32[72] = $25; //@line 207 | |
if (!(HEAP32[184] | 0)) { | |
HEAP32[186] = 15; //@line 211 | |
} | |
HEAP32[184] = 1; //@line 213 | |
$29 = $25; //@line 214 | |
} | |
$28 = HEAP32[74] | 0; //@line 216 | |
if (($29 | 0) == ($28 | 0)) { | |
$46 = $29; //@line 219 | |
} else { | |
$32 = HEAP32[752 + ($28 << 2) >> 2] | 0; //@line 222 | |
do { | |
if (($32 | 0) != 2) { | |
if (!(_fTSTBIT($32, 3) | 0)) { | |
HEAP32[66] = 1; //@line 229 | |
$36 = HEAP32[72] | 0; //@line 230 | |
if ((HEAP32[375] | 0) != ($36 | 0) | (HEAP32[383] | 0) == 0) { | |
HEAP32[66] = 2; //@line 237 | |
if ((HEAP32[376] | 0) != ($36 | 0) | (HEAP32[384] | 0) == 0) { | |
HEAP32[66] = 3; //@line 244 | |
if ((HEAP32[377] | 0) != ($36 | 0) | (HEAP32[385] | 0) == 0) { | |
HEAP32[66] = 4; //@line 251 | |
if ((HEAP32[378] | 0) != ($36 | 0) | (HEAP32[386] | 0) == 0) { | |
HEAP32[66] = 5; //@line 258 | |
if ((HEAP32[379] | 0) != ($36 | 0) | (HEAP32[387] | 0) == 0) { | |
HEAP32[66] = 6; //@line 265 | |
break; | |
} | |
} | |
} | |
} | |
} | |
HEAP32[72] = HEAP32[74]; //@line 273 | |
_fRSPEAK(2); //@line 274 | |
} | |
} | |
} while (0); | |
$46 = HEAP32[72] | 0; //@line 279 | |
} | |
HEAP32[74] = $46; //@line 281 | |
do { | |
if (!$46) { | |
$302 = 0; //@line 285 | |
label = 116; //@line 286 | |
} else { | |
if ((HEAP32[752 + ($46 << 2) >> 2] | 0) == 2) { | |
label = 115; //@line 292 | |
} else { | |
if (!(_fTSTBIT(HEAP32[752 + ($46 << 2) >> 2] | 0, 3) | 0)) { | |
$55 = HEAP32[390] | 0; //@line 299 | |
if (!$55) { | |
$56 = HEAP32[74] | 0; //@line 301 | |
if (($56 | 0) < 15 | ($56 + -145 | 0) >>> 0 < 22) { | |
$302 = $56; //@line 307 | |
label = 116; //@line 308 | |
break; | |
} | |
if (($56 | 0) == (HEAP32[320 + (HEAP32[78] << 2) >> 2] | 0)) { | |
label = 115; //@line 316 | |
break; | |
} | |
if (($56 | 0) == 179 | ($56 | 0) == 180 | ($56 | 0) == 182) { | |
label = 115; //@line 320 | |
break; | |
} | |
HEAP32[390] = 1; //@line 323 | |
label = 115; //@line 324 | |
break; | |
} else if (($55 | 0) == 1) { | |
$62 = HEAP32[74] | 0; //@line 327 | |
if (($62 | 0) < 15 | ($62 + -145 | 0) >>> 0 < 22) { | |
$302 = $62; //@line 333 | |
label = 116; //@line 334 | |
break; | |
} | |
if (($62 | 0) == (HEAP32[320 + (HEAP32[78] << 2) >> 2] | 0)) { | |
label = 115; //@line 342 | |
break; | |
} | |
if (($62 | 0) == 179 | ($62 | 0) == 180 | ($62 | 0) == 182) { | |
label = 115; //@line 346 | |
break; | |
} | |
if ((_fRAN(100) | 0) < 95) { | |
if (!(_fTSTBIT(HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0, 4) | 0)) { | |
label = 115; //@line 358 | |
break; | |
} | |
if ((_fRAN(100) | 0) < 85) { | |
label = 115; //@line 364 | |
break; | |
} | |
} | |
HEAP32[390] = 2; //@line 368 | |
HEAP32[66] = 1; //@line 369 | |
do { | |
HEAP32[392] = (_fRAN(5) | 0) + 1; //@line 373 | |
if ((_fRAN(100) | 0) < 50) { | |
HEAP32[1576 + (HEAP32[392] << 2) >> 2] = 0; //@line 379 | |
} | |
$88 = (HEAP32[66] | 0) + 1 | 0; //@line 382 | |
HEAP32[66] = $88; //@line 383 | |
} while (($88 | 0) < 3); | |
HEAP32[66] = 1; //@line 389 | |
$77 = HEAP32[74] | 0; //@line 390 | |
$78 = HEAP32[402] | 0; //@line 391 | |
$79 = HEAP32[395] | 0; //@line 392 | |
if (($79 | 0) == ($77 | 0)) { | |
HEAP32[395] = $78; //@line 395 | |
$90 = $78; //@line 396 | |
} else { | |
$90 = $79; //@line 398 | |
} | |
HEAP32[375] = $90; //@line 400 | |
$91 = HEAP32[396] | 0; //@line 401 | |
if (($91 | 0) == ($77 | 0)) { | |
HEAP32[396] = $78; //@line 404 | |
$1165 = $78; //@line 405 | |
} else { | |
$1165 = $91; //@line 407 | |
} | |
HEAP32[376] = $1165; //@line 409 | |
$1166 = HEAP32[397] | 0; //@line 410 | |
if (($1166 | 0) == ($77 | 0)) { | |
HEAP32[397] = $78; //@line 413 | |
$1168 = $78; //@line 414 | |
} else { | |
$1168 = $1166; //@line 416 | |
} | |
HEAP32[377] = $1168; //@line 418 | |
$1169 = HEAP32[398] | 0; //@line 419 | |
if (($1169 | 0) == ($77 | 0)) { | |
HEAP32[398] = $78; //@line 422 | |
$1171 = $78; //@line 423 | |
} else { | |
$1171 = $1169; //@line 425 | |
} | |
HEAP32[378] = $1171; //@line 427 | |
$1172 = HEAP32[399] | 0; //@line 428 | |
if (($1172 | 0) == ($77 | 0)) { | |
HEAP32[399] = $78; //@line 431 | |
$1174 = $78; //@line 432 | |
} else { | |
$1174 = $1172; //@line 434 | |
} | |
HEAP32[379] = $1174; //@line 436 | |
HEAP32[66] = 6; //@line 437 | |
_fRSPEAK(3); //@line 438 | |
_fDROP(HEAP32[404] | 0, HEAP32[74] | 0); //@line 441 | |
label = 115; //@line 442 | |
break; | |
} else { | |
HEAP32[406] = 0; //@line 445 | |
HEAP32[408] = 0; //@line 446 | |
HEAP32[410] = 0; //@line 447 | |
HEAP32[66] = 1; //@line 448 | |
$94 = 1; //@line 449 | |
do { | |
$95 = HEAP32[1576 + ($94 << 2) >> 2] | 0; //@line 452 | |
L47: do { | |
if ($95) { | |
HEAP32[392] = 1; //@line 456 | |
$98 = HEAP32[1656 + ($95 << 2) >> 2] | 0; //@line 458 | |
HEAP32[412] = $98; //@line 459 | |
if (!$98) { | |
HEAP32[1487] = HEAP32[1496 + ($94 << 2) >> 2]; //@line 464 | |
$152 = 1; //@line 465 | |
} else { | |
$103 = $98; //@line 467 | |
do { | |
$107 = _fMOD((_fIABS(HEAP32[2400 + ($103 << 2) >> 2] | 0) | 0) / 1e3 | 0, 1e3) | 0; //@line 473 | |
HEAP32[72] = $107; //@line 474 | |
$108 = HEAP32[392] | 0; //@line 475 | |
$109 = $108 + -1 | 0; //@line 476 | |
do { | |
if (!(($107 + -145 | 0) >>> 0 < 22 | (($107 | 0) < 9 | ($107 + -15 | 0) >>> 0 > 285))) { | |
if (($107 | 0) != (HEAP32[320 + (HEAP32[78] << 2) >> 2] | 0)) { | |
if (($107 | 0) == 179 | ($107 | 0) == 180 | ($107 | 0) == 182) { | |
break; | |
} | |
$115 = HEAP32[66] | 0; //@line 494 | |
if (($107 | 0) == (HEAP32[1496 + ($115 << 2) >> 2] | 0)) { | |
break; | |
} | |
if (($108 | 0) > 1) { | |
if (($108 | 0) > 19 ? 1 : ($107 | 0) == (HEAP32[5944 + ($109 << 2) >> 2] | 0)) { | |
break; | |
} | |
} | |
if (($107 | 0) == (HEAP32[1576 + ($115 << 2) >> 2] | 0)) { | |
break; | |
} | |
$128 = HEAP32[752 + ($107 << 2) >> 2] | 0; //@line 519 | |
if (($128 | 0) == 2) { | |
break; | |
} | |
if (($115 | 0) == 6) { | |
if (_fTSTBIT($128, 3) | 0) { | |
break; | |
} | |
} | |
if (((_fIABS(HEAP32[2400 + (HEAP32[412] << 2) >> 2] | 0) | 0) + -1e8 | 0) >>> 0 < 1e6) { | |
break; | |
} | |
$139 = HEAP32[392] | 0; //@line 542 | |
HEAP32[5944 + ($139 << 2) >> 2] = HEAP32[72]; //@line 544 | |
HEAP32[392] = $139 + 1; //@line 546 | |
} | |
} | |
} while (0); | |
$142 = HEAP32[412] | 0; //@line 550 | |
$103 = $142 + 1 | 0; //@line 551 | |
HEAP32[412] = $103; //@line 552 | |
} while ((HEAP32[2400 + ($142 << 2) >> 2] | 0) > -1); | |
$$pre342 = HEAP32[392] | 0; //@line 563 | |
HEAP32[5944 + ($$pre342 << 2) >> 2] = HEAP32[1496 + (HEAP32[66] << 2) >> 2]; //@line 567 | |
if (($$pre342 | 0) > 1) { | |
$151 = $$pre342 + -1 | 0; //@line 570 | |
HEAP32[392] = $151; //@line 571 | |
$152 = $151; //@line 572 | |
} else { | |
$152 = $$pre342; //@line 574 | |
} | |
} | |
$154 = (_fRAN($152) | 0) + 1 | 0; //@line 578 | |
HEAP32[392] = $154; //@line 579 | |
$155 = HEAP32[66] | 0; //@line 580 | |
$156 = 1576 + ($155 << 2) | 0; //@line 581 | |
$157 = HEAP32[$156 >> 2] | 0; //@line 582 | |
HEAP32[1496 + ($155 << 2) >> 2] = $157; //@line 584 | |
$160 = HEAP32[5944 + ($154 << 2) >> 2] | 0; //@line 586 | |
HEAP32[$156 >> 2] = $160; //@line 587 | |
$161 = 1528 + ($155 << 2) | 0; //@line 588 | |
$163 = HEAP32[74] | 0; //@line 590 | |
if ((HEAP32[$161 >> 2] | 0) == 0 | ($163 | 0) < 15 | ($163 + -145 | 0) >>> 0 < 22) { | |
label = 64; //@line 598 | |
} else { | |
if (($163 | 0) == (HEAP32[320 + (HEAP32[78] << 2) >> 2] | 0)) { | |
label = 64; //@line 605 | |
} else { | |
if (($163 | 0) == 179 | ($163 | 0) == 180 | ($163 | 0) == 182) { | |
label = 64; //@line 608 | |
} else { | |
label = 65; //@line 610 | |
} | |
} | |
} | |
if ((label | 0) == 64) { | |
label = 0; //@line 615 | |
if (($160 | 0) == ($163 | 0)) { | |
label = 65; //@line 618 | |
} else { | |
$170 = ($157 | 0) == ($163 | 0); //@line 620 | |
HEAP32[$161 >> 2] = $170 & 1; //@line 622 | |
if (!$170) { | |
break; | |
} | |
} | |
} | |
if ((label | 0) == 65) { | |
label = 0; //@line 629 | |
HEAP32[$161 >> 2] = 1; //@line 630 | |
} | |
HEAP32[$156 >> 2] = $163; //@line 632 | |
if (($155 | 0) != 6) { | |
HEAP32[406] = (HEAP32[406] | 0) + 1; //@line 637 | |
if (($157 | 0) != ($163 | 0)) { | |
break; | |
} | |
HEAP32[408] = (HEAP32[408] | 0) + 1; //@line 644 | |
if ((HEAP32[1834] | 0) > -1) { | |
HEAP32[1834] = $157; //@line 648 | |
} | |
$270 = _fRAN(1e3) | 0; //@line 650 | |
if (($270 | 0) >= (((HEAP32[390] | 0) * 95 | 0) + -190 | 0)) { | |
break; | |
} | |
HEAP32[410] = (HEAP32[410] | 0) + 1; //@line 660 | |
break; | |
} | |
$173 = HEAP32[1508] | 0; //@line 663 | |
if (($163 | 0) != ($173 | 0)) { | |
$175 = HEAP32[1510] | 0; //@line 666 | |
if ((HEAP32[6048 + ($175 << 2) >> 2] | 0) <= -1) { | |
HEAP32[1614] = 0; //@line 671 | |
HEAP32[392] = 50; //@line 672 | |
$179 = HEAP32[1616] | 0; //@line 673 | |
L90: do { | |
if (($179 | 0) < 50) { | |
$205 = 0; //@line 677 | |
label = 80; //@line 678 | |
} else { | |
$181 = HEAP32[1618] | 0; //@line 680 | |
$182 = 320 + ($181 << 2) | 0; //@line 681 | |
$184 = 320 + (HEAP32[1620] << 2) | 0; //@line 683 | |
$1189 = 0; //@line 684 | |
$185 = 50; //@line 684 | |
while (1) { | |
do { | |
if (($185 | 0) == ($181 | 0)) { | |
if (($163 | 0) == (HEAP32[$182 >> 2] | 0)) { | |
break; | |
} | |
if (($163 | 0) != (HEAP32[$184 >> 2] | 0)) { | |
label = 75; //@line 697 | |
} | |
} else { | |
label = 75; //@line 700 | |
} | |
} while (0); | |
if ((label | 0) == 75) { | |
label = 0; //@line 704 | |
if ((HEAP32[6488 + ($185 << 2) >> 2] | 0) == -1) { | |
break; | |
} | |
} | |
$195 = HEAP32[6488 + ($185 << 2) >> 2] | 0; //@line 713 | |
if (($195 | 0) == ($163 | 0)) { | |
label = 78; //@line 716 | |
} else { | |
if (($195 | 0) == -1 ? 1 : (HEAP32[6896 + ($185 << 2) >> 2] | 0) == ($163 | 0)) { | |
label = 78; //@line 724 | |
} else { | |
$1190 = $1189; //@line 726 | |
} | |
} | |
if ((label | 0) == 78) { | |
label = 0; //@line 730 | |
HEAP32[1614] = 1; //@line 731 | |
$1190 = 1; //@line 732 | |
} | |
$185$looptemp = $185; | |
$185 = $185 + 1 | 0; //@line 734 | |
HEAP32[392] = $185; //@line 735 | |
if (($185$looptemp | 0) >= ($179 | 0)) { | |
$205 = $1190; //@line 740 | |
label = 80; //@line 741 | |
break L90; | |
} else { | |
$1189 = $1190; //@line 738 | |
} | |
} | |
if (!(HEAP32[6488 + ($175 << 2) >> 2] | 0)) { | |
_fMOVE($175, $173); //@line 749 | |
_fMOVE(HEAP32[1830] | 0, HEAP32[1832] | 0); //@line 752 | |
} | |
_fRSPEAK(128); //@line 754 | |
HEAP32[392] = 50; //@line 755 | |
if ((HEAP32[1616] | 0) < 50) { | |
break; | |
} else { | |
$234 = 50; //@line 761 | |
} | |
do { | |
$236 = HEAP32[74] | 0; //@line 766 | |
do { | |
if (($234 | 0) == (HEAP32[1618] | 0)) { | |
if (($236 | 0) == (HEAP32[320 + ($234 << 2) >> 2] | 0)) { | |
$255 = $234; //@line 773 | |
break; | |
} | |
if (($236 | 0) == (HEAP32[320 + (HEAP32[1620] << 2) >> 2] | 0)) { | |
$255 = $234; //@line 781 | |
} else { | |
label = 94; //@line 783 | |
} | |
} else { | |
label = 94; //@line 786 | |
} | |
} while (0); | |
do { | |
if ((label | 0) == 94) { | |
label = 0; //@line 791 | |
$245 = HEAP32[6488 + ($234 << 2) >> 2] | 0; //@line 793 | |
$$pre346 = HEAP32[6896 + ($234 << 2) >> 2] | 0; //@line 796 | |
if (($245 | 0) == ($236 | 0)) { | |
$248 = $$pre346; //@line 798 | |
label = 96; //@line 799 | |
} else { | |
if (($$pre346 | 0) == ($236 | 0)) { | |
$248 = $236; //@line 803 | |
label = 96; //@line 804 | |
} else { | |
$250 = $245; //@line 806 | |
$253 = $234; //@line 806 | |
} | |
} | |
do { | |
if ((label | 0) == 96) { | |
label = 0; //@line 811 | |
if ($248) { | |
$250 = $245; //@line 814 | |
$253 = $234; //@line 814 | |
break; | |
} | |
_fCARRY($234, $236); //@line 817 | |
$$pre347 = HEAP32[392] | 0; //@line 818 | |
$250 = HEAP32[6488 + ($$pre347 << 2) >> 2] | 0; //@line 821 | |
$253 = $$pre347; //@line 821 | |
} | |
} while (0); | |
if (($250 | 0) != -1) { | |
$255 = $253; //@line 826 | |
break; | |
} | |
_fDROP($253, HEAP32[1508] | 0); //@line 830 | |
$255 = HEAP32[392] | 0; //@line 832 | |
} | |
} while (0); | |
$234 = $255 + 1 | 0; //@line 835 | |
HEAP32[392] = $234; //@line 836 | |
} while (($255 | 0) < (HEAP32[1616] | 0)); | |
} | |
} while (0); | |
L124: do { | |
if ((label | 0) == 80) { | |
label = 0; //@line 849 | |
do { | |
if ((HEAP32[1826] | 0) == 1 & ($205 | 0) == 0) { | |
if (HEAP32[6488 + ($175 << 2) >> 2] | 0) { | |
break; | |
} | |
$210 = HEAP32[1828] | 0; //@line 862 | |
$212 = HEAP32[6488 + ($210 << 2) >> 2] | 0; //@line 864 | |
if (($212 | 0) != ($163 | 0)) { | |
if (!(($212 | 0) == -1 ? 1 : (HEAP32[6896 + ($210 << 2) >> 2] | 0) == ($163 | 0))) { | |
break; | |
} | |
} | |
if ((HEAP32[6048 + ($210 << 2) >> 2] | 0) != 1) { | |
break; | |
} | |
_fRSPEAK(186); //@line 882 | |
_fMOVE(HEAP32[1510] | 0, HEAP32[1508] | 0); //@line 885 | |
_fMOVE(HEAP32[1830] | 0, HEAP32[1832] | 0); //@line 888 | |
break L124; | |
} | |
} while (0); | |
if ((HEAP32[380] | 0) == (HEAP32[400] | 0)) { | |
break L47; | |
} | |
if ((_fRAN(100) | 0) >= 20) { | |
break L47; | |
} | |
_fRSPEAK(127); //@line 903 | |
break L47; | |
} | |
} while (0); | |
$258 = HEAP32[1508] | 0; //@line 907 | |
HEAP32[400] = $258; //@line 908 | |
HEAP32[380] = $258; //@line 909 | |
HEAP32[388] = 0; //@line 910 | |
} | |
} | |
} | |
} while (0); | |
$94 = (HEAP32[66] | 0) + 1 | 0; //@line 916 | |
HEAP32[66] = $94; //@line 917 | |
} while (($94 | 0) < 7); | |
$280 = HEAP32[406] | 0; //@line 925 | |
if (!$280) { | |
label = 115; //@line 928 | |
break; | |
} | |
_fSETPRM(1, $280, 0); //@line 931 | |
$282 = HEAP32[406] | 0; //@line 932 | |
_fRSPEAK(($282 + 1 | 0) >>> 0 < 3 ? $282 + 4 | 0 : 4); //@line 937 | |
$286 = HEAP32[408] | 0; //@line 938 | |
if (!$286) { | |
label = 115; //@line 941 | |
break; | |
} | |
if ((HEAP32[390] | 0) == 2) { | |
HEAP32[390] = 3; //@line 947 | |
} | |
_fSETPRM(1, $286, 0); //@line 949 | |
$$85 = (HEAP32[408] | 0) > 1 ? 250 : 6; //@line 952 | |
HEAP32[1614] = $$85; //@line 953 | |
_fRSPEAK($$85); //@line 954 | |
_fSETPRM(1, HEAP32[410] | 0, 0); //@line 956 | |
_fRSPEAK((HEAP32[1614] | 0) + 1 + (2 / ((HEAP32[410] | 0) + 1 | 0) | 0) | 0); //@line 963 | |
if (!(HEAP32[410] | 0)) { | |
label = 115; //@line 967 | |
break; | |
} | |
HEAP32[1836] = HEAP32[74]; //@line 971 | |
label = 320; //@line 972 | |
break; | |
} | |
} else { | |
label = 115; //@line 976 | |
} | |
} | |
} | |
} while (0); | |
L174: while (1) { | |
do { | |
if ((label | 0) == 115) { | |
label = 0; //@line 984 | |
$302 = HEAP32[74] | 0; //@line 986 | |
label = 116; //@line 987 | |
continue L174; | |
} else if ((label | 0) == 116) { | |
label = 0; //@line 991 | |
if (!$302) { | |
label = 320; //@line 994 | |
continue L174; | |
} | |
HEAP32[412] = HEAP32[7352 + ($302 << 2) >> 2]; //@line 999 | |
$310 = (_fMOD(HEAP32[8096 + ($302 << 2) >> 2] | 0, HEAP32[2210] | 0) | 0) == 0; //@line 1004 | |
$313 = HEAP32[74] | 0; //@line 1008 | |
if ($310 | (HEAP32[412] | 0) == 0) { | |
HEAP32[412] = HEAP32[8848 + ($313 << 2) >> 2]; //@line 1012 | |
} | |
$317 = HEAP32[752 + ($313 << 2) >> 2] | 0; //@line 1015 | |
do { | |
if (($317 | 0) != 2) { | |
if (!(_fTSTBIT($317, 0) | 0)) { | |
$321 = HEAP32[1828] | 0; //@line 1022 | |
if (HEAP32[6048 + ($321 << 2) >> 2] | 0) { | |
$326 = HEAP32[6488 + ($321 << 2) >> 2] | 0; //@line 1028 | |
$327 = HEAP32[74] | 0; //@line 1029 | |
if (($326 | 0) == ($327 | 0)) { | |
break; | |
} | |
if (($326 | 0) == -1 ? 1 : (HEAP32[6896 + ($321 << 2) >> 2] | 0) == ($327 | 0)) { | |
break; | |
} | |
} | |
if (HEAP32[28] | 0) { | |
if ((_fRAN(100) | 0) < 35) { | |
_fRSPEAK(23); //@line 1049 | |
HEAP32[1836] = HEAP32[74]; //@line 1051 | |
label = 320; //@line 1052 | |
continue L174; | |
} | |
} | |
HEAP32[412] = HEAP32[2414]; //@line 1057 | |
} | |
} | |
} while (0); | |
if ((HEAP32[6488 + (HEAP32[2676] << 2) >> 2] | 0) == -1) { | |
_fRSPEAK(141); //@line 1066 | |
} | |
_fSPEAK(HEAP32[412] | 0); //@line 1069 | |
HEAP32[1614] = 1; //@line 1070 | |
$343 = HEAP32[74] | 0; //@line 1071 | |
if ((HEAP32[752 + ($343 << 2) >> 2] | 0) == 2) { | |
$677 = $343; //@line 1076 | |
label = 244; //@line 1077 | |
} else { | |
if (($343 | 0) == 33) { | |
$349 = (_fRAN(100) | 0) > 24; //@line 1082 | |
if (!($349 | (HEAP32[182] | 0) != 0)) { | |
_fRSPEAK(7); //@line 1087 | |
} | |
} | |
if (!(_fTSTBIT(HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0, 0) | 0)) { | |
$357 = HEAP32[1828] | 0; //@line 1096 | |
if (!(HEAP32[6048 + ($357 << 2) >> 2] | 0)) { | |
label = 153; //@line 1101 | |
break; | |
} | |
$362 = HEAP32[6488 + ($357 << 2) >> 2] | 0; //@line 1105 | |
$363 = HEAP32[74] | 0; //@line 1106 | |
if (($362 | 0) == ($363 | 0)) { | |
$370 = $362; //@line 1109 | |
} else { | |
if (($362 | 0) == -1 ? 1 : (HEAP32[6896 + ($357 << 2) >> 2] | 0) == ($363 | 0)) { | |
$370 = $363; //@line 1117 | |
} else { | |
label = 153; //@line 1119 | |
break; | |
} | |
} | |
} else { | |
$370 = HEAP32[74] | 0; //@line 1125 | |
} | |
$369 = 8096 + ($370 << 2) | 0; //@line 1127 | |
HEAP32[$369 >> 2] = (HEAP32[$369 >> 2] | 0) + 1; //@line 1130 | |
$storemerge185316 = HEAP32[10712 + ($370 << 2) >> 2] | 0; //@line 1132 | |
HEAP32[66] = $storemerge185316; //@line 1133 | |
if (!$storemerge185316) { | |
label = 153; //@line 1136 | |
} else { | |
$storemerge185317 = $storemerge185316; //@line 1138 | |
do { | |
$$storemerge185 = ($storemerge185317 | 0) > 100 ? $storemerge185317 + -100 | 0 : $storemerge185317; //@line 1142 | |
HEAP32[2864] = $$storemerge185; //@line 1143 | |
$378 = ($$storemerge185 | 0) == (HEAP32[2866] | 0); //@line 1145 | |
if ($378) { | |
if ((HEAP32[6488 + (HEAP32[2868] << 2) >> 2] | 0) == -1) { | |
$401 = $storemerge185317; //@line 1152 | |
} else { | |
label = 141; //@line 1154 | |
} | |
} else { | |
label = 141; //@line 1157 | |
} | |
do { | |
if ((label | 0) == 141) { | |
label = 0; //@line 1161 | |
$383 = 6048 + ($$storemerge185 << 2) | 0; //@line 1162 | |
$384 = HEAP32[$383 >> 2] | 0; //@line 1163 | |
if (($384 | 0) > -1) { | |
$394 = $384; //@line 1166 | |
} else { | |
if (HEAP32[2870] | 0) { | |
$401 = $storemerge185317; //@line 1171 | |
break; | |
} | |
HEAP32[$383 >> 2] = 0; //@line 1174 | |
$or$cond232 = ($$storemerge185 | 0) == (HEAP32[2872] | 0) | ($$storemerge185 | 0) == (HEAP32[2874] | 0); //@line 1179 | |
HEAP32[$383 >> 2] = $or$cond232 & 1; //@line 1181 | |
HEAP32[1826] = (HEAP32[1826] | 0) + -1; //@line 1185 | |
$394 = $or$cond232 & 1; //@line 1186 | |
} | |
HEAP32[412] = $394; //@line 1188 | |
do { | |
if ($378) { | |
if ((HEAP32[74] | 0) != (HEAP32[6896 + ($$storemerge185 << 2) >> 2] | 0)) { | |
$399 = $394; //@line 1196 | |
break; | |
} | |
HEAP32[412] = 1; //@line 1199 | |
$399 = 1; //@line 1200 | |
} else { | |
$399 = $394; //@line 1202 | |
} | |
} while (0); | |
_fPSPEAK($$storemerge185, $399); //@line 1205 | |
$401 = HEAP32[66] | 0; //@line 1207 | |
} | |
} while (0); | |
$storemerge185317 = HEAP32[11504 + ($401 << 2) >> 2] | 0; //@line 1211 | |
HEAP32[66] = $storemerge185317; //@line 1212 | |
} while (($storemerge185317 | 0) != 0); | |
label = 153; //@line 1215 | |
} | |
} | |
} else if ((label | 0) == 320) { | |
label = 0; //@line 1225 | |
if (HEAP32[182] | 0) { | |
_fRSPEAK(131); //@line 1229 | |
HEAP32[3436] = (HEAP32[3436] | 0) + 1; //@line 1232 | |
_score(0); //@line 1233 | |
$923 = HEAP32[3086] | 0; //@line 1235 | |
label = 333; //@line 1236 | |
break; | |
} | |
$893 = (HEAP32[3436] | 0) + 1 | 0; //@line 1240 | |
HEAP32[3436] = $893; //@line 1241 | |
$894 = $893 << 1; //@line 1242 | |
if (!(_fYES($894 + 79 | 0, $894 + 80 | 0, 54) | 0)) { | |
_score(0); //@line 1248 | |
} | |
if ((HEAP32[3436] | 0) == (HEAP32[3438] | 0)) { | |
_score(0); //@line 1254 | |
} | |
HEAP32[6488 + (HEAP32[3280] << 2) >> 2] = 0; //@line 1258 | |
HEAP32[6488 + (HEAP32[3282] << 2) >> 2] = 0; //@line 1261 | |
$906 = HEAP32[1828] | 0; //@line 1262 | |
if ((HEAP32[6488 + ($906 << 2) >> 2] | 0) == -1) { | |
HEAP32[6048 + ($906 << 2) >> 2] = 0; //@line 1268 | |
} | |
HEAP32[392] = 1; //@line 1270 | |
$storemerge180331 = 1; //@line 1271 | |
do { | |
$911 = 101 - $storemerge180331 | 0; //@line 1273 | |
HEAP32[66] = $911; //@line 1274 | |
if ((HEAP32[6488 + ($911 << 2) >> 2] | 0) == -1) { | |
$$153 = ($911 | 0) == (HEAP32[1828] | 0) ? 1 : HEAP32[1836] | 0; //@line 1282 | |
HEAP32[1614] = $$153; //@line 1283 | |
_fDROP($911, $$153); //@line 1284 | |
$919 = HEAP32[392] | 0; //@line 1286 | |
} else { | |
$919 = $storemerge180331; //@line 1288 | |
} | |
$storemerge180331 = $919 + 1 | 0; //@line 1290 | |
HEAP32[392] = $storemerge180331; //@line 1291 | |
} while (($storemerge180331 | 0) < 101); | |
HEAP32[74] = 3; //@line 1299 | |
HEAP32[3314] = 3; //@line 1300 | |
$302 = 3; //@line 1301 | |
label = 116; //@line 1302 | |
continue L174; | |
} | |
} while (0); | |
L242: while (1) { | |
L243: do { | |
if ((label | 0) == 153) { | |
label = 0; //@line 1309 | |
HEAP32[3080] = 0; //@line 1310 | |
HEAP32[3082] = HEAP32[2864]; //@line 1312 | |
HEAP32[2864] = 0; //@line 1313 | |
label = 154; //@line 1314 | |
} else if ((label | 0) == 244) { | |
label = 0; //@line 1317 | |
$678 = HEAP32[1656 + ($677 << 2) >> 2] | 0; //@line 1319 | |
HEAP32[412] = $678; //@line 1320 | |
HEAP32[72] = $677; //@line 1321 | |
if (!$678) { | |
label = 245; //@line 1324 | |
break L10; | |
} else { | |
break L242; | |
} | |
} else if ((label | 0) == 333) { | |
label = 0; //@line 1331 | |
L247: do { | |
switch ($923 | 0) { | |
case 1: | |
{ | |
if (!(HEAP32[6048 + (HEAP32[3440] << 2) >> 2] | 0)) { | |
$952 = HEAP32[3442] | 0; //@line 1340 | |
$954 = HEAP32[6488 + ($952 << 2) >> 2] | 0; //@line 1342 | |
$955 = HEAP32[74] | 0; //@line 1343 | |
if (($954 | 0) == ($955 | 0)) { | |
$947 = 1; //@line 1346 | |
} else { | |
if (($954 | 0) == -1 ? 1 : (HEAP32[6896 + ($952 << 2) >> 2] | 0) == ($955 | 0)) { | |
$947 = 1; //@line 1354 | |
} else { | |
label = 335; //@line 1356 | |
} | |
} | |
} else { | |
$947 = 1; //@line 1360 | |
} | |
break; | |
} | |
case 6: | |
{ | |
label = 335; //@line 1365 | |
break; | |
} | |
case 7: | |
{ | |
if (!(HEAP32[390] | 0)) { | |
label = 335; //@line 1372 | |
} else { | |
$947 = 7; //@line 1374 | |
} | |
break; | |
} | |
case 8: | |
{ | |
if (HEAP32[10712 + (HEAP32[74] << 2) >> 2] | 0) { | |
label = 161; //@line 1384 | |
break L243; | |
} | |
if (HEAP32[10712 + (HEAP32[3314] << 2) >> 2] | 0) { | |
label = 161; //@line 1392 | |
break L243; | |
} | |
if (!(HEAP32[10712 + (HEAP32[1836] << 2) >> 2] | 0)) { | |
label = 335; //@line 1400 | |
} else { | |
label = 161; //@line 1402 | |
break L243; | |
} | |
break; | |
} | |
case 9: | |
{ | |
$1026 = _fATDWRF(HEAP32[74] | 0) | 0; //@line 1409 | |
HEAP32[66] = $1026; //@line 1410 | |
if (($1026 | 0) < 0) { | |
$947 = HEAP32[3086] | 0; //@line 1414 | |
break L247; | |
} | |
$1028 = HEAP32[3448] | 0; //@line 1417 | |
$1030 = HEAP32[6488 + ($1028 << 2) >> 2] | 0; //@line 1419 | |
$1031 = HEAP32[74] | 0; //@line 1420 | |
if (($1030 | 0) != ($1031 | 0)) { | |
if ((HEAP32[6896 + ($1028 << 2) >> 2] | 0) != ($1031 | 0)) { | |
if (($1026 | 0) == 0 & ($1030 | 0) == -1) { | |
label = 335; //@line 1431 | |
break L247; | |
} else { | |
label = 161; //@line 1434 | |
break L243; | |
} | |
} | |
} | |
if (!$1026) { | |
label = 335; //@line 1441 | |
} else { | |
label = 161; //@line 1443 | |
break L243; | |
} | |
break; | |
} | |
case 2: | |
{ | |
$961 = HEAP32[3298] | 0; //@line 1449 | |
if ((HEAP32[6488 + ($961 << 2) >> 2] | 0) != (HEAP32[74] | 0)) { | |
label = 161; //@line 1455 | |
break L243; | |
} | |
if ((HEAP32[3082] | 0) == ($961 | 0) ? (HEAP32[6488 + (HEAP32[3444] << 2) >> 2] | 0) == -1 : 0) { | |
label = 335; //@line 1466 | |
} else { | |
label = 161; //@line 1468 | |
break L243; | |
} | |
break; | |
} | |
case 3: | |
{ | |
$972 = HEAP32[3446] | 0; //@line 1474 | |
$974 = HEAP32[6488 + ($972 << 2) >> 2] | 0; //@line 1476 | |
$975 = HEAP32[74] | 0; //@line 1477 | |
if (($974 | 0) != ($975 | 0)) { | |
if (!(($974 | 0) == -1 ? 1 : (HEAP32[6896 + ($972 << 2) >> 2] | 0) == ($975 | 0))) { | |
$947 = 3; //@line 1486 | |
break L247; | |
} | |
} | |
$981 = HEAP32[3298] | 0; //@line 1490 | |
$983 = HEAP32[6488 + ($981 << 2) >> 2] | 0; //@line 1492 | |
if (($983 | 0) == ($975 | 0)) { | |
$947 = 3; //@line 1495 | |
} else { | |
if (($983 | 0) == -1 ? 1 : (HEAP32[6896 + ($981 << 2) >> 2] | 0) == ($975 | 0)) { | |
$947 = 3; //@line 1503 | |
} else { | |
label = 335; //@line 1505 | |
} | |
} | |
break; | |
} | |
case 4: | |
{ | |
if (!(HEAP32[10712 + (HEAP32[74] << 2) >> 2] | 0)) { | |
if (!(HEAP32[10712 + (HEAP32[3314] << 2) >> 2] | 0)) { | |
if ((HEAP32[3318] | 0) > 1 ? (HEAP32[10712 + (HEAP32[1836] << 2) >> 2] | 0) == 0 : 0) { | |
label = 335; //@line 1529 | |
} else { | |
$947 = 4; //@line 1531 | |
} | |
} else { | |
$947 = 4; //@line 1534 | |
} | |
} else { | |
$947 = 4; //@line 1537 | |
} | |
break; | |
} | |
case 5: | |
{ | |
if ((HEAP32[6048 + (HEAP32[1620] << 2) >> 2] | 0) == -1) { | |
$947 = 5; //@line 1547 | |
} else { | |
if ((HEAP32[6048 + (HEAP32[1618] << 2) >> 2] | 0) == -1) { | |
label = 335; //@line 1554 | |
} else { | |
$947 = 5; //@line 1556 | |
} | |
} | |
break; | |
} | |
case 10: | |
{ | |
if ((HEAP32[1826] | 0) == 1) { | |
if ((HEAP32[6048 + (HEAP32[3450] << 2) >> 2] | 0) < 0) { | |
label = 335; //@line 1570 | |
} else { | |
$947 = 10; //@line 1572 | |
} | |
} else { | |
$947 = 10; //@line 1575 | |
} | |
break; | |
} | |
default: | |
{ | |
label = 334; //@line 1580 | |
break L10; | |
} | |
} | |
} while (0); | |
if ((label | 0) == 335) { | |
label = 0; //@line 1586 | |
$924 = HEAP32[3086] | 0; //@line 1587 | |
HEAP32[12448 + ($924 << 2) >> 2] = 0; //@line 1589 | |
if (!(_fYES(HEAP32[12536 + ($924 * 20 | 0) + 12 >> 2] | 0, 0, 54) | 0)) { | |
label = 161; //@line 1595 | |
break; | |
} | |
$932 = HEAP32[12536 + ((HEAP32[3086] | 0) * 20 | 0) + 8 >> 2] | 0; //@line 1600 | |
_fSETPRM(1, $932, $932); //@line 1601 | |
_fRSPEAK(261); //@line 1602 | |
$936 = _fYES(175, HEAP32[12536 + ((HEAP32[3086] | 0) * 20 | 0) + 16 >> 2] | 0, 54) | 0; //@line 1606 | |
$937 = HEAP32[3086] | 0; //@line 1607 | |
HEAP32[12360 + ($937 << 2) >> 2] = $936; //@line 1609 | |
$940 = HEAP32[76] | 0; //@line 1611 | |
if (($936 | 0) != 0 & ($940 | 0) > 30) { | |
HEAP32[76] = ((HEAP32[12536 + ($937 * 20 | 0) + 8 >> 2] | 0) * 30 | 0) + $940; //@line 1619 | |
$947 = $937; //@line 1620 | |
} else { | |
$947 = $937; //@line 1622 | |
} | |
} | |
HEAP32[12448 + ($947 << 2) >> 2] = 0; //@line 1626 | |
label = 161; //@line 1627 | |
} | |
} while (0); | |
L282: while (1) { | |
if ((label | 0) == 154) { | |
label = 0; //@line 1632 | |
if ((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) >= (HEAP32[3084] | 0)) { | |
$storemerge171 = 1; //@line 1639 | |
label = 155; //@line 1640 | |
} | |
} else if ((label | 0) == 161) { | |
label = 0; //@line 1644 | |
$storemerge171 = (HEAP32[3086] | 0) + 1 | 0; //@line 1647 | |
label = 155; //@line 1648 | |
} | |
if ((label | 0) == 155) { | |
label = 0; //@line 1651 | |
HEAP32[3086] = $storemerge171; //@line 1652 | |
if (($storemerge171 | 0) <= (HEAP32[3088] | 0)) { | |
if (HEAP32[12360 + ($storemerge171 << 2) >> 2] | 0) { | |
label = 161; //@line 1660 | |
continue; | |
} | |
$421 = (_fTSTBIT(HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0, $storemerge171 + 10 | 0) | 0) == 0; //@line 1668 | |
$422 = HEAP32[3086] | 0; //@line 1669 | |
$423 = 12448 + ($422 << 2) | 0; //@line 1670 | |
if ($421) { | |
HEAP32[$423 >> 2] = -1; //@line 1672 | |
$426 = -1; //@line 1673 | |
} else { | |
$426 = HEAP32[$423 >> 2] | 0; //@line 1676 | |
} | |
$425 = $426 + 1 | 0; //@line 1679 | |
HEAP32[12448 + ($422 << 2) >> 2] = $425; //@line 1680 | |
if (($425 | 0) < (HEAP32[12536 + ($422 * 20 | 0) + 4 >> 2] | 0)) { | |
label = 161; //@line 1685 | |
continue; | |
} else { | |
$923 = $422; //@line 1688 | |
label = 333; //@line 1689 | |
continue L242; | |
} | |
} | |
} | |
if (HEAP32[2870] | 0) { | |
$434 = HEAP32[3240] | 0; //@line 1697 | |
if ((HEAP32[6048 + ($434 << 2) >> 2] | 0) < 0) { | |
if ((HEAP32[6488 + ($434 << 2) >> 2] | 0) == -1) { | |
_fPSPEAK($434, 1); //@line 1706 | |
} | |
} | |
HEAP32[66] = 1; //@line 1709 | |
$442 = 1; //@line 1710 | |
do { | |
if ((HEAP32[6488 + ($442 << 2) >> 2] | 0) == -1) { | |
$445 = 6048 + ($442 << 2) | 0; //@line 1716 | |
$446 = HEAP32[$445 >> 2] | 0; //@line 1717 | |
if (($446 | 0) < 0) { | |
HEAP32[$445 >> 2] = ~$446; //@line 1721 | |
} | |
} | |
$442 = $442 + 1 | 0; //@line 1724 | |
} while (($442 | 0) != 101); | |
HEAP32[66] = 101; //@line 1732 | |
} | |
if (!(_fTSTBIT(HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0, 0) | 0)) { | |
$455 = HEAP32[1828] | 0; //@line 1740 | |
if (!(HEAP32[6048 + ($455 << 2) >> 2] | 0)) { | |
$470 = 1; //@line 1745 | |
} else { | |
$460 = HEAP32[6488 + ($455 << 2) >> 2] | 0; //@line 1748 | |
$461 = HEAP32[74] | 0; //@line 1749 | |
if (($460 | 0) == ($461 | 0)) { | |
$468 = 1; //@line 1752 | |
} else { | |
$468 = ($460 | 0) == -1 ? 1 : (HEAP32[6896 + ($455 << 2) >> 2] | 0) == ($461 | 0); //@line 1759 | |
} | |
$470 = $468 ^ 1; //@line 1762 | |
} | |
} else { | |
$470 = 0; //@line 1765 | |
} | |
HEAP32[28] = $470 & 1; //@line 1768 | |
$471 = HEAP32[1834] | 0; //@line 1769 | |
if (!(($471 | 0) < 1 | ($471 | 0) == (HEAP32[74] | 0))) { | |
HEAP32[1834] = 0; //@line 1775 | |
} | |
HEAP32[66] = _fRAN(1) | 0; //@line 1778 | |
_fGETIN(12968, 12976, 12984, 12992); //@line 1779 | |
L319: while (1) { | |
$476 = HEAP32[3250] | 0; //@line 1781 | |
HEAP32[3250] = ($476 | 0) > 0 ? 0 - $476 | 0 : 0; //@line 1785 | |
$481 = (HEAP32[3252] | 0) + 1 | 0; //@line 1787 | |
HEAP32[3252] = $481; //@line 1788 | |
if (($481 | 0) == (HEAP32[3254] | 0)) { | |
_fSPEAK(HEAP32[13032 + (HEAP32[3256] << 2) >> 2] | 0); //@line 1795 | |
$488 = HEAP32[3256] | 0; //@line 1797 | |
HEAP32[3264] = ((HEAP32[13064 + ($488 << 2) >> 2] | 0) / 1e5 | 0) + (HEAP32[3264] | 0); //@line 1802 | |
$493 = $488 + 1 | 0; //@line 1803 | |
HEAP32[3256] = $493; //@line 1804 | |
HEAP32[3254] = -1; //@line 1805 | |
if (($488 | 0) < (HEAP32[3272] | 0)) { | |
HEAP32[3254] = (_fMOD(HEAP32[13064 + ($493 << 2) >> 2] | 0, 1e5) | 0) + 1; //@line 1813 | |
} | |
} | |
$500 = HEAP32[3080] | 0; //@line 1816 | |
$501 = HEAP32[3274] | 0; //@line 1817 | |
if (($500 | 0) == ($501 | 0) & (HEAP32[3246] | 0) > 0) { | |
HEAP32[3080] = 0; //@line 1823 | |
$505 = 0; //@line 1824 | |
} else { | |
$505 = $500; //@line 1826 | |
} | |
do { | |
if (($505 | 0) == ($501 | 0)) { | |
HEAP32[66] = 4090; //@line 1831 | |
$672 = 4090; //@line 1832 | |
label = 239; //@line 1833 | |
} else { | |
$508 = HEAP32[74] | 0; //@line 1836 | |
do { | |
if ((HEAP32[1826] | 0) != 0 | ($508 | 0) < 15 | ($508 + -145 | 0) >>> 0 < 22) { | |
label = 190; //@line 1845 | |
} else { | |
if (($508 | 0) == (HEAP32[320 + (HEAP32[78] << 2) >> 2] | 0)) { | |
label = 190; //@line 1852 | |
break; | |
} | |
if (($508 | 0) == 33 | ($508 | 0) == 179 | ($508 | 0) == 180 | ($508 | 0) == 182) { | |
label = 190; //@line 1856 | |
break; | |
} | |
$515 = (HEAP32[3276] | 0) + -1 | 0; //@line 1860 | |
HEAP32[3276] = $515; //@line 1861 | |
$516 = $515; //@line 1862 | |
} | |
} while (0); | |
if ((label | 0) == 190) { | |
label = 0; //@line 1866 | |
$516 = HEAP32[3276] | 0; //@line 1868 | |
} | |
L337: do { | |
if (!$516) { | |
HEAP32[6048 + (HEAP32[3440] << 2) >> 2] = 0; //@line 1875 | |
HEAP32[6048 + (HEAP32[3452] << 2) >> 2] = 0; //@line 1878 | |
HEAP32[383] = 0; //@line 1879 | |
HEAP32[384] = 0; //@line 1879 | |
HEAP32[385] = 0; //@line 1879 | |
HEAP32[386] = 0; //@line 1879 | |
HEAP32[387] = 0; //@line 1879 | |
HEAP32[388] = 0; //@line 1879 | |
HEAP32[395] = 0; //@line 1880 | |
HEAP32[396] = 0; //@line 1880 | |
HEAP32[397] = 0; //@line 1880 | |
HEAP32[398] = 0; //@line 1880 | |
HEAP32[399] = 0; //@line 1880 | |
HEAP32[400] = 0; //@line 1880 | |
HEAP32[66] = 7; //@line 1881 | |
_fMOVE(HEAP32[3320] | 0, 0); //@line 1883 | |
_fMOVE((HEAP32[3320] | 0) + 100 | 0, 0); //@line 1886 | |
_fMOVE(HEAP32[3322] | 0, HEAP32[320 + (HEAP32[3320] << 2) >> 2] | 0); //@line 1891 | |
_fMOVE((HEAP32[3322] | 0) + 100 | 0, HEAP32[13296 + (HEAP32[3320] << 2) >> 2] | 0); //@line 1897 | |
_fJUGGLE(HEAP32[3426] | 0); //@line 1899 | |
$1061 = HEAP32[2676] | 0; //@line 1900 | |
if ((HEAP32[6048 + ($1061 << 2) >> 2] | 0) != 3) { | |
_fDSTROY($1061); //@line 1905 | |
} | |
$1065 = HEAP32[2874] | 0; //@line 1907 | |
HEAP32[6048 + ($1065 << 2) >> 2] = 0; //@line 1909 | |
HEAP32[6896 + ($1065 << 2) >> 2] = 0; //@line 1911 | |
$1068 = HEAP32[404] | 0; //@line 1912 | |
HEAP32[6048 + ($1068 << 2) >> 2] = 0; //@line 1914 | |
HEAP32[6896 + ($1068 << 2) >> 2] = 0; //@line 1916 | |
_fRSPEAK(129); //@line 1917 | |
HEAP32[3276] = -1; //@line 1918 | |
HEAP32[182] = 1; //@line 1919 | |
} else { | |
$519 = HEAP32[186] | 0; //@line 1922 | |
if (($516 | 0) < 0) { | |
$520 = $519 + -1 | 0; //@line 1924 | |
HEAP32[186] = $520; //@line 1925 | |
$521 = $520; //@line 1926 | |
} else { | |
$521 = $519; //@line 1928 | |
} | |
if (!$521) { | |
label = 368; //@line 1932 | |
break L174; | |
} | |
$523 = HEAP32[1828] | 0; //@line 1935 | |
$524 = 6048 + ($523 << 2) | 0; //@line 1936 | |
$527 = HEAP32[76] | 0; //@line 1939 | |
if ((HEAP32[$524 >> 2] | 0) == 1) { | |
$528 = $527 + -1 | 0; //@line 1941 | |
HEAP32[76] = $528; //@line 1942 | |
$529 = $528; //@line 1943 | |
} else { | |
$529 = $527; //@line 1945 | |
} | |
if (($529 | 0) >= 31) { | |
break; | |
} | |
$531 = HEAP32[3278] | 0; //@line 1951 | |
$533 = HEAP32[6488 + ($531 << 2) >> 2] | 0; //@line 1953 | |
if (($533 | 0) == ($508 | 0)) { | |
label = 200; //@line 1956 | |
} else { | |
if (($533 | 0) == -1 ? 1 : (HEAP32[6896 + ($531 << 2) >> 2] | 0) == ($508 | 0)) { | |
label = 200; //@line 1964 | |
} | |
} | |
do { | |
if ((label | 0) == 200) { | |
label = 0; //@line 1969 | |
if (HEAP32[6048 + ($531 << 2) >> 2] | 0) { | |
break; | |
} | |
$543 = HEAP32[6488 + ($523 << 2) >> 2] | 0; //@line 1977 | |
if (($543 | 0) != ($508 | 0)) { | |
if (!(($543 | 0) == -1 ? 1 : (HEAP32[6896 + ($523 << 2) >> 2] | 0) == ($508 | 0))) { | |
break; | |
} | |
} | |
_fRSPEAK(188); //@line 1989 | |
$1135 = HEAP32[3278] | 0; //@line 1990 | |
HEAP32[6048 + ($1135 << 2) >> 2] = 1; //@line 1992 | |
if ((HEAP32[6488 + ($1135 << 2) >> 2] | 0) == -1) { | |
_fDROP($1135, HEAP32[74] | 0); //@line 1998 | |
} | |
HEAP32[76] = (HEAP32[76] | 0) + 2500; //@line 2002 | |
HEAP32[3568] = 0; //@line 2003 | |
break L337; | |
} | |
} while (0); | |
if (!$529) { | |
HEAP32[76] = -1; //@line 2009 | |
HEAP32[$524 >> 2] = 0; //@line 2010 | |
$1158 = HEAP32[6488 + ($523 << 2) >> 2] | 0; //@line 2012 | |
if (($1158 | 0) != ($508 | 0)) { | |
if (!(($1158 | 0) == -1 ? 1 : (HEAP32[6896 + ($523 << 2) >> 2] | 0) == ($508 | 0))) { | |
break; | |
} | |
} | |
_fRSPEAK(184); //@line 2024 | |
break; | |
} | |
if (HEAP32[3568] | 0) { | |
break; | |
} | |
$1144 = HEAP32[6488 + ($523 << 2) >> 2] | 0; //@line 2033 | |
if (($1144 | 0) != ($508 | 0)) { | |
if (!(($1144 | 0) == -1 ? 1 : (HEAP32[6896 + ($523 << 2) >> 2] | 0) == ($508 | 0))) { | |
break; | |
} | |
} | |
HEAP32[3568] = 1; //@line 2045 | |
$1150 = HEAP32[3278] | 0; //@line 2046 | |
$$$163 = (HEAP32[6048 + ($1150 << 2) >> 2] | 0) == 1 ? 189 : (HEAP32[6488 + ($1150 << 2) >> 2] | 0) == 0 ? 183 : 187; //@line 2054 | |
HEAP32[3078] = $$$163; //@line 2055 | |
_fRSPEAK($$$163); //@line 2056 | |
} | |
} while (0); | |
HEAP32[1614] = 43; //@line 2059 | |
$558 = (_fMOD(((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 2 | 0) << 1, 8) | 0) + -5 | 0; //@line 2066 | |
$564 = Math_imul(_fMOD((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 4 | 0, 2) | 0, $558) | 0; //@line 2072 | |
$566 = Math_imul($564, HEAP32[3280] | 0) | 0; //@line 2074 | |
$573 = (_fMOD(((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 2 | 0) << 1, 8) | 0) + -5 | 0; //@line 2081 | |
$581 = ((Math_imul(_fMOD((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 4 | 0, 2) | 0, $573) | 0) + 1 | 0) / 2 | 0; //@line 2089 | |
$582 = HEAP32[3280] | 0; //@line 2090 | |
if (((Math_imul((HEAP32[3282] | 0) + $582 | 0, $581) | 0) - $566 | 0) == ($582 | 0)) { | |
HEAP32[1614] = 70; //@line 2097 | |
} | |
HEAP32[3284] = _fVOCAB(HEAP32[3242] | 0, -1) | 0; //@line 2101 | |
$591 = _fVOCAB(HEAP32[3246] | 0, -1) | 0; //@line 2103 | |
HEAP32[3286] = $591; //@line 2104 | |
$592 = HEAP32[3284] | 0; //@line 2105 | |
$594 = ($592 | 0) == (HEAP32[3288] | 0); //@line 2107 | |
if ($594) { | |
if (($591 | 0) == (HEAP32[3290] | 0)) { | |
label = 149; //@line 2112 | |
break L282; | |
} | |
if (($591 | 0) == ((HEAP32[3280] | 0) + 1e3 | 0)) { | |
label = 149; //@line 2119 | |
break L282; | |
} | |
if ($594 & (HEAP32[3246] | 0) > 0) { | |
label = 234; //@line 2126 | |
break; | |
} | |
} | |
if (($592 | 0) == ((HEAP32[3280] | 0) + 1e3 | 0)) { | |
label = 213; //@line 2134 | |
} else { | |
if (($592 | 0) == ((HEAP32[3282] | 0) + 1e3 | 0)) { | |
label = 213; //@line 2140 | |
} else { | |
$625 = $592; //@line 2142 | |
} | |
} | |
do { | |
if ((label | 0) == 213) { | |
label = 0; //@line 2147 | |
if (($591 | 0) != ((HEAP32[3292] | 0) + 1e3 | 0)) { | |
if (($591 | 0) != ((HEAP32[3294] | 0) + 1e3 | 0)) { | |
$625 = $592; //@line 2156 | |
break; | |
} | |
} | |
$614 = $591 + -1e3 | 0; //@line 2160 | |
$617 = HEAP32[74] | 0; //@line 2163 | |
if ((HEAP32[6488 + ($614 << 2) >> 2] | 0) != ($617 | 0)) { | |
if ((HEAP32[6896 + ($614 << 2) >> 2] | 0) != ($617 | 0)) { | |
$625 = $592; //@line 2170 | |
break; | |
} | |
} | |
HEAP32[3246] = _fMAKEWD(16152118) | 0; //@line 2175 | |
$625 = HEAP32[3284] | 0; //@line 2177 | |
} | |
} while (0); | |
$623 = HEAP32[3296] | 0; //@line 2180 | |
if (($625 | 0) != ($623 + 1e3 | 0)) { | |
label = 225; //@line 2184 | |
break; | |
} | |
$628 = HEAP32[3298] | 0; //@line 2188 | |
if ((HEAP32[3286] | 0) != ($628 + 1e3 | 0)) { | |
label = 225; //@line 2192 | |
break; | |
} | |
$632 = HEAP32[6488 + ($623 << 2) >> 2] | 0; //@line 2196 | |
$633 = HEAP32[74] | 0; //@line 2197 | |
if (($632 | 0) != ($633 | 0)) { | |
if (!(($632 | 0) == -1 ? 1 : (HEAP32[6896 + ($623 << 2) >> 2] | 0) == ($633 | 0))) { | |
label = 225; //@line 2206 | |
break; | |
} | |
} | |
$640 = HEAP32[6488 + ($628 << 2) >> 2] | 0; //@line 2211 | |
if (($640 | 0) != ($633 | 0)) { | |
if (!(($640 | 0) == -1 ? 1 : (HEAP32[6896 + ($628 << 2) >> 2] | 0) == ($633 | 0))) { | |
label = 225; //@line 2220 | |
break; | |
} | |
} | |
HEAP32[3242] = _fMAKEWD(301200308) | 0; //@line 2225 | |
label = 225; //@line 2226 | |
} | |
} while (0); | |
L402: while (1) { | |
do { | |
if ((label | 0) == 225) { | |
label = 0; //@line 2232 | |
$647 = HEAP32[3242] | 0; //@line 2233 | |
do { | |
if (($647 | 0) == (_fMAKEWD(23051920) | 0)) { | |
$651 = (HEAP32[3300] | 0) + 1 | 0; //@line 2239 | |
HEAP32[3300] = $651; //@line 2240 | |
if (($651 | 0) != 10) { | |
break; | |
} | |
_fRSPEAK(17); //@line 2245 | |
} | |
} while (0); | |
$653 = HEAP32[3242] | 0; //@line 2248 | |
$655 = ($653 | 0) != (_fMAKEWD(715) | 0); //@line 2250 | |
if ($655 | (HEAP32[3246] | 0) == 0) { | |
break; | |
} | |
$659 = (HEAP32[3302] | 0) + 1 | 0; //@line 2258 | |
HEAP32[3302] = $659; //@line 2259 | |
if (($659 | 0) != 10) { | |
break; | |
} | |
_fRSPEAK(276); //@line 2264 | |
} else if ((label | 0) == 234) { | |
label = 0; //@line 2267 | |
HEAP32[3242] = HEAP32[3246]; //@line 2269 | |
HEAP32[3244] = HEAP32[3248]; //@line 2271 | |
HEAP32[3246] = 0; //@line 2272 | |
label = 225; //@line 2273 | |
continue L402; | |
} else if ((label | 0) == 239) { | |
label = 0; //@line 2277 | |
$673 = _action($672) | 0; //@line 2278 | |
if (($673 | 0) == 2e3) { | |
label = 115; //@line 2280 | |
continue L174; | |
} else if (($673 | 0) == 2012) { | |
label = 153; //@line 2283 | |
continue L242; | |
} else if (($673 | 0) == 2010) { | |
label = 149; //@line 2286 | |
break L282; | |
} else if (($673 | 0) == 2011) { | |
label = 151; //@line 2289 | |
break L282; | |
} else if (($673 | 0) == 2600) { | |
label = 154; //@line 2292 | |
continue L282; | |
} else if (($673 | 0) == 2607) { | |
continue L319; | |
} else if (($673 | 0) == 2800) { | |
label = 234; //@line 2297 | |
continue L402; | |
} else if (($673 | 0) == 2009) { | |
label = 240; //@line 2300 | |
break L282; | |
} else if (($673 | 0) == 8e3) { | |
label = 242; //@line 2303 | |
break L319; | |
} else if (($673 | 0) == 8) { | |
label = 243; //@line 2306 | |
break L282; | |
} else if (($673 | 0) == 2) { | |
break L174; | |
} else if (($673 | 0) == 18999) { | |
label = 382; //@line 2311 | |
break L10; | |
} else if (($673 | 0) == 19e3) { | |
label = 383; //@line 2314 | |
break L10; | |
} else if (($673 | 0) != 2630) { | |
label = 241; //@line 2317 | |
break L10; | |
} | |
} | |
} while (0); | |
$662 = _fVOCAB(HEAP32[3242] | 0, -1) | 0; //@line 2323 | |
HEAP32[66] = $662; //@line 2324 | |
if (($662 | 0) == -1) { | |
label = 235; //@line 2327 | |
break L319; | |
} | |
HEAP32[1614] = _fMOD($662, 1e3) | 0; //@line 2331 | |
$666 = (HEAP32[66] | 0) / 1e3 | 0; //@line 2333 | |
HEAP32[3304] = $666 + 1; //@line 2335 | |
if (($666 | 0) == 3) { | |
label = 149; //@line 2337 | |
break L282; | |
} else if (($666 | 0) == 2) { | |
HEAP32[66] = 4e3; //@line 2340 | |
$672 = 4e3; //@line 2341 | |
label = 239; //@line 2342 | |
continue; | |
} else if (($666 | 0) == 1) { | |
HEAP32[66] = 5e3; //@line 2345 | |
$672 = 5e3; //@line 2346 | |
label = 239; //@line 2347 | |
continue; | |
} else if (!$666) { | |
label = 243; //@line 2350 | |
break L282; | |
} else { | |
label = 233; //@line 2353 | |
break L10; | |
} | |
} | |
} | |
if ((label | 0) == 235) { | |
label = 0; //@line 2359 | |
_fSETPRM(1, HEAP32[3242] | 0, HEAP32[3244] | 0); //@line 2362 | |
_fRSPEAK(254); //@line 2363 | |
label = 154; //@line 2364 | |
continue; | |
} else if ((label | 0) == 242) { | |
label = 0; //@line 2368 | |
_fSETPRM(1, HEAP32[3242] | 0, HEAP32[3244] | 0); //@line 2371 | |
_fRSPEAK(257); //@line 2372 | |
HEAP32[2864] = 0; //@line 2373 | |
label = 154; //@line 2374 | |
continue; | |
} | |
} | |
if ((label | 0) == 149) { | |
label = 0; //@line 2379 | |
$403 = HEAP32[1614] | 0; //@line 2381 | |
label = 150; //@line 2382 | |
} else if ((label | 0) == 151) { | |
label = 0; //@line 2385 | |
$404 = HEAP32[3078] | 0; //@line 2387 | |
} else if ((label | 0) == 240) { | |
label = 0; //@line 2390 | |
HEAP32[1614] = 54; //@line 2391 | |
$403 = 54; //@line 2392 | |
label = 150; //@line 2393 | |
} else if ((label | 0) == 243) { | |
label = 0; //@line 2396 | |
$677 = HEAP32[74] | 0; //@line 2398 | |
label = 244; //@line 2399 | |
continue; | |
} | |
if ((label | 0) == 150) { | |
label = 0; //@line 2403 | |
HEAP32[3078] = $403; //@line 2404 | |
$404 = $403; //@line 2405 | |
} | |
_fRSPEAK($404); //@line 2407 | |
label = 153; //@line 2408 | |
} | |
$680 = HEAP32[1614] | 0; //@line 2410 | |
if (($680 | 0) == (HEAP32[3306] | 0)) { | |
break; | |
} | |
if (($680 | 0) == (HEAP32[3308] | 0)) { | |
$803 = HEAP32[3314] | 0; //@line 2419 | |
HEAP32[1614] = $803; //@line 2420 | |
if ((HEAP32[752 + ($803 << 2) >> 2] | 0) == 2) { | |
$807 = HEAP32[1836] | 0; //@line 2425 | |
HEAP32[1614] = $807; //@line 2426 | |
$809 = $807; //@line 2427 | |
} else { | |
$809 = $803; //@line 2429 | |
} | |
HEAP32[1836] = $803; //@line 2431 | |
$808 = HEAP32[74] | 0; //@line 2432 | |
HEAP32[3314] = $808; //@line 2433 | |
HEAP32[3428] = ($809 | 0) == ($808 | 0) ? 91 : 0; //@line 2436 | |
if (_fTSTBIT(HEAP32[752 + ($808 << 2) >> 2] | 0, 4) | 0) { | |
label = 287; //@line 2442 | |
break; | |
} | |
$$pr278 = HEAP32[3428] | 0; //@line 2445 | |
if ($$pr278) { | |
$824 = $$pr278; //@line 2448 | |
label = 290; //@line 2449 | |
break; | |
} | |
$821 = _fMOD((_fIABS(HEAP32[2400 + (HEAP32[412] << 2) >> 2] | 0) | 0) / 1e3 | 0, 1e3) | 0; //@line 2457 | |
HEAP32[3316] = $821; //@line 2458 | |
L438: do { | |
if (($821 | 0) == (HEAP32[1614] | 0)) { | |
label = 299; //@line 2463 | |
} else { | |
$825 = $821; //@line 2465 | |
while (1) { | |
do { | |
if (($825 | 0) <= 300) { | |
$828 = HEAP32[1656 + ($825 << 2) >> 2] | 0; //@line 2471 | |
HEAP32[392] = $828; //@line 2472 | |
if ((HEAP32[752 + ($825 << 2) >> 2] | 0) == 2) { | |
$836 = _fMOD((_fIABS(HEAP32[2400 + ($828 << 2) >> 2] | 0) | 0) / 1e3 | 0, 1e3) | 0; //@line 2481 | |
if (($836 | 0) != (HEAP32[1614] | 0)) { | |
break; | |
} | |
HEAP32[3428] = HEAP32[412]; //@line 2488 | |
} | |
} | |
} while (0); | |
$840 = HEAP32[412] | 0; //@line 2492 | |
if ((HEAP32[2400 + ($840 << 2) >> 2] | 0) < 0) { | |
break; | |
} | |
$844 = $840 + 1 | 0; //@line 2499 | |
HEAP32[412] = $844; //@line 2500 | |
$825 = _fMOD((_fIABS(HEAP32[2400 + ($844 << 2) >> 2] | 0) | 0) / 1e3 | 0, 1e3) | 0; //@line 2505 | |
HEAP32[3316] = $825; //@line 2506 | |
if (($825 | 0) == (HEAP32[1614] | 0)) { | |
label = 299; //@line 2510 | |
break L438; | |
} | |
} | |
$852 = HEAP32[3428] | 0; //@line 2516 | |
HEAP32[412] = $852; //@line 2517 | |
if (!$852) { | |
label = 298; //@line 2520 | |
break L174; | |
} else { | |
$855 = $852; //@line 2523 | |
} | |
} | |
} while (0); | |
if ((label | 0) == 299) { | |
label = 0; //@line 2528 | |
$855 = HEAP32[412] | 0; //@line 2530 | |
} | |
HEAP32[1614] = _fMOD(_fIABS(HEAP32[2400 + ($855 << 2) >> 2] | 0) | 0, 1e3) | 0; //@line 2536 | |
$861 = HEAP32[1656 + (HEAP32[74] << 2) >> 2] | 0; //@line 2539 | |
HEAP32[412] = $861; //@line 2540 | |
$692 = $861; //@line 2541 | |
} else { | |
if (($680 | 0) == (HEAP32[3310] | 0)) { | |
label = 301; //@line 2546 | |
break; | |
} | |
if (($680 | 0) == (HEAP32[3312] | 0)) { | |
label = 304; //@line 2552 | |
break; | |
} | |
HEAP32[1836] = HEAP32[3314]; //@line 2556 | |
HEAP32[3314] = HEAP32[74]; //@line 2558 | |
$692 = HEAP32[412] | 0; //@line 2560 | |
} | |
$694 = _fIABS(HEAP32[2400 + ($692 << 2) >> 2] | 0) | 0; //@line 2564 | |
HEAP32[3316] = $694; //@line 2565 | |
L455: do { | |
if ((_fMOD($694, 1e3) | 0) != 1) { | |
do { | |
$698 = _fMOD(HEAP32[3316] | 0, 1e3) | 0; //@line 2572 | |
$699 = HEAP32[1614] | 0; //@line 2573 | |
if (($698 | 0) == ($699 | 0)) { | |
break L455; | |
} | |
$701 = HEAP32[412] | 0; //@line 2578 | |
if ((HEAP32[2400 + ($701 << 2) >> 2] | 0) < 0) { | |
$$lcssa415 = $699; //@line 2583 | |
label = 309; //@line 2584 | |
break L174; | |
} | |
$705 = $701 + 1 | 0; //@line 2587 | |
HEAP32[412] = $705; //@line 2588 | |
$708 = _fIABS(HEAP32[2400 + ($705 << 2) >> 2] | 0) | 0; //@line 2591 | |
HEAP32[3316] = $708; //@line 2592 | |
} while ((_fMOD($708, 1e3) | 0) != 1); | |
} | |
} while (0); | |
$storemerge179 = (HEAP32[3316] | 0) / 1e3 | 0; //@line 2603 | |
L461: while (1) { | |
HEAP32[3316] = $storemerge179; //@line 2605 | |
$713 = ($storemerge179 | 0) / 1e3 | 0; //@line 2606 | |
HEAP32[72] = $713; //@line 2607 | |
$714 = _fMOD($713, 100) | 0; //@line 2608 | |
HEAP32[1614] = $714; //@line 2609 | |
$715 = HEAP32[72] | 0; //@line 2610 | |
do { | |
if (($715 | 0) < 301) { | |
if (($715 | 0) < 101) { | |
if (!$715) { | |
label = 268; //@line 2618 | |
break; | |
} | |
$744 = _fRAN(100) | 0; //@line 2621 | |
if (($744 | 0) < (HEAP32[72] | 0)) { | |
label = 268; //@line 2625 | |
break; | |
} else { | |
break; | |
} | |
} | |
$735 = HEAP32[6488 + ($714 << 2) >> 2] | 0; //@line 2632 | |
if (($735 | 0) == -1) { | |
label = 268; //@line 2635 | |
} else { | |
if (($715 | 0) > 200) { | |
$738 = HEAP32[74] | 0; //@line 2639 | |
if (($735 | 0) == ($738 | 0)) { | |
label = 268; //@line 2642 | |
} else { | |
if ((HEAP32[6896 + ($714 << 2) >> 2] | 0) == ($738 | 0)) { | |
label = 268; //@line 2648 | |
} | |
} | |
} | |
} | |
} else { | |
if ((HEAP32[6048 + ($714 << 2) >> 2] | 0) != ((($715 | 0) / 100 | 0) + -3 | 0)) { | |
label = 268; //@line 2660 | |
} | |
} | |
} while (0); | |
if ((label | 0) == 268) { | |
label = 0; //@line 2665 | |
$748 = _fMOD(HEAP32[3316] | 0, 1e3) | 0; //@line 2667 | |
HEAP32[72] = $748; //@line 2668 | |
if (($748 | 0) < 301) { | |
break L174; | |
} | |
if (($748 | 0) >= 501) { | |
$$lcssa418 = $748; //@line 2675 | |
label = 270; //@line 2676 | |
break L174; | |
} | |
HEAP32[72] = $748 + -300; //@line 2680 | |
if (($748 | 0) == 303) { | |
break; | |
} else if (($748 | 0) == 301) { | |
label = 274; //@line 2684 | |
break L174; | |
} else if (($748 | 0) != 302) { | |
label = 273; //@line 2687 | |
break L10; | |
} | |
_fDROP(HEAP32[1620] | 0, HEAP32[74] | 0); //@line 2692 | |
} | |
while (1) { | |
$722 = HEAP32[412] | 0; //@line 2695 | |
if ((HEAP32[2400 + ($722 << 2) >> 2] | 0) < 0) { | |
label = 259; //@line 2700 | |
break L10; | |
} | |
$726 = $722 + 1 | 0; //@line 2703 | |
HEAP32[412] = $726; //@line 2704 | |
$730 = (_fIABS(HEAP32[2400 + ($726 << 2) >> 2] | 0) | 0) / 1e3 | 0; //@line 2708 | |
HEAP32[72] = $730; //@line 2709 | |
if (($730 | 0) != (HEAP32[3316] | 0)) { | |
$storemerge179 = $730; //@line 2713 | |
continue L461; | |
} | |
} | |
} | |
$763 = HEAP32[3320] | 0; //@line 2718 | |
$764 = 6048 + ($763 << 2) | 0; //@line 2719 | |
$765 = HEAP32[$764 >> 2] | 0; //@line 2720 | |
if (($765 | 0) == 1) { | |
label = 279; //@line 2723 | |
break; | |
} | |
HEAP32[72] = (HEAP32[13296 + ($763 << 2) >> 2] | 0) + (HEAP32[320 + ($763 << 2) >> 2] | 0) - (HEAP32[74] | 0); //@line 2733 | |
if (!$765) { | |
HEAP32[$764 >> 2] = 1; //@line 2736 | |
} | |
if ((HEAP32[6488 + (HEAP32[2676] << 2) >> 2] | 0) != -1) { | |
break; | |
} | |
_fRSPEAK(162); //@line 2745 | |
HEAP32[6048 + (HEAP32[3426] << 2) >> 2] = 1; //@line 2748 | |
HEAP32[6048 + (HEAP32[3320] << 2) >> 2] = 2; //@line 2751 | |
_fDROP(HEAP32[2676] | 0, HEAP32[72] | 0); //@line 2754 | |
$799 = HEAP32[2676] | 0; //@line 2755 | |
HEAP32[6896 + ($799 << 2) >> 2] = -1; //@line 2757 | |
HEAP32[6048 + ($799 << 2) >> 2] = 3; //@line 2759 | |
HEAP32[1836] = HEAP32[72]; //@line 2761 | |
label = 320; //@line 2762 | |
} | |
do { | |
if ((label | 0) == 270) { | |
label = 0; //@line 2766 | |
_fRSPEAK($$lcssa418 + -500 | 0); //@line 2768 | |
HEAP32[72] = HEAP32[74]; //@line 2770 | |
} else if ((label | 0) == 274) { | |
label = 0; //@line 2773 | |
$754 = HEAP32[74] | 0; //@line 2774 | |
HEAP32[72] = 199 - $754; //@line 2776 | |
$756 = HEAP32[3318] | 0; //@line 2777 | |
if (!$756) { | |
break; | |
} else if (($756 | 0) == 1) { | |
if ((HEAP32[6488 + (HEAP32[1620] << 2) >> 2] | 0) == -1) { | |
break; | |
} | |
} | |
HEAP32[72] = $754; //@line 2789 | |
_fRSPEAK(117); //@line 2790 | |
} else if ((label | 0) == 279) { | |
label = 0; //@line 2793 | |
_fPSPEAK($763, 1); //@line 2794 | |
HEAP32[6048 + (HEAP32[3320] << 2) >> 2] = 0; //@line 2797 | |
_fMOVE(HEAP32[3322] | 0, 0); //@line 2799 | |
_fMOVE((HEAP32[3322] | 0) + 100 | 0, 0); //@line 2802 | |
$772 = HEAP32[3320] | 0; //@line 2803 | |
_fMOVE($772, HEAP32[320 + ($772 << 2) >> 2] | 0); //@line 2806 | |
$775 = HEAP32[3320] | 0; //@line 2807 | |
_fMOVE($775 + 100 | 0, HEAP32[13296 + ($775 << 2) >> 2] | 0); //@line 2811 | |
_fJUGGLE(HEAP32[3426] | 0); //@line 2813 | |
HEAP32[72] = HEAP32[74]; //@line 2815 | |
} else if ((label | 0) == 287) { | |
label = 0; //@line 2818 | |
HEAP32[3428] = 274; //@line 2819 | |
$824 = 274; //@line 2820 | |
label = 290; //@line 2821 | |
} else if ((label | 0) == 298) { | |
label = 0; //@line 2824 | |
_fRSPEAK(140); //@line 2825 | |
} else if ((label | 0) == 301) { | |
label = 0; //@line 2828 | |
$862 = HEAP32[3430] | 0; //@line 2829 | |
if (($862 | 0) < 3) { | |
_fRSPEAK(15); //@line 2832 | |
$865 = HEAP32[3430] | 0; //@line 2834 | |
} else { | |
$865 = $862; //@line 2836 | |
} | |
HEAP32[3430] = $865 + 1; //@line 2839 | |
HEAP32[28] = 0; //@line 2840 | |
HEAP32[8096 + (HEAP32[74] << 2) >> 2] = 0; //@line 2843 | |
} else if ((label | 0) == 304) { | |
label = 0; //@line 2846 | |
HEAP32[1614] = 58; //@line 2847 | |
$868 = HEAP32[74] | 0; //@line 2848 | |
if (($868 | 0) < 9 | ($868 + -145 | 0) >>> 0 < 22) { | |
if (($868 | 0) == 8) { | |
$879 = 58; //@line 2856 | |
} else { | |
label = 307; //@line 2858 | |
} | |
} else { | |
if (($868 | 0) != 8 & (($868 & -3 | 0) == 180 ? 1 : ($868 | 0) == (HEAP32[320 + (HEAP32[78] << 2) >> 2] | 0))) { | |
label = 307; //@line 2871 | |
} else { | |
$879 = 58; //@line 2873 | |
} | |
} | |
if ((label | 0) == 307) { | |
label = 0; //@line 2877 | |
HEAP32[1614] = 57; //@line 2878 | |
$879 = 57; //@line 2879 | |
} | |
_fRSPEAK($879); //@line 2881 | |
} else if ((label | 0) == 309) { | |
label = 0; //@line 2884 | |
$$$164 = ($$lcssa415 + -29 | 0) >>> 0 < 2 | ($$lcssa415 + -43 | 0) >>> 0 < 8 ? 52 : 12; //@line 2890 | |
HEAP32[3078] = $$$164; //@line 2891 | |
if (($$lcssa415 | 0) == 7 | ($$lcssa415 | 0) == 36 | ($$lcssa415 | 0) == 37) { | |
HEAP32[3078] = 10; //@line 2893 | |
$1191 = 10; //@line 2894 | |
} else { | |
$1191 = $$$164; //@line 2896 | |
} | |
if (($$lcssa415 | 0) == 11 | ($$lcssa415 | 0) == 19) { | |
HEAP32[3078] = 11; //@line 2899 | |
$1192 = 11; //@line 2900 | |
} else { | |
$1192 = $1191; //@line 2902 | |
} | |
$883 = HEAP32[3080] | 0; //@line 2904 | |
if (($883 | 0) == (HEAP32[3432] | 0) | ($883 | 0) == (HEAP32[3434] | 0)) { | |
HEAP32[3078] = 59; //@line 2911 | |
$1193 = 59; //@line 2912 | |
} else { | |
$1193 = $1192; //@line 2914 | |
} | |
if (($$lcssa415 | 0) == 17) { | |
HEAP32[3078] = 80; //@line 2917 | |
$888 = 80; //@line 2918 | |
} else if (($$lcssa415 | 0) == 62 | ($$lcssa415 | 0) == 65) { | |
HEAP32[3078] = 42; //@line 2920 | |
$888 = 42; //@line 2921 | |
} else { | |
$888 = $1193; //@line 2923 | |
} | |
_fRSPEAK($888); //@line 2925 | |
} else if ((label | 0) == 368) { | |
label = 0; //@line 2928 | |
$1072 = _fPUT(HEAP32[3454] | 0, 115, 1) | 0; //@line 2930 | |
HEAP32[6048 + (HEAP32[3454] << 2) >> 2] = $1072; //@line 2933 | |
$1076 = _fPUT(HEAP32[3292] | 0, 115, 0) | 0; //@line 2935 | |
HEAP32[6048 + (HEAP32[3292] << 2) >> 2] = $1076; //@line 2938 | |
$1080 = _fPUT(HEAP32[3240] | 0, 115, 0) | 0; //@line 2940 | |
$1081 = HEAP32[3240] | 0; //@line 2941 | |
HEAP32[6048 + ($1081 << 2) >> 2] = $1080; //@line 2943 | |
HEAP32[13824 + ($1081 << 2) >> 2] = 3; //@line 2945 | |
$1085 = _fPUT(HEAP32[1828] | 0, 115, 0) | 0; //@line 2947 | |
HEAP32[6048 + (HEAP32[1828] << 2) >> 2] = $1085; //@line 2950 | |
$1089 = _fPUT(HEAP32[3444] | 0, 115, 0) | 0; //@line 2952 | |
HEAP32[6048 + (HEAP32[3444] << 2) >> 2] = $1089; //@line 2955 | |
$1093 = _fPUT(HEAP32[3558] | 0, 115, 0) | 0; //@line 2957 | |
HEAP32[6048 + (HEAP32[3558] << 2) >> 2] = $1093; //@line 2960 | |
HEAP32[74] = 115; //@line 2961 | |
HEAP32[3314] = 115; //@line 2962 | |
HEAP32[72] = 115; //@line 2963 | |
HEAP32[66] = _fPUT(HEAP32[3440] | 0, 116, 0) | 0; //@line 2966 | |
HEAP32[66] = _fPUT(HEAP32[3560] | 0, 116, 0) | 0; //@line 2969 | |
$1101 = 13824 + (HEAP32[3560] << 2) | 0; //@line 2971 | |
HEAP32[$1101 >> 2] = (HEAP32[$1101 >> 2] | 0) + 1; //@line 2974 | |
$1105 = _fPUT(HEAP32[3446] | 0, 116, 1) | 0; //@line 2976 | |
HEAP32[6048 + (HEAP32[3446] << 2) >> 2] = $1105; //@line 2979 | |
$1109 = _fPUT(HEAP32[3298] | 0, 116, 1) | 0; //@line 2981 | |
HEAP32[6048 + (HEAP32[3298] << 2) >> 2] = $1109; //@line 2984 | |
$1113 = _fPUT(HEAP32[3296] | 0, 116, 0) | 0; //@line 2986 | |
HEAP32[6048 + (HEAP32[3296] << 2) >> 2] = $1113; //@line 2989 | |
$1117 = _fPUT(HEAP32[3562] | 0, 116, 0) | 0; //@line 2991 | |
HEAP32[6048 + (HEAP32[3562] << 2) >> 2] = $1117; //@line 2994 | |
$1121 = _fPUT(HEAP32[3564] | 0, 116, 0) | 0; //@line 2996 | |
HEAP32[6048 + (HEAP32[3564] << 2) >> 2] = $1121; //@line 2999 | |
$1125 = _fPUT(HEAP32[3566] | 0, 115, 0) | 0; //@line 3001 | |
$1126 = HEAP32[3566] | 0; //@line 3002 | |
HEAP32[6048 + ($1126 << 2) >> 2] = $1125; //@line 3004 | |
HEAP32[6896 + ($1126 << 2) >> 2] = 116; //@line 3006 | |
HEAP32[66] = 1; //@line 3007 | |
$storemerge182326 = 1; //@line 3008 | |
do { | |
if ((HEAP32[6488 + ($storemerge182326 << 2) >> 2] | 0) == -1) { | |
_fDSTROY($storemerge182326); //@line 3014 | |
$1133 = HEAP32[66] | 0; //@line 3016 | |
} else { | |
$1133 = $storemerge182326; //@line 3018 | |
} | |
$storemerge182326 = $1133 + 1 | 0; //@line 3020 | |
HEAP32[66] = $storemerge182326; //@line 3021 | |
} while (($storemerge182326 | 0) < 101); | |
_fRSPEAK(132); //@line 3029 | |
HEAP32[2870] = 1; //@line 3030 | |
} | |
} while (0); | |
if ((label | 0) == 290) { | |
label = 0; //@line 3034 | |
_fRSPEAK($824); //@line 3035 | |
} | |
$15 = HEAP32[72] | 0; //@line 3038 | |
} | |
if ((label | 0) == 233) { | |
_fBUG(22); //@line 3041 | |
} else if ((label | 0) == 241) { | |
_fBUG(99); //@line 3045 | |
} else if ((label | 0) == 245) { | |
_fBUG(26); //@line 3049 | |
} else if ((label | 0) == 259) { | |
_fBUG(25); //@line 3053 | |
} else if ((label | 0) == 273) { | |
_fBUG(20); //@line 3057 | |
} else if ((label | 0) == 334) { | |
_fBUG(27); //@line 3061 | |
} else if ((label | 0) == 382) { | |
_fRSPEAK(HEAP32[3078] | 0); //@line 3066 | |
_fRSPEAK(136); //@line 3067 | |
_score(0); //@line 3068 | |
return 0; //@line 3069 | |
} else if ((label | 0) == 383) { | |
_fRSPEAK(136); //@line 3072 | |
_score(0); //@line 3073 | |
return 0; //@line 3074 | |
} | |
return 0; //@line 3076 | |
} | |
function _action($STARTAT) { | |
$STARTAT = $STARTAT | 0; | |
var $$ = 0, | |
$$$20 = 0, | |
$$$21 = 0, | |
$$0 = 0, | |
$$37 = 0, | |
$$lcssa = 0, | |
$$lcssa237 = 0, | |
$$pr163 = 0, | |
$$pr166 = 0, | |
$$pr166190 = 0, | |
$$pr166191 = 0, | |
$$pr168 = 0, | |
$$pr173 = 0, | |
$$pr173214 = 0, | |
$$pre193 = 0, | |
$$pre194 = 0, | |
$$pre197 = 0, | |
$$pre204 = 0, | |
$0 = 0, | |
$1001 = 0, | |
$1004 = 0, | |
$101 = 0, | |
$1014 = 0, | |
$1015 = 0, | |
$1016 = 0, | |
$102 = 0, | |
$1023 = 0, | |
$1026 = 0, | |
$1029 = 0, | |
$1039 = 0, | |
$1041 = 0, | |
$1044 = 0, | |
$1047 = 0, | |
$1054 = 0, | |
$1055 = 0, | |
$1060 = 0, | |
$1065 = 0, | |
$1066 = 0, | |
$1067 = 0, | |
$1068 = 0, | |
$11 = 0, | |
$113 = 0, | |
$116 = 0, | |
$12 = 0, | |
$13 = 0, | |
$131 = 0, | |
$133 = 0, | |
$134 = 0, | |
$140 = 0, | |
$145 = 0, | |
$149 = 0, | |
$15 = 0, | |
$151 = 0, | |
$16 = 0, | |
$165 = 0, | |
$170 = 0, | |
$171 = 0, | |
$172 = 0, | |
$173 = 0, | |
$175 = 0, | |
$176 = 0, | |
$182 = 0, | |
$184 = 0, | |
$190 = 0, | |
$197 = 0, | |
$2 = 0, | |
$215 = 0, | |
$217 = 0, | |
$218 = 0, | |
$22 = 0, | |
$221 = 0, | |
$229 = 0, | |
$231 = 0, | |
$234 = 0, | |
$237 = 0, | |
$238 = 0, | |
$24 = 0, | |
$248 = 0, | |
$250 = 0, | |
$252 = 0, | |
$253 = 0, | |
$256 = 0, | |
$260 = 0, | |
$265 = 0, | |
$274 = 0, | |
$275 = 0, | |
$278 = 0, | |
$286 = 0, | |
$288 = 0, | |
$299 = 0, | |
$3 = 0, | |
$30 = 0, | |
$300 = 0, | |
$302 = 0, | |
$303 = 0, | |
$314 = 0, | |
$316 = 0, | |
$32 = 0, | |
$326 = 0, | |
$327 = 0, | |
$328 = 0, | |
$33 = 0, | |
$331 = 0, | |
$333 = 0, | |
$341 = 0, | |
$344 = 0, | |
$346 = 0, | |
$347 = 0, | |
$356 = 0, | |
$358 = 0, | |
$368 = 0, | |
$369 = 0, | |
$370 = 0, | |
$373 = 0, | |
$375 = 0, | |
$382 = 0, | |
$39 = 0, | |
$391 = 0, | |
$396 = 0, | |
$397 = 0, | |
$403 = 0, | |
$406 = 0, | |
$41 = 0, | |
$412 = 0, | |
$413 = 0, | |
$415 = 0, | |
$416 = 0, | |
$42 = 0, | |
$424 = 0, | |
$438 = 0, | |
$439 = 0, | |
$44 = 0, | |
$441 = 0, | |
$446 = 0, | |
$45 = 0, | |
$454 = 0, | |
$457 = 0, | |
$462 = 0, | |
$464 = 0, | |
$470 = 0, | |
$471 = 0, | |
$473 = 0, | |
$480 = 0, | |
$481 = 0, | |
$485 = 0, | |
$486 = 0, | |
$488 = 0, | |
$489 = 0, | |
$494 = 0, | |
$495 = 0, | |
$497 = 0, | |
$5 = 0, | |
$501 = 0, | |
$503 = 0, | |
$504 = 0, | |
$506 = 0, | |
$507 = 0, | |
$517 = 0, | |
$52 = 0, | |
$524 = 0, | |
$531 = 0, | |
$54 = 0, | |
$545 = 0, | |
$55 = 0, | |
$552 = 0, | |
$554 = 0, | |
$555 = 0, | |
$561 = 0, | |
$562 = 0, | |
$583 = 0, | |
$591 = 0, | |
$599 = 0, | |
$606 = 0, | |
$614 = 0, | |
$615 = 0, | |
$617 = 0, | |
$62 = 0, | |
$621 = 0, | |
$623 = 0, | |
$624 = 0, | |
$632 = 0, | |
$633 = 0, | |
$639 = 0, | |
$643 = 0, | |
$646 = 0, | |
$647 = 0, | |
$648 = 0, | |
$649 = 0, | |
$651 = 0, | |
$659 = 0, | |
$660 = 0, | |
$67 = 0, | |
$670 = 0, | |
$673 = 0, | |
$692 = 0, | |
$695 = 0, | |
$700 = 0, | |
$702 = 0, | |
$703 = 0, | |
$705 = 0, | |
$706 = 0, | |
$719 = 0, | |
$725 = 0, | |
$73 = 0, | |
$731 = 0, | |
$733 = 0, | |
$740 = 0, | |
$748 = 0, | |
$75 = 0, | |
$769 = 0, | |
$773 = 0, | |
$775 = 0, | |
$777 = 0, | |
$784 = 0, | |
$790 = 0, | |
$793 = 0, | |
$799 = 0, | |
$8 = 0, | |
$802 = 0, | |
$804 = 0, | |
$805 = 0, | |
$810 = 0, | |
$812 = 0, | |
$814 = 0, | |
$816 = 0, | |
$817 = 0, | |
$818 = 0, | |
$82 = 0, | |
$820 = 0, | |
$824 = 0, | |
$834 = 0, | |
$835 = 0, | |
$848 = 0, | |
$849 = 0, | |
$857 = 0, | |
$862 = 0, | |
$863 = 0, | |
$874 = 0, | |
$879 = 0, | |
$880 = 0, | |
$886 = 0, | |
$888 = 0, | |
$891 = 0, | |
$899 = 0, | |
$9 = 0, | |
$90 = 0, | |
$901 = 0, | |
$914 = 0, | |
$92 = 0, | |
$931 = 0, | |
$952 = 0, | |
$966 = 0, | |
$969 = 0, | |
$97 = 0, | |
$974 = 0, | |
$975 = 0, | |
$982 = 0, | |
$986 = 0, | |
$99 = 0, | |
$990 = 0, | |
$storemerge57180 = 0, | |
label = 0; | |
L1: do { | |
if (($STARTAT | 0) == 4e3) { | |
$0 = HEAP32[1614] | 0; //@line 4751 | |
HEAP32[3080] = $0; //@line 4752 | |
$2 = HEAP32[17704 + ($0 << 2) >> 2] | 0; //@line 4754 | |
HEAP32[3078] = $2; //@line 4755 | |
$3 = HEAP32[3246] | 0; //@line 4756 | |
$5 = HEAP32[3274] | 0; //@line 4758 | |
if (($3 | 0) > 0) { | |
if (($0 | 0) == ($5 | 0)) { | |
$8 = $0; //@line 4762 | |
} else { | |
$$0 = 2800; //@line 4764 | |
return $$0 | 0; //@line 4765 | |
} | |
} else { | |
$8 = $5; //@line 4768 | |
} | |
if (($0 | 0) == ($8 | 0)) { | |
HEAP32[2864] = $3; //@line 4772 | |
$9 = $3; //@line 4773 | |
} else { | |
$9 = HEAP32[2864] | 0; //@line 4776 | |
} | |
if (($9 | 0) > 0) { | |
label = 14; //@line 4780 | |
} else { | |
L13: do { | |
switch ($0 | 0) { | |
case 29: | |
case 28: | |
case 21: | |
case 19: | |
case 17: | |
case 16: | |
case 10: | |
case 9: | |
case 3: | |
case 2: | |
{ | |
$$0 = 8e3; //@line 4785 | |
return $$0 | 0; //@line 4786 | |
} | |
case 14: | |
{ | |
$552 = HEAP32[4516] | 0; //@line 4790 | |
$554 = HEAP32[6488 + ($552 << 2) >> 2] | 0; //@line 4792 | |
$555 = HEAP32[74] | 0; //@line 4793 | |
if (($554 | 0) == ($555 | 0)) { | |
$561 = $552; //@line 4796 | |
label = 219; //@line 4797 | |
break L1; | |
} | |
if (($554 | 0) == -1 ? 1 : (HEAP32[6896 + ($552 << 2) >> 2] | 0) == ($555 | 0)) { | |
$561 = $552; //@line 4806 | |
label = 219; //@line 4807 | |
break L1; | |
} else { | |
$$0 = 8e3; //@line 4810 | |
} | |
return $$0 | 0; //@line 4812 | |
} | |
case 13: | |
{ | |
$481 = $9; //@line 4816 | |
label = 199; //@line 4817 | |
break L1; | |
break; | |
} | |
case 18: | |
{ | |
if (!(_fYES(22, 54, 54) | 0)) { | |
$$0 = 2012; //@line 4825 | |
return $$0 | 0; //@line 4826 | |
} | |
_score(1); //@line 4828 | |
$$0 = 2012; //@line 4829 | |
return $$0 | 0; //@line 4830 | |
} | |
case 12: | |
{ | |
label = 198; //@line 4834 | |
break L1; | |
break; | |
} | |
case 15: | |
{ | |
$583 = $9; //@line 4839 | |
label = 223; //@line 4840 | |
break L1; | |
break; | |
} | |
case 23: | |
{ | |
label = 269; //@line 4845 | |
break L1; | |
break; | |
} | |
case 26: | |
{ | |
HEAP32[3078] = 156; //@line 4850 | |
HEAP32[2210] = 1e4; //@line 4851 | |
HEAP32[3430] = 3; //@line 4852 | |
$$0 = 2011; //@line 4853 | |
return $$0 | 0; //@line 4854 | |
} | |
case 25: | |
{ | |
$804 = _fVOCAB(HEAP32[3242] | 0, 3) | 0; //@line 4859 | |
HEAP32[1614] = $804; //@line 4860 | |
HEAP32[3078] = 42; //@line 4861 | |
$805 = HEAP32[3250] | 0; //@line 4862 | |
if (($805 | 0) != (1 - $804 | 0)) { | |
if (!$805) { | |
$$0 = 2011; //@line 4868 | |
return $$0 | 0; //@line 4869 | |
} | |
HEAP32[3078] = 151; //@line 4871 | |
$$0 = 2011; //@line 4872 | |
return $$0 | 0; //@line 4873 | |
} | |
HEAP32[3250] = $804; //@line 4875 | |
if (($804 | 0) != 4) { | |
$$0 = 2009; //@line 4878 | |
return $$0 | 0; //@line 4879 | |
} | |
HEAP32[3250] = 0; //@line 4881 | |
$810 = HEAP32[4512] | 0; //@line 4882 | |
$812 = HEAP32[6488 + ($810 << 2) >> 2] | 0; //@line 4884 | |
$814 = HEAP32[320 + ($810 << 2) >> 2] | 0; //@line 4886 | |
if (($812 | 0) == ($814 | 0)) { | |
$$0 = 2011; //@line 4889 | |
return $$0 | 0; //@line 4890 | |
} | |
$816 = ($812 | 0) == -1; //@line 4892 | |
$817 = HEAP32[74] | 0; //@line 4893 | |
$818 = ($817 | 0) == ($814 | 0); //@line 4894 | |
if ($816 & $818) { | |
$$0 = 2011; //@line 4897 | |
return $$0 | 0; //@line 4898 | |
} | |
if (!$812) { | |
$820 = HEAP32[3320] | 0; //@line 4902 | |
if (!(HEAP32[6488 + ($820 << 2) >> 2] | 0)) { | |
$824 = 6048 + ($820 << 2) | 0; //@line 4907 | |
if (!(HEAP32[$824 >> 2] | 0)) { | |
HEAP32[$824 >> 2] = 1; //@line 4911 | |
} | |
} | |
} | |
HEAP32[1614] = 2; //@line 4915 | |
if (($812 | 0) == ($817 | 0)) { | |
label = 287; //@line 4918 | |
} else { | |
if ($816 | (HEAP32[6896 + ($810 << 2) >> 2] | 0) == ($817 | 0)) { | |
label = 287; //@line 4925 | |
} | |
} | |
if ((label | 0) == 287) { | |
HEAP32[1614] = 1; //@line 4929 | |
} | |
if ($818) { | |
HEAP32[1614] = 0; //@line 4932 | |
} | |
_fMOVE($810, $814); //@line 4934 | |
_fPSPEAK(HEAP32[4512] | 0, HEAP32[1614] | 0); //@line 4937 | |
$$0 = 2012; //@line 4938 | |
return $$0 | 0; //@line 4939 | |
} | |
case 22: | |
{ | |
label = 268; //@line 4943 | |
break L1; | |
break; | |
} | |
case 20: | |
{ | |
HEAP32[3078] = 98; //@line 4948 | |
HEAP32[66] = 1; //@line 4949 | |
$769 = HEAP32[2676] | 0; //@line 4951 | |
$773 = 98; //@line 4951 | |
$storemerge57180 = 1; //@line 4951 | |
while (1) { | |
if (($storemerge57180 | 0) == ($769 | 0)) { | |
$1066 = $769; //@line 4955 | |
$1067 = $773; //@line 4955 | |
$777 = $769; //@line 4955 | |
} else { | |
if ((HEAP32[6488 + ($storemerge57180 << 2) >> 2] | 0) == -1) { | |
if (($773 | 0) == 98) { | |
_fRSPEAK(99); //@line 4963 | |
$775 = HEAP32[66] | 0; //@line 4965 | |
} else { | |
$775 = $storemerge57180; //@line 4967 | |
} | |
HEAP32[2] = 0; //@line 4969 | |
_fPSPEAK($775, -1); //@line 4970 | |
HEAP32[2] = 1; //@line 4971 | |
HEAP32[3078] = 0; //@line 4972 | |
$1066 = HEAP32[2676] | 0; //@line 4975 | |
$1067 = 0; //@line 4975 | |
$777 = HEAP32[66] | 0; //@line 4975 | |
} else { | |
$1066 = $769; //@line 4977 | |
$1067 = $773; //@line 4977 | |
$777 = $storemerge57180; //@line 4977 | |
} | |
} | |
$storemerge57180 = $777 + 1 | 0; //@line 4980 | |
HEAP32[66] = $storemerge57180; //@line 4981 | |
if (($storemerge57180 | 0) >= 101) { | |
$$lcssa = $1066; //@line 4986 | |
break; | |
} else { | |
$769 = $1066; //@line 4984 | |
$773 = $1067; //@line 4984 | |
} | |
} | |
if ((HEAP32[6488 + ($$lcssa << 2) >> 2] | 0) != -1) { | |
$$0 = 2011; //@line 4994 | |
return $$0 | 0; //@line 4995 | |
} | |
HEAP32[3078] = 141; //@line 4997 | |
$$0 = 2011; //@line 4998 | |
return $$0 | 0; //@line 4999 | |
} | |
case 24: | |
{ | |
label = 274; //@line 5003 | |
break L1; | |
break; | |
} | |
case 34: | |
{ | |
label = 355; //@line 5008 | |
break L1; | |
break; | |
} | |
case 33: | |
{ | |
HEAP32[3078] = 228; //@line 5013 | |
$1004 = HEAP32[18104 + (HEAP32[74] << 2) >> 2] | 0; //@line 5016 | |
HEAP32[1614] = $1004; //@line 5017 | |
do { | |
if ($1004) { | |
_fRSPEAK(_fIABS($1004) | 0); //@line 5022 | |
if ((HEAP32[1614] | 0) < 0) { | |
$$0 = 2012; //@line 5026 | |
return $$0 | 0; //@line 5027 | |
} else { | |
HEAP32[3078] = 0; //@line 5029 | |
break; | |
} | |
} | |
} while (0); | |
_fSETPRM(1, (HEAP32[68] | 0) - (HEAP32[16] << 1) | 0, 0); //@line 5038 | |
HEAP32[66] = 1; //@line 5039 | |
$1014 = 1; //@line 5040 | |
do { | |
$1015 = HEAP32[6488 + ($1014 << 2) >> 2] | 0; //@line 5043 | |
$1016 = HEAP32[74] | 0; //@line 5044 | |
if (($1015 | 0) == ($1016 | 0)) { | |
label = 349; //@line 5047 | |
} else { | |
if (($1015 | 0) == -1 ? 1 : (HEAP32[6896 + ($1014 << 2) >> 2] | 0) == ($1016 | 0)) { | |
label = 349; //@line 5055 | |
} else { | |
$1039 = $1014; //@line 5057 | |
} | |
} | |
if ((label | 0) == 349) { | |
label = 0; //@line 5061 | |
$1023 = HEAP32[18864 + ($1014 << 2) >> 2] | 0; //@line 5063 | |
if (!$1023) { | |
$1039 = $1014; //@line 5066 | |
} else { | |
$1026 = HEAP32[6048 + ($1014 << 2) >> 2] | 0; //@line 5069 | |
if (($1026 | 0) < 0) { | |
$1039 = $1014; //@line 5072 | |
} else { | |
_fPSPEAK($1014, $1026 + $1023 | 0); //@line 5075 | |
HEAP32[3078] = 0; //@line 5076 | |
$1029 = HEAP32[66] | 0; //@line 5077 | |
if (($1029 | 0) == (HEAP32[3298] | 0)) { | |
if (((HEAP32[6048 + ($1029 << 2) >> 2] | 0) + (HEAP32[18864 + ($1029 << 2) >> 2] | 0) | 0) == 8) { | |
_fDSTROY($1029); //@line 5088 | |
$1039 = HEAP32[66] | 0; //@line 5090 | |
} else { | |
$1039 = $1029; //@line 5092 | |
} | |
} else { | |
$1039 = $1029; //@line 5095 | |
} | |
} | |
} | |
} | |
$1014 = $1039 + 1 | 0; //@line 5100 | |
HEAP32[66] = $1014; //@line 5101 | |
} while (($1014 | 0) < 101); | |
$$0 = 2011; //@line 5106 | |
return $$0 | 0; //@line 5110 | |
} | |
case 31: | |
{ | |
HEAP32[412] = 1; //@line 5114 | |
if (!((HEAP32[74] | 0) == 1 & (HEAP32[2025] | 0) == 1)) { | |
_fRSPEAK(268); //@line 5121 | |
if (!(_fYES(200, 54, 54) | 0)) { | |
$$0 = 2012; //@line 5125 | |
return $$0 | 0; //@line 5126 | |
} | |
} | |
break; | |
} | |
case 30: | |
{ | |
HEAP32[3078] = 201; //@line 5132 | |
_fRSPEAK(260); //@line 5133 | |
if (!(_fYES(200, 54, 54) | 0)) { | |
$$0 = 2012; //@line 5137 | |
return $$0 | 0; //@line 5138 | |
} else { | |
HEAP32[4826] = (HEAP32[4826] | 0) + 5; //@line 5142 | |
HEAP32[412] = -1; //@line 5143 | |
break L13; | |
} | |
break; | |
} | |
case 32: | |
{ | |
$969 = HEAP32[2872] | 0; //@line 5149 | |
if ((HEAP32[6048 + ($969 << 2) >> 2] | 0) == 2) { | |
$982 = $2; //@line 5154 | |
} else { | |
HEAP32[3078] = 224; //@line 5156 | |
$982 = 224; //@line 5157 | |
} | |
$974 = HEAP32[6488 + ($969 << 2) >> 2] | 0; //@line 5160 | |
$975 = HEAP32[74] | 0; //@line 5161 | |
if (($974 | 0) != ($975 | 0)) { | |
if (!(($974 | 0) == -1 ? 1 : (HEAP32[6896 + ($969 << 2) >> 2] | 0) == ($975 | 0))) { | |
HEAP32[3078] = 225; //@line 5170 | |
$$0 = 2011; //@line 5171 | |
return $$0 | 0; //@line 5172 | |
} | |
} | |
if (($982 & -2 | 0) == 224) { | |
$$0 = 2011; //@line 5178 | |
return $$0 | 0; //@line 5179 | |
} else { | |
HEAP32[2864] = $969; //@line 5181 | |
$986 = $969; //@line 5182 | |
label = 341; //@line 5183 | |
break L1; | |
} | |
break; | |
} | |
case 8: | |
{ | |
$344 = HEAP32[1828] | 0; //@line 5189 | |
$346 = HEAP32[6488 + ($344 << 2) >> 2] | 0; //@line 5191 | |
$347 = HEAP32[74] | 0; //@line 5192 | |
if (($346 | 0) == ($347 | 0)) { | |
label = 156; //@line 5195 | |
} else { | |
if (($346 | 0) == -1 ? 1 : (HEAP32[6896 + ($344 << 2) >> 2] | 0) == ($347 | 0)) { | |
label = 156; //@line 5203 | |
} else { | |
$368 = $9; //@line 5205 | |
} | |
} | |
if ((label | 0) == 156) { | |
if ((HEAP32[6048 + ($344 << 2) >> 2] | 0) == 1) { | |
HEAP32[2864] = $344; //@line 5213 | |
$368 = $344; //@line 5214 | |
} else { | |
$368 = $9; //@line 5216 | |
} | |
} | |
$356 = HEAP32[4840] | 0; //@line 5219 | |
$358 = HEAP32[6488 + ($356 << 2) >> 2] | 0; //@line 5221 | |
if (($358 | 0) == ($347 | 0)) { | |
label = 160; //@line 5224 | |
} else { | |
if (($358 | 0) == -1 ? 1 : (HEAP32[6896 + ($356 << 2) >> 2] | 0) == ($347 | 0)) { | |
label = 160; //@line 5232 | |
} else { | |
$370 = $368; //@line 5234 | |
} | |
} | |
if ((label | 0) == 160) { | |
if ((HEAP32[6048 + ($356 << 2) >> 2] | 0) == 2) { | |
$369 = ($368 * 100 | 0) + $356 | 0; //@line 5243 | |
HEAP32[2864] = $369; //@line 5244 | |
$370 = $369; //@line 5245 | |
} else { | |
$370 = $368; //@line 5247 | |
} | |
} | |
if (($370 | 0) == 0 | ($370 | 0) > 100) { | |
$$0 = 8e3; //@line 5254 | |
} else { | |
$373 = $370; //@line 5256 | |
$375 = $356; //@line 5256 | |
label = 163; //@line 5257 | |
break L1; | |
} | |
return $$0 | 0; //@line 5260 | |
} | |
case 7: | |
{ | |
$300 = HEAP32[1828] | 0; //@line 5264 | |
$302 = HEAP32[6488 + ($300 << 2) >> 2] | 0; //@line 5266 | |
$303 = HEAP32[74] | 0; //@line 5267 | |
if (($302 | 0) == ($303 | 0)) { | |
label = 141; //@line 5270 | |
} else { | |
if (($302 | 0) == -1 ? 1 : (HEAP32[6896 + ($300 << 2) >> 2] | 0) == ($303 | 0)) { | |
label = 141; //@line 5278 | |
} else { | |
$326 = $9; //@line 5280 | |
} | |
} | |
if ((label | 0) == 141) { | |
if ((HEAP32[76] | 0) > -1 ? (HEAP32[6048 + ($300 << 2) >> 2] | 0) == 0 : 0) { | |
HEAP32[2864] = $300; //@line 5291 | |
$326 = $300; //@line 5292 | |
} else { | |
$326 = $9; //@line 5294 | |
} | |
} | |
$314 = HEAP32[4840] | 0; //@line 5297 | |
$316 = HEAP32[6488 + ($314 << 2) >> 2] | 0; //@line 5299 | |
if (($316 | 0) == ($303 | 0)) { | |
label = 145; //@line 5302 | |
} else { | |
if (($316 | 0) == -1 ? 1 : (HEAP32[6896 + ($314 << 2) >> 2] | 0) == ($303 | 0)) { | |
label = 145; //@line 5310 | |
} else { | |
$328 = $326; //@line 5312 | |
} | |
} | |
if ((label | 0) == 145) { | |
if ((HEAP32[6048 + ($314 << 2) >> 2] | 0) == 1) { | |
$327 = ($326 * 100 | 0) + $314 | 0; //@line 5321 | |
HEAP32[2864] = $327; //@line 5322 | |
$328 = $327; //@line 5323 | |
} else { | |
$328 = $326; //@line 5325 | |
} | |
} | |
if (($328 | 0) == 0 | ($328 | 0) > 100) { | |
$$0 = 8e3; //@line 5332 | |
} else { | |
$331 = $328; //@line 5334 | |
$333 = $314; //@line 5334 | |
label = 148; //@line 5335 | |
break L1; | |
} | |
return $$0 | 0; //@line 5338 | |
} | |
case 27: | |
{ | |
HEAP32[66] = 1; //@line 5342 | |
$11 = HEAP32[74] | 0; //@line 5343 | |
$834 = 1; //@line 5344 | |
$848 = $9; //@line 5344 | |
while (1) { | |
$835 = HEAP32[6488 + ($834 << 2) >> 2] | 0; //@line 5347 | |
if (($835 | 0) == ($11 | 0)) { | |
label = 294; //@line 5350 | |
} else { | |
if (($835 | 0) == -1 ? 1 : (HEAP32[6896 + ($834 << 2) >> 2] | 0) == ($11 | 0)) { | |
label = 294; //@line 5358 | |
} else { | |
$1068 = $848; //@line 5360 | |
} | |
} | |
if ((label | 0) == 294) { | |
label = 0; //@line 5364 | |
if (!(HEAP32[13824 + ($834 << 2) >> 2] | 0)) { | |
$1068 = $848; //@line 5369 | |
} else { | |
if ((HEAP32[6048 + ($834 << 2) >> 2] | 0) > -1) { | |
$849 = ($848 * 100 | 0) + $834 | 0; //@line 5376 | |
HEAP32[2864] = $849; //@line 5377 | |
$1068 = $849; //@line 5378 | |
} else { | |
$1068 = $848; //@line 5380 | |
} | |
} | |
} | |
$834 = $834 + 1 | 0; //@line 5384 | |
if (($834 | 0) == 101) { | |
$$lcssa237 = $1068; //@line 5387 | |
break; | |
} else { | |
$848 = $1068; //@line 5390 | |
} | |
} | |
HEAP32[66] = 101; //@line 5393 | |
if (($$lcssa237 | 0) > 100 | ($$lcssa237 | 0) == 0) { | |
$$0 = 8e3; //@line 5398 | |
return $$0 | 0; //@line 5399 | |
} | |
if (_fTSTBIT(HEAP32[752 + ($11 << 2) >> 2] | 0, 0) | 0) { | |
label = 303; //@line 5406 | |
break L1; | |
} | |
$857 = HEAP32[1828] | 0; //@line 5409 | |
if (!(HEAP32[6048 + ($857 << 2) >> 2] | 0)) { | |
$$0 = 8e3; //@line 5414 | |
return $$0 | 0; //@line 5415 | |
} | |
$862 = HEAP32[6488 + ($857 << 2) >> 2] | 0; //@line 5418 | |
$863 = HEAP32[74] | 0; //@line 5419 | |
if (($862 | 0) == ($863 | 0)) { | |
label = 303; //@line 5422 | |
break L1; | |
} | |
if (($862 | 0) == -1 ? 1 : (HEAP32[6896 + ($857 << 2) >> 2] | 0) == ($863 | 0)) { | |
label = 303; //@line 5431 | |
break L1; | |
} else { | |
$$0 = 8e3; //@line 5434 | |
} | |
return $$0 | 0; //@line 5436 | |
} | |
case 5: | |
{ | |
$$0 = 2009; //@line 5440 | |
return $$0 | 0; //@line 5441 | |
} | |
case 11: | |
{ | |
$$0 = 2011; //@line 5445 | |
return $$0 | 0; //@line 5446 | |
} | |
case 1: | |
{ | |
$149 = HEAP32[74] | 0; //@line 5450 | |
$151 = HEAP32[10712 + ($149 << 2) >> 2] | 0; //@line 5452 | |
if (!$151) { | |
$$0 = 8e3; //@line 5455 | |
return $$0 | 0; //@line 5456 | |
} | |
if (HEAP32[11504 + ($151 << 2) >> 2] | 0) { | |
$$0 = 8e3; //@line 5462 | |
return $$0 | 0; //@line 5463 | |
} | |
if ((_fATDWRF($149) | 0) > 0) { | |
$$0 = 8e3; //@line 5468 | |
return $$0 | 0; //@line 5469 | |
} else { | |
HEAP32[2864] = HEAP32[10712 + (HEAP32[74] << 2) >> 2]; //@line 5474 | |
label = 76; //@line 5475 | |
break L1; | |
} | |
break; | |
} | |
case 6: | |
case 4: | |
{ | |
HEAP32[3078] = 28; //@line 5481 | |
$173 = HEAP32[4470] | 0; //@line 5482 | |
$175 = HEAP32[6488 + ($173 << 2) >> 2] | 0; //@line 5484 | |
$176 = HEAP32[74] | 0; //@line 5485 | |
if (($175 | 0) == ($176 | 0)) { | |
label = 87; //@line 5488 | |
} else { | |
if (($175 | 0) == -1 ? 1 : (HEAP32[6896 + ($173 << 2) >> 2] | 0) == ($176 | 0)) { | |
label = 87; //@line 5496 | |
} else { | |
$$pr166191 = $9; //@line 5498 | |
} | |
} | |
if ((label | 0) == 87) { | |
HEAP32[2864] = $173; //@line 5502 | |
$$pr166191 = $173; //@line 5503 | |
} | |
$182 = HEAP32[3240] | 0; //@line 5505 | |
$184 = HEAP32[6488 + ($182 << 2) >> 2] | 0; //@line 5507 | |
if (($184 | 0) == ($176 | 0)) { | |
label = 90; //@line 5510 | |
} else { | |
if (($184 | 0) == -1 ? 1 : (HEAP32[6896 + ($182 << 2) >> 2] | 0) == ($176 | 0)) { | |
label = 90; //@line 5518 | |
} else { | |
$$pr166190 = $$pr166191; //@line 5520 | |
} | |
} | |
if ((label | 0) == 90) { | |
HEAP32[2864] = $182; //@line 5524 | |
$$pr166190 = $182; //@line 5525 | |
} | |
$190 = HEAP32[3294] | 0; //@line 5527 | |
if ((HEAP32[6488 + ($190 << 2) >> 2] | 0) == ($176 | 0)) { | |
label = 93; //@line 5532 | |
} else { | |
if ((HEAP32[6896 + ($190 << 2) >> 2] | 0) == ($176 | 0)) { | |
label = 93; //@line 5538 | |
} else { | |
$$pr166 = $$pr166190; //@line 5540 | |
} | |
} | |
if ((label | 0) == 93) { | |
HEAP32[2864] = $190; //@line 5544 | |
$$pr166 = $190; //@line 5545 | |
} | |
$197 = HEAP32[3440] | 0; //@line 5547 | |
if ((HEAP32[6488 + ($197 << 2) >> 2] | 0) == ($176 | 0)) { | |
label = 96; //@line 5552 | |
} else { | |
if ((HEAP32[6896 + ($197 << 2) >> 2] | 0) == ($176 | 0)) { | |
label = 96; //@line 5558 | |
} else { | |
$$pr168 = $$pr166; //@line 5560 | |
} | |
} | |
if ((label | 0) == 96) { | |
HEAP32[2864] = $197; //@line 5564 | |
$$pr168 = $197; //@line 5565 | |
} | |
$$pre193 = HEAP32[2874] | 0; //@line 5568 | |
$$pre194 = HEAP32[6488 + ($$pre193 << 2) >> 2] | 0; //@line 5570 | |
if ($$pr168) { | |
if (($$pre194 | 0) == ($176 | 0)) { | |
$$0 = 8e3; //@line 5574 | |
return $$0 | 0; //@line 5575 | |
} | |
if (($$pre194 | 0) == -1 ? 1 : (HEAP32[6896 + ($$pre193 << 2) >> 2] | 0) == ($176 | 0)) { | |
$$0 = 8e3; //@line 5583 | |
return $$0 | 0; //@line 5584 | |
} | |
} | |
if (($$pre194 | 0) == ($176 | 0)) { | |
label = 102; //@line 5589 | |
} else { | |
if (($$pre194 | 0) == -1 ? 1 : (HEAP32[6896 + ($$pre193 << 2) >> 2] | 0) == ($176 | 0)) { | |
label = 102; //@line 5597 | |
} else { | |
$215 = $$pr168; //@line 5599 | |
} | |
} | |
if ((label | 0) == 102) { | |
HEAP32[2864] = $$pre193; //@line 5603 | |
$215 = $$pre193; //@line 5604 | |
} | |
if (!$215) { | |
$$0 = 2011; //@line 5608 | |
} else { | |
$252 = $0; //@line 5610 | |
label = 104; //@line 5611 | |
break L1; | |
} | |
return $$0 | 0; //@line 5614 | |
} | |
default: | |
{ | |
_fBUG(23); //@line 5618 | |
} | |
} | |
} while (0); | |
_fDATIME(264, 6456) | 0; //@line 5623 | |
HEAP32[1614] = ((HEAP32[1614] | 0) * 650 | 0) + (HEAP32[66] | 0); //@line 5628 | |
_fSAVWRD(HEAP32[412] | 0, 6456); //@line 5630 | |
HEAP32[1614] = HEAP32[26]; //@line 5632 | |
_fSAVWRD(0, 6456); //@line 5633 | |
$931 = HEAP32[1614] | 0; //@line 5634 | |
if (($931 | 0) != (HEAP32[26] | 0)) { | |
_fSETPRM(1, ($931 | 0) / 10 | 0, _fMOD($931, 10) | 0); //@line 5640 | |
$966 = HEAP32[26] | 0; //@line 5641 | |
_fSETPRM(3, ($966 | 0) / 10 | 0, _fMOD($966, 10) | 0); //@line 5644 | |
_fRSPEAK(269); //@line 5645 | |
$$0 = 2e3; //@line 5646 | |
return $$0 | 0; //@line 5647 | |
} | |
_fSAVWDS(8840, 8, 17864, 13104, 744, 11480, 728); //@line 5649 | |
_fSAVWDS(13720, 1560, 18024, 1624, 13e3, 13272, 13200); //@line 5650 | |
_fSAVWDS(7336, 304, 13264, 14272, 296, 288, 13744); //@line 5651 | |
_fSAVWDS(11456, 7344, 13256, 12328, 736, 19304, 16); //@line 5652 | |
_fSAVWDS(12312, 7304, 13016, 13024, 13056, 13008, 13824 + (HEAP32[3240] << 2) | 0); //@line 5655 | |
_fSAVWDS(12320, 12968, 12976, 12984, 112, 272, 18864 + (HEAP32[3298] << 2) | 0); //@line 5658 | |
_fSAVWDS(13824 + (HEAP32[3560] << 2) | 0, 17888, 280, 6456, 6456, 6456, 6456); //@line 5661 | |
_fSAVARR(8096, HEAP32[14] | 0); //@line 5663 | |
_fSAVARR(10712, HEAP32[14] | 0); //@line 5665 | |
_fSAVARR(1576, 6); //@line 5666 | |
_fSAVARR(1528, 6); //@line 5667 | |
_fSAVARR(6896, 100); //@line 5668 | |
_fSAVARR(12360, HEAP32[10] | 0); //@line 5670 | |
_fSAVARR(12448, HEAP32[10] | 0); //@line 5672 | |
_fSAVARR(11504, 200); //@line 5673 | |
_fSAVARR(1496, 6); //@line 5674 | |
_fSAVARR(6488, 100); //@line 5675 | |
_fSAVARR(6048, 100); //@line 5676 | |
_fSAVWRD(HEAP32[412] | 0, 6456); //@line 5678 | |
if (HEAP32[1614] | 0) { | |
_fRSPEAK(270); //@line 5682 | |
_exit(0); //@line 5683 | |
} | |
HEAP32[1614] = HEAP32[3306]; //@line 5687 | |
$952 = _fRNDVOC(3, (HEAP32[68] | 0) - (HEAP32[16] << 1) | 0) | 0; //@line 5692 | |
HEAP32[68] = (HEAP32[16] << 1) + $952; //@line 5696 | |
if ((HEAP32[412] | 0) > 0) { | |
$$0 = 8; //@line 5700 | |
return $$0 | 0; //@line 5701 | |
} else { | |
_fRSPEAK(266); //@line 5703 | |
_exit(0); //@line 5704 | |
} | |
} | |
} else if (($STARTAT | 0) == 4090) { | |
label = 14; //@line 5709 | |
} else if (($STARTAT | 0) == 5e3) { | |
$13 = HEAP32[1614] | 0; //@line 5711 | |
HEAP32[2864] = $13; //@line 5712 | |
$15 = HEAP32[6488 + ($13 << 2) >> 2] | 0; //@line 5714 | |
$16 = HEAP32[74] | 0; //@line 5715 | |
L218: do { | |
if (($15 | 0) != ($16 | 0)) { | |
if (!(($15 | 0) == -1 ? 1 : (HEAP32[6896 + ($13 << 2) >> 2] | 0) == ($16 | 0))) { | |
if (($13 | 0) == (HEAP32[3440] | 0)) { | |
if (($16 | 0) == 1 | ($16 | 0) == 4 | ($16 | 0) == 7) { | |
$30 = HEAP32[4508] | 0; //@line 5729 | |
HEAP32[1614] = $30; //@line 5730 | |
$1065 = $30; //@line 5731 | |
} else { | |
$1065 = $13; //@line 5733 | |
} | |
if (($16 + -10 | 0) >>> 0 < 5) { | |
$32 = HEAP32[4514] | 0; //@line 5738 | |
HEAP32[1614] = $32; //@line 5739 | |
$33 = $32; //@line 5740 | |
} else { | |
$33 = $1065; //@line 5742 | |
} | |
if (($33 | 0) != ($13 | 0)) { | |
$$0 = 8; //@line 5746 | |
return $$0 | 0; //@line 5747 | |
} | |
} | |
if (($13 | 0) == (HEAP32[3558] | 0)) { | |
if ((_fATDWRF($16) | 0) > 0) { | |
break; | |
} | |
$52 = HEAP32[1614] | 0; //@line 5759 | |
} else { | |
$52 = $13; //@line 5761 | |
} | |
$39 = HEAP32[3454] | 0; //@line 5763 | |
$41 = HEAP32[6048 + ($39 << 2) >> 2] | 0; //@line 5765 | |
$42 = $41 >> 31 ^ $41; //@line 5767 | |
$44 = HEAP32[3280] | 0; //@line 5769 | |
$45 = Math_imul(1 - $42 | 0, $44) | 0; //@line 5770 | |
if (((Math_imul((HEAP32[3282] | 0) + $44 | 0, ($42 | 0) / 2 | 0) | 0) + $45 | 0) == ($52 | 0)) { | |
$54 = HEAP32[6488 + ($39 << 2) >> 2] | 0; //@line 5779 | |
$55 = HEAP32[74] | 0; //@line 5780 | |
if (($54 | 0) == ($55 | 0)) { | |
break; | |
} | |
if (($54 | 0) == -1 ? 1 : (HEAP32[6896 + ($39 << 2) >> 2] | 0) == ($55 | 0)) { | |
break; | |
} else { | |
$62 = $55; //@line 5793 | |
} | |
} else { | |
$62 = HEAP32[74] | 0; //@line 5797 | |
} | |
$67 = (_fMOD(((HEAP32[752 + ($62 << 2) >> 2] | 0) / 2 | 0) << 1, 8) | 0) + -5 | 0; //@line 5804 | |
$73 = Math_imul(_fMOD((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 4 | 0, 2) | 0, $67) | 0; //@line 5810 | |
$75 = Math_imul($73, HEAP32[3280] | 0) | 0; //@line 5812 | |
$82 = (_fMOD(((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 2 | 0) << 1, 8) | 0) + -5 | 0; //@line 5819 | |
$90 = ((Math_imul(_fMOD((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 4 | 0, 2) | 0, $82) | 0) + 1 | 0) / 2 | 0; //@line 5827 | |
$92 = HEAP32[3282] | 0; //@line 5829 | |
if (($52 | 0) != ((Math_imul($92 + (HEAP32[3280] | 0) | 0, $90) | 0) - $75 | 0)) { | |
$97 = HEAP32[2864] | 0; //@line 5835 | |
do { | |
if (($97 | 0) == ($92 | 0)) { | |
$99 = HEAP32[4840] | 0; //@line 5839 | |
$101 = HEAP32[6488 + ($99 << 2) >> 2] | 0; //@line 5841 | |
$102 = HEAP32[74] | 0; //@line 5842 | |
if (($101 | 0) != ($102 | 0)) { | |
if (!(($101 | 0) == -1 ? 1 : (HEAP32[6896 + ($99 << 2) >> 2] | 0) == ($102 | 0))) { | |
break; | |
} | |
} | |
if (HEAP32[6048 + ($99 << 2) >> 2] | 0) { | |
HEAP32[2864] = $99; //@line 5858 | |
break L218; | |
} | |
} | |
} while (0); | |
do { | |
if (($97 | 0) == (HEAP32[3292] | 0)) { | |
$113 = HEAP32[4820] | 0; //@line 5867 | |
$116 = HEAP32[74] | 0; //@line 5870 | |
if ((HEAP32[6488 + ($113 << 2) >> 2] | 0) != ($116 | 0)) { | |
if ((HEAP32[6896 + ($113 << 2) >> 2] | 0) != ($116 | 0)) { | |
break; | |
} | |
} | |
if (HEAP32[6048 + ($113 << 2) >> 2] | 0) { | |
HEAP32[2864] = $113; //@line 5884 | |
break L218; | |
} | |
} | |
} while (0); | |
if (($97 | 0) == (HEAP32[4518] | 0)) { | |
if ((HEAP32[1834] | 0) == (HEAP32[74] | 0)) { | |
HEAP32[1834] = -1; //@line 5896 | |
HEAP32[3078] = 116; //@line 5897 | |
$$0 = 2011; //@line 5898 | |
return $$0 | 0; //@line 5899 | |
} | |
} | |
if (($97 | 0) != (HEAP32[3444] | 0)) { | |
label = 68; //@line 5905 | |
break L1; | |
} | |
$131 = HEAP32[3562] | 0; //@line 5908 | |
$133 = HEAP32[6488 + ($131 << 2) >> 2] | 0; //@line 5910 | |
$134 = HEAP32[74] | 0; //@line 5911 | |
if (($133 | 0) != ($134 | 0)) { | |
if (!(($133 | 0) == -1 ? 1 : (HEAP32[6896 + ($131 << 2) >> 2] | 0) == ($134 | 0))) { | |
label = 68; //@line 5920 | |
break L1; | |
} | |
} | |
HEAP32[2864] = $131; //@line 5924 | |
} | |
} | |
} | |
} while (0); | |
$22 = HEAP32[3246] | 0; //@line 5930 | |
label = 33; //@line 5931 | |
} else { | |
_fBUG(99); //@line 5933 | |
} | |
} while (0); | |
if ((label | 0) == 14) { | |
$12 = HEAP32[3080] | 0; //@line 5939 | |
label = 15; //@line 5940 | |
} | |
L267: while (1) { | |
switch (label | 0) { | |
case 15: | |
{ | |
label = 0; //@line 5945 | |
switch ($12 | 0) { | |
case 5: | |
{ | |
$$0 = 2009; //@line 5948 | |
label = 360; //@line 5949 | |
break L267; | |
break; | |
} | |
case 20: | |
case 19: | |
{ | |
label = 245; //@line 5954 | |
break L267; | |
break; | |
} | |
case 17: | |
{ | |
label = 242; //@line 5959 | |
break L267; | |
break; | |
} | |
case 12: | |
{ | |
label = 198; //@line 5964 | |
continue L267; | |
break; | |
} | |
case 16: | |
{ | |
label = 237; //@line 5969 | |
break L267; | |
break; | |
} | |
case 14: | |
{ | |
$562 = HEAP32[2864] | 0; //@line 5974 | |
if (($562 | 0) == (HEAP32[4516] | 0)) { | |
$561 = $562; //@line 5978 | |
label = 219; //@line 5979 | |
continue L267; | |
} else { | |
label = 221; //@line 5982 | |
break L267; | |
} | |
break; | |
} | |
case 23: | |
{ | |
label = 269; //@line 5988 | |
continue L267; | |
break; | |
} | |
case 27: | |
{ | |
label = 303; //@line 5993 | |
continue L267; | |
break; | |
} | |
case 22: | |
{ | |
label = 268; //@line 5998 | |
continue L267; | |
break; | |
} | |
case 21: | |
{ | |
label = 267; //@line 6003 | |
break L267; | |
break; | |
} | |
case 34: | |
{ | |
label = 355; //@line 6008 | |
continue L267; | |
break; | |
} | |
case 28: | |
{ | |
label = 312; //@line 6013 | |
break L267; | |
break; | |
} | |
case 32: | |
{ | |
$$pre197 = HEAP32[2872] | 0; //@line 6019 | |
if ((HEAP32[2864] | 0) == ($$pre197 | 0)) { | |
$986 = $$pre197; //@line 6022 | |
label = 341; //@line 6023 | |
continue L267; | |
} else { | |
$$0 = 2011; //@line 6026 | |
label = 360; //@line 6027 | |
break L267; | |
} | |
break; | |
} | |
case 29: | |
{ | |
label = 321; //@line 6033 | |
break L267; | |
break; | |
} | |
case 9: | |
{ | |
label = 173; //@line 6038 | |
break L267; | |
break; | |
} | |
case 15: | |
{ | |
$583 = HEAP32[2864] | 0; //@line 6044 | |
label = 223; //@line 6045 | |
continue L267; | |
break; | |
} | |
case 11: | |
{ | |
label = 21; //@line 6050 | |
break L267; | |
break; | |
} | |
case 18: | |
{ | |
label = 22; //@line 6055 | |
break L267; | |
break; | |
} | |
case 24: | |
{ | |
label = 23; //@line 6060 | |
break L267; | |
break; | |
} | |
case 25: | |
{ | |
label = 24; //@line 6065 | |
break L267; | |
break; | |
} | |
case 33: | |
{ | |
label = 28; //@line 6070 | |
break L267; | |
break; | |
} | |
case 8: | |
{ | |
$373 = HEAP32[2864] | 0; //@line 6077 | |
$375 = HEAP32[4840] | 0; //@line 6077 | |
label = 163; //@line 6078 | |
continue L267; | |
break; | |
} | |
case 13: | |
{ | |
$481 = HEAP32[2864] | 0; //@line 6084 | |
label = 199; //@line 6085 | |
continue L267; | |
break; | |
} | |
case 10: | |
{ | |
label = 20; //@line 6090 | |
break L267; | |
break; | |
} | |
case 30: | |
{ | |
label = 26; //@line 6095 | |
break L267; | |
break; | |
} | |
case 31: | |
{ | |
label = 27; //@line 6100 | |
break L267; | |
break; | |
} | |
case 26: | |
{ | |
label = 25; //@line 6105 | |
break L267; | |
break; | |
} | |
case 7: | |
{ | |
$331 = HEAP32[2864] | 0; //@line 6112 | |
$333 = HEAP32[4840] | 0; //@line 6112 | |
label = 148; //@line 6113 | |
continue L267; | |
break; | |
} | |
case 2: | |
{ | |
label = 77; //@line 6118 | |
break L267; | |
break; | |
} | |
case 6: | |
case 4: | |
{ | |
$252 = $12; //@line 6123 | |
label = 104; //@line 6124 | |
continue L267; | |
break; | |
} | |
case 1: | |
{ | |
label = 76; //@line 6129 | |
continue L267; | |
break; | |
} | |
case 3: | |
{ | |
label = 78; //@line 6134 | |
break L267; | |
break; | |
} | |
default: | |
{ | |
label = 29; //@line 6139 | |
break L267; | |
} | |
} | |
break; | |
} | |
case 33: | |
{ | |
label = 0; //@line 6146 | |
if (($22 | 0) > 0) { | |
$$0 = 2800; //@line 6149 | |
label = 360; //@line 6150 | |
break L267; | |
} | |
$24 = HEAP32[3080] | 0; //@line 6154 | |
break; | |
} | |
case 68: | |
{ | |
label = 0; //@line 6158 | |
$140 = HEAP32[3080] | 0; //@line 6159 | |
if (($140 | 0) == (HEAP32[3432] | 0)) { | |
if ((HEAP32[3246] | 0) < 1) { | |
$24 = $140; //@line 6166 | |
break; | |
} else { | |
label = 71; //@line 6169 | |
break L267; | |
} | |
} else { | |
$145 = HEAP32[3246] | 0; //@line 6175 | |
if (($140 | 0) == (HEAP32[3434] | 0) & ($145 | 0) < 1) { | |
$22 = $145; //@line 6179 | |
label = 33; //@line 6180 | |
continue L267; | |
} else { | |
label = 71; //@line 6183 | |
break L267; | |
} | |
} | |
break; | |
} | |
case 76: | |
{ | |
label = 0; //@line 6190 | |
$$0 = _carry() | 0; //@line 6192 | |
label = 360; //@line 6193 | |
break L267; | |
break; | |
} | |
case 104: | |
{ | |
label = 0; //@line 6198 | |
$217 = HEAP32[2864] | 0; //@line 6199 | |
$218 = HEAP32[4470] | 0; //@line 6200 | |
$221 = ($217 | 0) == (HEAP32[3240] | 0); //@line 6203 | |
if (($217 | 0) == ($218 | 0) | $221) { | |
label = 122; //@line 6206 | |
break L267; | |
} else { | |
label = 105; //@line 6209 | |
break L267; | |
} | |
break; | |
} | |
case 148: | |
{ | |
label = 0; //@line 6215 | |
if (($331 | 0) == ($333 | 0)) { | |
label = 152; //@line 6218 | |
break L267; | |
} else { | |
label = 149; //@line 6221 | |
break L267; | |
} | |
break; | |
} | |
case 163: | |
{ | |
label = 0; //@line 6227 | |
if (($373 | 0) == ($375 | 0)) { | |
label = 167; //@line 6230 | |
break L267; | |
} else { | |
label = 164; //@line 6233 | |
break L267; | |
} | |
break; | |
} | |
case 198: | |
{ | |
label = 0; //@line 6239 | |
$$0 = _attack() | 0; //@line 6241 | |
label = 360; //@line 6242 | |
break L267; | |
break; | |
} | |
case 199: | |
{ | |
label = 0; //@line 6247 | |
$480 = HEAP32[3454] | 0; //@line 6248 | |
if (($481 | 0) == 0 | ($481 | 0) == ($480 | 0)) { | |
$485 = HEAP32[6048 + ($480 << 2) >> 2] | 0; //@line 6254 | |
$486 = $485 >> 31 ^ $485; //@line 6256 | |
$488 = HEAP32[3280] | 0; //@line 6258 | |
$489 = Math_imul(1 - $486 | 0, $488) | 0; //@line 6259 | |
$494 = (Math_imul((HEAP32[3282] | 0) + $488 | 0, ($486 | 0) / 2 | 0) | 0) + $489 | 0; //@line 6264 | |
HEAP32[2864] = $494; //@line 6265 | |
$495 = $494; //@line 6266 | |
} else { | |
$495 = $481; //@line 6268 | |
} | |
if (!$495) { | |
$$0 = 8e3; //@line 6272 | |
label = 360; //@line 6273 | |
break L267; | |
} | |
$497 = 6488 + ($495 << 2) | 0; //@line 6276 | |
if ((HEAP32[$497 >> 2] | 0) != -1) { | |
$$0 = 2011; //@line 6280 | |
label = 360; //@line 6281 | |
break L267; | |
} | |
HEAP32[3078] = 78; //@line 6284 | |
$501 = ($495 | 0) == (HEAP32[3282] | 0); //@line 6286 | |
$503 = ($495 | 0) == (HEAP32[3280] | 0); //@line 6288 | |
if (!($501 | $503)) { | |
$$0 = 2011; //@line 6291 | |
label = 360; //@line 6292 | |
break L267; | |
} | |
$504 = HEAP32[4840] | 0; //@line 6295 | |
$506 = HEAP32[6488 + ($504 << 2) >> 2] | 0; //@line 6297 | |
$507 = HEAP32[74] | 0; //@line 6298 | |
if (($506 | 0) != ($507 | 0)) { | |
if (!(($506 | 0) == -1 ? 1 : (HEAP32[6896 + ($504 << 2) >> 2] | 0) == ($507 | 0))) { | |
label = 207; //@line 6307 | |
break L267; | |
} | |
} | |
if (HEAP32[6048 + ($504 << 2) >> 2] | 0) { | |
label = 207; //@line 6315 | |
break L267; | |
} | |
HEAP32[2864] = $504; //@line 6318 | |
label = 268; //@line 6319 | |
continue L267; | |
break; | |
} | |
case 219: | |
{ | |
label = 0; //@line 6324 | |
_fDSTROY($561); //@line 6325 | |
HEAP32[3078] = 72; //@line 6326 | |
$$0 = 2011; //@line 6327 | |
label = 360; //@line 6328 | |
break L267; | |
break; | |
} | |
case 223: | |
{ | |
label = 0; //@line 6333 | |
if (!$583) { | |
label = 224; //@line 6336 | |
break L267; | |
} else { | |
break L267; | |
} | |
break; | |
} | |
case 268: | |
{ | |
label = 0; //@line 6344 | |
$$0 = _fill() | 0; //@line 6346 | |
label = 360; //@line 6347 | |
break L267; | |
break; | |
} | |
case 269: | |
{ | |
label = 0; //@line 6352 | |
$784 = HEAP32[3562] | 0; //@line 6353 | |
if (!((HEAP32[2870] | 0) != 0 ? (HEAP32[6048 + ($784 << 2) >> 2] | 0) > -1 : 0)) { | |
$$0 = 2011; //@line 6361 | |
label = 360; //@line 6362 | |
break L267; | |
} | |
$790 = HEAP32[74] | 0; //@line 6365 | |
$$37 = ($790 | 0) == 115 ? 134 : 133; //@line 6367 | |
HEAP32[4466] = $$37; //@line 6368 | |
$793 = HEAP32[6488 + ($784 << 2) >> 2] | 0; //@line 6370 | |
if (($793 | 0) == ($790 | 0)) { | |
label = 272; //@line 6373 | |
} else { | |
if (($793 | 0) == -1 ? 1 : (HEAP32[6896 + ($784 << 2) >> 2] | 0) == ($790 | 0)) { | |
label = 272; //@line 6381 | |
} else { | |
$799 = $$37; //@line 6383 | |
} | |
} | |
if ((label | 0) == 272) { | |
label = 0; //@line 6387 | |
HEAP32[4466] = 135; //@line 6388 | |
$799 = 135; //@line 6389 | |
} | |
_fRSPEAK($799); //@line 6391 | |
_score(0); //@line 6392 | |
label = 274; //@line 6393 | |
continue L267; | |
break; | |
} | |
case 274: | |
{ | |
label = 0; //@line 6398 | |
_score(-1); //@line 6399 | |
_fSETPRM(1, HEAP32[4828] | 0, HEAP32[4714] | 0); //@line 6402 | |
$802 = HEAP32[3252] | 0; //@line 6403 | |
_fSETPRM(3, $802, $802); //@line 6404 | |
_fRSPEAK(259); //@line 6405 | |
$$0 = 2012; //@line 6406 | |
label = 360; //@line 6407 | |
break L267; | |
break; | |
} | |
case 303: | |
{ | |
label = 0; //@line 6412 | |
if (_fTSTBIT(HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0, 0) | 0) { | |
label = 307; //@line 6419 | |
break L267; | |
} | |
$874 = HEAP32[1828] | 0; //@line 6422 | |
if (!(HEAP32[6048 + ($874 << 2) >> 2] | 0)) { | |
label = 68; //@line 6427 | |
continue L267; | |
} | |
$879 = HEAP32[6488 + ($874 << 2) >> 2] | 0; //@line 6431 | |
$880 = HEAP32[74] | 0; //@line 6432 | |
if (($879 | 0) == ($880 | 0)) { | |
label = 307; //@line 6435 | |
break L267; | |
} | |
if (($879 | 0) == -1 ? 1 : (HEAP32[6896 + ($874 << 2) >> 2] | 0) == ($880 | 0)) { | |
label = 307; //@line 6444 | |
break L267; | |
} else { | |
label = 68; //@line 6447 | |
continue L267; | |
} | |
break; | |
} | |
case 341: | |
{ | |
label = 0; //@line 6453 | |
HEAP32[3078] = 223; //@line 6454 | |
if ((HEAP32[6048 + ($986 << 2) >> 2] | 0) == 2) { | |
label = 342; //@line 6459 | |
break L267; | |
} else { | |
$$0 = 2011; //@line 6462 | |
label = 360; //@line 6463 | |
break L267; | |
} | |
break; | |
} | |
case 355: | |
{ | |
label = 0; //@line 6469 | |
$1041 = HEAP32[4822] | 0; //@line 6470 | |
$1044 = HEAP32[74] | 0; //@line 6473 | |
if ((HEAP32[6488 + ($1041 << 2) >> 2] | 0) == ($1044 | 0)) { | |
label = 357; //@line 6476 | |
break L267; | |
} else { | |
label = 356; //@line 6479 | |
break L267; | |
} | |
break; | |
} | |
} | |
if (!$24) { | |
label = 36; //@line 6487 | |
break; | |
} else { | |
$12 = $24; //@line 6490 | |
label = 15; //@line 6491 | |
} | |
} | |
switch (label | 0) { | |
case 20: | |
{ | |
$$0 = 2011; //@line 6496 | |
return $$0 | 0; //@line 6497 | |
} | |
case 21: | |
{ | |
$$0 = 2011; //@line 6501 | |
return $$0 | 0; //@line 6502 | |
} | |
case 22: | |
{ | |
$$0 = 2011; //@line 6506 | |
return $$0 | 0; //@line 6507 | |
} | |
case 23: | |
{ | |
$$0 = 2011; //@line 6511 | |
return $$0 | 0; //@line 6512 | |
} | |
case 24: | |
{ | |
$$0 = 2011; //@line 6516 | |
return $$0 | 0; //@line 6517 | |
} | |
case 25: | |
{ | |
$$0 = 2011; //@line 6521 | |
return $$0 | 0; //@line 6522 | |
} | |
case 26: | |
{ | |
$$0 = 2011; //@line 6526 | |
return $$0 | 0; //@line 6527 | |
} | |
case 27: | |
{ | |
$$0 = 2011; //@line 6531 | |
return $$0 | 0; //@line 6532 | |
} | |
case 28: | |
{ | |
$$0 = 2011; //@line 6536 | |
return $$0 | 0; //@line 6537 | |
} | |
case 29: | |
{ | |
_fBUG(24); //@line 6541 | |
break; | |
} | |
case 36: | |
{ | |
_fSETPRM(1, HEAP32[3242] | 0, HEAP32[3244] | 0); //@line 6548 | |
_fRSPEAK(255); //@line 6549 | |
$$0 = 2600; //@line 6550 | |
return $$0 | 0; //@line 6551 | |
} | |
case 71: | |
{ | |
_fSETPRM(1, HEAP32[3242] | 0, HEAP32[3244] | 0); //@line 6557 | |
_fRSPEAK(256); //@line 6558 | |
$$0 = 2012; //@line 6559 | |
return $$0 | 0; //@line 6560 | |
} | |
case 77: | |
{ | |
$$0 = _discard(0) | 0; //@line 6565 | |
return $$0 | 0; //@line 6566 | |
} | |
case 78: | |
{ | |
_fSETPRM(1, HEAP32[3246] | 0, HEAP32[3248] | 0); //@line 6572 | |
$165 = HEAP32[3246] | 0; //@line 6573 | |
if (($165 | 0) < 1) { | |
_fSETPRM(1, HEAP32[3242] | 0, HEAP32[3244] | 0); //@line 6578 | |
$$pr163 = HEAP32[3246] | 0; //@line 6579 | |
if (($$pr163 | 0) > 0) { | |
$170 = $$pr163; //@line 6582 | |
label = 81; //@line 6583 | |
} else { | |
$171 = HEAP32[3242] | 0; //@line 6586 | |
} | |
} else { | |
$170 = $165; //@line 6589 | |
label = 81; //@line 6590 | |
} | |
if ((label | 0) == 81) { | |
HEAP32[3242] = $170; //@line 6593 | |
$171 = $170; //@line 6594 | |
} | |
$172 = _fVOCAB($171, -1) | 0; //@line 6596 | |
HEAP32[66] = $172; //@line 6597 | |
switch ($172 | 0) { | |
case 62: | |
case 65: | |
case 71: | |
case 2025: | |
case 2034: | |
{ | |
HEAP32[3246] = 0; //@line 6600 | |
HEAP32[2864] = 0; //@line 6601 | |
$$0 = 2630; //@line 6602 | |
return $$0 | 0; //@line 6603 | |
} | |
default: | |
{ | |
_fRSPEAK(258); //@line 6607 | |
$$0 = 2012; //@line 6608 | |
return $$0 | 0; //@line 6609 | |
} | |
} | |
break; | |
} | |
case 105: | |
{ | |
if (($217 | 0) == (HEAP32[3294] | 0)) { | |
HEAP32[3078] = 111; //@line 6618 | |
HEAP32[3078] = (HEAP32[6048 + ($217 << 2) >> 2] | 0) == 1 ? 54 : 111; //@line 6623 | |
} | |
if (($217 | 0) == (HEAP32[3296] | 0)) { | |
HEAP32[3078] = 32; //@line 6628 | |
} | |
$229 = HEAP32[3442] | 0; //@line 6630 | |
if (($217 | 0) == ($229 | 0)) { | |
HEAP32[3078] = 55; //@line 6633 | |
} | |
$231 = HEAP32[3440] | 0; //@line 6635 | |
$234 = ($217 | 0) == (HEAP32[2874] | 0); //@line 6638 | |
if (($217 | 0) == ($231 | 0) | $234) { | |
HEAP32[3078] = 31; //@line 6641 | |
} else { | |
if ((HEAP32[3078] | 0) != 31) { | |
$$0 = 2011; //@line 6646 | |
return $$0 | 0; //@line 6647 | |
} | |
} | |
$237 = HEAP32[6488 + ($229 << 2) >> 2] | 0; //@line 6651 | |
$238 = HEAP32[74] | 0; //@line 6652 | |
if (($237 | 0) != ($238 | 0)) { | |
if (!(($237 | 0) == -1 ? 1 : (HEAP32[6896 + ($229 << 2) >> 2] | 0) == ($238 | 0))) { | |
$$0 = 2011; //@line 6661 | |
return $$0 | 0; //@line 6662 | |
} | |
} | |
if (!$234) { | |
if (!(HEAP32[182] | 0)) { | |
$248 = 6048 + ($231 << 2) | 0; //@line 6669 | |
$250 = (HEAP32[$248 >> 2] | 0) + 34 | 0; //@line 6671 | |
HEAP32[1614] = $250; //@line 6672 | |
HEAP32[$248 >> 2] = 1; //@line 6673 | |
$253 = ($252 | 0) == (HEAP32[4524] | 0); //@line 6675 | |
HEAP32[$248 >> 2] = $253 & 1 ^ 1; //@line 6678 | |
HEAP32[1614] = ($253 ? 0 : 2) + $250; //@line 6681 | |
$$0 = 2010; //@line 6682 | |
return $$0 | 0; //@line 6683 | |
} | |
HEAP32[1614] = 130; //@line 6685 | |
if (!(HEAP32[184] | 0)) { | |
HEAP32[186] = 15; //@line 6689 | |
} | |
HEAP32[184] = 1; //@line 6691 | |
$$0 = 2010; //@line 6692 | |
return $$0 | 0; //@line 6693 | |
} | |
if (($252 | 0) == (HEAP32[4524] | 0)) { | |
$288 = 6048 + ($217 << 2) | 0; //@line 6698 | |
$$$21 = ($238 | 0) != (HEAP32[320 + ($217 << 2) >> 2] | 0) ? 173 : (HEAP32[$288 >> 2] | 0) != 0 ? 34 : 172; //@line 6705 | |
HEAP32[3078] = $$$21; //@line 6706 | |
if (($$$21 | 0) != 172) { | |
$$0 = 2011; //@line 6709 | |
return $$0 | 0; //@line 6710 | |
} | |
HEAP32[$288 >> 2] = 2; //@line 6712 | |
if ((HEAP32[6488 + ($217 << 2) >> 2] | 0) == -1) { | |
_fDROP($217, $238); //@line 6717 | |
$299 = HEAP32[2874] | 0; //@line 6719 | |
} else { | |
$299 = $217; //@line 6721 | |
} | |
HEAP32[6896 + ($299 << 2) >> 2] = -1; //@line 6724 | |
$$0 = 2011; //@line 6725 | |
return $$0 | 0; //@line 6726 | |
} else { | |
$274 = HEAP32[2676] | 0; //@line 6728 | |
$275 = 6048 + ($274 << 2) | 0; //@line 6729 | |
$278 = 6048 + ($217 << 2) | 0; //@line 6733 | |
$$$20 = (HEAP32[$278 >> 2] | 0) == 0 ? 37 : (HEAP32[$275 >> 2] | 0) == 0 ? 41 : 171; //@line 6736 | |
HEAP32[3078] = $$$20; //@line 6737 | |
if (($$$20 | 0) != 171) { | |
$$0 = 2011; //@line 6740 | |
return $$0 | 0; //@line 6741 | |
} | |
HEAP32[$278 >> 2] = 0; //@line 6743 | |
HEAP32[6896 + ($217 << 2) >> 2] = 0; //@line 6745 | |
if ((HEAP32[$275 >> 2] | 0) == 3) { | |
$286 = 3; //@line 6749 | |
} else { | |
HEAP32[$275 >> 2] = 2; //@line 6751 | |
$286 = 2; //@line 6752 | |
} | |
HEAP32[6896 + ($274 << 2) >> 2] = 2 - $286; //@line 6756 | |
$$0 = 2011; //@line 6757 | |
return $$0 | 0; //@line 6758 | |
} | |
break; | |
} | |
case 122: | |
{ | |
$$ = $221 & 1; //@line 6763 | |
HEAP32[1614] = $$; //@line 6764 | |
$256 = $$ | 124; //@line 6765 | |
HEAP32[3078] = $256; //@line 6766 | |
if ((HEAP32[6488 + ($217 << 2) >> 2] | 0) == -1) { | |
$260 = $$ | 120; //@line 6771 | |
HEAP32[3078] = $260; //@line 6772 | |
$$pr173214 = $260; //@line 6773 | |
} else { | |
$$pr173214 = $256; //@line 6775 | |
} | |
if ((HEAP32[6488 + (HEAP32[4836] << 2) >> 2] | 0) == -1) { | |
$$pr173 = $$pr173214; //@line 6782 | |
} else { | |
$265 = $$ | 122; //@line 6784 | |
HEAP32[3078] = $265; //@line 6785 | |
$$pr173 = $265; //@line 6786 | |
} | |
if (($252 | 0) == (HEAP32[4524] | 0)) { | |
HEAP32[3078] = 61; //@line 6791 | |
$$0 = 2011; //@line 6792 | |
return $$0 | 0; //@line 6793 | |
} | |
if (($$pr173 | 0) != 124) { | |
$$0 = 2011; //@line 6797 | |
return $$0 | 0; //@line 6798 | |
} | |
_fDSTROY($218); //@line 6800 | |
_fDROP(HEAP32[3240] | 0, HEAP32[74] | 0); //@line 6803 | |
_fDROP(HEAP32[4818] | 0, 105); //@line 6805 | |
$$0 = 2011; //@line 6806 | |
return $$0 | 0; //@line 6807 | |
} | |
case 149: | |
{ | |
if (($331 | 0) != (HEAP32[1828] | 0)) { | |
$$0 = 2011; //@line 6814 | |
return $$0 | 0; //@line 6815 | |
} | |
HEAP32[3078] = 184; //@line 6817 | |
if ((HEAP32[76] | 0) < 0) { | |
$$0 = 2011; //@line 6821 | |
return $$0 | 0; //@line 6822 | |
} | |
HEAP32[6048 + ($331 << 2) >> 2] = 1; //@line 6825 | |
_fRSPEAK(39); //@line 6826 | |
$$0 = (HEAP32[28] | 0) == 0 ? 2012 : 2e3; //@line 6830 | |
return $$0 | 0; //@line 6831 | |
} | |
case 152: | |
{ | |
HEAP32[3078] = 38; //@line 6835 | |
$341 = 6048 + ($333 << 2) | 0; //@line 6836 | |
if (!(HEAP32[$341 >> 2] | 0)) { | |
$$0 = 2011; //@line 6840 | |
return $$0 | 0; //@line 6841 | |
} | |
HEAP32[3078] = 209; //@line 6843 | |
HEAP32[$341 >> 2] = 2; //@line 6844 | |
$$0 = 2011; //@line 6845 | |
return $$0 | 0; //@line 6846 | |
} | |
case 164: | |
{ | |
if (($373 | 0) != (HEAP32[1828] | 0)) { | |
if (!(($373 | 0) == (HEAP32[4510] | 0) | ($373 | 0) == (HEAP32[4846] | 0))) { | |
$$0 = 2011; //@line 6859 | |
return $$0 | 0; //@line 6860 | |
} | |
HEAP32[3078] = 146; //@line 6862 | |
$$0 = 2011; //@line 6863 | |
return $$0 | 0; //@line 6864 | |
} | |
HEAP32[6048 + ($373 << 2) >> 2] = 0; //@line 6867 | |
_fRSPEAK(40); //@line 6868 | |
if (_fTSTBIT(HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0, 0) | 0) { | |
$$0 = 2012; //@line 6875 | |
return $$0 | 0; //@line 6876 | |
} | |
$391 = HEAP32[1828] | 0; //@line 6878 | |
if (HEAP32[6048 + ($391 << 2) >> 2] | 0) { | |
$396 = HEAP32[6488 + ($391 << 2) >> 2] | 0; //@line 6884 | |
$397 = HEAP32[74] | 0; //@line 6885 | |
if (($396 | 0) == ($397 | 0)) { | |
$$0 = 2012; //@line 6888 | |
return $$0 | 0; //@line 6889 | |
} | |
if (($396 | 0) == -1 ? 1 : (HEAP32[6896 + ($391 << 2) >> 2] | 0) == ($397 | 0)) { | |
$$0 = 2012; //@line 6897 | |
return $$0 | 0; //@line 6898 | |
} | |
} | |
_fRSPEAK(16); //@line 6901 | |
$$0 = 2012; //@line 6902 | |
return $$0 | 0; //@line 6903 | |
} | |
case 167: | |
{ | |
$382 = 6048 + ($375 << 2) | 0; //@line 6907 | |
HEAP32[$382 >> 2] = (HEAP32[$382 >> 2] | 0) / 2 | 0; //@line 6910 | |
HEAP32[3078] = 210; //@line 6911 | |
$$0 = 2011; //@line 6912 | |
return $$0 | 0; //@line 6913 | |
} | |
case 173: | |
{ | |
$403 = HEAP32[2864] | 0; //@line 6917 | |
$406 = (HEAP32[6488 + ($403 << 2) >> 2] | 0) == -1; //@line 6920 | |
$$pre204 = HEAP32[3444] | 0; //@line 6921 | |
do { | |
if ($406) { | |
$412 = $$pre204; //@line 6924 | |
} else { | |
if (($403 | 0) == ($$pre204 | 0)) { | |
if ((HEAP32[6488 + (HEAP32[3562] << 2) >> 2] | 0) == -1) { | |
$412 = $403; //@line 6933 | |
break; | |
} | |
} | |
HEAP32[3078] = 29; //@line 6937 | |
$412 = $$pre204; //@line 6938 | |
} | |
} while (0); | |
if (($403 | 0) != ($412 | 0) | $406 ^ 1) { | |
$$0 = 2011; //@line 6945 | |
return $$0 | 0; //@line 6946 | |
} | |
$413 = HEAP32[3298] | 0; //@line 6948 | |
$415 = HEAP32[6488 + ($413 << 2) >> 2] | 0; //@line 6950 | |
$416 = HEAP32[74] | 0; //@line 6951 | |
if (($415 | 0) == ($416 | 0)) { | |
label = 184; //@line 6954 | |
} else { | |
if (!(($415 | 0) == -1 ? 1 : (HEAP32[6896 + ($413 << 2) >> 2] | 0) == ($416 | 0))) { | |
if (HEAP32[182] | 0) { | |
$$0 = 2011; //@line 6965 | |
return $$0 | 0; //@line 6966 | |
} | |
$424 = HEAP32[3452] | 0; //@line 6968 | |
if ((HEAP32[6488 + ($424 << 2) >> 2] | 0) != ($416 | 0)) { | |
if ((HEAP32[6896 + ($424 << 2) >> 2] | 0) != ($416 | 0)) { | |
$$0 = 2011; //@line 6977 | |
return $$0 | 0; //@line 6978 | |
} | |
} | |
} | |
if (($415 | 0) == -1 ? 1 : (HEAP32[6896 + ($413 << 2) >> 2] | 0) == ($416 | 0)) { | |
label = 184; //@line 6988 | |
} else { | |
$439 = HEAP32[3078] | 0; //@line 6991 | |
} | |
} | |
if ((label | 0) == 184) { | |
$438 = (_fMOD(HEAP32[6048 + ($413 << 2) >> 2] | 0, 2) | 0) + 206 | 0; //@line 6998 | |
HEAP32[3078] = $438; //@line 6999 | |
$439 = $438; //@line 7000 | |
} | |
if (($439 | 0) == 206) { | |
$441 = HEAP32[74] | 0; //@line 7004 | |
if (($441 | 0) == (HEAP32[6488 + (HEAP32[2866] << 2) >> 2] | 0)) { | |
$446 = HEAP32[3450] | 0; //@line 7010 | |
if ((HEAP32[6048 + ($446 << 2) >> 2] | 0) < 0) { | |
_fDROP($446, $441); //@line 7015 | |
HEAP32[6048 + (HEAP32[3450] << 2) >> 2] = 0; //@line 7018 | |
HEAP32[1826] = (HEAP32[1826] | 0) + -1; //@line 7021 | |
HEAP32[3078] = 208; //@line 7022 | |
$$0 = 2011; //@line 7023 | |
return $$0 | 0; //@line 7024 | |
} | |
} | |
} | |
if (HEAP32[2870] | 0) { | |
$$0 = 18999; //@line 7031 | |
return $$0 | 0; //@line 7032 | |
} | |
if (HEAP32[182] | 0) { | |
$$0 = 2011; //@line 7037 | |
return $$0 | 0; //@line 7038 | |
} | |
$454 = HEAP32[3452] | 0; //@line 7040 | |
$457 = HEAP32[74] | 0; //@line 7043 | |
if ((HEAP32[6488 + ($454 << 2) >> 2] | 0) != ($457 | 0)) { | |
if ((HEAP32[6896 + ($454 << 2) >> 2] | 0) != ($457 | 0)) { | |
$$0 = 2011; //@line 7050 | |
return $$0 | 0; //@line 7051 | |
} | |
} | |
$462 = HEAP32[3298] | 0; //@line 7054 | |
$464 = HEAP32[6488 + ($462 << 2) >> 2] | 0; //@line 7056 | |
if (($464 | 0) == ($457 | 0)) { | |
label = 195; //@line 7059 | |
} else { | |
if (($464 | 0) == -1 ? 1 : (HEAP32[6896 + ($462 << 2) >> 2] | 0) == ($457 | 0)) { | |
label = 195; //@line 7067 | |
} else { | |
$471 = $454; //@line 7069 | |
} | |
} | |
if ((label | 0) == 195) { | |
_fRSPEAK($439); //@line 7073 | |
$471 = HEAP32[3452] | 0; //@line 7075 | |
} | |
$470 = 6048 + ($471 << 2) | 0; //@line 7077 | |
$473 = 1 - (HEAP32[$470 >> 2] | 0) | 0; //@line 7079 | |
HEAP32[$470 >> 2] = $473; //@line 7080 | |
_fPSPEAK($471, 2 - $473 | 0); //@line 7082 | |
$$0 = 2012; //@line 7083 | |
return $$0 | 0; //@line 7084 | |
} | |
case 207: | |
{ | |
HEAP32[6048 + ($480 << 2) >> 2] = 1; //@line 7089 | |
HEAP32[$497 >> 2] = 0; //@line 7090 | |
HEAP32[3078] = 77; //@line 7091 | |
$517 = HEAP32[3292] | 0; //@line 7092 | |
if ((HEAP32[6488 + ($517 << 2) >> 2] | 0) != ($507 | 0)) { | |
if ((HEAP32[6896 + ($517 << 2) >> 2] | 0) != ($507 | 0)) { | |
$524 = HEAP32[3294] | 0; //@line 7101 | |
if ((HEAP32[6488 + ($524 << 2) >> 2] | 0) != ($507 | 0)) { | |
if ((HEAP32[6896 + ($524 << 2) >> 2] | 0) != ($507 | 0)) { | |
$$0 = 2011; //@line 7110 | |
return $$0 | 0; //@line 7111 | |
} | |
} | |
} | |
} | |
$531 = HEAP32[3294] | 0; //@line 7116 | |
if ((HEAP32[6488 + ($531 << 2) >> 2] | 0) != ($507 | 0)) { | |
if ((HEAP32[6896 + ($531 << 2) >> 2] | 0) != ($507 | 0)) { | |
HEAP32[3078] = 112; //@line 7125 | |
if (!$503) { | |
$$0 = 2011; //@line 7127 | |
return $$0 | 0; //@line 7128 | |
} | |
_fPSPEAK($517, (HEAP32[6048 + ($517 << 2) >> 2] | 0) + 3 | 0); //@line 7133 | |
$545 = _fMOD((HEAP32[6048 + (HEAP32[3292] << 2) >> 2] | 0) + 1 | 0, 3) | 0; //@line 7138 | |
HEAP32[6048 + (HEAP32[3292] << 2) >> 2] = $545; //@line 7141 | |
HEAP32[6048 + (HEAP32[4820] << 2) >> 2] = $545; //@line 7144 | |
HEAP32[1614] = HEAP32[3306]; //@line 7146 | |
$$0 = 8; //@line 7147 | |
return $$0 | 0; //@line 7148 | |
} | |
} | |
HEAP32[6048 + ($531 << 2) >> 2] = $501 & 1; //@line 7154 | |
HEAP32[3078] = $501 ? 114 : 113; //@line 7155 | |
$$0 = 2011; //@line 7156 | |
return $$0 | 0; //@line 7157 | |
} | |
case 221: | |
{ | |
if (!(($562 | 0) == (HEAP32[3298] | 0) | ($562 | 0) == (HEAP32[3446] | 0) | ($562 | 0) == (HEAP32[4470] | 0) | ($562 | 0) == (HEAP32[3240] | 0) | ($562 | 0) == (HEAP32[3558] | 0) | ($562 | 0) == (HEAP32[4510] | 0) | ($562 | 0) == (HEAP32[3320] | 0) | ($562 | 0) == (HEAP32[2676] | 0) | ($562 | 0) == (HEAP32[3448] | 0))) { | |
$$0 = 2011; //@line 7188 | |
return $$0 | 0; //@line 7189 | |
} | |
HEAP32[3078] = 71; //@line 7191 | |
$$0 = 2011; //@line 7192 | |
return $$0 | 0; //@line 7193 | |
} | |
case 224: | |
{ | |
$591 = (_fMOD(((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 2 | 0) << 1, 8) | 0) + -5 | 0; //@line 7203 | |
$599 = Math_imul(Math_imul(_fMOD((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 4 | 0, 2) | 0, $591) | 0, HEAP32[3280] | 0) | 0; //@line 7211 | |
$606 = (_fMOD(((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 2 | 0) << 1, 8) | 0) + -5 | 0; //@line 7218 | |
$614 = ((Math_imul(_fMOD((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 4 | 0, 2) | 0, $606) | 0) + 1 | 0) / 2 | 0; //@line 7226 | |
$615 = HEAP32[3280] | 0; //@line 7227 | |
$617 = (HEAP32[3282] | 0) + $615 | 0; //@line 7229 | |
if (((Math_imul($617, $614) | 0) - $599 | 0) != ($615 | 0)) { | |
$621 = HEAP32[3454] | 0; //@line 7234 | |
$623 = HEAP32[6048 + ($621 << 2) >> 2] | 0; //@line 7236 | |
$624 = $623 >> 31 ^ $623; //@line 7238 | |
if (((Math_imul(1 - $624 | 0, $615) | 0) + (Math_imul(($624 | 0) / 2 | 0, $617) | 0) | 0) != ($615 | 0)) { | |
$$0 = 8e3; //@line 7246 | |
return $$0 | 0; //@line 7247 | |
} | |
$632 = HEAP32[6488 + ($621 << 2) >> 2] | 0; //@line 7250 | |
$633 = HEAP32[74] | 0; //@line 7251 | |
if (($632 | 0) != ($633 | 0)) { | |
if (!(($632 | 0) == -1 ? 1 : (HEAP32[6896 + ($621 << 2) >> 2] | 0) == ($633 | 0))) { | |
$$0 = 8e3; //@line 7260 | |
return $$0 | 0; //@line 7261 | |
} | |
} | |
} | |
break; | |
} | |
case 237: | |
{ | |
$673 = HEAP32[2864] | 0; //@line 7268 | |
if (($673 | 0) != (HEAP32[1828] | 0)) { | |
HEAP32[3078] = 76; //@line 7272 | |
} | |
if (($673 | 0) != (HEAP32[4840] | 0)) { | |
$$0 = 2011; //@line 7277 | |
return $$0 | 0; //@line 7278 | |
} | |
if ((HEAP32[6048 + ($673 << 2) >> 2] | 0) != 2) { | |
$$0 = 2011; //@line 7284 | |
return $$0 | 0; //@line 7285 | |
} | |
_fDSTROY($673); //@line 7287 | |
_fDROP(HEAP32[4462] | 0, HEAP32[74] | 0); //@line 7290 | |
HEAP32[6048 + (HEAP32[4462] << 2) >> 2] = 1; //@line 7293 | |
HEAP32[1826] = (HEAP32[1826] | 0) + -1; //@line 7296 | |
_fDROP(HEAP32[4468] | 0, HEAP32[74] | 0); //@line 7299 | |
HEAP32[3078] = 216; //@line 7300 | |
$$0 = 2011; //@line 7301 | |
return $$0 | 0; //@line 7302 | |
} | |
case 242: | |
{ | |
$$0 = _throw() | 0; //@line 7307 | |
return $$0 | 0; //@line 7308 | |
} | |
case 245: | |
{ | |
$692 = HEAP32[2864] | 0; //@line 7312 | |
$695 = HEAP32[74] | 0; //@line 7315 | |
do { | |
if ((HEAP32[6488 + ($692 << 2) >> 2] | 0) == ($695 | 0)) { | |
label = 253; //@line 7319 | |
} else { | |
if ((HEAP32[6896 + ($692 << 2) >> 2] | 0) == ($695 | 0)) { | |
label = 253; //@line 7325 | |
} else { | |
$700 = HEAP32[3454] | 0; //@line 7327 | |
$702 = HEAP32[6048 + ($700 << 2) >> 2] | 0; //@line 7329 | |
$703 = $702 >> 31 ^ $702; //@line 7331 | |
$705 = HEAP32[3280] | 0; //@line 7333 | |
$706 = Math_imul(1 - $703 | 0, $705) | 0; //@line 7334 | |
if (((Math_imul((HEAP32[3282] | 0) + $705 | 0, ($703 | 0) / 2 | 0) | 0) + $706 | 0) == ($692 | 0)) { | |
if ((HEAP32[6488 + ($700 << 2) >> 2] | 0) == ($695 | 0)) { | |
label = 253; //@line 7346 | |
break; | |
} | |
if ((HEAP32[6896 + ($700 << 2) >> 2] | 0) == ($695 | 0)) { | |
label = 253; //@line 7353 | |
break; | |
} | |
} | |
$719 = HEAP32[1614] | 0; //@line 7357 | |
$725 = (_fMOD(((HEAP32[752 + ($695 << 2) >> 2] | 0) / 2 | 0) << 1, 8) | 0) + -5 | 0; //@line 7363 | |
$731 = Math_imul(_fMOD((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 4 | 0, 2) | 0, $725) | 0; //@line 7369 | |
$733 = Math_imul($731, HEAP32[3280] | 0) | 0; //@line 7371 | |
$740 = (_fMOD(((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 2 | 0) << 1, 8) | 0) + -5 | 0; //@line 7378 | |
$748 = ((Math_imul(_fMOD((HEAP32[752 + (HEAP32[74] << 2) >> 2] | 0) / 4 | 0, 2) | 0, $740) | 0) + 1 | 0) / 2 | 0; //@line 7386 | |
if (($719 | 0) == ((Math_imul((HEAP32[3282] | 0) + (HEAP32[3280] | 0) | 0, $748) | 0) - $733 | 0)) { | |
label = 253; //@line 7394 | |
} else { | |
if ((HEAP32[2864] | 0) == (HEAP32[3558] | 0)) { | |
if ((_fATDWRF(HEAP32[74] | 0) | 0) > 0) { | |
label = 253; //@line 7404 | |
} | |
} | |
} | |
} | |
} | |
} while (0); | |
if ((label | 0) == 253) { | |
HEAP32[3078] = 94; //@line 7412 | |
} | |
if (HEAP32[2870] | 0) { | |
HEAP32[3078] = 138; //@line 7417 | |
} | |
if ((HEAP32[6488 + (HEAP32[2864] << 2) >> 2] | 0) != -1) { | |
$$0 = 2011; //@line 7424 | |
return $$0 | 0; //@line 7425 | |
} | |
HEAP32[3078] = 24; //@line 7427 | |
$$0 = 2011; //@line 7428 | |
return $$0 | 0; //@line 7429 | |
} | |
case 267: | |
{ | |
$$0 = _feed() | 0; //@line 7434 | |
return $$0 | 0; //@line 7435 | |
} | |
case 307: | |
{ | |
$886 = HEAP32[2864] | 0; //@line 7439 | |
$888 = HEAP32[13824 + ($886 << 2) >> 2] | 0; //@line 7441 | |
if (!$888) { | |
$$0 = 2011; //@line 7444 | |
return $$0 | 0; //@line 7445 | |
} | |
$891 = HEAP32[6048 + ($886 << 2) >> 2] | 0; //@line 7448 | |
if (($891 | 0) < 0) { | |
$$0 = 2011; //@line 7451 | |
return $$0 | 0; //@line 7452 | |
} | |
if (($886 | 0) != (HEAP32[3240] | 0) | (HEAP32[4472] | 0) != 0) { | |
_fPSPEAK($886, $891 + $888 | 0); //@line 7461 | |
$$0 = 2012; //@line 7462 | |
return $$0 | 0; //@line 7463 | |
} else { | |
HEAP32[4472] = _fYES(192, 193, 54) | 0; //@line 7466 | |
$$0 = 2012; //@line 7467 | |
return $$0 | 0; //@line 7468 | |
} | |
break; | |
} | |
case 312: | |
{ | |
$899 = HEAP32[2864] | 0; //@line 7473 | |
$901 = ($899 | 0) == (HEAP32[3566] | 0); //@line 7475 | |
if ($901) { | |
HEAP32[3078] = 148; //@line 7477 | |
} | |
if (($899 | 0) == (HEAP32[4842] | 0)) { | |
if (!(HEAP32[6048 + ($899 << 2) >> 2] | 0)) { | |
HEAP32[3078] = 198; //@line 7486 | |
if ((HEAP32[6488 + ($899 << 2) >> 2] | 0) == -1) { | |
_fDROP($899, HEAP32[74] | 0); //@line 7492 | |
$914 = HEAP32[4842] | 0; //@line 7494 | |
} else { | |
$914 = $899; //@line 7496 | |
} | |
HEAP32[6048 + ($914 << 2) >> 2] = 2; //@line 7499 | |
HEAP32[6896 + ($914 << 2) >> 2] = -1; //@line 7501 | |
$$0 = 2011; //@line 7502 | |
return $$0 | 0; //@line 7503 | |
} | |
} | |
if (!($901 & (HEAP32[2870] | 0) != 0)) { | |
$$0 = 2011; //@line 7510 | |
return $$0 | 0; //@line 7511 | |
} | |
HEAP32[3078] = 197; //@line 7513 | |
$$0 = 18999; //@line 7514 | |
return $$0 | 0; //@line 7515 | |
} | |
case 321: | |
{ | |
if (!((HEAP32[2870] | 0) != 0 ? (HEAP32[2864] | 0) == (HEAP32[3558] | 0) : 0)) { | |
$$0 = 2011; //@line 7526 | |
return $$0 | 0; //@line 7527 | |
} | |
HEAP32[3078] = 199; //@line 7529 | |
$$0 = 18999; //@line 7530 | |
return $$0 | 0; //@line 7531 | |
} | |
case 342: | |
{ | |
HEAP32[1836] = HEAP32[3314]; //@line 7536 | |
$990 = HEAP32[74] | 0; //@line 7537 | |
HEAP32[3314] = $990; //@line 7538 | |
HEAP32[72] = (HEAP32[6896 + ($986 << 2) >> 2] | 0) + (HEAP32[6488 + ($986 << 2) >> 2] | 0) - $990; //@line 7545 | |
$1001 = (HEAP32[6048 + (HEAP32[78] << 2) >> 2] >> 31) + 227 | 0; //@line 7550 | |
HEAP32[3078] = $1001; //@line 7551 | |
_fRSPEAK($1001); //@line 7552 | |
$$0 = 2; //@line 7553 | |
return $$0 | 0; //@line 7554 | |
} | |
case 356: | |
{ | |
$1047 = HEAP32[6896 + ($1041 << 2) >> 2] | 0; //@line 7559 | |
if (($1047 | 0) == ($1044 | 0) | ($1044 | 0) == ($1047 + -1 | 0)) { | |
label = 357; //@line 7565 | |
} else { | |
$$0 = 2011; //@line 7567 | |
return $$0 | 0; //@line 7568 | |
} | |
break; | |
} | |
case 360: | |
{ | |
return $$0 | 0; //@line 7573 | |
} | |
} | |
if ((label | 0) == 357) { | |
_fPSPEAK($1041, (HEAP32[6048 + ($1041 << 2) >> 2] | 0) + 1 | 0); //@line 7581 | |
$1054 = HEAP32[4822] | 0; //@line 7582 | |
$1055 = 6048 + ($1054 << 2) | 0; //@line 7583 | |
HEAP32[$1055 >> 2] = 1 - (HEAP32[$1055 >> 2] | 0); //@line 7586 | |
$1060 = HEAP32[74] | 0; //@line 7589 | |
if ((HEAP32[6488 + ($1054 << 2) >> 2] | 0) == ($1060 | 0)) { | |
$$0 = 2012; //@line 7592 | |
return $$0 | 0; //@line 7593 | |
} | |
if ((HEAP32[6896 + ($1054 << 2) >> 2] | 0) == ($1060 | 0)) { | |
$$0 = 2012; //@line 7599 | |
return $$0 | 0; //@line 7600 | |
} | |
HEAP32[1836] = $1060; //@line 7602 | |
HEAP32[72] = 0; //@line 7603 | |
_fRSPEAK(241); //@line 7604 | |
$$0 = 2; //@line 7605 | |
return $$0 | 0; //@line 7606 | |
} | |
$639 = HEAP32[2864] | 0; //@line 7608 | |
if (($639 | 0) == (HEAP32[4464] | 0)) { | |
_fDSTROY($639); //@line 7612 | |
HEAP32[6048 + (HEAP32[4510] << 2) >> 2] = 2; //@line 7615 | |
$670 = 18864 + (HEAP32[3298] << 2) | 0; //@line 7617 | |
HEAP32[$670 >> 2] = (HEAP32[$670 >> 2] | 0) + 3; //@line 7620 | |
HEAP32[3078] = 240; //@line 7621 | |
$$0 = 2011; //@line 7622 | |
return $$0 | 0; //@line 7623 | |
} | |
$643 = HEAP32[3280] | 0; //@line 7626 | |
if (!(($639 | 0) == 0 | ($639 | 0) == ($643 | 0))) { | |
HEAP32[3078] = 110; //@line 7630 | |
$$0 = 2011; //@line 7631 | |
return $$0 | 0; //@line 7632 | |
} | |
if ((HEAP32[3078] | 0) == 110) { | |
$$0 = 2011; //@line 7637 | |
return $$0 | 0; //@line 7638 | |
} | |
$646 = HEAP32[3454] | 0; //@line 7640 | |
$647 = 6048 + ($646 << 2) | 0; //@line 7641 | |
$648 = HEAP32[$647 >> 2] | 0; //@line 7642 | |
$649 = $648 >> 31 ^ $648; //@line 7644 | |
$651 = Math_imul(1 - $649 | 0, $643) | 0; //@line 7646 | |
if (((Math_imul((HEAP32[3282] | 0) + $643 | 0, ($649 | 0) / 2 | 0) | 0) + $651 | 0) != ($643 | 0)) { | |
$$0 = 2011; //@line 7654 | |
return $$0 | 0; //@line 7655 | |
} | |
$659 = HEAP32[6488 + ($646 << 2) >> 2] | 0; //@line 7658 | |
$660 = HEAP32[74] | 0; //@line 7659 | |
if (($659 | 0) != ($660 | 0)) { | |
if (!(($659 | 0) == -1 ? 1 : (HEAP32[6896 + ($646 << 2) >> 2] | 0) == ($660 | 0))) { | |
$$0 = 2011; //@line 7668 | |
return $$0 | 0; //@line 7669 | |
} | |
} | |
HEAP32[$647 >> 2] = 1; //@line 7672 | |
HEAP32[6488 + ($643 << 2) >> 2] = 0; //@line 7674 | |
HEAP32[3078] = 74; //@line 7675 | |
$$0 = 2011; //@line 7676 | |
return $$0 | 0; //@line 7677 | |
} | |
function _malloc($bytes) { | |
$bytes = $bytes | 0; | |
var $$3$i = 0, | |
$$lcssa = 0, | |
$$lcssa211 = 0, | |
$$lcssa215 = 0, | |
$$lcssa216 = 0, | |
$$lcssa217 = 0, | |
$$lcssa219 = 0, | |
$$lcssa222 = 0, | |
$$lcssa224 = 0, | |
$$lcssa226 = 0, | |
$$lcssa228 = 0, | |
$$lcssa230 = 0, | |
$$lcssa232 = 0, | |
$$pre$phi$i$iZ2D = 0, | |
$$pre$phi$i23$iZ2D = 0, | |
$$pre$phi$i26Z2D = 0, | |
$$pre$phi$iZ2D = 0, | |
$$pre$phi58$i$iZ2D = 0, | |
$$pre$phiZ2D = 0, | |
$$rsize$3$i = 0, | |
$$sum$i19$i = 0, | |
$$sum2$i21$i = 0, | |
$$sum3132$i$i = 0, | |
$$sum67$i$i = 0, | |
$100 = 0, | |
$1000 = 0, | |
$1002 = 0, | |
$1005 = 0, | |
$1010 = 0, | |
$1016 = 0, | |
$1019 = 0, | |
$1020 = 0, | |
$1027 = 0, | |
$1039 = 0, | |
$1044 = 0, | |
$1051 = 0, | |
$1052 = 0, | |
$1053 = 0, | |
$106 = 0, | |
$1060 = 0, | |
$1062 = 0, | |
$1063 = 0, | |
$110 = 0, | |
$112 = 0, | |
$113 = 0, | |
$115 = 0, | |
$117 = 0, | |
$119 = 0, | |
$12 = 0, | |
$121 = 0, | |
$123 = 0, | |
$125 = 0, | |
$127 = 0, | |
$13 = 0, | |
$132 = 0, | |
$138 = 0, | |
$14 = 0, | |
$141 = 0, | |
$144 = 0, | |
$147 = 0, | |
$148 = 0, | |
$149 = 0, | |
$15 = 0, | |
$151 = 0, | |
$154 = 0, | |
$156 = 0, | |
$159 = 0, | |
$16 = 0, | |
$161 = 0, | |
$164 = 0, | |
$167 = 0, | |
$168 = 0, | |
$17 = 0, | |
$170 = 0, | |
$171 = 0, | |
$173 = 0, | |
$174 = 0, | |
$176 = 0, | |
$177 = 0, | |
$18 = 0, | |
$182 = 0, | |
$183 = 0, | |
$192 = 0, | |
$197 = 0, | |
$201 = 0, | |
$207 = 0, | |
$214 = 0, | |
$217 = 0, | |
$225 = 0, | |
$227 = 0, | |
$228 = 0, | |
$229 = 0, | |
$230 = 0, | |
$231 = 0, | |
$232 = 0, | |
$236 = 0, | |
$237 = 0, | |
$245 = 0, | |
$246 = 0, | |
$247 = 0, | |
$249 = 0, | |
$25 = 0, | |
$250 = 0, | |
$255 = 0, | |
$256 = 0, | |
$259 = 0, | |
$261 = 0, | |
$264 = 0, | |
$269 = 0, | |
$276 = 0, | |
$28 = 0, | |
$285 = 0, | |
$286 = 0, | |
$290 = 0, | |
$300 = 0, | |
$303 = 0, | |
$307 = 0, | |
$309 = 0, | |
$31 = 0, | |
$310 = 0, | |
$312 = 0, | |
$314 = 0, | |
$316 = 0, | |
$318 = 0, | |
$320 = 0, | |
$322 = 0, | |
$324 = 0, | |
$334 = 0, | |
$335 = 0, | |
$337 = 0, | |
$34 = 0, | |
$346 = 0, | |
$348 = 0, | |
$351 = 0, | |
$353 = 0, | |
$356 = 0, | |
$358 = 0, | |
$361 = 0, | |
$364 = 0, | |
$365 = 0, | |
$367 = 0, | |
$368 = 0, | |
$370 = 0, | |
$371 = 0, | |
$373 = 0, | |
$374 = 0, | |
$379 = 0, | |
$38 = 0, | |
$380 = 0, | |
$389 = 0, | |
$394 = 0, | |
$398 = 0, | |
$4 = 0, | |
$404 = 0, | |
$41 = 0, | |
$411 = 0, | |
$414 = 0, | |
$422 = 0, | |
$424 = 0, | |
$425 = 0, | |
$426 = 0, | |
$427 = 0, | |
$431 = 0, | |
$432 = 0, | |
$438 = 0, | |
$44 = 0, | |
$443 = 0, | |
$444 = 0, | |
$447 = 0, | |
$449 = 0, | |
$452 = 0, | |
$457 = 0, | |
$46 = 0, | |
$463 = 0, | |
$467 = 0, | |
$468 = 0, | |
$47 = 0, | |
$475 = 0, | |
$487 = 0, | |
$49 = 0, | |
$492 = 0, | |
$499 = 0, | |
$5 = 0, | |
$500 = 0, | |
$501 = 0, | |
$509 = 0, | |
$51 = 0, | |
$511 = 0, | |
$512 = 0, | |
$522 = 0, | |
$526 = 0, | |
$528 = 0, | |
$529 = 0, | |
$53 = 0, | |
$538 = 0, | |
$545 = 0, | |
$546 = 0, | |
$547 = 0, | |
$548 = 0, | |
$549 = 0, | |
$55 = 0, | |
$550 = 0, | |
$552 = 0, | |
$554 = 0, | |
$555 = 0, | |
$561 = 0, | |
$563 = 0, | |
$565 = 0, | |
$57 = 0, | |
$572 = 0, | |
$574 = 0, | |
$575 = 0, | |
$576 = 0, | |
$584 = 0, | |
$585 = 0, | |
$588 = 0, | |
$59 = 0, | |
$592 = 0, | |
$593 = 0, | |
$596 = 0, | |
$598 = 0, | |
$6 = 0, | |
$602 = 0, | |
$604 = 0, | |
$608 = 0, | |
$61 = 0, | |
$612 = 0, | |
$621 = 0, | |
$622 = 0, | |
$628 = 0, | |
$630 = 0, | |
$632 = 0, | |
$635 = 0, | |
$637 = 0, | |
$64 = 0, | |
$641 = 0, | |
$642 = 0, | |
$648 = 0, | |
$65 = 0, | |
$653 = 0, | |
$655 = 0, | |
$66 = 0, | |
$660 = 0, | |
$661 = 0, | |
$662 = 0, | |
$67 = 0, | |
$676 = 0, | |
$678 = 0, | |
$68 = 0, | |
$683 = 0, | |
$685 = 0, | |
$69 = 0, | |
$690 = 0, | |
$692 = 0, | |
$7 = 0, | |
$70 = 0, | |
$702 = 0, | |
$706 = 0, | |
$711 = 0, | |
$714 = 0, | |
$719 = 0, | |
$720 = 0, | |
$724 = 0, | |
$725 = 0, | |
$730 = 0, | |
$736 = 0, | |
$741 = 0, | |
$744 = 0, | |
$745 = 0, | |
$748 = 0, | |
$750 = 0, | |
$752 = 0, | |
$755 = 0, | |
$766 = 0, | |
$77 = 0, | |
$771 = 0, | |
$773 = 0, | |
$776 = 0, | |
$778 = 0, | |
$781 = 0, | |
$784 = 0, | |
$785 = 0, | |
$787 = 0, | |
$788 = 0, | |
$790 = 0, | |
$791 = 0, | |
$793 = 0, | |
$794 = 0, | |
$799 = 0, | |
$80 = 0, | |
$800 = 0, | |
$809 = 0, | |
$81 = 0, | |
$814 = 0, | |
$818 = 0, | |
$824 = 0, | |
$832 = 0, | |
$838 = 0, | |
$84 = 0, | |
$840 = 0, | |
$841 = 0, | |
$842 = 0, | |
$843 = 0, | |
$847 = 0, | |
$848 = 0, | |
$854 = 0, | |
$859 = 0, | |
$860 = 0, | |
$863 = 0, | |
$865 = 0, | |
$868 = 0, | |
$873 = 0, | |
$879 = 0, | |
$88 = 0, | |
$883 = 0, | |
$884 = 0, | |
$891 = 0, | |
$90 = 0, | |
$903 = 0, | |
$908 = 0, | |
$91 = 0, | |
$915 = 0, | |
$916 = 0, | |
$917 = 0, | |
$92 = 0, | |
$925 = 0, | |
$928 = 0, | |
$929 = 0, | |
$93 = 0, | |
$934 = 0, | |
$94 = 0, | |
$940 = 0, | |
$941 = 0, | |
$943 = 0, | |
$944 = 0, | |
$947 = 0, | |
$95 = 0, | |
$952 = 0, | |
$954 = 0, | |
$959 = 0, | |
$960 = 0, | |
$964 = 0, | |
$970 = 0, | |
$975 = 0, | |
$977 = 0, | |
$978 = 0, | |
$979 = 0, | |
$980 = 0, | |
$984 = 0, | |
$985 = 0, | |
$99 = 0, | |
$991 = 0, | |
$996 = 0, | |
$997 = 0, | |
$F$0$i$i = 0, | |
$F1$0$i = 0, | |
$F4$0 = 0, | |
$F4$0$i$i = 0, | |
$F5$0$i = 0, | |
$I1$0$i$i = 0, | |
$I7$0$i = 0, | |
$I7$0$i$i = 0, | |
$K12$029$i = 0, | |
$K2$07$i$i = 0, | |
$K8$051$i$i = 0, | |
$R$0$i = 0, | |
$R$0$i$i = 0, | |
$R$0$i$i$lcssa = 0, | |
$R$0$i$lcssa = 0, | |
$R$0$i18 = 0, | |
$R$0$i18$lcssa = 0, | |
$R$1$i = 0, | |
$R$1$i$i = 0, | |
$R$1$i20 = 0, | |
$RP$0$i = 0, | |
$RP$0$i$i = 0, | |
$RP$0$i$i$lcssa = 0, | |
$RP$0$i$lcssa = 0, | |
$RP$0$i17 = 0, | |
$RP$0$i17$lcssa = 0, | |
$T$0$lcssa$i = 0, | |
$T$0$lcssa$i$i = 0, | |
$T$0$lcssa$i25$i = 0, | |
$T$028$i = 0, | |
$T$028$i$lcssa = 0, | |
$T$050$i$i = 0, | |
$T$050$i$i$lcssa = 0, | |
$T$06$i$i = 0, | |
$T$06$i$i$lcssa = 0, | |
$br$0$ph$i = 0, | |
$i$02$i$i = 0, | |
$idx$0$i = 0, | |
$mem$0 = 0, | |
$nb$0 = 0, | |
$oldfirst$0$i$i = 0, | |
$qsize$0$i$i = 0, | |
$rsize$0$i = 0, | |
$rsize$0$i$lcssa = 0, | |
$rsize$0$i15 = 0, | |
$rsize$1$i = 0, | |
$rsize$2$i = 0, | |
$rsize$3$lcssa$i = 0, | |
$rsize$331$i = 0, | |
$rst$0$i = 0, | |
$rst$1$i = 0, | |
$sizebits$0$i = 0, | |
$sp$0$i$i = 0, | |
$sp$0$i$i$i = 0, | |
$sp$084$i = 0, | |
$sp$084$i$lcssa = 0, | |
$sp$183$i = 0, | |
$sp$183$i$lcssa = 0, | |
$ssize$0$$i = 0, | |
$ssize$0$i = 0, | |
$ssize$1$ph$i = 0, | |
$ssize$2$i = 0, | |
$t$0$i = 0, | |
$t$0$i14 = 0, | |
$t$1$i = 0, | |
$t$2$ph$i = 0, | |
$t$2$v$3$i = 0, | |
$t$230$i = 0, | |
$tbase$255$i = 0, | |
$tsize$0$ph$i = 0, | |
$tsize$0323944$i = 0, | |
$tsize$1$i = 0, | |
$tsize$254$i = 0, | |
$v$0$i = 0, | |
$v$0$i$lcssa = 0, | |
$v$0$i16 = 0, | |
$v$1$i = 0, | |
$v$2$i = 0, | |
$v$3$lcssa$i = 0, | |
$v$3$ph$i = 0, | |
$v$332$i = 0, | |
label = 0, | |
$964$looptemp = 0; | |
do { | |
if ($bytes >>> 0 < 245) { | |
$4 = $bytes >>> 0 < 11 ? 16 : $bytes + 11 & -8; //@line 15019 | |
$5 = $4 >>> 3; //@line 15020 | |
$6 = HEAP32[5226] | 0; //@line 15021 | |
$7 = $6 >>> $5; //@line 15022 | |
if ($7 & 3) { | |
$12 = ($7 & 1 ^ 1) + $5 | 0; //@line 15028 | |
$13 = $12 << 1; //@line 15029 | |
$14 = 20944 + ($13 << 2) | 0; //@line 15030 | |
$15 = 20944 + ($13 + 2 << 2) | 0; //@line 15032 | |
$16 = HEAP32[$15 >> 2] | 0; //@line 15033 | |
$17 = $16 + 8 | 0; //@line 15034 | |
$18 = HEAP32[$17 >> 2] | 0; //@line 15035 | |
do { | |
if (($14 | 0) == ($18 | 0)) { | |
HEAP32[5226] = $6 & ~(1 << $12); //@line 15042 | |
} else { | |
if ($18 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15047 | |
} | |
$25 = $18 + 12 | 0; //@line 15050 | |
if ((HEAP32[$25 >> 2] | 0) == ($16 | 0)) { | |
HEAP32[$25 >> 2] = $14; //@line 15054 | |
HEAP32[$15 >> 2] = $18; //@line 15055 | |
break; | |
} else { | |
_abort(); //@line 15058 | |
} | |
} | |
} while (0); | |
$28 = $12 << 3; //@line 15063 | |
HEAP32[$16 + 4 >> 2] = $28 | 3; //@line 15066 | |
$31 = $16 + ($28 | 4) | 0; //@line 15068 | |
HEAP32[$31 >> 2] = HEAP32[$31 >> 2] | 1; //@line 15071 | |
$mem$0 = $17; //@line 15072 | |
return $mem$0 | 0; //@line 15073 | |
} | |
$34 = HEAP32[5228] | 0; //@line 15075 | |
if ($4 >>> 0 > $34 >>> 0) { | |
if ($7) { | |
$38 = 2 << $5; //@line 15081 | |
$41 = $7 << $5 & ($38 | 0 - $38); //@line 15084 | |
$44 = ($41 & 0 - $41) + -1 | 0; //@line 15087 | |
$46 = $44 >>> 12 & 16; //@line 15089 | |
$47 = $44 >>> $46; //@line 15090 | |
$49 = $47 >>> 5 & 8; //@line 15092 | |
$51 = $47 >>> $49; //@line 15094 | |
$53 = $51 >>> 2 & 4; //@line 15096 | |
$55 = $51 >>> $53; //@line 15098 | |
$57 = $55 >>> 1 & 2; //@line 15100 | |
$59 = $55 >>> $57; //@line 15102 | |
$61 = $59 >>> 1 & 1; //@line 15104 | |
$64 = ($49 | $46 | $53 | $57 | $61) + ($59 >>> $61) | 0; //@line 15107 | |
$65 = $64 << 1; //@line 15108 | |
$66 = 20944 + ($65 << 2) | 0; //@line 15109 | |
$67 = 20944 + ($65 + 2 << 2) | 0; //@line 15111 | |
$68 = HEAP32[$67 >> 2] | 0; //@line 15112 | |
$69 = $68 + 8 | 0; //@line 15113 | |
$70 = HEAP32[$69 >> 2] | 0; //@line 15114 | |
do { | |
if (($66 | 0) == ($70 | 0)) { | |
HEAP32[5226] = $6 & ~(1 << $64); //@line 15121 | |
$88 = $34; //@line 15122 | |
} else { | |
if ($70 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15127 | |
} | |
$77 = $70 + 12 | 0; //@line 15130 | |
if ((HEAP32[$77 >> 2] | 0) == ($68 | 0)) { | |
HEAP32[$77 >> 2] = $66; //@line 15134 | |
HEAP32[$67 >> 2] = $70; //@line 15135 | |
$88 = HEAP32[5228] | 0; //@line 15137 | |
break; | |
} else { | |
_abort(); //@line 15140 | |
} | |
} | |
} while (0); | |
$80 = $64 << 3; //@line 15145 | |
$81 = $80 - $4 | 0; //@line 15146 | |
HEAP32[$68 + 4 >> 2] = $4 | 3; //@line 15149 | |
$84 = $68 + $4 | 0; //@line 15150 | |
HEAP32[$68 + ($4 | 4) >> 2] = $81 | 1; //@line 15154 | |
HEAP32[$68 + $80 >> 2] = $81; //@line 15156 | |
if ($88) { | |
$90 = HEAP32[5231] | 0; //@line 15159 | |
$91 = $88 >>> 3; //@line 15160 | |
$92 = $91 << 1; //@line 15161 | |
$93 = 20944 + ($92 << 2) | 0; //@line 15162 | |
$94 = HEAP32[5226] | 0; //@line 15163 | |
$95 = 1 << $91; //@line 15164 | |
if (!($94 & $95)) { | |
HEAP32[5226] = $94 | $95; //@line 15169 | |
$$pre$phiZ2D = 20944 + ($92 + 2 << 2) | 0; //@line 15172 | |
$F4$0 = $93; //@line 15172 | |
} else { | |
$99 = 20944 + ($92 + 2 << 2) | 0; //@line 15175 | |
$100 = HEAP32[$99 >> 2] | 0; //@line 15176 | |
if ($100 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15180 | |
} else { | |
$$pre$phiZ2D = $99; //@line 15183 | |
$F4$0 = $100; //@line 15183 | |
} | |
} | |
HEAP32[$$pre$phiZ2D >> 2] = $90; //@line 15186 | |
HEAP32[$F4$0 + 12 >> 2] = $90; //@line 15188 | |
HEAP32[$90 + 8 >> 2] = $F4$0; //@line 15190 | |
HEAP32[$90 + 12 >> 2] = $93; //@line 15192 | |
} | |
HEAP32[5228] = $81; //@line 15194 | |
HEAP32[5231] = $84; //@line 15195 | |
$mem$0 = $69; //@line 15196 | |
return $mem$0 | 0; //@line 15197 | |
} | |
$106 = HEAP32[5227] | 0; //@line 15199 | |
if (!$106) { | |
$nb$0 = $4; //@line 15202 | |
} else { | |
$110 = ($106 & 0 - $106) + -1 | 0; //@line 15206 | |
$112 = $110 >>> 12 & 16; //@line 15208 | |
$113 = $110 >>> $112; //@line 15209 | |
$115 = $113 >>> 5 & 8; //@line 15211 | |
$117 = $113 >>> $115; //@line 15213 | |
$119 = $117 >>> 2 & 4; //@line 15215 | |
$121 = $117 >>> $119; //@line 15217 | |
$123 = $121 >>> 1 & 2; //@line 15219 | |
$125 = $121 >>> $123; //@line 15221 | |
$127 = $125 >>> 1 & 1; //@line 15223 | |
$132 = HEAP32[21208 + (($115 | $112 | $119 | $123 | $127) + ($125 >>> $127) << 2) >> 2] | 0; //@line 15228 | |
$rsize$0$i = (HEAP32[$132 + 4 >> 2] & -8) - $4 | 0; //@line 15233 | |
$t$0$i = $132; //@line 15233 | |
$v$0$i = $132; //@line 15233 | |
while (1) { | |
$138 = HEAP32[$t$0$i + 16 >> 2] | 0; //@line 15236 | |
if (!$138) { | |
$141 = HEAP32[$t$0$i + 20 >> 2] | 0; //@line 15240 | |
if (!$141) { | |
$rsize$0$i$lcssa = $rsize$0$i; //@line 15243 | |
$v$0$i$lcssa = $v$0$i; //@line 15243 | |
break; | |
} else { | |
$144 = $141; //@line 15246 | |
} | |
} else { | |
$144 = $138; //@line 15249 | |
} | |
$147 = (HEAP32[$144 + 4 >> 2] & -8) - $4 | 0; //@line 15254 | |
$148 = $147 >>> 0 < $rsize$0$i >>> 0; //@line 15255 | |
$rsize$0$i = $148 ? $147 : $rsize$0$i; //@line 15258 | |
$t$0$i = $144; //@line 15258 | |
$v$0$i = $148 ? $144 : $v$0$i; //@line 15258 | |
} | |
$149 = HEAP32[5230] | 0; //@line 15260 | |
if ($v$0$i$lcssa >>> 0 < $149 >>> 0) { | |
_abort(); //@line 15263 | |
} | |
$151 = $v$0$i$lcssa + $4 | 0; //@line 15266 | |
if ($v$0$i$lcssa >>> 0 >= $151 >>> 0) { | |
_abort(); //@line 15269 | |
} | |
$154 = HEAP32[$v$0$i$lcssa + 24 >> 2] | 0; //@line 15273 | |
$156 = HEAP32[$v$0$i$lcssa + 12 >> 2] | 0; //@line 15275 | |
do { | |
if (($156 | 0) == ($v$0$i$lcssa | 0)) { | |
$167 = $v$0$i$lcssa + 20 | 0; //@line 15279 | |
$168 = HEAP32[$167 >> 2] | 0; //@line 15280 | |
if (!$168) { | |
$170 = $v$0$i$lcssa + 16 | 0; //@line 15283 | |
$171 = HEAP32[$170 >> 2] | 0; //@line 15284 | |
if (!$171) { | |
$R$1$i = 0; //@line 15287 | |
break; | |
} else { | |
$R$0$i = $171; //@line 15290 | |
$RP$0$i = $170; //@line 15290 | |
} | |
} else { | |
$R$0$i = $168; //@line 15293 | |
$RP$0$i = $167; //@line 15293 | |
} | |
while (1) { | |
$173 = $R$0$i + 20 | 0; //@line 15296 | |
$174 = HEAP32[$173 >> 2] | 0; //@line 15297 | |
if ($174) { | |
$R$0$i = $174; //@line 15300 | |
$RP$0$i = $173; //@line 15300 | |
continue; | |
} | |
$176 = $R$0$i + 16 | 0; //@line 15303 | |
$177 = HEAP32[$176 >> 2] | 0; //@line 15304 | |
if (!$177) { | |
$R$0$i$lcssa = $R$0$i; //@line 15307 | |
$RP$0$i$lcssa = $RP$0$i; //@line 15307 | |
break; | |
} else { | |
$R$0$i = $177; //@line 15310 | |
$RP$0$i = $176; //@line 15310 | |
} | |
} | |
if ($RP$0$i$lcssa >>> 0 < $149 >>> 0) { | |
_abort(); //@line 15315 | |
} else { | |
HEAP32[$RP$0$i$lcssa >> 2] = 0; //@line 15318 | |
$R$1$i = $R$0$i$lcssa; //@line 15319 | |
break; | |
} | |
} else { | |
$159 = HEAP32[$v$0$i$lcssa + 8 >> 2] | 0; //@line 15324 | |
if ($159 >>> 0 < $149 >>> 0) { | |
_abort(); //@line 15327 | |
} | |
$161 = $159 + 12 | 0; //@line 15330 | |
if ((HEAP32[$161 >> 2] | 0) != ($v$0$i$lcssa | 0)) { | |
_abort(); //@line 15334 | |
} | |
$164 = $156 + 8 | 0; //@line 15337 | |
if ((HEAP32[$164 >> 2] | 0) == ($v$0$i$lcssa | 0)) { | |
HEAP32[$161 >> 2] = $156; //@line 15341 | |
HEAP32[$164 >> 2] = $159; //@line 15342 | |
$R$1$i = $156; //@line 15343 | |
break; | |
} else { | |
_abort(); //@line 15346 | |
} | |
} | |
} while (0); | |
do { | |
if ($154) { | |
$182 = HEAP32[$v$0$i$lcssa + 28 >> 2] | 0; //@line 15355 | |
$183 = 21208 + ($182 << 2) | 0; //@line 15356 | |
if (($v$0$i$lcssa | 0) == (HEAP32[$183 >> 2] | 0)) { | |
HEAP32[$183 >> 2] = $R$1$i; //@line 15360 | |
if (!$R$1$i) { | |
HEAP32[5227] = HEAP32[5227] & ~(1 << $182); //@line 15367 | |
break; | |
} | |
} else { | |
if ($154 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15374 | |
} | |
$192 = $154 + 16 | 0; //@line 15377 | |
if ((HEAP32[$192 >> 2] | 0) == ($v$0$i$lcssa | 0)) { | |
HEAP32[$192 >> 2] = $R$1$i; //@line 15381 | |
} else { | |
HEAP32[$154 + 20 >> 2] = $R$1$i; //@line 15384 | |
} | |
if (!$R$1$i) { | |
break; | |
} | |
} | |
$197 = HEAP32[5230] | 0; //@line 15391 | |
if ($R$1$i >>> 0 < $197 >>> 0) { | |
_abort(); //@line 15394 | |
} | |
HEAP32[$R$1$i + 24 >> 2] = $154; //@line 15398 | |
$201 = HEAP32[$v$0$i$lcssa + 16 >> 2] | 0; //@line 15400 | |
do { | |
if ($201) { | |
if ($201 >>> 0 < $197 >>> 0) { | |
_abort(); //@line 15406 | |
} else { | |
HEAP32[$R$1$i + 16 >> 2] = $201; //@line 15410 | |
HEAP32[$201 + 24 >> 2] = $R$1$i; //@line 15412 | |
break; | |
} | |
} | |
} while (0); | |
$207 = HEAP32[$v$0$i$lcssa + 20 >> 2] | 0; //@line 15418 | |
if ($207) { | |
if ($207 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15424 | |
} else { | |
HEAP32[$R$1$i + 20 >> 2] = $207; //@line 15428 | |
HEAP32[$207 + 24 >> 2] = $R$1$i; //@line 15430 | |
break; | |
} | |
} | |
} | |
} while (0); | |
if ($rsize$0$i$lcssa >>> 0 < 16) { | |
$214 = $rsize$0$i$lcssa + $4 | 0; //@line 15438 | |
HEAP32[$v$0$i$lcssa + 4 >> 2] = $214 | 3; //@line 15441 | |
$217 = $v$0$i$lcssa + ($214 + 4) | 0; //@line 15443 | |
HEAP32[$217 >> 2] = HEAP32[$217 >> 2] | 1; //@line 15446 | |
} else { | |
HEAP32[$v$0$i$lcssa + 4 >> 2] = $4 | 3; //@line 15450 | |
HEAP32[$v$0$i$lcssa + ($4 | 4) >> 2] = $rsize$0$i$lcssa | 1; //@line 15454 | |
HEAP32[$v$0$i$lcssa + ($rsize$0$i$lcssa + $4) >> 2] = $rsize$0$i$lcssa; //@line 15457 | |
$225 = HEAP32[5228] | 0; //@line 15458 | |
if ($225) { | |
$227 = HEAP32[5231] | 0; //@line 15461 | |
$228 = $225 >>> 3; //@line 15462 | |
$229 = $228 << 1; //@line 15463 | |
$230 = 20944 + ($229 << 2) | 0; //@line 15464 | |
$231 = HEAP32[5226] | 0; //@line 15465 | |
$232 = 1 << $228; //@line 15466 | |
if (!($231 & $232)) { | |
HEAP32[5226] = $231 | $232; //@line 15471 | |
$$pre$phi$iZ2D = 20944 + ($229 + 2 << 2) | 0; //@line 15474 | |
$F1$0$i = $230; //@line 15474 | |
} else { | |
$236 = 20944 + ($229 + 2 << 2) | 0; //@line 15477 | |
$237 = HEAP32[$236 >> 2] | 0; //@line 15478 | |
if ($237 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15482 | |
} else { | |
$$pre$phi$iZ2D = $236; //@line 15485 | |
$F1$0$i = $237; //@line 15485 | |
} | |
} | |
HEAP32[$$pre$phi$iZ2D >> 2] = $227; //@line 15488 | |
HEAP32[$F1$0$i + 12 >> 2] = $227; //@line 15490 | |
HEAP32[$227 + 8 >> 2] = $F1$0$i; //@line 15492 | |
HEAP32[$227 + 12 >> 2] = $230; //@line 15494 | |
} | |
HEAP32[5228] = $rsize$0$i$lcssa; //@line 15496 | |
HEAP32[5231] = $151; //@line 15497 | |
} | |
$mem$0 = $v$0$i$lcssa + 8 | 0; //@line 15500 | |
return $mem$0 | 0; //@line 15501 | |
} | |
} else { | |
$nb$0 = $4; //@line 15504 | |
} | |
} else { | |
if ($bytes >>> 0 > 4294967231) { | |
$nb$0 = -1; //@line 15509 | |
} else { | |
$245 = $bytes + 11 | 0; //@line 15511 | |
$246 = $245 & -8; //@line 15512 | |
$247 = HEAP32[5227] | 0; //@line 15513 | |
if (!$247) { | |
$nb$0 = $246; //@line 15516 | |
} else { | |
$249 = 0 - $246 | 0; //@line 15518 | |
$250 = $245 >>> 8; //@line 15519 | |
if (!$250) { | |
$idx$0$i = 0; //@line 15522 | |
} else { | |
if ($246 >>> 0 > 16777215) { | |
$idx$0$i = 31; //@line 15526 | |
} else { | |
$255 = ($250 + 1048320 | 0) >>> 16 & 8; //@line 15530 | |
$256 = $250 << $255; //@line 15531 | |
$259 = ($256 + 520192 | 0) >>> 16 & 4; //@line 15534 | |
$261 = $256 << $259; //@line 15536 | |
$264 = ($261 + 245760 | 0) >>> 16 & 2; //@line 15539 | |
$269 = 14 - ($259 | $255 | $264) + ($261 << $264 >>> 15) | 0; //@line 15544 | |
$idx$0$i = $246 >>> ($269 + 7 | 0) & 1 | $269 << 1; //@line 15550 | |
} | |
} | |
$276 = HEAP32[21208 + ($idx$0$i << 2) >> 2] | 0; //@line 15554 | |
L123: do { | |
if (!$276) { | |
$rsize$2$i = $249; //@line 15558 | |
$t$1$i = 0; //@line 15558 | |
$v$2$i = 0; //@line 15558 | |
label = 86; //@line 15559 | |
} else { | |
$rsize$0$i15 = $249; //@line 15566 | |
$rst$0$i = 0; //@line 15566 | |
$sizebits$0$i = $246 << (($idx$0$i | 0) == 31 ? 0 : 25 - ($idx$0$i >>> 1) | 0); //@line 15566 | |
$t$0$i14 = $276; //@line 15566 | |
$v$0$i16 = 0; //@line 15566 | |
while (1) { | |
$285 = HEAP32[$t$0$i14 + 4 >> 2] & -8; //@line 15570 | |
$286 = $285 - $246 | 0; //@line 15571 | |
if ($286 >>> 0 < $rsize$0$i15 >>> 0) { | |
if (($285 | 0) == ($246 | 0)) { | |
$rsize$331$i = $286; //@line 15576 | |
$t$230$i = $t$0$i14; //@line 15576 | |
$v$332$i = $t$0$i14; //@line 15576 | |
label = 90; //@line 15577 | |
break L123; | |
} else { | |
$rsize$1$i = $286; //@line 15580 | |
$v$1$i = $t$0$i14; //@line 15580 | |
} | |
} else { | |
$rsize$1$i = $rsize$0$i15; //@line 15583 | |
$v$1$i = $v$0$i16; //@line 15583 | |
} | |
$290 = HEAP32[$t$0$i14 + 20 >> 2] | 0; //@line 15586 | |
$t$0$i14 = HEAP32[$t$0$i14 + 16 + ($sizebits$0$i >>> 31 << 2) >> 2] | 0; //@line 15589 | |
$rst$1$i = ($290 | 0) == 0 | ($290 | 0) == ($t$0$i14 | 0) ? $rst$0$i : $290; //@line 15593 | |
if (!$t$0$i14) { | |
$rsize$2$i = $rsize$1$i; //@line 15597 | |
$t$1$i = $rst$1$i; //@line 15597 | |
$v$2$i = $v$1$i; //@line 15597 | |
label = 86; //@line 15598 | |
break; | |
} else { | |
$rsize$0$i15 = $rsize$1$i; //@line 15601 | |
$rst$0$i = $rst$1$i; //@line 15601 | |
$sizebits$0$i = $sizebits$0$i << 1; //@line 15601 | |
$v$0$i16 = $v$1$i; //@line 15601 | |
} | |
} | |
} | |
} while (0); | |
if ((label | 0) == 86) { | |
if (($t$1$i | 0) == 0 & ($v$2$i | 0) == 0) { | |
$300 = 2 << $idx$0$i; //@line 15611 | |
$303 = $247 & ($300 | 0 - $300); //@line 15614 | |
if (!$303) { | |
$nb$0 = $246; //@line 15617 | |
break; | |
} | |
$307 = ($303 & 0 - $303) + -1 | 0; //@line 15622 | |
$309 = $307 >>> 12 & 16; //@line 15624 | |
$310 = $307 >>> $309; //@line 15625 | |
$312 = $310 >>> 5 & 8; //@line 15627 | |
$314 = $310 >>> $312; //@line 15629 | |
$316 = $314 >>> 2 & 4; //@line 15631 | |
$318 = $314 >>> $316; //@line 15633 | |
$320 = $318 >>> 1 & 2; //@line 15635 | |
$322 = $318 >>> $320; //@line 15637 | |
$324 = $322 >>> 1 & 1; //@line 15639 | |
$t$2$ph$i = HEAP32[21208 + (($312 | $309 | $316 | $320 | $324) + ($322 >>> $324) << 2) >> 2] | 0; //@line 15645 | |
$v$3$ph$i = 0; //@line 15645 | |
} else { | |
$t$2$ph$i = $t$1$i; //@line 15647 | |
$v$3$ph$i = $v$2$i; //@line 15647 | |
} | |
if (!$t$2$ph$i) { | |
$rsize$3$lcssa$i = $rsize$2$i; //@line 15651 | |
$v$3$lcssa$i = $v$3$ph$i; //@line 15651 | |
} else { | |
$rsize$331$i = $rsize$2$i; //@line 15653 | |
$t$230$i = $t$2$ph$i; //@line 15653 | |
$v$332$i = $v$3$ph$i; //@line 15653 | |
label = 90; //@line 15654 | |
} | |
} | |
if ((label | 0) == 90) { | |
while (1) { | |
label = 0; //@line 15659 | |
$334 = (HEAP32[$t$230$i + 4 >> 2] & -8) - $246 | 0; //@line 15663 | |
$335 = $334 >>> 0 < $rsize$331$i >>> 0; //@line 15664 | |
$$rsize$3$i = $335 ? $334 : $rsize$331$i; //@line 15665 | |
$t$2$v$3$i = $335 ? $t$230$i : $v$332$i; //@line 15666 | |
$337 = HEAP32[$t$230$i + 16 >> 2] | 0; //@line 15668 | |
if ($337) { | |
$rsize$331$i = $$rsize$3$i; //@line 15671 | |
$t$230$i = $337; //@line 15671 | |
$v$332$i = $t$2$v$3$i; //@line 15671 | |
label = 90; //@line 15672 | |
continue; | |
} | |
$t$230$i = HEAP32[$t$230$i + 20 >> 2] | 0; //@line 15676 | |
if (!$t$230$i) { | |
$rsize$3$lcssa$i = $$rsize$3$i; //@line 15679 | |
$v$3$lcssa$i = $t$2$v$3$i; //@line 15679 | |
break; | |
} else { | |
$rsize$331$i = $$rsize$3$i; //@line 15682 | |
$v$332$i = $t$2$v$3$i; //@line 15682 | |
label = 90; //@line 15683 | |
} | |
} | |
} | |
if (!$v$3$lcssa$i) { | |
$nb$0 = $246; //@line 15689 | |
} else { | |
if ($rsize$3$lcssa$i >>> 0 < ((HEAP32[5228] | 0) - $246 | 0) >>> 0) { | |
$346 = HEAP32[5230] | 0; //@line 15695 | |
if ($v$3$lcssa$i >>> 0 < $346 >>> 0) { | |
_abort(); //@line 15698 | |
} | |
$348 = $v$3$lcssa$i + $246 | 0; //@line 15701 | |
if ($v$3$lcssa$i >>> 0 >= $348 >>> 0) { | |
_abort(); //@line 15704 | |
} | |
$351 = HEAP32[$v$3$lcssa$i + 24 >> 2] | 0; //@line 15708 | |
$353 = HEAP32[$v$3$lcssa$i + 12 >> 2] | 0; //@line 15710 | |
do { | |
if (($353 | 0) == ($v$3$lcssa$i | 0)) { | |
$364 = $v$3$lcssa$i + 20 | 0; //@line 15714 | |
$365 = HEAP32[$364 >> 2] | 0; //@line 15715 | |
if (!$365) { | |
$367 = $v$3$lcssa$i + 16 | 0; //@line 15718 | |
$368 = HEAP32[$367 >> 2] | 0; //@line 15719 | |
if (!$368) { | |
$R$1$i20 = 0; //@line 15722 | |
break; | |
} else { | |
$R$0$i18 = $368; //@line 15725 | |
$RP$0$i17 = $367; //@line 15725 | |
} | |
} else { | |
$R$0$i18 = $365; //@line 15728 | |
$RP$0$i17 = $364; //@line 15728 | |
} | |
while (1) { | |
$370 = $R$0$i18 + 20 | 0; //@line 15731 | |
$371 = HEAP32[$370 >> 2] | 0; //@line 15732 | |
if ($371) { | |
$R$0$i18 = $371; //@line 15735 | |
$RP$0$i17 = $370; //@line 15735 | |
continue; | |
} | |
$373 = $R$0$i18 + 16 | 0; //@line 15738 | |
$374 = HEAP32[$373 >> 2] | 0; //@line 15739 | |
if (!$374) { | |
$R$0$i18$lcssa = $R$0$i18; //@line 15742 | |
$RP$0$i17$lcssa = $RP$0$i17; //@line 15742 | |
break; | |
} else { | |
$R$0$i18 = $374; //@line 15745 | |
$RP$0$i17 = $373; //@line 15745 | |
} | |
} | |
if ($RP$0$i17$lcssa >>> 0 < $346 >>> 0) { | |
_abort(); //@line 15750 | |
} else { | |
HEAP32[$RP$0$i17$lcssa >> 2] = 0; //@line 15753 | |
$R$1$i20 = $R$0$i18$lcssa; //@line 15754 | |
break; | |
} | |
} else { | |
$356 = HEAP32[$v$3$lcssa$i + 8 >> 2] | 0; //@line 15759 | |
if ($356 >>> 0 < $346 >>> 0) { | |
_abort(); //@line 15762 | |
} | |
$358 = $356 + 12 | 0; //@line 15765 | |
if ((HEAP32[$358 >> 2] | 0) != ($v$3$lcssa$i | 0)) { | |
_abort(); //@line 15769 | |
} | |
$361 = $353 + 8 | 0; //@line 15772 | |
if ((HEAP32[$361 >> 2] | 0) == ($v$3$lcssa$i | 0)) { | |
HEAP32[$358 >> 2] = $353; //@line 15776 | |
HEAP32[$361 >> 2] = $356; //@line 15777 | |
$R$1$i20 = $353; //@line 15778 | |
break; | |
} else { | |
_abort(); //@line 15781 | |
} | |
} | |
} while (0); | |
do { | |
if ($351) { | |
$379 = HEAP32[$v$3$lcssa$i + 28 >> 2] | 0; //@line 15790 | |
$380 = 21208 + ($379 << 2) | 0; //@line 15791 | |
if (($v$3$lcssa$i | 0) == (HEAP32[$380 >> 2] | 0)) { | |
HEAP32[$380 >> 2] = $R$1$i20; //@line 15795 | |
if (!$R$1$i20) { | |
HEAP32[5227] = HEAP32[5227] & ~(1 << $379); //@line 15802 | |
break; | |
} | |
} else { | |
if ($351 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15809 | |
} | |
$389 = $351 + 16 | 0; //@line 15812 | |
if ((HEAP32[$389 >> 2] | 0) == ($v$3$lcssa$i | 0)) { | |
HEAP32[$389 >> 2] = $R$1$i20; //@line 15816 | |
} else { | |
HEAP32[$351 + 20 >> 2] = $R$1$i20; //@line 15819 | |
} | |
if (!$R$1$i20) { | |
break; | |
} | |
} | |
$394 = HEAP32[5230] | 0; //@line 15826 | |
if ($R$1$i20 >>> 0 < $394 >>> 0) { | |
_abort(); //@line 15829 | |
} | |
HEAP32[$R$1$i20 + 24 >> 2] = $351; //@line 15833 | |
$398 = HEAP32[$v$3$lcssa$i + 16 >> 2] | 0; //@line 15835 | |
do { | |
if ($398) { | |
if ($398 >>> 0 < $394 >>> 0) { | |
_abort(); //@line 15841 | |
} else { | |
HEAP32[$R$1$i20 + 16 >> 2] = $398; //@line 15845 | |
HEAP32[$398 + 24 >> 2] = $R$1$i20; //@line 15847 | |
break; | |
} | |
} | |
} while (0); | |
$404 = HEAP32[$v$3$lcssa$i + 20 >> 2] | 0; //@line 15853 | |
if ($404) { | |
if ($404 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15859 | |
} else { | |
HEAP32[$R$1$i20 + 20 >> 2] = $404; //@line 15863 | |
HEAP32[$404 + 24 >> 2] = $R$1$i20; //@line 15865 | |
break; | |
} | |
} | |
} | |
} while (0); | |
L199: do { | |
if ($rsize$3$lcssa$i >>> 0 < 16) { | |
$411 = $rsize$3$lcssa$i + $246 | 0; //@line 15874 | |
HEAP32[$v$3$lcssa$i + 4 >> 2] = $411 | 3; //@line 15877 | |
$414 = $v$3$lcssa$i + ($411 + 4) | 0; //@line 15879 | |
HEAP32[$414 >> 2] = HEAP32[$414 >> 2] | 1; //@line 15882 | |
} else { | |
HEAP32[$v$3$lcssa$i + 4 >> 2] = $246 | 3; //@line 15886 | |
HEAP32[$v$3$lcssa$i + ($246 | 4) >> 2] = $rsize$3$lcssa$i | 1; //@line 15890 | |
HEAP32[$v$3$lcssa$i + ($rsize$3$lcssa$i + $246) >> 2] = $rsize$3$lcssa$i; //@line 15893 | |
$422 = $rsize$3$lcssa$i >>> 3; //@line 15894 | |
if ($rsize$3$lcssa$i >>> 0 < 256) { | |
$424 = $422 << 1; //@line 15897 | |
$425 = 20944 + ($424 << 2) | 0; //@line 15898 | |
$426 = HEAP32[5226] | 0; //@line 15899 | |
$427 = 1 << $422; //@line 15900 | |
if (!($426 & $427)) { | |
HEAP32[5226] = $426 | $427; //@line 15905 | |
$$pre$phi$i26Z2D = 20944 + ($424 + 2 << 2) | 0; //@line 15908 | |
$F5$0$i = $425; //@line 15908 | |
} else { | |
$431 = 20944 + ($424 + 2 << 2) | 0; //@line 15911 | |
$432 = HEAP32[$431 >> 2] | 0; //@line 15912 | |
if ($432 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 15916 | |
} else { | |
$$pre$phi$i26Z2D = $431; //@line 15919 | |
$F5$0$i = $432; //@line 15919 | |
} | |
} | |
HEAP32[$$pre$phi$i26Z2D >> 2] = $348; //@line 15922 | |
HEAP32[$F5$0$i + 12 >> 2] = $348; //@line 15924 | |
HEAP32[$v$3$lcssa$i + ($246 + 8) >> 2] = $F5$0$i; //@line 15927 | |
HEAP32[$v$3$lcssa$i + ($246 + 12) >> 2] = $425; //@line 15930 | |
break; | |
} | |
$438 = $rsize$3$lcssa$i >>> 8; //@line 15933 | |
if (!$438) { | |
$I7$0$i = 0; //@line 15936 | |
} else { | |
if ($rsize$3$lcssa$i >>> 0 > 16777215) { | |
$I7$0$i = 31; //@line 15940 | |
} else { | |
$443 = ($438 + 1048320 | 0) >>> 16 & 8; //@line 15944 | |
$444 = $438 << $443; //@line 15945 | |
$447 = ($444 + 520192 | 0) >>> 16 & 4; //@line 15948 | |
$449 = $444 << $447; //@line 15950 | |
$452 = ($449 + 245760 | 0) >>> 16 & 2; //@line 15953 | |
$457 = 14 - ($447 | $443 | $452) + ($449 << $452 >>> 15) | 0; //@line 15958 | |
$I7$0$i = $rsize$3$lcssa$i >>> ($457 + 7 | 0) & 1 | $457 << 1; //@line 15964 | |
} | |
} | |
$463 = 21208 + ($I7$0$i << 2) | 0; //@line 15967 | |
HEAP32[$v$3$lcssa$i + ($246 + 28) >> 2] = $I7$0$i; //@line 15970 | |
HEAP32[$v$3$lcssa$i + ($246 + 20) >> 2] = 0; //@line 15975 | |
HEAP32[$v$3$lcssa$i + ($246 + 16) >> 2] = 0; //@line 15976 | |
$467 = HEAP32[5227] | 0; //@line 15977 | |
$468 = 1 << $I7$0$i; //@line 15978 | |
if (!($467 & $468)) { | |
HEAP32[5227] = $467 | $468; //@line 15983 | |
HEAP32[$463 >> 2] = $348; //@line 15984 | |
HEAP32[$v$3$lcssa$i + ($246 + 24) >> 2] = $463; //@line 15987 | |
HEAP32[$v$3$lcssa$i + ($246 + 12) >> 2] = $348; //@line 15990 | |
HEAP32[$v$3$lcssa$i + ($246 + 8) >> 2] = $348; //@line 15993 | |
break; | |
} | |
$475 = HEAP32[$463 >> 2] | 0; //@line 15996 | |
L217: do { | |
if ((HEAP32[$475 + 4 >> 2] & -8 | 0) == ($rsize$3$lcssa$i | 0)) { | |
$T$0$lcssa$i = $475; //@line 16003 | |
} else { | |
$K12$029$i = $rsize$3$lcssa$i << (($I7$0$i | 0) == 31 ? 0 : 25 - ($I7$0$i >>> 1) | 0); //@line 16010 | |
$T$028$i = $475; //@line 16010 | |
while (1) { | |
$492 = $T$028$i + 16 + ($K12$029$i >>> 31 << 2) | 0; //@line 16013 | |
$487 = HEAP32[$492 >> 2] | 0; //@line 16014 | |
if (!$487) { | |
$$lcssa232 = $492; //@line 16017 | |
$T$028$i$lcssa = $T$028$i; //@line 16017 | |
break; | |
} | |
if ((HEAP32[$487 + 4 >> 2] & -8 | 0) == ($rsize$3$lcssa$i | 0)) { | |
$T$0$lcssa$i = $487; //@line 16026 | |
break L217; | |
} else { | |
$K12$029$i = $K12$029$i << 1; //@line 16029 | |
$T$028$i = $487; //@line 16029 | |
} | |
} | |
if ($$lcssa232 >>> 0 < (HEAP32[5230] | 0) >>> 0) { | |
_abort(); //@line 16035 | |
} else { | |
HEAP32[$$lcssa232 >> 2] = $348; //@line 16038 | |
HEAP32[$v$3$lcssa$i + ($246 + 24) >> 2] = $T$028$i$lcssa; //@line 16041 | |
HEAP32[$v$3$lcssa$i + ($246 + 12) >> 2] = $348; //@line 16044 | |
HEAP32[$v$3$lcssa$i + ($246 + 8) >> 2] = $348; //@line 16047 | |
break L199; | |
} | |
} | |
} while (0); | |
$499 = $T$0$lcssa$i + 8 | 0; //@line 16052 | |
$500 = HEAP32[$499 >> 2] | 0; //@line 16053 | |
$501 = HEAP32[5230] | 0; //@line 16054 | |
if ($500 >>> 0 >= $501 >>> 0 & $T$0$lcssa$i >>> 0 >= $501 >>> 0) { | |
HEAP32[$500 + 12 >> 2] = $348; //@line 16060 | |
HEAP32[$499 >> 2] = $348; //@line 16061 | |
HEAP32[$v$3$lcssa$i + ($246 + 8) >> 2] = $500; //@line 16064 | |
HEAP32[$v$3$lcssa$i + ($246 + 12) >> 2] = $T$0$lcssa$i; //@line 16067 | |
HEAP32[$v$3$lcssa$i + ($246 + 24) >> 2] = 0; //@line 16070 | |
break; | |
} else { | |
_abort(); //@line 16073 | |
} | |
} | |
} while (0); | |
$mem$0 = $v$3$lcssa$i + 8 | 0; //@line 16079 | |
return $mem$0 | 0; //@line 16080 | |
} else { | |
$nb$0 = $246; //@line 16082 | |
} | |
} | |
} | |
} | |
} | |
} while (0); | |
$509 = HEAP32[5228] | 0; //@line 16089 | |
if ($509 >>> 0 >= $nb$0 >>> 0) { | |
$511 = $509 - $nb$0 | 0; //@line 16092 | |
$512 = HEAP32[5231] | 0; //@line 16093 | |
if ($511 >>> 0 > 15) { | |
HEAP32[5231] = $512 + $nb$0; //@line 16097 | |
HEAP32[5228] = $511; //@line 16098 | |
HEAP32[$512 + ($nb$0 + 4) >> 2] = $511 | 1; //@line 16102 | |
HEAP32[$512 + $509 >> 2] = $511; //@line 16104 | |
HEAP32[$512 + 4 >> 2] = $nb$0 | 3; //@line 16107 | |
} else { | |
HEAP32[5228] = 0; //@line 16109 | |
HEAP32[5231] = 0; //@line 16110 | |
HEAP32[$512 + 4 >> 2] = $509 | 3; //@line 16113 | |
$522 = $512 + ($509 + 4) | 0; //@line 16115 | |
HEAP32[$522 >> 2] = HEAP32[$522 >> 2] | 1; //@line 16118 | |
} | |
$mem$0 = $512 + 8 | 0; //@line 16121 | |
return $mem$0 | 0; //@line 16122 | |
} | |
$526 = HEAP32[5229] | 0; //@line 16124 | |
if ($526 >>> 0 > $nb$0 >>> 0) { | |
$528 = $526 - $nb$0 | 0; //@line 16127 | |
HEAP32[5229] = $528; //@line 16128 | |
$529 = HEAP32[5232] | 0; //@line 16129 | |
HEAP32[5232] = $529 + $nb$0; //@line 16131 | |
HEAP32[$529 + ($nb$0 + 4) >> 2] = $528 | 1; //@line 16135 | |
HEAP32[$529 + 4 >> 2] = $nb$0 | 3; //@line 16138 | |
$mem$0 = $529 + 8 | 0; //@line 16140 | |
return $mem$0 | 0; //@line 16141 | |
} | |
do { | |
if (!(HEAP32[5344] | 0)) { | |
$538 = _sysconf(30) | 0; //@line 16147 | |
if (!($538 + -1 & $538)) { | |
HEAP32[5346] = $538; //@line 16152 | |
HEAP32[5345] = $538; //@line 16153 | |
HEAP32[5347] = -1; //@line 16154 | |
HEAP32[5348] = -1; //@line 16155 | |
HEAP32[5349] = 0; //@line 16156 | |
HEAP32[5337] = 0; //@line 16157 | |
HEAP32[5344] = (_time(0) | 0) & -16 ^ 1431655768; //@line 16161 | |
break; | |
} else { | |
_abort(); //@line 16164 | |
} | |
} | |
} while (0); | |
$545 = $nb$0 + 48 | 0; //@line 16169 | |
$546 = HEAP32[5346] | 0; //@line 16170 | |
$547 = $nb$0 + 47 | 0; //@line 16171 | |
$548 = $546 + $547 | 0; //@line 16172 | |
$549 = 0 - $546 | 0; //@line 16173 | |
$550 = $548 & $549; //@line 16174 | |
if ($550 >>> 0 <= $nb$0 >>> 0) { | |
$mem$0 = 0; //@line 16177 | |
return $mem$0 | 0; //@line 16178 | |
} | |
$552 = HEAP32[5336] | 0; //@line 16180 | |
if ($552) { | |
$554 = HEAP32[5334] | 0; //@line 16183 | |
$555 = $554 + $550 | 0; //@line 16184 | |
if ($555 >>> 0 <= $554 >>> 0 | $555 >>> 0 > $552 >>> 0) { | |
$mem$0 = 0; //@line 16189 | |
return $mem$0 | 0; //@line 16190 | |
} | |
} | |
L258: do { | |
if (!(HEAP32[5337] & 4)) { | |
$561 = HEAP32[5232] | 0; //@line 16198 | |
L260: do { | |
if (!$561) { | |
label = 174; //@line 16202 | |
} else { | |
$sp$0$i$i = 21352; //@line 16204 | |
while (1) { | |
$563 = HEAP32[$sp$0$i$i >> 2] | 0; //@line 16206 | |
if ($563 >>> 0 <= $561 >>> 0) { | |
$565 = $sp$0$i$i + 4 | 0; //@line 16209 | |
if (($563 + (HEAP32[$565 >> 2] | 0) | 0) >>> 0 > $561 >>> 0) { | |
$$lcssa228 = $sp$0$i$i; //@line 16214 | |
$$lcssa230 = $565; //@line 16214 | |
break; | |
} | |
} | |
$sp$0$i$i = HEAP32[$sp$0$i$i + 8 >> 2] | 0; //@line 16219 | |
if (!$sp$0$i$i) { | |
label = 174; //@line 16222 | |
break L260; | |
} | |
} | |
$596 = $548 - (HEAP32[5229] | 0) & $549; //@line 16230 | |
if ($596 >>> 0 < 2147483647) { | |
$598 = _sbrk($596 | 0) | 0; //@line 16233 | |
$602 = ($598 | 0) == ((HEAP32[$$lcssa228 >> 2] | 0) + (HEAP32[$$lcssa230 >> 2] | 0) | 0); //@line 16237 | |
$$3$i = $602 ? $596 : 0; //@line 16238 | |
if ($602) { | |
if (($598 | 0) == (-1 | 0)) { | |
$tsize$0323944$i = $$3$i; //@line 16242 | |
} else { | |
$tbase$255$i = $598; //@line 16244 | |
$tsize$254$i = $$3$i; //@line 16244 | |
label = 194; //@line 16245 | |
break L258; | |
} | |
} else { | |
$br$0$ph$i = $598; //@line 16249 | |
$ssize$1$ph$i = $596; //@line 16249 | |
$tsize$0$ph$i = $$3$i; //@line 16249 | |
label = 184; //@line 16250 | |
} | |
} else { | |
$tsize$0323944$i = 0; //@line 16253 | |
} | |
} | |
} while (0); | |
do { | |
if ((label | 0) == 174) { | |
$572 = _sbrk(0) | 0; //@line 16259 | |
if (($572 | 0) == (-1 | 0)) { | |
$tsize$0323944$i = 0; //@line 16262 | |
} else { | |
$574 = $572; //@line 16264 | |
$575 = HEAP32[5345] | 0; //@line 16265 | |
$576 = $575 + -1 | 0; //@line 16266 | |
if (!($576 & $574)) { | |
$ssize$0$i = $550; //@line 16270 | |
} else { | |
$ssize$0$i = $550 - $574 + ($576 + $574 & 0 - $575) | 0; //@line 16277 | |
} | |
$584 = HEAP32[5334] | 0; //@line 16279 | |
$585 = $584 + $ssize$0$i | 0; //@line 16280 | |
if ($ssize$0$i >>> 0 > $nb$0 >>> 0 & $ssize$0$i >>> 0 < 2147483647) { | |
$588 = HEAP32[5336] | 0; //@line 16285 | |
if ($588) { | |
if ($585 >>> 0 <= $584 >>> 0 | $585 >>> 0 > $588 >>> 0) { | |
$tsize$0323944$i = 0; //@line 16292 | |
break; | |
} | |
} | |
$592 = _sbrk($ssize$0$i | 0) | 0; //@line 16296 | |
$593 = ($592 | 0) == ($572 | 0); //@line 16297 | |
$ssize$0$$i = $593 ? $ssize$0$i : 0; //@line 16298 | |
if ($593) { | |
$tbase$255$i = $572; //@line 16300 | |
$tsize$254$i = $ssize$0$$i; //@line 16300 | |
label = 194; //@line 16301 | |
break L258; | |
} else { | |
$br$0$ph$i = $592; //@line 16304 | |
$ssize$1$ph$i = $ssize$0$i; //@line 16304 | |
$tsize$0$ph$i = $ssize$0$$i; //@line 16304 | |
label = 184; //@line 16305 | |
} | |
} else { | |
$tsize$0323944$i = 0; //@line 16308 | |
} | |
} | |
} | |
} while (0); | |
L280: do { | |
if ((label | 0) == 184) { | |
$604 = 0 - $ssize$1$ph$i | 0; //@line 16315 | |
do { | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment