Showing preview only (3,582K chars total). Download the full file or copy to clipboard to get everything.
Repository: gokulkrishh/qrcodescan.in
Branch: master
Commit: 7418a18ef48e
Files: 24
Total size: 3.4 MB
Directory structure:
gitextract_rj_io85i/
├── .editorconfig
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ └── deploy.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── LICENSE
├── README.md
├── package.json
├── public/
│ ├── CNAME
│ ├── ads.txt
│ ├── decoder.js
│ ├── index.html
│ ├── manifest.json
│ ├── robots.txt
│ └── sitemap.xml
├── rollup.config.js
└── src/
├── css/
│ └── styles.css
└── js/
├── index.js
├── snackbar.js
├── utils.js
└── vendor/
└── qrscan.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
indent_style = tab
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.json]
indent_style = space
indent_size = 2
================================================
FILE: .github/FUNDING.yml
================================================
github: [gokulkrishh]
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/workflows/deploy.yml
================================================
name: github pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v2.1.2
with:
node-version: "12.x"
- name: Cache dependencies
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- run: npm ci
- run: npm run build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
================================================
FILE: .gitignore
================================================
logs
*.log
npm-debug.log*
node_modules
.DS_Store
dist
.env
public/bundle.js
public/bundle.css
public/service-worker.js
public/service-worker.js.map
public/workbox-*.js
================================================
FILE: .prettierignore
================================================
*.json
/dist
app/decoder.js
================================================
FILE: .prettierrc
================================================
{
"printWidth": 140,
"singleQuote": true,
"parser": "babel"
}
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2016 code-kotis
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
### <p align="center"><img width="150px" height="150px" src="https://raw.githubusercontent.com/code-kotis/qr-code-scanner/master/app/images/touch/android-chrome-192x192.png"></p>
# [QR Code Scanner](https://qrcodescan.in)
*QR Code Scanner - a simple, fast and useful progressive web application*
### [Live](https://qrcodescan.in)
## Features
- App Shell
- Offline
- Secure via https
- Responsive
- Add to home screen & Splash screen
- Supported Browser (Mobile & Desktop) - Google Chrome, Firefox, Safari, Opera, Microsoft Edge and now supports iOS as well.
## Installation
1. Clone this repo
```bash
git clone https://github.com/code-kotis/qr-code-scanner
```
2. Installation
```bash
npm install
```
3. Run
```bash
npm run start
```
4. Build
```bash
npm run build
```
### Contributions
If you find a bug, please file an issue. PR's are most welcome ;)
#### MIT Licensed
================================================
FILE: package.json
================================================
{
"name": "qr-code-scanner",
"description": "QR Code Scanner is the fastest and most user-friendly progressive web application.",
"version": "1.0.2",
"scripts": {
"build": "NODE_ENV=production rollup -c",
"watch": "rollup -c -w",
"start": "npm-run-all --parallel serve watch",
"serve": "rollup -c && serve public",
"precommit": "lint-staged",
"pretty": "prettier --write 'src'"
},
"lint-staged": {
"*.{js,css,html}": [
"npm run pretty",
"git add"
]
},
"engines": {
"node": ">=14.0.0"
},
"devDependencies": {
"cross-env": "^7.0.3",
"gh-pages": "^3.2.1",
"husky": "^6.0.0",
"lint-staged": "^11.0.0",
"npm-run-all": "^4.1.5",
"prettier": "^2.3.1",
"rollup": "^2.52.1",
"rollup-plugin-css-only": "^3.1.0",
"rollup-plugin-delete": "^2.0.0",
"rollup-plugin-sizes": "^1.0.4",
"rollup-plugin-terser": "^7.0.2",
"rollup-plugin-workbox": "^6.1.1",
"serve": "^12.0.0"
}
}
================================================
FILE: public/CNAME
================================================
qrcodescan.in
================================================
FILE: public/ads.txt
================================================
google.com, pub-8317178183177647, DIRECT, f08c47fec0942fa0
================================================
FILE: public/decoder.js
================================================
// The main barcode scanning processing function.
// Compiled from zbar.sf.net using emscripten.
//
// Copyright (C) 2013 Yury Delendik
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
self.onmessage = function(imgData) {
postMessage(zbarProcessImageData(imgData.data));
};
function zbarProcessImageData(imgData) {
var result = [];
var Module = {};
Module['imageWidth'] = imgData.width;
Module['imageHeight'] = imgData.height;
Module['getImageData'] = function(grayData) {
var d = imgData.data;
for (var i = 0, j = 0; i < d.length; i += 4, j++) {
grayData[j] = (d[i] * 66 + d[i + 1] * 129 + d[i + 2] * 25 + 4096) >> 8;
}
};
Module['outputResult'] = function(symbol, addon, data) {
result.push([symbol, addon, data]);
};
/* EMSCRIPTEN_CODE */
// 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_NODE = typeof process === 'object' && typeof require === 'function';
var ENVIRONMENT_IS_WEB = typeof window === 'object';
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));
};
Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/');
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;
}
});
} 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;
}
this['Module'] = Module;
} 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_WEB) {
window['Module'] = Module;
} else {
Module['load'] = importScripts;
}
} 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,
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;
},
getAsmConst: function(code, numArgs) {
// code is a constant string on the heap, so we can cache these
if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
var func = Runtime.asmConstCache[code];
if (func) return func;
var args = [];
for (var i = 0; i < numArgs; i++) {
args.push(String.fromCharCode(36) + i); // $0, $1 etc
}
var source = Pointer_stringify(code);
if (source[0] === '"') {
// tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
if (source.indexOf('"', 1) === source.length - 1) {
source = source.substr(1, source.length - 2);
} else {
// something invalid happened, e.g. EM_ASM("..code($0)..", input)
abort(
'invalid EM_ASM input |' +
source +
'|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)'
);
}
}
try {
// Module is the only 'upvar', which we provide directly. We also provide FS for legacy support.
var evalled = eval('(function(Module, FS) { return function(' + args.join(',') + '){ ' + source + ' } })')(
Module,
typeof FS !== 'undefined' ? FS : null
);
} catch (e) {
Module.printErr(
'error in executing inline EM_ASM code: ' +
e +
' on: \n\n' +
source +
'\n\nwith args |' +
args +
'| (make sure to use the right one out of EM_ASM, EM_ASM_ARGS, etc.)'
);
throw e;
}
return (Runtime.asmConstCache[code] = evalled);
},
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];
},
UTF8Processor: function() {
var buffer = [];
var needed = 0;
this.processCChar = function(code) {
code = code & 0xff;
if (buffer.length == 0) {
if ((code & 0x80) == 0x00) {
// 0xxxxxxx
return String.fromCharCode(code);
}
buffer.push(code);
if ((code & 0xe0) == 0xc0) {
// 110xxxxx
needed = 1;
} else if ((code & 0xf0) == 0xe0) {
// 1110xxxx
needed = 2;
} else {
// 11110xxx
needed = 3;
}
return '';
}
if (needed) {
buffer.push(code);
needed--;
if (needed > 0) return '';
}
var c1 = buffer[0];
var c2 = buffer[1];
var c3 = buffer[2];
var c4 = buffer[3];
var ret;
if (buffer.length == 2) {
ret = String.fromCharCode(((c1 & 0x1f) << 6) | (c2 & 0x3f));
} else if (buffer.length == 3) {
ret = String.fromCharCode(((c1 & 0x0f) << 12) | ((c2 & 0x3f) << 6) | (c3 & 0x3f));
} else {
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3f) << 12) | ((c3 & 0x3f) << 6) | (c4 & 0x3f);
ret = String.fromCharCode((((codePoint - 0x10000) / 0x400) | 0) + 0xd800, ((codePoint - 0x10000) % 0x400) + 0xdc00);
}
buffer.length = 0;
return ret;
};
this.processJSString = function processJSString(string) {
/* TODO: use TextEncoder when present,
var encoder = new TextEncoder();
encoder['encoding'] = "utf-8";
var utf8Array = encoder['encode'](aMsg.data);
*/
string = unescape(encodeURIComponent(string));
var ret = [];
for (var i = 0; i < string.length; i++) {
ret.push(string.charCodeAt(i));
}
return ret;
};
},
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) enlargeMemory();
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.0 : +(low >>> 0) + +(high | 0) * 4294967296.0;
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 stack = 0;
var JSfuncs = {
stackSave: function() {
stack = Runtime.stackSave();
},
stackRestore: function() {
Runtime.stackRestore(stack);
},
// 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) {
var func = getCFunc(ident);
var cArgs = [];
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) JSfuncs['stackRestore']();
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 += 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 + ';';
}
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.0
? tempDouble > 0.0
? (Math_min(+Math_floor(tempDouble / 4294967296.0), 4294967295.0) | 0) >>> 0
: ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 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;
function Pointer_stringify(ptr, /* optional */ length) {
if (length === 0) return '';
// TODO: use TextDecoder
// Find the length, and check for UTF while doing so
var hasUtf = false;
var t;
var i = 0;
while (1) {
t = HEAPU8[(ptr + i) >> 0];
if (t >= 128) hasUtf = true;
else if (t == 0 && !length) break;
i++;
if (length && i == length) break;
}
if (!length) length = i;
var ret = '';
if (!hasUtf) {
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;
}
var utf8 = new Runtime.UTF8Processor();
for (i = 0; i < length; i++) {
t = HEAPU8[(ptr + i) >> 0];
ret += utf8.processCChar(t);
}
return ret;
}
Module['Pointer_stringify'] = Pointer_stringify;
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;
function stringToUTF16(str, outPtr) {
for (var i = 0; i < str.length; ++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 + i * 2) >> 1] = codeUnit;
}
// Null-terminate the pointer to the HEAP.
HEAP16[(outPtr + str.length * 2) >> 1] = 0;
}
Module['stringToUTF16'] = stringToUTF16;
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.
if (utf32 >= 0x10000) {
var ch = utf32 - 0x10000;
str += String.fromCharCode(0xd800 | (ch >> 10), 0xdc00 | (ch & 0x3ff));
} else {
str += String.fromCharCode(utf32);
}
}
}
Module['UTF32ToString'] = UTF32ToString;
function stringToUTF32(str, outPtr) {
var iChar = 0;
for (var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
// 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.
var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
if (codeUnit >= 0xd800 && codeUnit <= 0xdfff) {
var trailSurrogate = str.charCodeAt(++iCodeUnit);
codeUnit = (0x10000 + ((codeUnit & 0x3ff) << 10)) | (trailSurrogate & 0x3ff);
}
HEAP32[(outPtr + iChar * 4) >> 2] = codeUnit;
++iChar;
}
// Null-terminate the pointer to the HEAP.
HEAP32[(outPtr + iChar * 4) >> 2] = 0;
}
Module['stringToUTF32'] = stringToUTF32;
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 final = 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()';
}
final = parse();
} catch (e) {
final += '?';
}
if (final.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 final;
}
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) {
return (x + 4095) & -4096;
}
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 FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
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');
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 = 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 ret = new Runtime.UTF8Processor().processJSString(stringy);
if (length) {
ret.length = length;
}
if (!dontAddNull) {
ret.push(0);
}
return ret;
}
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 + i) >> 0] = array[i];
}
}
Module['writeArrayToMemory'] = writeArrayToMemory;
function writeAsciiToMemory(str, buffer, dontAddNull) {
for (var i = 0; i < str.length; i++) {
HEAP8[(buffer + i) >> 0] = str.charCodeAt(i);
}
if (!dontAddNull) HEAP8[(buffer + str.length) >> 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'];
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;
// 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 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 ===
STATIC_BASE = 8;
STATICTOP = STATIC_BASE + 134416;
/* global initializers */ __ATINIT__.push();
/* memory initializer */ allocate(
[
0,
0,
0,
0,
0,
0,
0,
0,
112,
114,
111,
99,
101,
115,
115,
111,
114,
0,
0,
0,
0,
0,
0,
0,
46,
46,
47,
116,
101,
109,
112,
108,
97,
116,
101,
115,
47,
122,
98,
97,
114,
45,
109,
97,
105,
110,
46,
99,
0,
0,
0,
0,
0,
0,
0,
0,
109,
97,
105,
110,
0,
0,
0,
0,
122,
105,
109,
97,
103,
101,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
99,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
101,
114,
114,
111,
114,
95,
115,
112,
101,
119,
0,
0,
0,
0,
0,
0,
0,
0,
37,
115,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
122,
98,
97,
114,
32,
37,
115,
32,
105,
110,
32,
37,
115,
40,
41,
58,
10,
32,
32,
32,
32,
37,
115,
58,
32,
0,
0,
0,
95,
122,
98,
97,
114,
95,
101,
114,
114,
111,
114,
95,
115,
116,
114,
105,
110,
103,
0,
0,
0,
0,
0,
0,
184,
2,
0,
0,
200,
2,
0,
0,
208,
2,
0,
0,
216,
2,
0,
0,
224,
2,
0,
0,
0,
0,
0,
0,
136,
2,
0,
0,
152,
2,
0,
0,
160,
2,
0,
0,
168,
2,
0,
0,
16,
1,
0,
0,
0,
0,
0,
0,
60,
117,
110,
107,
110,
111,
119,
110,
62,
0,
0,
0,
0,
0,
0,
0,
128,
1,
0,
0,
144,
1,
0,
0,
160,
1,
0,
0,
184,
1,
0,
0,
208,
1,
0,
0,
224,
1,
0,
0,
240,
1,
0,
0,
0,
2,
0,
0,
24,
2,
0,
0,
48,
2,
0,
0,
72,
2,
0,
0,
96,
2,
0,
0,
120,
2,
0,
0,
0,
0,
0,
0,
60,
63,
62,
0,
0,
0,
0,
0,
37,
100,
0,
0,
0,
0,
0,
0,
37,
120,
0,
0,
0,
0,
0,
0,
58,
32,
37,
115,
32,
40,
37,
100,
41,
10,
0,
0,
0,
0,
0,
0,
110,
111,
32,
101,
114,
114,
111,
114,
0,
0,
0,
0,
0,
0,
0,
0,
111,
117,
116,
32,
111,
102,
32,
109,
101,
109,
111,
114,
121,
0,
0,
0,
105,
110,
116,
101,
114,
110,
97,
108,
32,
108,
105,
98,
114,
97,
114,
121,
32,
101,
114,
114,
111,
114,
0,
0,
117,
110,
115,
117,
112,
112,
111,
114,
116,
101,
100,
32,
114,
101,
113,
117,
101,
115,
116,
0,
0,
0,
0,
0,
105,
110,
118,
97,
108,
105,
100,
32,
114,
101,
113,
117,
101,
115,
116,
0,
115,
121,
115,
116,
101,
109,
32,
101,
114,
114,
111,
114,
0,
0,
0,
0,
108,
111,
99,
107,
105,
110,
103,
32,
101,
114,
114,
111,
114,
0,
0,
0,
97,
108,
108,
32,
114,
101,
115,
111,
117,
114,
99,
101,
115,
32,
98,
117,
115,
121,
0,
0,
0,
0,
0,
0,
88,
49,
49,
32,
100,
105,
115,
112,
108,
97,
121,
32,
101,
114,
114,
111,
114,
0,
0,
0,
0,
0,
0,
0,
88,
49,
49,
32,
112,
114,
111,
116,
111,
99,
111,
108,
32,
101,
114,
114,
111,
114,
0,
0,
0,
0,
0,
0,
111,
117,
116,
112,
117,
116,
32,
119,
105,
110,
100,
111,
119,
32,
105,
115,
32,
99,
108,
111,
115,
101,
100,
0,
119,
105,
110,
100,
111,
119,
115,
32,
115,
121,
115,
116,
101,
109,
32,
101,
114,
114,
111,
114,
0,
0,
0,
0,
117,
110,
107,
110,
111,
119,
110,
32,
101,
114,
114,
111,
114,
0,
0,
0,
112,
114,
111,
99,
101,
115,
115,
111,
114,
0,
0,
0,
0,
0,
0,
0,
118,
105,
100,
101,
111,
0,
0,
0,
119,
105,
110,
100,
111,
119,
0,
0,
105,
109,
97,
103,
101,
32,
115,
99,
97,
110,
110,
101,
114,
0,
0,
0,
70,
65,
84,
65,
76,
32,
69,
82,
82,
79,
82,
0,
0,
0,
0,
0,
69,
82,
82,
79,
82,
0,
0,
0,
79,
75,
0,
0,
0,
0,
0,
0,
87,
65,
82,
78,
73,
78,
71,
0,
78,
79,
84,
69,
0,
0,
0,
0,
105,
109,
103,
45,
62,
114,
101,
102,
99,
110,
116,
0,
0,
0,
0,
0,
122,
98,
97,
114,
47,
105,
109,
97,
103,
101,
46,
99,
0,
0,
0,
0,
122,
98,
97,
114,
95,
105,
109,
97,
103,
101,
95,
102,
114,
101,
101,
95,
100,
97,
116,
97,
0,
0,
0,
0,
37,
115,
46,
37,
46,
52,
115,
46,
122,
105,
109,
103,
0,
0,
0,
0,
37,
115,
46,
37,
48,
56,
120,
46,
122,
105,
109,
103,
0,
0,
0,
0,
110,
32,
60,
32,
108,
101,
110,
32,
45,
32,
49,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
105,
109,
97,
103,
101,
95,
119,
114,
105,
116,
101,
0,
0,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
100,
117,
109,
112,
105,
110,
103,
32,
37,
46,
52,
115,
40,
37,
48,
56,
120,
41,
32,
105,
109,
97,
103,
101,
32,
116,
111,
32,
37,
115,
10,
0,
0,
0,
0,
0,
119,
0,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
69,
82,
82,
79,
82,
32,
111,
112,
101,
110,
105,
110,
103,
32,
37,
115,
58,
32,
37,
115,
10,
0,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
69,
82,
82,
79,
82,
32,
119,
114,
105,
116,
105,
110,
103,
32,
37,
115,
58,
32,
37,
115,
10,
0,
0,
0,
0,
0,
0,
0,
114,
99,
32,
62,
61,
32,
48,
0,
46,
47,
122,
98,
97,
114,
47,
114,
101,
102,
99,
110,
116,
46,
104,
0,
95,
122,
98,
97,
114,
95,
114,
101,
102,
99,
110,
116,
0,
0,
0,
0,
122,
98,
97,
114,
0,
0,
0,
0,
37,
115,
58,
32,
112,
114,
111,
99,
101,
115,
115,
105,
110,
103,
58,
32,
37,
46,
52,
115,
40,
37,
48,
56,
120,
41,
32,
37,
100,
120,
37,
100,
32,
64,
37,
112,
10,
0,
0,
0,
95,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
95,
105,
109,
97,
103,
101,
0,
0,
0,
0,
0,
37,
115,
58,
32,
37,
115,
58,
32,
37,
115,
32,
40,
37,
100,
32,
112,
116,
115,
41,
32,
40,
100,
105,
114,
61,
37,
100,
41,
32,
40,
113,
61,
37,
100,
41,
32,
40,
37,
115,
41,
10,
0,
0,
0,
0,
0,
0,
0,
117,
110,
99,
101,
114,
116,
97,
105,
110,
0,
0,
0,
0,
0,
0,
0,
100,
117,
112,
108,
105,
99,
97,
116,
101,
0,
0,
0,
0,
0,
0,
0,
110,
101,
119,
0,
0,
0,
0,
0,
117,
110,
107,
110,
111,
119,
110,
32,
105,
109,
97,
103,
101,
32,
102,
111,
114,
109,
97,
116,
0,
0,
0,
0,
33,
112,
114,
111,
99,
45,
62,
119,
97,
105,
116,
95,
104,
101,
97,
100,
0,
0,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
47,
112,
114,
111,
99,
101,
115,
115,
111,
114,
46,
99,
0,
0,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
100,
101,
115,
116,
114,
111,
121,
0,
0,
33,
112,
114,
111,
99,
45,
62,
119,
97,
105,
116,
95,
116,
97,
105,
108,
0,
0,
0,
0,
0,
0,
0,
0,
33,
112,
114,
111,
99,
45,
62,
119,
97,
105,
116,
95,
110,
101,
120,
116,
0,
0,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
105,
110,
105,
116,
0,
0,
0,
0,
0,
97,
108,
108,
111,
99,
97,
116,
105,
110,
103,
32,
119,
105,
110,
100,
111,
119,
32,
114,
101,
115,
111,
117,
114,
99,
101,
115,
0,
0,
0,
0,
0,
97,
108,
108,
111,
99,
97,
116,
105,
110,
103,
32,
118,
105,
100,
101,
111,
32,
114,
101,
115,
111,
117,
114,
99,
101,
115,
0,
0,
0,
0,
0,
0,
115,
112,
97,
119,
110,
105,
110,
103,
32,
118,
105,
100,
101,
111,
32,
116,
104,
114,
101,
97,
100,
0,
0,
0,
115,
112,
97,
119,
110,
105,
110,
103,
32,
105,
110,
112,
117,
116,
32,
116,
104,
114,
101,
97,
100,
0,
0,
0,
87,
65,
82,
78,
73,
78,
71,
58,
32,
110,
111,
32,
99,
111,
109,
112,
97,
116,
105,
98,
108,
101,
32,
105,
110,
112,
117,
116,
32,
116,
111,
32,
111,
117,
116,
112,
117,
116,
32,
102,
111,
114,
109,
97,
116,
10,
46,
46,
46,
116,
114,
121,
105,
110,
103,
32,
97,
103,
97,
105,
110,
32,
119,
105,
116,
104,
32,
111,
117,
116,
112,
117,
116,
32,
100,
105,
115,
97,
98,
108,
101,
100,
10,
0,
0,
0,
0,
0,
37,
115,
58,
32,
69,
82,
82,
79,
82,
58,
32,
110,
111,
32,
99,
111,
109,
112,
97,
116,
105,
98,
108,
101,
32,
37,
115,
32,
102,
111,
114,
109,
97,
116,
10,
0,
0,
0,
0,
0,
118,
105,
100,
101,
111,
32,
105,
110,
112,
117,
116,
0,
0,
0,
0,
0,
119,
105,
110,
100,
111,
119,
32,
111,
117,
116,
112,
117,
116,
0,
0,
0,
110,
111,
32,
99,
111,
109,
112,
97,
116,
105,
98,
108,
101,
32,
105,
109,
97,
103,
101,
32,
102,
111,
114,
109,
97,
116,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
117,
115,
101,
114,
95,
119,
97,
105,
116,
0,
0,
0,
0,
0,
0,
0,
0,
100,
105,
115,
112,
108,
97,
121,
32,
119,
105,
110,
100,
111,
119,
32,
110,
111,
116,
32,
97,
118,
97,
105,
108,
97,
98,
108,
101,
32,
102,
111,
114,
32,
105,
110,
112,
117,
116,
0,
0,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
115,
101,
116,
95,
97,
99,
116,
105,
118,
101,
0,
0,
0,
0,
0,
0,
0,
118,
105,
100,
101,
111,
32,
105,
110,
112,
117,
116,
32,
110,
111,
116,
32,
105,
110,
105,
116,
105,
97,
108,
105,
122,
101,
100,
0,
0,
0,
0,
0,
122,
98,
97,
114,
32,
98,
97,
114,
99,
111,
100,
101,
32,
114,
101,
97,
100,
101,
114,
0,
0,
0,
0,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
104,
0,
0,
101,
114,
114,
95,
99,
108,
101,
97,
110,
117,
112,
0,
0,
0,
0,
0,
101,
114,
114,
95,
99,
97,
112,
116,
117,
114,
101,
0,
0,
0,
0,
0,
100,
115,
116,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
101,
114,
114,
95,
99,
111,
112,
121,
0,
0,
0,
0,
0,
0,
0,
0,
115,
114,
99,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
69,
65,
78,
45,
50,
0,
0,
0,
69,
65,
78,
45,
53,
0,
0,
0,
69,
65,
78,
45,
56,
0,
0,
0,
85,
80,
67,
45,
69,
0,
0,
0,
73,
83,
66,
78,
45,
49,
48,
0,
85,
80,
67,
45,
65,
0,
0,
0,
69,
65,
78,
45,
49,
51,
0,
0,
73,
83,
66,
78,
45,
49,
51,
0,
67,
79,
77,
80,
79,
83,
73,
84,
69,
0,
0,
0,
0,
0,
0,
0,
73,
50,
47,
53,
0,
0,
0,
0,
68,
97,
116,
97,
66,
97,
114,
0,
68,
97,
116,
97,
66,
97,
114,
45,
69,
120,
112,
0,
0,
0,
0,
0,
67,
111,
100,
97,
98,
97,
114,
0,
67,
79,
68,
69,
45,
51,
57,
0,
67,
79,
68,
69,
45,
57,
51,
0,
67,
79,
68,
69,
45,
49,
50,
56,
0,
0,
0,
0,
0,
0,
0,
0,
80,
68,
70,
52,
49,
55,
0,
0,
81,
82,
45,
67,
111,
100,
101,
0,
85,
78,
75,
78,
79,
87,
78,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
16,
17,
255,
17,
22,
12,
5,
6,
8,
255,
4,
3,
7,
18,
255,
255,
255,
255,
255,
255,
255,
2,
255,
0,
18,
12,
11,
29,
10,
0,
103,
48,
32,
62,
61,
32,
48,
32,
38,
38,
32,
103,
49,
32,
62,
61,
32,
48,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
47,
115,
121,
109,
98,
111,
108,
46,
99,
0,
0,
0,
95,
122,
98,
97,
114,
95,
103,
101,
116,
95,
115,
121,
109,
98,
111,
108,
95,
104,
97,
115,
104,
0,
0,
0,
114,
99,
32,
62,
61,
32,
48,
0,
46,
47,
122,
98,
97,
114,
47,
114,
101,
102,
99,
110,
116,
46,
104,
0,
95,
122,
98,
97,
114,
95,
114,
101,
102,
99,
110,
116,
0,
0,
0,
0,
37,
115,
58,
32,
99,
108,
111,
115,
101,
100,
32,
99,
97,
109,
101,
114,
97,
32,
40,
102,
100,
61,
37,
100,
41,
10,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
111,
112,
101,
110,
0,
47,
100,
101,
118,
47,
118,
105,
100,
101,
111,
48,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
103,
101,
116,
95,
102,
100,
0,
0,
0,
0,
0,
0,
0,
118,
105,
100,
101,
111,
32,
100,
101,
118,
105,
99,
101,
32,
110,
111,
116,
32,
111,
112,
101,
110,
101,
100,
0,
118,
105,
100,
101,
111,
32,
100,
114,
105,
118,
101,
114,
32,
100,
111,
101,
115,
32,
110,
111,
116,
32,
115,
117,
112,
112,
111,
114,
116,
32,
112,
111,
108,
108,
105,
110,
103,
0,
0,
0,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
114,
101,
113,
117,
101,
115,
116,
95,
115,
105,
122,
101,
0,
97,
108,
114,
101,
97,
100,
121,
32,
105,
110,
105,
116,
105,
97,
108,
105,
122,
101,
100,
44,
32,
117,
110,
97,
98,
108,
101,
32,
116,
111,
32,
114,
101,
115,
105,
122,
101,
0,
0,
0,
37,
115,
58,
32,
114,
101,
113,
117,
101,
115,
116,
32,
115,
105,
122,
101,
58,
32,
37,
100,
32,
120,
32,
37,
100,
10,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
114,
101,
113,
117,
101,
115,
116,
95,
105,
110,
116,
101,
114,
102,
97,
99,
101,
0,
0,
0,
0,
100,
101,
118,
105,
99,
101,
32,
97,
108,
114,
101,
97,
100,
121,
32,
111,
112,
101,
110,
101,
100,
44,
32,
117,
110,
97,
98,
108,
101,
32,
116,
111,
32,
99,
104,
97,
110,
103,
101,
32,
105,
110,
116,
101,
114,
102,
97,
99,
101,
0,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
114,
101,
113,
117,
101,
115,
116,
32,
105,
110,
116,
101,
114,
102,
97,
99,
101,
32,
118,
101,
114,
115,
105,
111,
110,
32,
37,
100,
10,
0,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
114,
101,
113,
117,
101,
115,
116,
95,
105,
111,
109,
111,
100,
101,
0,
0,
0,
0,
0,
0,
0,
100,
101,
118,
105,
99,
101,
32,
97,
108,
114,
101,
97,
100,
121,
32,
111,
112,
101,
110,
101,
100,
44,
32,
117,
110,
97,
98,
108,
101,
32,
116,
111,
32,
99,
104,
97,
110,
103,
101,
32,
105,
111,
109,
111,
100,
101,
0,
0,
105,
110,
118,
97,
108,
105,
100,
32,
105,
111,
109,
111,
100,
101,
32,
114,
101,
113,
117,
101,
115,
116,
101,
100,
0,
0,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
105,
110,
105,
116,
0,
97,
108,
114,
101,
97,
100,
121,
32,
105,
110,
105,
116,
105,
97,
108,
105,
122,
101,
100,
44,
32,
114,
101,
45,
105,
110,
105,
116,
32,
117,
110,
105,
109,
112,
108,
101,
109,
101,
110,
116,
101,
100,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
101,
110,
97,
98,
108,
101,
0,
0,
0,
0,
0,
0,
0,
105,
109,
103,
0,
0,
0,
0,
0,
122,
98,
97,
114,
47,
118,
105,
100,
101,
111,
46,
99,
0,
0,
0,
0,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
110,
101,
120,
116,
95,
105,
109,
97,
103,
101,
0,
0,
0,
114,
99,
32,
62,
61,
32,
48,
0,
46,
47,
122,
98,
97,
114,
47,
114,
101,
102,
99,
110,
116,
46,
104,
0,
95,
122,
98,
97,
114,
95,
114,
101,
102,
99,
110,
116,
0,
0,
0,
0,
118,
100,
111,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
114,
101,
99,
121,
99,
108,
101,
95,
115,
104,
97,
100,
111,
119,
0,
0,
0,
0,
0,
0,
105,
109,
103,
45,
62,
115,
114,
99,
105,
100,
120,
32,
61,
61,
32,
45,
49,
0,
0,
0,
0,
0,
0,
0,
118,
100,
111,
45,
62,
100,
97,
116,
97,
108,
101,
110,
0,
0,
0,
0,
118,
105,
100,
101,
111,
95,
105,
110,
105,
116,
95,
105,
109,
97,
103,
101,
115,
0,
0,
0,
0,
0,
0,
0,
33,
118,
100,
111,
45,
62,
98,
117,
102,
0,
0,
0,
0,
0,
0,
0,
117,
110,
97,
98,
108,
101,
32,
116,
111,
32,
97,
108,
108,
111,
99,
97,
116,
101,
32,
105,
109,
97,
103,
101,
32,
98,
117,
102,
102,
101,
114,
115,
0,
0,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
112,
114,
101,
45,
97,
108,
108,
111,
99,
97,
116,
101,
100,
32,
37,
100,
32,
37,
115,
32,
98,
117,
102,
102,
101,
114,
115,
32,
115,
105,
122,
101,
61,
48,
120,
37,
108,
120,
10,
0,
0,
0,
0,
0,
82,
69,
65,
68,
0,
0,
0,
0,
85,
83,
69,
82,
80,
84,
82,
0,
37,
115,
58,
32,
32,
32,
32,
32,
91,
37,
48,
50,
100,
93,
32,
64,
37,
48,
56,
108,
120,
10,
0,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
104,
0,
0,
101,
114,
114,
95,
99,
97,
112,
116,
117,
114,
101,
0,
0,
0,
0,
0,
101,
114,
114,
95,
99,
108,
101,
97,
110,
117,
112,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
114,
101,
99,
121,
99,
108,
101,
95,
105,
109,
97,
103,
101,
0,
0,
0,
0,
0,
0,
0,
105,
109,
103,
45,
62,
115,
114,
99,
105,
100,
120,
32,
62,
61,
32,
48,
0,
0,
0,
0,
0,
0,
0,
0,
114,
99,
32,
62,
61,
32,
48,
0,
46,
47,
122,
98,
97,
114,
47,
114,
101,
102,
99,
110,
116,
46,
104,
0,
95,
122,
98,
97,
114,
95,
114,
101,
102,
99,
110,
116,
0,
0,
0,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
104,
0,
0,
101,
114,
114,
95,
99,
108,
101,
97,
110,
117,
112,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
111,
112,
101,
110,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
99,
108,
111,
115,
101,
0,
0,
0,
95,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
115,
101,
116,
95,
115,
105,
122,
101,
0,
0,
0,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
105,
110,
118,
97,
108,
105,
100,
97,
116,
101,
0,
0,
0,
0,
0,
0,
110,
111,
116,
32,
99,
111,
109,
112,
105,
108,
101,
100,
32,
119,
105,
116,
104,
32,
111,
117,
116,
112,
117,
116,
32,
119,
105,
110,
100,
111,
119,
32,
115,
117,
112,
112,
111,
114,
116,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
104,
0,
0,
101,
114,
114,
95,
99,
97,
112,
116,
117,
114,
101,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
119,
105,
110,
100,
111,
119,
95,
97,
116,
116,
97,
99,
104,
0,
0,
0,
0,
0,
110,
111,
116,
32,
99,
111,
109,
112,
105,
108,
101,
100,
32,
119,
105,
116,
104,
32,
111,
117,
116,
112,
117,
116,
32,
119,
105,
110,
100,
111,
119,
32,
115,
117,
112,
112,
111,
114,
116,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
104,
0,
0,
101,
114,
114,
95,
99,
97,
112,
116,
117,
114,
101,
0,
0,
0,
0,
0,
112,
114,
111,
99,
45,
62,
108,
111,
99,
107,
95,
108,
101,
118,
101,
108,
32,
62,
32,
48,
0,
0,
0,
0,
122,
98,
97,
114,
47,
112,
114,
111,
99,
101,
115,
115,
111,
114,
47,
108,
111,
99,
107,
46,
99,
0,
0,
0,
95,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
117,
110,
108,
111,
99,
107,
0,
0,
119,
32,
61,
61,
32,
119,
97,
105,
116,
101,
114,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
119,
97,
105,
116,
0,
0,
0,
0,
112,
114,
111,
99,
45,
62,
108,
111,
99,
107,
95,
108,
101,
118,
101,
108,
32,
61,
61,
32,
49,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
112,
114,
111,
99,
101,
115,
115,
111,
114,
95,
105,
110,
105,
116,
0,
0,
0,
0,
102,
97,
105,
108,
101,
100,
32,
116,
111,
32,
111,
112,
101,
110,
32,
112,
105,
112,
101,
0,
0,
0,
0,
0,
37,
115,
58,
32,
91,
37,
100,
93,
32,
102,
100,
61,
37,
100,
32,
110,
61,
37,
100,
10,
0,
0,
0,
0,
114,
101,
109,
111,
118,
101,
95,
112,
111,
108,
108,
0,
0,
0,
0,
0,
37,
115,
58,
32,
107,
105,
99,
107,
105,
110,
103,
32,
37,
100,
32,
102,
100,
115,
10,
0,
0,
0,
0,
0,
112,
114,
111,
99,
95,
107,
105,
99,
107,
95,
104,
97,
110,
100,
108,
101,
114,
0,
0,
0,
0,
0,
0,
0,
112,
114,
111,
99,
45,
62,
116,
104,
114,
101,
97,
100,
101,
100,
0,
0,
122,
98,
97,
114,
47,
112,
114,
111,
99,
101,
115,
115,
111,
114,
47,
112,
111,
115,
105,
120,
46,
99,
0,
0,
37,
115,
58,
32,
91,
37,
100,
93,
32,
102,
100,
61,
37,
100,
32,
104,
97,
110,
100,
108,
101,
114,
61,
37,
112,
10,
0,
0,
0,
0,
0,
0,
97,
100,
100,
95,
112,
111,
108,
108,
0,
0,
0,
0,
0,
0,
0,
0,
115,
116,
97,
116,
101,
45,
62,
107,
105,
99,
107,
95,
102,
100,
115,
91,
49,
93,
32,
62,
61,
32,
48,
0,
122,
98,
97,
114,
47,
112,
114,
111,
99,
101,
115,
115,
111,
114,
47,
112,
111,
115,
105,
120,
46,
104,
0,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
104,
0,
0,
101,
114,
114,
95,
99,
97,
112,
116,
117,
114,
101,
0,
0,
0,
0,
0,
112,
45,
62,
110,
117,
109,
0,
0,
112,
114,
111,
99,
95,
112,
111,
108,
108,
95,
105,
110,
112,
117,
116,
115,
0,
0,
0,
0,
0,
0,
0,
0,
33,
114,
99,
0,
0,
0,
0,
0,
116,
105,
109,
101,
111,
117,
116,
32,
62,
32,
48,
0,
0,
0,
0,
0,
112,
114,
111,
99,
95,
115,
108,
101,
101,
112,
0,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
118,
105,
100,
101,
111,
95,
111,
112,
101,
110,
0,
0,
0,
0,
0,
0,
0,
0,
110,
111,
116,
32,
99,
111,
109,
112,
105,
108,
101,
100,
32,
119,
105,
116,
104,
32,
118,
105,
100,
101,
111,
32,
105,
110,
112,
117,
116,
32,
115,
117,
112,
112,
111,
114,
116,
0,
0,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
104,
0,
0,
101,
114,
114,
95,
99,
97,
112,
116,
117,
114,
101,
0,
0,
0,
0,
0,
52,
50,
50,
80,
73,
52,
50,
48,
89,
85,
49,
50,
89,
86,
49,
50,
52,
49,
49,
80,
78,
86,
49,
50,
78,
86,
50,
49,
89,
85,
89,
86,
85,
89,
86,
89,
89,
85,
89,
50,
89,
85,
86,
52,
82,
71,
66,
51,
3,
0,
0,
0,
66,
71,
82,
51,
82,
71,
66,
52,
66,
71,
82,
52,
82,
71,
66,
80,
82,
71,
66,
79,
82,
71,
66,
82,
82,
71,
66,
81,
89,
85,
86,
57,
89,
86,
85,
57,
71,
82,
69,
89,
89,
56,
48,
48,
89,
56,
32,
32,
89,
56,
0,
0,
82,
71,
66,
49,
82,
52,
52,
52,
66,
65,
56,
49,
89,
52,
49,
80,
89,
52,
52,
52,
89,
85,
86,
79,
72,
77,
49,
50,
72,
73,
50,
52,
74,
80,
69,
71,
77,
74,
80,
71,
77,
80,
69,
71,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
8,
0,
0,
0,
2,
0,
0,
0,
24,
0,
0,
0,
3,
0,
0,
0,
32,
0,
0,
0,
4,
0,
0,
0,
8,
0,
0,
0,
2,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
1,
0,
0,
0,
1,
0,
0,
0,
48,
0,
0,
0,
5,
0,
0,
0,
64,
0,
0,
0,
3,
0,
0,
0,
128,
0,
0,
0,
4,
0,
0,
0,
40,
0,
0,
0,
2,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
24,
0,
0,
0,
6,
0,
0,
0,
52,
0,
0,
0,
6,
0,
0,
0,
20,
0,
0,
0,
7,
0,
0,
0,
144,
0,
0,
0,
8,
0,
0,
0,
18,
0,
0,
0,
6,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
112,
0,
0,
0,
9,
0,
0,
0,
160,
0,
0,
0,
9,
0,
0,
0,
144,
0,
0,
0,
10,
0,
0,
0,
120,
0,
0,
0,
11,
0,
0,
0,
152,
0,
0,
0,
9,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
1,
0,
0,
0,
1,
0,
0,
0,
8,
0,
0,
0,
2,
0,
0,
0,
24,
0,
0,
0,
3,
0,
0,
0,
32,
0,
0,
0,
4,
0,
0,
0,
8,
0,
0,
0,
2,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
255,
255,
255,
255,
0,
0,
0,
0,
37,
115,
58,
32,
115,
104,
97,
114,
101,
100,
32,
102,
111,
114,
109,
97,
116,
58,
32,
37,
52,
46,
52,
115,
10,
0,
0,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
98,
101,
115,
116,
95,
102,
111,
114,
109,
97,
116,
0,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
102,
114,
111,
109,
32,
37,
46,
52,
115,
40,
37,
48,
56,
120,
41,
32,
116,
111,
0,
0,
32,
37,
46,
52,
115,
40,
37,
48,
56,
120,
41,
61,
37,
100,
0,
0,
89,
56,
48,
48,
0,
0,
0,
0,
122,
98,
97,
114,
95,
110,
101,
103,
111,
116,
105,
97,
116,
101,
95,
102,
111,
114,
109,
97,
116,
0,
0,
0,
105,
109,
97,
103,
101,
32,
102,
111,
114,
109,
97,
116,
32,
108,
105,
115,
116,
32,
105,
115,
32,
110,
111,
116,
32,
115,
111,
114,
116,
101,
100,
33,
63,
0,
0,
0,
0,
0,
0,
0,
110,
111,
32,
105,
110,
112,
117,
116,
32,
111,
114,
32,
111,
117,
116,
112,
117,
116,
32,
102,
111,
114,
109,
97,
116,
115,
32,
97,
118,
97,
105,
108,
97,
98,
108,
101,
0,
0,
0,
0,
37,
115,
58,
32,
37,
46,
52,
115,
40,
37,
48,
56,
120,
41,
32,
45,
62,
32,
63,
32,
40,
117,
110,
115,
117,
112,
112,
111,
114,
116,
101,
100,
41,
10,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
37,
46,
52,
115,
40,
37,
48,
56,
120,
41,
32,
45,
62,
32,
37,
46,
52,
115,
40,
37,
48,
56,
120,
41,
32,
40,
37,
100,
41,
10,
0,
0,
0,
0,
0,
0,
110,
111,
32,
115,
117,
112,
112,
111,
114,
116,
101,
100,
32,
105,
109,
97,
103,
101,
32,
102,
111,
114,
109,
97,
116,
115,
32,
97,
118,
97,
105,
108,
97,
98,
108,
101,
0,
0,
0,
0,
37,
115,
58,
32,
115,
101,
116,
116,
105,
110,
103,
32,
98,
101,
115,
116,
32,
102,
111,
114,
109,
97,
116,
32,
37,
46,
52,
115,
40,
37,
48,
56,
120,
41,
32,
40,
37,
100,
41,
10,
0,
0,
0,
0,
0,
0,
0,
0,
101,
114,
114,
45,
62,
109,
97,
103,
105,
99,
32,
61,
61,
32,
69,
82,
82,
73,
78,
70,
79,
95,
77,
65,
71,
73,
67,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
101,
114,
114,
111,
114,
46,
104,
0,
0,
101,
114,
114,
95,
99,
97,
112,
116,
117,
114,
101,
0,
0,
0,
0,
0,
69,
82,
82,
79,
82,
58,
32,
105,
109,
97,
103,
101,
32,
102,
111,
114,
109,
97,
116,
32,
108,
105,
115,
116,
32,
105,
115,
32,
110,
111,
116,
32,
115,
111,
114,
116,
101,
100,
33,
63,
10,
0,
0,
0,
0,
0,
0,
0,
115,
114,
99,
45,
62,
100,
97,
116,
97,
108,
101,
110,
32,
62,
61,
32,
40,
115,
114,
99,
45,
62,
119,
105,
100,
116,
104,
32,
42,
32,
115,
114,
99,
45,
62,
104,
101,
105,
103,
104,
116,
32,
42,
32,
115,
114,
99,
102,
109,
116,
45,
62,
112,
46,
114,
103,
98,
46,
98,
112,
112,
41,
0,
0,
122,
98,
97,
114,
47,
99,
111,
110,
118,
101,
114,
116,
46,
99,
0,
0,
99,
111,
110,
118,
101,
114,
116,
95,
114,
103,
98,
95,
114,
101,
115,
97,
109,
112,
108,
101,
0,
0,
0,
0,
99,
111,
110,
118,
101,
114,
116,
95,
114,
103,
98,
95,
116,
111,
95,
121,
117,
118,
0,
0,
0,
0,
0,
0,
99,
111,
110,
118,
101,
114,
116,
95,
114,
103,
98,
95,
116,
111,
95,
121,
117,
118,
112,
0,
0,
0,
0,
0,
115,
114,
99,
45,
62,
100,
97,
116,
97,
108,
101,
110,
32,
62,
61,
32,
40,
115,
114,
99,
45,
62,
119,
105,
100,
116,
104,
32,
42,
32,
115,
114,
99,
45,
62,
104,
101,
105,
103,
104,
116,
32,
43,
32,
117,
118,
112,
95,
115,
105,
122,
101,
40,
115,
114,
99,
44,
32,
115,
114,
99,
102,
109,
116,
41,
32,
42,
32,
50,
41,
0,
0,
99,
111,
110,
118,
101,
114,
116,
95,
121,
117,
118,
95,
116,
111,
95,
114,
103,
98,
0,
0,
0,
0,
0,
0,
115,
114,
99,
102,
109,
116,
45,
62,
112,
46,
121,
117,
118,
46,
120,
115,
117,
98,
50,
32,
61,
61,
32,
49,
0,
0,
0,
0,
0,
0,
0,
0,
115,
114,
99,
45,
62,
100,
97,
116,
97,
108,
101,
110,
32,
62,
61,
32,
115,
114,
99,
110,
32,
43,
32,
50,
32,
42,
32,
115,
114,
99,
109,
0,
99,
111,
110,
118,
101,
114,
116,
95,
121,
117,
118,
112,
95,
116,
111,
95,
114,
103,
98,
0,
0,
0,
0,
0,
115,
114,
99,
45,
62,
100,
97,
116,
97,
108,
101,
110,
32,
62,
61,
32,
115,
114,
99,
110,
32,
43,
32,
50,
32,
42,
32,
115,
114,
99,
110,
0,
99,
111,
110,
118,
101,
114,
116,
95,
121,
117,
118,
95,
112,
97,
99,
107,
0,
0,
0,
0,
0,
0,
0,
0,
115,
114,
99,
45,
62,
100,
97,
116,
97,
108,
101,
110,
32,
62,
61,
32,
115,
114,
99,
45,
62,
119,
105,
100,
116,
104,
32,
42,
32,
115,
114,
99,
45,
62,
104,
101,
105,
103,
104,
116,
0,
0,
0,
0,
0,
0,
0,
0,
99,
111,
110,
118,
101,
114,
116,
95,
117,
118,
112,
95,
97,
112,
112,
101,
110,
100,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
100,
115,
116,
61,
37,
100,
120,
37,
100,
32,
40,
37,
108,
120,
41,
32,
37,
108,
120,
32,
115,
114,
99,
61,
37,
100,
120,
37,
100,
32,
37,
108,
120,
10,
0,
0,
114,
99,
32,
62,
61,
32,
48,
0,
46,
47,
122,
98,
97,
114,
47,
114,
101,
102,
99,
110,
116,
46,
104,
0,
95,
122,
98,
97,
114,
95,
114,
101,
102,
99,
110,
116,
0,
0,
0,
0,
82,
71,
66,
52,
3,
0,
0,
0,
4,
8,
16,
24,
66,
71,
82,
49,
3,
0,
0,
0,
1,
160,
163,
198,
52,
50,
50,
80,
1,
0,
0,
0,
1,
0,
0,
0,
89,
56,
48,
48,
0,
0,
0,
0,
0,
0,
0,
0,
89,
85,
89,
50,
2,
0,
0,
0,
1,
0,
0,
0,
74,
80,
69,
71,
5,
0,
0,
0,
0,
0,
0,
0,
89,
86,
89,
85,
2,
0,
0,
0,
1,
0,
1,
0,
89,
56,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
78,
86,
50,
49,
4,
0,
0,
0,
1,
1,
1,
0,
78,
86,
49,
50,
4,
0,
0,
0,
1,
1,
0,
0,
66,
71,
82,
51,
3,
0,
0,
0,
3,
16,
8,
0,
89,
86,
85,
57,
1,
0,
0,
0,
2,
2,
1,
0,
82,
71,
66,
79,
3,
0,
0,
0,
2,
106,
101,
96,
82,
71,
66,
81,
3,
0,
0,
0,
2,
98,
109,
104,
71,
82,
69,
89,
0,
0,
0,
0,
0,
0,
0,
0,
3,
0,
0,
0,
3,
0,
0,
0,
4,
16,
8,
0,
89,
56,
32,
32,
0,
0,
0,
0,
0,
0,
0,
0,
73,
52,
50,
48,
1,
0,
0,
0,
1,
1,
0,
0,
82,
71,
66,
49,
3,
0,
0,
0,
1,
165,
162,
192,
89,
85,
49,
50,
1,
0,
0,
0,
1,
1,
0,
0,
89,
86,
49,
50,
1,
0,
0,
0,
1,
1,
1,
0,
82,
71,
66,
51,
3,
0,
0,
0,
3,
0,
8,
16,
82,
52,
52,
52,
3,
0,
0,
0,
2,
136,
132,
128,
66,
71,
82,
52,
3,
0,
0,
0,
4,
16,
8,
0,
89,
85,
86,
57,
1,
0,
0,
0,
2,
2,
0,
0,
77,
74,
80,
71,
5,
0,
0,
0,
0,
0,
0,
0,
52,
49,
49,
80,
1,
0,
0,
0,
2,
0,
0,
0,
82,
71,
66,
80,
3,
0,
0,
0,
2,
107,
69,
96,
82,
71,
66,
82,
3,
0,
0,
0,
2,
99,
77,
104,
89,
85,
89,
86,
2,
0,
0,
0,
1,
0,
0,
0,
85,
89,
86,
89,
2,
0,
0,
0,
1,
0,
2,
0,
0,
0,
0,
0,
115,
121,
109,
45,
62,
100,
97,
116,
97,
95,
97,
108,
108,
111,
99,
0,
122,
98,
97,
114,
47,
105,
109,
103,
95,
115,
99,
97,
110,
110,
101,
114,
46,
99,
0,
0,
0,
0,
0,
0,
95,
122,
98,
97,
114,
95,
105,
109,
97,
103,
101,
95,
115,
99,
97,
110,
110,
101,
114,
95,
114,
101,
99,
121,
99,
108,
101,
95,
115,
121,
109,
115,
0,
0,
0,
0,
0,
0,
0,
0,
48,
0,
0,
0,
0,
0,
0,
0,
115,
121,
109,
45,
62,
100,
97,
116,
97,
0,
0,
0,
0,
0,
0,
0,
105,
115,
99,
110,
45,
62,
114,
101,
99,
121,
99,
108,
101,
91,
105,
93,
46,
110,
115,
121,
109,
115,
0,
0,
95,
122,
98,
97,
114,
95,
105,
109,
97,
103,
101,
95,
115,
99,
97,
110,
110,
101,
114,
95,
97,
108,
108,
111,
99,
95,
115,
121,
109,
0,
0,
0,
33,
115,
121,
109,
45,
62,
115,
121,
109,
115,
0,
0,
0,
0,
0,
0,
99,
120,
49,
32,
60,
61,
32,
119,
0,
0,
0,
0,
0,
0,
0,
0,
122,
98,
97,
114,
95,
115,
99,
97,
110,
95,
105,
109,
97,
103,
101,
0,
99,
121,
49,
32,
60,
61,
32,
104,
0,
0,
0,
0,
0,
0,
0,
0,
98,
111,
114,
100,
101,
114,
32,
60,
61,
32,
104,
0,
0,
0,
0,
0,
37,
115,
58,
32,
105,
109,
103,
95,
120,
43,
58,
32,
37,
48,
52,
100,
44,
37,
48,
52,
100,
32,
64,
37,
112,
10,
0,
0,
0,
0,
0,
0,
112,
32,
61,
61,
32,
100,
97,
116,
97,
32,
43,
32,
120,
32,
43,
32,
121,
32,
42,
32,
40,
105,
110,
116,
112,
116,
114,
95,
116,
41,
119,
0,
37,
115,
58,
32,
105,
109,
103,
95,
120,
45,
58,
32,
37,
48,
52,
100,
44,
37,
48,
52,
100,
32,
64,
37,
112,
10,
0,
0,
0,
0,
0,
0,
98,
111,
114,
100,
101,
114,
32,
60,
61,
32,
119,
0,
0,
0,
0,
0,
37,
115,
58,
32,
105,
109,
103,
95,
121,
43,
58,
32,
37,
48,
52,
100,
44,
37,
48,
52,
100,
32,
64,
37,
112,
10,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
105,
109,
103,
95,
121,
45,
58,
32,
37,
48,
52,
100,
44,
37,
48,
52,
100,
32,
64,
37,
112,
10,
0,
0,
0,
0,
0,
0,
101,
97,
110,
0,
0,
0,
0,
0,
97,
100,
100,
111,
110,
0,
0,
0,
37,
115,
58,
32,
115,
121,
109,
98,
111,
108,
32,
115,
101,
116,
115,
32,
97,
108,
108,
111,
99,
97,
116,
101,
100,
32,
32,
32,
61,
32,
37,
45,
52,
100,
10,
0,
0,
0,
0,
0,
100,
117,
109,
112,
95,
115,
116,
97,
116,
115,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
32,
32,
32,
32,
115,
99,
97,
110,
110,
101,
114,
32,
115,
121,
109,
115,
32,
105,
110,
32,
117,
115,
101,
32,
61,
32,
37,
45,
52,
100,
9,
114,
101,
99,
121,
99,
108,
101,
100,
32,
32,
61,
32,
37,
45,
52,
100,
10,
0,
0,
0,
0,
37,
115,
58,
32,
32,
32,
32,
32,
105,
109,
97,
103,
101,
32,
115,
121,
109,
115,
32,
105,
110,
32,
117,
115,
101,
32,
32,
32,
61,
32,
37,
45,
52,
100,
9,
114,
101,
99,
121,
99,
108,
101,
100,
32,
32,
61,
32,
37,
45,
52,
100,
10,
0,
0,
0,
0,
37,
115,
58,
32,
115,
121,
109,
98,
111,
108,
115,
32,
97,
108,
108,
111,
99,
97,
116,
101,
100,
32,
32,
32,
32,
32,
32,
32,
61,
32,
37,
45,
52,
100,
10,
0,
0,
0,
0,
0,
37,
115,
58,
32,
32,
32,
32,
32,
32,
114,
101,
99,
121,
99,
108,
101,
100,
91,
37,
100,
93,
32,
32,
32,
32,
32,
32,
32,
32,
61,
32,
37,
45,
52,
100,
10,
0,
0,
0,
0,
37,
115,
58,
32,
112,
97,
114,
116,
105,
97,
108,
32,
115,
121,
109,
98,
111,
108,
32,
64,
40,
37,
100,
44,
37,
100,
41,
10,
0,
0,
0,
0,
115,
121,
109,
98,
111,
108,
95,
104,
97,
110,
100,
108,
101,
114,
0,
0,
37,
115,
58,
32,
100,
117,
112,
32,
115,
121,
109,
98,
111,
108,
32,
64,
40,
37,
100,
44,
37,
100,
41,
58,
32,
100,
117,
112,
32,
37,
115,
58,
32,
37,
46,
50,
48,
115,
10,
0,
37,
115,
58,
32,
110,
101,
119,
32,
115,
121,
109,
98,
111,
108,
32,
64,
40,
37,
100,
44,
37,
100,
41,
58,
32,
37,
115,
58,
32,
37,
46,
50,
48,
115,
10,
0,
0,
0,
0,
0,
108,
105,
110,
101,
0,
0,
0,
0,
113,
114,
95,
104,
97,
110,
100,
108,
101,
114,
0,
0,
0,
0,
0,
0,
114,
99,
32,
62,
61,
32,
48,
0,
46,
47,
122,
98,
97,
114,
47,
114,
101,
102,
99,
110,
116,
46,
104,
0,
95,
122,
98,
97,
114,
95,
114,
101,
102,
99,
110,
116,
0,
0,
0,
0,
37,
115,
58,
32,
109,
97,
120,
32,
102,
105,
110,
100,
101,
114,
32,
108,
105,
110,
101,
115,
32,
61,
32,
37,
100,
120,
37,
100,
10,
0,
0,
0,
95,
122,
98,
97,
114,
95,
113,
114,
95,
100,
101,
115,
116,
114,
111,
121,
0,
0,
0,
0,
0,
0,
0,
0,
37,
115,
58,
32,
37,
100,
120,
37,
100,
32,
102,
105,
110,
100,
101,
114,
115,
44,
32,
37,
100,
32,
99,
101,
110,
116,
101,
114,
115,
58,
10,
0,
95,
122,
98,
97,
114,
95,
113,
114,
95,
100,
101,
99,
111,
100,
101,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
1,
2,
2,
4,
1,
2,
4,
4,
2,
4,
4,
4,
2,
4,
6,
5,
2,
4,
6,
6,
2,
5,
8,
8,
4,
5,
8,
8,
4,
5,
8,
11,
4,
8,
10,
11,
4,
9,
12,
16,
4,
9,
16,
16,
6,
10,
12,
18,
6,
10,
17,
16,
6,
11,
16,
19,
6,
13,
18,
21,
7,
14,
21,
25,
8,
16,
20,
25,
8,
17,
23,
25,
9,
17,
23,
34,
9,
18,
25,
30,
10,
20,
27,
32,
12,
21,
29,
35,
12,
23,
34,
37,
12,
25,
34,
40,
13,
26,
35,
42,
14,
28,
38,
45,
15,
29,
40,
48,
16,
31,
43,
51,
17,
33,
45,
54,
18,
35,
48,
57,
19,
37,
51,
60,
19,
38,
53,
63,
20,
40,
56,
66,
21,
43,
59,
70,
22,
45,
62,
74,
24,
47,
65,
77,
25,
49,
68,
81,
7,
10,
13,
17,
10,
16,
22,
28,
26,
26,
26,
22,
24,
22,
22,
26,
24,
18,
22,
15,
26,
18,
22,
24,
30,
24,
20,
24,
18,
16,
24,
28,
28,
28,
28,
30,
24,
20,
18,
18,
26,
24,
28,
24,
30,
26,
28,
28,
26,
28,
30,
30,
22,
20,
24,
20,
18,
26,
16,
20,
30,
28,
24,
22,
26,
28,
26,
30,
28,
30,
30,
0,
0,
4,
19,
55,
15,
28,
37,
12,
51,
39,
59,
62,
10,
24,
22,
41,
31,
44,
7,
65,
47,
33,
67,
67,
48,
32,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
10,
9,
8,
8,
12,
11,
16,
10,
14,
13,
16,
12,
0,
0,
0,
0,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
32,
36,
37,
42,
43,
45,
46,
47,
58,
0,
0,
0,
16,
18,
20,
22,
24,
26,
28,
20,
22,
24,
24,
26,
28,
28,
22,
24,
24,
26,
26,
28,
28,
24,
24,
26,
26,
26,
28,
28,
24,
26,
26,
26,
28,
28,
0,
0,
0,
0,
0,
0,
65,
0,
4,
1,
1,
0,
0,
1,
64,
16,
4,
0,
0,
16,
0,
0,
16,
1,
17,
0,
16,
0,
16,
0,
0,
17,
1,
0,
0,
16,
0,
0,
132,
0,
66,
0,
4,
0,
64,
0,
128,
16,
2,
0,
0,
16,
0,
0,
0,
108,
0,
0,
0,
68,
0,
0,
0,
56,
0,
0,
0,
16,
0,
0,
0,
0,
1,
1,
4,
0,
3,
1,
2,
0,
2,
1,
0,
2,
1,
2,
148,
124,
0,
0,
188,
133,
0,
0,
153,
154,
0,
0,
211,
164,
0,
0,
246,
187,
0,
0,
98,
199,
0,
0,
71,
216,
0,
0,
13,
230,
0,
0,
40,
249,
0,
0,
120,
11,
1,
0,
93,
20,
1,
0,
23,
42,
1,
0,
50,
53,
1,
0,
166,
73,
1,
0,
131,
86,
1,
0,
201,
104,
1,
0,
236,
119,
1,
0,
196,
142,
1,
0,
225,
145,
1,
0,
171,
175,
1,
0,
142,
176,
1,
0,
26,
204,
1,
0,
63,
211,
1,
0,
117,
237,
1,
0,
80,
242,
1,
0,
213,
9,
2,
0,
240,
22,
2,
0,
186,
40,
2,
0,
159,
55,
2,
0,
11,
75,
2,
0,
46,
84,
2,
0,
100,
106,
2,
0,
65,
117,
2,
0,
105,
140,
2,
0,
85,
84,
70,
45,
56,
0,
0,
0,
73,
83,
79,
56,
56,
53,
57,
45,
49,
0,
0,
0,
0,
0,
0,
0,
83,
74,
73,
83,
0,
0,
0,
0,
73,
83,
79,
56,
56,
53,
57,
45,
37,
105,
0,
0,
0,
0,
0,
0,
67,
80,
52,
51,
55,
0,
0,
0,
110,
101,
120,
116,
32,
62,
32,
115,
121,
109,
115,
45,
62,
100,
97,
116,
97,
108,
101,
110,
0,
0,
0,
0,
122,
98,
97,
114,
47,
113,
114,
99,
111,
100,
101,
47,
113,
114,
100,
101,
99,
116,
120,
116,
46,
99,
0,
0,
113,
114,
95,
99,
111,
100,
101,
95,
100,
97,
116,
97,
95,
108,
105,
115,
116,
95,
101,
120,
116,
114,
97,
99,
116,
95,
116,
101,
120,
116,
0,
0,
114,
99,
32,
62,
61,
32,
48,
0,
46,
47,
122,
98,
97,
114,
47,
114,
101,
102,
99,
110,
116,
46,
104,
0,
95,
122,
98,
97,
114,
95,
114,
101,
102,
99,
110,
116,
0,
0,
0,
0,
87,
65,
82,
78,
73,
78,
71,
58,
32,
37,
115,
58,
37,
100,
58,
32,
37,
115,
58,
32,
65,
115,
115,
101,
114,
116,
105,
111,
110,
32,
34,
37,
115,
34,
32,
102,
97,
105,
108,
101,
100,
46,
10,
9,
108,
111,
99,
107,
61,
37,
100,
32,
114,
101,
113,
61,
37,
100,
10,
0,
0,
0,
0,
0,
46,
47,
122,
98,
97,
114,
47,
100,
101,
99,
111,
100,
101,
114,
46,
104,
0,
0,
0,
0,
0,
0,
0,
0,
114,
101,
108,
101,
97,
115,
101,
95,
108,
111,
99,
107,
0,
0,
0,
0,
100,
99,
111,
100,
101,
45,
62,
108,
111,
99,
107,
32,
61,
61,
32,
114,
101,
113,
0,
0,
0,
0,
0,
0,
255,
0,
1,
4,
2,
8,
5,
10,
3,
14,
9,
7,
6,
13,
11,
12,
1,
2,
4,
8,
3,
6,
12,
11,
5,
10,
7,
14,
15,
13,
9,
1,
2,
4,
8,
3,
6,
12,
11,
5,
10,
7,
14,
15,
13,
9,
1,
0,
11,
2,
8,
16,
10,
4,
8,
9,
117,
116,
102,
56,
0,
0,
200,
119,
99,
104,
97,
114,
116,
0,
0,
198,
117,
99,
115,
50,
0,
117,
99,
115,
50,
98,
101,
0,
0,
196,
117,
99,
115,
50,
108,
101,
0,
0,
197,
117,
116,
102,
49,
54,
0,
117,
116,
102,
49,
54,
98,
101,
0,
0,
194,
117,
116,
102,
49,
54,
108,
101,
0,
0,
193,
117,
99,
115,
52,
0,
117,
99,
115,
52,
98,
101,
0,
117,
116,
102,
51,
50,
0,
117,
116,
102,
51,
50,
98,
101,
0,
0,
192,
117,
99,
115,
52,
108,
101,
0,
117,
116,
102,
51,
50,
108,
101,
0,
0,
195,
97,
115,
99,
105,
105,
0,
117,
115,
97,
115,
99,
105,
105,
0,
105,
115,
111,
54,
52,
54,
0,
105,
115,
111,
54,
52,
54,
117,
115,
0,
0,
199,
101,
117,
99,
106,
112,
0,
0,
208,
115,
104,
105,
102,
116,
106,
105,
115,
0,
115,
106,
105,
115,
0,
0,
209,
103,
98,
49,
56,
48,
51,
48,
0,
0,
216,
103,
98,
107,
0,
0,
217,
103,
98,
50,
51,
49,
50,
0,
0,
218,
98,
105,
103,
53,
0,
98,
105,
103,
102,
105,
118,
101,
0,
99,
112,
57,
53,
48,
0,
98,
105,
103,
53,
104,
107,
115,
99,
115,
0,
0,
224,
101,
117,
99,
107,
114,
0,
107,
115,
99,
53,
54,
48,
49,
0,
107,
115,
120,
49,
48,
48,
49,
0,
99,
112,
57,
52,
57,
0,
0,
232,
105,
115,
111,
56,
56,
53,
57,
49,
0,
108,
97,
116,
105,
110,
49,
0,
0,
128,
105,
115,
111,
56,
56,
53,
57,
50,
0,
0,
32,
0,
84,
0,
137,
18,
0,
32,
1,
6,
0,
0,
152,
65,
134,
26,
127,
0,
48,
72,
32,
0,
88,
32,
201,
18,
0,
36,
17,
198,
35,
0,
156,
81,
198,
26,
128,
80,
66,
136,
32,
90,
0,
0,
192,
4,
0,
16,
113,
1,
0,
29,
0,
112,
2,
0,
41,
0,
0,
192,
7,
33,
48,
1,
5,
0,
0,
88,
1,
0,
0,
94,
208,
1,
128,
29,
0,
0,
128,
6,
0,
91,
0,
0,
0,
5,
0,
20,
129,
1,
0,
30,
0,
128,
2,
0,
42,
0,
0,
0,
8,
34,
52,
17,
5,
0,
0,
92,
1,
0,
0,
95,
212,
1,
192,
29,
0,
0,
144,
70,
36,
105,
115,
111,
56,
56,
53,
57,
51,
0,
0,
32,
0,
212,
0,
9,
0,
0,
4,
48,
3,
0,
0,
244,
64,
70,
11,
63,
0,
16,
64,
32,
0,
216,
0,
0,
0,
0,
0,
64,
3,
0,
0,
248,
80,
134,
11,
64,
0,
16,
128,
32,
0,
0,
0,
64,
0,
0,
108,
144,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
188,
0,
0,
0,
43,
0,
0,
0,
0,
0,
200,
33,
6,
0,
0,
0,
0,
64,
0,
0,
112,
160,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
192,
0,
0,
0,
44,
0,
0,
0,
0,
0,
204,
49,
70,
36,
105,
115,
111,
56,
56,
53,
57,
52,
0,
0,
32,
0,
84,
48,
4,
23,
0,
220,
96,
4,
0,
0,
152,
49,
66,
12,
108,
0,
48,
8,
0,
0,
88,
32,
73,
23,
0,
224,
112,
196,
35,
0,
156,
65,
130,
12,
109,
72,
65,
200,
20,
17,
0,
0,
0,
0,
0,
0,
0,
192,
14,
29,
0,
112,
2,
0,
37,
0,
0,
64,
14,
33,
56,
65,
69,
16,
0,
0,
0,
0,
0,
0,
224,
1,
0,
0,
0,
184,
1,
7,
0,
18,
0,
0,
0,
0,
0,
0,
0,
0,
15,
30,
0,
128,
2,
0,
38,
0,
0,
128,
14,
34,
60,
81,
133,
16,
0,
0,
0,
0,
0,
0,
228,
1,
0,
0,
0,
188,
17,
71,
36,
105,
115,
111,
56,
56,
53,
57,
53,
0,
0,
32,
0,
136,
51,
14,
57,
229,
152,
115,
14,
58,
233,
168,
179,
14,
59,
237,
0,
224,
206,
59,
240,
196,
35,
207,
60,
244,
212,
99,
207,
61,
248,
228,
163,
207,
62,
252,
244,
227,
207,
63,
0,
5,
36,
208,
64,
4,
21,
100,
208,
65,
8,
37,
164,
208,
66,
12,
53,
228,
208,
67,
16,
69,
36,
209,
68,
20,
85,
100,
209,
69,
24,
101,
164,
209,
70,
28,
117,
228,
209,
71,
32,
133,
36,
210,
72,
36,
149,
100,
210,
73,
40,
165,
164,
210,
74,
44,
181,
228,
210,
75,
53,
194,
20,
147,
76,
51,
209,
84,
147,
77,
55,
225,
148,
147,
78,
59,
13,
192,
83,
79,
105,
115,
111,
56,
56,
53,
57,
54,
0,
0,
32,
0,
4,
16,
64,
0,
0,
4,
16,
64,
0,
1,
4,
16,
64,
0,
115,
1,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
0,
93,
1,
4,
16,
64,
93,
1,
216,
117,
23,
94,
121,
233,
181,
23,
95,
125,
249,
245,
23,
96,
129,
9,
54,
24,
97,
133,
25,
118,
24,
98,
137,
41,
182,
24,
99,
141,
57,
246,
88,
0,
1,
4,
16,
64,
0,
144,
69,
38,
217,
100,
148,
85,
102,
217,
101,
152,
101,
166,
217,
102,
156,
117,
230,
217,
103,
160,
133,
38,
90,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
105,
115,
111,
56,
56,
53,
57,
55,
0,
0,
32,
0,
144,
88,
34,
0,
51,
210,
8,
0,
0,
0,
0,
160,
9,
0,
0,
0,
16,
128,
136,
0,
0,
0,
0,
0,
155,
112,
210,
9,
0,
158,
124,
2,
10,
0,
161,
0,
32,
202,
40,
164,
148,
98,
202,
41,
168,
164,
162,
202,
42,
172,
180,
226,
202,
43,
176,
196,
34,
203,
44,
180,
212,
18,
128,
45,
183,
224,
146,
139,
46,
187,
240,
210,
139,
47,
191,
0,
19,
140,
48,
195,
16,
83,
140,
49,
199,
32,
147,
140,
50,
203,
48,
211,
140,
51,
207,
64,
19,
141,
52,
211,
80,
83,
141,
53,
215,
96,
147,
141,
54,
219,
112,
211,
141,
55,
223,
128,
19,
78,
0,
105,
115,
111,
56,
56,
53,
57,
56,
0,
0,
32,
0,
4,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
192,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
240,
0,
0,
0,
0,
0,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
64,
0,
1,
4,
16,
192,
136,
83,
81,
85,
149,
85,
87,
97,
149,
149,
86,
91,
113,
213,
149,
87,
95,
129,
21,
150,
88,
99,
145,
85,
150,
89,
103,
161,
149,
150,
90,
107,
177,
213,
86,
0,
1,
120,
248,
97,
0,
105,
115,
111,
56,
56,
53,
57,
57,
0,
0,
80,
45,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
244,
64,
6,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
46,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
248,
80,
6,
0,
105,
115,
111,
56,
56,
53,
57,
49,
48,
0,
0,
32,
0,
84,
48,
66,
12,
57,
220,
16,
4,
0,
70,
132,
96,
6,
27,
131,
0,
0,
135,
20,
0,
88,
64,
130,
12,
58,
224,
32,
4,
0,
71,
136,
112,
70,
27,
132,
136,
24,
199,
20,
17,
0,
0,
0,
0,
0,
0,
0,
192,
14,
29,
0,
112,
2,
0,
37,
0,
0,
0,
0,
0,
56,
65,
5,
0,
0,
0,
0,
128,
27,
0,
224,
1,
0,
0,
0,
0,
0,
0,
0,
18,
0,
0,
0,
0,
0,
0,
0,
0,
15,
30,
0,
128,
2,
0,
38,
0,
0,
0,
0,
0,
60,
81,
5,
0,
0,
0,
0,
192,
27,
0,
228,
1,
0,
0,
0,
0,
0,
192,
16,
105,
115,
111,
56,
56,
53,
57,
49,
49,
0,
116,
105,
115,
54,
50,
48,
0,
0,
32,
0,
188,
6,
91,
108,
178,
205,
70,
91,
109,
182,
221,
134,
91,
110,
186,
237,
198,
91,
111,
190,
253,
6,
92,
112,
194,
13,
71,
92,
113,
198,
29,
135,
92,
114,
202,
45,
199,
92,
115,
206,
61,
7,
93,
116,
210,
77,
71,
93,
117,
214,
93,
135,
93,
118,
218,
109,
199,
93,
119,
222,
125,
7,
94,
120,
226,
141,
71,
94,
121,
230,
157,
135,
94,
0,
1,
4,
16,
64,
122,
234,
173,
199,
94,
123,
238,
189,
7,
95,
124,
242,
205,
71,
95,
125,
246,
221,
135,
95,
126,
250,
237,
199,
95,
127,
254,
253,
7,
96,
128,
2,
14,
72,
96,
129,
1,
4,
16,
64,
0,
105,
115,
111,
56,
56,
53,
57,
49,
51,
0,
0,
32,
0,
160,
8,
0,
0,
0,
164,
8,
0,
0,
13,
0,
192,
5,
0,
0,
0,
0,
192,
2,
0,
0,
0,
0,
0,
39,
2,
0,
0,
0,
16,
0,
208,
5,
0,
0,
0,
0,
128,
3,
21,
236,
16,
193,
5,
0,
0,
112,
194,
8,
29,
0,
240,
71,
9,
49,
4,
145,
131,
17,
102,
48,
225,
4,
0,
84,
0,
0,
0,
0,
120,
40,
1,
6,
28,
0,
4,
50,
8,
0,
22,
240,
32,
1,
6,
0,
0,
128,
2,
9,
30,
0,
0,
136,
9,
50,
8,
161,
195,
17,
103,
52,
241,
4,
0,
85,
0,
0,
0,
0,
121,
44,
17,
70,
28,
0,
8,
66,
72,
137,
105,
115,
111,
56,
56,
53,
57,
49,
52,
0,
0,
32,
0,
24,
120,
32,
0,
27,
112,
128,
32,
0,
20,
2,
96,
97,
130,
26,
2,
0,
128,
31,
10,
46,
248,
2,
12,
12,
54,
8,
128,
131,
21,
62,
120,
33,
132,
27,
98,
152,
97,
132,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
122,
0,
0,
0,
0,
0,
0,
0,
128,
132,
0,
0,
0,
0,
0,
0,
0,
192,
7,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
123,
0,
0,
0,
0,
0,
0,
0,
192,
132,
0,
0,
0,
0,
0,
0,
0,
208,
7,
0,
105,
115,
111,
56,
56,
53,
57,
49,
53,
0,
108,
97,
116,
105,
110,
57,
0,
0,
36,
51,
2,
96,
6,
0,
103,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
131,
0,
0,
0,
0,
132,
0,
0,
0,
0,
88,
100,
225,
7,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
105,
115,
111,
56,
56,
53,
57,
49,
54,
0,
0,
32,
0,
84,
96,
129,
18,
51,
166,
104,
6,
0,
103,
0,
160,
8,
0,
127,
0,
0,
72,
32,
0,
0,
208,
193,
18,
131,
160,
8,
0,
0,
132,
120,
176,
8,
0,
88,
100,
225,
135,
32,
0,
0,
0,
192,
4,
0,
92,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
33
],
'i8',
ALLOC_NONE,
Runtime.GLOBAL_BASE
);
/* memory initializer */ allocate(
[
48,
1,
0,
0,
0,
88,
1,
0,
24,
118,
0,
0,
0,
0,
0,
156,
192,
8,
0,
0,
0,
0,
0,
5,
0,
96,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
34,
52,
1,
0,
0,
0,
92,
1,
64,
24,
119,
0,
0,
0,
0,
0,
160,
208,
8,
0,
99,
112,
49,
50,
53,
48,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
48,
0,
0,
0,
51,
6,
96,
98,
0,
41,
182,
168,
226,
138,
1,
184,
104,
198,
139,
96,
168,
49,
200,
31,
1,
144,
88,
226,
137,
40,
178,
8,
98,
136,
1,
216,
120,
6,
140,
97,
172,
65,
8,
32,
0,
60,
2,
137,
18,
0,
84,
0,
0,
0,
0,
0,
64,
6,
0,
0,
0,
0,
64,
32,
0,
0,
32,
201,
18,
0,
0,
0,
0,
0,
0,
88,
80,
6,
0,
72,
80,
146,
132,
32,
90,
0,
0,
192,
4,
0,
16,
113,
1,
0,
29,
0,
112,
2,
0,
41,
0,
0,
192,
7,
33,
48,
1,
5,
0,
0,
88,
1,
0,
0,
94,
208,
1,
128,
29,
0,
0,
128,
6,
0,
91,
0,
0,
0,
5,
0,
20,
129,
1,
0,
30,
0,
128,
2,
0,
42,
0,
0,
0,
8,
34,
52,
17,
5,
0,
0,
92,
1,
0,
0,
95,
212,
1,
192,
29,
0,
0,
144,
70,
36,
99,
112,
49,
50,
53,
49,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
49,
0,
0,
0,
227,
144,
99,
162,
76,
41,
182,
168,
226,
138,
51,
186,
168,
206,
139,
235,
180,
195,
206,
59,
49,
145,
88,
226,
137,
40,
178,
8,
98,
136,
1,
216,
136,
19,
140,
57,
237,
164,
83,
79,
0,
184,
195,
83,
58,
0,
248,
4,
0,
0,
226,
0,
80,
14,
0,
0,
0,
0,
0,
58,
0,
0,
112,
78,
77,
63,
1,
0,
0,
0,
48,
213,
56,
19,
0,
55,
153,
67,
147,
77,
240,
196,
35,
207,
60,
244,
212,
99,
207,
61,
248,
228,
163,
207,
62,
252,
244,
227,
207,
63,
0,
5,
36,
208,
64,
4,
21,
100,
208,
65,
8,
37,
164,
208,
66,
12,
53,
228,
208,
67,
16,
69,
36,
209,
68,
20,
85,
100,
209,
69,
24,
101,
164,
209,
70,
28,
117,
228,
209,
71,
32,
133,
36,
210,
72,
36,
149,
100,
210,
73,
40,
165,
164,
210,
74,
44,
181,
228,
210,
75,
99,
112,
49,
50,
53,
50,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
50,
0,
0,
0,
51,
6,
96,
98,
33,
41,
182,
168,
226,
138,
142,
184,
104,
198,
139,
88,
4,
48,
72,
0,
1,
144,
88,
226,
137,
40,
178,
8,
98,
136,
147,
216,
120,
6,
140,
89,
4,
64,
136,
31,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
99,
112,
49,
50,
53,
51,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
51,
0,
0,
0,
51,
6,
96,
98,
33,
41,
182,
168,
226,
138,
1,
184,
24,
192,
139,
1,
4,
16,
64,
0,
1,
144,
88,
226,
137,
40,
178,
8,
98,
136,
1,
216,
24,
0,
140,
1,
4,
16,
64,
0,
0,
112,
210,
9,
0,
0,
0,
0,
0,
0,
0,
0,
16,
0,
0,
0,
0,
0,
128,
136,
0,
0,
0,
0,
0,
155,
0,
0,
0,
0,
158,
124,
2,
10,
0,
161,
0,
32,
202,
40,
164,
148,
98,
202,
41,
168,
164,
162,
202,
42,
172,
180,
226,
202,
43,
176,
196,
34,
203,
44,
180,
212,
18,
128,
45,
183,
224,
146,
139,
46,
187,
240,
210,
139,
47,
191,
0,
19,
140,
48,
195,
16,
83,
140,
49,
199,
32,
147,
140,
50,
203,
48,
211,
140,
51,
207,
64,
19,
141,
52,
211,
80,
83,
141,
53,
215,
96,
147,
141,
54,
219,
112,
211,
141,
55,
223,
128,
19,
78,
0,
99,
112,
49,
50,
53,
52,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
52,
0,
0,
0,
51,
6,
96,
98,
33,
41,
182,
168,
226,
138,
142,
184,
104,
198,
139,
88,
4,
16,
64,
0,
1,
144,
88,
226,
137,
40,
178,
8,
98,
136,
147,
216,
120,
6,
140,
89,
4,
16,
128,
31,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
45,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
244,
64,
6,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
46,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
248,
80,
6,
0,
99,
112,
49,
50,
53,
53,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
53,
0,
0,
0,
51,
6,
96,
98,
33,
41,
182,
168,
226,
138,
142,
184,
24,
192,
139,
1,
4,
16,
64,
0,
1,
144,
88,
226,
137,
40,
178,
8,
98,
136,
147,
216,
24,
0,
140,
1,
4,
16,
64,
0,
0,
0,
0,
0,
0,
49,
2,
0,
0,
0,
0,
0,
192,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
240,
0,
0,
0,
0,
0,
0,
0,
64,
5,
37,
212,
80,
68,
21,
101,
212,
81,
72,
37,
21,
128,
82,
75,
49,
213,
148,
83,
79,
65,
21,
149,
84,
110,
189,
5,
87,
92,
114,
5,
16,
64,
0,
1,
4,
16,
64,
0,
83,
81,
85,
149,
85,
87,
97,
149,
149,
86,
91,
113,
213,
149,
87,
95,
129,
21,
150,
88,
99,
145,
85,
150,
89,
103,
161,
149,
150,
90,
107,
177,
213,
86,
0,
1,
120,
248,
97,
0,
99,
112,
49,
50,
53,
54,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
54,
0,
0,
0,
51,
146,
102,
98,
33,
41,
182,
168,
226,
138,
142,
184,
56,
218,
139,
88,
148,
134,
154,
105,
170,
145,
88,
226,
137,
40,
178,
8,
98,
136,
169,
217,
120,
26,
140,
89,
112,
216,
225,
106,
0,
204,
5,
0,
0,
0,
0,
0,
0,
0,
0,
0,
192,
26,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
64,
23,
0,
0,
0,
0,
64,
93,
173,
217,
117,
23,
94,
121,
233,
181,
23,
95,
125,
249,
245,
23,
96,
129,
9,
54,
24,
97,
133,
25,
118,
24,
98,
137,
41,
182,
24,
0,
140,
53,
230,
216,
99,
144,
69,
38,
217,
100,
0,
80,
6,
64,
101,
150,
93,
134,
25,
0,
0,
0,
0,
0,
0,
153,
105,
6,
0,
0,
155,
113,
214,
153,
103,
0,
124,
6,
26,
0,
161,
1,
32,
26,
0,
0,
120,
248,
161,
107,
99,
112,
49,
50,
53,
55,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
55,
0,
0,
0,
51,
6,
96,
98,
0,
41,
182,
168,
226,
138,
1,
184,
24,
192,
139,
1,
16,
240,
136,
2,
1,
144,
88,
226,
137,
40,
178,
8,
98,
136,
1,
216,
24,
0,
140,
1,
24,
32,
73,
0,
0,
4,
0,
0,
0,
0,
4,
0,
0,
0,
13,
0,
192,
5,
0,
0,
0,
0,
192,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
16,
0,
208,
5,
0,
0,
0,
0,
128,
3,
21,
236,
16,
193,
5,
0,
0,
112,
194,
8,
29,
0,
240,
71,
9,
49,
4,
145,
131,
17,
102,
48,
225,
4,
0,
84,
0,
0,
0,
0,
120,
40,
1,
6,
28,
0,
4,
50,
8,
0,
22,
240,
32,
1,
6,
0,
0,
128,
2,
9,
30,
0,
0,
136,
9,
50,
8,
161,
195,
17,
103,
52,
241,
4,
0,
85,
0,
0,
0,
0,
121,
44,
17,
70,
28,
0,
8,
66,
72,
36,
99,
112,
49,
50,
53,
56,
0,
119,
105,
110,
100,
111,
119,
115,
49,
50,
53,
56,
0,
0,
0,
51,
6,
96,
98,
33,
41,
182,
168,
226,
138,
142,
184,
24,
192,
139,
88,
4,
16,
64,
0,
1,
144,
88,
226,
137,
40,
178,
8,
98,
136,
147,
216,
24,
0,
140,
89,
4,
16,
128,
31,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
192,
4,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
149,
0,
0,
0,
0,
33,
0,
128,
9,
0,
0,
24,
2,
0,
0,
0,
0,
0,
0,
0,
0,
32,
114,
9,
0,
0,
0,
0,
0,
5,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
150,
0,
0,
0,
0,
34,
0,
144,
9,
0,
0,
28,
2,
0,
0,
0,
0,
0,
0,
0,
0,
36,
34,
35,
0,
107,
111,
105,
56,
114,
0,
0,
0,
62,
254,
8,
100,
144,
66,
14,
73,
100,
145,
70,
30,
137,
164,
153,
103,
162,
153,
166,
154,
107,
178,
217,
38,
143,
110,
222,
136,
99,
142,
58,
238,
40,
64,
143,
7,
32,
144,
192,
3,
73,
42,
185,
36,
76,
76,
54,
233,
228,
147,
80,
70,
41,
229,
148,
84,
86,
105,
229,
149,
88,
102,
169,
165,
56,
91,
114,
217,
165,
151,
95,
130,
25,
166,
152,
99,
146,
89,
102,
1,
46,
65,
20,
145,
73,
20,
85,
68,
210,
68,
37,
97,
148,
145,
70,
27,
113,
212,
145,
71,
31,
189,
4,
82,
72,
34,
141,
100,
145,
68,
44,
173,
116,
17,
74,
45,
165,
116,
146,
74,
14,
193,
19,
143,
65,
244,
212,
67,
208,
60,
5,
225,
147,
143,
62,
251,
240,
211,
143,
63,
255,
60,
4,
80,
64,
2,
13,
100,
143,
60,
12,
45,
116,
15,
66,
13,
37,
116,
144,
66,
107,
111,
105,
56,
117,
0,
0,
0,
62,
254,
8,
100,
144,
66,
14,
73,
100,
145,
70,
30,
137,
164,
153,
103,
162,
153,
166,
154,
107,
178,
217,
38,
143,
110,
222,
136,
99,
142,
58,
238,
40,
64,
143,
7,
32,
144,
192,
3,
73,
42,
185,
36,
76,
51,
53,
89,
147,
77,
80,
70,
41,
229,
148,
84,
254,
100,
229,
149,
88,
102,
169,
165,
56,
229,
112,
121,
14,
58,
95,
130,
25,
166,
152,
99,
250,
84,
102,
1,
46,
65,
20,
145,
73,
20,
85,
68,
210,
68,
37,
97,
148,
145,
70,
27,
113,
212,
145,
71,
31,
189,
4,
82,
72,
34,
141,
100,
145,
68,
44,
173,
116,
17,
74,
45,
165,
116,
146,
74,
14,
193,
19,
143,
65,
244,
212,
67,
208,
60,
5,
225,
147,
143,
62,
251,
240,
211,
143,
63,
255,
60,
4,
80,
64,
2,
13,
100,
143,
60,
12,
45,
116,
15,
66,
13,
37,
116,
144,
66,
0,
0,
0,
0,
0,
0,
0,
0,
0,
48,
1,
48,
2,
48,
12,
255,
14,
255,
251,
48,
26,
255,
27,
255,
31,
255,
1,
255,
155,
48,
156,
48,
180,
0,
64,
255,
168,
0,
62,
255,
227,
255,
63,
255,
253,
48,
254,
48,
157,
48,
158,
48,
3,
48,
221,
78,
5,
48,
6,
48,
7,
48,
252,
48,
21,
32,
16,
32,
15,
255,
92,
0,
28,
48,
22,
32,
92,
255,
38,
32,
37,
32,
24,
32,
25,
32,
28,
32,
29,
32,
8,
255,
9,
255,
20,
48,
21,
48,
59,
255,
61,
255,
91,
255,
93,
255,
8,
48,
9,
48,
10,
48,
11,
48,
12,
48,
13,
48,
14,
48,
15,
48,
16,
48,
17,
48,
11,
255,
18,
34,
177,
0,
215,
0,
247,
0,
29,
255,
96,
34,
28,
255,
30,
255,
102,
34,
103,
34,
30,
34,
52,
34,
66,
38,
64,
38,
176,
0,
50,
32,
51,
32,
3,
33,
229,
255,
4,
255,
162,
0,
163,
0,
5,
255,
3,
255,
6,
255,
10,
255,
32,
255,
167,
0,
6,
38,
5,
38,
203,
37,
207,
37,
206,
37,
199,
37,
198,
37,
161,
37,
160,
37,
179,
37,
178,
37,
189,
37,
188,
37,
59,
32,
18,
48,
146,
33,
144,
33,
145,
33,
147,
33,
19,
48,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8,
34,
11,
34,
134,
34,
135,
34,
130,
34,
131,
34,
42,
34,
41,
34,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
39,
34,
40,
34,
172,
0,
210,
33,
212,
33,
0,
34,
3,
34,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
32,
34,
165,
34,
18,
35,
2,
34,
7,
34,
97,
34,
82,
34,
106,
34,
107,
34,
26,
34,
61,
34,
29,
34,
53,
34,
43,
34,
44,
34,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
43,
33,
48,
32,
111,
38,
109,
38,
106,
38,
32,
32,
33,
32,
182,
0,
0,
0,
0,
0,
0,
0,
0,
0,
239,
37,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
16,
255,
17,
255,
18,
255,
19,
255,
20,
255,
21,
255,
22,
255,
23,
255,
24,
255,
25,
255,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
33,
255,
34,
255,
35,
255,
36,
255,
37,
255,
38,
255,
39,
255,
40,
255,
41,
255,
42,
255,
43,
255,
44,
255,
45,
255,
46,
255,
47,
255,
48,
255,
49,
255,
50,
255,
51,
255,
52,
255,
53,
255,
54,
255,
55,
255,
56,
255,
57,
255,
58,
255,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
65,
255,
66,
255,
67,
255,
68,
255,
69,
255,
70,
255,
71,
255,
72,
255,
73,
255,
74,
255,
75,
255,
76,
255,
77,
255,
78,
255,
79,
255,
80,
255,
81,
255,
82,
255,
83,
255,
84,
255,
85,
255,
86,
255,
87,
255,
88,
255,
89,
255,
90,
255,
0,
0,
0,
0,
0,
0,
0,
0,
65,
48,
66,
48,
67,
48,
68,
48,
69,
48,
70,
48,
71,
48,
72,
48,
73,
48,
74,
48,
75,
48,
76,
48,
77,
48,
78,
48,
79,
48,
80,
48,
81,
48,
82,
48,
83,
48,
84,
48,
85,
48,
86,
48,
87,
48,
88,
48,
89,
48,
90,
48,
91,
48,
92,
48,
93,
48,
94,
48,
95,
48,
96,
48,
97,
48,
98,
48,
99,
48,
100,
48,
101,
48,
102,
48,
103,
48,
104,
48,
105,
48,
106,
48,
107,
48,
108,
48,
109,
48,
110,
48,
111,
48,
112,
48,
113,
48,
114,
48,
115,
48,
116,
48,
117,
48,
118,
48,
119,
48,
120,
48,
121,
48,
122,
48,
123,
48,
124,
48,
125,
48,
126,
48,
127,
48,
128,
48,
129,
48,
130,
48,
131,
48,
132,
48,
133,
48,
134,
48,
135,
48,
136,
48,
137,
48,
138,
48,
139,
48,
140,
48,
141,
48,
142,
48,
143,
48,
144,
48,
145,
48,
146,
48,
147,
48,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
161,
48,
162,
48,
163,
48,
164,
48,
165,
48,
166,
48,
167,
48,
168,
48,
169,
48,
170,
48,
171,
48,
172,
48,
173,
48,
174,
48,
175,
48,
176,
48,
177,
48,
178,
48,
179,
48,
180,
48,
181,
48,
182,
48,
183,
48,
184,
48,
185,
48,
186,
48,
187,
48,
188,
48,
189,
48,
190,
48,
191,
48,
192,
48,
193,
48,
194,
48,
195,
48,
196,
48,
197,
48,
198,
48,
199,
48,
200,
48,
201,
48,
202,
48,
203,
48,
204,
48,
205,
48,
206,
48,
207,
48,
208,
48,
209,
48,
210,
48,
211,
48,
212,
48,
213,
48,
214,
48,
215,
48,
216,
48,
217,
48,
218,
48,
219,
48,
220,
48,
221,
48,
222,
48,
223,
48,
224,
48,
225,
48,
226,
48,
227,
48,
228,
48,
229,
48,
230,
48,
231,
48,
232,
48,
233,
48,
234,
48,
235,
48,
236,
48,
237,
48,
238,
48,
239,
48,
240,
48,
241,
48,
242,
48,
243,
48,
244,
48,
245,
48,
246,
48,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
145,
3,
146,
3,
147,
3,
148,
3,
149,
3,
150,
3,
151,
3,
152,
3,
153,
3,
154,
3,
155,
3,
156,
3,
157,
3,
158,
3,
159,
3,
160,
3,
161,
3,
163,
3,
164,
3,
165,
3,
166,
3,
167,
3,
168,
3,
169,
3,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
177,
3,
178,
3,
179,
3,
180,
3,
181,
3,
182,
3,
183,
3,
184,
3,
185,
3,
186,
3,
187,
3,
188,
3,
189,
3,
190,
3,
191,
3,
192,
3,
193,
3,
195,
3,
196,
3,
197,
3,
198,
3,
199,
3,
200,
3,
201,
3,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
16,
4,
17,
4,
18,
4,
19,
4,
20,
4,
21,
4,
1,
4,
22,
4,
23,
4,
24,
4,
25,
4,
26,
4,
27,
4,
28,
4,
29,
4,
30,
4,
31,
4,
32,
4,
33,
4,
34,
4,
35,
4,
36,
4,
37,
4,
38,
4,
39,
4,
40,
4,
41,
4,
42,
4,
43,
4,
44,
4,
45,
4,
46,
4,
47,
4,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
48,
4,
49,
4,
50,
4,
51,
4,
52,
4,
53,
4,
81,
4,
54,
4,
55,
4,
56,
4,
57,
4,
58,
4,
59,
4,
60,
4,
61,
4,
62,
4,
63,
4,
64,
4,
65,
4,
66,
4,
67,
4,
68,
4,
69,
4,
70,
4,
71,
4,
72,
4,
73,
4,
74,
4,
75,
4,
76,
4,
77,
4,
78,
4,
79,
4,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
37,
2,
37,
12,
37,
16,
37,
24,
37,
20,
37,
28,
37,
44,
37,
36,
37,
52,
37,
60,
37,
1,
37,
3,
37,
15,
37,
19,
37,
27,
37,
23,
37,
35,
37,
51,
37,
43,
37,
59,
37,
75,
37,
32,
37,
47,
37,
40,
37,
55,
37,
63,
37,
29,
37,
48,
37,
37,
37,
56,
37,
66,
37
],
'i8',
ALLOC_NONE,
Runtime.GLOBAL_BASE + 10240
);
/* memory initializer */ allocate(
[
156,
78,
22,
85,
3,
90,
63,
150,
192,
84,
27,
97,
40,
99,
246,
89,
34,
144,
117,
132,
28,
131,
80,
122,
170,
96,
225,
99,
37,
110,
237,
101,
102,
132,
166,
130,
245,
155,
147,
104,
39,
87,
161,
101,
113,
98,
155,
91,
208,
89,
123,
134,
244,
152,
98,
125,
190,
125,
142,
155,
22,
98,
159,
124,
183,
136,
137,
91,
181,
94,
9,
99,
151,
102,
72,
104,
199,
149,
141,
151,
79,
103,
229,
78,
10,
79,
77,
79,
157,
79,
73,
80,
242,
86,
55,
89,
212,
89,
1,
90,
9,
92,
223,
96,
15,
97,
112,
97,
19,
102,
5,
105,
186,
112,
79,
117,
112,
117,
251,
121,
173,
125,
239,
125,
195,
128,
14,
132,
99,
136,
2,
139,
85,
144,
122,
144,
59,
83,
149,
78,
165,
78,
223,
87,
178,
128,
193,
144,
239,
120,
0,
78,
241,
88,
162,
110,
56,
144,
50,
122,
40,
131,
139,
130,
47,
156,
65,
81,
112,
83,
189,
84,
225,
84,
224,
86,
251,
89,
21,
95,
242,
152,
235,
109,
228,
128,
45,
133,
98,
150,
112,
150,
160,
150,
251,
151,
11,
84,
243,
83,
135,
91,
207,
112,
189,
127,
194,
143,
232,
150,
111,
83,
92,
157,
186,
122,
17,
78,
147,
120,
252,
129,
38,
110,
24,
86,
4,
85,
29,
107,
26,
133,
59,
156,
229,
89,
169,
83,
102,
109,
220,
116,
143,
149,
66,
86,
145,
78,
75,
144,
242,
150,
79,
131,
12,
153,
225,
83,
182,
85,
48,
91,
113,
95,
32,
102,
243,
102,
4,
104,
56,
108,
243,
108,
41,
109,
91,
116,
200,
118,
78,
122,
52,
152,
241,
130,
91,
136,
96,
138,
237,
146,
178,
109,
171,
117,
202,
118,
197,
153,
166,
96,
1,
139,
138,
141,
178,
149,
142,
105,
173,
83,
134,
81,
18,
87,
48,
88,
68,
89,
180,
91,
246,
94,
40,
96,
169,
99,
244,
99,
191,
108,
20,
111,
142,
112,
20,
113,
89,
113,
213,
113,
63,
115,
1,
126,
118,
130,
209,
130,
151,
133,
96,
144,
91,
146,
27,
157,
105,
88,
188,
101,
90,
108,
37,
117,
249,
81,
46,
89,
101,
89,
128,
95,
220,
95,
188,
98,
250,
101,
42,
106,
39,
107,
180,
107,
139,
115,
193,
127,
86,
137,
44,
157,
14,
157,
196,
158,
161,
92,
150,
108,
123,
131,
4,
81,
75,
92,
182,
97,
198,
129,
118,
104,
97,
114,
89,
78,
250,
79,
120,
83,
105,
96,
41,
110,
79,
122,
243,
151,
11,
78,
22,
83,
238,
78,
85,
79,
61,
79,
161,
79,
115,
79,
160,
82,
239,
83,
9,
86,
15,
89,
193,
90,
182,
91,
225,
91,
209,
121,
135,
102,
156,
103,
182,
103,
76,
107,
179,
108,
107,
112,
194,
115,
141,
121,
190,
121,
60,
122,
135,
123,
177,
130,
219,
130,
4,
131,
119,
131,
239,
131,
211,
131,
102,
135,
178,
138,
41,
86,
168,
140,
230,
143,
78,
144,
30,
151,
138,
134,
196,
79,
232,
92,
17,
98,
89,
114,
59,
117,
229,
129,
189,
130,
254,
134,
192,
140,
197,
150,
19,
153,
213,
153,
203,
78,
26,
79,
227,
137,
222,
86,
74,
88,
202,
88,
251,
94,
235,
95,
42,
96,
148,
96,
98,
96,
208,
97,
18,
98,
208,
98,
57,
101,
65,
155,
102,
102,
176,
104,
119,
109,
112,
112,
76,
117,
134,
118,
117,
125,
165,
130,
249,
135,
139,
149,
142,
150,
157,
140,
241,
81,
190,
82,
22,
89,
179,
84,
179,
91,
22,
93,
104,
97,
130,
105,
175,
109,
141,
120,
203,
132,
87,
136,
114,
138,
167,
147,
184,
154,
108,
109,
168,
153,
217,
134,
163,
87,
255,
103,
206,
134,
14,
146,
131,
82,
135,
86,
4,
84,
211,
94,
225,
98,
185,
100,
60,
104,
56,
104,
187,
107,
114,
115,
186,
120,
107,
122,
154,
137,
210,
137,
107,
141,
3,
143,
237,
144,
163,
149,
148,
150,
105,
151,
102,
91,
179,
92,
125,
105,
77,
152,
78,
152,
155,
99,
32,
123,
43,
106,
127,
106,
182,
104,
13,
156,
95,
111,
114,
82,
157,
85,
112,
96,
236,
98,
59,
109,
7,
110,
209,
110,
91,
132,
16,
137,
68,
143,
20,
78,
57,
156,
246,
83,
27,
105,
58,
106,
132,
151,
42,
104,
92,
81,
195,
122,
178,
132,
220,
145,
140,
147,
91,
86,
40,
157,
34,
104,
5,
131,
49,
132,
165,
124,
8,
82,
197,
130,
230,
116,
126,
78,
131,
79,
160,
81,
210,
91,
10,
82,
216,
82,
231,
82,
251,
93,
154,
85,
42,
88,
230,
89,
140,
91,
152,
gitextract_rj_io85i/
├── .editorconfig
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ └── deploy.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── LICENSE
├── README.md
├── package.json
├── public/
│ ├── CNAME
│ ├── ads.txt
│ ├── decoder.js
│ ├── index.html
│ ├── manifest.json
│ ├── robots.txt
│ └── sitemap.xml
├── rollup.config.js
└── src/
├── css/
│ └── styles.css
└── js/
├── index.js
├── snackbar.js
├── utils.js
└── vendor/
└── qrscan.js
SYMBOL INDEX (15 symbols across 3 files)
FILE: public/decoder.js
function zbarProcessImageData (line 24) | function zbarProcessImageData(imgData) {
FILE: src/js/index.js
function setCameraOverlay (line 68) | function setCameraOverlay() {
function createFrame (line 72) | function createFrame() {
function openInBrowser (line 85) | function openInBrowser() {
function scan (line 98) | function scan(forSelectedPhotos = false) {
function hideDialog (line 124) | function hideDialog() {
function selectFromPhoto (line 138) | function selectFromPhoto() {
function showInfo (line 175) | function showInfo() {
function closeInfoDialog (line 180) | function closeInfoDialog() {
FILE: src/js/vendor/qrscan.js
function setPhotoSourceToScan (line 16) | function setPhotoSourceToScan(forSelectedPhotos) {
function setCanvasProperties (line 50) | function setCanvasProperties() {
function startCapture (line 55) | function startCapture(constraints) {
function showErrorMsg (line 127) | function showErrorMsg() {
function onDecoderMessage (line 143) | function onDecoderMessage(event) {
function newDecoderFrame (line 159) | function newDecoderFrame() {
Condensed preview — 24 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,786K chars).
[
{
"path": ".editorconfig",
"chars": 191,
"preview": "root = true\n\n[*]\nindent_style = tab\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\nins"
},
{
"path": ".github/FUNDING.yml",
"chars": 22,
"preview": "github: [gokulkrishh]\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 834,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".github/workflows/deploy.yml",
"chars": 710,
"preview": "name: github pages\n\non:\n push:\n branches:\n - main\n\njobs:\n deploy:\n runs-on: ubuntu-20.04\n steps:\n -"
},
{
"path": ".gitignore",
"chars": 168,
"preview": "logs\n*.log\nnpm-debug.log*\nnode_modules\n.DS_Store\ndist\n.env\npublic/bundle.js\npublic/bundle.css\npublic/service-worker.js\np"
},
{
"path": ".prettierignore",
"chars": 27,
"preview": "*.json\n/dist\napp/decoder.js"
},
{
"path": ".prettierrc",
"chars": 65,
"preview": "{\n\t\"printWidth\": 140,\n\t\"singleQuote\": true,\n\t\"parser\": \"babel\"\n}\n"
},
{
"path": "LICENSE",
"chars": 1077,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2016 code-kotis\n\nPermission is hereby granted, free of charge, to any person obtain"
},
{
"path": "README.md",
"chars": 924,
"preview": "### <p align=\"center\"><img width=\"150px\" height=\"150px\" src=\"https://raw.githubusercontent.com/code-kotis/qr-code-scanne"
},
{
"path": "package.json",
"chars": 922,
"preview": "{\n\t\"name\": \"qr-code-scanner\",\n\t\"description\": \"QR Code Scanner is the fastest and most user-friendly progressive web app"
},
{
"path": "public/CNAME",
"chars": 14,
"preview": "qrcodescan.in\n"
},
{
"path": "public/ads.txt",
"chars": 58,
"preview": "google.com, pub-8317178183177647, DIRECT, f08c47fec0942fa0"
},
{
"path": "public/decoder.js",
"chars": 3540781,
"preview": "// The main barcode scanning processing function.\n// Compiled from zbar.sf.net using emscripten.\n//\n// Copyright (C) 201"
},
{
"path": "public/index.html",
"chars": 9247,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <title>QR Code Scanner</title>\n <meta http-e"
},
{
"path": "public/manifest.json",
"chars": 953,
"preview": "{\n \"short_name\": \"QR Scanner\",\n \"name\": \"QR Code Scanner\",\n \"description\": \"Easily scan a QR code. This is a simple, "
},
{
"path": "public/robots.txt",
"chars": 164,
"preview": "User-agent: Googlebot\nDisallow: /nogooglebot/\n\nUser-agent: *\nAllow: /\n\nSitemap: https://www.qrcodescan.in/sitemap.xml\nSi"
},
{
"path": "public/sitemap.xml",
"chars": 394,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:news=\"http://ww"
},
{
"path": "rollup.config.js",
"chars": 1029,
"preview": "import { terser } from 'rollup-plugin-terser';\nimport del from 'rollup-plugin-delete';\nimport { generateSW } from 'rollu"
},
{
"path": "src/css/styles.css",
"chars": 7843,
"preview": "html,\nbody,\np,\nol,\nul,\nli,\ndl,\ndt,\ndd,\nblockquote,\nfigure,\nfieldset,\nlegend,\ntextarea,\npre,\niframe,\nhr,\nh1,\nh2,\nh3,\nh4,\n"
},
{
"path": "src/js/index.js",
"chars": 6148,
"preview": "import QRReader from './vendor/qrscan.js';\nimport snackbar from './snackbar.js';\nimport { isURL, hasProtocolInUrl } from"
},
{
"path": "src/js/snackbar.js",
"chars": 547,
"preview": "var snackbar = {};\nvar snackBarElement = document.querySelector('.app__snackbar');\nvar snackbarMsg = null;\n\n//To show no"
},
{
"path": "src/js/utils.js",
"chars": 694,
"preview": "export const isURL = (url = '') => {\n if (!url || typeof url !== 'string') {\n return false;\n }\n\n const protocol = "
},
{
"path": "src/js/vendor/qrscan.js",
"chars": 4598,
"preview": "import snackbar from '../snackbar.js';\n\nvar QRReader = {};\n\nQRReader.active = false;\nQRReader.webcam = null;\nQRReader.ca"
}
]
About this extraction
This page contains the full source code of the gokulkrishh/qrcodescan.in GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 24 files (3.4 MB), approximately 895.5k tokens, and a symbol index with 15 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.