From e739b6e0f8e7c716de60cf649e78ab7e9e41a25f Mon Sep 17 00:00:00 2001 From: Craig Pretorius Date: Thu, 24 Aug 2023 19:25:07 +0000 Subject: [PATCH] Updated xlsx to v18.0 --- dist/js2excel.js | 14394 ++++++++++++++++++++++++++++------------- dist/js2excel.min.js | 2 +- package.json | 4 +- 3 files changed, 9866 insertions(+), 4534 deletions(-) diff --git a/dist/js2excel.js b/dist/js2excel.js index b15ebda..5701387 100644 --- a/dist/js2excel.js +++ b/dist/js2excel.js @@ -10,7 +10,9 @@ function commonjsRequire () { throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs'); } - +function unwrapExports (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; +} function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; @@ -208,9 +210,9 @@ if ('object' !== "undefined" && module.exports) { var FileSaver_1 = FileSaver.saveAs; var cpexcel = createCommonjsModule(function (module) { -/* cpexcel.js (C) 2013-present SheetJS -- http://sheetjs.com */ +/*! cpexcel.js (C) 2013-present SheetJS -- http://sheetjs.com */ /*jshint -W100 */ -var cptable = {version:"1.10.0"}; +var cptable = {version:"1.15.0"}; cptable[437] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })(); cptable[620] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàąçêëèïîćÄĄĘęłôöĆûùŚÖܢ٥śƒŹŻóÓńŃźż¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })(); cptable[737] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ ", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })(); @@ -1183,21 +1185,28 @@ return {"enc": e, "dec": d }; })(); cptable[10029] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })(); cptable[10079] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })(); cptable[10081] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })(); -if ('object' !== 'undefined' && module.exports) module.exports = cptable; -/* cputils.js (C) 2013-present SheetJS -- http://sheetjs.com */ +cptable[28591] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })(); +// eslint-disable-next-line no-undef +if ('object' !== 'undefined' && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === 'undefined') module.exports = cptable; +/*! cputils.js (C) 2013-present SheetJS -- http://sheetjs.com */ /* vim: set ft=javascript: */ /*jshint newcap: false */ (function(root, factory) { + /*jshint ignore:start */ + /*eslint-disable */ "use strict"; if(typeof cptable === "undefined") { if(typeof commonjsRequire !== "undefined"){ var cpt = cptable; - if ('object' !== 'undefined' && module.exports) module.exports = factory(cpt); + if ('object' !== 'undefined' && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === 'undefined') module.exports = factory(cpt); else root.cptable = factory(cpt); } else throw new Error("cptable not found"); } else cptable = factory(cptable); + /*eslint-enable */ + /*jshint ignore:end */ }(commonjsGlobal, function(cpt){ "use strict"; + /*global module, Buffer */ var magic = { "1200":"utf16le", "1201":"utf16be", @@ -1221,10 +1230,17 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; var cca = function cca(x) { return x.charCodeAt(0); }; var has_buf = (typeof Buffer !== 'undefined'); + var Buffer_from = function(){}; if(has_buf) { - var mdl = 1024, mdb = new Buffer(mdl); + var nbfs = !Buffer.from; + if(!nbfs) try { Buffer.from("foo", "utf8"); } catch(e) { nbfs = true; } + Buffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer); + // $FlowIgnore + if(!Buffer.allocUnsafe) Buffer.allocUnsafe = function(n) { return new Buffer(n); }; + + var mdl = 1024, mdb = Buffer.allocUnsafe(mdl); var make_EE = function make_EE(E){ - var EE = new Buffer(65536); + var EE = Buffer.allocUnsafe(65536); for(var i = 0; i < 65536;++i) EE[i] = 0; var keys = Object.keys(E), len = keys.length; for(var ee = 0, e = keys[ee]; ee < len; ++ee) { @@ -1239,10 +1255,10 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; var len = data.length; var out, i=0, j=0, D=0, w=0; if(typeof data === 'string') { - out = new Buffer(len); + out = Buffer.allocUnsafe(len); for(i = 0; i < len; ++i) out[i] = EE[data.charCodeAt(i)]; } else if(Buffer.isBuffer(data)) { - out = new Buffer(2*len); + out = Buffer.allocUnsafe(2*len); j = 0; for(i = 0; i < len; ++i) { D = data[i]; @@ -1257,7 +1273,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; } out = out.slice(0,j); } else { - out = new Buffer(len); + out = Buffer.allocUnsafe(len); for(i = 0; i < len; ++i) out[i] = EE[data[i].charCodeAt(0)]; } if(!ofmt || ofmt === 'buf') return out; @@ -1267,7 +1283,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; }; var sbcs_decode = function make_sbcs_decode(cp) { var D = cpt[cp].dec; - var DD = new Buffer(131072), d=0, c=""; + var DD = Buffer.allocUnsafe(131072), d=0, c=""; for(d=0;d mdl) { mdl = 2 * len; mdb = new Buffer(mdl); } + if(2 * len > mdl) { mdl = 2 * len; mdb = Buffer.allocUnsafe(mdl); } if(Buffer.isBuffer(data)) { for(i = 0; i < len; i++) { j = 2*data[i]; @@ -1297,7 +1313,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; }; var dbcs_encode = function make_dbcs_encode(cp) { var E = cpt[cp].enc; - var EE = new Buffer(131072); + var EE = Buffer.allocUnsafe(131072); for(var i = 0; i < 131072; ++i) EE[i] = 0; var keys = Object.keys(E); for(var ee = 0, e = keys[ee]; ee < keys.length; ++ee) { @@ -1306,7 +1322,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; EE[2*f] = E[e] & 255; EE[2*f+1] = E[e]>>8; } return function dbcs_e(data, ofmt) { - var len = data.length, out = new Buffer(2*len), i=0, j=0, jj=0, k=0, D=0; + var len = data.length, out = Buffer.allocUnsafe(2*len), i=0, j=0, jj=0, k=0, D=0; if(typeof data === 'string') { for(i = k = 0; i < len; ++i) { j = data.charCodeAt(i)*2; @@ -1340,7 +1356,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; }; var dbcs_decode = function make_dbcs_decode(cp) { var D = cpt[cp].dec; - var DD = new Buffer(131072), d=0, c, w=0, j=0, i=0; + var DD = Buffer.allocUnsafe(131072), d=0, c, w=0, j=0, i=0; for(i = 0; i < 65536; ++i) { DD[2*i] = 0xFF; DD[2*i+1] = 0xFD;} for(d = 0; d < D.length; ++d) { if(!(c=D[d])) continue; @@ -1349,7 +1365,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; DD[j] = w&255; DD[j+1] = w>>8; } return function dbcs_d(data) { - var len = data.length, out = new Buffer(2*len), i=0, j=0, k=0; + var len = data.length, out = Buffer.allocUnsafe(2*len), i=0, j=0, k=0; if(Buffer.isBuffer(data)) { for(i = 0; i < len; i++) { j = 2*data[i]; @@ -1375,7 +1391,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; magic_decode[65001] = function utf8_d(data) { if(typeof data === "string") return utf8_d(data.split("").map(cca)); var len = data.length, w = 0, ww = 0; - if(4 * len > mdl) { mdl = 4 * len; mdb = new Buffer(mdl); } + if(4 * len > mdl) { mdl = 4 * len; mdb = Buffer.allocUnsafe(mdl); } var i = 0; if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3; for(var j = 1, k = 0, D = 0; i < len; i+=j) { @@ -1400,7 +1416,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; } var len = data.length, w = 0, ww = 0, j = 0; var direct = typeof data === "string"; - if(4 * len > mdl) { mdl = 4 * len; mdb = new Buffer(mdl); } + if(4 * len > mdl) { mdl = 4 * len; mdb = Buffer.allocUnsafe(mdl); } for(var i = 0; i < len; ++i) { w = direct ? data.charCodeAt(i) : data[i].charCodeAt(0); if(w <= 0x007F) mdb[j++] = w; @@ -1451,7 +1467,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; } } }; - var null_enc = function(data, ofmt) { return ""; }; + var null_enc = function(data, ofmt) { void ofmt; return ""; }; var cp_decache = function cp_decache(cp) { delete cpdcache[cp]; delete cpecache[cp]; }; var decache = function decache() { if(has_buf) { @@ -1479,7 +1495,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; if(cpecache[cp]) { last_enc = cpecache[last_cp=cp]; return last_enc(data, ofmt); } if(has_buf && Buffer.isBuffer(data)) data = data.toString('utf8'); var len = data.length; - var out = has_buf ? new Buffer(4*len) : [], w=0, i=0, j = 0, ww=0; + var out = has_buf ? Buffer.allocUnsafe(4*len) : [], w=0, i=0, j = 0, ww=0; var C = cpt[cp], E, M = ""; var isstr = typeof data === 'string'; if(C && (E=C.enc)) for(i = 0; i < len; ++i, ++j) { @@ -1491,7 +1507,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; } else if((M=magic[cp])) switch(M) { case "utf8": - if(has_buf && isstr) { out = new Buffer(data, M); j = out.length; break; } + if(has_buf && isstr) { out = Buffer_from(data, M); j = out.length; break; } for(i = 0; i < len; ++i, ++j) { w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0); if(w <= 0x007F) out[j] = w; @@ -1513,7 +1529,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; } break; case "ascii": - if(has_buf && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; } + if(has_buf && typeof data === "string") { out = Buffer_from(data, M); j = out.length; break; } for(i = 0; i < len; ++i, ++j) { w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0); if(w <= 0x007F) out[j] = w; @@ -1521,7 +1537,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; } break; case "utf16le": - if(has_buf && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; } + if(has_buf && typeof data === "string") { out = Buffer_from(data, M); j = out.length; break; } for(i = 0; i < len; ++i) { w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0); out[j++] = w&255; @@ -1665,6 +1681,7 @@ if ('object' !== 'undefined' && module.exports) module.exports = cptable; if(data[i] !== 0x2b) { j=1; out[k++] = String.fromCharCode(data[i]); continue; } j=1; if(data[i+1] === 0x2d) { j = 2; out[k++] = "+"; continue; } + // eslint-disable-next-line no-useless-escape while(String.fromCharCode(data[i+j]).match(/[A-Za-z0-9+\/]/)) j++; var dash = 0; if(data[i+j] === 0x2d) { ++j; dash=1; } @@ -1709,7 +1726,7 @@ var empty$1 = Object.freeze({ }); var jszip = createCommonjsModule(function (module, exports) { -/*! +/* JSZip - A Javascript class for generating and reading zip files @@ -1719,9 +1736,21 @@ Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/js JSZip uses the library pako released under the MIT license : https://github.com/nodeca/pako/blob/master/LICENSE + +Note: since JSZip 3 removed critical functionality, this version assigns to the +`JSZipSync` variable. Another JSZip version can be loaded in parallel. */ (function(e){ - module.exports=e(); + if("object"=='object'&&"undefined"!='object'&&"undefined"==typeof DO_NOT_EXPORT_JSZIP)module.exports=e(); + else if("function"==typeof undefined&&undefined.amd&&"undefined"==typeof DO_NOT_EXPORT_JSZIP){JSZipSync=e();undefined('j',[],e);} + else{ + var f; + "undefined"!=typeof globalThis?f=globalThis: + "undefined"!=typeof window?f=window: + "undefined"!=typeof commonjsGlobal?f=commonjsGlobal: + "undefined"!=typeof $ && $.global?f=$.global: + "undefined"!=typeof self&&(f=self),f.JSZipSync=e(); + } }(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof commonjsRequire=="function"&&commonjsRequire;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r);}return n[o].exports}var i=typeof commonjsRequire=="function"&&commonjsRequire;for(var o=0;o>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | ((c >>> 6) & 0x3f); buf[i++] = 0x80 | (c & 0x3f); } else { /* four bytes */ buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | ((c >>> 12) & 0x3f); + buf[i++] = 0x80 | ((c >>> 6) & 0x3f); buf[i++] = 0x80 | (c & 0x3f); } } @@ -15902,22 +15939,53 @@ var require$$3 = ( empty$1 && empty ) || empty$1; var require$$4 = ( stream && Stream$1 ) || stream; var xlsx = createCommonjsModule(function (module, exports) { -/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ +/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ /* vim: set ts=2: */ -/*jshint -W041 */ -/*jshint funcscope:true, eqnull:true, loopfunc:true */ /*exported XLSX */ -/*global global, exports, module, require:false, process:false, Buffer:false */ +/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */ var XLSX = {}; -(function make_xlsx(XLSX){ -XLSX.version = '0.10.9'; -var current_codepage = 1200; -/*global cptable:true */ +function make_xlsx_lib(XLSX){ +XLSX.version = '0.18.0'; +var current_codepage = 1200, current_ansi = 1252; +/*global cptable:true, window */ if('object' !== "undefined" && typeof commonjsRequire !== 'undefined') { - if(typeof cptable === 'undefined') commonjsGlobal.cptable = cpexcel; + if(typeof cptable === 'undefined') { + if(typeof commonjsGlobal !== 'undefined') commonjsGlobal.cptable = cpexcel; + else if(typeof window !== 'undefined') window.cptable = cpexcel; + } } -function reset_cp() { set_cp(1200); } -var set_cp = function(cp) { current_codepage = cp; }; + +var VALID_ANSI = [ 874, 932, 936, 949, 950, 10000 ]; +for(var i = 0; i <= 8; ++i) VALID_ANSI.push(1250 + i); +/* ECMA-376 Part I 18.4.1 charset to codepage mapping */ +var CS2CP = ({ +0: 1252, /* ANSI */ +1: 65001, /* DEFAULT */ +2: 65001, /* SYMBOL */ +77: 10000, /* MAC */ +128: 932, /* SHIFTJIS */ +129: 949, /* HANGUL */ +130: 1361, /* JOHAB */ +134: 936, /* GB2312 */ +136: 950, /* CHINESEBIG5 */ +161: 1253, /* GREEK */ +162: 1254, /* TURKISH */ +163: 1258, /* VIETNAMESE */ +177: 1255, /* HEBREW */ +178: 1256, /* ARABIC */ +186: 1257, /* BALTIC */ +204: 1251, /* RUSSIAN */ +222: 874, /* THAI */ +238: 1250, /* EASTEUROPE */ +255: 1252, /* OEM */ +69: 6969 /* MISC */ +}); + +var set_ansi = function(cp) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; }; +function reset_ansi() { set_ansi(1252); } + +var set_cp = function(cp) { current_codepage = cp; set_ansi(cp); }; +function reset_cp() { set_cp(1200); reset_ansi(); } function char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; } @@ -15934,23 +16002,27 @@ function utf16beread(data) { var debom = function(data) { var c1 = data.charCodeAt(0), c2 = data.charCodeAt(1); - if(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.substr(2)); - if(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.substr(2)); - if(c1 == 0xFEFF) return data.substr(1); + if(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2)); + if(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2)); + if(c1 == 0xFEFF) return data.slice(1); return data; }; var _getchar = function _gc1(x) { return String.fromCharCode(x); }; +var _getansi = function _ga1(x) { return String.fromCharCode(x); }; if(typeof cptable !== 'undefined') { - set_cp = function(cp) { current_codepage = cp; }; + set_cp = function(cp) { current_codepage = cp; set_ansi(cp); }; debom = function(data) { - if(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); } + if(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.slice(2))); } return data; }; _getchar = function _gc2(x) { if(current_codepage === 1200) return String.fromCharCode(x); return cptable.utils.decode(current_codepage, [x&255,x>>8])[0]; }; + _getansi = function _ga2(x) { + return cptable.utils.decode(current_ansi, [x])[0]; + }; } var DENSE = null; var DIF_XL = true; @@ -15959,15 +16031,17 @@ var Base64 = (function make_b64(){ return { encode: function(input) { var o = ""; - var c1, c2, c3, e1, e2, e3, e4; + var c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0; for(var i = 0; i < input.length; ) { c1 = input.charCodeAt(i++); + e1 = (c1 >> 2); + c2 = input.charCodeAt(i++); + e2 = ((c1 & 3) << 4) | (c2 >> 4); + c3 = input.charCodeAt(i++); - e1 = c1 >> 2; - e2 = (c1 & 3) << 4 | c2 >> 4; - e3 = (c2 & 15) << 2 | c3 >> 6; - e4 = c3 & 63; + e3 = ((c2 & 15) << 2) | (c3 >> 6); + e4 = (c3 & 63); if (isNaN(c2)) { e3 = e4 = 64; } else if (isNaN(c3)) { e4 = 64; } o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4); @@ -15976,47 +16050,90 @@ var Base64 = (function make_b64(){ }, decode: function b64_decode(input) { var o = ""; - var c1, c2, c3; - var e1, e2, e3, e4; - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + var c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0; + input = input.replace(/[^\w\+\/\=]/g, ""); for(var i = 0; i < input.length;) { e1 = map.indexOf(input.charAt(i++)); e2 = map.indexOf(input.charAt(i++)); + c1 = (e1 << 2) | (e2 >> 4); + o += String.fromCharCode(c1); + e3 = map.indexOf(input.charAt(i++)); + c2 = ((e2 & 15) << 4) | (e3 >> 2); + if (e3 !== 64) { o += String.fromCharCode(c2); } + e4 = map.indexOf(input.charAt(i++)); - c1 = e1 << 2 | e2 >> 4; - c2 = (e2 & 15) << 4 | e3 >> 2; - c3 = (e3 & 3) << 6 | e4; - o += String.fromCharCode(c1); - if (e3 != 64) { o += String.fromCharCode(c2); } - if (e4 != 64) { o += String.fromCharCode(c3); } + c3 = ((e3 & 3) << 6) | e4; + if (e4 !== 64) { o += String.fromCharCode(c3); } } return o; } }; })(); -var has_buf = (typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && process.versions.node); +var has_buf = (typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node); + +var Buffer_from = function(){}; + +if(typeof Buffer !== 'undefined') { + var nbfs = !Buffer.from; + if(!nbfs) try { Buffer.from("foo", "utf8"); } catch(e) { nbfs = true; } + Buffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer); + // $FlowIgnore + if(!Buffer.alloc) Buffer.alloc = function(n) { return new Buffer(n); }; + // $FlowIgnore + if(!Buffer.allocUnsafe) Buffer.allocUnsafe = function(n) { return new Buffer(n); }; +} function new_raw_buf(len) { /* jshint -W056 */ - // $FlowIgnore - return new (has_buf ? Buffer : Array)(len); + return has_buf ? Buffer.alloc(len) : new Array(len); + /* jshint +W056 */ +} + +function new_unsafe_buf(len) { + /* jshint -W056 */ + return has_buf ? Buffer.allocUnsafe(len) : new Array(len); /* jshint +W056 */ } -function s2a(s) { - if(has_buf) return new Buffer(s, "binary"); +var s2a = function s2a(s) { + if(has_buf) return Buffer_from(s, "binary"); return s.split("").map(function(x){ return x.charCodeAt(0) & 0xff; }); +}; + +function s2ab(s) { + if(typeof ArrayBuffer === 'undefined') return s2a(s); + var buf = new ArrayBuffer(s.length), view = new Uint8Array(buf); + for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; + return buf; +} + +function a2s(data) { + if(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(""); + var o = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(""); +} + +function a2u(data) { + if(typeof Uint8Array === 'undefined') throw new Error("Unsupported"); + return new Uint8Array(data); +} + +function ab2a(data) { + if(typeof ArrayBuffer == 'undefined') throw new Error("Unsupported"); + if(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data)); +var o = new Array(data.length); + for(var i = 0; i < data.length; ++i) o[i] = data[i]; + return o; } var bconcat = function(bufs) { return [].concat.apply([], bufs); }; -var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/; +var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/g; /* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */ /*jshint -W041 */ var SSF = ({}); var make_ssf = function make_ssf(SSF){ -SSF.version = '0.10.0'; +SSF.version = '0.11.2'; function _strrev(x) { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; } function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; } function pad0(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;} @@ -16080,11 +16197,65 @@ function init_table(t) { t[48]= '##0.0E+0'; t[49]= '@'; t[56]= '"上午/下午 "hh"時"mm"分"ss"秒 "'; - t[65535]= 'General'; } var table_fmt = {}; init_table(table_fmt); +/* Defaults determined by systematically testing in Excel 2019 */ + +/* These formats appear to default to other formats in the table */ +var default_map = []; +var defi = 0; + +// 5 -> 37 ... 8 -> 40 +for(defi = 5; defi <= 8; ++defi) default_map[defi] = 32 + defi; + +// 23 -> 0 ... 26 -> 0 +for(defi = 23; defi <= 26; ++defi) default_map[defi] = 0; + +// 27 -> 14 ... 31 -> 14 +for(defi = 27; defi <= 31; ++defi) default_map[defi] = 14; +// 50 -> 14 ... 58 -> 14 +for(defi = 50; defi <= 58; ++defi) default_map[defi] = 14; + +// 59 -> 1 ... 62 -> 4 +for(defi = 59; defi <= 62; ++defi) default_map[defi] = defi - 58; +// 67 -> 9 ... 68 -> 10 +for(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 58; +// 72 -> 14 ... 75 -> 17 +for(defi = 72; defi <= 75; ++defi) default_map[defi] = defi - 58; + +// 69 -> 12 ... 71 -> 14 +for(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 57; + +// 76 -> 20 ... 78 -> 22 +for(defi = 76; defi <= 78; ++defi) default_map[defi] = defi - 56; + +// 79 -> 45 ... 81 -> 47 +for(defi = 79; defi <= 81; ++defi) default_map[defi] = defi - 34; + +// 82 -> 0 ... 65536 -> 0 (omitted) + +/* These formats technically refer to Accounting formats with no equivalent */ +var default_str = []; + +// 5 -- Currency, 0 decimal, black negative +default_str[5] = default_str[63] = '"$"#,##0_);\\("$"#,##0\\)'; +// 6 -- Currency, 0 decimal, red negative +default_str[6] = default_str[64] = '"$"#,##0_);[Red]\\("$"#,##0\\)'; +// 7 -- Currency, 2 decimal, black negative +default_str[7] = default_str[65] = '"$"#,##0.00_);\\("$"#,##0.00\\)'; +// 8 -- Currency, 2 decimal, red negative +default_str[8] = default_str[66] = '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)'; + +// 41 -- Accounting, 0 decimal, No Symbol +default_str[41] = '_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)'; +// 42 -- Accounting, 0 decimal, $ Symbol +default_str[42] = '_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)'; +// 43 -- Accounting, 2 decimal, No Symbol +default_str[43] = '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)'; +// 44 -- Accounting, 2 decimal, $ Symbol +default_str[44] = '_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'; function frac(x, D, mixed) { var sgn = x < 0 ? -1 : 1; var B = x * sgn; @@ -16145,42 +16316,69 @@ function datenum_local(v, date1904) { else if(v >= base1904) epoch += 24*60*60*1000; return (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000); } +/* The longest 32-bit integer text is "-4294967296", exactly 11 chars */ function general_fmt_int(v) { return v.toString(10); } SSF._general_int = general_fmt_int; + +/* ECMA-376 18.8.30 numFmt*/ +/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */ var general_fmt_num = (function make_general_fmt_num() { -var gnr1 = /\.(\d*[1-9])0+$/, gnr2 = /\.0*$/, gnr4 = /\.(\d*[1-9])0+/, gnr5 = /\.0*[Ee]/, gnr6 = /(E[+-])(\d)$/; -function gfn2(v) { - var w = (v<0?12:11); - var o = gfn5(v.toFixed(12)); if(o.length <= w) return o; - o = v.toPrecision(10); if(o.length <= w) return o; - return v.toExponential(5); -} -function gfn3(v) { - var o = v.toFixed(11).replace(gnr1,".$1"); - if(o.length > (v<0?12:11)) o = v.toPrecision(6); - return o; -} -function gfn4(o) { - for(var i = 0; i != o.length; ++i) if((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2"); - return o; -} -function gfn5(o) { - return o.indexOf(".") > -1 ? o.replace(gnr2,"").replace(gnr1,".$1") : o; -} -return function general_fmt_num(v) { - var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o; - if(V >= -4 && V <= -1) o = v.toPrecision(10+V); - else if(Math.abs(V) <= 9) o = gfn2(v); - else if(V === 10) o = v.toFixed(10).substr(0,12); - else o = gfn3(v); - return gfn5(gfn4(o)); -};})(); + var trailing_zeroes_and_decimal = /(?:\.0*|(\.\d*[1-9])0+)$/; + function strip_decimal(o) { + return (o.indexOf(".") == -1) ? o : o.replace(trailing_zeroes_and_decimal, "$1"); + } + + /* General Exponential always shows 2 digits exp and trims the mantissa */ + var mantissa_zeroes_and_decimal = /(?:\.0*|(\.\d*[1-9])0+)[Ee]/; + var exp_with_single_digit = /(E[+-])(\d)$/; + function normalize_exp(o) { + if(o.indexOf("E") == -1) return o; + return o.replace(mantissa_zeroes_and_decimal,"$1E").replace(exp_with_single_digit,"$10$2"); + } + + /* exponent >= -9 and <= 9 */ + function small_exp(v) { + var w = (v<0?12:11); + var o = strip_decimal(v.toFixed(12)); if(o.length <= w) return o; + o = v.toPrecision(10); if(o.length <= w) return o; + return v.toExponential(5); + } + + /* exponent >= 11 or <= -10 likely exponential */ + function large_exp(v) { + var o = strip_decimal(v.toFixed(11)); + return (o.length > (v<0?12:11) || o === "0" || o === "-0") ? v.toPrecision(6) : o; + } + + function general_fmt_num_base(v) { + var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o; + + if(V >= -4 && V <= -1) o = v.toPrecision(10+V); + else if(Math.abs(V) <= 9) o = small_exp(v); + else if(V === 10) o = v.toFixed(10).substr(0,12); + else o = large_exp(v); + + return strip_decimal(normalize_exp(o.toUpperCase())); + } + + return general_fmt_num_base; +})(); SSF._general_num = general_fmt_num; + +/* + "General" rules: + - text is passed through ("@") + - booleans are rendered as TRUE/FALSE + - "up to 11 characters" displayed for numbers + - Default date format (code 14) used for Dates + + TODO: technically the display depends on the width of the cell +*/ function general_fmt(v, opts) { switch(typeof v) { case 'string': return v; case 'boolean': return v ? "TRUE" : "FALSE"; - case 'number': return (v|0) === v ? general_fmt_int(v) : general_fmt_num(v); + case 'number': return (v|0) === v ? v.toString(10) : general_fmt_num(v); case 'undefined': return ""; case 'object': if(v == null) return ""; @@ -16189,7 +16387,14 @@ function general_fmt(v, opts) { throw new Error("unsupported value in General format: " + v); } SSF._general = general_fmt; -function fix_hijri() { return 0; } +function fix_hijri(date, o) { + /* TODO: properly adjust y/m/d and */ + o[0] -= 581; + var dow = date.getDay(); + if(date < 60) dow = (dow + 6) % 7; + return dow; +} +//var THAI_DIGITS = "\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59".split(""); /*jshint -W086 */ function write_date(type, fmt, val, ss0) { var o="", ss=0, tt=0, y = val.y, out, outl = 0; @@ -16249,9 +16454,10 @@ if(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100; default: throw 'bad abstime format: ' + fmt; } outl = fmt.length === 3 ? 1 : 2; break; case 101: /* 'e' era */ - out = y; outl = 1; + out = y; outl = 1; break; } - if(outl > 0) return pad0(out, outl); else return ""; + var outstr = outl > 0 ? pad0(out, outl) : ""; + return outstr; } /*jshint +W086 */ function commaify(s) { @@ -16322,10 +16528,9 @@ function hashq(str) { } function rnd(val, d) { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); } function dec(val, d) { - if (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) { - return 0; - } - return Math.round((val-Math.floor(val))*Math.pow(10,d)); + var _frac = val - Math.floor(val), dd = Math.pow(10,d); + if (d < ('' + Math.round(_frac * dd)).length) return 0; + return Math.round(_frac * dd); } function carry(val, d) { if (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) { @@ -16333,7 +16538,10 @@ function carry(val, d) { } return 0; } -function flr(val) { if(val < 2147483647 && val > -2147483648) return ""+(val >= 0 ? (val|0) : (val-1|0)); return ""+Math.floor(val); } +function flr(val) { + if(val < 2147483647 && val > -2147483648) return ""+(val >= 0 ? (val|0) : (val-1|0)); + return ""+Math.floor(val); +} function write_num_flt(type, fmt, val) { if(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) { var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,""); @@ -16554,13 +16762,13 @@ function split_fmt(fmt) { return out; } SSF._split = split_fmt; -var abstime = /\[[HhMmSs]*\]/; +var abstime = /\[[HhMmSs\u0E0A\u0E19\u0E17]*\]/; function fmt_is_date(fmt) { var i = 0, /*cc = 0,*/ c = "", o = ""; while(i < fmt.length) { switch((c = fmt.charAt(i))) { case 'G': if(isgeneral(fmt, i)) i+= 6; i++; break; - case '"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i; ++i; break; + case '"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break; case '\\': i+=2; break; case '_': i+=2; break; case '@': ++i; break; @@ -16570,9 +16778,10 @@ function fmt_is_date(fmt) { case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E': /* falls through */ case 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true; - case 'A': case 'a': + case 'A': case 'a': case '上': if(fmt.substr(i, 3).toUpperCase() === "A/P") return true; if(fmt.substr(i, 5).toUpperCase() === "AM/PM") return true; + if(fmt.substr(i, 5).toUpperCase() === "上午/下午") return true; ++i; break; case '[': o = c; @@ -16629,11 +16838,12 @@ function eval_fmt(fmt, v, opts, flen) { if(c === 'm' && lst.toLowerCase() === 'h') c = 'M'; if(c === 'h') c = hr; out[out.length] = {t:c, v:o}; lst = c; break; - case 'A': case 'a': + case 'A': case 'a': case '上': var q={t:c, v:c}; if(dt==null) dt=parse_date_code(v, opts); if(fmt.substr(i, 3).toUpperCase() === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;} else if(fmt.substr(i,5).toUpperCase() === "AM/PM") { if(dt!=null) q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; } + else if(fmt.substr(i,5).toUpperCase() === "上午/下午") { if(dt!=null) q.v = dt.H >= 12 ? "下午" : "上午"; q.t = 'T'; i+=5; hr='h'; } else { q.t = "t"; ++i; } if(dt==null && q.t === 'T') return ""; out[out.length] = q; lst = c; break; @@ -16658,7 +16868,7 @@ function eval_fmt(fmt, v, opts, flen) { } /* falls through */ case '0': case '#': - o = c; while((++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1) || (c=='\\' && fmt.charAt(i+1) == "-" && i < fmt.length - 2 && "0#".indexOf(fmt.charAt(i+2))>-1)) o += c; + o = c; while(++i < fmt.length && "0#?.,E+-%".indexOf(c=fmt.charAt(i)) > -1) o += c; out[out.length] = {t:'n', v:o}; break; case '?': o = c; while(fmt.charAt(++i) === c) o+=c; @@ -16669,11 +16879,14 @@ function eval_fmt(fmt, v, opts, flen) { o = c; while(i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i); out[out.length] = {t:'D', v:o}; break; case ' ': out[out.length] = {t:c, v:c}; ++i; break; + case '$': out[out.length] = {t:'t', v:'$'}; ++i; break; default: if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt); out[out.length] = {t:'t', v:c}; ++i; break; } } + + /* Scan for date/time parts */ var bt = 0, ss0 = 0, ssm; for(i=out.length-1, lst='t'; i >= 0; --i) { switch(out[i].t) { @@ -16692,6 +16905,7 @@ function eval_fmt(fmt, v, opts, flen) { if(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3; } } + /* time rounding depends on presence of minute / second / usec fields */ switch(bt) { case 0: break; case 1: @@ -16704,6 +16918,7 @@ if(dt.u >= 0.5) { dt.u = 0; ++dt.S; } if(dt.S >= 60) { dt.S = 0; ++dt.M; } break; } + /* replace fields */ var nstr = "", jj; for(i=0; i < out.length; ++i) { @@ -16713,7 +16928,7 @@ if(dt.u >= 0.5) { dt.u = 0; ++dt.S; } case 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z': out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0); out[i].t = 't'; break; - case 'n': case '(': case '?': + case 'n': case '?': jj = i+1; while(out[jj] != null && ( (c=out[jj].t) === "?" || c === "D" || @@ -16733,7 +16948,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0); if(nstr.length > 0) { if(nstr.charCodeAt(0) == 40) /* '(' */ { myv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v); - ostr = write_num('(', nstr, myv); + ostr = write_num('n', nstr, myv); } else { myv = (v<0 && flen > 1 ? -v : v); ostr = write_num('n', nstr, myv); @@ -16748,7 +16963,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0); var lasti=out.length; if(decpt === out.length && ostr.indexOf("E") === -1) { for(i=out.length-1; i>= 0;--i) { - if(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue; + if(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue; if(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); } else if(jj < 0) out[i].v = ""; else { out[i].v = ostr.substr(0, jj+1); jj = -1; } @@ -16760,7 +16975,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0); else if(decpt !== out.length && ostr.indexOf("E") === -1) { jj = ostr.indexOf(".")-1; for(i=decpt; i>= 0; --i) { - if(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue; + if(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue; j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1; vv = out[i].v.substr(j+1); for(; j>=0; --j) { @@ -16785,7 +17000,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0); } } } - for(i=0; i-1) { + for(i=0; i-1) { myv = (flen >1 && v < 0 && i>0 && out[i-1].v === "-" ? -v:v); out[i].v = write_num(out[i].t, out[i].v, myv); out[i].t = 't'; @@ -16796,7 +17011,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0); } SSF._eval = eval_fmt; var cfregex = /\[[=<>]/; -var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/; +var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/; function chkcond(v, rr) { if(rr == null) return false; var thresh = parseFloat(rr[2]); @@ -16842,6 +17057,8 @@ function format(fmt,v,o) { case "number": if(fmt == 14 && o.dateNF) sfmt = o.dateNF; else sfmt = (o.table != null ? (o.table) : table_fmt)[fmt]; + if(sfmt == null) sfmt = (o.table && o.table[default_map[fmt]]) || table_fmt[default_map[fmt]]; + if(sfmt == null) sfmt = default_str[fmt] || "General"; break; } if(isgeneral(sfmt,0)) return general_fmt(v, o); @@ -16895,6 +17112,46 @@ var XLMLFormatMap/*{[string]:string}*/ = ({ "On/Off": '"Yes";"Yes";"No";@' }); +var SSFImplicit/*{[number]:string}*/ = ({ + "5": '"$"#,##0_);\\("$"#,##0\\)', + "6": '"$"#,##0_);[Red]\\("$"#,##0\\)', + "7": '"$"#,##0.00_);\\("$"#,##0.00\\)', + "8": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)', + "23": 'General', "24": 'General', "25": 'General', "26": 'General', + "27": 'm/d/yy', "28": 'm/d/yy', "29": 'm/d/yy', "30": 'm/d/yy', "31": 'm/d/yy', + "32": 'h:mm:ss', "33": 'h:mm:ss', "34": 'h:mm:ss', "35": 'h:mm:ss', + "36": 'm/d/yy', + "41": '_(* #,##0_);_(* \(#,##0\);_(* "-"_);_(@_)', + "42": '_("$"* #,##0_);_("$"* \(#,##0\);_("$"* "-"_);_(@_)', + "43": '_(* #,##0.00_);_(* \(#,##0.00\);_(* "-"??_);_(@_)', + "44": '_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)', + "50": 'm/d/yy', "51": 'm/d/yy', "52": 'm/d/yy', "53": 'm/d/yy', "54": 'm/d/yy', + "55": 'm/d/yy', "56": 'm/d/yy', "57": 'm/d/yy', "58": 'm/d/yy', + "59": '0', + "60": '0.00', + "61": '#,##0', + "62": '#,##0.00', + "63": '"$"#,##0_);\\("$"#,##0\\)', + "64": '"$"#,##0_);[Red]\\("$"#,##0\\)', + "65": '"$"#,##0.00_);\\("$"#,##0.00\\)', + "66": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)', + "67": '0%', + "68": '0.00%', + "69": '# ?/?', + "70": '# ??/??', + "71": 'm/d/yy', + "72": 'm/d/yy', + "73": 'd-mmm-yy', + "74": 'd-mmm', + "75": 'mmm-yy', + "76": 'h:mm', + "77": 'h:mm:ss', + "78": 'm/d/yy h:mm', + "79": 'mm:ss', + "80": '[h]:mm:ss', + "81": 'mmss.0' +}); + /* dateNF parse TODO: move to SSF */ var dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g; function dateNF_regex(dateNF) { @@ -16926,19 +17183,211 @@ var DO_NOT_EXPORT_CFB = true; /* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */ /* vim: set ts=2: */ /*jshint eqnull:true */ +/*exported CFB */ +/*global Uint8Array:false, Uint16Array:false */ -/* [MS-CFB] v20130118 */ +/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */ +/* vim: set ts=2: */ +/*exported CRC32 */ +var CRC32; +(function (factory) { + /*jshint ignore:start */ + /*eslint-disable */ + factory(CRC32 = {}); + /*eslint-enable */ + /*jshint ignore:end */ +}(function(CRC32) { +CRC32.version = '1.2.0'; +/* see perf/crc32table.js */ +/*global Int32Array */ +function signed_crc_table() { + var c = 0, table = new Array(256); + + for(var n =0; n != 256; ++n){ + c = n; + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + table[n] = c; + } + + return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table; +} + +var T = signed_crc_table(); +function crc32_bstr(bstr, seed) { + var C = seed ^ -1, L = bstr.length - 1; + for(var i = 0; i < L;) { + C = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF]; + C = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF]; + } + if(i === L) C = (C>>>8) ^ T[(C ^ bstr.charCodeAt(i))&0xFF]; + return C ^ -1; +} + +function crc32_buf(buf, seed) { + if(buf.length > 10000) return crc32_buf_8(buf, seed); + var C = seed ^ -1, L = buf.length - 3; + for(var i = 0; i < L;) { + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + } + while(i < L+3) C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + return C ^ -1; +} + +function crc32_buf_8(buf, seed) { + var C = seed ^ -1, L = buf.length - 7; + for(var i = 0; i < L;) { + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + } + while(i < L+7) C = (C>>>8) ^ T[(C^buf[i++])&0xFF]; + return C ^ -1; +} + +function crc32_str(str, seed) { + var C = seed ^ -1; + for(var i = 0, L=str.length, c, d; i < L;) { + c = str.charCodeAt(i++); + if(c < 0x80) { + C = (C>>>8) ^ T[(C ^ c)&0xFF]; + } else if(c < 0x800) { + C = (C>>>8) ^ T[(C ^ (192|((c>>6)&31)))&0xFF]; + C = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF]; + } else if(c >= 0xD800 && c < 0xE000) { + c = (c&1023)+64; d = str.charCodeAt(i++)&1023; + C = (C>>>8) ^ T[(C ^ (240|((c>>8)&7)))&0xFF]; + C = (C>>>8) ^ T[(C ^ (128|((c>>2)&63)))&0xFF]; + C = (C>>>8) ^ T[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF]; + C = (C>>>8) ^ T[(C ^ (128|(d&63)))&0xFF]; + } else { + C = (C>>>8) ^ T[(C ^ (224|((c>>12)&15)))&0xFF]; + C = (C>>>8) ^ T[(C ^ (128|((c>>6)&63)))&0xFF]; + C = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF]; + } + } + return C ^ -1; +} +CRC32.table = T; +CRC32.bstr = crc32_bstr; +CRC32.buf = crc32_buf; +CRC32.str = crc32_str; +})); +/* [MS-CFB] v20171201 */ var CFB = (function _CFB(){ var exports = {}; -exports.version = '0.12.0'; +exports.version = '1.1.4'; +/* [MS-CFB] 2.6.4 */ +function namecmp(l, r) { + var L = l.split("/"), R = r.split("/"); + for(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) { + if((c = L[i].length - R[i].length)) return c; + if(L[i] != R[i]) return L[i] < R[i] ? -1 : 1; + } + return L.length - R.length; +} +function dirname(p) { + if(p.charAt(p.length - 1) == "/") return (p.slice(0,-1).indexOf("/") === -1) ? p : dirname(p.slice(0, -1)); + var c = p.lastIndexOf("/"); + return (c === -1) ? p : p.slice(0, c+1); +} + +function filename(p) { + if(p.charAt(p.length - 1) == "/") return filename(p.slice(0, -1)); + var c = p.lastIndexOf("/"); + return (c === -1) ? p : p.slice(c+1); +} +/* -------------------------------------------------------------------------- */ +/* DOS Date format: + high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low + add 1980 to stored year + stored second should be doubled +*/ + +/* write JS date to buf as a DOS date */ +function write_dos_date(buf, date) { + if(typeof date === "string") date = new Date(date); + var hms = date.getHours(); + hms = hms << 6 | date.getMinutes(); + hms = hms << 5 | (date.getSeconds()>>>1); + buf.write_shift(2, hms); + var ymd = (date.getFullYear() - 1980); + ymd = ymd << 4 | (date.getMonth()+1); + ymd = ymd << 5 | date.getDate(); + buf.write_shift(2, ymd); +} + +/* read four bytes from buf and interpret as a DOS date */ +function parse_dos_date(buf) { + var hms = buf.read_shift(2) & 0xFFFF; + var ymd = buf.read_shift(2) & 0xFFFF; + var val = new Date(); + var d = ymd & 0x1F; ymd >>>= 5; + var m = ymd & 0x0F; ymd >>>= 4; + val.setMilliseconds(0); + val.setFullYear(ymd + 1980); + val.setMonth(m-1); + val.setDate(d); + var S = hms & 0x1F; hms >>>= 5; + var M = hms & 0x3F; hms >>>= 6; + val.setHours(hms); + val.setMinutes(M); + val.setSeconds(S<<1); + return val; +} +function parse_extra_field(blob) { + prep_blob(blob, 0); + var o = {}; + var flags = 0; + while(blob.l <= blob.length - 4) { + var type = blob.read_shift(2); + var sz = blob.read_shift(2), tgt = blob.l + sz; + var p = {}; + switch(type) { + /* UNIX-style Timestamps */ + case 0x5455: { + flags = blob.read_shift(1); + if(flags & 1) p.mtime = blob.read_shift(4); + /* for some reason, CD flag corresponds to LFH */ + if(sz > 5) { + if(flags & 2) p.atime = blob.read_shift(4); + if(flags & 4) p.ctime = blob.read_shift(4); + } + if(p.mtime) p.mt = new Date(p.mtime*1000); + } + break; + } + blob.l = tgt; + o[type] = p; + } + return o; +} +var fs; +function get_fs() { return fs || (fs = require$$3); } function parse(file, options) { -var mver = 3; // major version -var ssz = 512; // sector size +if(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options); +if(file.length < 512) throw new Error("CFB file size " + file.length + " < 512"); +var mver = 3; +var ssz = 512; var nmfs = 0; // number of mini FAT sectors -var ndfs = 0; // number of DIFAT sectors -var dir_start = 0; // first directory sector location -var minifat_start = 0; // first mini FAT sector location -var difat_start = 0; // first mini FAT sector location +var difat_sec_cnt = 0; +var dir_start = 0; +var minifat_start = 0; +var difat_start = 0; var fat_addrs = []; // locations of FAT sectors @@ -16951,6 +17400,8 @@ var mv = check_get_mver(blob); mver = mv[0]; switch(mver) { case 3: ssz = 512; break; case 4: ssz = 4096; break; + case 0: if(mv[1] == 0) return parse_zip(file, options); + /* falls through */ default: throw new Error("Major Version: Expected 3 or 4 saw " + mver); } @@ -16962,11 +17413,10 @@ var header = file.slice(0,ssz); check_shifts(blob, mver); // Number of Directory Sectors -var nds = blob.read_shift(4, 'i'); -if(mver === 3 && nds !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + nds); +var dir_cnt = blob.read_shift(4, 'i'); +if(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt); // Number of FAT Sectors -//var nfs = blob.read_shift(4, 'i'); blob.l += 4; // First Directory Sector Location @@ -16988,7 +17438,7 @@ nmfs = blob.read_shift(4, 'i'); difat_start = blob.read_shift(4, 'i'); // Number of DIFAT Sectors -ndfs = blob.read_shift(4, 'i'); +difat_sec_cnt = blob.read_shift(4, 'i'); // Grab FAT Sector Locations for(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */ @@ -17000,7 +17450,7 @@ for(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */ /** Break the file up into sectors */ var sectors = sectorify(file, ssz); -sleuth_fat(difat_start, ndfs, sectors, ssz, fat_addrs); +sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs); /** Chains */ var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz); @@ -17012,32 +17462,31 @@ sector_list.fat_addrs = fat_addrs; sector_list.ssz = ssz; /* [MS-CFB] 2.6.1 Compound File Directory Entry */ -var files = {}, Paths = [], FileIndex = [], FullPaths = [], FullPathDir = {}; -read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex); - -build_full_paths(FileIndex, FullPathDir, FullPaths, Paths); - -var root_name = Paths.shift(); +var files = {}, Paths = [], FileIndex = [], FullPaths = []; +read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start); -/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */ -var find_path = make_find_path(FullPaths, Paths, FileIndex, files, root_name); +build_full_paths(FileIndex, FullPaths, Paths); +Paths.shift(); -return { - raw: {header: header, sectors: sectors}, +var o = { FileIndex: FileIndex, - FullPaths: FullPaths, - FullPathDir: FullPathDir, - find: find_path + FullPaths: FullPaths }; + +// $FlowIgnore +if(options && options.raw) o.raw = {header: header, sectors: sectors}; +return o; } // parse /* [MS-CFB] 2.2 Compound File Header -- read up to major version */ function check_get_mver(blob) { + if(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0]; // header signature 8 blob.chk(HEADER_SIGNATURE, 'Header Signature: '); // clsid 16 - blob.chk(HEADER_CLSID, 'CLSID: '); + //blob.chk(HEADER_CLSID, 'CLSID: '); + blob.l += 16; // minor version 2 var mver = blob.read_shift(2, 'u'); @@ -17075,7 +17524,7 @@ function sectorify(file, ssz) { } /* [MS-CFB] 2.6.4 Red-Black Tree */ -function build_full_paths(FI, FPD, FP, Paths) { +function build_full_paths(FI, FP, Paths) { var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length; var dad = [], q = []; @@ -17089,51 +17538,46 @@ function build_full_paths(FI, FPD, FP, Paths) { if(R !== -1 && dad[R] !== R) dad[i] = dad[R]; } if(C !== -1 /*NOSTREAM*/) dad[C] = i; - if(L !== -1) { dad[L] = dad[i]; q.push(L); } - if(R !== -1) { dad[R] = dad[i]; q.push(R); } + if(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); } + if(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); } } - for(i=1; i !== pl; ++i) if(dad[i] === i) { + for(i=1; i < pl; ++i) if(dad[i] === i) { if(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R]; else if(L !== -1 && dad[L] !== L) dad[i] = dad[L]; } for(i=1; i < pl; ++i) { if(FI[i].type === 0 /* unknown */) continue; - j = dad[i]; - if(j === 0) FP[i] = FP[0] + "/" + FP[i]; - else while(j !== 0) { - FP[i] = FP[j] + "/" + FP[i]; + j = i; + if(j != dad[j]) do { j = dad[j]; - } - dad[i] = 0; + FP[i] = FP[j] + "/" + FP[i]; + } while (j !== 0 && -1 !== dad[j] && j != dad[j]); + dad[i] = -1; } FP[0] += "/"; for(i=1; i < pl; ++i) { if(FI[i].type !== 2 /* stream */) FP[i] += "/"; - FPD[FP[i]] = FI[i]; } } -/* [MS-CFB] 2.6.4 */ -function make_find_path(FullPaths, Paths, FileIndex, files, root_name) { - var UCFullPaths = []; - var UCPaths = [], i = 0; - for(i = 0; i < FullPaths.length; ++i) UCFullPaths[i] = FullPaths[i].toUpperCase().replace(chr0,'').replace(chr1,'!'); - for(i = 0; i < Paths.length; ++i) UCPaths[i] = Paths[i].toUpperCase().replace(chr0,'').replace(chr1,'!'); - return function find_path(path) { - var k = false; - if(path.charCodeAt(0) === 47 /* "/" */) { k=true; path = root_name + path; } - else k = path.indexOf("/") !== -1; - var UCPath = path.toUpperCase().replace(chr0,'').replace(chr1,'!'); - var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath); - if(w === -1) return null; - return k === true ? FileIndex[w] : files[Paths[w]]; - }; +function get_mfat_entry(entry, payload, mini) { + var start = entry.start, size = entry.size; + //return (payload.slice(start*MSSZ, start*MSSZ + size)); + var o = []; + var idx = start; + while(mini && size > 0 && idx >= 0) { + o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ)); + size -= MSSZ; + idx = __readInt32LE(mini, idx * 4); + } + if(o.length === 0) return (new_buf(0)); + return (bconcat(o).slice(0, entry.size)); } /** Chase down the rest of the DIFAT chain to build a comprehensive list - DIFAT chains by storing the next sector number as the last 32 bytes */ + DIFAT chains by storing the next sector number as the last 32 bits */ function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) { var q = ENDOFCHAIN; if(idx === ENDOFCHAIN) { @@ -17145,13 +17589,12 @@ function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) { if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break; fat_addrs.push(q); } - sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs); + if(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs); } } /** Follow the linked list of sectors for a given starting point */ function get_sector_list(sectors, start, fat_addrs, ssz, chkd) { - var sl = sectors.length; var buf = [], buf_chain = []; if(!chkd) chkd = []; var modulus = ssz - 1, j = 0, jj = 0; @@ -17178,7 +17621,9 @@ function make_sector_list(sectors, dir_start, fat_addrs, ssz) { k = (i + dir_start); if(k >= sl) k-=sl; if(chkd[k]) continue; buf_chain = []; + var seen = []; for(j=k; j>=0;) { + seen[j] = true; chkd[j] = true; buf[buf.length] = j; buf_chain.push(sectors[j]); @@ -17187,6 +17632,7 @@ function make_sector_list(sectors, dir_start, fat_addrs, ssz) { if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); + if(seen[j]) break; } sector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}); } @@ -17194,7 +17640,7 @@ function make_sector_list(sectors, dir_start, fat_addrs, ssz) { } /* [MS-CFB] 2.6.1 Compound File Directory Entry */ -function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex) { +function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) { var minifat_store = 0, pl = (Paths.length?2:0); var sector = sector_list[dir_start].data; var i = 0, namelen = 0, name; @@ -17202,7 +17648,6 @@ function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, Fil var blob = sector.slice(i, i+128); prep_blob(blob, 64); namelen = blob.read_shift(2); - if(namelen === 0) continue; name = __utf16le(blob,0,namelen-pl); Paths.push(name); var o = ({ @@ -17223,6 +17668,7 @@ function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, Fil if(mtime !== 0) o.mt = read_date(blob, blob.l-8); o.start = blob.read_shift(4, 'i'); o.size = blob.read_shift(4, 'i'); + if(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = ""; } if(o.type === 5) { /* root */ minifat_store = o.start; if(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = "!StreamData"; @@ -17232,14 +17678,14 @@ function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, Fil if(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz); sector_list[o.start].name = o.name; o.content = (sector_list[o.start].data.slice(0,o.size)); - prep_blob(o.content, 0); } else { o.storage = 'minifat'; - if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN) { - o.content = (sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size)); - prep_blob(o.content, 0); + if(o.size < 0) o.size = 0; + else if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) { + o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data); } } + if(o.content) prep_blob(o.content, 0); files[name] = o; FileIndex.push(o); } @@ -17249,21 +17695,260 @@ function read_date(blob, offset) { return new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000); } -var fs; -function readFileSync(filename, options) { - if(fs == null) fs = require$$3; +function read_file(filename, options) { + get_fs(); return parse(fs.readFileSync(filename), options); } -function readSync(blob, options) { +function read(blob, options) { switch(options && options.type || "base64") { - case "file": return readFileSync(blob, options); + case "file": return read_file(blob, options); case "base64": return parse(s2a(Base64.decode(blob)), options); case "binary": return parse(s2a(blob), options); } return parse(blob, options); } +function init_cfb(cfb, opts) { + var o = opts || {}, root = o.root || "Root Entry"; + if(!cfb.FullPaths) cfb.FullPaths = []; + if(!cfb.FileIndex) cfb.FileIndex = []; + if(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error("inconsistent CFB structure"); + if(cfb.FullPaths.length === 0) { + cfb.FullPaths[0] = root + "/"; + cfb.FileIndex[0] = ({ name: root, type: 5 }); + } + if(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID; + seed_cfb(cfb); +} +function seed_cfb(cfb) { + var nm = "\u0001Sh33tJ5"; + if(CFB.find(cfb, "/" + nm)) return; + var p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54; + cfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 })); + cfb.FullPaths.push(cfb.FullPaths[0] + nm); + rebuild_cfb(cfb); +} +function rebuild_cfb(cfb, f) { + init_cfb(cfb); + var gc = false, s = false; + for(var i = cfb.FullPaths.length - 1; i >= 0; --i) { + var _file = cfb.FileIndex[i]; + switch(_file.type) { + case 0: + if(s) gc = true; + else { cfb.FileIndex.pop(); cfb.FullPaths.pop(); } + break; + case 1: case 2: case 5: + s = true; + if(isNaN(_file.R * _file.L * _file.C)) gc = true; + if(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true; + break; + default: gc = true; break; + } + } + if(!gc && !f) return; + + var now = new Date(1987, 1, 19), j = 0; + var data = []; + for(i = 0; i < cfb.FullPaths.length; ++i) { + if(cfb.FileIndex[i].type === 0) continue; + data.push([cfb.FullPaths[i], cfb.FileIndex[i]]); + } + for(i = 0; i < data.length; ++i) { + var dad = dirname(data[i][0]); + s = false; + for(j = 0; j < data.length; ++j) if(data[j][0] === dad) s = true; + if(!s) data.push([dad, ({ + name: filename(dad).replace("/",""), + type: 1, + clsid: HEADER_CLSID, + ct: now, mt: now, + content: null + })]); + } + + data.sort(function(x,y) { return namecmp(x[0], y[0]); }); + cfb.FullPaths = []; cfb.FileIndex = []; + for(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; } + for(i = 0; i < data.length; ++i) { + var elt = cfb.FileIndex[i]; + var nm = cfb.FullPaths[i]; + + elt.name = filename(nm).replace("/",""); + elt.L = elt.R = elt.C = -(elt.color = 1); + elt.size = elt.content ? elt.content.length : 0; + elt.start = 0; + elt.clsid = (elt.clsid || HEADER_CLSID); + if(i === 0) { + elt.C = data.length > 1 ? 1 : -1; + elt.size = 0; + elt.type = 5; + } else if(nm.slice(-1) == "/") { + for(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break; + elt.C = j >= data.length ? -1 : j; + for(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break; + elt.R = j >= data.length ? -1 : j; + elt.type = 1; + } else { + if(dirname(cfb.FullPaths[i+1]||"") == dirname(nm)) elt.R = i + 1; + elt.type = 2; + } + } + +} + +function _write(cfb, options) { + var _opts = options || {}; + rebuild_cfb(cfb); + if(_opts.fileType == 'zip') return write_zip(cfb, _opts); + var L = (function(cfb){ + var mini_size = 0, fat_size = 0; + for(var i = 0; i < cfb.FileIndex.length; ++i) { + var file = cfb.FileIndex[i]; + if(!file.content) continue; +var flen = file.content.length; + if(flen > 0){ + if(flen < 0x1000) mini_size += (flen + 0x3F) >> 6; + else fat_size += (flen + 0x01FF) >> 9; + } + } + var dir_cnt = (cfb.FullPaths.length +3) >> 2; + var mini_cnt = (mini_size + 7) >> 3; + var mfat_cnt = (mini_size + 0x7F) >> 7; + var fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt; + var fat_cnt = (fat_base + 0x7F) >> 7; + var difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F); + while(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F); + var L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0]; + cfb.FileIndex[0].size = mini_size << 6; + L[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3); + return L; + })(cfb); + var o = new_buf(L[7] << 9); + var i = 0, T = 0; + { + for(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]); + for(i = 0; i < 8; ++i) o.write_shift(2, 0); + o.write_shift(2, 0x003E); + o.write_shift(2, 0x0003); + o.write_shift(2, 0xFFFE); + o.write_shift(2, 0x0009); + o.write_shift(2, 0x0006); + for(i = 0; i < 3; ++i) o.write_shift(2, 0); + o.write_shift(4, 0); + o.write_shift(4, L[2]); + o.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1); + o.write_shift(4, 0); + o.write_shift(4, 1<<12); + o.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN); + o.write_shift(4, L[3]); + o.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN); + o.write_shift(4, L[1]); + for(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1); + } + if(L[1]) { + for(T = 0; T < L[1]; ++T) { + for(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1); + o.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1); + } + } + var chainit = function(w) { + for(T += w; i> 9); + } + chainit((L[6] + 7) >> 3); + while(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN); + T = i = 0; + for(j = 0; j < cfb.FileIndex.length; ++j) { + file = cfb.FileIndex[j]; + if(!file.content) continue; +flen = file.content.length; + if(!flen || flen >= 0x1000) continue; + file.start = T; + chainit((flen + 0x3F) >> 6); + } + while(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN); + for(i = 0; i < L[4]<<2; ++i) { + var nm = cfb.FullPaths[i]; + if(!nm || nm.length === 0) { + for(j = 0; j < 17; ++j) o.write_shift(4, 0); + for(j = 0; j < 3; ++j) o.write_shift(4, -1); + for(j = 0; j < 12; ++j) o.write_shift(4, 0); + continue; + } + file = cfb.FileIndex[i]; + if(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN; + var _nm = (i === 0 && _opts.root) || file.name; + flen = 2*(_nm.length+1); + o.write_shift(64, _nm, "utf16le"); + o.write_shift(2, flen); + o.write_shift(1, file.type); + o.write_shift(1, file.color); + o.write_shift(-4, file.L); + o.write_shift(-4, file.R); + o.write_shift(-4, file.C); + if(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0); + else o.write_shift(16, file.clsid, "hex"); + o.write_shift(4, file.state || 0); + o.write_shift(4, 0); o.write_shift(4, 0); + o.write_shift(4, 0); o.write_shift(4, 0); + o.write_shift(4, file.start); + o.write_shift(4, file.size); o.write_shift(4, 0); + } + for(i = 1; i < cfb.FileIndex.length; ++i) { + file = cfb.FileIndex[i]; +if(file.size >= 0x1000) { + o.l = (file.start+1) << 9; + for(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]); + for(; j & 0x1FF; ++j) o.write_shift(1, 0); + } + } + for(i = 1; i < cfb.FileIndex.length; ++i) { + file = cfb.FileIndex[i]; +if(file.size > 0 && file.size < 0x1000) { + for(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]); + for(; j & 0x3F; ++j) o.write_shift(1, 0); + } + } + while(o.l < o.length) o.write_shift(1, 0); + return o; +} +/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */ +function find(cfb, path) { + var UCFullPaths = cfb.FullPaths.map(function(x) { return x.toUpperCase(); }); + var UCPaths = UCFullPaths.map(function(x) { var y = x.split("/"); return y[y.length - (x.slice(-1) == "/" ? 2 : 1)]; }); + var k = false; + if(path.charCodeAt(0) === 47 /* "/" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; } + else k = path.indexOf("/") !== -1; + var UCPath = path.toUpperCase(); + var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath); + if(w !== -1) return cfb.FileIndex[w]; + + var m = !UCPath.match(chr1); + UCPath = UCPath.replace(chr0,''); + if(m) UCPath = UCPath.replace(chr1,'!'); + for(w = 0; w < UCFullPaths.length; ++w) { + if((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w]; + if((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w]; + } + return null; +} /** CFB Constants */ var MSSZ = 64; /* Mini Sector Size = 1<<6 */ //var MSCSZ = 4096; /* Mini Stream Cutoff Size */ @@ -17271,6 +17956,7 @@ var MSSZ = 64; /* Mini Sector Size = 1<<6 */ var ENDOFCHAIN = -2; /* 2.2 Compound File Header */ var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1'; +var HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1]; var HEADER_CLSID = '00000000000000000000000000000000'; var consts = { /* 2.1 Compund File Sector Numbers and Types */ @@ -17289,135 +17975,841 @@ var consts = { EntryTypes: ['unknown','storage','stream','lockbytes','property','root'] }; -exports.read = readSync; -exports.parse = parse; -exports.utils = { - ReadShift: ReadShift, - CheckField: CheckField, - prep_blob: prep_blob, - bconcat: bconcat, - consts: consts -}; - -return exports; -})(); - -if(typeof commonjsRequire !== 'undefined' && 'object' !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; } -function isval(x) { return x !== undefined && x !== null; } - -function keys(o) { return Object.keys(o); } - -function evert_key(obj, key) { - var o = ([]), K = keys(obj); - for(var i = 0; i !== K.length; ++i) o[obj[K[i]][key]] = K[i]; - return o; -} - -function evert(obj) { - var o = ([]), K = keys(obj); - for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i]; - return o; +function write_file(cfb, filename, options) { + get_fs(); + var o = _write(cfb, options); +fs.writeFileSync(filename, o); } -function evert_num(obj) { - var o = ([]), K = keys(obj); - for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10); - return o; +function a2s(o) { + var out = new Array(o.length); + for(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]); + return out.join(""); } -function evert_arr(obj) { - var o = ([]), K = keys(obj); - for(var i = 0; i !== K.length; ++i) { - if(o[obj[K[i]]] == null) o[obj[K[i]]] = []; - o[obj[K[i]]].push(K[i]); +function write(cfb, options) { + var o = _write(cfb, options); + switch(options && options.type) { + case "file": get_fs(); fs.writeFileSync(options.filename, (o)); return o; + case "binary": return a2s(o); + case "base64": return Base64.encode(a2s(o)); } return o; } - -var basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000 -var dnthresh = basedate.getTime() + (new Date().getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000; -function datenum(v, date1904) { - var epoch = v.getTime(); - if(date1904) epoch += 1462*24*60*60*1000; - return (epoch - dnthresh) / (24 * 60 * 60 * 1000); -} -function numdate(v) { - var out = new Date(); - out.setTime(v * 24 * 60 * 60 * 1000 + dnthresh); +/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */ +var _zlib; +function use_zlib(zlib) { try { + var InflateRaw = zlib.InflateRaw; + var InflRaw = new InflateRaw(); + InflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag); + if(InflRaw.bytesRead) _zlib = zlib; + else throw new Error("zlib does not expose bytesRead"); +} catch(e) {console.error("cannot use native zlib: " + (e.message || e)); } } + +function _inflateRawSync(payload, usz) { + if(!_zlib) return _inflate(payload, usz); + var InflateRaw = _zlib.InflateRaw; + var InflRaw = new InflateRaw(); + var out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag); + payload.l += InflRaw.bytesRead; return out; } -/* ISO 8601 Duration */ -function parse_isodur(s) { - var sec = 0, mt = 0, time = false; - var m = s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/); - if(!m) throw new Error("|" + s + "| is not an ISO8601 Duration"); - for(var i = 1; i != m.length; ++i) { - if(!m[i]) continue; - mt = 1; - if(i > 3) time = true; - switch(m[i].substr(m[i].length-1)) { - case 'Y': - throw new Error("Unsupported ISO Duration Field: " + m[i].substr(m[i].length-1)); - case 'D': mt *= 24; - /* falls through */ - case 'H': mt *= 60; - /* falls through */ - case 'M': - if(!time) throw new Error("Unsupported ISO Duration Field: M"); - else mt *= 60; - /* falls through */ - case 'S': break; - } - sec += mt * parseInt(m[i], 10); - } - return sec; +function _deflateRawSync(payload) { + return _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload); } +var CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; -var good_pd_date = new Date('2017-02-19T19:06:09.000Z'); -if(isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17'); -var good_pd = good_pd_date.getFullYear() == 2017; -/* parses aa date as a local date */ -function parseDate(str, fixdate) { - var d = new Date(str); - if(good_pd) { -if(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000); - else if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000); - return d; - } - if(str instanceof Date) return str; - if(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) { - var s = d.getFullYear(); - if(str.indexOf("" + s) > -1) return d; - d.setFullYear(d.getFullYear() + 100); return d; - } - var n = str.match(/\d+/g)||["2017","2","19","0","0","0"]; - return new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0)); +/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */ +var LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ]; + +/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */ +var DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ]; + +function bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; } + +var use_typed_arrays = typeof Uint8Array !== 'undefined'; + +var bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : []; +for(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q); + +function bit_swap_n(n, b) { + var rev = bitswap8[n & 0xFF]; + if(b <= 8) return rev >>> (8-b); + rev = (rev << 8) | bitswap8[(n>>8)&0xFF]; + if(b <= 16) return rev >>> (16-b); + rev = (rev << 8) | bitswap8[(n>>16)&0xFF]; + return rev >>> (24-b); } -function cc2str(arr) { - var o = ""; - for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]); - return o; +/* helpers for unaligned bit reads */ +function read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; } +function read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; } +function read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; } +function read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; } +function read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; } + +/* works up to n = 3 * 8 + 1 = 25 */ +function read_bits_n(buf, bl, n) { + var w = (bl&7), h = (bl>>>3), f = ((1<>> w; + if(n < 8 - w) return v & f; + v |= buf[h+1]<<(8-w); + if(n < 16 - w) return v & f; + v |= buf[h+2]<<(16-w); + if(n < 24 - w) return v & f; + v |= buf[h+3]<<(24-w); + return v & f; } -function str2cc(str) { - var o = []; - for(var i = 0; i != str.length; ++i) o.push(str.charCodeAt(i)); - return o; +/* until ArrayBuffer#realloc is a thing, fake a realloc */ +function realloc(b, sz) { + var L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0; + if(L >= sz) return b; + if(has_buf) { + var o = new_unsafe_buf(M); + // $FlowIgnore + if(b.copy) b.copy(o); + else for(; i < b.length; ++i) o[i] = b[i]; + return o; + } else if(use_typed_arrays) { + var a = new Uint8Array(M); + if(a.set) a.set(b); + else for(; i < b.length; ++i) a[i] = b[i]; + return a; + } + b.length = M; + return b; +} + +/* zero-filled arrays for older browsers */ +function zero_fill_array(n) { + var o = new Array(n); + for(var i = 0; i < n; ++i) o[i] = 0; + return o; +}var _deflate = (function() { +var _deflateRaw = (function() { + return function deflateRaw(data, out) { + var boff = 0; + while(boff < data.length) { + var L = Math.min(0xFFFF, data.length - boff); + var h = boff + L == data.length; + /* TODO: this is only type 0 stored */ + out.write_shift(1, +h); + out.write_shift(2, L); + out.write_shift(2, (~L) & 0xFFFF); + while(L-- > 0) out[out.l++] = data[boff++]; + } + return out.l; + }; +})(); + +return function(data) { + var buf = new_buf(50+Math.floor(data.length*1.1)); + var off = _deflateRaw(data, buf); + return buf.slice(0, off); +}; +})(); +/* modified inflate function also moves original read head */ + +/* build tree (used for literals and lengths) */ +function build_tree(clens, cmap, MAX) { + var maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length; + + var bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32); + for(i = 0; i < 32; ++i) bl_count[i] = 0; + + for(i = L; i < MAX; ++i) clens[i] = 0; + L = clens.length; + + var ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // [] + + /* build code tree */ + for(i = 0; i < L; ++i) { + bl_count[(w = clens[i])]++; + if(maxlen < w) maxlen = w; + ctree[i] = 0; + } + bl_count[0] = 0; + for(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1); + for(i = 0; i < L; ++i) { + ccode = clens[i]; + if(ccode != 0) ctree[i] = bl_count[ccode+16]++; + } + + /* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */ + var cleni = 0; + for(i = 0; i < L; ++i) { + cleni = clens[i]; + if(cleni != 0) { + ccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni); + for(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j) + cmap[ccode|(j<>(8-cleni); + for(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<>>= 3)) { + case 16: + w = 3 + read_bits_2(data, boff); boff += 2; + ccode = hcodes[hcodes.length - 1]; + while(w-- > 0) hcodes.push(ccode); + break; + case 17: + w = 3 + read_bits_3(data, boff); boff += 3; + while(w-- > 0) hcodes.push(0); + break; + case 18: + w = 11 + read_bits_7(data, boff); boff += 7; + while(w -- > 0) hcodes.push(0); + break; + default: + hcodes.push(ccode); + if(maxlen < ccode) maxlen = ccode; + break; + } + } + + /* build literal / length trees */ + var h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT); + for(i = _HLIT; i < 286; ++i) h1[i] = 0; + for(i = _HDIST; i < 30; ++i) h2[i] = 0; + dyn_len_1 = build_tree(h1, dyn_lmap, 286); + dyn_len_2 = build_tree(h2, dyn_dmap, 30); + return boff; +} + +/* return [ data, bytesRead ] */ +function inflate(data, usz) { + /* shortcircuit for empty buffer [0x03, 0x00] */ + if(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; } + + /* bit offset */ + var boff = 0; + + /* header includes final bit and type bits */ + var header = 0; + + var outbuf = new_unsafe_buf(usz ? usz : (1<<18)); + var woff = 0; + var OL = outbuf.length>>>0; + var max_len_1 = 0, max_len_2 = 0; + + while((header&1) == 0) { + header = read_bits_3(data, boff); boff += 3; + if((header >>> 1) == 0) { + /* Stored block */ + if(boff & 7) boff += 8 - (boff&7); + /* 2 bytes sz, 2 bytes bit inverse */ + var sz = data[boff>>>3] | data[(boff>>>3)+1]<<8; + boff += 32; + /* push sz bytes */ + if(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; } + if(typeof data.copy === 'function') { + // $FlowIgnore + data.copy(outbuf, woff, boff>>>3, (boff>>>3)+sz); + woff += sz; boff += 8*sz; + } else while(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; } + continue; + } else if((header >>> 1) == 1) { + /* Fixed Huffman */ + max_len_1 = 9; max_len_2 = 5; + } else { + /* Dynamic Huffman */ + boff = dyn(data, boff); + max_len_1 = dyn_len_1; max_len_2 = dyn_len_2; + } + if(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; } + for(;;) { // while(true) is apparently out of vogue in modern JS circles + /* ingest code and move read head */ + var bits = read_bits_n(data, boff, max_len_1); + var code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits]; + boff += code & 15; code >>>= 4; + /* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */ + if(((code>>>8)&0xFF) === 0) outbuf[woff++] = code; + else if(code == 256) break; + else { + code -= 257; + var len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0; + var tgt = woff + LEN_LN[code]; + /* length extra bits */ + if(len_eb > 0) { + tgt += read_bits_n(data, boff, len_eb); + boff += len_eb; + } + + /* dist code */ + bits = read_bits_n(data, boff, max_len_2); + code = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits]; + boff += code & 15; code >>>= 4; + var dst_eb = (code < 4 ? 0 : (code-2)>>1); + var dst = DST_LN[code]; + /* dist extra bits */ + if(dst_eb > 0) { + dst += read_bits_n(data, boff, dst_eb); + boff += dst_eb; + } + + /* in the common case, manual byte copy is faster than TA set / Buffer copy */ + if(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt); OL = outbuf.length; } + while(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; } + } + } + } + return [usz ? outbuf : outbuf.slice(0, woff), (boff+7)>>>3]; +} + +function _inflate(payload, usz) { + var data = payload.slice(payload.l||0); + var out = inflate(data, usz); + payload.l += out[1]; + return out[0]; +} + +function warn_or_throw(wrn, msg) { + if(wrn) { if(typeof console !== 'undefined') console.error(msg); } + else throw new Error(msg); +} + +function parse_zip(file, options) { + var blob = file; + prep_blob(blob, 0); + + var FileIndex = [], FullPaths = []; + var o = { + FileIndex: FileIndex, + FullPaths: FullPaths + }; + init_cfb(o, { root: options.root }); + + /* find end of central directory, start just after signature */ + var i = blob.length - 4; + while((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i; + blob.l = i + 4; + + /* parse end of central directory */ + blob.l += 4; + var fcnt = blob.read_shift(2); + blob.l += 6; + var start_cd = blob.read_shift(4); + + /* parse central directory */ + blob.l = start_cd; + + for(i = 0; i < fcnt; ++i) { + /* trust local file header instead of CD entry */ + blob.l += 20; + var csz = blob.read_shift(4); + var usz = blob.read_shift(4); + var namelen = blob.read_shift(2); + var efsz = blob.read_shift(2); + var fcsz = blob.read_shift(2); + blob.l += 8; + var offset = blob.read_shift(4); + var EF = parse_extra_field(blob.slice(blob.l+namelen, blob.l+namelen+efsz)); + blob.l += namelen + efsz + fcsz; + + var L = blob.l; + blob.l = offset + 4; + parse_local_file(blob, csz, usz, o, EF); + blob.l = L; + } + + return o; +} + + +/* head starts just after local file header signature */ +function parse_local_file(blob, csz, usz, o, EF) { + /* [local file header] */ + blob.l += 2; + var flags = blob.read_shift(2); + var meth = blob.read_shift(2); + var date = parse_dos_date(blob); + + if(flags & 0x2041) throw new Error("Unsupported ZIP encryption"); + var crc32 = blob.read_shift(4); + var _csz = blob.read_shift(4); + var _usz = blob.read_shift(4); + + var namelen = blob.read_shift(2); + var efsz = blob.read_shift(2); + + // TODO: flags & (1<<11) // UTF8 + var name = ""; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]); + if(efsz) { + var ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz)); + if((ef[0x5455]||{}).mt) date = ef[0x5455].mt; + if(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt; + } + blob.l += efsz; + + /* [encryption header] */ + + /* [file data] */ + var data = blob.slice(blob.l, blob.l + _csz); + switch(meth) { + case 8: data = _inflateRawSync(blob, _usz); break; + case 0: break; + default: throw new Error("Unsupported ZIP Compression method " + meth); + } + + /* [data descriptor] */ + var wrn = false; + if(flags & 8) { + crc32 = blob.read_shift(4); + if(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; } + _csz = blob.read_shift(4); + _usz = blob.read_shift(4); + } + + if(_csz != csz) warn_or_throw(wrn, "Bad compressed size: " + csz + " != " + _csz); + if(_usz != usz) warn_or_throw(wrn, "Bad uncompressed size: " + usz + " != " + _usz); + var _crc32 = CRC32.buf(data, 0); + if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, "Bad CRC32 checksum: " + crc32 + " != " + _crc32); + cfb_add(o, name, data, {unsafe: true, mt: date}); +} +function write_zip(cfb, options) { + var _opts = options || {}; + var out = [], cdirs = []; + var o = new_buf(1); + var method = (_opts.compression ? 8 : 0), flags = 0; + var desc = false; + if(desc) flags |= 8; + var i = 0, j = 0; + + var start_cd = 0, fcnt = 0; + var root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0]; + var crcs = []; + var sz_cd = 0; + + for(i = 1; i < cfb.FullPaths.length; ++i) { + fp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i]; + if(!fi.size || !fi.content || fp == "\u0001Sh33tJ5") continue; + var start = start_cd; + + /* TODO: CP437 filename */ + var namebuf = new_buf(fp.length); + for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F); + namebuf = namebuf.slice(0, namebuf.l); + crcs[fcnt] = CRC32.buf(fi.content, 0); + + var outbuf = fi.content; + if(method == 8) outbuf = _deflateRawSync(outbuf); + + /* local file header */ + o = new_buf(30); + o.write_shift(4, 0x04034b50); + o.write_shift(2, 20); + o.write_shift(2, flags); + o.write_shift(2, method); + /* TODO: last mod file time/date */ + if(fi.mt) write_dos_date(o, fi.mt); + else o.write_shift(4, 0); + o.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]); + o.write_shift(4, (flags & 8) ? 0 : outbuf.length); + o.write_shift(4, (flags & 8) ? 0 : fi.content.length); + o.write_shift(2, namebuf.length); + o.write_shift(2, 0); + + start_cd += o.length; + out.push(o); + start_cd += namebuf.length; + out.push(namebuf); + + /* TODO: encryption header ? */ + start_cd += outbuf.length; + out.push(outbuf); + + /* data descriptor */ + if(flags & 8) { + o = new_buf(12); + o.write_shift(-4, crcs[fcnt]); + o.write_shift(4, outbuf.length); + o.write_shift(4, fi.content.length); + start_cd += o.l; + out.push(o); + } + + /* central directory */ + o = new_buf(46); + o.write_shift(4, 0x02014b50); + o.write_shift(2, 0); + o.write_shift(2, 20); + o.write_shift(2, flags); + o.write_shift(2, method); + o.write_shift(4, 0); /* TODO: last mod file time/date */ + o.write_shift(-4, crcs[fcnt]); + + o.write_shift(4, outbuf.length); + o.write_shift(4, fi.content.length); + o.write_shift(2, namebuf.length); + o.write_shift(2, 0); + o.write_shift(2, 0); + o.write_shift(2, 0); + o.write_shift(2, 0); + o.write_shift(4, 0); + o.write_shift(4, start); + + sz_cd += o.l; + cdirs.push(o); + sz_cd += namebuf.length; + cdirs.push(namebuf); + ++fcnt; + } + + /* end of central directory */ + o = new_buf(22); + o.write_shift(4, 0x06054b50); + o.write_shift(2, 0); + o.write_shift(2, 0); + o.write_shift(2, fcnt); + o.write_shift(2, fcnt); + o.write_shift(4, sz_cd); + o.write_shift(4, start_cd); + o.write_shift(2, 0); + + return bconcat(([bconcat((out)), bconcat(cdirs), o])); +} +function cfb_new(opts) { + var o = ({}); + init_cfb(o, opts); + return o; +} + +function cfb_add(cfb, name, content, opts) { + var unsafe = opts && opts.unsafe; + if(!unsafe) init_cfb(cfb); + var file = !unsafe && CFB.find(cfb, name); + if(!file) { + var fpath = cfb.FullPaths[0]; + if(name.slice(0, fpath.length) == fpath) fpath = name; + else { + if(fpath.slice(-1) != "/") fpath += "/"; + fpath = (fpath + name).replace("//","/"); + } + file = ({name: filename(name), type: 2}); + cfb.FileIndex.push(file); + cfb.FullPaths.push(fpath); + if(!unsafe) CFB.utils.cfb_gc(cfb); + } +file.content = (content); + file.size = content ? content.length : 0; + if(opts) { + if(opts.CLSID) file.clsid = opts.CLSID; + if(opts.mt) file.mt = opts.mt; + if(opts.ct) file.ct = opts.ct; + } + return file; +} + +function cfb_del(cfb, name) { + init_cfb(cfb); + var file = CFB.find(cfb, name); + if(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) { + cfb.FileIndex.splice(j, 1); + cfb.FullPaths.splice(j, 1); + return true; + } + return false; +} + +function cfb_mov(cfb, old_name, new_name) { + init_cfb(cfb); + var file = CFB.find(cfb, old_name); + if(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) { + cfb.FileIndex[j].name = filename(new_name); + cfb.FullPaths[j] = new_name; + return true; + } + return false; +} + +function cfb_gc(cfb) { rebuild_cfb(cfb, true); } + +exports.find = find; +exports.read = read; +exports.parse = parse; +exports.write = write; +exports.writeFile = write_file; +exports.utils = { + cfb_new: cfb_new, + cfb_add: cfb_add, + cfb_del: cfb_del, + cfb_mov: cfb_mov, + cfb_gc: cfb_gc, + ReadShift: ReadShift, + CheckField: CheckField, + prep_blob: prep_blob, + bconcat: bconcat, + use_zlib: use_zlib, + _deflateRaw: _deflate, + _inflateRaw: _inflate, + consts: consts +}; + +return exports; +})(); + +if(typeof commonjsRequire !== 'undefined' && 'object' !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; } +var _fs; +if(typeof commonjsRequire !== 'undefined') try { _fs = require$$3; } catch(e) {} + +/* normalize data for blob ctor */ +function blobify(data) { + if(typeof data === "string") return s2ab(data); + if(Array.isArray(data)) return a2u(data); + return data; +} +/* write or download file */ +function write_dl(fname, payload, enc) { + /*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */ + if(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload); + var data = (enc == "utf8") ? utf8write(payload) : payload; +if(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname); + if(typeof Blob !== 'undefined') { + var blob = new Blob([blobify(data)], {type:"application/octet-stream"}); +if(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname); +if(typeof saveAs !== 'undefined') return saveAs(blob, fname); + if(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) { + var url = URL.createObjectURL(blob); +if(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == "function") { + if(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000); + return chrome.downloads.download({ url: url, filename: fname, saveAs: true}); + } + var a = document.createElement("a"); + if(a.download != null) { +a.download = fname; a.href = url; document.body.appendChild(a); a.click(); +document.body.removeChild(a); + if(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000); + return url; + } + } + } + // $FlowIgnore + if(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript + // $FlowIgnore + var out = File(fname); out.open("w"); out.encoding = "binary"; + if(Array.isArray(payload)) payload = a2s(payload); + out.write(payload); out.close(); return payload; + } catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; } + throw new Error("cannot save file " + fname); +} + +/* read binary data from file */ +function read_binary(path) { + if(typeof _fs !== 'undefined') return _fs.readFileSync(path); + // $FlowIgnore + if(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript + // $FlowIgnore + var infile = File(path); infile.open("r"); infile.encoding = "binary"; + var data = infile.read(); infile.close(); + return data; + } catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; } + throw new Error("Cannot access file " + path); +} +function keys(o) { + var ks = Object.keys(o), o2 = []; + for(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]); + return o2; +} + +function evert_key(obj, key) { + var o = ([]), K = keys(obj); + for(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i]; + return o; +} + +function evert(obj) { + var o = ([]), K = keys(obj); + for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i]; + return o; +} + +function evert_num(obj) { + var o = ([]), K = keys(obj); + for(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10); + return o; +} + +function evert_arr(obj) { + var o = ([]), K = keys(obj); + for(var i = 0; i !== K.length; ++i) { + if(o[obj[K[i]]] == null) o[obj[K[i]]] = []; + o[obj[K[i]]].push(K[i]); + } + return o; +} + +var basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000 +function datenum(v, date1904) { + var epoch = v.getTime(); + if(date1904) epoch -= 1462*24*60*60*1000; + var dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000; + return (epoch - dnthresh) / (24 * 60 * 60 * 1000); +} +var refdate = new Date(); +var dnthresh = basedate.getTime() + (refdate.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000; +var refoffset = refdate.getTimezoneOffset(); +function numdate(v) { + var out = new Date(); + out.setTime(v * 24 * 60 * 60 * 1000 + dnthresh); + if (out.getTimezoneOffset() !== refoffset) { + out.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000); + } + return out; +} + +/* ISO 8601 Duration */ +function parse_isodur(s) { + var sec = 0, mt = 0, time = false; + var m = s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/); + if(!m) throw new Error("|" + s + "| is not an ISO8601 Duration"); + for(var i = 1; i != m.length; ++i) { + if(!m[i]) continue; + mt = 1; + if(i > 3) time = true; + switch(m[i].slice(m[i].length-1)) { + case 'Y': + throw new Error("Unsupported ISO Duration Field: " + m[i].slice(m[i].length-1)); + case 'D': mt *= 24; + /* falls through */ + case 'H': mt *= 60; + /* falls through */ + case 'M': + if(!time) throw new Error("Unsupported ISO Duration Field: M"); + else mt *= 60; + /* falls through */ + case 'S': break; + } + sec += mt * parseInt(m[i], 10); + } + return sec; +} + +var good_pd_date = new Date('2017-02-19T19:06:09.000Z'); +if(isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17'); +var good_pd = good_pd_date.getFullYear() == 2017; +/* parses a date as a local date */ +function parseDate(str, fixdate) { + var d = new Date(str); + if(good_pd) { +if(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000); + else if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000); + return d; + } + if(str instanceof Date) return str; + if(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) { + var s = d.getFullYear(); + if(str.indexOf("" + s) > -1) return d; + d.setFullYear(d.getFullYear() + 100); return d; + } + var n = str.match(/\d+/g)||["2017","2","19","0","0","0"]; + var out = new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0)); + if(str.indexOf("Z") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000); + return out; +} + +function cc2str(arr) { + var o = ""; + for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]); + return o; } function dup(o) { if(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o)); if(typeof o != 'object' || o == null) return o; + if(o instanceof Date) return new Date(o.getTime()); var out = {}; - for(var k in o) if(o.hasOwnProperty(k)) out[k] = dup(o[k]); + for(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]); return out; } function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; } /* TODO: stress test */ +function fuzzynum(s) { + var v = Number(s); + if(isFinite(v)) return v; + if(!isNaN(v)) return NaN; + if(!/\d/.test(s)) return v; + var wt = 1; + var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";}); + if(!isNaN(v = Number(ss))) return v / wt; + ss = ss.replace(/[(](.*)[)]/,function($$, $1) { wt = -wt; return $1;}); + if(!isNaN(v = Number(ss))) return v / wt; + return v; +} function fuzzydate(s) { var o = new Date(s), n = new Date(NaN); var y = o.getYear(), m = o.getMonth(), d = o.getDate(); @@ -17425,16 +18817,24 @@ function fuzzydate(s) { if(y < 0 || y > 8099) return n; if((m > 0 || d > 1) && y != 101) return o; if(s.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) return o; - if(!s.match(/[a-zA-Z]/)) return o; - return n; + if(s.match(/[^-0-9:,\/\\]/)) return n; + return o; } +var safe_split_regex = "abacaba".split(/(:?b)/i).length == 5; +function split_regex(str, re, def) { + if(safe_split_regex || typeof re == "string") return str.split(re); + var p = str.split(re), o = [p[0]]; + for(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); } + return o; +} function getdatastr(data) { if(!data) return null; if(data.data) return debom(data.data); if(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary')); if(data.asBinary) return debom(data.asBinary()); if(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0))); + if(data.content && data.type) return debom(cc2str(data.content)); return null; } @@ -17444,9 +18844,10 @@ function getdatabin(data) { if(data.asNodeBuffer && has_buf) return data.asNodeBuffer(); if(data._data && data._data.getContent) { var o = data._data.getContent(); - if(typeof o == "string") return str2cc(o); + if(typeof o == "string") return char_codes(o); return Array.prototype.slice.call(o); } + if(data.content && data.type) return data.content; return null; } @@ -17455,11 +18856,11 @@ function getdata(data) { return (data && data.name.slice(-4) === ".bin") ? getda /* Part 2 Section 10.1.2 "Mapping Content Types" Names are case-insensitive */ /* OASIS does not comment on filename case sensitivity */ function safegetzipfile(zip, file) { - var k = keys(zip.files); - var f = file.toLowerCase(), g = f.replace(/\//g,'\\'); + var k = zip.FullPaths || keys(zip.files); + var f = file.toLowerCase().replace(/[\/]/g, '\\'), g = f.replace(/\\/g,'\/'); for(var i=0; i\/]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g; -var tagregex=/<[^>]*>/g; +var XML_HEADER = '\r\n'; +var attregexg=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g; +var tagregex=/<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s*[\/\?]?>/mg; + +if(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g; var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/; -function parsexmltag(tag, skip_root) { +function parsexmltag(tag, skip_root, skip_LC) { var z = ({}); var eq = 0, c = 0; for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break; - if(!skip_root) z[0] = tag.substr(0, eq); + if(!skip_root) z[0] = tag.slice(0, eq); if(eq === tag.length) return z; var m = tag.match(attregexg), j=0, v="", i=0, q="", cc="", quot = 1; if(m) for(i = 0; i != m.length; ++i) { cc = m[i]; for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break; - q = cc.substr(0,c); + q = cc.slice(0,c).trim(); + while(cc.charCodeAt(c+1) == 32) ++c; quot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0; - v = cc.substring(c+1+quot, cc.length-quot); + v = cc.slice(c+1+quot, cc.length-quot); for(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break; if(j===q.length) { - if(q.indexOf("_") > 0) q = q.substr(0, q.indexOf("_")); // from ods + if(q.indexOf("_") > 0) q = q.slice(0, q.indexOf("_")); // from ods z[q] = v; + if(!skip_LC) z[q.toLowerCase()] = v; } else { - var k = (j===5 && q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1); - if(z[k] && q.substr(j-3,3) == "ext") continue; // from ods + var k = (j===5 && q.slice(0,5)==="xmlns"?"xmlns":"")+q.slice(j+1); + if(z[k] && q.slice(j-3,j) == "ext") continue; // from ods z[k] = v; + if(!skip_LC) z[k.toLowerCase()] = v; } } return z; @@ -17547,15 +18993,17 @@ var rencoding = evert(encodings); // TODO: CP remap (need to read file version to determine OS) var unescapexml = (function() { /* 22.4.2.4 bstr (Basic String) */ - var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/g, coderegex = /_x([\da-fA-F]{4})_/g; + var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/ig, coderegex = /_x([\da-fA-F]{4})_/ig; return function unescapexml(text) { - var s = text + ''; - return s.replace(encregex, function($$, $1) { return encodings[$$]||String.fromCharCode(parseInt($1,$$.indexOf("x")>-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));}); + var s = text + '', i = s.indexOf("-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));}); + var j = s.indexOf("]]>"); + return unescapexml(s.slice(0, i)) + s.slice(i+9,j) + unescapexml(s.slice(j+3)); }; })(); var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g; -function escapexml(text, xml){ +function escapexml(text){ var s = text + ''; return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).slice(-4) + "_";}); } @@ -17564,7 +19012,12 @@ function escapexmltag(text){ return escapexml(text).replace(/ /g,"_x0020_"); } var htmlcharegex = /[\u0000-\u001f]/g; function escapehtml(text){ var s = text + ''; - return s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return "&#x" + ("000"+s.charCodeAt(0).toString(16)).slice(-4) + ";"; }); + return s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\n/g, "
").replace(htmlcharegex,function(s) { return "&#x" + ("000"+s.charCodeAt(0).toString(16)).slice(-4) + ";"; }); +} + +function escapexlml(text){ + var s = text + ''; + return s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return "&#x" + (s.charCodeAt(0).toString(16)).toUpperCase() + ";"; }); } /* TODO: handle codepages */ @@ -17577,7 +19030,7 @@ var xlml_unfixstr = (function() { return function xlml_unfixstr(str) { return str.replace(/(\r\n|[\r\n])/g,"\ "); }; })(); -function parsexmlbool(value, tag) { +function parsexmlbool(value) { switch(value) { case 1: case true: case '1': case 'true': case 'TRUE': return true; /* case '0': case 'false': case 'FALSE':*/ @@ -17602,10 +19055,35 @@ var utf8read = function utf8reada(orig) { return out; }; +var utf8write = function(orig) { + var out = [], i = 0, c = 0, d = 0; + while(i < orig.length) { + c = orig.charCodeAt(i++); + switch(true) { + case c < 128: out.push(String.fromCharCode(c)); break; + case c < 2048: + out.push(String.fromCharCode(192 + (c >> 6))); + out.push(String.fromCharCode(128 + (c & 63))); + break; + case c >= 55296 && c < 57344: + c -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10); + out.push(String.fromCharCode(240 + ((d >>18) & 7))); + out.push(String.fromCharCode(144 + ((d >>12) & 63))); + out.push(String.fromCharCode(128 + ((d >> 6) & 63))); + out.push(String.fromCharCode(128 + (d & 63))); + break; + default: + out.push(String.fromCharCode(224 + (c >> 12))); + out.push(String.fromCharCode(128 + ((c >> 6) & 63))); + out.push(String.fromCharCode(128 + (c & 63))); + } + } + return out.join(""); +}; if(has_buf) { var utf8readb = function utf8readb(data) { - var out = new Buffer(2*data.length), w, i, j = 1, k = 0, ww=0, c; + var out = Buffer.alloc(2*data.length), w, i, j = 1, k = 0, ww=0, c; for(i = 0; i < data.length; i+=j) { j = 1; if((c=data.charCodeAt(i)) < 128) w = c; @@ -17622,9 +19100,10 @@ if(has_buf) { }; var corpus = "foo bar baz\u00e2\u0098\u0083\u00f0\u009f\u008d\u00a3"; if(utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb; - // $FlowIgnore - var utf8readc = function utf8readc(data) { return Buffer(data, 'binary').toString('utf8'); }; + var utf8readc = function utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }; if(utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc; + + utf8write = function(data) { return Buffer_from(data, 'utf8').toString("binary"); }; } // matches ... extracts content @@ -17637,44 +19116,73 @@ var matchtag = (function() { }; })(); +var htmldecode = (function() { + var entities = [ + ['nbsp', ' '], ['middot', '·'], + ['quot', '"'], ['apos', "'"], ['gt', '>'], ['lt', '<'], ['amp', '&'] + ].map(function(x) { return [new RegExp('&' + x[0] + ';', "ig"), x[1]]; }); + return function htmldecode(str) { + var o = str + // Remove new lines and spaces from start of content + .replace(/^[\t\n\r ]+/, "") + // Remove new lines and spaces from end of content + .replace(/[\t\n\r ]+$/,"") + // Added line which removes any white space characters after and before html tags + .replace(/>\s+/g,">").replace(/\s+ tags with new lines + .replace(/<\s*[bB][rR]\s*\/?>/g,"\n") + // Strip HTML elements + .replace(/<[^>]*>/g,""); + for(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]); + return o; + }; +})(); + var vtregex = (function(){ var vt_cache = {}; return function vt_regex(bt) { if(vt_cache[bt] !== undefined) return vt_cache[bt]; return (vt_cache[bt] = new RegExp("<(?:vt:)?" + bt + ">([\\s\\S]*?)", 'g') ); };})(); var vtvregex = /<\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\s\S]*)' + g + '';} +function writetag(f,g) { return '<' + f + (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + ''; } function wxt_helper(h) { return keys(h).map(function(k) { return " " + k + '="' + h[k] + '"';}).join(""); } -function writextag(f,g,h) { return '<' + f + (isval(h) ? wxt_helper(h) : "") + (isval(g) ? (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '';} +function writextag(f,g,h) { return '<' + f + ((h != null) ? wxt_helper(h) : "") + ((g != null) ? (g.match(wtregex)?' xml:space="preserve"' : "") + '>' + g + '';} function write_w3cdtf(d, t) { try { return d.toISOString().replace(/\.\d*/,""); } catch(e) { if(t) throw e; } return ""; } -function write_vt(s) { +function write_vt(s, xlsx) { switch(typeof s) { - case 'string': return writextag('vt:lpwstr', s); - case 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', String(s)); + case 'string': + var o = writextag('vt:lpwstr', escapexml(s)); + if(xlsx) o = o.replace(/"/g, "_x0022_"); + return o; + case 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s))); case 'boolean': return writextag('vt:bool',s?'true':'false'); } if(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s)); throw new Error("Unable to serialize " + s); } -var XML_HEADER = '\r\n'; var XMLNS = ({ 'dc': 'http://purl.org/dc/elements/1.1/', 'dcterms': 'http://purl.org/dc/terms/', @@ -17708,79 +19216,82 @@ function read_double_le(b, idx) { var e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f); var m = (b[idx+6]&0x0f); for(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i]; - if(e == 0x7ff) return m == 0 ? s * Infinity : NaN; + if(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN; if(e == 0) e = -1022; else { e -= 1023; m += Math.pow(2,52); } return s * Math.pow(2, e - 52) * m; } function write_double_le(b, v, idx) { - var bs = ((v < 0 || 1/v == -Infinity) ? 1 : 0) << 7, e = 0, m = 0; - var av = bs ? -v : v; + var bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0; + var av = bs ? (-v) : v; if(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; } + else if(av == 0) e = m = 0; else { - e = Math.floor(Math.log(av) * Math.LOG2E); - m = v * Math.pow(2, 52 - e); - if(e <= -1023 && (!isFinite(m) || m < Math.pow(2,52))) { e = -1022; } + e = Math.floor(Math.log(av) / Math.LN2); + m = av * Math.pow(2, 52 - e); + if((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; } else { m -= Math.pow(2,52); e+=1023; } } for(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff; - b[idx + 6] = ((e & 0x0f) << 4) | m & 0xf; + b[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf); b[idx + 7] = (e >> 4) | bs; } -var __toBuffer, ___toBuffer; -__toBuffer = ___toBuffer = function toBuffer_(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; }; -var __utf16le, ___utf16le; -__utf16le = ___utf16le = function utf16le_(b,s,e) { var ss=[]; for(var i=s; i 0 ? __utf8(b, i+4,i+4+len-1) : "";}; -var __lpwstr, ___lpwstr; -__lpwstr = ___lpwstr = function lpwstr_(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";}; +var __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i 0 ? __utf8(b, i+4,i+4+len-1) : "";}; +var ___lpstr = __lpstr; +var __cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";}; +var ___cpstr = __cpstr; +var __lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";}; +var ___lpwstr = __lpwstr; var __lpp4, ___lpp4; __lpp4 = ___lpp4 = function lpp4_(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : "";}; -var __8lpp4, ___8lpp4; -__8lpp4 = ___8lpp4 = function lpp4_8(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : "";}; +var __8lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : "";}; +var ___8lpp4 = __8lpp4; var __double, ___double; __double = ___double = function(b, idx) { return read_double_le(b, idx);}; - var is_buf = function is_buf_a(a) { return Array.isArray(a); }; + if(has_buf) { - __utf16le = function utf16le_b(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e); }; + __utf16le = function(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/; }; __hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); }; - __lpstr = function lpstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";}; - __lpwstr = function lpwstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);}; - __lpp4 = function lpp4_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);}; - __8lpp4 = function lpp4_8b(b,i) { if(!Buffer.isBuffer(b)) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);}; - __utf8 = function utf8_b(b, s,e) { return b.toString('utf8',s,e); }; + __lpstr = function lpstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";}; + __cpstr = function cpstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";}; + __lpwstr = function lpwstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);}; + __lpp4 = function lpp4_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);}; + __8lpp4 = function lpp4_8b(b, i) { if(!Buffer.isBuffer(b)) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);}; + __utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : ___utf8(b,s,e); }; __toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);}; bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); }; - __double = function double_(b,i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); }; + __double = function double_(b, i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); }; is_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); }; } /* from js-xls */ if(typeof cptable !== 'undefined') { - __utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)); }; + __utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); }; __utf8 = function(b,s,e) { return cptable.utils.decode(65001, b.slice(s,e)); }; - __lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : "";}; + __lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : "";}; + __cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : "";}; __lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : "";}; __lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : "";}; __8lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : "";}; } var __readUInt8 = function(b, idx) { return b[idx]; }; -var __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; }; -var __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u < 0x8000) ? u : (0xffff - u + 1) * -1; }; +var __readUInt16LE = function(b, idx) { return (b[idx+1]*(1<<8))+b[idx]; }; +var __readInt16LE = function(b, idx) { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); }; var __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; }; var __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; }; - -var ___unhexlify = function(s) { return s.match(/../g).map(function(x) { return parseInt(x,16);}); }; -var __unhexlify = typeof Buffer !== "undefined" ? function(s) { return Buffer.isBuffer(s) ? new Buffer(s, 'hex') : ___unhexlify(s); } : ___unhexlify; +var __readInt32BE = function(b, idx) { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; }; function ReadShift(size, t) { var o="", oI, oR, oo=[], w, vv, i, loc; @@ -17788,7 +19299,7 @@ function ReadShift(size, t) { case 'dbcs': loc = this.l; if(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString("utf16le"); - else for(i = 0; i != size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; } + else for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; } size *= 2; break; @@ -17801,9 +19312,10 @@ function ReadShift(size, t) { size = 2 * size; break; /* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */ - case 'lpstr': o = __lpstr(this, this.l); size = 5 + o.length; break; + case 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break; + case 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break; /* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */ - case 'lpwstr': o = __lpwstr(this, this.l); size = 5 + o.length; if(o[o.length-1] == '\u0000') size += 2; break; + case 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break; /* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */ case 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break; /* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */ @@ -17818,7 +19330,7 @@ function ReadShift(size, t) { /* sbcs and dbcs support continue records in the SST way TODO codepages */ case 'dbcs-cont': o = ""; loc = this.l; - for(i = 0; i != size; ++i) { + for(i = 0; i < size; ++i) { if(this.lens && this.lens.indexOf(loc) !== -1) { w = __readUInt8(this, loc); this.l = loc + 1; @@ -17829,6 +19341,12 @@ function ReadShift(size, t) { loc+=2; } o = oo.join(""); size *= 2; break; + case 'cpstr': + if(typeof cptable !== 'undefined') { + o = cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size)); + break; + } + /* falls through */ case 'sbcs-cont': o = ""; loc = this.l; for(i = 0; i != size; ++i) { if(this.lens && this.lens.indexOf(loc) !== -1) { @@ -17845,19 +19363,24 @@ function ReadShift(size, t) { switch(size) { case 1: oI = __readUInt8(this, this.l); this.l++; return oI; case 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI; - case 4: - if(t === 'i' || (this[this.l+3] & 0x80)===0) { oI = __readInt32LE(this, this.l); this.l += 4; return oI; } + case 4: case -4: + if(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; } else { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR; - case 8: if(t === 'f') { oR = __double(this, this.l); this.l += 8; return oR; } + case 8: case -8: + if(t === 'f') { + if(size == 8) oR = __double(this, this.l); + else oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0); + this.l += 8; return oR; + } else size = 8; /* falls through */ case 16: o = __hexlify(this, this.l, size); break; }} this.l+=size; return o; } -var __writeUInt16LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); }; var __writeUInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); }; var __writeInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); }; +var __writeUInt16LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); }; function WriteShift(t, val, f) { var size = 0, i = 0; @@ -17865,8 +19388,30 @@ function WriteShift(t, val, f) { for(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i); size = 2 * val.length; } else if(f === 'sbcs') { -for(i = 0; i != val.length; ++i) this[this.l + i] = val.charCodeAt(i) & 0xFF; + if(typeof cptable !== 'undefined' && current_ansi == 874) { + /* TODO: use tables directly, don't encode */ +for(i = 0; i != val.length; ++i) { + var cppayload = cptable.utils.encode(current_ansi, val.charAt(i)); + this[this.l + i] = cppayload[0]; + } + } else { +val = val.replace(/[^\x00-\x7F]/g, "_"); +for(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF); + } size = val.length; + } else if(f === 'hex') { + for(; i < t; ++i) { +this[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0); + } return this; + } else if(f === 'utf16le') { +var end = Math.min(this.l + t, this.length); + for(i = 0; i < Math.min(val.length, t); ++i) { + var cc = val.charCodeAt(i); + this[this.l++] = (cc & 0xff); + this[this.l++] = (cc >> 8); + } + while(this.l < end) this[this.l++] = 0; + return this; } else switch(t) { case 1: size = 1; this[this.l] = val&0xFF; break; case 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break; @@ -17882,7 +19427,7 @@ for(i = 0; i != val.length; ++i) this[this.l + i] = val.charCodeAt(i) & 0xFF; function CheckField(hexstr, fld) { var m = __hexlify(this,this.l,hexstr.length>>1); - if(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m; + if(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m); this.l += hexstr.length>>1; } @@ -17894,6 +19439,7 @@ function prep_blob(blob, pos) { } function parsenoop(blob, length) { blob.l += length; } + function new_buf(sz) { var o = new_raw_buf(sz); prep_blob(o, 0); @@ -17914,7 +19460,7 @@ function recordhopper(data, cb, opts) { length = tmpbyte & 0x7F; for(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte); tgt = data.l + length; - var d = R.f(data, length, opts); + var d = R.f && R.f(data, length, opts); data.l = tgt; if(cb(d, R.n, RT)) return; } @@ -17922,7 +19468,7 @@ function recordhopper(data, cb, opts) { /* control buffer usage for fixed-length buffers */ function buf_array() { - var bufs = [], blksz = 2048; + var bufs = [], blksz = has_buf ? 256 : 2048; var newblk = function ba_newblk(sz) { var o = (new_buf(sz)); prep_blob(o, 0); @@ -17933,13 +19479,13 @@ function buf_array() { var endbuf = function ba_endbuf() { if(!curbuf) return; - if(curbuf.length > curbuf.l) curbuf = curbuf.slice(0, curbuf.l); + if(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; } if(curbuf.length > 0) bufs.push(curbuf); curbuf = null; }; var next = function ba_next(sz) { - if(curbuf && sz < curbuf.length - curbuf.l) return curbuf; + if(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf; endbuf(); return (curbuf = newblk(Math.max(sz+1, blksz))); }; @@ -17949,16 +19495,16 @@ function buf_array() { return __toBuffer([bufs]); }; - var push = function ba_push(buf) { endbuf(); curbuf = buf; next(blksz); }; + var push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); }; return ({ next:next, push:push, end:end, _bufs:bufs }); } function write_record(ba, type, payload, length) { - var t = Number(evert_RE[type]), l; + var t = +XLSBRE[type], l; if(isNaN(t)) return; // TODO: throw something here? if(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0; - l = 1 + (t >= 0x80 ? 1 : 0) + 1 + length; + l = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/; if(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l; var o = ba.next(l); if(t <= 0x7F) o.write_shift(1, t); @@ -17979,8 +19525,8 @@ function shift_cell_xls(cell, tgt, opts) { if(out.cRel) out.c += tgt.s.c; if(out.rRel) out.r += tgt.s.r; } else { - out.c += tgt.c; - out.r += tgt.r; + if(out.cRel) out.c += tgt.c; + if(out.rRel) out.r += tgt.r; } if(!opts || opts.biff < 12) { while(out.c >= 0x100) out.c -= 0x100; @@ -17996,25 +19542,27 @@ function shift_range_xls(cell, range, opts) { return out; } -function encode_cell_xls(c) { +function encode_cell_xls(c, biff) { + if(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; } + if(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); } var s = encode_cell(c); - if(c.cRel === 0) s = fix_col(s); - if(c.rRel === 0) s = fix_row(s); + if(!c.cRel && c.cRel != null) s = fix_col(s); + if(!c.rRel && c.rRel != null) s = fix_row(s); return s; } function encode_range_xls(r, opts) { if(r.s.r == 0 && !r.s.rRel) { - if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : 0xFFFF) && !r.e.rRel) { + if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) { return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c); } } if(r.s.c == 0 && !r.s.cRel) { - if(r.e.c == (opts.biff >= 12 ? 0xFFFF : 0xFF) && !r.e.cRel) { + if(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) { return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r); } } - return encode_cell_xls(r.s) + ":" + encode_cell_xls(r.e); + return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff); } var OFFCRYPTO = {}; @@ -18035,7 +19583,7 @@ var make_offcrypto = function(O, _crypto) { t = S[i]; S[i] = S[j]; S[j] = t; } // $FlowIgnore - i = j = 0; var out = Buffer(data.length); + i = j = 0; var out = new_raw_buf(data.length); for(c = 0; c != data.length; ++c) { i = (i + 1)&255; j = (j + S[i])%256; @@ -18059,14 +19607,33 @@ function fix_row(cstr) { return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2"); } function unfix_row(cstr) { return cstr.replace(/\$(\d+)$/,"$1"); } function decode_col(colstr) { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; } -function encode_col(col) { var s=""; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; } +function encode_col(col) { if(col < 0) throw new Error("invalid column " + col); var s=""; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; } function fix_col(cstr) { return cstr.replace(/^([A-Z])/,"$$$1"); } function unfix_col(cstr) { return cstr.replace(/^\$([A-Z])/,"$1"); } function split_cell(cstr) { return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(","); } -function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; } -function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); } -function decode_range(range) { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; } +//function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; } +function decode_cell(cstr) { + var R = 0, C = 0; + for(var i = 0; i < cstr.length; ++i) { + var cc = cstr.charCodeAt(i); + if(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48); + else if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64); + } + return { c: C - 1, r:R - 1 }; +} +//function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); } +function encode_cell(cell) { + var col = cell.c + 1; + var s=""; + for(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s; + return s + (cell.r + 1); +} +function decode_range(range) { + var idx = range.indexOf(":"); + if(idx == -1) return { s: decode_cell(range), e: decode_cell(range) }; + return { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) }; +} function encode_range(cs,ce) { if(typeof ce === 'undefined' || typeof ce === 'number') { return encode_range(cs.s, cs.e); @@ -18092,7 +19659,8 @@ function safe_decode_range(range) { } o.s.r = --idx; - if(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; } + if(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; } + ++i; for(idx = 0; i != len; ++i) { if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break; @@ -18118,6 +19686,7 @@ function format_cell(cell, v, o) { if(cell == null || cell.t == null || cell.t == 'z') return ""; if(cell.w !== undefined) return cell.w; if(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF; + if(cell.t == "e") return BErr[cell.v] || cell.v; if(v == undefined) return safe_format_cell(cell, cell.v); return safe_format_cell(cell, v); } @@ -18128,34 +19697,65 @@ function sheet_to_workbook(sheet, opts) { return { SheetNames: [n], Sheets: sheets }; } -function aoa_to_sheet(data, opts) { +function sheet_add_aoa(_ws, data, opts) { var o = opts || {}; - if(DENSE != null && o.dense == null) o.dense = DENSE; - var ws = o.dense ? ([]) : ({}); + var dense = _ws ? Array.isArray(_ws) : o.dense; + if(DENSE != null && dense == null) dense = DENSE; + var ws = _ws || (dense ? ([]) : ({})); + var _R = 0, _C = 0; + if(ws && o.origin != null) { + if(typeof o.origin == 'number') _R = o.origin; + else { + var _origin = typeof o.origin == "string" ? decode_cell(o.origin) : o.origin; + _R = _origin.r; _C = _origin.c; + } + if(!ws["!ref"]) ws["!ref"] = "A1:A1"; + } var range = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}); + if(ws['!ref']) { + var _range = safe_decode_range(ws['!ref']); + range.s.c = _range.s.c; + range.s.r = _range.s.r; + range.e.c = Math.max(range.e.c, _range.e.c); + range.e.r = Math.max(range.e.r, _range.e.r); + if(_R == -1) range.e.r = _R = _range.e.r + 1; + } for(var R = 0; R != data.length; ++R) { + if(!data[R]) continue; + if(!Array.isArray(data[R])) throw new Error("aoa_to_sheet expects an array of arrays"); for(var C = 0; C != data[R].length; ++C) { if(typeof data[R][C] === 'undefined') continue; var cell = ({v: data[R][C] }); - if(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; } - if(range.s.r > R) range.s.r = R; - if(range.s.c > C) range.s.c = C; - if(range.e.r < R) range.e.r = R; - if(range.e.c < C) range.e.c = C; - if(cell.v === null) { if(cell.f) cell.t = 'n'; else if(!o.cellStubs) continue; else cell.t = 'z'; } - else if(typeof cell.v === 'number') cell.t = 'n'; - else if(typeof cell.v === 'boolean') cell.t = 'b'; - else if(cell.v instanceof Date) { - cell.z = o.dateNF || SSF._table[14]; - if(o.cellDates) { cell.t = 'd'; cell.w = SSF.format(cell.z, datenum(cell.v)); } - else { cell.t = 'n'; cell.v = datenum(cell.v); cell.w = SSF.format(cell.z, cell.v); } + var __R = _R + R, __C = _C + C; + if(range.s.r > __R) range.s.r = __R; + if(range.s.c > __C) range.s.c = __C; + if(range.e.r < __R) range.e.r = __R; + if(range.e.c < __C) range.e.c = __C; + if(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C]; + else { + if(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; } + if(cell.v === null) { + if(cell.f) cell.t = 'n'; + else if(o.nullError) { cell.t = 'e'; cell.v = 0; } + else if(!o.sheetStubs) continue; + else cell.t = 'z'; + } + else if(typeof cell.v === 'number') cell.t = 'n'; + else if(typeof cell.v === 'boolean') cell.t = 'b'; + else if(cell.v instanceof Date) { + cell.z = o.dateNF || SSF._table[14]; + if(o.cellDates) { cell.t = 'd'; cell.w = SSF.format(cell.z, datenum(cell.v)); } + else { cell.t = 'n'; cell.v = datenum(cell.v); cell.w = SSF.format(cell.z, cell.v); } + } + else cell.t = 's'; } - else cell.t = 's'; - if(o.dense) { - if(!ws[R]) ws[R] = []; - ws[R][C] = cell; + if(dense) { + if(!ws[__R]) ws[__R] = []; + if(ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z; + ws[__R][__C] = cell; } else { - var cell_ref = encode_cell(({c:C,r:R})); + var cell_ref = encode_cell(({c:__C,r:__R})); + if(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z; ws[cell_ref] = cell; } } @@ -18163,9 +19763,10 @@ function aoa_to_sheet(data, opts) { if(range.s.c < 10000000) ws['!ref'] = encode_range(range); return ws; } +function aoa_to_sheet(data, opts) { return sheet_add_aoa(null, data, opts); } function write_UInt32LE(x, o) { - if(!o) o = new_buf(4); + if (!o) o = new_buf(4); o.write_shift(4, x); return o; } @@ -18176,37 +19777,43 @@ function parse_XLWideString(data) { return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, 'dbcs'); } function write_XLWideString(data, o) { - var _null = false; if(o == null) { _null = true; o = new_buf(4+2*data.length); } + var _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); } o.write_shift(4, data.length); - if(data.length > 0) o.write_shift(0, data, 'dbcs'); + if (data.length > 0) o.write_shift(0, data, 'dbcs'); return _null ? o.slice(0, o.l) : o; } +/* [MS-XLSB] 2.5.91 */ +//function parse_LPWideString(data) { +// var cchCharacters = data.read_shift(2); +// return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, "utf16le"); +//} + /* [MS-XLSB] 2.5.143 */ -function parse_StrRun(data, length) { +function parse_StrRun(data) { return { ich: data.read_shift(2), ifnt: data.read_shift(2) }; } function write_StrRun(run, o) { - if(!o) o = new_buf(4); + if (!o) o = new_buf(4); o.write_shift(2, run.ich || 0); o.write_shift(2, run.ifnt || 0); return o; } -/* [MS-XLSB] 2.1.7.121 */ +/* [MS-XLSB] 2.5.121 */ function parse_RichStr(data, length) { var start = data.l; var flags = data.read_shift(1); var str = parse_XLWideString(data); var rgsStrRun = []; var z = ({ t: str, h: str }); - if((flags & 1) !== 0) { /* fRichStr */ + if ((flags & 1) !== 0) { /* fRichStr */ /* TODO: formatted string */ var dwSizeStrRun = data.read_shift(4); - for(var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data)); + for (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data)); z.r = rgsStrRun; } - else z.r = [{ich:0, ifnt:0}]; + else z.r = [{ ich: 0, ifnt: 0 }]; //if((flags & 2) !== 0) { /* fExtStr */ // /* TODO: phonetic string */ //} @@ -18215,20 +19822,20 @@ function parse_RichStr(data, length) { } function write_RichStr(str, o) { /* TODO: formatted string */ - var _null = false; if(o == null) { _null = true; o = new_buf(15+4*str.t.length); } - o.write_shift(1,0); + var _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); } + o.write_shift(1, 0); write_XLWideString(str.t, o); return _null ? o.slice(0, o.l) : o; } -/* [MS-XLSB] 2.4.325 BrtCommentText (RichStr w/1 run) */ +/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */ var parse_BrtCommentText = parse_RichStr; function write_BrtCommentText(str, o) { /* TODO: formatted string */ - var _null = false; if(o == null) { _null = true; o = new_buf(23+4*str.t.length); } - o.write_shift(1,1); + var _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); } + o.write_shift(1, 1); write_XLWideString(str.t, o); - o.write_shift(4,1); - write_StrRun({ich:0,ifnt:0}, o); + o.write_shift(4, 1); + write_StrRun({ ich: 0, ifnt: 0 }, o); return _null ? o.slice(0, o.l) : o; } @@ -18236,18 +19843,31 @@ function write_BrtCommentText(str, o) { function parse_XLSBCell(data) { var col = data.read_shift(4); var iStyleRef = data.read_shift(2); - iStyleRef += data.read_shift(1) <<16; - var fPhShow = data.read_shift(1); - return { c:col, iStyleRef: iStyleRef }; + iStyleRef += data.read_shift(1) << 16; + data.l++; //var fPhShow = data.read_shift(1); + return { c: col, iStyleRef: iStyleRef }; } function write_XLSBCell(cell, o) { - if(o == null) o = new_buf(8); + if (o == null) o = new_buf(8); o.write_shift(-4, cell.c); o.write_shift(3, cell.iStyleRef || cell.s); o.write_shift(1, 0); /* fPhShow */ return o; } +/* Short XLSB Cell does not include column */ +function parse_XLSBShortCell(data) { + var iStyleRef = data.read_shift(2); + iStyleRef += data.read_shift(1) <<16; + data.l++; //var fPhShow = data.read_shift(1); + return { c:-1, iStyleRef: iStyleRef }; +} +function write_XLSBShortCell(cell, o) { + if(o == null) o = new_buf(4); + o.write_shift(3, cell.iStyleRef || cell.s); + o.write_shift(1, 0); /* fPhShow */ + return o; +} /* [MS-XLSB] 2.5.21 */ var parse_XLSBCodeName = parse_XLWideString; @@ -18259,53 +19879,51 @@ function parse_XLNullableWideString(data) { return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? "" : data.read_shift(cchCharacters, 'dbcs'); } function write_XLNullableWideString(data, o) { - var _null = false; if(o == null) { _null = true; o = new_buf(127); } + var _null = false; if (o == null) { _null = true; o = new_buf(127); } o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF); - if(data.length > 0) o.write_shift(0, data, 'dbcs'); + if (data.length > 0) o.write_shift(0, data, 'dbcs'); return _null ? o.slice(0, o.l) : o; } /* [MS-XLSB] 2.5.165 */ var parse_XLNameWideString = parse_XLWideString; -var write_XLNameWideString = write_XLWideString; +//var write_XLNameWideString = write_XLWideString; /* [MS-XLSB] 2.5.114 */ var parse_RelID = parse_XLNullableWideString; var write_RelID = write_XLNullableWideString; -/* [MS-XLSB] 2.5.122 */ -/* [MS-XLS] 2.5.217 */ +/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */ function parse_RkNumber(data) { - var b = data.slice(data.l, data.l+4); - var fX100 = b[0] & 1, fInt = b[0] & 2; - data.l+=4; + var b = data.slice(data.l, data.l + 4); + var fX100 = (b[0] & 1), fInt = (b[0] & 2); + data.l += 4; b[0] &= 0xFC; // b[0] &= ~3; - var RK = fInt === 0 ? __double([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2; - return fX100 ? RK/100 : RK; + var RK = fInt === 0 ? __double([0, 0, 0, 0, b[0], b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2; + return fX100 ? (RK / 100) : RK; } function write_RkNumber(data, o) { - if(o == null) o = new_buf(4); + if (o == null) o = new_buf(4); var fX100 = 0, fInt = 0, d100 = data * 100; - if(data == (data | 0) && data >= -(1<<29) && data < (1 << 29)) { fInt = 1; } - else if(d100 == (d100 | 0) && d100 >= -(1<<29) && d100 < (1 << 29)) { fInt = 1; fX100 = 1; } - if(fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2)); + if ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; } + else if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; } + if (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2)); else throw new Error("unsupported RkNumber " + data); // TODO } /* [MS-XLSB] 2.5.117 RfX */ function parse_RfX(data ) { - var cell = ({s: {}, e: {}}); + var cell = ({ s: {}, e: {} }); cell.s.r = data.read_shift(4); cell.e.r = data.read_shift(4); cell.s.c = data.read_shift(4); cell.e.c = data.read_shift(4); return cell; } - function write_RfX(r, o) { - if(!o) o = new_buf(16); + if (!o) o = new_buf(16); o.write_shift(4, r.s.r); o.write_shift(4, r.e.r); o.write_shift(4, r.s.c); @@ -18317,32 +19935,40 @@ function write_RfX(r, o) { var parse_UncheckedRfX = parse_RfX; var write_UncheckedRfX = write_RfX; -/* [MS-XLSB] 2.5.171 */ -/* [MS-XLS] 2.5.342 */ +/* [MS-XLSB] 2.5.155 UncheckedSqRfX */ +//function parse_UncheckedSqRfX(data) { +// var cnt = data.read_shift(4); +// var out = []; +// for(var i = 0; i < cnt; ++i) { +// var rng = parse_UncheckedRfX(data); +// out.push(encode_range(rng)); +// } +// return out.join(","); +//} +//function write_UncheckedSqRfX(sqrfx) { +// var parts = sqrfx.split(/\s*,\s*/); +// var o = new_buf(4); o.write_shift(4, parts.length); +// var out = [o]; +// parts.forEach(function(rng) { +// out.push(write_UncheckedRfX(safe_decode_range(rng))); +// }); +// return bconcat(out); +//} + +/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */ /* TODO: error checking, NaN and Infinity values are not valid Xnum */ -function parse_Xnum(data, length) { return data.read_shift(8, 'f'); } +function parse_Xnum(data) { + if(data.length - data.l < 8) throw "XLS Xnum Buffer underflow"; + return data.read_shift(8, 'f'); +} function write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); } -/* [MS-XLSB] 2.5.198.2 */ -var BErr = { -0x00: "#NULL!", -0x07: "#DIV/0!", -0x0F: "#VALUE!", -0x17: "#REF!", -0x1D: "#NAME?", -0x24: "#NUM!", -0x2A: "#N/A", -0x2B: "#GETTING_DATA", -0xFF: "#WTF?" -}; -var RBErr = evert_num(BErr); - -/* [MS-XLSB] 2.4.321 BrtColor */ -function parse_BrtColor(data, length) { +/* [MS-XLSB] 2.4.324 BrtColor */ +function parse_BrtColor(data) { var out = {}; var d = data.read_shift(1); - var fValidRGB = d & 1; + //var fValidRGB = d & 1; var xColorType = d >>> 1; var index = data.read_shift(1); @@ -18350,15 +19976,15 @@ function parse_BrtColor(data, length) { var bR = data.read_shift(1); var bG = data.read_shift(1); var bB = data.read_shift(1); - var bAlpha = data.read_shift(1); + data.l++; //var bAlpha = data.read_shift(1); - switch(xColorType) { + switch (xColorType) { case 0: out.auto = 1; break; case 1: out.index = index; var icv = XLSIcv[index]; /* automatic pseudo index 81 */ - if(icv) out.rgb = rgb2Hex(icv); + if (icv) out.rgb = rgb2Hex(icv); break; case 2: /* if(!fValidRGB) throw new Error("invalid"); */ @@ -18366,17 +19992,17 @@ function parse_BrtColor(data, length) { break; case 3: out.theme = index; break; } - if(nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768; + if (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768; return out; } function write_BrtColor(color, o) { - if(!o) o = new_buf(8); - if(!color||color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; } - if(color.index) { + if (!o) o = new_buf(8); + if (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; } + if (color.index != null) { o.write_shift(1, 0x02); o.write_shift(1, color.index); - } else if(color.theme) { + } else if (color.theme != null) { o.write_shift(1, 0x06); o.write_shift(1, color.theme); } else { @@ -18384,31 +20010,32 @@ function write_BrtColor(color, o) { o.write_shift(1, 0); } var nTS = color.tint || 0; - if(nTS > 0) nTS *= 32767; - else if(nTS < 0) nTS *= 32768; + if (nTS > 0) nTS *= 32767; + else if (nTS < 0) nTS *= 32768; o.write_shift(2, nTS); - if(!color.rgb) { + if (!color.rgb || color.theme != null) { o.write_shift(2, 0); o.write_shift(1, 0); o.write_shift(1, 0); } else { var rgb = (color.rgb || 'FFFFFF'); - o.write_shift(1, parseInt(rgb.substr(0,2),16)); - o.write_shift(1, parseInt(rgb.substr(2,2),16)); - o.write_shift(1, parseInt(rgb.substr(4,2),16)); + if (typeof rgb == 'number') rgb = ("000000" + rgb.toString(16)).slice(-6); + o.write_shift(1, parseInt(rgb.slice(0, 2), 16)); + o.write_shift(1, parseInt(rgb.slice(2, 4), 16)); + o.write_shift(1, parseInt(rgb.slice(4, 6), 16)); o.write_shift(1, 0xFF); } return o; } /* [MS-XLSB] 2.5.52 */ -function parse_FontFlags(data, length, opts) { +function parse_FontFlags(data) { var d = data.read_shift(1); data.l++; var out = { - /* fBold: d & 0x01 */ + fBold: d & 0x01, fItalic: d & 0x02, - /* fUnderline: d & 0x04 */ + fUnderline: d & 0x04, fStrikeout: d & 0x08, fOutline: d & 0x10, fShadow: d & 0x20, @@ -18418,61 +20045,75 @@ function parse_FontFlags(data, length, opts) { return out; } function write_FontFlags(font, o) { - if(!o) o = new_buf(2); + if (!o) o = new_buf(2); var grbit = - (font.italic ? 0x02 : 0) | - (font.strike ? 0x08 : 0) | - (font.outline ? 0x10 : 0) | - (font.shadow ? 0x20 : 0) | + (font.italic ? 0x02 : 0) | + (font.strike ? 0x08 : 0) | + (font.outline ? 0x10 : 0) | + (font.shadow ? 0x20 : 0) | (font.condense ? 0x40 : 0) | - (font.extend ? 0x80 : 0); + (font.extend ? 0x80 : 0); o.write_shift(1, grbit); o.write_shift(1, 0); return o; } -/* [MS-OLEPS] 2.2 PropertyType */ -{ - //var VT_EMPTY = 0x0000; - //var VT_NULL = 0x0001; - var VT_I2 = 0x0002; - var VT_I4 = 0x0003; - //var VT_R4 = 0x0004; - //var VT_R8 = 0x0005; - //var VT_CY = 0x0006; - //var VT_DATE = 0x0007; - //var VT_BSTR = 0x0008; - //var VT_ERROR = 0x000A; - var VT_BOOL = 0x000B; - var VT_VARIANT = 0x000C; - //var VT_DECIMAL = 0x000E; - //var VT_I1 = 0x0010; - //var VT_UI1 = 0x0011; - //var VT_UI2 = 0x0012; - var VT_UI4 = 0x0013; - //var VT_I8 = 0x0014; - var VT_UI8 = 0x0015; - //var VT_INT = 0x0016; - //var VT_UINT = 0x0017; - var VT_LPSTR = 0x001E; - //var VT_LPWSTR = 0x001F; - var VT_FILETIME = 0x0040; - //var VT_BLOB = 0x0041; - //var VT_STREAM = 0x0042; - //var VT_STORAGE = 0x0043; - //var VT_STREAMED_Object = 0x0044; - //var VT_STORED_Object = 0x0045; - //var VT_BLOB_Object = 0x0046; - var VT_CF = 0x0047; - //var VT_CLSID = 0x0048; - //var VT_VERSIONED_STREAM = 0x0049; - var VT_VECTOR = 0x1000; - //var VT_ARRAY = 0x2000; - - var VT_STRING = 0x0050; // 2.3.3.1.11 VtString - var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString - var VT_CUSTOM = [VT_STRING, VT_USTR]; +/* [MS-OLEDS] 2.3.1 and 2.3.2 */ +function parse_ClipboardFormatOrString(o, w) { + // $FlowIgnore + var ClipFmt = { 2: "BITMAP", 3: "METAFILEPICT", 8: "DIB", 14: "ENHMETAFILE" }; + var m = o.read_shift(4); + switch (m) { + case 0x00000000: return ""; + case 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || ""; + } + if (m > 0x190) throw new Error("Unsupported Clipboard: " + m.toString(16)); + o.l -= 4; + return o.read_shift(0, w == 1 ? "lpstr" : "lpwstr"); } +function parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); } +function parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); } + +/* [MS-OLEPS] 2.2 PropertyType */ +//var VT_EMPTY = 0x0000; +//var VT_NULL = 0x0001; +var VT_I2 = 0x0002; +var VT_I4 = 0x0003; +//var VT_R4 = 0x0004; +//var VT_R8 = 0x0005; +//var VT_CY = 0x0006; +//var VT_DATE = 0x0007; +//var VT_BSTR = 0x0008; +//var VT_ERROR = 0x000A; +var VT_BOOL = 0x000B; +var VT_VARIANT = 0x000C; +//var VT_DECIMAL = 0x000E; +//var VT_I1 = 0x0010; +//var VT_UI1 = 0x0011; +//var VT_UI2 = 0x0012; +var VT_UI4 = 0x0013; +//var VT_I8 = 0x0014; +//var VT_UI8 = 0x0015; +//var VT_INT = 0x0016; +//var VT_UINT = 0x0017; +var VT_LPSTR = 0x001E; +//var VT_LPWSTR = 0x001F; +var VT_FILETIME = 0x0040; +var VT_BLOB = 0x0041; +//var VT_STREAM = 0x0042; +//var VT_STORAGE = 0x0043; +//var VT_STREAMED_Object = 0x0044; +//var VT_STORED_Object = 0x0045; +//var VT_BLOB_Object = 0x0046; +var VT_CF = 0x0047; +//var VT_CLSID = 0x0048; +//var VT_VERSIONED_STREAM = 0x0049; +var VT_VECTOR = 0x1000; +//var VT_ARRAY = 0x2000; + +var VT_STRING = 0x0050; // 2.3.3.1.11 VtString +var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString +var VT_CUSTOM = [VT_STRING, VT_USTR]; /* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */ var DocSummaryPIDDSI = { @@ -18486,21 +20127,26 @@ var DocSummaryPIDDSI = { 0x08: { n: 'NoteCount', t: VT_I4 }, 0x09: { n: 'HiddenCount', t: VT_I4 }, 0x0a: { n: 'MultimediaClipCount', t: VT_I4 }, -0x0b: { n: 'Scale', t: VT_BOOL }, -0x0c: { n: 'HeadingPair', t: VT_VECTOR | VT_VARIANT }, -0x0d: { n: 'DocParts', t: VT_VECTOR | VT_LPSTR }, +0x0b: { n: 'ScaleCrop', t: VT_BOOL }, +0x0c: { n: 'HeadingPairs', t: VT_VECTOR | VT_VARIANT }, +0x0d: { n: 'TitlesOfParts', t: VT_VECTOR | VT_LPSTR }, 0x0e: { n: 'Manager', t: VT_STRING }, 0x0f: { n: 'Company', t: VT_STRING }, -0x10: { n: 'LinksDirty', t: VT_BOOL }, +0x10: { n: 'LinksUpToDate', t: VT_BOOL }, 0x11: { n: 'CharacterCount', t: VT_I4 }, 0x13: { n: 'SharedDoc', t: VT_BOOL }, -0x16: { n: 'HLinksChanged', t: VT_BOOL }, +0x16: { n: 'HyperlinksChanged', t: VT_BOOL }, 0x17: { n: 'AppVersion', t: VT_I4, p: 'version' }, +0x18: { n: 'DigSig', t: VT_BLOB }, 0x1A: { n: 'ContentType', t: VT_STRING }, 0x1B: { n: 'ContentStatus', t: VT_STRING }, 0x1C: { n: 'Language', t: VT_STRING }, 0x1D: { n: 'Version', t: VT_STRING }, -0xFF: {} +0xFF: {}, + /* [MS-OLEPS] 2.18 */ +0x80000000: { n: 'Locale', t: VT_UI4 }, +0x80000003: { n: 'Behavior', t: VT_UI4 }, +0x72627262: {} }; /* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */ @@ -18522,22 +20168,17 @@ var SummaryPIDSI = { 0x0F: { n: 'WordCount', t: VT_I4 }, 0x10: { n: 'CharCount', t: VT_I4 }, 0x11: { n: 'Thumbnail', t: VT_CF }, -0x12: { n: 'ApplicationName', t: VT_LPSTR }, -0x13: { n: 'DocumentSecurity', t: VT_I4 }, -0xFF: {} -}; - -/* [MS-OLEPS] 2.18 */ -var SpecialProperties = { +0x12: { n: 'Application', t: VT_STRING }, +0x13: { n: 'DocSecurity', t: VT_I4 }, +0xFF: {}, + /* [MS-OLEPS] 2.18 */ 0x80000000: { n: 'Locale', t: VT_UI4 }, 0x80000003: { n: 'Behavior', t: VT_UI4 }, 0x72627262: {} }; -(function() { - for(var y in SpecialProperties) if(SpecialProperties.hasOwnProperty(y)) - DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; -})(); +var DocSummaryRE = evert_key(DocSummaryPIDDSI, "n"); +var SummaryRE = evert_key(SummaryPIDSI, "n"); /* [MS-XLS] 2.4.63 Country/Region codes */ var CountryEnum = { @@ -18619,8 +20260,8 @@ var XLSFillPattern = [ function rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); } /* [MS-XLS] 2.5.161 */ -/* [MS-XLSB] 2.5.75 */ -var XLSIcv = rgbify([ +/* [MS-XLSB] 2.5.75 Icv */ +var _XLSIcv = rgbify([ /* Color Constants */ 0x000000, 0xFFFFFF, @@ -18712,12 +20353,25 @@ var XLSIcv = rgbify([ 0x000000, /* 0x50 icvInfoBk ?? */ 0x000000 /* 0x51 icvInfoText ?? */ ]); +var XLSIcv = dup(_XLSIcv); +/* [MS-XLSB] 2.5.97.2 */ +var BErr = { +0x00: "#NULL!", +0x07: "#DIV/0!", +0x0F: "#VALUE!", +0x17: "#REF!", +0x1D: "#NAME?", +0x24: "#NUM!", +0x2A: "#N/A", +0x2B: "#GETTING_DATA", +0xFF: "#WTF?" +}; +var RBErr = evert_num(BErr); /* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */ /* 12.3 Part Summary */ /* 14.2 Part Summary */ -/* [MS-XLSX] 2.1 Part Enumerations */ -/* [MS-XLSB] 2.1.7 Part Enumeration */ +/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */ var ct2type/*{[string]:string}*/ = ({ /* Workbook */ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks", @@ -18742,12 +20396,18 @@ var ct2type/*{[string]:string}*/ = ({ "application/vnd.ms-excel.pivotTable": "TODO", "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml": "TODO", + /* Chart Objects */ + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": "TODO", + /* Chart Colors */ "application/vnd.ms-office.chartcolorstyle+xml": "TODO", /* Chart Style */ "application/vnd.ms-office.chartstyle+xml": "TODO", + /* Chart Advanced */ + "application/vnd.ms-office.chartex+xml": "TODO", + /* Calculation Chain */ "application/vnd.ms-excel.calcChain": "calcchains", "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains", @@ -18838,7 +20498,6 @@ var ct2type/*{[string]:string}*/ = ({ /* Drawing */ "application/vnd.openxmlformats-officedocument.drawing+xml": "drawings", - "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": "TODO", "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": "TODO", "application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml": "TODO", "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml": "TODO", @@ -18863,6 +20522,7 @@ var CT_LIST = (function(){ xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", xlsm: "application/vnd.ms-excel.sheet.macroEnabled.main+xml", xlsb: "application/vnd.ms-excel.sheet.binary.macroEnabled.main", + xlam: "application/vnd.ms-excel.addin.macroEnabled.main+xml", xltx: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml" }, strs: { /* Shared Strings */ @@ -18894,7 +20554,7 @@ var CT_LIST = (function(){ xlsb: "application/vnd.ms-excel.styles" } }; - keys(o).forEach(function(k) { if(!o[k].xlsm) o[k].xlsm = o[k].xlsx; }); + keys(o).forEach(function(k) { ["xlsm", "xlam"].forEach(function(v) { if(!o[k][v]) o[k][v] = o[k].xlsx; }); }); keys(o).forEach(function(k){ keys(o[k]).forEach(function(v) { ct2type[o[k][v]] = k; }); }); return o; })(); @@ -18912,7 +20572,7 @@ function new_ct() { TODO:[], xmlns: "" }); } -function parse_ct(data, opts) { +function parse_ct(data) { var ct = new_ct(); if(!data || !data.match) return ct; var ctext = {}; @@ -18946,6 +20606,7 @@ var CTYPE_DEFAULTS = [ ['xml', 'application/xml'], ['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'], ['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'], + ['data', 'application/vnd.openxmlformats-officedocument.model+data'], /* from test files */ ['bmp', 'image/bmp'], ['png', 'image/png'], @@ -18965,6 +20626,8 @@ function write_ct(ct, opts) { o[o.length] = (XML_HEADER); o[o.length] = (CTYPE_XML_ROOT); o = o.concat(CTYPE_DEFAULTS); + + /* only write first instance */ var f1 = function(w) { if(ct[w] && ct[w].length > 0) { v = ct[w][0]; @@ -18974,6 +20637,8 @@ function write_ct(ct, opts) { })); } }; + + /* book type-specific */ var f2 = function(w) { (ct[w]||[]).forEach(function(v) { o[o.length] = (writextag('Override', null, { @@ -18982,6 +20647,8 @@ function write_ct(ct, opts) { })); }); }; + + /* standard type */ var f3 = function(t) { (ct[t]||[]).forEach(function(v) { o[o.length] = (writextag('Override', null, { @@ -18990,6 +20657,7 @@ function write_ct(ct, opts) { })); }); }; + f1('workbooks'); f2('sheets'); f2('charts'); @@ -19008,28 +20676,33 @@ var RELS = ({ SHEET: "http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument", HLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink", VML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing", + XPATH: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath", + XMISS: "http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing", + XLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink", + CXML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", + CXMLP: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", VBA: "http://schemas.microsoft.com/office/2006/relationships/vbaProject" }); /* 9.3.3 Representing Relationships */ function get_rels_path(file) { var n = file.lastIndexOf("/"); - return file.substr(0,n+1) + '_rels/' + file.substr(n+1) + ".rels"; + return file.slice(0,n+1) + '_rels/' + file.slice(n+1) + ".rels"; } function parse_rels(data, currentFilePath) { - if (!data) return data; + var rels = {"!id":{}}; + if (!data) return rels; if (currentFilePath.charAt(0) !== '/') { currentFilePath = '/'+currentFilePath; } - var rels = {}; var hash = {}; (data.match(tagregex)||[]).forEach(function(x) { var y = parsexmltag(x); /* 9.3.2.2 OPC_Relationships */ if (y[0] === ' -1) relobj.TargetMode = "External"; if(rels['!id'][relobj.Id]) throw new Error("Cannot rewrite rId " + rId); rels['!id'][relobj.Id] = relobj; rels[('/' + relobj.Target).replace("//","/")] = relobj; @@ -19091,7 +20766,7 @@ function parse_manifest(d, opts) { } } -function write_manifest(manifest, opts) { +function write_manifest(manifest) { var o = [XML_HEADER]; o.push('\n'); o.push(' \n'); @@ -19115,7 +20790,7 @@ function write_rdf_has(base, file) { ' \n' ].join(""); } -function write_rdf(rdf, opts) { +function write_rdf(rdf) { var o = [XML_HEADER]; o.push('\n'); for(var i = 0; i != rdf.length; ++i) { @@ -19128,8 +20803,8 @@ function write_rdf(rdf, opts) { } /* TODO: pull properties */ var write_meta_ods = (function() { - var payload = 'Sheet' + 'JS ' + XLSX.version + ''; - return function wmo(wb, opts) { + var payload = 'Sheet' + 'JS ' + XLSX.version + ''; + return function wmo() { return payload; }; })(); @@ -19161,7 +20836,7 @@ var CORE_PROPS_REGEX = (function() { var r = new Array(CORE_PROPS.length); for(var i = 0; i < CORE_PROPS.length; ++i) { var f = CORE_PROPS[i]; - var g = "(?:"+ f[0].substr(0,f[0].indexOf(":")) +":)"+ f[0].substr(f[0].indexOf(":")+1); + var g = "(?:"+ f[0].slice(0,f[0].indexOf(":")) +":)"+ f[0].slice(f[0].indexOf(":")+1); r[i] = new RegExp("<" + g + "[^>]*>([\\s\\S]*?)<\/" + g + ">"); } return r; @@ -19169,10 +20844,11 @@ var CORE_PROPS_REGEX = (function() { function parse_core_props(data) { var p = {}; + data = utf8read(data); for(var i = 0; i < CORE_PROPS.length; ++i) { var f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]); - if(cur != null && cur.length > 0) p[f[1]] = cur[1]; + if(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]); if(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]); } @@ -19191,6 +20867,7 @@ var CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, { function cp_doit(f, g, h, o, p) { if(p[f] != null || g == null || g === "") return; p[f] = g; + g = escapexml(g); o[o.length] = (h ? writextag(f,g,h) : writetag(f,g)); } @@ -19234,13 +20911,67 @@ var EXT_PROPS = [ XMLNS.EXT_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"; RELS.EXT_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties'; -function parse_ext_props(data, p) { +var PseudoPropsPairs = [ + "Worksheets", "SheetNames", + "NamedRanges", "DefinedNames", + "Chartsheets", "ChartNames" +]; +function load_props_pairs(HP, TOP, props, opts) { + var v = []; + if(typeof HP == "string") v = parseVector(HP, opts); + else for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; })); + var parts = (typeof TOP == "string") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP; + var idx = 0, len = 0; + if(parts.length > 0) for(var i = 0; i !== v.length; i += 2) { + len = +(v[i+1].v); + switch(v[i].v) { + case "Worksheets": + case "工作表": + case "Листы": + case "أوراق العمل": + case "ワークシート": + case "גליונות עבודה": + case "Arbeitsblätter": + case "Çalışma Sayfaları": + case "Feuilles de calcul": + case "Fogli di lavoro": + case "Folhas de cálculo": + case "Planilhas": + case "Regneark": + case "Hojas de cálculo": + case "Werkbladen": + props.Worksheets = len; + props.SheetNames = parts.slice(idx, idx + len); + break; + + case "Named Ranges": + case "Rangos con nombre": + case "名前付き一覧": + case "Benannte Bereiche": + case "Navngivne områder": + props.NamedRanges = len; + props.DefinedNames = parts.slice(idx, idx + len); + break; + + case "Charts": + case "Diagramme": + props.Chartsheets = len; + props.ChartNames = parts.slice(idx, idx + len); + break; + } + idx += len; + } +} + +function parse_ext_props(data, p, opts) { var q = {}; if(!p) p = {}; + data = utf8read(data); EXT_PROPS.forEach(function(f) { + var xml = (data.match(matchtag(f[0]))||[])[1]; switch(f[2]) { - case "string": p[f[1]] = (data.match(matchtag(f[0]))||[])[1]; break; - case "bool": p[f[1]] = (data.match(matchtag(f[0]))||[])[1] === "true"; break; + case "string": if(xml) p[f[1]] = unescapexml(xml); break; + case "bool": p[f[1]] = xml === "true"; break; case "raw": var cur = data.match(new RegExp("<" + f[0] + "[^>]*>([\\s\\S]*?)<\/" + f[0] + ">")); if(cur && cur.length > 0) q[f[1]] = cur[1]; @@ -19248,48 +20979,7 @@ function parse_ext_props(data, p) { } }); - if(q.HeadingPairs && q.TitlesOfParts) { - var v = parseVector(q.HeadingPairs); - var parts = parseVector(q.TitlesOfParts).map(function(x) { return x.v; }); - var idx = 0, len = 0; - for(var i = 0; i !== v.length; i+=2) { - len = +(v[i+1].v); - switch(v[i].v) { - case "Worksheets": - case "工作表": - case "Листы": - case "أوراق العمل": - case "ワークシート": - case "גליונות עבודה": - case "Arbeitsblätter": - case "Çalışma Sayfaları": - case "Feuilles de calcul": - case "Fogli di lavoro": - case "Folhas de cálculo": - case "Planilhas": - case "Regneark": - case "Werkbladen": - p.Worksheets = len; - p.SheetNames = parts.slice(idx, idx + len); - break; - - case "Named Ranges": - case "名前付き一覧": - case "Benannte Bereiche": - case "Navngivne områder": - p.NamedRanges = len; - p.DefinedNames = parts.slice(idx, idx + len); - break; - - case "Charts": - case "Diagramme": - p.Chartsheets = len; - p.ChartNames = parts.slice(idx, idx + len); - break; - } - idx += len; - } - } + if(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts); return p; } @@ -19299,8 +20989,8 @@ var EXT_PROPS_XML_ROOT = writextag('Properties', null, { 'xmlns:vt': XMLNS.vt }); -function write_ext_props(cp, opts) { - var o = [], p = {}, W = writextag; +function write_ext_props(cp) { + var o = [], W = writextag; if(!cp) cp = {}; cp.Application = "SheetJS"; o[o.length] = (XML_HEADER); @@ -19310,7 +21000,7 @@ function write_ext_props(cp, opts) { if(cp[f[1]] === undefined) return; var v; switch(f[2]) { - case 'string': v = String(cp[f[1]]); break; + case 'string': v = escapexml(String(cp[f[1]])); break; case 'bool': v = cp[f[1]] ? 'true' : 'false'; break; } if(v !== undefined) o[o.length] = (W(f[0], v)); @@ -19335,18 +21025,18 @@ function parse_cust_props(data, opts) { switch(y[0]) { case '': name = null; break; default: if (x.indexOf(''); - var type = toks[0].substring(4), text = toks[1]; + var type = toks[0].slice(4), text = toks[1]; /* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */ switch(type) { case 'lpstr': case 'bstr': case 'lpwstr': p[name] = unescapexml(text); break; case 'bool': - p[name] = parsexmlbool(text, ''); + p[name] = parsexmlbool(text); break; case 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint': p[name] = parseInt(text, 10); @@ -19364,7 +21054,7 @@ function parse_cust_props(data, opts) { if(type.slice(-1) == '/') break; if(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks); } - } else if(x.substr(0,2) === "2){ o[o.length] = ''; o[1]=o[1].replace("/>",">"); } @@ -19450,12 +21139,12 @@ function xlml_write_docprops(Props, opts) { }); return writextag('DocumentProperties', o.join(""), {xmlns:XLMLNS.o }); } -function xlml_write_custprops(Props, Custprops, opts) { +function xlml_write_custprops(Props, Custprops) { var BLACKLIST = ["Worksheets","SheetNames"]; var T = 'CustomDocumentProperties'; var o = []; if(Props) keys(Props).forEach(function(k) { -if(!Props.hasOwnProperty(k)) return; +if(!Object.prototype.hasOwnProperty.call(Props, k)) return; for(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return; for(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return; for(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return; @@ -19468,7 +21157,8 @@ if(!Props.hasOwnProperty(k)) return; o.push(writextag(escapexmltag(k), m, {"dt:dt":t})); }); if(Custprops) keys(Custprops).forEach(function(k) { -if(!Custprops.hasOwnProperty(k)) return; +if(!Object.prototype.hasOwnProperty.call(Custprops, k)) return; + if(Props && Object.prototype.hasOwnProperty.call(Props, k)) return; var m = Custprops[k]; var t = "string"; if(typeof m == 'number') { t = "float"; m = String(m); } @@ -19486,11 +21176,21 @@ function parse_FILETIME(blob) { var dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4); return new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\.000/,""); } +function write_FILETIME(time) { + var date = (typeof time == "string") ? new Date(Date.parse(time)) : time; + var t = date.getTime() / 1000 + 11644473600; + var l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32); + l *= 1e7; h *= 1e7; + var w = (l / Math.pow(2,32)) | 0; + if(w > 0) { l = l % Math.pow(2,32); h += w; } + var o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o; +} /* [MS-OSHARED] 2.3.3.1.4 Lpstr */ function parse_lpstr(blob, type, pad) { - var str = blob.read_shift(0, 'lpstr'); - if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3; + var start = blob.l; + var str = blob.read_shift(0, 'lpstr-cp'); + if(pad) while((blob.l - start) & 3) ++blob.l; return str; } @@ -19510,24 +21210,34 @@ function parse_VtStringBase(blob, stringType, pad) { } function parse_VtString(blob, t, pad) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); } -function parse_VtUnalignedString(blob, t) { if(!t) throw new Error("dafuq?"); return parse_VtStringBase(blob, t, 0); } +function parse_VtUnalignedString(blob, t) { if(!t) throw new Error("VtUnalignedString must have positive length"); return parse_VtStringBase(blob, t, 0); } + +/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */ +function parse_VtVecLpwstrValue(blob) { + var length = blob.read_shift(4); + var ret = []; + for(var i = 0; i != length; ++i) { + var start = blob.l; + ret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,''); + if((blob.l - start) & 0x02) blob.l += 2; + } + return ret; +} /* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */ function parse_VtVecUnalignedLpstrValue(blob) { var length = blob.read_shift(4); var ret = []; - for(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr'); + for(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,''); return ret; } -/* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */ -function parse_VtVecUnalignedLpstr(blob) { - return parse_VtVecUnalignedLpstrValue(blob); -} /* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */ function parse_VtHeadingPair(blob) { + var start = blob.l; var headingString = parse_TypedPropertyValue(blob, VT_USTR); + if(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2; var headerParts = parse_TypedPropertyValue(blob, VT_I4); return [headingString, headerParts]; } @@ -19536,16 +21246,10 @@ function parse_VtHeadingPair(blob) { function parse_VtVecHeadingPairValue(blob) { var cElements = blob.read_shift(4); var out = []; - for(var i = 0; i != cElements / 2; ++i) out.push(parse_VtHeadingPair(blob)); + for(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob)); return out; } -/* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */ -function parse_VtVecHeadingPair(blob) { - // NOTE: When invoked, wType & padding were already consumed - return parse_VtVecHeadingPairValue(blob); -} - /* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */ function parse_dictionary(blob,CodePage) { var cnt = blob.read_shift(4); @@ -19554,6 +21258,7 @@ function parse_dictionary(blob,CodePage) { var pid = blob.read_shift(4); var len = blob.read_shift(4); dict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!'); + if(CodePage === 0x4B0 && (len % 2)) blob.l += 2; } if(blob.l & 3) blob.l = (blob.l>>2+1)<<2; return dict; @@ -19563,6 +21268,7 @@ function parse_dictionary(blob,CodePage) { function parse_BLOB(blob) { var size = blob.read_shift(4); var bytes = blob.slice(blob.l,blob.l+size); + blob.l += size; if((size & 3) > 0) blob.l += (4 - (size & 3)) & 3; return bytes; } @@ -19573,16 +21279,16 @@ function parse_ClipboardData(blob) { var o = {}; o.Size = blob.read_shift(4); //o.Format = blob.read_shift(4); - blob.l += o.Size; + blob.l += o.Size + 3 - (o.Size - 1) % 4; return o; } -/* [MS-OLEPS] 2.14 Vector and Array Property Types */ +/* [MS-OLEPS] 2.15 TypedPropertyValue */ function parse_TypedPropertyValue(blob, type, _opts) { var t = blob.read_shift(2), ret, opts = _opts||{}; blob.l += 2; if(type !== VT_VARIANT) - if(t !== type && VT_CUSTOM.indexOf(type)===-1) throw new Error('Expected type ' + type + ' saw ' + t); + if(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t); switch(type === VT_VARIANT ? t : type) { case 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret; case 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret; @@ -19593,24 +21299,34 @@ function parse_TypedPropertyValue(blob, type, _opts) { case 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob); case 0x41 /*VT_BLOB*/: return parse_BLOB(blob); case 0x47 /*VT_CF*/: return parse_ClipboardData(blob); - case 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw && 4).replace(chr0,''); + case 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,''); case 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,''); - case 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPair(blob); - case 0x101E /*VT_LPSTR*/: return parse_VtVecUnalignedLpstr(blob); + case 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob); + case 0x101E /*VT_VECTOR|VT_LPSTR*/: + case 0x101F /*VT_VECTOR|VT_LPWSTR*/: + return t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob); default: throw new Error("TypedPropertyValue unrecognized type " + type + " " + t); } } -/* [MS-OLEPS] 2.14.2 VectorHeader */ -/*function parse_VTVectorVariant(blob) { - var Length = blob.read_shift(4); - - if(Length & 1 !== 0) throw new Error("VectorHeader Length=" + Length + " must be even"); - var o = []; - for(var i = 0; i != Length; ++i) { - o.push(parse_TypedPropertyValue(blob, VT_VARIANT)); +function write_TypedPropertyValue(type, value) { + var o = new_buf(4), p = new_buf(4); + o.write_shift(4, type == 0x50 ? 0x1F : type); + switch(type) { + case 0x03 /*VT_I4*/: p.write_shift(-4, value); break; + case 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break; + case 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break; + case 0x40 /*VT_FILETIME*/: p = write_FILETIME(value); break; + case 0x1F /*VT_LPWSTR*/: + case 0x50 /*VT_STRING*/: +p = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2)); + p.write_shift(4, value.length + 1); + p.write_shift(0, value, "dbcs"); + while(p.l != p.length) p.write_shift(1, 0); + break; + default: throw new Error("TypedPropertyValue unrecognized type " + type + " " + value); } - return o; -}*/ + return bconcat([o, p]); +} /* [MS-OLEPS] 2.20 PropertySet */ function parse_PropertySet(blob, PIDSI) { @@ -19625,22 +21341,23 @@ function parse_PropertySet(blob, PIDSI) { var Offset = blob.read_shift(4); Props[i] = [PropID, Offset + start_addr]; } + Props.sort(function(x,y) { return x[1] - y[1]; }); var PropH = {}; for(i = 0; i != NumProps; ++i) { if(blob.l !== Props[i][1]) { var fail = true; if(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) { - case 0x02 /*VT_I2*/: if(blob.l +2 === Props[i][1]) { blob.l+=2; fail = false; } break; + case 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break; case 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break; case 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break; } - if(!PIDSI && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; } + if((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; } if(fail) throw new Error("Read Error: Expected address " + Props[i][1] + ' at ' + blob.l + ' :' + i); } if(PIDSI) { var piddsi = PIDSI[Props[i][0]]; PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true}); - if(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + "." + String(PropH[piddsi.n] & 0xFFFF); + if(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + "." + ("0000" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4); if(piddsi.n == "CodePage") switch(PropH[piddsi.n]) { case 0: PropH[piddsi.n] = 1252; /* falls through */ @@ -19663,12 +21380,12 @@ function parse_PropertySet(blob, PIDSI) { case 1252: case 65000: case -536: case 65001: case -535: - set_cp(CodePage = PropH[piddsi.n]); break; + set_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break; default: throw new Error("Unsupported CodePage: " + PropH[piddsi.n]); } } else { if(Props[i][0] === 0x1) { - CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2); + CodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)); set_cp(CodePage); if(Dictionary !== -1) { var oldpos = blob.l; @@ -19685,8 +21402,8 @@ function parse_PropertySet(blob, PIDSI) { /* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */ switch(blob[blob.l]) { case 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break; - case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break; - case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break; + case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\u0000+$/,""); break; + case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\u0000+$/,""); break; case 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break; case 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break; case 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break; @@ -19701,18 +21418,96 @@ function parse_PropertySet(blob, PIDSI) { blob.l = start_addr + size; /* step ahead to skip padding */ return PropH; } +var XLSPSSkip = [ "CodePage", "Thumbnail", "_PID_LINKBASE", "_PID_HLINKS", "SystemIdentifier", "FMTID" ].concat(PseudoPropsPairs); +function guess_property_type(val) { + switch(typeof val) { + case "boolean": return 0x0B; + case "number": return ((val|0)==val) ? 0x03 : 0x05; + case "string": return 0x1F; + case "object": if(val instanceof Date) return 0x40; break; + } + return -1; +} +function write_PropertySet(entries, RE, PIDSI) { + var hdr = new_buf(8), piao = [], prop = []; + var sz = 8, i = 0; + + var pr = new_buf(8), pio = new_buf(8); + pr.write_shift(4, 0x0002); + pr.write_shift(4, 0x04B0); + pio.write_shift(4, 0x0001); + prop.push(pr); piao.push(pio); + sz += 8 + pr.length; + + if(!RE) { + pio = new_buf(8); + pio.write_shift(4, 0); + piao.unshift(pio); + + var bufs = [new_buf(4)]; + bufs[0].write_shift(4, entries.length); + for(i = 0; i < entries.length; ++i) { + var value = entries[i][0]; + pr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2)); + pr.write_shift(4, i+2); + pr.write_shift(4, value.length + 1); + pr.write_shift(0, value, "dbcs"); + while(pr.l != pr.length) pr.write_shift(1, 0); + bufs.push(pr); + } + pr = bconcat(bufs); + prop.unshift(pr); + sz += 8 + pr.length; + } + + for(i = 0; i < entries.length; ++i) { + if(RE && !RE[entries[i][0]]) continue; + if(XLSPSSkip.indexOf(entries[i][0]) > -1) continue; + if(entries[i][1] == null) continue; + + var val = entries[i][1], idx = 0; + if(RE) { + idx = +RE[entries[i][0]]; + var pinfo = (PIDSI)[idx]; + if(pinfo.p == "version" && typeof val == "string") { +var arr = val.split("."); + val = ((+arr[0])<<16) + ((+arr[1])||0); + } + pr = write_TypedPropertyValue(pinfo.t, val); + } else { + var T = guess_property_type(val); + if(T == -1) { T = 0x1F; val = String(val); } + pr = write_TypedPropertyValue(T, val); + } + prop.push(pr); + + pio = new_buf(8); + pio.write_shift(4, !RE ? 2+i : idx); + piao.push(pio); + + sz += 8 + pr.length; + } + + var w = 8 * (prop.length + 1); + for(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; } + hdr.write_shift(4, sz); + hdr.write_shift(4, prop.length); + return bconcat([hdr].concat(piao).concat(prop)); +} /* [MS-OLEPS] 2.21 PropertySetStream */ -function parse_PropertySetStream(file, PIDSI) { +function parse_PropertySetStream(file, PIDSI, clsid) { var blob = file.content; + if(!blob) return ({}); prep_blob(blob, 0); var NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0; blob.chk('feff', 'Byte Order: '); - var vers = blob.read_shift(2); // TODO: check version + /*var vers = */blob.read_shift(2); // TODO: check version var SystemIdentifier = blob.read_shift(4); - blob.chk(CFB.utils.consts.HEADER_CLSID, 'CLSID: '); + var CLSID = blob.read_shift(16); + if(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error("Bad PropertySet CLSID " + CLSID); NumSets = blob.read_shift(4); if(NumSets !== 1 && NumSets !== 2) throw new Error("Unrecognized #Sets: " + NumSets); FMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4); @@ -19727,6 +21522,7 @@ function parse_PropertySetStream(file, PIDSI) { rval.FMTID = FMTID0; //rval.PSet0 = PSet0; if(NumSets === 1) return rval; + if(Offset1 - blob.l == 2) blob.l += 2; if(blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1); var PSet1; try { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */} @@ -19734,9 +21530,30 @@ function parse_PropertySetStream(file, PIDSI) { rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1 return rval; } +function write_PropertySetStream(entries, clsid, RE, PIDSI, entries2, clsid2) { + var hdr = new_buf(entries2 ? 68 : 48); + var bufs = [hdr]; + hdr.write_shift(2, 0xFFFE); + hdr.write_shift(2, 0x0000); /* TODO: type 1 props */ + hdr.write_shift(4, 0x32363237); + hdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, "hex"); + hdr.write_shift(4, (entries2 ? 2 : 1)); + hdr.write_shift(16, clsid, "hex"); + hdr.write_shift(4, (entries2 ? 68 : 48)); + var ps0 = write_PropertySet(entries, RE, PIDSI); + bufs.push(ps0); + if(entries2) { + var ps1 = write_PropertySet(entries2, null, null); + hdr.write_shift(16, clsid2, "hex"); + hdr.write_shift(4, 68 + ps0.length); + bufs.push(ps1); + } + return bconcat(bufs); +} function parsenoop2(blob, length) { blob.read_shift(length); return null; } +function writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1); - var width = 1, encoding = 'sbcs-cont'; + var encoding = 'sbcs-cont'; var cp = current_codepage; if(opts && opts.biff >= 8) current_codepage = 1200; if(!opts || opts.biff == 8 ) { var fHighByte = blob.read_shift(1); - if(fHighByte) { width = 2; encoding = 'dbcs-cont'; } + if(fHighByte) { encoding = 'dbcs-cont'; } } else if(opts.biff == 12) { - width = 2; encoding = 'wstr'; + encoding = 'wstr'; } + if(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr'; var o = cch ? blob.read_shift(cch, encoding) : ""; current_codepage = cp; return o; @@ -19783,13 +21606,13 @@ function parse_XLUnicodeRichExtendedString(blob) { var cp = current_codepage; current_codepage = 1200; var cch = blob.read_shift(2), flags = blob.read_shift(1); - var fHighByte = flags & 0x1, fExtSt = flags & 0x4, fRichSt = flags & 0x8; + var /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8; var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs var cRun = 0, cbExtRst; var z = {}; if(fRichSt) cRun = blob.read_shift(2); if(fExtSt) cbExtRst = blob.read_shift(4); - var encoding = (flags & 0x1) ? 'dbcs-cont' : 'sbcs-cont'; + var encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont'; var msg = cch === 0 ? "" : blob.read_shift(cch, encoding); if(fRichSt) blob.l += 4 * cRun; //TODO: parse this if(fExtSt) blob.l += cbExtRst; //TODO: parse this @@ -19798,12 +21621,27 @@ function parse_XLUnicodeRichExtendedString(blob) { current_codepage = cp; return z; } +function write_XLUnicodeRichExtendedString(xlstr) { + var str = (xlstr.t||""), nfmts = 1; + + var hdr = new_buf(3 + (nfmts > 1 ? 2 : 0)); + hdr.write_shift(2, str.length); + hdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01); + if(nfmts > 1) hdr.write_shift(2, nfmts); + + var otext = new_buf(2 * str.length); + otext.write_shift(2 * str.length, str, 'utf16le'); + + var out = [hdr, otext]; + + return bconcat(out); +} /* 2.5.296 XLUnicodeStringNoCch */ function parse_XLUnicodeStringNoCch(blob, cch, opts) { var retval; if(opts) { - if(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'sbcs-cont'); + if(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr'); if(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont'); } var fHighByte = blob.read_shift(1); @@ -19823,11 +21661,19 @@ function parse_XLUnicodeString2(blob, length, opts) { if(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts); var cch = blob.read_shift(1); if(cch === 0) { blob.l++; return ""; } - return blob.read_shift(cch, 'sbcs-cont'); + return blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont'); +} +/* TODO: BIFF5 and lower, codepage awareness */ +function write_XLUnicodeString(str, opts, o) { + if(!o) o = new_buf(3 + 2 * str.length); + o.write_shift(2, str.length); + o.write_shift(1, 1); + o.write_shift(31, str, 'utf16le'); + return o; } /* [MS-XLS] 2.5.61 ControlInfo */ -function parse_ControlInfo(blob, length, opts) { +function parse_ControlInfo(blob) { var flags = blob.read_shift(1); blob.l++; var accel = blob.read_shift(2); @@ -19836,7 +21682,7 @@ function parse_ControlInfo(blob, length, opts) { } /* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */ -var parse_URLMoniker = function(blob) { +function parse_URLMoniker(blob) { var len = blob.read_shift(4), start = blob.l; var extra = false; if(len > 24) { @@ -19848,79 +21694,132 @@ var parse_URLMoniker = function(blob) { var url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,""); if(extra) blob.l += 24; return url; -}; +} /* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */ -var parse_FileMoniker = function(blob, length) { +function parse_FileMoniker(blob) { var cAnti = blob.read_shift(2); - var ansiLength = blob.read_shift(4); - var ansiPath = blob.read_shift(ansiLength, 'cstr'); - var endServer = blob.read_shift(2); - var versionNumber = blob.read_shift(2); - var cbUnicodePathSize = blob.read_shift(4); - if(cbUnicodePathSize === 0) return ansiPath.replace(/\\/g,"/"); - var cbUnicodePathBytes = blob.read_shift(4); - var usKeyValue = blob.read_shift(2); - var unicodePath = blob.read_shift(cbUnicodePathBytes>>1, 'utf16le').replace(chr0,""); - return unicodePath; -}; + var preamble = ""; while(cAnti-- > 0) preamble += "../"; + var ansiPath = blob.read_shift(0, 'lpstr-ansi'); + blob.l += 2; //var endServer = blob.read_shift(2); + if(blob.read_shift(2) != 0xDEAD) throw new Error("Bad FileMoniker"); + var sz = blob.read_shift(4); + if(sz === 0) return preamble + ansiPath.replace(/\\/g,"/"); + var bytes = blob.read_shift(4); + if(blob.read_shift(2) != 3) throw new Error("Bad FileMoniker"); + var unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,""); + return preamble + unicodePath; +} /* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */ -var parse_HyperlinkMoniker = function(blob, length) { +function parse_HyperlinkMoniker(blob, length) { var clsid = blob.read_shift(16); length -= 16; switch(clsid) { case "e0c9ea79f9bace118c8200aa004ba90b": return parse_URLMoniker(blob, length); case "0303000000000000c000000000000046": return parse_FileMoniker(blob, length); default: throw new Error("Unsupported Moniker " + clsid); } -}; +} /* [MS-OSHARED] 2.3.7.9 HyperlinkString */ -var parse_HyperlinkString = function(blob, length) { +function parse_HyperlinkString(blob) { var len = blob.read_shift(4); - var o = blob.read_shift(len, 'utf16le').replace(chr0, ""); + var o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, "") : ""; return o; -}; +} +function write_HyperlinkString(str, o) { + if(!o) o = new_buf(6 + str.length * 2); + o.write_shift(4, 1 + str.length); + for(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i)); + o.write_shift(2, 0); + return o; +} -/* [MS-OSHARED] 2.3.7.1 Hyperlink Object TODO: unify params with XLSX */ -var parse_Hyperlink = function(blob, length) { +/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */ +function parse_Hyperlink(blob, length) { var end = blob.l + length; var sVer = blob.read_shift(4); if(sVer !== 2) throw new Error("Unrecognized streamVersion: " + sVer); var flags = blob.read_shift(2); blob.l += 2; - var displayName, targetFrameName, moniker, oleMoniker, location, guid, fileTime; + var displayName, targetFrameName, moniker, oleMoniker, Loc="", guid, fileTime; if(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l); if(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l); if((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l); if((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l); - if(flags & 0x0008) location = parse_HyperlinkString(blob, end - blob.l); + if(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l); if(flags & 0x0020) guid = blob.read_shift(16); if(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/); blob.l = end; - var target = (targetFrameName||moniker||oleMoniker); - if(location) target+="#"+location; - return {Target: target}; -}; + var target = targetFrameName||moniker||oleMoniker||""; + if(target && Loc) target+="#"+Loc; + if(!target) target = "#" + Loc; + if((flags & 0x0002) && target.charAt(0) == "/" && target.charAt(1) != "/") target = "file://" + target; + var out = ({Target:target}); + if(guid) out.guid = guid; + if(fileTime) out.time = fileTime; + if(displayName) out.Tooltip = displayName; + return out; +} +function write_Hyperlink(hl) { + var out = new_buf(512), i = 0; + var Target = hl.Target; + if(Target.slice(0,7) == "file://") Target = Target.slice(7); + var hashidx = Target.indexOf("#"); + var F = hashidx > -1 ? 0x1f : 0x17; + switch(Target.charAt(0)) { case "#": F=0x1c; break; case ".": F&=~2; break; } + out.write_shift(4,2); out.write_shift(4, F); + var data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]); + if(F == 0x1C) { + Target = Target.slice(1); + write_HyperlinkString(Target, out); + } else if(F & 0x02) { + data = "e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" "); + for(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16)); + var Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target; + out.write_shift(4, 2*(Pretarget.length + 1)); + for(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i)); + out.write_shift(2, 0); + if(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): "", out); + } else { + data = "03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" "); + for(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16)); + var P = 0; + while(Target.slice(P*3,P*3+3)=="../"||Target.slice(P*3,P*3+3)=="..\\") ++P; + out.write_shift(2, P); + out.write_shift(4, Target.length - 3 * P + 1); + for(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF); + out.write_shift(1, 0); + out.write_shift(2, 0xFFFF); + out.write_shift(2, 0xDEAD); + for(i = 0; i < 6; ++i) out.write_shift(4, 0); + } + return out.slice(0, out.l); +} /* 2.5.178 LongRGBA */ -function parse_LongRGBA(blob, length) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; } +function parse_LongRGBA(blob) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; } /* 2.5.177 LongRGB */ function parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; } -/* --- MS-XLS --- */ - -/* 2.5.19 */ -function parse_XLSCell(blob, length) { +/* [MS-XLS] 2.5.19 */ +function parse_XLSCell(blob) { var rw = blob.read_shift(2); // 0-indexed var col = blob.read_shift(2); var ixfe = blob.read_shift(2); return ({r:rw, c:col, ixfe:ixfe}); } +function write_XLSCell(R, C, ixfe, o) { + if(!o) o = new_buf(6); + o.write_shift(2, R); + o.write_shift(2, C); + o.write_shift(2, ixfe||0); + return o; +} -/* 2.5.134 */ +/* [MS-XLS] 2.5.134 */ function parse_frtHeader(blob) { var rt = blob.read_shift(2); var flags = blob.read_shift(2); // TODO: parse these flags @@ -19932,25 +21831,21 @@ function parse_frtHeader(blob) { function parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? "" : parse_XLUnicodeString2(blob, length, opts); } -/* 2.5.158 */ -//var HIDEOBJENUM = ['SHOWALL', 'SHOWPLACEHOLDER', 'HIDEALL']; -var parse_HideObjEnum = parseuint16; - -/* 2.5.344 */ +/* [MS-XLS] 2.5.344 */ function parse_XTI(blob, length, opts) { var w = opts.biff > 8 ? 4 : 2; var iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i'); return [iSupBook, itabFirst, itabLast]; } -/* 2.5.218 */ -function parse_RkRec(blob, length) { +/* [MS-XLS] 2.5.218 */ +function parse_RkRec(blob) { var ixfe = blob.read_shift(2); var RK = parse_RkNumber(blob); return [ixfe, RK]; } -/* 2.5.1 */ +/* [MS-XLS] 2.5.1 */ function parse_AddinUdf(blob, length, opts) { blob.l += 4; length -= 4; var l = blob.l + length; @@ -19962,17 +21857,25 @@ function parse_AddinUdf(blob, length, opts) { return udfName; } -/* 2.5.209 TODO: Check sizes */ -function parse_Ref8U(blob, length) { +/* [MS-XLS] 2.5.209 TODO: Check sizes */ +function parse_Ref8U(blob) { var rwFirst = blob.read_shift(2); var rwLast = blob.read_shift(2); var colFirst = blob.read_shift(2); var colLast = blob.read_shift(2); return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}}; } +function write_Ref8U(r, o) { + if(!o) o = new_buf(8); + o.write_shift(2, r.s.r); + o.write_shift(2, r.e.r); + o.write_shift(2, r.s.c); + o.write_shift(2, r.e.c); + return o; +} -/* 2.5.211 */ -function parse_RefU(blob, length) { +/* [MS-XLS] 2.5.211 */ +function parse_RefU(blob) { var rwFirst = blob.read_shift(2); var rwLast = blob.read_shift(2); var colFirst = blob.read_shift(1); @@ -19980,11 +21883,11 @@ function parse_RefU(blob, length) { return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}}; } -/* 2.5.207 */ +/* [MS-XLS] 2.5.207 */ var parse_Ref = parse_RefU; -/* 2.5.143 */ -function parse_FtCmo(blob, length) { +/* [MS-XLS] 2.5.143 */ +function parse_FtCmo(blob) { blob.l += 4; var ot = blob.read_shift(2); var id = blob.read_shift(2); @@ -19993,8 +21896,8 @@ function parse_FtCmo(blob, length) { return [id, ot, flags]; } -/* 2.5.149 */ -function parse_FtNts(blob, length) { +/* [MS-XLS] 2.5.149 */ +function parse_FtNts(blob) { var out = {}; blob.l += 4; blob.l += 16; // GUID TODO @@ -20003,16 +21906,16 @@ function parse_FtNts(blob, length) { return out; } -/* 2.5.142 */ -function parse_FtCf(blob, length) { +/* [MS-XLS] 2.5.142 */ +function parse_FtCf(blob) { var out = {}; blob.l += 4; blob.cf = blob.read_shift(2); return out; } -/* 2.5.140 - 2.5.154 and friends */ -function parse_FtSkip(blob, length) { blob.l += 2; blob.l += blob.read_shift(2); } +/* [MS-XLS] 2.5.140 - 2.5.154 and friends */ +function parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); } var FtTab = { 0x00: parse_FtSkip, /* FtEnd */ 0x04: parse_FtSkip, /* FtMacro */ @@ -20034,7 +21937,7 @@ var FtTab = { 0x14: parse_FtSkip, /* FtCblsFmla */ 0x15: parse_FtCmo }; -function parse_FtArray(blob, length, ot) { +function parse_FtArray(blob, length) { var tgt = blob.l + length; var fts = []; while(blob.l < tgt) { @@ -20048,12 +21951,9 @@ function parse_FtArray(blob, length, ot) { return fts; } -/* 2.5.129 */ -var parse_FontIndex = parseuint16; - /* --- 2.4 Records --- */ -/* 2.4.21 */ +/* [MS-XLS] 2.4.21 */ function parse_BOF(blob, length) { var o = {BIFFVer:0, dt:0}; o.BIFFVer = blob.read_shift(2); length -= 2; @@ -20061,6 +21961,9 @@ function parse_BOF(blob, length) { switch(o.BIFFVer) { case 0x0600: /* BIFF8 */ case 0x0500: /* BIFF5 */ + case 0x0400: /* BIFF4 */ + case 0x0300: /* BIFF3 */ + case 0x0200: /* BIFF2 */ case 0x0002: case 0x0007: /* BIFF2 */ break; default: if(length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer); @@ -20069,28 +21972,67 @@ function parse_BOF(blob, length) { blob.read_shift(length); return o; } +function write_BOF(wb, t, o) { + var h = 0x0600, w = 16; + switch(o.bookType) { + case 'biff8': break; + case 'biff5': h = 0x0500; w = 8; break; + case 'biff4': h = 0x0004; w = 6; break; + case 'biff3': h = 0x0003; w = 6; break; + case 'biff2': h = 0x0002; w = 4; break; + case 'xla': break; + default: throw new Error("unsupported BIFF version"); + } + var out = new_buf(w); + out.write_shift(2, h); + out.write_shift(2, t); + if(w > 4) out.write_shift(2, 0x7262); + if(w > 6) out.write_shift(2, 0x07CD); + if(w > 8) { + out.write_shift(2, 0xC009); + out.write_shift(2, 0x0001); + out.write_shift(2, 0x0706); + out.write_shift(2, 0x0000); + } + return out; +} -/* 2.4.146 */ +/* [MS-XLS] 2.4.146 */ function parse_InterfaceHdr(blob, length) { if(length === 0) return 0x04b0; - var q; - if((q=blob.read_shift(2))!==0x04b0){/* empty */} + if((blob.read_shift(2))!==0x04b0){/* empty */} return 0x04b0; } -/* 2.4.349 */ +/* [MS-XLS] 2.4.349 */ function parse_WriteAccess(blob, length, opts) { if(opts.enc) { blob.l += length; return ""; } var l = blob.l; // TODO: make sure XLUnicodeString doesnt overrun - var UserName = parse_XLUnicodeString(blob, 0, opts); + var UserName = parse_XLUnicodeString2(blob, 0, opts); blob.read_shift(length + l - blob.l); return UserName; } +function write_WriteAccess(s, opts) { + var b8 = !opts || opts.biff == 8; + var o = new_buf(b8 ? 112 : 54); + o.write_shift(opts.biff == 8 ? 2 : 1, 7); + if(b8) o.write_shift(1, 0); + o.write_shift(4, 0x33336853); + o.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000))); + while(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32)); + return o; +} + +/* [MS-XLS] 2.4.351 */ +function parse_WsBool(blob, length, opts) { + var flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0); + return { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 }; +} -/* 2.4.28 */ +/* [MS-XLS] 2.4.28 */ function parse_BoundSheet8(blob, length, opts) { var pos = blob.read_shift(4); var hidden = blob.read_shift(1) & 0x03; @@ -20105,8 +22047,20 @@ function parse_BoundSheet8(blob, length, opts) { if(name.length === 0) name = "Sheet1"; return { pos:pos, hs:hidden, dt:dt, name:name }; } +function write_BoundSheet8(data, opts) { + var w = (!opts || opts.biff >= 8 ? 2 : 1); + var o = new_buf(8 + w * data.name.length); + o.write_shift(4, data.pos); + o.write_shift(1, data.hs || 0); + o.write_shift(1, data.dt); + o.write_shift(1, data.name.length); + if(opts.biff >= 8) o.write_shift(1, 1); + o.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le'); + var out = o.slice(0, o.l); + out.l = o.l; return out; +} -/* 2.4.265 TODO */ +/* [MS-XLS] 2.4.265 TODO */ function parse_SST(blob, length) { var end = blob.l + length; var cnt = blob.read_shift(4); @@ -20118,8 +22072,18 @@ function parse_SST(blob, length) { strs.Count = cnt; strs.Unique = ucnt; return strs; } +function write_SST(sst, opts) { + var header = new_buf(8); + header.write_shift(4, sst.Count); + header.write_shift(4, sst.Unique); + var strs = []; + for(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts); + var o = bconcat([header].concat(strs)); +o.parts = [header.length].concat(strs.map(function(str) { return str.length; })); + return o; +} -/* 2.4.107 */ +/* [MS-XLS] 2.4.107 */ function parse_ExtSST(blob, length) { var extsst = {}; extsst.dsst = blob.read_shift(2); @@ -20128,8 +22092,8 @@ function parse_ExtSST(blob, length) { } -/* 2.4.221 TODO: check BIFF2-4 */ -function parse_Row(blob, length) { +/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */ +function parse_Row(blob) { var z = ({}); z.r = blob.read_shift(2); z.c = blob.read_shift(2); @@ -20146,8 +22110,8 @@ function parse_Row(blob, length) { } -/* 2.4.125 */ -function parse_ForceFullCalculation(blob, length) { +/* [MS-XLS] 2.4.125 */ +function parse_ForceFullCalculation(blob) { var header = parse_frtHeader(blob); if(header.type != 0x08A3) throw new Error("Invalid Future Record " + header.type); var fullcalc = blob.read_shift(4); @@ -20155,17 +22119,16 @@ function parse_ForceFullCalculation(blob, length) { } -var parse_CompressPictures = parsenoop2; /* 2.4.55 Not interesting */ -/* 2.4.215 rt */ -function parse_RecalcId(blob, length) { +/* [MS-XLS] 2.4.215 rt */ +function parse_RecalcId(blob) { blob.read_shift(2); return blob.read_shift(4); } -/* 2.4.87 */ +/* [MS-XLS] 2.4.87 */ function parse_DefaultRowHeight(blob, length, opts) { var f = 0; if(!(opts && opts.biff == 2)) { @@ -20179,22 +22142,55 @@ function parse_DefaultRowHeight(blob, length, opts) { return [fl, miyRw]; } -/* 2.4.345 TODO */ -function parse_Window1(blob, length) { +/* [MS-XLS] 2.4.345 TODO */ +function parse_Window1(blob) { var xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2); var flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2); var ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2); return { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur, FirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio }; } +function write_Window1() { + var o = new_buf(18); + o.write_shift(2, 0); + o.write_shift(2, 0); + o.write_shift(2, 0x7260); + o.write_shift(2, 0x44c0); + o.write_shift(2, 0x38); + o.write_shift(2, 0); + o.write_shift(2, 0); + o.write_shift(2, 1); + o.write_shift(2, 0x01f4); + return o; +} +/* [MS-XLS] 2.4.346 TODO */ +function parse_Window2(blob, length, opts) { + if(opts && opts.biff >= 2 && opts.biff < 5) return {}; + var f = blob.read_shift(2); + return { RTL: f & 0x40 }; +} +function write_Window2(view) { + var o = new_buf(18), f = 0x6b6; + if(view && view.RTL) f |= 0x40; + o.write_shift(2, f); + o.write_shift(4, 0); + o.write_shift(4, 64); + o.write_shift(4, 0); + o.write_shift(4, 0); + return o; +} + +/* [MS-XLS] 2.4.189 TODO */ +function parse_Pane(/*blob, length, opts*/) { +} -/* 2.4.122 TODO */ +/* [MS-XLS] 2.4.122 TODO */ function parse_Font(blob, length, opts) { var o = { dyHeight: blob.read_shift(2), fl: blob.read_shift(2) }; - switch(opts && opts.biff || 8) { + switch((opts && opts.biff) || 8) { case 2: break; case 3: case 4: blob.l += 2; break; default: blob.l += 10; break; @@ -20202,16 +22198,37 @@ function parse_Font(blob, length, opts) { o.name = parse_ShortXLUnicodeString(blob, 0, opts); return o; } +function write_Font(data, opts) { + var name = data.name || "Arial"; + var b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length)); + var o = new_buf(w); + o.write_shift(2, (data.sz || 12) * 20); + o.write_shift(4, 0); + o.write_shift(2, 400); + o.write_shift(4, 0); + o.write_shift(2, 0); + o.write_shift(1, name.length); + if(!b5) o.write_shift(1, 1); + o.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? "sbcs" : "utf16le")); + return o; +} -/* 2.4.149 */ -function parse_LabelSst(blob, length) { +/* [MS-XLS] 2.4.149 */ +function parse_LabelSst(blob) { var cell = parse_XLSCell(blob); cell.isst = blob.read_shift(4); return cell; } +function write_LabelSst(R, C, v, os ) { + var o = new_buf(10); + write_XLSCell(R, C, os, o); + o.write_shift(4, v); + return o; +} -/* 2.4.148 */ +/* [MS-XLS] 2.4.148 */ function parse_Label(blob, length, opts) { + if(opts.biffguess && opts.biff == 2) opts.biff = 5; var target = blob.l + length; var cell = parse_XLSCell(blob, 6); if(opts.biff == 2) blob.l++; @@ -20219,16 +22236,37 @@ function parse_Label(blob, length, opts) { cell.val = str; return cell; } +function write_Label(R, C, v, os, opts) { + var b8 = !opts || opts.biff == 8; + var o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length); + write_XLSCell(R, C, os, o); + o.write_shift(2, v.length); + if(b8) o.write_shift(1, 1); + o.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs'); + return o; +} + -/* 2.4.126 Number Formats */ +/* [MS-XLS] 2.4.126 Number Formats */ function parse_Format(blob, length, opts) { var numFmtId = blob.read_shift(2); var fmtstr = parse_XLUnicodeString2(blob, 0, opts); return [numFmtId, fmtstr]; } +function write_Format(i, f, opts, o) { + var b5 = (opts && (opts.biff == 5)); + if(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length)); + o.write_shift(2, i); + o.write_shift((b5 ? 1 : 2), f.length); + if(!b5) o.write_shift(1, 1); + o.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le')); + var out = (o.length > o.l) ? o.slice(0, o.l) : o; + if(out.l == null) out.l = out.length; + return out; +} var parse_BIFF2Format = parse_XLUnicodeString2; -/* 2.4.90 */ +/* [MS-XLS] 2.4.90 */ function parse_Dimensions(blob, length, opts) { var end = blob.l + length; var w = opts.biff == 8 || !opts.biff ? 4 : 2; @@ -20237,15 +22275,25 @@ function parse_Dimensions(blob, length, opts) { blob.l = end; return {s: {r:r, c:c}, e: {r:R, c:C}}; } +function write_Dimensions(range, opts) { + var w = opts.biff == 8 || !opts.biff ? 4 : 2; + var o = new_buf(2*w + 6); + o.write_shift(w, range.s.r); + o.write_shift(w, range.e.r + 1); + o.write_shift(2, range.s.c); + o.write_shift(2, range.e.c + 1); + o.write_shift(2, 0); + return o; +} -/* 2.4.220 */ -function parse_RK(blob, length) { +/* [MS-XLS] 2.4.220 */ +function parse_RK(blob) { var rw = blob.read_shift(2), col = blob.read_shift(2); var rkrec = parse_RkRec(blob); return {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]}; } -/* 2.4.175 */ +/* [MS-XLS] 2.4.175 */ function parse_MulRk(blob, length) { var target = blob.l + length - 2; var rw = blob.read_shift(2), col = blob.read_shift(2); @@ -20256,7 +22304,7 @@ function parse_MulRk(blob, length) { if(rkrecs.length != lastcol - col + 1) throw new Error("MulRK length mismatch"); return {r:rw, c:col, C:lastcol, rkrec:rkrecs}; } -/* 2.4.174 */ +/* [MS-XLS] 2.4.174 */ function parse_MulBlank(blob, length) { var target = blob.l + length - 2; var rw = blob.read_shift(2), col = blob.read_shift(2); @@ -20268,7 +22316,7 @@ function parse_MulBlank(blob, length) { return {r:rw, c:col, C:lastcol, ixfe:ixfes}; } -/* 2.5.20 2.5.249 TODO: interpret values here */ +/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */ function parse_CellStyleXF(blob, length, style, opts) { var o = {}; var a = blob.read_shift(4), b = blob.read_shift(4); @@ -20309,6 +22357,10 @@ function parse_CellStyleXF(blob, length, style, opts) { o.fsxButton = (d >> 14) & 0x01; return o; } +//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);} +//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);} + +/* [MS-XLS] 2.4.353 TODO: actually do this right */ function parse_XF(blob, length, opts) { var o = {}; o.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2); @@ -20317,9 +22369,28 @@ function parse_XF(blob, length, opts) { o.data = parse_CellStyleXF(blob, length, o.fStyle, opts); return o; } +function write_XF(data, ixfeP, opts, o) { + var b5 = (opts && (opts.biff == 5)); + if(!o) o = new_buf(b5 ? 16 : 20); + o.write_shift(2, 0); + if(data.style) { + o.write_shift(2, (data.numFmtId||0)); + o.write_shift(2, 0xFFF4); + } else { + o.write_shift(2, (data.numFmtId||0)); + o.write_shift(2, (ixfeP<<4)); + } + var f = 0; + if(data.numFmtId > 0 && b5) f |= 0x0400; + o.write_shift(4, f); + o.write_shift(4, 0); + if(!b5) o.write_shift(4, 0); + o.write_shift(2, 0); + return o; +} -/* 2.4.134 */ -function parse_Guts(blob, length) { +/* [MS-XLS] 2.4.134 */ +function parse_Guts(blob) { blob.l += 4; var out = [blob.read_shift(2), blob.read_shift(2)]; if(out[0] !== 0) out[0]--; @@ -20327,28 +22398,48 @@ function parse_Guts(blob, length) { if(out[0] > 7 || out[1] > 7) throw new Error("Bad Gutters: " + out.join("|")); return out; } +function write_Guts(guts) { + var o = new_buf(8); + o.write_shift(4, 0); + o.write_shift(2, guts[0] ? guts[0] + 1 : 0); + o.write_shift(2, guts[1] ? guts[1] + 1 : 0); + return o; +} -/* 2.4.24 */ +/* [MS-XLS] 2.4.24 */ function parse_BoolErr(blob, length, opts) { var cell = parse_XLSCell(blob, 6); - if(opts.biff == 2) ++blob.l; + if(opts.biff == 2 || length == 9) ++blob.l; var val = parse_Bes(blob, 2); cell.val = val; cell.t = (val === true || val === false) ? 'b' : 'e'; return cell; } +function write_BoolErr(R, C, v, os, opts, t) { + var o = new_buf(8); + write_XLSCell(R, C, os, o); + write_Bes(v, t, o); + return o; +} -/* 2.4.180 Number */ -function parse_Number(blob, length) { +/* [MS-XLS] 2.4.180 Number */ +function parse_Number(blob, length, opts) { + if(opts.biffguess && opts.biff == 2) opts.biff = 5; var cell = parse_XLSCell(blob, 6); var xnum = parse_Xnum(blob, 8); cell.val = xnum; return cell; } +function write_Number(R, C, v, os) { + var o = new_buf(14); + write_XLSCell(R, C, os, o); + write_Xnum(v, o); + return o; +} var parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136 -/* 2.4.271 */ +/* [MS-XLS] 2.4.271 */ function parse_SupBook(blob, length, opts) { var end = blob.l + length; var ctab = blob.read_shift(2); @@ -20363,7 +22454,7 @@ function parse_SupBook(blob, length, opts) { return [cch, ctab, virtPath, rgst]; } -/* 2.4.105 TODO */ +/* [MS-XLS] 2.4.105 TODO */ function parse_ExternName(blob, length, opts) { var flags = blob.read_shift(2); var body; @@ -20383,7 +22474,7 @@ function parse_ExternName(blob, length, opts) { return o; } -/* 2.4.150 TODO */ +/* [MS-XLS] 2.4.150 TODO */ var XLSLblBuiltIn = [ "_xlnm.Consolidate_Area", "_xlnm.Auto_Open", @@ -20408,14 +22499,17 @@ function parse_Lbl(blob, length, opts) { var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2); var itab = 0; if(!opts || opts.biff >= 5) { - blob.l += 2; + if(opts.biff != 5) blob.l += 2; itab = blob.read_shift(2); + if(opts.biff == 5) blob.l += 2; blob.l += 4; } var name = parse_XLUnicodeStringNoCch(blob, cch, opts); if(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)]; var npflen = target - blob.l; if(opts && opts.biff == 2) --npflen; - var rgce = target == blob.l || cce == 0 ? [] : parse_NameParsedFormula(blob, npflen, opts, cce); + /*jshint -W018 */ + var rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce); + /*jshint +W018 */ return { chKey: chKey, Name: name, @@ -20424,13 +22518,13 @@ function parse_Lbl(blob, length, opts) { }; } -/* 2.4.106 TODO: verify filename encoding */ +/* [MS-XLS] 2.4.106 TODO: verify filename encoding */ function parse_ExternSheet(blob, length, opts) { if(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts); var o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2); while(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts)); // [iSupBook, itabFirst, itabLast]; - var oo = []; + if(blob.l != target) throw new Error("Bad ExternSheet: " + blob.l + " != " + target); return o; } function parse_BIFF5ExternSheet(blob, length, opts) { @@ -20438,9 +22532,8 @@ function parse_BIFF5ExternSheet(blob, length, opts) { var o = parse_ShortXLUnicodeString(blob, length, opts); return o.charCodeAt(0) == 0x03 ? o.slice(1) : o; } -var parse_ExternCount = parseuint16; -/* 2.4.176 TODO: check older biff */ +/* [MS-XLS] 2.4.176 TODO: check older biff */ function parse_NameCmt(blob, length, opts) { if(opts.biff < 8) { blob.l += length; return; } var cchName = blob.read_shift(2); @@ -20450,16 +22543,16 @@ function parse_NameCmt(blob, length, opts) { return [name, comment]; } -/* 2.4.260 */ +/* [MS-XLS] 2.4.260 */ function parse_ShrFmla(blob, length, opts) { var ref = parse_RefU(blob, 6); blob.l++; var cUse = blob.read_shift(1); length -= 8; - return [parse_SharedParsedFormula(blob, length, opts), cUse]; + return [parse_SharedParsedFormula(blob, length, opts), cUse, ref]; } -/* 2.4.4 TODO */ +/* [MS-XLS] 2.4.4 TODO */ function parse_Array(blob, length, opts) { var ref = parse_Ref(blob, 6); /* TODO: fAlwaysCalc */ @@ -20471,15 +22564,15 @@ function parse_Array(blob, length, opts) { return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)]; } -/* 2.4.173 */ -function parse_MTRSettings(blob, length) { +/* [MS-XLS] 2.4.173 */ +function parse_MTRSettings(blob) { var fMTREnabled = blob.read_shift(4) !== 0x00; var fUserSetThreadCount = blob.read_shift(4) !== 0x00; var cUserThreadCount = blob.read_shift(4); return [fMTREnabled, fUserSetThreadCount, cUserThreadCount]; } -/* 2.5.186 TODO: BIFF5 */ +/* [MS-XLS] 2.5.186 TODO: BIFF5 */ function parse_NoteSh(blob, length, opts) { if(opts.biff < 8) return; var row = blob.read_shift(2), col = blob.read_shift(2); @@ -20489,21 +22582,27 @@ function parse_NoteSh(blob, length, opts) { return [{r:row,c:col}, stAuthor, idObj, flags]; } -/* 2.4.179 */ +/* [MS-XLS] 2.4.179 */ function parse_Note(blob, length, opts) { /* TODO: Support revisions */ return parse_NoteSh(blob, length, opts); } -/* 2.4.168 */ +/* [MS-XLS] 2.4.168 */ function parse_MergeCells(blob, length) { var merges = []; var cmcs = blob.read_shift(2); while (cmcs--) merges.push(parse_Ref8U(blob,length)); return merges; } +function write_MergeCells(merges) { + var o = new_buf(2 + merges.length * 8); + o.write_shift(2, merges.length); + for(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o); + return o; +} -/* 2.4.181 TODO: parse all the things! */ +/* [MS-XLS] 2.4.181 TODO: parse all the things! */ function parse_Obj(blob, length, opts) { if(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts); var cmo = parse_FtCmo(blob, 22); // id, ot, flags @@ -20512,14 +22611,14 @@ function parse_Obj(blob, length, opts) { } /* from older spec */ var parse_BIFF5OT = []; -parse_BIFF5OT[0x08] = function(blob, length, opts) { +parse_BIFF5OT[0x08] = function(blob, length) { var tgt = blob.l + length; blob.l += 10; // todo var cf = blob.read_shift(2); blob.l += 4; - var cbPictFmla = blob.read_shift(2); + blob.l += 2; //var cbPictFmla = blob.read_shift(2); blob.l += 2; - var grbit = blob.read_shift(2); + blob.l += 2; //var grbit = blob.read_shift(2); blob.l += 4; var cchName = blob.read_shift(1); blob.l += cchName; // TODO: stName @@ -20528,19 +22627,19 @@ parse_BIFF5OT[0x08] = function(blob, length, opts) { }; function parse_BIFF5Obj(blob, length, opts) { - var cnt = blob.read_shift(4); + blob.l += 4; //var cnt = blob.read_shift(4); var ot = blob.read_shift(2); var id = blob.read_shift(2); var grbit = blob.read_shift(2); - var colL = blob.read_shift(2); - var dxL = blob.read_shift(2); - var rwT = blob.read_shift(2); - var dyT = blob.read_shift(2); - var colR = blob.read_shift(2); - var dxR = blob.read_shift(2); - var rwB = blob.read_shift(2); - var dyB = blob.read_shift(2); - var cbMacro = blob.read_shift(2); + blob.l += 2; //var colL = blob.read_shift(2); + blob.l += 2; //var dxL = blob.read_shift(2); + blob.l += 2; //var rwT = blob.read_shift(2); + blob.l += 2; //var dyT = blob.read_shift(2); + blob.l += 2; //var colR = blob.read_shift(2); + blob.l += 2; //var dxR = blob.read_shift(2); + blob.l += 2; //var rwB = blob.read_shift(2); + blob.l += 2; //var dyB = blob.read_shift(2); + blob.l += 2; //var cbMacro = blob.read_shift(2); blob.l += 6; length -= 36; var fts = []; @@ -20548,19 +22647,19 @@ function parse_BIFF5Obj(blob, length, opts) { return { cmo: [id, ot, grbit], ft:fts }; } -/* 2.4.329 TODO: parse properly */ +/* [MS-XLS] 2.4.329 TODO: parse properly */ function parse_TxO(blob, length, opts) { var s = blob.l; var texts = ""; try { blob.l += 4; var ot = (opts.lastobj||{cmo:[0,0]}).cmo[1]; - var controlInfo; + var controlInfo; // eslint-disable-line no-unused-vars if([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6; else controlInfo = parse_ControlInfo(blob, 6, opts); var cchText = blob.read_shift(2); - var cbRuns = blob.read_shift(2); - var ifntEmpty = parse_FontIndex(blob, 2); + /*var cbRuns = */blob.read_shift(2); + /*var ifntEmpty = */parseuint16(blob, 2); var len = blob.read_shift(2); blob.l += len; //var fmla = parse_ObjFmla(blob, s + length - blob.l); @@ -20577,7 +22676,7 @@ try { } blob.l = s + length; - /* 2.5.272 TxORuns */ + /* [MS-XLS] 2.5.272 TxORuns */ // var rgTxoRuns = []; // for(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8; // var cchText2 = blob.read_shift(2); @@ -20588,50 +22687,76 @@ try { } catch(e) { blob.l = s + length; return { t: texts }; } } -/* 2.4.140 */ -var parse_HLink = function(blob, length) { +/* [MS-XLS] 2.4.140 */ +function parse_HLink(blob, length) { var ref = parse_Ref8U(blob, 8); blob.l += 16; /* CLSID */ var hlink = parse_Hyperlink(blob, length-24); return [ref, hlink]; -}; +} +function write_HLink(hl) { + var O = new_buf(24); + var ref = decode_cell(hl[0]); + O.write_shift(2, ref.r); O.write_shift(2, ref.r); + O.write_shift(2, ref.c); O.write_shift(2, ref.c); + var clsid = "d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" "); + for(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16)); + return bconcat([O, write_Hyperlink(hl[1])]); +} -/* 2.4.141 */ -var parse_HLinkTooltip = function(blob, length) { - var end = blob.l + length; + +/* [MS-XLS] 2.4.141 */ +function parse_HLinkTooltip(blob, length) { blob.read_shift(2); var ref = parse_Ref8U(blob, 8); var wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont'); wzTooltip = wzTooltip.replace(chr0,""); return [ref, wzTooltip]; -}; - -/* 2.4.63 */ -function parse_Country(blob, length) { - var o = [], d; +} +function write_HLinkTooltip(hl) { + var TT = hl[1].Tooltip; + var O = new_buf(10 + 2 * (TT.length + 1)); + O.write_shift(2, 0x0800); + var ref = decode_cell(hl[0]); + O.write_shift(2, ref.r); O.write_shift(2, ref.r); + O.write_shift(2, ref.c); O.write_shift(2, ref.c); + for(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i)); + O.write_shift(2, 0); + return O; +} + +/* [MS-XLS] 2.4.63 */ +function parse_Country(blob) { + var o = [0,0], d; d = blob.read_shift(2); o[0] = CountryEnum[d] || d; d = blob.read_shift(2); o[1] = CountryEnum[d] || d; return o; } +function write_Country(o) { + if(!o) o = new_buf(4); + o.write_shift(2, 0x01); + o.write_shift(2, 0x01); + return o; +} -/* 2.4.50 ClrtClient */ -function parse_ClrtClient(blob, length) { +/* [MS-XLS] 2.4.50 ClrtClient */ +function parse_ClrtClient(blob) { var ccv = blob.read_shift(2); var o = []; while(ccv-->0) o.push(parse_LongRGB(blob, 8)); return o; } -/* 2.4.188 */ -function parse_Palette(blob, length) { +/* [MS-XLS] 2.4.188 */ +function parse_Palette(blob) { var ccv = blob.read_shift(2); var o = []; while(ccv-->0) o.push(parse_LongRGB(blob, 8)); return o; } -/* 2.4.354 */ -function parse_XFCRC(blob, length) { +/* [MS-XLS] 2.4.354 */ +function parse_XFCRC(blob) { blob.l += 2; var o = {cxfs:0, crc:0}; o.cxfs = blob.read_shift(2); @@ -20639,7 +22764,7 @@ function parse_XFCRC(blob, length) { return o; } -/* 2.4.53 TODO: parse flags */ +/* [MS-XLS] 2.4.53 TODO: parse flags */ /* [MS-XLSB] 2.4.323 TODO: parse flags */ function parse_ColInfo(blob, length, opts) { if(!opts.cellStyles) return parsenoop(blob, length); @@ -20650,12 +22775,29 @@ function parse_ColInfo(blob, length, opts) { var ixfe = blob.read_shift(w); var flags = blob.read_shift(2); if(w == 2) blob.l += 2; - return {s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}; + var o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}); + if(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7; + return o; +} +function write_ColInfo(col, idx) { + var o = new_buf(12); + o.write_shift(2, idx); + o.write_shift(2, idx); + o.write_shift(2, col.width * 256); + o.write_shift(2, 0); + var f = 0; + if(col.hidden) f |= 1; + o.write_shift(1, f); + f = col.level || 0; + o.write_shift(1, f); + o.write_shift(2, 0); + return o; } -/* 2.4.257 */ -function parse_Setup(blob, length, opts) { +/* [MS-XLS] 2.4.257 */ +function parse_Setup(blob, length) { var o = {}; + if(length < 32) return o; blob.l += 16; o.header = parse_Xnum(blob, 8); o.footer = parse_Xnum(blob, 8); @@ -20663,7 +22805,7 @@ function parse_Setup(blob, length, opts) { return o; } -/* 2.4.261 */ +/* [MS-XLS] 2.4.261 */ function parse_ShtProps(blob, length, opts) { var def = {area:false}; if(opts.biff != 5) { blob.l += length; return def; } @@ -20672,319 +22814,19 @@ function parse_ShtProps(blob, length, opts) { return def; } -var parse_Style = parsenoop; -var parse_StyleExt = parsenoop; - -var parse_Window2 = parsenoop; - -var parse_Backup = parsebool; /* 2.4.14 */ -var parse_Blank = parse_XLSCell; /* 2.4.20 Just the cell */ -var parse_BottomMargin = parse_Xnum; /* 2.4.27 */ -var parse_BuiltInFnGroupCount = parseuint16; /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */ -var parse_CalcCount = parseuint16; /* 2.4.31 #Iterations */ -var parse_CalcDelta = parse_Xnum; /* 2.4.32 */ -var parse_CalcIter = parsebool; /* 2.4.33 1=iterative calc */ -var parse_CalcMode = parseuint16; /* 2.4.34 0=manual, 1=auto (def), 2=table */ -var parse_CalcPrecision = parsebool; /* 2.4.35 */ -var parse_CalcRefMode = parsenoop2; /* 2.4.36 */ -var parse_CalcSaveRecalc = parsebool; /* 2.4.37 */ -var parse_CodePage = parseuint16; /* 2.4.52 */ -var parse_Compat12 = parsebool; /* 2.4.54 true = no compatibility check */ -var parse_Date1904 = parsebool; /* 2.4.77 - 1=1904,0=1900 */ -var parse_DefColWidth = parseuint16; /* 2.4.89 */ -var parse_DSF = parsenoop2; /* 2.4.94 -- MUST be ignored */ -var parse_EntExU2 = parsenoop2; /* 2.4.102 -- Explicitly says to ignore */ -var parse_EOF = parsenoop2; /* 2.4.103 */ -var parse_Excel9File = parsenoop2; /* 2.4.104 -- Optional and unused */ -var parse_FeatHdr = parsenoop2; /* 2.4.112 */ -var parse_FontX = parseuint16; /* 2.4.123 */ -var parse_Footer = parse_XLHeaderFooter; /* 2.4.124 */ -var parse_GridSet = parseuint16; /* 2.4.132, =1 */ -var parse_HCenter = parsebool; /* 2.4.135 sheet centered horizontal on print */ -var parse_Header = parse_XLHeaderFooter; /* 2.4.136 */ -var parse_HideObj = parse_HideObjEnum; /* 2.4.139 */ -var parse_InterfaceEnd = parsenoop2; /* 2.4.145 -- noop */ -var parse_LeftMargin = parse_Xnum; /* 2.4.151 */ -var parse_Mms = parsenoop2; /* 2.4.169 -- Explicitly says to ignore */ -var parse_ObjProtect = parsebool; /* 2.4.183 -- must be 1 if present */ -var parse_Password = parseuint16; /* 2.4.191 */ -var parse_PrintGrid = parsebool; /* 2.4.202 */ -var parse_PrintRowCol = parsebool; /* 2.4.203 */ -var parse_PrintSize = parseuint16; /* 2.4.204 0:3 */ -var parse_Prot4Rev = parsebool; /* 2.4.205 */ -var parse_Prot4RevPass = parseuint16; /* 2.4.206 */ -var parse_Protect = parsebool; /* 2.4.207 */ -var parse_RefreshAll = parsebool; /* 2.4.217 -- must be 0 if not template */ -var parse_RightMargin = parse_Xnum; /* 2.4.219 */ -var parse_RRTabId = parseuint16a; /* 2.4.241 */ -var parse_ScenarioProtect = parsebool; /* 2.4.245 */ -var parse_Scl = parseuint16a; /* 2.4.247 num, den */ -var parse_String = parse_XLUnicodeString; /* 2.4.268 */ -var parse_SxBool = parsebool; /* 2.4.274 */ -var parse_TopMargin = parse_Xnum; /* 2.4.328 */ -var parse_UsesELFs = parsebool; /* 2.4.337 -- should be 0 */ -var parse_VCenter = parsebool; /* 2.4.342 */ -var parse_WinProtect = parsebool; /* 2.4.347 */ -var parse_WriteProtect = parsenoop; /* 2.4.350 empty record */ - - -/* ---- */ -var parse_VerticalPageBreaks = parsenoop; -var parse_HorizontalPageBreaks = parsenoop; -var parse_Selection = parsenoop; -var parse_Continue = parsenoop; -var parse_Pane = parsenoop; -var parse_Pls = parsenoop; -var parse_DCon = parsenoop; -var parse_DConRef = parsenoop; -var parse_DConName = parsenoop; -var parse_XCT = parsenoop; -var parse_CRN = parsenoop; -var parse_FileSharing = parsenoop; -var parse_Uncalced = parsenoop; -var parse_Template = parsenoop; -var parse_Intl = parsenoop; -var parse_WsBool = parsenoop; -var parse_Sort = parsenoop; -var parse_Sync = parsenoop; -var parse_LPr = parsenoop; -var parse_DxGCol = parsenoop; -var parse_FnGroupName = parsenoop; -var parse_FilterMode = parsenoop; -var parse_AutoFilterInfo = parsenoop; -var parse_AutoFilter = parsenoop; -var parse_ScenMan = parsenoop; -var parse_SCENARIO = parsenoop; -var parse_SxView = parsenoop; -var parse_Sxvd = parsenoop; -var parse_SXVI = parsenoop; -var parse_SxIvd = parsenoop; -var parse_SXLI = parsenoop; -var parse_SXPI = parsenoop; -var parse_DocRoute = parsenoop; -var parse_RecipName = parsenoop; -var parse_SXDI = parsenoop; -var parse_SXDB = parsenoop; -var parse_SXFDB = parsenoop; -var parse_SXDBB = parsenoop; -var parse_SXNum = parsenoop; -var parse_SxErr = parsenoop; -var parse_SXInt = parsenoop; -var parse_SXString = parsenoop; -var parse_SXDtr = parsenoop; -var parse_SxNil = parsenoop; -var parse_SXTbl = parsenoop; -var parse_SXTBRGIITM = parsenoop; -var parse_SxTbpg = parsenoop; -var parse_ObProj = parsenoop; -var parse_SXStreamID = parsenoop; -var parse_DBCell = parsenoop; -var parse_SXRng = parsenoop; -var parse_SxIsxoper = parsenoop; -var parse_BookBool = parsenoop; -var parse_DbOrParamQry = parsenoop; -var parse_OleObjectSize = parsenoop; -var parse_SXVS = parsenoop; -var parse_BkHim = parsenoop; -var parse_MsoDrawingGroup = parsenoop; -var parse_MsoDrawing = parsenoop; -var parse_MsoDrawingSelection = parsenoop; -var parse_PhoneticInfo = parsenoop; -var parse_SxRule = parsenoop; -var parse_SXEx = parsenoop; -var parse_SxFilt = parsenoop; -var parse_SxDXF = parsenoop; -var parse_SxItm = parsenoop; -var parse_SxName = parsenoop; -var parse_SxSelect = parsenoop; -var parse_SXPair = parsenoop; -var parse_SxFmla = parsenoop; -var parse_SxFormat = parsenoop; -var parse_SXVDEx = parsenoop; -var parse_SXFormula = parsenoop; -var parse_SXDBEx = parsenoop; -var parse_RRDInsDel = parsenoop; -var parse_RRDHead = parsenoop; -var parse_RRDChgCell = parsenoop; -var parse_RRDRenSheet = parsenoop; -var parse_RRSort = parsenoop; -var parse_RRDMove = parsenoop; -var parse_RRFormat = parsenoop; -var parse_RRAutoFmt = parsenoop; -var parse_RRInsertSh = parsenoop; -var parse_RRDMoveBegin = parsenoop; -var parse_RRDMoveEnd = parsenoop; -var parse_RRDInsDelBegin = parsenoop; -var parse_RRDInsDelEnd = parsenoop; -var parse_RRDConflict = parsenoop; -var parse_RRDDefName = parsenoop; -var parse_RRDRstEtxp = parsenoop; -var parse_LRng = parsenoop; -var parse_CUsr = parsenoop; -var parse_CbUsr = parsenoop; -var parse_UsrInfo = parsenoop; -var parse_UsrExcl = parsenoop; -var parse_FileLock = parsenoop; -var parse_RRDInfo = parsenoop; -var parse_BCUsrs = parsenoop; -var parse_UsrChk = parsenoop; -var parse_UserBView = parsenoop; -var parse_UserSViewBegin = parsenoop; // overloaded -var parse_UserSViewEnd = parsenoop; -var parse_RRDUserView = parsenoop; -var parse_Qsi = parsenoop; -var parse_CondFmt = parsenoop; -var parse_CF = parsenoop; -var parse_DVal = parsenoop; -var parse_DConBin = parsenoop; -var parse_Lel = parsenoop; -var parse_XLSCodeName = parse_XLUnicodeString; -var parse_SXFDBType = parsenoop; -var parse_ObNoMacros = parsenoop; -var parse_Dv = parsenoop; -var parse_Index = parsenoop; -var parse_Table = parsenoop; -var parse_BigName = parsenoop; -var parse_ContinueBigName = parsenoop; -var parse_WebPub = parsenoop; -var parse_QsiSXTag = parsenoop; -var parse_DBQueryExt = parsenoop; -var parse_ExtString = parsenoop; -var parse_TxtQry = parsenoop; -var parse_Qsir = parsenoop; -var parse_Qsif = parsenoop; -var parse_RRDTQSIF = parsenoop; -var parse_OleDbConn = parsenoop; -var parse_WOpt = parsenoop; -var parse_SXViewEx = parsenoop; -var parse_SXTH = parsenoop; -var parse_SXPIEx = parsenoop; -var parse_SXVDTEx = parsenoop; -var parse_SXViewEx9 = parsenoop; -var parse_ContinueFrt = parsenoop; -var parse_RealTimeData = parsenoop; -var parse_ChartFrtInfo = parsenoop; -var parse_FrtWrapper = parsenoop; -var parse_StartBlock = parsenoop; -var parse_EndBlock = parsenoop; -var parse_StartObject = parsenoop; -var parse_EndObject = parsenoop; -var parse_CatLab = parsenoop; -var parse_YMult = parsenoop; -var parse_SXViewLink = parsenoop; -var parse_PivotChartBits = parsenoop; -var parse_FrtFontList = parsenoop; -var parse_SheetExt = parsenoop; -var parse_BookExt = parsenoop; -var parse_SXAddl = parsenoop; -var parse_CrErr = parsenoop; -var parse_HFPicture = parsenoop; -var parse_Feat = parsenoop; -var parse_DataLabExt = parsenoop; -var parse_DataLabExtContents = parsenoop; -var parse_CellWatch = parsenoop; -var parse_FeatHdr11 = parsenoop; -var parse_Feature11 = parsenoop; -var parse_DropDownObjIds = parsenoop; -var parse_ContinueFrt11 = parsenoop; -var parse_DConn = parsenoop; -var parse_List12 = parsenoop; -var parse_Feature12 = parsenoop; -var parse_CondFmt12 = parsenoop; -var parse_CF12 = parsenoop; -var parse_CFEx = parsenoop; -var parse_AutoFilter12 = parsenoop; -var parse_ContinueFrt12 = parsenoop; -var parse_MDTInfo = parsenoop; -var parse_MDXStr = parsenoop; -var parse_MDXTuple = parsenoop; -var parse_MDXSet = parsenoop; -var parse_MDXProp = parsenoop; -var parse_MDXKPI = parsenoop; -var parse_MDB = parsenoop; -var parse_PLV = parsenoop; -var parse_DXF = parsenoop; -var parse_TableStyles = parsenoop; -var parse_TableStyle = parsenoop; -var parse_TableStyleElement = parsenoop; -var parse_NamePublish = parsenoop; -var parse_SortData = parsenoop; -var parse_GUIDTypeLib = parsenoop; -var parse_FnGrp12 = parsenoop; -var parse_NameFnGrp12 = parsenoop; -var parse_HeaderFooter = parsenoop; -var parse_CrtLayout12 = parsenoop; -var parse_CrtMlFrt = parsenoop; -var parse_CrtMlFrtContinue = parsenoop; -var parse_ShapePropsStream = parsenoop; -var parse_TextPropsStream = parsenoop; -var parse_RichTextStream = parsenoop; -var parse_CrtLayout12A = parsenoop; -var parse_Units = parsenoop; -var parse_Chart = parsenoop; -var parse_Series = parsenoop; -var parse_DataFormat = parsenoop; -var parse_LineFormat = parsenoop; -var parse_MarkerFormat = parsenoop; -var parse_AreaFormat = parsenoop; -var parse_PieFormat = parsenoop; -var parse_AttachedLabel = parsenoop; -var parse_SeriesText = parsenoop; -var parse_ChartFormat = parsenoop; -var parse_Legend = parsenoop; -var parse_SeriesList = parsenoop; -var parse_Bar = parsenoop; -var parse_Line = parsenoop; -var parse_Pie = parsenoop; -var parse_Area = parsenoop; -var parse_Scatter = parsenoop; -var parse_CrtLine = parsenoop; -var parse_Axis = parsenoop; -var parse_Tick = parsenoop; -var parse_ValueRange = parsenoop; -var parse_CatSerRange = parsenoop; -var parse_AxisLine = parsenoop; -var parse_CrtLink = parsenoop; -var parse_DefaultText = parsenoop; -var parse_Text = parsenoop; -var parse_ObjectLink = parsenoop; -var parse_Frame = parsenoop; -var parse_Begin = parsenoop; -var parse_End = parsenoop; -var parse_PlotArea = parsenoop; -var parse_Chart3d = parsenoop; -var parse_PicF = parsenoop; -var parse_DropBar = parsenoop; -var parse_Radar = parsenoop; -var parse_Surf = parsenoop; -var parse_RadarArea = parsenoop; -var parse_AxisParent = parsenoop; -var parse_LegendException = parsenoop; -var parse_SerToCrt = parsenoop; -var parse_AxesUsed = parsenoop; -var parse_SBaseRef = parsenoop; -var parse_SerParent = parsenoop; -var parse_SerAuxTrend = parsenoop; -var parse_IFmtRecord = parsenoop; -var parse_Pos = parsenoop; -var parse_AlRuns = parsenoop; -var parse_BRAI = parsenoop; -var parse_SerAuxErrBar = parsenoop; -var parse_SerFmt = parsenoop; -var parse_Chart3DBarShape = parsenoop; -var parse_Fbi = parsenoop; -var parse_BopPop = parsenoop; -var parse_AxcExt = parsenoop; -var parse_Dat = parsenoop; -var parse_PlotGrowth = parsenoop; -var parse_SIIndex = parsenoop; -var parse_GelFrame = parsenoop; -var parse_BopPopCustom = parsenoop; -var parse_Fbi2 = parsenoop; +/* [MS-XLS] 2.4.241 */ +function write_RRTabId(n) { + var out = new_buf(2 * n); + for(var i = 0; i < n; ++i) out.write_shift(2, i+1); + return out; +} + +var parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */ +var parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */ +var parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */ /* --- Specific to versions before BIFF8 --- */ -function parse_ImData(blob, length, opts) { - var tgt = blob.l + length; +function parse_ImData(blob) { var cf = blob.read_shift(2); var env = blob.read_shift(2); var lcb = blob.read_shift(4); @@ -20993,7 +22835,9 @@ function parse_ImData(blob, length, opts) { return o; } +/* BIFF2_??? where ??? is the name from [XLS] */ function parse_BIFF2STR(blob, length, opts) { + if(opts.biffguess && opts.biff == 5) opts.biff = 2; var cell = parse_XLSCell(blob, 6); ++blob.l; var str = parse_XLUnicodeString2(blob, length-7, opts); @@ -21002,7 +22846,7 @@ function parse_BIFF2STR(blob, length, opts) { return cell; } -function parse_BIFF2NUM(blob, length, opts) { +function parse_BIFF2NUM(blob) { var cell = parse_XLSCell(blob, 6); ++blob.l; var num = parse_Xnum(blob, 8); @@ -21010,8 +22854,14 @@ function parse_BIFF2NUM(blob, length, opts) { cell.val = num; return cell; } +function write_BIFF2NUM(r, c, val) { + var out = new_buf(15); + write_BIFF2Cell(out, r, c); + out.write_shift(8, val, 'f'); + return out; +} -function parse_BIFF2INT(blob, length) { +function parse_BIFF2INT(blob) { var cell = parse_XLSCell(blob, 6); ++blob.l; var num = blob.read_shift(2); @@ -21019,8 +22869,14 @@ function parse_BIFF2INT(blob, length) { cell.val = num; return cell; } +function write_BIFF2INT(r, c, val) { + var out = new_buf(9); + write_BIFF2Cell(out, r, c); + out.write_shift(2, val); + return out; +} -function parse_BIFF2STRING(blob, length) { +function parse_BIFF2STRING(blob) { var cch = blob.read_shift(1); if(cch === 0) { blob.l++; return ""; } return blob.read_shift(cch, 'sbcs-cont'); @@ -21084,15 +22940,32 @@ var dbf_codepage_map = { 0x4D: 936, 0x4E: 949, 0x4F: 950, 0x50: 874, 0x57: 1252, 0x58: 1252, -0x59: 1252, +0x59: 1252, 0x6C: 863, +0x86: 737, 0x87: 852, +0x88: 857, 0xCC: 1257, 0xFF: 16969 }; - +var dbf_reverse_map = evert({ +0x01: 437, 0x02: 850, +0x03: 1252, 0x04: 10000, +0x64: 852, 0x65: 866, +0x66: 865, 0x67: 861, +0x68: 895, 0x69: 620, +0x6A: 737, 0x6B: 857, +0x78: 950, 0x79: 949, +0x7A: 936, 0x7B: 932, +0x7C: 874, 0x7D: 1255, +0x7E: 1256, 0x96: 10007, +0x97: 10029, 0x98: 10006, +0xC8: 1250, 0xC9: 1251, +0xCA: 1254, 0xCB: 1253, +0x00: 20127 +}); +var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5]; /* TODO: find an actual specification */ function dbf_to_aoa(buf, opts) { var out = []; - /* TODO: browser based */ var d = (new_raw_buf(1)); switch(opts.type) { case 'base64': d = s2a(Base64.decode(buf)); break; @@ -21101,83 +22974,104 @@ function dbf_to_aoa(buf, opts) { case 'array': d = buf; break; } prep_blob(d, 0); + /* header */ var ft = d.read_shift(1); - var memo = false; - var vfp = false; + var memo = !!(ft & 0x88); + var vfp = false, l7 = false; switch(ft) { - case 0x02: case 0x03: break; - case 0x30: vfp = true; memo = true; break; - case 0x31: vfp = true; break; - case 0x83: memo = true; break; - case 0x8B: memo = true; break; - case 0xF5: memo = true; break; + case 0x02: break; // dBASE II + case 0x03: break; // dBASE III + case 0x30: vfp = true; memo = true; break; // VFP + case 0x31: vfp = true; memo = true; break; // VFP with autoincrement + // 0x43 dBASE IV SQL table files + // 0x63 dBASE IV SQL system files + case 0x83: break; // dBASE III with memo + case 0x8B: break; // dBASE IV with memo + case 0x8C: l7 = true; break; // dBASE Level 7 with memo + // case 0xCB dBASE IV SQL table files with memo + case 0xF5: break; // FoxPro 2.x with memo + // case 0xFB FoxBASE default: throw new Error("DBF Unsupported Version: " + ft.toString(16)); } - var filedate = new Date(), nrow = 0, fpos = 0; + + var nrow = 0, fpos = 0x0209; if(ft == 0x02) nrow = d.read_shift(2); - filedate = new Date(d.read_shift(1) + 1900, d.read_shift(1) - 1, d.read_shift(1)); + d.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD if(ft != 0x02) nrow = d.read_shift(4); - if(ft != 0x02) fpos = d.read_shift(2); - var rlen = d.read_shift(2); - - var flags = 0, current_cp = 1252; - if(ft != 0x02) { - d.l+=16; - flags = d.read_shift(1); - //if(memo && ((flags & 0x02) === 0)) throw new Error("DBF Flags " + flags.toString(16) + " ft " + ft.toString(16)); - - /* codepage present in FoxPro */ - if(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]]; - d.l+=1; - - d.l+=2; - } - var fields = [], field = {}; - var hend = fpos - 10 - (vfp ? 264 : 0); - while(ft == 0x02 ? d.l < d.length && d[d.l] != 0x0d: d.l < hend) { - field = {}; - field.name = cptable.utils.decode(current_cp, d.slice(d.l, d.l+10)).replace(/[\u0000\r\n].*$/g,""); - d.l += 11; + if(nrow > 1048576) nrow = 1e6; + + if(ft != 0x02) fpos = d.read_shift(2); // header length + var rlen = d.read_shift(2); // record length + + var /*flags = 0,*/ current_cp = opts.codepage || 1252; + if(ft != 0x02) { // 20 reserved bytes + d.l+=16; + /*flags = */d.read_shift(1); + //if(memo && ((flags & 0x02) === 0)) throw new Error("DBF Flags " + flags.toString(16) + " ft " + ft.toString(16)); + + /* codepage present in FoxPro and dBASE Level 7 */ + if(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]]; + d.l+=1; + + d.l+=2; + } + if(l7) d.l += 36; // Level 7: 32 byte "Language driver name", 4 byte reserved + +var fields = [], field = ({}); + var hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0)))); + var ww = l7 ? 32 : 11; + while(d.l < hend && d[d.l] != 0x0d) { + field = ({}); + field.name = cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)).replace(/[\u0000\r\n].*$/g,""); + d.l += ww; field.type = String.fromCharCode(d.read_shift(1)); - if(ft != 0x02) field.offset = d.read_shift(4); + if(ft != 0x02 && !l7) field.offset = d.read_shift(4); field.len = d.read_shift(1); if(ft == 0x02) field.offset = d.read_shift(2); field.dec = d.read_shift(1); if(field.name.length) fields.push(field); - if(ft != 0x02) d.l += 14; + if(ft != 0x02) d.l += l7 ? 13 : 14; switch(field.type) { - // case 'B': break; // Binary - case 'C': break; // character - case 'D': break; // date - case 'F': break; // floating point - // case 'G': break; // General - case 'I': break; // long - case 'L': break; // boolean - case 'M': break; // memo - case 'N': break; // number - // case 'O': break; // double - // case 'P': break; // Picture - case 'T': break; // datetime - case 'Y': break; // currency - case '0': break; // null ? - case '+': break; // autoincrement - case '@': break; // timestamp + case 'B': // Double (VFP) / Binary (dBASE L7) + if((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type); + break; + case 'G': // General (FoxPro and dBASE L7) + case 'P': // Picture (FoxPro and dBASE L7) + if(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type); + break; + case '+': // Autoincrement (dBASE L7 only) + case '0': // _NullFlags (VFP only) + case '@': // Timestamp (dBASE L7 only) + case 'C': // Character (dBASE II) + case 'D': // Date (dBASE III) + case 'F': // Float (dBASE IV) + case 'I': // Long (VFP and dBASE L7) + case 'L': // Logical (dBASE II) + case 'M': // Memo (dBASE III) + case 'N': // Number (dBASE II) + case 'O': // Double (dBASE L7 only) + case 'T': // Datetime (VFP only) + case 'Y': // Currency (VFP only) + break; default: throw new Error('Unknown Field Type: ' + field.type); } } + if(d[d.l] !== 0x0D) d.l = fpos-1; - else if(ft == 0x02) d.l = 0x209; - if(ft != 0x02) { - if(d.read_shift(1) !== 0x0D) throw new Error("DBF Terminator not found " + d.l + " " + d[d.l]); - d.l = fpos; - } + if(d.read_shift(1) !== 0x0D) throw new Error("DBF Terminator not found " + d.l + " " + d[d.l]); + d.l = fpos; + /* data */ var R = 0, C = 0; out[0] = []; for(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name; while(nrow-- > 0) { - if(d[d.l] === 0x2A) { d.l+=rlen; continue; } + if(d[d.l] === 0x2A) { + // TODO: record marked as deleted -- create a hidden row? + d.l+=rlen; + continue; + } ++d.l; out[++R] = []; C = 0; for(C = 0; C != fields.length; ++C) { @@ -21186,32 +23080,39 @@ function dbf_to_aoa(buf, opts) { var s = cptable.utils.decode(current_cp, dd); switch(fields[C].type) { case 'C': - out[R][C] = cptable.utils.decode(current_cp, dd); - out[R][C] = out[R][C].trim(); + // NOTE: it is conventional to write ' / / ' for empty dates + if(s.trim().length) out[R][C] = s.replace(/\s+$/,""); break; case 'D': - if(s.length === 8) out[R][C] = new Date(+s.substr(0,4), +s.substr(4,2)-1, +s.substr(6,2)); + if(s.length === 8) out[R][C] = new Date(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8)); else out[R][C] = s; break; case 'F': out[R][C] = parseFloat(s.trim()); break; - case 'I': out[R][C] = dd.read_shift(4, 'i'); break; - case 'L': switch(s.toUpperCase()) { + case '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break; + case 'L': switch(s.trim().toUpperCase()) { case 'Y': case 'T': out[R][C] = true; break; case 'N': case 'F': out[R][C] = false; break; - case ' ': case '?': out[R][C] = false; break; /* NOTE: technically unitialized */ + case '': case '?': break; default: throw new Error("DBF Unrecognized L:|" + s + "|"); } break; case 'M': /* TODO: handle memo files */ if(!memo) throw new Error("DBF Unexpected MEMO for type " + ft.toString(16)); - out[R][C] = "##MEMO##" + dd.read_shift(4); + out[R][C] = "##MEMO##" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4)); + break; + case 'N': + s = s.replace(/\u0000/g,"").trim(); + // NOTE: dBASE II interprets " . " as 0 + if(s && s != ".") out[R][C] = +s || 0; break; + case '@': + // NOTE: dBASE specs appear to be incorrect + out[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400); break; - case 'N': out[R][C] = +s.replace(/\u0000/g,"").trim(); break; - case 'T': - var day = dd.read_shift(4), ms = dd.read_shift(4); - throw new Error(day + " | " + ms); - //out[R][C] = new Date(); // TODO - //break; - case 'Y': out[R][C] = dd.read(4,'i')/1e4; break; + case 'T': out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4)); break; + case 'Y': out[R][C] = dd.read_shift(4,'i')/1e4; break; + case 'O': out[R][C] = -dd.read_shift(-8, 'f'); break; + case 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; } + /* falls through */ + case 'G': case 'P': dd.l += fields[C].len; break; case '0': if(fields[C].name === '_NullFlags') break; /* falls through */ @@ -21220,6 +23121,7 @@ function dbf_to_aoa(buf, opts) { } } if(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error("DBF EOF Marker missing " + (d.l-1) + " of " + d.length + " " + d[d.l-1].toString(16)); + if(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows); return out; } @@ -21234,19 +23136,143 @@ function dbf_to_workbook(buf, opts) { catch(e) { if(opts && opts.WTF) throw e; } return ({SheetNames:[],Sheets:{}}); } + +var _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 }; +function sheet_to_dbf(ws, opts) { + var o = opts || {}; + if(+o.codepage >= 0) set_cp(+o.codepage); + if(o.type == "string") throw new Error("Cannot write DBF to JS string"); + var ba = buf_array(); + var aoa = sheet_to_json(ws, {header:1, raw:true, cellDates:true}); + var headers = aoa[0], data = aoa.slice(1); + var i = 0, j = 0, hcnt = 0, rlen = 1; + for(i = 0; i < headers.length; ++i) { + if(i == null) continue; + ++hcnt; + if(typeof headers[i] === 'number') headers[i] = headers[i].toString(10); + if(typeof headers[i] !== 'string') throw new Error("DBF Invalid column name " + headers[i] + " |" + (typeof headers[i]) + "|"); + if(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j) + if(headers.indexOf(headers[i] + "_" + j) == -1) { headers[i] += "_" + j; break; } + } + var range = safe_decode_range(ws['!ref']); + var coltypes = []; + for(i = 0; i <= range.e.c - range.s.c; ++i) { + var col = []; + for(j=0; j < data.length; ++j) { + if(data[j][i] != null) col.push(data[j][i]); + } + if(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; } + var guess = '', _guess = ''; + for(j = 0; j < col.length; ++j) { + switch(typeof col[j]) { + /* TODO: check if L2 compat is desired */ + case 'number': _guess = 'B'; break; + case 'string': _guess = 'C'; break; + case 'boolean': _guess = 'L'; break; + case 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break; + default: _guess = 'C'; + } + guess = guess && guess != _guess ? 'C' : _guess; + if(guess == 'C') break; + } + rlen += _RLEN[guess] || 0; + coltypes[i] = guess; + } + + var h = ba.next(32); + h.write_shift(4, 0x13021130); + h.write_shift(4, data.length); + h.write_shift(2, 296 + 32 * hcnt); + h.write_shift(2, rlen); + for(i=0; i < 4; ++i) h.write_shift(4, 0); + h.write_shift(4, 0x00000000 | ((+dbf_reverse_map[current_ansi] || 0x03)<<8)); + + for(i = 0, j = 0; i < headers.length; ++i) { + if(headers[i] == null) continue; + var hf = ba.next(32); + var _f = (headers[i].slice(-10) + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00").slice(0, 11); + hf.write_shift(1, _f, "sbcs"); + hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], "sbcs"); + hf.write_shift(4, j); + hf.write_shift(1, _RLEN[coltypes[i]] || 0); + hf.write_shift(1, 0); + hf.write_shift(1, 0x02); + hf.write_shift(4, 0); + hf.write_shift(1, 0); + hf.write_shift(4, 0); + hf.write_shift(4, 0); + j += _RLEN[coltypes[i]] || 0; + } + + var hb = ba.next(264); + hb.write_shift(4, 0x0000000D); + for(i=0; i < 65;++i) hb.write_shift(4, 0x00000000); + for(i=0; i < data.length; ++i) { + var rout = ba.next(rlen); + rout.write_shift(1, 0); + for(j=0; j":190, "?":191, "{":223 + }); + var sylk_char_regex = new RegExp("\u001BN(" + keys(sylk_escapes).join("|").replace(/\|\|\|/, "|\\||").replace(/([?()+])/g,"\\$1") + "|\\|)", "gm"); + var sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == "number" ? _getansi(o) : o; }; + var decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); }; + sylk_escapes["|"] = 254; /* TODO: find an actual specification */ function sylk_to_aoa(d, opts) { switch(opts.type) { case 'base64': return sylk_to_aoa_str(Base64.decode(d), opts); case 'binary': return sylk_to_aoa_str(d, opts); - case 'buffer': return sylk_to_aoa_str(d.toString('binary'), opts); + case 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts); case 'array': return sylk_to_aoa_str(cc2str(d), opts); } throw new Error("Unrecognized type " + opts.type); @@ -21257,78 +23283,103 @@ var SYLK = (function() { var next_cell_format = null; var sht = {}, rowinfo = [], colinfo = [], cw = []; var Mval = 0, j; + if(+opts.codepage >= 0) set_cp(+opts.codepage); for (; ri !== records.length; ++ri) { Mval = 0; - var rstr=records[ri].trim(); - var record=rstr.replace(/;;/g, "\u0001").split(";").map(function(x) { return x.replace(/\u0001/g, ";"); }); + var rstr=records[ri].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn); + var record=rstr.replace(/;;/g, "\u0000").split(";").map(function(x) { return x.replace(/\u0000/g, ";"); }); var RT=record[0], val; if(rstr.length > 0) switch(RT) { case 'ID': break; /* header */ case 'E': break; /* EOF */ case 'B': break; /* dimensions */ case 'O': break; /* options? */ + case 'W': break; /* window? */ case 'P': if(record[1].charAt(0) == 'P') - formats.push(rstr.substr(3).replace(/;;/g, ";")); + formats.push(rstr.slice(3).replace(/;;/g, ";")); break; case 'C': + var C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1; for(rj=1; rj -1 && arr[_R][_C]; + if(!shrbase || !shrbase[1]) throw new Error("SYLK shared formula cannot find base"); + arr[R][C][1] = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C}); + } + break; case 'F': var F_seen = 0; for(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); } - else if(Mval == 0) rowinfo[R].hidden = true; + else if(Mval === 0) rowinfo[R].hidden = true; break; default: if(opts && opts.WTF) throw new Error("SYLK bad record " + rstr); } @@ -21338,6 +23389,7 @@ var SYLK = (function() { } if(rowinfo.length > 0) sht['!rows'] = rowinfo; if(colinfo.length > 0) sht['!cols'] = colinfo; + if(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows); return [arr, sht]; } @@ -21351,7 +23403,7 @@ var SYLK = (function() { function sylk_to_workbook(d, opts) { return sheet_to_workbook(sylk_to_sheet(d, opts), opts); } - function write_ws_cell_sylk(cell, ws, R, C, opts) { + function write_ws_cell_sylk(cell, ws, R, C) { var o = "C;Y" + (R+1) + ";X" + (C+1) + ";K"; switch(cell.t) { case 'n': @@ -21370,8 +23422,8 @@ var SYLK = (function() { var rec = "F;W" + (i+1) + " " + (i+1) + " "; if(col.hidden) rec += "0"; else { - if(typeof col.width == 'number') col.wpx = width2px(col.width); - if(typeof col.wpx == 'number') col.wch = px2char(col.wpx); + if(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width); + if(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx); if(typeof col.wch == 'number') rec += Math.round(col.wch); } if(rec.charAt(rec.length - 1) != " ") out.push(rec); @@ -21390,7 +23442,7 @@ var SYLK = (function() { function sheet_to_sylk(ws, opts) { var preamble = ["ID;PWXL;N;E"], o = []; - var r = decode_range(ws['!ref']), cell; + var r = safe_decode_range(ws['!ref']), cell; var dense = Array.isArray(ws); var RS = "\r\n"; @@ -21404,7 +23456,7 @@ var SYLK = (function() { for(var C = r.s.c; C <= r.e.c; ++C) { var coord = encode_cell({r:R,c:C}); cell = dense ? (ws[R]||[])[C]: ws[coord]; - if(!cell || cell.v == null && (!cell.f || cell.F)) continue; + if(!cell || (cell.v == null && (!cell.f || cell.F))) continue; o.push(write_ws_cell_sylk(cell, ws, R, C, opts)); } } @@ -21423,7 +23475,7 @@ var DIF = (function() { switch(opts.type) { case 'base64': return dif_to_aoa_str(Base64.decode(d), opts); case 'binary': return dif_to_aoa_str(d, opts); - case 'buffer': return dif_to_aoa_str(d.toString('binary'), opts); + case 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts); case 'array': return dif_to_aoa_str(cc2str(d), opts); } throw new Error("Unrecognized type " + opts.type); @@ -21436,7 +23488,9 @@ var DIF = (function() { var metadata = records[ri].trim().split(","); var type = metadata[0], value = metadata[1]; ++ri; - var data = records[ri].trim(); + var data = records[ri] || ""; + while(((data.match(/["]/g)||[]).length & 1) && ri < records.length - 1) data += "\n" + records[++ri]; + data = data.trim(); switch (+type) { case -1: if (data === 'BOT') { arr[++R] = []; C = 0; continue; } @@ -21445,17 +23499,20 @@ var DIF = (function() { case 0: if(data === 'TRUE') arr[R][C] = true; else if(data === 'FALSE') arr[R][C] = false; - else if(+value == +value) arr[R][C] = +value; + else if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value); else if(!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value); else arr[R][C] = value; ++C; break; case 1: - data = data.substr(1,data.length-2); + data = data.slice(1,data.length-1); + data = data.replace(/""/g, '"'); + if(DIF_XL && data && data.match(/^=".*"$/)) data = data.slice(2, -1); arr[R][C++] = data !== '' ? data : null; break; } if (data === 'EOD') break; } + if(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows); return arr; } @@ -21472,9 +23529,9 @@ var DIF = (function() { o.push(type + "," + v); o.push(type == 1 ? '"' + s.replace(/"/g,'""') + '"' : s); }; - return function sheet_to_dif(ws, opts) { + return function sheet_to_dif(ws) { var o = []; - var r = decode_range(ws['!ref']), cell; + var r = safe_decode_range(ws['!ref']), cell; var dense = Array.isArray(ws); push_field(o, "TABLE", 0, 1, "sheetjs"); push_field(o, "VECTORS", 0, r.e.r - r.s.r + 1,""); @@ -21525,13 +23582,113 @@ var DIF = (function() { }; })(); +var ETH = (function() { + function decode(s) { return s.replace(/\\b/g,"\\").replace(/\\c/g,":").replace(/\\n/g,"\n"); } + function encode(s) { return s.replace(/\\/g, "\\b").replace(/:/g, "\\c").replace(/\n/g,"\\n"); } + + function eth_to_aoa(str, opts) { + var records = str.split('\n'), R = -1, C = -1, ri = 0, arr = []; + for (; ri !== records.length; ++ri) { + var record = records[ri].trim().split(":"); + if(record[0] !== 'cell') continue; + var addr = decode_cell(record[1]); + if(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = []; + R = addr.r; C = addr.c; + switch(record[2]) { + case 't': arr[R][C] = decode(record[3]); break; + case 'v': arr[R][C] = +record[3]; break; + case 'vtf': var _f = record[record.length - 1]; + /* falls through */ + case 'vtc': + switch(record[3]) { + case 'nl': arr[R][C] = +record[4] ? true : false; break; + default: arr[R][C] = +record[4]; break; + } + if(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f]; + } + } + if(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows); + return arr; + } + + function eth_to_sheet(d, opts) { return aoa_to_sheet(eth_to_aoa(d, opts), opts); } + function eth_to_workbook(d, opts) { return sheet_to_workbook(eth_to_sheet(d, opts), opts); } + + var header = [ + "socialcalc:version:1.5", + "MIME-Version: 1.0", + "Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave" + ].join("\n"); + + var sep = [ + "--SocialCalcSpreadsheetControlSave", + "Content-type: text/plain; charset=UTF-8" + ].join("\n") + "\n"; + + /* TODO: the other parts */ + var meta = [ + "# SocialCalc Spreadsheet Control Save", + "part:sheet" + ].join("\n"); + + var end = "--SocialCalcSpreadsheetControlSave--"; + + function sheet_to_eth_data(ws) { + if(!ws || !ws['!ref']) return ""; + var o = [], oo = [], cell, coord = ""; + var r = decode_range(ws['!ref']); + var dense = Array.isArray(ws); + for(var R = r.s.r; R <= r.e.r; ++R) { + for(var C = r.s.c; C <= r.e.c; ++C) { + coord = encode_cell({r:R,c:C}); + cell = dense ? (ws[R]||[])[C] : ws[coord]; + if(!cell || cell.v == null || cell.t === 'z') continue; + oo = ["cell", coord, 't']; + switch(cell.t) { + case 's': case 'str': oo.push(encode(cell.v)); break; + case 'n': + if(!cell.f) { oo[2]='v'; oo[3]=cell.v; } + else { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); } + break; + case 'b': + oo[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?"1":"0"; + oo[5] = encode(cell.f||(cell.v?'TRUE':'FALSE')); + break; + case 'd': + var t = datenum(parseDate(cell.v)); + oo[2] = 'vtc'; oo[3] = 'nd'; oo[4] = ""+t; + oo[5] = cell.w || SSF.format(cell.z || SSF._table[14], t); + break; + case 'e': continue; + } + o.push(oo.join(":")); + } + } + o.push("sheet:c:" + (r.e.c-r.s.c+1) + ":r:" + (r.e.r-r.s.r+1) + ":tvf:1"); + o.push("valueformat:1:text-wiki"); + //o.push("copiedfrom:" + ws['!ref']); // clipboard only + return o.join("\n"); + } + + function sheet_to_eth(ws) { + return [header, sep, meta, sep, sheet_to_eth_data(ws), end].join("\n"); + // return ["version:1.5", sheet_to_eth_data(ws)].join("\n"); // clipboard form + } + + return { + to_workbook: eth_to_workbook, + to_sheet: eth_to_sheet, + from_sheet: sheet_to_eth + }; +})(); + var PRN = (function() { function set_text_arr(data, arr, R, C, o) { if(o.raw) arr[R][C] = data; + else if(data === ""){/* empty */} else if(data === 'TRUE') arr[R][C] = true; else if(data === 'FALSE') arr[R][C] = false; - else if(data === ""){/* empty */} - else if(+data == +data) arr[R][C] = +data; + else if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data); else if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data); else arr[R][C] = data; } @@ -21558,9 +23715,50 @@ var PRN = (function() { for(C = 1; C <= (lines[R].length - start)/10 + 1; ++C) set_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o); } + if(o.sheetRows) arr = arr.slice(0, o.sheetRows); return arr; } + // List of accepted CSV separators + var guess_seps = { +0x2C: ',', +0x09: "\t", +0x3B: ';', +0x7C: '|' + }; + + // CSV separator weights to be used in case of equal numbers + var guess_sep_weights = { +0x2C: 3, +0x09: 2, +0x3B: 1, +0x7C: 0 + }; + + function guess_sep(str) { + var cnt = {}, instr = false, end = 0, cc = 0; + for(;end < str.length;++end) { + if((cc=str.charCodeAt(end)) == 0x22) instr = !instr; + else if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1; + } + + cc = []; + for(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) { + cc.push([ cnt[end], end ]); + } + + if ( !cc.length ) { + cnt = guess_sep_weights; + for(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) { + cc.push([ cnt[end], end ]); + } + } + + cc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; }); + + return guess_seps[cc.pop()[1]] || 0x2C; + } + function dsv_to_sheet_str(str, opts) { var o = opts || {}; var sep = ""; @@ -21568,43 +23766,60 @@ var PRN = (function() { var ws = o.dense ? ([]) : ({}); var range = ({s: {c:0, r:0}, e: {c:0, r:0}}); - /* known sep */ - if(str.substr(0,4) == "sep=" && str.charCodeAt(5) == 10) { sep = str.charAt(4); str = str.substr(6); } - else if(str.substr(0,1024).indexOf("\t") == -1) sep = ","; else sep = "\t"; + if(str.slice(0,4) == "sep=") { + // If the line ends in \r\n + if(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) { + sep = str.charAt(4); str = str.slice(7); + } + // If line ends in \r OR \n + else if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) { + sep = str.charAt(4); str = str.slice(6); + } + else sep = guess_sep(str.slice(0,1024)); + } + else if(o && o.FS) sep = o.FS; + else sep = guess_sep(str.slice(0,1024)); var R = 0, C = 0, v = 0; - var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0; + var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0); str = str.replace(/\r\n/mg, "\n"); var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null; function finish_cell() { var s = str.slice(start, end); var cell = ({}); - if(o.raw) { cell.t = 's'; cell.v = s; } - else if(s.charCodeAt(0) == 0x3D) { cell.t = 'n'; cell.f = s.substr(1); } + if(s.charAt(0) == '"' && s.charAt(s.length - 1) == '"') s = s.slice(1,-1).replace(/""/g,'"'); + if(s.length === 0) cell.t = 'z'; + else if(o.raw) { cell.t = 's'; cell.v = s; } + else if(s.trim().length === 0) { cell.t = 's'; cell.v = s; } + else if(s.charCodeAt(0) == 0x3D) { + if(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/""/g,'"'); } + else if(fuzzyfmla(s)) { cell.t = 'n'; cell.f = s.slice(1); } + else { cell.t = 's'; cell.v = s; } } else if(s == "TRUE") { cell.t = 'b'; cell.v = true; } else if(s == "FALSE") { cell.t = 'b'; cell.v = false; } - else if(!isNaN(v = +s)) { cell.t = 'n'; cell.w = s; cell.v = v; } + else if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; if(o.cellText !== false) cell.w = s; cell.v = v; } else if(!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) { cell.z = o.dateNF || SSF._table[14]; var k = 0; if(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; } if(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s, k); } else { cell.t = 'n'; cell.v = datenum(parseDate(s, k)); } - cell.w = SSF.format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v); + if(o.cellText !== false) cell.w = SSF.format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v); + if(!o.cellNF) delete cell.z; } else { cell.t = 's'; - if(s.charAt(0) == '"' && s.charAt(s.length - 1) == '"') s = s.slice(1,-1).replace(/""/g,'"'); cell.v = s; } - if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; } + if(cell.t == 'z'){} + else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; } else ws[encode_cell({c:C,r:R})] = cell; - start = end+1; + start = end+1; startcc = str.charCodeAt(start); if(range.e.c < C) range.e.c = C; if(range.e.r < R) range.e.r = R; - if(cc == sepcc) ++C; else { C = 0; ++R; } + if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; } } - for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) { - case 0x22: instr = !instr; break; - case sepcc: case 0x0a: case 0x0d: if(!instr) finish_cell(); break; + outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) { + case 0x22: if(startcc === 0x22) instr = !instr; break; + case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break; default: break; } if(end - start > 0) finish_cell(); @@ -21614,29 +23829,39 @@ var PRN = (function() { } function prn_to_sheet_str(str, opts) { - if(str.substr(0,4) == "sep=") return dsv_to_sheet_str(str, opts); - if(str.indexOf("\t") >= 0 || str.indexOf(",") >= 0) return dsv_to_sheet_str(str, opts); + if(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts); + if(opts.FS) return dsv_to_sheet_str(str, opts); + if(str.slice(0,4) == "sep=") return dsv_to_sheet_str(str, opts); + if(str.indexOf("\t") >= 0 || str.indexOf(",") >= 0 || str.indexOf(";") >= 0) return dsv_to_sheet_str(str, opts); return aoa_to_sheet(prn_to_aoa_str(str, opts), opts); } function prn_to_sheet(d, opts) { - var str = "", bytes = firstbyte(d, opts); + var str = "", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts); switch(opts.type) { case 'base64': str = Base64.decode(d); break; case 'binary': str = d; break; - case 'buffer': str = d.toString('binary'); break; + case 'buffer': + if(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf + else if(opts.codepage && typeof cptable !== 'undefined') str = cptable.utils.decode(opts.codepage, d); + else str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d); + break; case 'array': str = cc2str(d); break; + case 'string': str = d; break; default: throw new Error("Unrecognized type " + opts.type); } - if(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str); + if(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3)); + else if(opts.type != 'string' && opts.codepage == 65001) str = utf8read(str); + else if((opts.type == 'binary') && typeof cptable !== 'undefined' && opts.codepage) str = cptable.utils.decode(opts.codepage, cptable.utils.encode(28591,str)); + if(str.slice(0,19) == "socialcalc:version:") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts); return prn_to_sheet_str(str, opts); } function prn_to_workbook(d, opts) { return sheet_to_workbook(prn_to_sheet(d, opts), opts); } - function sheet_to_prn(ws, opts) { + function sheet_to_prn(ws) { var o = []; - var r = decode_range(ws['!ref']), cell; + var r = safe_decode_range(ws['!ref']), cell; var dense = Array.isArray(ws); for(var R = r.s.r; R <= r.e.r; ++R) { var oo = []; @@ -21644,9 +23869,9 @@ var PRN = (function() { var coord = encode_cell({r:R,c:C}); cell = dense ? (ws[R]||[])[C] : ws[coord]; if(!cell || cell.v == null) { oo.push(" "); continue; } - var w = (cell.w || (format_cell(cell), cell.w) || "").substr(0,10); + var w = (cell.w || (format_cell(cell), cell.w) || "").slice(0,10); while(w.length < 10) w += " "; - oo.push(w + (C == 0 ? " " : "")); + oo.push(w + (C === 0 ? " " : "")); } o.push(oo.join("")); } @@ -21674,19 +23899,19 @@ function read_wb_ID(d, opts) { } } -var WK_ = (function() { +var WK_ = (function() { function lotushopper(data, cb, opts) { if(!data) return; prep_blob(data, data.l || 0); var Enum = opts.Enum || WK1Enum; while(data.l < data.length) { var RT = data.read_shift(2); - var R = Enum[RT] || Enum[0xFF]; + var R = Enum[RT] || Enum[0xFFFF]; var length = data.read_shift(2); var tgt = data.l + length; - var d = R.f(data, length, opts); + var d = R.f && R.f(data, length, opts); data.l = tgt; - if(cb(d, R.n, RT)) return; + if(cb(d, R, RT)) return; } } @@ -21700,46 +23925,77 @@ var WK_ = (function() { throw "Unsupported type " + opts.type; } - function lotus_to_workbook_buf(d,opts) { + function lotus_to_workbook_buf(d, opts) { if(!d) return d; var o = opts || {}; if(DENSE != null && o.dense == null) o.dense = DENSE; - var s = ((o.dense ? [] : {})), n = "Sheet1", sidx = 0; - var sheets = {}, snames = [n]; + var s = ((o.dense ? [] : {})), n = "Sheet1", next_n = "", sidx = 0; + var sheets = {}, snames = [], realnames = []; var refguess = {s: {r:0, c:0}, e: {r:0, c:0} }; + var sheetRows = o.sheetRows || 0; + + if(d[2] == 0x00) { + if(d[3] == 0x08 || d[3] == 0x09) { + if(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error("Unsupported Works 3 for Mac file"); + } + } - if(d[2] == 0x02) o.Enum = WK1Enum; - else if(d[2] == 0x1a) o.Enum = WK3Enum; - else if(d[2] == 0x0e) { o.Enum = WK3Enum; o.qpro = true; d.l = 0; } - else throw new Error("Unrecognized LOTUS BOF " + d[2]); - lotushopper(d, function(val, Rn, RT) { - if(d[2] == 0x02) switch(RT) { - case 0x00: + if(d[2] == 0x02) { + o.Enum = WK1Enum; + lotushopper(d, function(val, R, RT) { switch(RT) { + case 0x00: /* BOF */ o.vers = val; if(val >= 0x1000) o.qpro = true; break; case 0x06: refguess = val; break; /* RANGE */ + case 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */ + case 0xDE: next_n = val; break; /* SHEETNAMELP */ case 0x0F: /* LABEL */ - if(!o.qpro) val[1].v = val[1].v.substr(1); + case 0x33: /* STRING */ + if(!o.qpro) val[1].v = val[1].v.slice(1); /* falls through */ case 0x0D: /* INTEGER */ case 0x0E: /* NUMBER */ case 0x10: /* FORMULA */ - case 0x33: /* STRING */ /* TODO: actual translation of the format code */ if(RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) { val[1].z = o.dateNF || SSF._table[14]; if(o.cellDates) { val[1].t = 'd'; val[1].v = numdate(val[1].v); } } + + if(o.qpro) { + if(val[3] > sidx) { + s["!ref"] = encode_range(refguess); + sheets[n] = s; + snames.push(n); + s = (o.dense ? [] : {}); + refguess = {s: {r:0, c:0}, e: {r:0, c:0} }; + sidx = val[3]; n = next_n || "Sheet" + (sidx + 1); next_n = ""; + } + } + + var tmpcell = o.dense ? (s[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])]; + if(tmpcell) { + tmpcell.t = val[1].t; tmpcell.v = val[1].v; + if(val[1].z != null) tmpcell.z = val[1].z; + if(val[1].f != null) tmpcell.f = val[1].f; + break; + } if(o.dense) { if(!s[val[0].r]) s[val[0].r] = []; s[val[0].r][val[0].c] = val[1]; } else s[encode_cell(val[0])] = val[1]; break; - } else switch(RT) { + default: + }}, o); + } else if(d[2] == 0x1A || d[2] == 0x0E) { + o.Enum = WK3Enum; + if(d[2] == 0x0E) { o.qpro = true; d.l = 0; } + lotushopper(d, function(val, R, RT) { switch(RT) { + case 0xCC: n = val; break; /* SHEETNAMECS */ case 0x16: /* LABEL16 */ - val[1].v = val[1].v.substr(1); + val[1].v = val[1].v.slice(1); /* falls through */ case 0x17: /* NUMBER17 */ case 0x18: /* NUMBER18 */ @@ -21750,39 +24006,188 @@ var WK_ = (function() { if(val[3] > sidx) { s["!ref"] = encode_range(refguess); sheets[n] = s; + snames.push(n); s = (o.dense ? [] : {}); refguess = {s: {r:0, c:0}, e: {r:0, c:0} }; sidx = val[3]; n = "Sheet" + (sidx + 1); - snames.push(n); } - s[encode_cell(val[0])] = val[1]; + if(sheetRows > 0 && val[0].r >= sheetRows) break; + if(o.dense) { + if(!s[val[0].r]) s[val[0].r] = []; + s[val[0].r][val[0].c] = val[1]; + } else s[encode_cell(val[0])] = val[1]; if(refguess.e.c < val[0].c) refguess.e.c = val[0].c; if(refguess.e.r < val[0].r) refguess.e.r = val[0].r; break; + case 0x1B: /* XFORMAT */ + if(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1]; + break; + case 0x0601: /* SHEETINFOQP */ + realnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break; default: break; + }}, o); + } else throw new Error("Unrecognized LOTUS BOF " + d[2]); + s["!ref"] = encode_range(refguess); + sheets[next_n || n] = s; + snames.push(next_n || n); + if(!realnames.length) return { SheetNames: snames, Sheets: sheets }; + var osheets = {}, rnames = []; + /* TODO: verify no collisions */ + for(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) { + rnames.push(realnames[i] || snames[i]); + osheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]]; + } else { + rnames.push(realnames[i]); + osheets[realnames[i]] = ({ "!ref": "A1" }); + } + return { SheetNames: rnames, Sheets: osheets }; + } + + function sheet_to_wk1(ws, opts) { + var o = opts || {}; + if(+o.codepage >= 0) set_cp(+o.codepage); + if(o.type == "string") throw new Error("Cannot write WK1 to JS string"); + var ba = buf_array(); + var range = safe_decode_range(ws["!ref"]); + var dense = Array.isArray(ws); + var cols = []; + + write_biff_rec(ba, 0x00, write_BOF_WK1(0x0406)); + write_biff_rec(ba, 0x06, write_RANGE(range)); + var max_R = Math.min(range.e.r, 8191); + for(var R = range.s.r; R <= max_R; ++R) { + var rr = encode_row(R); + for(var C = range.s.c; C <= range.e.c; ++C) { + if(R === range.s.r) cols[C] = encode_col(C); + var ref = cols[C] + rr; + var cell = dense ? (ws[R]||[])[C] : ws[ref]; + if(!cell || cell.t == "z") continue; + /* TODO: formula records */ + if(cell.t == "n") { + if((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell.v)); + else write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell.v)); + } else { + var str = format_cell(cell); + write_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239))); + } } - }, o); + } - s["!ref"] = encode_range(refguess); - sheets[n] = s; - return { SheetNames: snames, Sheets:sheets }; + write_biff_rec(ba, 0x01); + return ba.end(); + } + + function book_to_wk3(wb, opts) { + var o = opts || {}; + if(+o.codepage >= 0) set_cp(+o.codepage); + if(o.type == "string") throw new Error("Cannot write WK3 to JS string"); + var ba = buf_array(); + + write_biff_rec(ba, 0x00, write_BOF_WK3(wb)); + + for(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})["!ref"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++)); + + var wsidx = 0; + for(i = 0; i < wb.SheetNames.length; ++i) { + var ws = wb.Sheets[wb.SheetNames[i]]; + if(!ws || !ws["!ref"]) continue; + var range = safe_decode_range(ws["!ref"]); + var dense = Array.isArray(ws); + var cols = []; + var max_R = Math.min(range.e.r, 8191); + for(var R = range.s.r; R <= max_R; ++R) { + var rr = encode_row(R); + for(var C = range.s.c; C <= range.e.c; ++C) { + if(R === range.s.r) cols[C] = encode_col(C); + var ref = cols[C] + rr; + var cell = dense ? (ws[R]||[])[C] : ws[ref]; + if(!cell || cell.t == "z") continue; + /* TODO: FORMULA19 NUMBER18 records */ + if(cell.t == "n") { + write_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v)); + } else { + var str = format_cell(cell); + /* TODO: max len? */ + write_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239))); + } + } + } + ++wsidx; + } + + write_biff_rec(ba, 0x01); + return ba.end(); + } + + + function write_BOF_WK1(v) { + var out = new_buf(2); + out.write_shift(2, v); + return out; + } + + function write_BOF_WK3(wb) { + var out = new_buf(26); + out.write_shift(2, 0x1000); + out.write_shift(2, 0x0004); + out.write_shift(4, 0x0000); + var rows = 0, cols = 0, wscnt = 0; + for(var i = 0; i < wb.SheetNames.length; ++i) { + var name = wb.SheetNames[i]; + var ws = wb.Sheets[name]; + if(!ws || !ws["!ref"]) continue; + ++wscnt; + var range = decode_range(ws["!ref"]); + if(rows < range.e.r) rows = range.e.r; + if(cols < range.e.c) cols = range.e.c; + } + if(rows > 8191) rows = 8191; + out.write_shift(2, rows); + out.write_shift(1, wscnt); + out.write_shift(1, cols); + out.write_shift(2, 0x00); + out.write_shift(2, 0x00); + out.write_shift(1, 0x01); + out.write_shift(1, 0x02); + out.write_shift(4, 0); + out.write_shift(4, 0); + return out; } - function parse_RANGE(blob, length) { + function parse_RANGE(blob, length, opts) { var o = {s:{c:0,r:0},e:{c:0,r:0}}; + if(length == 8 && opts.qpro) { + o.s.c = blob.read_shift(1); + blob.l++; + o.s.r = blob.read_shift(2); + o.e.c = blob.read_shift(1); + blob.l++; + o.e.r = blob.read_shift(2); + return o; + } o.s.c = blob.read_shift(2); o.s.r = blob.read_shift(2); + if(length == 12 && opts.qpro) blob.l += 2; o.e.c = blob.read_shift(2); o.e.r = blob.read_shift(2); + if(length == 12 && opts.qpro) blob.l += 2; if(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0; return o; } + function write_RANGE(range) { + var out = new_buf(8); + out.write_shift(2, range.s.c); + out.write_shift(2, range.s.r); + out.write_shift(2, range.e.c); + out.write_shift(2, range.e.r); + return out; + } function parse_cell(blob, length, opts) { - var o = [{c:0,r:0}, {t:'n',v:0}, 0]; + var o = [{c:0,r:0}, {t:'n',v:0}, 0, 0]; if(opts.qpro && opts.vers != 0x5120) { o[0].c = blob.read_shift(1); - blob.l++; + o[3] = blob.read_shift(1); o[0].r = blob.read_shift(2); blob.l+=2; } else { @@ -21802,8 +24207,22 @@ var WK_ = (function() { o[1].v = blob.read_shift(len, 'utf8'); return o; } - if(opts.qpro) blob.l++; - o[1].v = blob.read_shift(tgt - blob.l, 'cstr'); + if(opts.qpro) blob.l++; + o[1].v = blob.read_shift(tgt - blob.l, 'cstr'); + return o; + } + function write_LABEL(R, C, s) { + /* TODO: encoding */ + var o = new_buf(7 + s.length); + o.write_shift(1, 0xFF); + o.write_shift(2, C); + o.write_shift(2, R); + o.write_shift(1, 0x27); // ?? + for(var i = 0; i < o.length; ++i) { + var cc = s.charCodeAt(i); + o.write_shift(1, cc >= 0x80 ? 0x5F : cc); + } + o.write_shift(1, 0); return o; } @@ -21812,12 +24231,28 @@ var WK_ = (function() { o[1].v = blob.read_shift(2, 'i'); return o; } + function write_INTEGER(R, C, v) { + var o = new_buf(7); + o.write_shift(1, 0xFF); + o.write_shift(2, C); + o.write_shift(2, R); + o.write_shift(2, v, 'i'); + return o; + } function parse_NUMBER(blob, length, opts) { var o = parse_cell(blob, length, opts); o[1].v = blob.read_shift(8, 'f'); return o; } + function write_NUMBER(R, C, v) { + var o = new_buf(13); + o.write_shift(1, 0xFF); + o.write_shift(2, C); + o.write_shift(2, R); + o.write_shift(8, v, 'f'); + return o; + } function parse_FORMULA(blob, length, opts) { var tgt = blob.l + length; @@ -21827,12 +24262,106 @@ var WK_ = (function() { if(opts.qpro) blob.l = tgt; else { var flen = blob.read_shift(2); + wk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o); blob.l += flen; } return o; } - function parse_cell_3(blob, length) { + function wk1_parse_rc(B, V, col) { + var rel = V & 0x8000; + V &= ~0x8000; + V = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V); + return (rel ? "" : "$") + (col ? encode_col(V) : encode_row(V)); + } + var oprec = [ + 8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3, + 3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8 + ]; + /* TODO: flesh out */ + var FuncTab = { + 0x33: ["FALSE", 0], + 0x34: ["TRUE", 0], + 0x46: ["LEN", 1], + 0x50: ["SUM", 69], + 0x51: ["AVERAGEA", 69], + 0x52: ["COUNTA", 69], + 0x53: ["MINA", 69], + 0x54: ["MAXA", 69], + 0x6F: ["T", 1] + }; + var BinOpTab = [ + "", "", "", "", "", "", "", "", + "", "+", "-", "*", "/", "^", "=", "<>", + "<=", ">=", "<", ">", "", "", "", "", + "&", "", "", "", "", "", "", "" + ]; + + function wk1_fmla_to_csf(blob, o) { + prep_blob(blob, 0); + var out = [], argc = 0, R = "", C = "", argL = "", argR = ""; + while(blob.l < blob.length) { + var cc = blob[blob.l++]; + switch(cc) { + case 0x00: out.push(blob.read_shift(8, 'f')); break; + case 0x01: { + C = wk1_parse_rc(o[0].c, blob.read_shift(2), true); + R = wk1_parse_rc(o[0].r, blob.read_shift(2), false); + out.push(C + R); + } break; + case 0x02: { + var c = wk1_parse_rc(o[0].c, blob.read_shift(2), true); + var r = wk1_parse_rc(o[0].r, blob.read_shift(2), false); + C = wk1_parse_rc(o[0].c, blob.read_shift(2), true); + R = wk1_parse_rc(o[0].r, blob.read_shift(2), false); + out.push(c + r + ":" + C + R); + } break; + case 0x03: + if(blob.l < blob.length) { console.error("WK1 premature formula end"); return; } + break; + case 0x04: out.push("(" + out.pop() + ")"); break; + case 0x05: out.push(blob.read_shift(2)); break; + case 0x06: { + /* TODO: text encoding */ + var Z = ""; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc); + out.push('"' + Z.replace(/"/g, '""') + '"'); break; + } break; + + case 0x08: out.push("-" + out.pop()); break; + case 0x17: out.push("+" + out.pop()); break; + case 0x16: out.push("NOT(" + out.pop() + ")"); break; + + case 0x14: case 0x15: { + argR = out.pop(); argL = out.pop(); + out.push(["AND", "OR"][cc - 0x14] + "(" + argL + "," + argR + ")"); + } break; + + default: + if(cc < 0x20 && BinOpTab[cc]) { + argR = out.pop(); argL = out.pop(); + out.push(argL + BinOpTab[cc] + argR); + } else if(FuncTab[cc]) { + argc = FuncTab[cc][1]; + if(argc == 69) argc = blob[blob.l++]; + if(argc > out.length) { console.error("WK1 bad formula parse 0x" + cc.toString(16) + ":|" + out.join("|") + "|"); return; } + var args = out.slice(-argc); + out.length -= argc; + out.push(FuncTab[cc][0] + "(" + args.join(",") + ")"); + } + else if(cc <= 0x07) return console.error("WK1 invalid opcode " + cc.toString(16)); + else if(cc <= 0x18) return console.error("WK1 unsupported op " + cc.toString(16)); + else if(cc <= 0x1E) return console.error("WK1 invalid opcode " + cc.toString(16)); + else if(cc <= 0x73) return console.error("WK1 unsupported function opcode " + cc.toString(16)); + // possible future functions ?? + else return console.error("WK1 unrecognized opcode " + cc.toString(16)); + } + } + if(out.length == 1) o[1].f = "" + out[0]; + else console.error("WK1 bad formula parse |" + out.join("|") + "|"); + } + + + function parse_cell_3(blob) { var o = [{c:0,r:0}, {t:'n',v:0}, 0]; o[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++]; return o; @@ -21844,20 +24373,35 @@ var WK_ = (function() { o[1].v = blob.read_shift(length - 4, 'cstr'); return o; } + function write_LABEL_16(R, C, wsidx, s) { + /* TODO: encoding */ + var o = new_buf(6 + s.length); + o.write_shift(2, R); + o.write_shift(1, wsidx); + o.write_shift(1, C); + o.write_shift(1, 0x27); + for(var i = 0; i < s.length; ++i) { + var cc = s.charCodeAt(i); + o.write_shift(1, cc >= 0x80 ? 0x5F : cc); + } + o.write_shift(1, 0); + return o; + } function parse_NUMBER_18(blob, length) { var o = parse_cell_3(blob, length); o[1].v = blob.read_shift(2); var v = o[1].v >> 1; - /* TODO: figure out all of the corner cases */ if(o[1].v & 0x1) { switch(v & 0x07) { + case 0: v = (v >> 3) * 5000; break; case 1: v = (v >> 3) * 500; break; case 2: v = (v >> 3) / 20; break; + case 3: v = (v >> 3) / 200; break; case 4: v = (v >> 3) / 2000; break; + case 5: v = (v >> 3) / 20000; break; case 6: v = (v >> 3) / 16; break; case 7: v = (v >> 3) / 64; break; - default: throw "unknown NUMBER_18 encoding " + (v & 0x07); } } o[1].v = v; @@ -21869,15 +24413,48 @@ var WK_ = (function() { var v1 = blob.read_shift(4); var v2 = blob.read_shift(4); var e = blob.read_shift(2); - if(e == 0xFFFF) { o[1].v = 0; return o; } + if(e == 0xFFFF) { + if(v1 === 0 && v2 === 0xC0000000) { o[1].t = "e"; o[1].v = 0x0F; } // ERR -> #VALUE! + else if(v1 === 0 && v2 === 0xD0000000) { o[1].t = "e"; o[1].v = 0x2A; } // NA -> #N/A + else o[1].v = 0; + return o; + } var s = e & 0x8000; e = (e&0x7FFF) - 16446; - o[1].v = ((e > 0 ? (v2 << e) : (v2 >>> -e)) + (e > -32 ? (v1 << (e + 32)) : (v1 >>> -(e + 32)))); + o[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e)); + return o; + } + function write_NUMBER_17(R, C, wsidx, v) { + var o = new_buf(14); + o.write_shift(2, R); + o.write_shift(1, wsidx); + o.write_shift(1, C); + if(v == 0) { + o.write_shift(4, 0); + o.write_shift(4, 0); + o.write_shift(2, 0xFFFF); + return o; + } + var s = 0, e = 0, v1 = 0, v2 = 0; + if(v < 0) { s = 1; v = -v; } + e = Math.log2(v) | 0; + v /= Math.pow(2, e-31); + v2 = (v)>>>0; + if((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; } + v -= v2; + v2 |= 0x80000000; + v2 >>>= 0; + v *= Math.pow(2, 32); + v1 = v>>>0; + o.write_shift(4, v1); + o.write_shift(4, v2); + e += 0x3FFF + (s ? 0x8000 : 0); + o.write_shift(2, e); return o; } function parse_FORMULA_19(blob, length) { var o = parse_NUMBER_17(blob, 14); - blob.l += length - 14; /* TODO: formula */ + blob.l += length - 14; /* TODO: WK3 formula */ return o; } @@ -21901,235 +24478,387 @@ var WK_ = (function() { return o; } + function parse_SHEETNAMECS(blob, length) { + return blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : ""; + } + + function parse_SHEETNAMELP(blob, length) { + var len = blob[blob.l++]; + if(len > length - 1) len = length - 1; + var o = ""; while(o.length < len) o += String.fromCharCode(blob[blob.l++]); + return o; + } + + function parse_SHEETINFOQP(blob, length, opts) { + if(!opts.qpro || length < 21) return; + var id = blob.read_shift(1); + blob.l += 17; + var len = blob.read_shift(1); + blob.l += 2; + var nm = blob.read_shift(length - 21, 'cstr'); + return [id, nm]; + } + + function parse_XFORMAT(blob, length) { + var o = {}, tgt = blob.l + length; + while(blob.l < tgt) { + var dt = blob.read_shift(2); + if(dt == 0x36b0) { + o[dt] = [0, ""]; + o[dt][0] = blob.read_shift(2); + while(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++; + } + // TODO: 0x3a99 ?? + } + return o; + } + function write_XFORMAT_SHEETNAME(name, wsidx) { + var out = new_buf(5 + name.length); + out.write_shift(2, 0x36b0); + out.write_shift(2, wsidx); + for(var i = 0; i < name.length; ++i) { + var cc = name.charCodeAt(i); + out[out.l++] = cc > 0x7F ? 0x5F : cc; + } + out[out.l++] = 0; + return out; + } + var WK1Enum = { 0x0000: { n:"BOF", f:parseuint16 }, -0x0001: { n:"EOF", f:parsenoop }, -0x0002: { n:"CALCMODE", f:parsenoop }, -0x0003: { n:"CALCORDER", f:parsenoop }, -0x0004: { n:"SPLIT", f:parsenoop }, -0x0005: { n:"SYNC", f:parsenoop }, +0x0001: { n:"EOF" }, +0x0002: { n:"CALCMODE" }, +0x0003: { n:"CALCORDER" }, +0x0004: { n:"SPLIT" }, +0x0005: { n:"SYNC" }, 0x0006: { n:"RANGE", f:parse_RANGE }, -0x0007: { n:"WINDOW1", f:parsenoop }, -0x0008: { n:"COLW1", f:parsenoop }, -0x0009: { n:"WINTWO", f:parsenoop }, -0x000A: { n:"COLW2", f:parsenoop }, -0x000B: { n:"NAME", f:parsenoop }, -0x000C: { n:"BLANK", f:parsenoop }, +0x0007: { n:"WINDOW1" }, +0x0008: { n:"COLW1" }, +0x0009: { n:"WINTWO" }, +0x000A: { n:"COLW2" }, +0x000B: { n:"NAME" }, +0x000C: { n:"BLANK" }, 0x000D: { n:"INTEGER", f:parse_INTEGER }, 0x000E: { n:"NUMBER", f:parse_NUMBER }, 0x000F: { n:"LABEL", f:parse_LABEL }, 0x0010: { n:"FORMULA", f:parse_FORMULA }, -0x0018: { n:"TABLE", f:parsenoop }, -0x0019: { n:"ORANGE", f:parsenoop }, -0x001A: { n:"PRANGE", f:parsenoop }, -0x001B: { n:"SRANGE", f:parsenoop }, -0x001C: { n:"FRANGE", f:parsenoop }, -0x001D: { n:"KRANGE1", f:parsenoop }, -0x0020: { n:"HRANGE", f:parsenoop }, -0x0023: { n:"KRANGE2", f:parsenoop }, -0x0024: { n:"PROTEC", f:parsenoop }, -0x0025: { n:"FOOTER", f:parsenoop }, -0x0026: { n:"HEADER", f:parsenoop }, -0x0027: { n:"SETUP", f:parsenoop }, -0x0028: { n:"MARGINS", f:parsenoop }, -0x0029: { n:"LABELFMT", f:parsenoop }, -0x002A: { n:"TITLES", f:parsenoop }, -0x002B: { n:"SHEETJS", f:parsenoop }, -0x002D: { n:"GRAPH", f:parsenoop }, -0x002E: { n:"NGRAPH", f:parsenoop }, -0x002F: { n:"CALCCOUNT", f:parsenoop }, -0x0030: { n:"UNFORMATTED", f:parsenoop }, -0x0031: { n:"CURSORW12", f:parsenoop }, -0x0032: { n:"WINDOW", f:parsenoop }, +0x0018: { n:"TABLE" }, +0x0019: { n:"ORANGE" }, +0x001A: { n:"PRANGE" }, +0x001B: { n:"SRANGE" }, +0x001C: { n:"FRANGE" }, +0x001D: { n:"KRANGE1" }, +0x0020: { n:"HRANGE" }, +0x0023: { n:"KRANGE2" }, +0x0024: { n:"PROTEC" }, +0x0025: { n:"FOOTER" }, +0x0026: { n:"HEADER" }, +0x0027: { n:"SETUP" }, +0x0028: { n:"MARGINS" }, +0x0029: { n:"LABELFMT" }, +0x002A: { n:"TITLES" }, +0x002B: { n:"SHEETJS" }, +0x002D: { n:"GRAPH" }, +0x002E: { n:"NGRAPH" }, +0x002F: { n:"CALCCOUNT" }, +0x0030: { n:"UNFORMATTED" }, +0x0031: { n:"CURSORW12" }, +0x0032: { n:"WINDOW" }, 0x0033: { n:"STRING", f:parse_LABEL }, -0x0037: { n:"PASSWORD", f:parsenoop }, -0x0038: { n:"LOCKED", f:parsenoop }, -0x003C: { n:"QUERY", f:parsenoop }, -0x003D: { n:"QUERYNAME", f:parsenoop }, -0x003E: { n:"PRINT", f:parsenoop }, -0x003F: { n:"PRINTNAME", f:parsenoop }, -0x0040: { n:"GRAPH2", f:parsenoop }, -0x0041: { n:"GRAPHNAME", f:parsenoop }, -0x0042: { n:"ZOOM", f:parsenoop }, -0x0043: { n:"SYMSPLIT", f:parsenoop }, -0x0044: { n:"NSROWS", f:parsenoop }, -0x0045: { n:"NSCOLS", f:parsenoop }, -0x0046: { n:"RULER", f:parsenoop }, -0x0047: { n:"NNAME", f:parsenoop }, -0x0048: { n:"ACOMM", f:parsenoop }, -0x0049: { n:"AMACRO", f:parsenoop }, -0x004A: { n:"PARSE", f:parsenoop }, -0x00FF: { n:"", f:parsenoop } +0x0037: { n:"PASSWORD" }, +0x0038: { n:"LOCKED" }, +0x003C: { n:"QUERY" }, +0x003D: { n:"QUERYNAME" }, +0x003E: { n:"PRINT" }, +0x003F: { n:"PRINTNAME" }, +0x0040: { n:"GRAPH2" }, +0x0041: { n:"GRAPHNAME" }, +0x0042: { n:"ZOOM" }, +0x0043: { n:"SYMSPLIT" }, +0x0044: { n:"NSROWS" }, +0x0045: { n:"NSCOLS" }, +0x0046: { n:"RULER" }, +0x0047: { n:"NNAME" }, +0x0048: { n:"ACOMM" }, +0x0049: { n:"AMACRO" }, +0x004A: { n:"PARSE" }, +0x0066: { n:"PRANGES??" }, +0x0067: { n:"RRANGES??" }, +0x0068: { n:"FNAME??" }, +0x0069: { n:"MRANGES??" }, +0x00CC: { n:"SHEETNAMECS", f:parse_SHEETNAMECS }, +0x00DE: { n:"SHEETNAMELP", f:parse_SHEETNAMELP }, +0xFFFF: { n:"" } }; var WK3Enum = { -0x0000: { n:"BOF", f:parsenoop }, -0x0001: { n:"EOF", f:parsenoop }, -0x0003: { n:"??", f:parsenoop }, -0x0004: { n:"??", f:parsenoop }, -0x0005: { n:"??", f:parsenoop }, -0x0006: { n:"??", f:parsenoop }, -0x0007: { n:"??", f:parsenoop }, -0x0009: { n:"??", f:parsenoop }, -0x000a: { n:"??", f:parsenoop }, -0x000b: { n:"??", f:parsenoop }, -0x000c: { n:"??", f:parsenoop }, -0x000e: { n:"??", f:parsenoop }, -0x000f: { n:"??", f:parsenoop }, -0x0010: { n:"??", f:parsenoop }, -0x0011: { n:"??", f:parsenoop }, -0x0012: { n:"??", f:parsenoop }, -0x0013: { n:"??", f:parsenoop }, -0x0015: { n:"??", f:parsenoop }, +0x0000: { n:"BOF" }, +0x0001: { n:"EOF" }, +0x0002: { n:"PASSWORD" }, +0x0003: { n:"CALCSET" }, +0x0004: { n:"WINDOWSET" }, +0x0005: { n:"SHEETCELLPTR" }, +0x0006: { n:"SHEETLAYOUT" }, +0x0007: { n:"COLUMNWIDTH" }, +0x0008: { n:"HIDDENCOLUMN" }, +0x0009: { n:"USERRANGE" }, +0x000A: { n:"SYSTEMRANGE" }, +0x000B: { n:"ZEROFORCE" }, +0x000C: { n:"SORTKEYDIR" }, +0x000D: { n:"FILESEAL" }, +0x000E: { n:"DATAFILLNUMS" }, +0x000F: { n:"PRINTMAIN" }, +0x0010: { n:"PRINTSTRING" }, +0x0011: { n:"GRAPHMAIN" }, +0x0012: { n:"GRAPHSTRING" }, +0x0013: { n:"??" }, +0x0014: { n:"ERRCELL" }, +0x0015: { n:"NACELL" }, 0x0016: { n:"LABEL16", f:parse_LABEL_16}, 0x0017: { n:"NUMBER17", f:parse_NUMBER_17 }, 0x0018: { n:"NUMBER18", f:parse_NUMBER_18 }, 0x0019: { n:"FORMULA19", f:parse_FORMULA_19}, -0x001a: { n:"??", f:parsenoop }, -0x001b: { n:"??", f:parsenoop }, -0x001c: { n:"??", f:parsenoop }, -0x001d: { n:"??", f:parsenoop }, -0x001e: { n:"??", f:parsenoop }, -0x001f: { n:"??", f:parsenoop }, -0x0021: { n:"??", f:parsenoop }, +0x001A: { n:"FORMULA1A" }, +0x001B: { n:"XFORMAT", f:parse_XFORMAT }, +0x001C: { n:"DTLABELMISC" }, +0x001D: { n:"DTLABELCELL" }, +0x001E: { n:"GRAPHWINDOW" }, +0x001F: { n:"CPA" }, +0x0020: { n:"LPLAUTO" }, +0x0021: { n:"QUERY" }, +0x0022: { n:"HIDDENSHEET" }, +0x0023: { n:"??" }, 0x0025: { n:"NUMBER25", f:parse_NUMBER_25 }, +0x0026: { n:"??" }, 0x0027: { n:"NUMBER27", f:parse_NUMBER_27 }, 0x0028: { n:"FORMULA28", f:parse_FORMULA_28 }, -0x00FF: { n:"", f:parsenoop } +0x008E: { n:"??" }, +0x0093: { n:"??" }, +0x0096: { n:"??" }, +0x0097: { n:"??" }, +0x0098: { n:"??" }, +0x0099: { n:"??" }, +0x009A: { n:"??" }, +0x009B: { n:"??" }, +0x009C: { n:"??" }, +0x00A3: { n:"??" }, +0x00AE: { n:"??" }, +0x00AF: { n:"??" }, +0x00B0: { n:"??" }, +0x00B1: { n:"??" }, +0x00B8: { n:"??" }, +0x00B9: { n:"??" }, +0x00BA: { n:"??" }, +0x00BB: { n:"??" }, +0x00BC: { n:"??" }, +0x00C3: { n:"??" }, +0x00C9: { n:"??" }, +0x00CC: { n:"SHEETNAMECS", f:parse_SHEETNAMECS }, +0x00CD: { n:"??" }, +0x00CE: { n:"??" }, +0x00CF: { n:"??" }, +0x00D0: { n:"??" }, +0x0100: { n:"??" }, +0x0103: { n:"??" }, +0x0104: { n:"??" }, +0x0105: { n:"??" }, +0x0106: { n:"??" }, +0x0107: { n:"??" }, +0x0109: { n:"??" }, +0x010A: { n:"??" }, +0x010B: { n:"??" }, +0x010C: { n:"??" }, +0x010E: { n:"??" }, +0x010F: { n:"??" }, +0x0180: { n:"??" }, +0x0185: { n:"??" }, +0x0186: { n:"??" }, +0x0189: { n:"??" }, +0x018C: { n:"??" }, +0x0200: { n:"??" }, +0x0202: { n:"??" }, +0x0201: { n:"??" }, +0x0204: { n:"??" }, +0x0205: { n:"??" }, +0x0280: { n:"??" }, +0x0281: { n:"??" }, +0x0282: { n:"??" }, +0x0283: { n:"??" }, +0x0284: { n:"??" }, +0x0285: { n:"??" }, +0x0286: { n:"??" }, +0x0287: { n:"??" }, +0x0288: { n:"??" }, +0x0292: { n:"??" }, +0x0293: { n:"??" }, +0x0294: { n:"??" }, +0x0295: { n:"??" }, +0x0296: { n:"??" }, +0x0299: { n:"??" }, +0x029A: { n:"??" }, +0x0300: { n:"??" }, +0x0304: { n:"??" }, +0x0601: { n:"SHEETINFOQP", f:parse_SHEETINFOQP }, +0x0640: { n:"??" }, +0x0642: { n:"??" }, +0x0701: { n:"??" }, +0x0702: { n:"??" }, +0x0703: { n:"??" }, +0x0704: { n:"??" }, +0x0780: { n:"??" }, +0x0800: { n:"??" }, +0x0801: { n:"??" }, +0x0804: { n:"??" }, +0x0A80: { n:"??" }, +0x2AF6: { n:"??" }, +0x3231: { n:"??" }, +0x6E49: { n:"??" }, +0x6F44: { n:"??" }, +0xFFFF: { n:"" } }; return { + sheet_to_wk1: sheet_to_wk1, + book_to_wk3: book_to_wk3, to_workbook: lotus_to_workbook }; })(); -/* 18.4.1 charset to codepage mapping */ -var CS2CP = ({ -0: 1252, /* ANSI */ -1: 65001, /* DEFAULT */ -2: 65001, /* SYMBOL */ -77: 10000, /* MAC */ -128: 932, /* SHIFTJIS */ -129: 949, /* HANGUL */ -130: 1361, /* JOHAB */ -134: 936, /* GB2312 */ -136: 950, /* CHINESEBIG5 */ -161: 1253, /* GREEK */ -162: 1254, /* TURKISH */ -163: 1258, /* VIETNAMESE */ -177: 1255, /* HEBREW */ -178: 1256, /* ARABIC */ -186: 1257, /* BALTIC */ -204: 1251, /* RUSSIAN */ -222: 874, /* THAI */ -238: 1250, /* EASTEUROPE */ -255: 1252, /* OEM */ -69: 6969 /* MISC */ -}); +/* 18.4.7 rPr CT_RPrElt */ +function parse_rpr(rpr) { + var font = {}, m = rpr.match(tagregex), i = 0; + var pass = false; + if(m) for(;i!=m.length; ++i) { + var y = parsexmltag(m[i]); + switch(y[0].replace(/\w*:/g,"")) { + /* 18.8.12 condense CT_BooleanProperty */ + /* ** not required . */ + case '': + case '': font.shadow = 1; break; + case '': break; -/* Parse a list of tags */ -var parse_rs = (function parse_rs_factory() { - var tregex = matchtag("t"), rpregex = matchtag("rPr"), rregex = /<(?:\w+:)?r>/g, rend = /<\/(?:\w+:)?r>/, nlregex = /\r\n/g; - /* 18.4.7 rPr CT_RPrElt */ - var parse_rpr = function parse_rpr(rpr, intro, outro) { - var font = {}, cp = 65001, align = ""; - var m = rpr.match(tagregex), i = 0; - if(m) for(;i!=m.length; ++i) { - var y = parsexmltag(m[i]); - switch(y[0].replace(/\w*:/g,"")) { - /* 18.8.12 condense CT_BooleanProperty */ - /* ** not required . */ - case '': - case '': font.shadow = 1; break; - case '': break; - - /* 18.4.1 charset CT_IntProperty TODO */ - case '': - case '': font.outline = 1; break; - case '': break; + /* 18.4.2 outline CT_BooleanProperty TODO */ + case '': + case '': font.outline = 1; break; + case '': break; - /* 18.4.5 rFont CT_FontName */ - case '': - case '': font.strike = 1; break; - case '': break; - - /* 18.4.13 u CT_UnderlineProperty */ - case '': - case '': font.u = 1; break; - case '': break; + /* 18.4.10 strike CT_BooleanProperty */ + case '': + case '': font.strike = 1; break; + case '': break; - /* 18.8.2 b */ - case '': - case '': font.b = 1; break; - case '': break; + /* 18.4.13 u CT_UnderlineProperty */ + case '': + case '': font.u = 1; break; + case '': break; - /* 18.8.26 i */ - case '': - case '': font.i = 1; break; - case '': break; + /* 18.8.2 b */ + case '': + case '': font.b = 1; break; + case '': break; - /* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */ - case '': + case '': font.i = 1; break; + case '': break; - /* 18.8.18 family ST_FontFamily */ - case '': case '': case '': break; - /* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */ - case '': case '': case '': break; - /* 18.8.35 scheme CT_FontScheme TODO */ - case '': case '': case '': break; - default: - if(y[0].charCodeAt(1) !== 47) throw 'Unrecognized rich format ' + y[0]; - } + /* 18.8.35 scheme CT_FontScheme TODO */ + case '': case '': case '': break; + + /* 18.2.10 extLst CT_ExtensionList ? */ + case '': case '': break; + case '': pass = false; break; + default: + if(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]); } + } + return font; +} + +var parse_rs = (function() { + var tregex = matchtag("t"), rpregex = matchtag("rPr"); + /* 18.4.4 r CT_RElt */ + function parse_r(r) { + /* 18.4.12 t ST_Xstring */ + var t = r.match(tregex); + if(!t) return {t:"s", v:""}; + + var o = ({t:'s', v:unescapexml(t[1])}); + var rpr = r.match(rpregex); + if(rpr) o.s = parse_rpr(rpr[1]); + return o; + } + var rregex = /<(?:\w+:)?r>/g, rend = /<\/(?:\w+:)?r>/; + return function parse_rs(rs) { + return rs.replace(rregex,"").split(rend).map(parse_r).filter(function(r) { return r.v; }); + }; +})(); + + +/* Parse a list of tags */ +var rs_to_html = (function parse_rs_factory() { + var nlregex = /(\r\n|\n)/g; + function parse_rpr2(font, intro, outro) { var style = []; if(font.u) style.push("text-decoration: underline;"); if(font.uval) style.push("text-underline-style:" + font.uval + ";"); - if(font.sz) style.push("font-size:" + font.sz + ";"); + if(font.sz) style.push("font-size:" + font.sz + "pt;"); if(font.outline) style.push("text-effect: outline;"); if(font.shadow) style.push("text-shadow: auto;"); intro.push(''); @@ -22138,29 +24867,27 @@ var parse_rs = (function parse_rs_factory() { if(font.i) { intro.push(""); outro.push(""); } if(font.strike) { intro.push(""); outro.push(""); } - if(align == "superscript") align = "sup"; + var align = font.valign || ""; + if(align == "superscript" || align == "super") align = "sup"; else if(align == "subscript") align = "sub"; if(align != "") { intro.push("<" + align + ">"); outro.push(""); } outro.push(""); - return cp; - }; + return font; + } /* 18.4.4 r CT_RElt */ - function parse_r(r) { - var terms = [[],"",[]]; - /* 18.4.12 t ST_Xstring */ - var t = r.match(tregex), cp = 65001; - if(!isval(t)) return ""; - terms[1] = t[1]; + function r_to_html(r) { + var terms = [[],r.v,[]]; + if(!r.v) return ""; - var rpr = r.match(rpregex); - if(isval(rpr)) cp = parse_rpr(rpr[1], terms[0], terms[2]); + if(r.s) parse_rpr2(r.s, terms[0], terms[2]); return terms[0].join("") + terms[1].replace(nlregex,'
') + terms[2].join(""); } + return function parse_rs(rs) { - return rs.replace(rregex,"").split(rend).map(parse_r).join(""); + return rs.map(r_to_html).join(""); }; })(); @@ -22170,20 +24897,20 @@ var sirphregex = /<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g; function parse_si(x, opts) { var html = opts ? opts.cellHTML : true; var z = {}; - if(!x) return null; - var y; + if(!x) return { t: "" }; + //var y; /* 18.4.12 t ST_Xstring (Plaintext String) */ // TODO: is whitespace actually valid here? if(x.match(/^\s*<(?:\w+:)?t[^>]*>/)) { - z.t = utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0])); + z.t = unescapexml(utf8read(x.slice(x.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]||"")); z.r = utf8read(x); if(html) z.h = escapehtml(z.t); } /* 18.4.4 r CT_RElt (Rich Text Run) */ - else if((y = x.match(sirregex))) { + else if((/*y = */x.match(sirregex))) { z.r = utf8read(x); - z.t = utf8read(unescapexml((x.replace(sirphregex, '').match(sitregex)||[]).join("").replace(tagregex,""))); - if(html) z.h = parse_rs(z.r); + z.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join("").replace(tagregex,""))); + if(html) z.h = rs_to_html(parse_rs(z.r)); } /* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */ /* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */ @@ -22199,7 +24926,7 @@ function parse_sst_xml(data, opts) { if(!data) return s; /* 18.4.9 sst CT_Sst */ var sst = data.match(sstr0); - if(isval(sst)) { + if(sst) { ss = sst[2].replace(sstr1,"").split(sstr2); for(var i = 0; i != ss.length; ++i) { var o = parse_si(ss[i].trim(), opts); @@ -22236,8 +24963,8 @@ function write_sst_xml(sst, opts) { if(o.length>2){ o[o.length] = (''); o[1]=o[1].replace("/>",">"); } return o.join(""); } -/* [MS-XLSB] 2.4.219 BrtBeginSst */ -function parse_BrtBeginSst(data, length) { +/* [MS-XLSB] 2.4.221 BrtBeginSst */ +function parse_BrtBeginSst(data) { return [data.read_shift(4), data.read_shift(4)]; } @@ -22277,7 +25004,7 @@ function write_BrtBeginSst(sst, o) { var write_BrtSSTItem = write_RichStr; -function write_sst_bin(sst, opts) { +function write_sst_bin(sst) { var ba = buf_array(); write_record(ba, "BrtBeginSst", write_BrtBeginSst(sst)); for(var i = 0; i < sst.length; ++i) write_record(ba, "BrtSSTItem", write_BrtSSTItem(sst[i])); @@ -22286,7 +25013,7 @@ function write_sst_bin(sst, opts) { return ba.end(); } function _JS2ANSI(str) { - if(typeof cptable !== 'undefined') return cptable.utils.encode(1252, str); + if(typeof cptable !== 'undefined') return cptable.utils.encode(current_ansi, str); var o = [], oo = str.split(""); for(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0); return o; @@ -22302,7 +25029,7 @@ if(length >= 4) blob.l += length - 4; } /* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */ -function parse_DataSpaceVersionInfo(blob, length) { +function parse_DataSpaceVersionInfo(blob) { var o = {}; o.id = blob.read_shift(0, 'lpp4'); o.R = parse_CRYPTOVersion(blob, 4); @@ -22318,20 +25045,16 @@ function parse_DataSpaceMapEntry(blob) { var o = {}; var cnt = blob.read_shift(4); var comps = []; - while(cnt-- > 0) { - /* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */ - var rc = {}; - rc.t = blob.read_shift(4); - rc.v = blob.read_shift(0, 'lpp4'); - comps.push(rc); - } + /* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */ + while(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') }); o.name = blob.read_shift(0, 'lpp4'); o.comps = comps; + if(blob.l != end) throw new Error("Bad DataSpaceMapEntry: " + blob.l + " != " + end); return o; } /* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */ -function parse_DataSpaceMap(blob, length) { +function parse_DataSpaceMap(blob) { var o = []; blob.l += 4; // must be 0x8 var cnt = blob.read_shift(4); @@ -22340,7 +25063,7 @@ function parse_DataSpaceMap(blob, length) { } /* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */ -function parse_DataSpaceDefinition(blob, length) { +function parse_DataSpaceDefinition(blob) { var o = []; blob.l += 4; // must be 0x8 var cnt = blob.read_shift(4); @@ -22349,13 +25072,11 @@ function parse_DataSpaceDefinition(blob, length) { } /* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */ -function parse_TransformInfoHeader(blob, length) { +function parse_TransformInfoHeader(blob) { var o = {}; - var len = blob.read_shift(4); - var tgt = blob.l + len - 4; + /*var len = */blob.read_shift(4); blob.l += 4; // must be 0x1 o.id = blob.read_shift(0, 'lpp4'); - // tgt == len o.name = blob.read_shift(0, 'lpp4'); o.R = parse_CRYPTOVersion(blob, 4); o.U = parse_CRYPTOVersion(blob, 4); @@ -22363,7 +25084,7 @@ function parse_TransformInfoHeader(blob, length) { return o; } -function parse_Primary(blob, length) { +function parse_Primary(blob) { /* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */ var hdr = parse_TransformInfoHeader(blob); /* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */ @@ -22393,50 +25114,69 @@ function parse_EncryptionHeader(blob, length) { o.KeySize = blob.read_shift(4); o.ProviderType = blob.read_shift(4); blob.l += 8; - o.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le').slice(0,-1); + o.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le'); blob.l = tgt; return o; } /* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */ function parse_EncryptionVerifier(blob, length) { - var o = {}; + var o = {}, tgt = blob.l + length; blob.l += 4; // SaltSize must be 0x10 o.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16; o.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16; - var sz = blob.read_shift(4); - o.VerifierHash = blob.slice(blob.l, blob.l + sz); blob.l += sz; + /*var sz = */blob.read_shift(4); + o.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt; return o; } /* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */ -function parse_EncryptionInfo(blob, length) { +function parse_EncryptionInfo(blob) { var vers = parse_CRYPTOVersion(blob); switch(vers.Minor) { - case 0x02: return parse_EncInfoStd(blob, vers); - case 0x03: return parse_EncInfoExt(blob, vers); - case 0x04: return parse_EncInfoAgl(blob, vers); + case 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)]; + case 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)]; + case 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)]; } - throw new Error("ECMA-376 Encryped file unrecognized Version: " + vers.Minor); + throw new Error("ECMA-376 Encrypted file unrecognized Version: " + vers.Minor); } /* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */ -function parse_EncInfoStd(blob, vers) { +function parse_EncInfoStd(blob) { var flags = blob.read_shift(4); if((flags & 0x3F) != 0x24) throw new Error("EncryptionInfo mismatch"); var sz = blob.read_shift(4); - var tgt = blob.l + sz; + //var tgt = blob.l + sz; var hdr = parse_EncryptionHeader(blob, sz); var verifier = parse_EncryptionVerifier(blob, blob.length - blob.l); return { t:"Std", h:hdr, v:verifier }; } /* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */ -function parse_EncInfoExt(blob, vers) { throw new Error("File is password-protected: ECMA-376 Extensible"); } +function parse_EncInfoExt() { throw new Error("File is password-protected: ECMA-376 Extensible"); } /* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */ -function parse_EncInfoAgl(blob, vers) { throw new Error("File is password-protected: ECMA-376 Agile"); } - - - +function parse_EncInfoAgl(blob) { + var KeyData = ["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"]; + blob.l+=4; + var xml = blob.read_shift(blob.length - blob.l, 'utf8'); + var o = {}; + xml.replace(tagregex, function xml_agile(x) { + var y = parsexmltag(x); + switch(strip_ns(y[0])) { + case '': break; + case '': case '': break; + + case '': break; + case '= 8 ? blob.read_shift(2) : 0 }; /* wEncryptionType */ + var o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }); /* wEncryptionType */ if(o.Type) parse_FilePassHeader(blob, length-2, o); - else parse_XORObfuscation(blob, length-2, opts, o); + else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o); return o; } +var RTF = (function() { + function rtf_to_sheet(d, opts) { + switch(opts.type) { + case 'base64': return rtf_to_sheet_str(Base64.decode(d), opts); + case 'binary': return rtf_to_sheet_str(d, opts); + case 'buffer': return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts); + case 'array': return rtf_to_sheet_str(cc2str(d), opts); + } + throw new Error("Unrecognized type " + opts.type); + } + + /* TODO: this is a stub */ + function rtf_to_sheet_str(str, opts) { + var o = opts || {}; + var ws = o.dense ? ([]) : ({}); + + var rows = str.match(/\\trowd.*?\\row\b/g); + if(!rows.length) throw new Error("RTF missing table"); + var range = ({s: {c:0, r:0}, e: {c:0, r:rows.length - 1}}); + rows.forEach(function(rowtf, R) { + if(Array.isArray(ws)) ws[R] = []; + var rtfre = /\\\w+\b/g; + var last_index = 0; + var res; + var C = -1; + while((res = rtfre.exec(rowtf))) { + switch(res[0]) { + case "\\cell": + var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length); + if(data[0] == " ") data = data.slice(1); + ++C; + if(data.length) { + // TODO: value parsing, including codepage adjustments + var cell = {v: data, t:"s"}; + if(Array.isArray(ws)) ws[R][C] = cell; + else ws[encode_cell({r:R, c:C})] = cell; + } + break; + } + last_index = rtfre.lastIndex; + } + if(C > range.e.c) range.e.c = C; + }); + ws['!ref'] = encode_range(range); + return ws; + } + + function rtf_to_workbook(d, opts) { return sheet_to_workbook(rtf_to_sheet(d, opts), opts); } + + /* TODO: this is a stub */ + function sheet_to_rtf(ws) { + var o = ["{\\rtf1\\ansi"]; + var r = safe_decode_range(ws['!ref']), cell; + var dense = Array.isArray(ws); + for(var R = r.s.r; R <= r.e.r; ++R) { + o.push("\\trowd\\trautofit1"); + for(var C = r.s.c; C <= r.e.c; ++C) o.push("\\cellx" + (C+1)); + o.push("\\pard\\intbl"); + for(C = r.s.c; C <= r.e.c; ++C) { + var coord = encode_cell({r:R,c:C}); + cell = dense ? (ws[R]||[])[C]: ws[coord]; + if(!cell || cell.v == null && (!cell.f || cell.F)) continue; + o.push(" " + (cell.w || (format_cell(cell), cell.w))); + o.push("\\cell"); + } + o.push("\\pard\\intbl\\row"); + } + return o.join("") + "}"; + } + + return { + to_workbook: rtf_to_workbook, + to_sheet: rtf_to_sheet, + from_sheet: sheet_to_rtf + }; +})(); function hex2RGB(h) { - var o = h.substr(h[0]==="#"?1:0,6); - return [parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)]; + var o = h.slice(h[0]==="#"?1:0).slice(0,6); + return [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)]; } function rgb2Hex(rgb) { for(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]); - return o.toString(16).toUpperCase().substr(1); + return o.toString(16).toUpperCase().slice(1); } function rgb2HSL(rgb) { @@ -22644,8 +25460,8 @@ var DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW; function width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); } function px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; } function char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; } -function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; } -function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; } +//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; } +//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; } function cycle_width(collw) { return char2width(px2char(width2px(collw))); } /* XLSX/XLSB/XLS specify width in units of MDW */ function find_mdw_colw(collw) { @@ -22654,6 +25470,17 @@ function find_mdw_colw(collw) { MDW = _MDW; } /* XLML specifies width in terms of pixels */ +/*function find_mdw_wpx(wpx) { + var delta = Infinity, guess = 0, _MDW = MIN_MDW; + for(MDW=MIN_MDW; MDW 0.5) guess--; + if(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; } + } + MDW = _MDW; +}*/ + function process_col(coll) { if(coll.width) { coll.wpx = width2px(coll.width); @@ -22697,17 +25524,18 @@ var XLMLPatternTypeMap = { /* 18.8.5 borders CT_Borders */ function parse_borders(t, styles, themes, opts) { styles.Borders = []; - var border = {}, sub_border = {}; - t[0].match(tagregex).forEach(function(x) { + var border = {}; + var pass = false; + (t[0].match(tagregex)||[]).forEach(function(x) { var y = parsexmltag(x); - switch (y[0]) { + switch(strip_ns(y[0])) { case '': case '': break; /* 18.8.4 border CT_Border */ case '': case '': border = {}; - if (y.diagonalUp) { border.diagonalUp = y.diagonalUp; } - if (y.diagonalDown) { border.diagonalDown = y.diagonalDown; } + if(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp); + if(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown); styles.Borders.push(border); break; case '': break; @@ -22753,10 +25581,17 @@ function parse_borders(t, styles, themes, opts) { case '': break; /* 18.8.? color CT_Color */ - case '': break; + case '': + break; case '': case '': break; - default: if(opts && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in borders'); + /* 18.2.10 extLst CT_ExtensionList ? */ + case '': case '': break; + case '': pass = false; break; + default: if(opts && opts.WTF) { + if(!pass) throw new Error('unrecognized ' + y[0] + ' in borders'); + } } }); } @@ -22765,14 +25600,16 @@ function parse_borders(t, styles, themes, opts) { function parse_fills(t, styles, themes, opts) { styles.Fills = []; var fill = {}; - t[0].match(tagregex).forEach(function(x) { + var pass = false; + (t[0].match(tagregex)||[]).forEach(function(x) { var y = parsexmltag(x); - switch(y[0]) { + switch(strip_ns(y[0])) { case '': case '': break; /* 18.8.20 fill CT_Fill */ - case '': case '': styles.Fills.push(fill); fill = {}; break; + case '': case '': + fill = {}; styles.Fills.push(fill); break; + case '': break; /* 18.8.24 gradientFill CT_GradientFill */ case '': break; @@ -22802,7 +25639,7 @@ function parse_fills(t, styles, themes, opts) { if(y.theme) fill.fgColor.theme = parseInt(y.theme, 10); if(y.tint) fill.fgColor.tint = parseFloat(y.tint); /* Excel uses ARGB strings */ - if(y.rgb) fill.fgColor.rgb = y.rgb.slice(-6); + if(y.rgb != null) fill.fgColor.rgb = y.rgb.slice(-6); break; case '': case '': break; @@ -22814,7 +25651,13 @@ function parse_fills(t, styles, themes, opts) { case '': break; case '': break; - default: if(opts && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in fills'); + /* 18.2.10 extLst CT_ExtensionList ? */ + case '': case '': break; + case '': pass = false; break; + default: if(opts && opts.WTF) { + if(!pass) throw new Error('unrecognized ' + y[0] + ' in fills'); + } } }); } @@ -22823,9 +25666,10 @@ function parse_fills(t, styles, themes, opts) { function parse_fonts(t, styles, themes, opts) { styles.Fonts = []; var font = {}; - t[0].match(tagregex).forEach(function(x) { + var pass = false; + (t[0].match(tagregex)||[]).forEach(function(x) { var y = parsexmltag(x); - switch (y[0]) { + switch(strip_ns(y[0])) { case '': case '': break; /* 18.8.22 font CT_Font */ @@ -22836,7 +25680,7 @@ function parse_fonts(t, styles, themes, opts) { break; /* 18.8.29 name CT_FontName */ - case '': case '': break; /* 18.8.2 b CT_BooleanProperty */ @@ -22910,7 +25754,7 @@ function parse_fonts(t, styles, themes, opts) { font.color.index = parseInt(y.indexed, 10); var icv = XLSIcv[font.color.index]; if(font.color.index == 81) icv = XLSIcv[1]; - if(!icv) throw new Error(x); + if(!icv) icv = XLSIcv[1]; //throw new Error(x); // note: 206 is valid font.color.rgb = icv[0].toString(16) + icv[1].toString(16) + icv[2].toString(16); } else if(y.theme) { font.color.theme = parseInt(y.theme, 10); @@ -22923,7 +25767,17 @@ function parse_fonts(t, styles, themes, opts) { break; case '': case '': break; - default: if(opts && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in fonts'); + /* note: sometimes mc:AlternateContent appears bare */ + case '': pass = false; break; + + /* 18.2.10 extLst CT_ExtensionList ? */ + case '': case '': break; + case '': pass = false; break; + default: if(opts && opts.WTF) { + if(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts'); + } } }); } @@ -22937,7 +25791,7 @@ function parse_numFmts(t, styles, opts) { if(!m) return; for(i=0; i < m.length; ++i) { var y = parsexmltag(m[i]); - switch(y[0]) { + switch(strip_ns(y[0])) { case '': case '': case '': break; case '"]; [[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) { for(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])})); @@ -22973,9 +25827,10 @@ var cellXF_bool = [ "applyAlignment", "applyBorder", "applyFill", "applyFont", " function parse_cellXfs(t, styles, opts) { styles.CellXf = []; var xf; - t[0].match(tagregex).forEach(function(x) { + var pass = false; + (t[0].match(tagregex)||[]).forEach(function(x) { var y = parsexmltag(x), i = 0; - switch(y[0]) { + switch(strip_ns(y[0])) { case '': case '': case '': break; /* 18.8.45 xf CT_Xf */ @@ -22985,8 +25840,8 @@ function parse_cellXfs(t, styles, opts) { for(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]]) xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10); for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]]) - xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]], ""); - if(xf.numFmtId > 0x188) { + xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]); + if(styles.NumberFmt && xf.numFmtId > 0x188) { for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; } } styles.CellXf.push(xf); break; @@ -22999,18 +25854,27 @@ function parse_cellXfs(t, styles, opts) { if(y.horizontal) alignment.horizontal = y.horizontal; if(y.textRotation != null) alignment.textRotation = y.textRotation; if(y.indent) alignment.indent = y.indent; - if(y.wrapText) alignment.wrapText = y.wrapText; + if(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText); xf.alignment = alignment; break; case '': break; /* 18.8.33 protection CT_CellProtection */ - case '': case '': break; + case '': case '': break; + + /* note: sometimes mc:AlternateContent appears bare */ + case '': pass = false; break; /* 18.2.10 extLst CT_ExtensionList ? */ - case '': break; - case '': case '': break; + case '': pass = false; break; + default: if(opts && opts.WTF) { + if(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs'); + } } }); } @@ -23018,7 +25882,9 @@ function parse_cellXfs(t, styles, opts) { function write_cellXfs(cellXfs) { var o = []; o[o.length] = (writextag('cellXfs',null)); - cellXfs.forEach(function(c) { o[o.length] = (writextag('xf', null, c)); }); + cellXfs.forEach(function(c) { + o[o.length] = (writextag('xf', null, c)); + }); o[o.length] = (""); if(o.length === 2) return ""; o[0] = writextag('cellXfs',null, {count:o.length-2}).replace("/>",">"); @@ -23027,11 +25893,11 @@ function write_cellXfs(cellXfs) { /* 18.8 Styles CT_Stylesheet*/ var parse_sty_xml= (function make_pstyx() { -var numFmtRegex = /]*)>[\S\s]*?<\/numFmts>/; -var cellXfRegex = /]*)>[\S\s]*?<\/cellXfs>/; -var fillsRegex = /]*)>[\S\s]*?<\/fills>/; -var fontsRegex = /]*)>[\S\s]*?<\/fonts>/; -var bordersRegex = /]*)>[\S\s]*?<\/borders>/; +var numFmtRegex = /<(?:\w+:)?numFmts([^>]*)>[\S\s]*?<\/(?:\w+:)?numFmts>/; +var cellXfRegex = /<(?:\w+:)?cellXfs([^>]*)>[\S\s]*?<\/(?:\w+:)?cellXfs>/; +var fillsRegex = /<(?:\w+:)?fills([^>]*)>[\S\s]*?<\/(?:\w+:)?fills>/; +var fontsRegex = /<(?:\w+:)?fonts([^>]*)>[\S\s]*?<\/(?:\w+:)?fonts>/; +var bordersRegex = /<(?:\w+:)?borders([^>]*)>[\S\s]*?<\/(?:\w+:)?borders>/; return function parse_sty_xml(data, themes, opts) { var styles = {}; @@ -23053,11 +25919,11 @@ return function parse_sty_xml(data, themes, opts) { if((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts); /* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */ + /* 18.8.8 cellStyles CT_CellStyles ? */ /* 18.8.10 cellXfs CT_CellXfs ? */ if((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts); - /* 18.8.8 cellStyles CT_CellStyles ? */ /* 18.8.15 dxfs CT_Dxfs ? */ /* 18.8.42 tableStyles CT_TableStyles ? */ /* 18.8.11 colors CT_Colors ? */ @@ -23089,7 +25955,7 @@ function write_sty_xml(wb, opts) { if(o.length>2){ o[o.length] = (''); o[1]=o[1].replace("/>",">"); } return o.join(""); } -/* [MS-XLSB] 2.4.651 BrtFmt */ +/* [MS-XLSB] 2.4.657 BrtFmt */ function parse_BrtFmt(data, length) { var numFmtId = data.read_shift(2); var stFmtCode = parse_XLWideString(data,length-2); @@ -23099,22 +25965,24 @@ function write_BrtFmt(i, f, o) { if(!o) o = new_buf(6 + 4 * f.length); o.write_shift(2, i); write_XLWideString(f, o); - return o.length > o.l ? o.slice(0, o.l) : o; + var out = (o.length > o.l) ? o.slice(0, o.l) : o; + if(o.l == null) o.l = o.length; + return out; } -/* [MS-XLSB] 2.4.653 BrtFont TODO */ +/* [MS-XLSB] 2.4.659 BrtFont TODO */ function parse_BrtFont(data, length, opts) { var out = ({}); out.sz = data.read_shift(2) / 20; var grbit = parse_FontFlags(data, 2, opts); + if(grbit.fItalic) out.italic = 1; if(grbit.fCondense) out.condense = 1; if(grbit.fExtend) out.extend = 1; if(grbit.fShadow) out.shadow = 1; if(grbit.fOutline) out.outline = 1; if(grbit.fStrikeout) out.strike = 1; - if(grbit.fItalic) out.italic = 1; var bls = data.read_shift(2); if(bls === 0x02BC) out.bold = 1; @@ -23169,7 +26037,7 @@ function write_BrtFont(font, o) { return o.length > o.l ? o.slice(0, o.l) : o; } -/* [MS-XLSB] 2.4.644 BrtFill */ +/* [MS-XLSB] 2.4.650 BrtFill */ var XLSBFillPTNames = [ "none", "solid", @@ -23193,6 +26061,7 @@ var XLSBFillPTNames = [ ]; var rev_XLSBFillPTNames = (evert(XLSBFillPTNames)); /* TODO: gradient fill representation */ +var parse_BrtFill = parsenoop; function write_BrtFill(fill, o) { if(!o) o = new_buf(4*3 + 8*7 + 16*1); var fls = rev_XLSBFillPTNames[fill.patternType]; @@ -23222,11 +26091,12 @@ function write_BrtFill(fill, o) { return o.length > o.l ? o.slice(0, o.l) : o; } -/* [MS-XLSB] 2.4.816 BrtXF */ +/* [MS-XLSB] 2.4.824 BrtXF */ function parse_BrtXF(data, length) { + var tgt = data.l + length; var ixfeParent = data.read_shift(2); var ifmt = data.read_shift(2); - parsenoop(data, length-4); + data.l = tgt; return {ixfe:ixfeParent, numFmtId:ifmt }; } function write_BrtXF(data, ixfeP, o) { @@ -23238,7 +26108,8 @@ function write_BrtXF(data, ixfeP, o) { o.write_shift(2, 0); /* ixBorder */ o.write_shift(1, 0); /* trot */ o.write_shift(1, 0); /* indent */ - o.write_shift(1, 0); /* flags */ + var flow = 0; + o.write_shift(1, flow); /* flags */ o.write_shift(1, 0); /* flags */ o.write_shift(1, 0); /* xfGrbitAtr */ o.write_shift(1, 0); @@ -23254,7 +26125,8 @@ function write_Blxf(data, o) { o.write_shift(4, 0); /* color */ return o; } -/* [MS-XLSB] 2.4.299 BrtBorder TODO */ +/* [MS-XLSB] 2.4.302 BrtBorder TODO */ +var parse_BrtBorder = parsenoop; function write_BrtBorder(border, o) { if(!o) o = new_buf(51); o.write_shift(1, 0); /* diagonal */ @@ -23266,7 +26138,7 @@ function write_BrtBorder(border, o) { return o.length > o.l ? o.slice(0, o.l) : o; } -/* [MS-XLSB] 2.4.755 BrtStyle TODO */ +/* [MS-XLSB] 2.4.763 BrtStyle TODO */ function write_BrtStyle(style, o) { if(!o) o = new_buf(12+4*10); o.write_shift(4, style.xfId); @@ -23277,7 +26149,7 @@ function write_BrtStyle(style, o) { return o.length > o.l ? o.slice(0, o.l) : o; } -/* [MS-XLSB] 2.4.269 BrtBeginTableStyles */ +/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */ function write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) { var o = new_buf(4+256*2*4); o.write_shift(4, cnt); @@ -23308,8 +26180,10 @@ function parse_sty_bin(data, themes, opts) { } break; case 0x0401: /* 'BrtKnownFonts' */ break; - case 0x002D: /* 'BrtFill' */ break; - case 0x002E: /* 'BrtBorder' */ break; + case 0x002D: /* 'BrtFill' */ + break; + case 0x002E: /* 'BrtBorder' */ + break; case 0x002F: /* 'BrtXF' */ if(state[state.length - 1] == "BrtBeginCellXFs") { styles.CellXf.push(val); @@ -23326,7 +26200,7 @@ function parse_sty_bin(data, themes, opts) { case 0x046A: /* 'BrtSlicerStyleElement' */ case 0x0200: /* 'BrtTableStyleElement' */ case 0x082F: /* 'BrtTimelineStyleElement' */ - /* case 'BrtUid' */ + case 0x0C00: /* 'BrtUid' */ break; case 0x0023: /* 'BrtFRTBegin' */ @@ -23334,14 +26208,14 @@ function parse_sty_bin(data, themes, opts) { case 0x0024: /* 'BrtFRTEnd' */ pass = false; break; case 0x0025: /* 'BrtACBegin' */ - state.push(R_n); break; + state.push(R_n); pass = true; break; case 0x0026: /* 'BrtACEnd' */ - state.pop(); break; + state.pop(); pass = false; break; default: if((R_n||"").indexOf("Begin") > 0) state.push(R_n); else if((R_n||"").indexOf("End") > 0) state.pop(); - else if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R_n); + else if(!pass || (opts.WTF && state[state.length-1] != "BrtACBegin")) throw new Error("Unexpected record " + RT + " " + R_n); } }); return styles; @@ -23362,7 +26236,7 @@ for(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, "BrtFmt", w write_record(ba, "BrtEndFmts"); } -function write_FONTS_bin(ba, data) { +function write_FONTS_bin(ba) { var cnt = 1; if(cnt == 0) return; @@ -23378,7 +26252,7 @@ function write_FONTS_bin(ba, data) { write_record(ba, "BrtEndFonts"); } -function write_FILLS_bin(ba, data) { +function write_FILLS_bin(ba) { var cnt = 2; if(cnt == 0) return; @@ -23389,7 +26263,7 @@ function write_FILLS_bin(ba, data) { write_record(ba, "BrtEndFills"); } -function write_BORDERS_bin(ba, data) { +function write_BORDERS_bin(ba) { var cnt = 1; if(cnt == 0) return; @@ -23399,14 +26273,14 @@ function write_BORDERS_bin(ba, data) { write_record(ba, "BrtEndBorders"); } -function write_CELLSTYLEXFS_bin(ba, data) { +function write_CELLSTYLEXFS_bin(ba) { var cnt = 1; write_record(ba, "BrtBeginCellStyleXFs", write_UInt32LE(cnt)); write_record(ba, "BrtXF", write_BrtXF({ - numFmtId:0, - fontId:0, - fillId:0, - borderId:0 + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0 }, 0xFFFF)); /* 1*65430(BrtXF *FRT) */ write_record(ba, "BrtEndCellStyleXFs"); @@ -23419,10 +26293,10 @@ function write_CELLXFS_bin(ba, data) { write_record(ba, "BrtEndCellXFs"); } -function write_STYLES_bin(ba, data) { +function write_STYLES_bin(ba) { var cnt = 1; - write_record(ba, "BrtBeginStyles", write_UInt32LE(1)); + write_record(ba, "BrtBeginStyles", write_UInt32LE(cnt)); write_record(ba, "BrtStyle", write_BrtStyle({ xfId:0, builtinId:0, @@ -23432,7 +26306,7 @@ function write_STYLES_bin(ba, data) { write_record(ba, "BrtEndStyles"); } -function write_DXFS_bin(ba, data) { +function write_DXFS_bin(ba) { var cnt = 0; write_record(ba, "BrtBeginDXFs", write_UInt32LE(cnt)); @@ -23440,7 +26314,7 @@ function write_DXFS_bin(ba, data) { write_record(ba, "BrtEndDXFs"); } -function write_TABLESTYLES_bin(ba, data) { +function write_TABLESTYLES_bin(ba) { var cnt = 0; write_record(ba, "BrtBeginTableStyles", write_BrtBeginTableStyles(cnt, "TableStyleMedium9", "PivotStyleMedium4")); @@ -23448,7 +26322,7 @@ function write_TABLESTYLES_bin(ba, data) { write_record(ba, "BrtEndTableStyles"); } -function write_COLORPALETTE_bin(ba, data) { +function write_COLORPALETTE_bin() { return; /* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */ } @@ -23473,6 +26347,13 @@ function write_sty_bin(wb, opts) { } RELS.THEME = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"; +/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */ +var XLSXThemeClrScheme = [ + '', '', '', '', + '', '', '', + '', '', '', + '', '' +]; /* 20.1.6.2 clrScheme CT_ColorScheme */ function parse_clrScheme(t, themes, opts) { themes.themeElements.clrScheme = []; @@ -23516,10 +26397,10 @@ function parse_clrScheme(t, themes, opts) { case '': case '': case '': case '': if (y[0].charAt(1) === '/') { - themes.themeElements.clrScheme.push(color); + themes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color; color = {}; } else { - color.name = y[0].substring(3, y[0].length - 1); + color.name = y[0].slice(3, y[0].length - 1); } break; @@ -23529,10 +26410,10 @@ function parse_clrScheme(t, themes, opts) { } /* 20.1.4.1.18 fontScheme CT_FontScheme */ -function parse_fontScheme(t, themes, opts) { } +function parse_fontScheme() { } /* 20.1.4.1.15 fmtScheme CT_StyleMatrix */ -function parse_fmtScheme(t, themes, opts) { } +function parse_fmtScheme() { } var clrsregex = /]*)>[\s\S]*<\/a:clrScheme>/; var fntsregex = /]*)>[\s\S]*<\/a:fontScheme>/; @@ -23570,12 +26451,13 @@ function parse_theme_xml(data, opts) { /* themeElements CT_BaseStyles */ if(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme'); parse_themeElements(t[0], themes, opts); - + themes.raw = data; return themes; } function write_theme(Themes, opts) { if(opts && opts.themeXLSX) return opts.themeXLSX; + if(Themes && typeof Themes.raw == "string") return Themes.raw; var o = [XML_HEADER]; o[o.length] = ''; o[o.length] = ''; @@ -23746,16 +26628,23 @@ function write_theme(Themes, opts) { } /* [MS-XLS] 2.4.326 TODO: payload is a zip file */ function parse_Theme(blob, length, opts) { + var end = blob.l + length; var dwThemeVersion = blob.read_shift(4); if(dwThemeVersion === 124226) return; - blob.l += length-4; + if(!opts.cellStyles) { blob.l = end; return; } + var data = blob.slice(blob.l); + blob.l = end; + var zip; try { zip = zip_read(data, {type: "array"}); } catch(e) { return; } + var themeXML = getzipstr(zip, "theme/theme/theme1.xml", true); + if(!themeXML) return; + return parse_theme_xml(themeXML, opts); } /* 2.5.49 */ -function parse_ColorTheme(blob, length) { return blob.read_shift(4); } +function parse_ColorTheme(blob) { return blob.read_shift(4); } /* 2.5.155 */ -function parse_FullColorExt(blob, length) { +function parse_FullColorExt(blob) { var o = {}; o.xclrType = blob.read_shift(2); o.nTintShade = blob.read_shift(2); @@ -23780,17 +26669,17 @@ function parse_XFExtGradient(blob, length) { return parsenoop(blob, length); } -/* 2.5.108 */ -function parse_ExtProp(blob, length) { +/* [MS-XLS] 2.5.108 */ +function parse_ExtProp(blob) { var extType = blob.read_shift(2); - var cb = blob.read_shift(2); + var cb = blob.read_shift(2) - 4; var o = [extType]; switch(extType) { case 0x04: case 0x05: case 0x07: case 0x08: case 0x09: case 0x0A: case 0x0B: case 0x0D: o[1] = parse_FullColorExt(blob, cb); break; case 0x06: o[1] = parse_XFExtGradient(blob, cb); break; - case 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 5 ? 1 : 2); break; + case 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break; default: throw new Error("Unrecognized ExtProp type: " + extType + " " + cb); } return o; @@ -23820,7 +26709,8 @@ function update_xfext(xf, xfext) { case 0x09: break; /* left cell border color */ case 0x0a: break; /* right cell border color */ case 0x0b: break; /* diagonal cell border color */ - case 0x0d: break; /* text color */ + case 0x0d: /* text color */ + break; case 0x0e: break; /* font scheme */ case 0x0f: break; /* indentation level */ } @@ -23828,10 +26718,10 @@ function update_xfext(xf, xfext) { } /* 18.6 Calculation Chain */ -function parse_cc_xml(data, opts) { +function parse_cc_xml(data) { var d = []; if(!data) return d; - var l = 0, i = 1; + var i = 1; (data.match(tagregex)||[]).forEach(function(x) { var y = parsexmltag(x); switch(y[0]) { @@ -23845,7 +26735,10 @@ function parse_cc_xml(data, opts) { return d; } -function parse_BrtCalcChainItem$(data, length) { +//function write_cc_xml(data, opts) { } + +/* [MS-XLSB] 2.6.4.1 */ +function parse_BrtCalcChainItem$(data) { var out = {}; out.i = data.read_shift(4); var cell = {}; @@ -23859,7 +26752,7 @@ function parse_BrtCalcChainItem$(data, length) { } /* 18.6 Calculation Chain */ -function parse_cc_bin(data, opts) { +function parse_cc_bin(data, name, opts) { var out = []; var pass = false; recordhopper(data, function hopper_cc(val, R_n, RT) { @@ -23870,15 +26763,69 @@ function parse_cc_bin(data, opts) { default: if((R_n||"").indexOf("Begin") > 0){/* empty */} else if((R_n||"").indexOf("End") > 0){/* empty */} - else if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R_n); + else if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R_n); + } + }); + return out; +} + +//function write_cc_bin(data, opts) { } +/* 18.14 Supplementary Workbook Data */ +function parse_xlink_xml() { + //var opts = _opts || {}; + //if(opts.WTF) throw "XLSX External Link"; +} + +/* [MS-XLSB] 2.1.7.25 External Link */ +function parse_xlink_bin(data, rel, name, _opts) { + if(!data) return data; + var opts = _opts || {}; + + var pass = false, end = false; + + recordhopper(data, function xlink_parse(val, R_n, RT) { + if(end) return; + switch(RT) { + case 0x0167: /* 'BrtSupTabs' */ + case 0x016B: /* 'BrtExternTableStart' */ + case 0x016C: /* 'BrtExternTableEnd' */ + case 0x016E: /* 'BrtExternRowHdr' */ + case 0x016F: /* 'BrtExternCellBlank' */ + case 0x0170: /* 'BrtExternCellReal' */ + case 0x0171: /* 'BrtExternCellBool' */ + case 0x0172: /* 'BrtExternCellError' */ + case 0x0173: /* 'BrtExternCellString' */ + case 0x01D8: /* 'BrtExternValueMeta' */ + case 0x0241: /* 'BrtSupNameStart' */ + case 0x0242: /* 'BrtSupNameValueStart' */ + case 0x0243: /* 'BrtSupNameValueEnd' */ + case 0x0244: /* 'BrtSupNameNum' */ + case 0x0245: /* 'BrtSupNameErr' */ + case 0x0246: /* 'BrtSupNameSt' */ + case 0x0247: /* 'BrtSupNameNil' */ + case 0x0248: /* 'BrtSupNameBool' */ + case 0x0249: /* 'BrtSupNameFmla' */ + case 0x024A: /* 'BrtSupNameBits' */ + case 0x024B: /* 'BrtSupNameEnd' */ + break; + + case 0x0023: /* 'BrtFRTBegin' */ + pass = true; break; + case 0x0024: /* 'BrtFRTEnd' */ + pass = false; break; + + default: + if((R_n||"").indexOf("Begin") > 0){/* empty */} + else if((R_n||"").indexOf("End") > 0){/* empty */} + else if(!pass || opts.WTF) throw new Error("Unexpected record " + RT.toString(16) + " " + R_n); } - }); - return out; + }, opts); } - +/* 20.5 DrawingML - SpreadsheetML Drawing */ RELS.IMG = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"; RELS.DRAW = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing"; -/* 20.5 DrawingML - SpreadsheetML Drawing */ + +/* 20.5.2.35 wsDr CT_Drawing */ function parse_drawing(data, rels) { if(!data) return "??"; /* @@ -23913,73 +26860,63 @@ function write_comments_vml(rId, comments) { ]; while(_shapeid < rId * 1000) _shapeid += 1000; - comments.map(function(x) { return decode_cell(x[0]); }).forEach(function(c,i) { o = o.concat([ + comments.forEach(function(x) { + var c = decode_cell(x[0]); + var fillopts = {'color2':"#BEFF82", 'type':"gradient"}; + if(fillopts.type == "gradient") fillopts.angle = "-180"; + var fillparm = fillopts.type == "gradient" ? writextag("o:fill", null, {type:"gradientUnscaled", 'v:ext':"view"}) : null; + var fillxml = writextag('v:fill', fillparm, fillopts); + + var shadata = ({on:"t", 'obscured':"t"}); + ++_shapeid; + + o = o.concat([ '', - writextag('v:fill', writextag("o:fill", null, {type:"gradientUnscaled", 'v:ext':"view"}), {'color2':"#BEFF82", 'angle':"-180", 'type':"gradient"}), - writextag("v:shadow", null, {on:"t", 'obscured':"t"}), + fillxml, + writextag("v:shadow", null, shadata), writextag("v:path", null, {'o:connecttype':"none"}), '
', '', '', '', /* Part 4 19.4.2.3 Anchor (Anchor) */ - writetag('x:Anchor', [c.c, 0, c.r, 0, c.c+3, 100, c.r+5, 100].join(",")), + writetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(",")), writetag('x:AutoFill', "False"), writetag('x:Row', String(c.r)), writetag('x:Column', String(c.c)), - '', + x[1].hidden ? '' : '', '', '' ]); }); o.push(''); return o.join(""); } - RELS.CMNT = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"; -function parse_comments(zip, dirComments, sheets, sheetRels, opts) { - for(var i = 0; i != dirComments.length; ++i) { - var canonicalpath=dirComments[i]; - var comments=parse_cmnt(getzipdata(zip, canonicalpath.replace(/^\//,''), true), canonicalpath, opts); - if(!comments || !comments.length) continue; - // find the sheets targeted by these comments - var sheetNames = keys(sheets); - for(var j = 0; j != sheetNames.length; ++j) { - var sheetName = sheetNames[j]; - var rels = sheetRels[sheetName]; - if(rels) { - var rel = rels[canonicalpath]; - if(rel) insertCommentsIntoSheet(sheetName, sheets[sheetName], comments); - } - } - } -} - -function insertCommentsIntoSheet(sheetName, sheet, comments) { +function sheet_insert_comments(sheet, comments) { var dense = Array.isArray(sheet); - var cell, r; + var cell; comments.forEach(function(comment) { + var r = decode_cell(comment.ref); if(dense) { - r = decode_cell(comment.ref); if(!sheet[r.r]) sheet[r.r] = []; cell = sheet[r.r][r.c]; } else cell = sheet[comment.ref]; if (!cell) { - cell = {}; + cell = ({t:"z"}); if(dense) sheet[r.r][r.c] = cell; else sheet[comment.ref] = cell; var range = safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1"); - var thisCell = decode_cell(comment.ref); - if(range.s.r > thisCell.r) range.s.r = thisCell.r; - if(range.e.r < thisCell.r) range.e.r = thisCell.r; - if(range.s.c > thisCell.c) range.s.c = thisCell.c; - if(range.e.c < thisCell.c) range.e.c = thisCell.c; + if(range.s.r > r.r) range.s.r = r.r; + if(range.e.r < r.r) range.e.r = r.r; + if(range.s.c > r.c) range.s.c = r.c; + if(range.e.c < r.c) range.e.c = r.c; var encoded = encode_range(range); if (encoded !== sheet["!ref"]) sheet["!ref"] = encoded; } @@ -24004,19 +26941,19 @@ function parse_comments_xml(data, opts) { if(a) authors.push(a[1]); }); var cmnttag = data.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/); - if(cmnttag && cmnttag[1]) cmnttag[1].split(/<\/\w*:?comment>/).forEach(function(x, index) { + if(cmnttag && cmnttag[1]) cmnttag[1].split(/<\/\w*:?comment>/).forEach(function(x) { if(x === "" || x.trim() === "") return; var cm = x.match(/<(?:\w+:)?comment[^>]*>/); if(!cm) return; var y = parsexmltag(cm[0]); - var comment = ({ author: y.authorId && authors[y.authorId] ? authors[y.authorId] : "sheetjsghost", ref: y.ref, guid: y.guid }); + var comment = ({ author: y.authorId && authors[y.authorId] || "sheetjsghost", ref: y.ref, guid: y.guid }); var cell = decode_cell(y.ref); if(opts.sheetRows && opts.sheetRows <= cell.r) return; var textMatch = x.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/); var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:"",t:"",h:""}; comment.r = rt.r; if(rt.r == "") rt.t = rt.h = ""; - comment.t = rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"); + comment.t = (rt.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n"); if(opts.cellHTML) comment.h = rt.h; commentList.push(comment); }); @@ -24024,25 +26961,23 @@ function parse_comments_xml(data, opts) { } var CMNT_XML_ROOT = writextag('comments', null, { 'xmlns': XMLNS.main[0] }); -function write_comments_xml(data, opts) { +function write_comments_xml(data) { var o = [XML_HEADER, CMNT_XML_ROOT]; var iauthor = []; o.push(""); - data.map(function(x) { return x[1]; }).forEach(function(comment) { - comment.map(function(x) { return escapexml(x.a); }).forEach(function(a) { - if(iauthor.indexOf(a) > -1) return; - iauthor.push(a); - o.push("" + a + ""); - }); - }); + data.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a); + if(iauthor.indexOf(a) > -1) return; + iauthor.push(a); + o.push("" + a + ""); + }); }); o.push(""); o.push(""); data.forEach(function(d) { d[1].forEach(function(c) { /* 18.7.3 CT_Comment */ o.push(''); - o.push(writetag("t", c.t == null ? "" : c.t)); + o.push(writetag("t", c.t == null ? "" : escapexml(c.t))); o.push(''); }); }); @@ -24051,7 +26986,7 @@ function write_comments_xml(data, opts) { return o.join(""); } /* [MS-XLSB] 2.4.28 BrtBeginComment */ -function parse_BrtBeginComment(data, length) { +function parse_BrtBeginComment(data) { var out = {}; out.iauthor = data.read_shift(4); var rfx = parse_UncheckedRfX(data, 16); @@ -24071,9 +27006,9 @@ function write_BrtBeginComment(data, o) { return o; } -/* [MS-XLSB] 2.4.324 BrtCommentAuthor */ +/* [MS-XLSB] 2.4.327 BrtCommentAuthor */ var parse_BrtCommentAuthor = parse_XLWideString; -function write_BrtCommentAuthor(data) { return write_XLWideString(data.substr(0, 54)); } +function write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); } /* [MS-XLSB] 2.1.7.8 Comments */ function parse_comments_bin(data, opts) { @@ -24091,12 +27026,13 @@ function parse_comments_bin(data, opts) { c.t = val.t; c.h = val.h; c.r = val.r; break; case 0x027C: /* 'BrtEndComment' */ c.author = authors[c.iauthor]; - delete c.iauthor; - if(opts.sheetRows && opts.sheetRows <= c.rfx.r) break; + delete (c).iauthor; + if(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break; if(!c.t) c.t = ""; delete c.rfx; out.push(c); break; - /* case 'BrtUid': */ + case 0x0C00: /* 'BrtUid' */ + break; case 0x0023: /* 'BrtFRTBegin' */ pass = true; break; @@ -24115,56 +27051,83 @@ function parse_comments_bin(data, opts) { return out; } -function write_comments_bin(data, opts) { +function write_comments_bin(data) { var ba = buf_array(); var iauthor = []; write_record(ba, "BrtBeginComments"); - { /* COMMENTAUTHORS */ - write_record(ba, "BrtBeginCommentAuthors"); - data.forEach(function(comment) { - comment[1].forEach(function(c) { - if(iauthor.indexOf(c.a) > -1) return; - iauthor.push(c.a.substr(0,54)); - write_record(ba, "BrtCommentAuthor", write_BrtCommentAuthor(c.a)); - }); + + write_record(ba, "BrtBeginCommentAuthors"); + data.forEach(function(comment) { + comment[1].forEach(function(c) { + if(iauthor.indexOf(c.a) > -1) return; + iauthor.push(c.a.slice(0,54)); + write_record(ba, "BrtCommentAuthor", write_BrtCommentAuthor(c.a)); }); - write_record(ba, "BrtEndCommentAuthors"); - } - { /* COMMENTLIST */ - write_record(ba, "BrtBeginCommentList"); - data.forEach(function(comment) { - comment[1].forEach(function(c) { - c.iauthor = iauthor.indexOf(c.a); - var range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])}; - write_record(ba, "BrtBeginComment", write_BrtBeginComment([range, c])); - if(c.t && c.t.length > 0) write_record(ba, "BrtCommentText", write_BrtCommentText(c)); - write_record(ba, "BrtEndComment"); - delete c.iauthor; - }); + }); + write_record(ba, "BrtEndCommentAuthors"); + + write_record(ba, "BrtBeginCommentList"); + data.forEach(function(comment) { + comment[1].forEach(function(c) { + c.iauthor = iauthor.indexOf(c.a); + var range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])}; + write_record(ba, "BrtBeginComment", write_BrtBeginComment([range, c])); + if(c.t && c.t.length > 0) write_record(ba, "BrtCommentText", write_BrtCommentText(c)); + write_record(ba, "BrtEndComment"); + delete c.iauthor; }); - write_record(ba, "BrtEndCommentList"); - } + }); + write_record(ba, "BrtEndCommentList"); + write_record(ba, "BrtEndComments"); return ba.end(); } +var CT_VBA = "application/vnd.ms-office.vbaProject"; +function make_vba_xls(cfb) { + var newcfb = CFB.utils.cfb_new({root:"R"}); + cfb.FullPaths.forEach(function(p, i) { + if(p.slice(-1) === "/" || !p.match(/_VBA_PROJECT_CUR/)) return; + var newpath = p.replace(/^[^\/]*/,"R").replace(/\/_VBA_PROJECT_CUR\u0000*/, ""); + CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content); + }); + return CFB.write(newcfb); +} + +function fill_vba_xls(cfb, vba) { + vba.FullPaths.forEach(function(p, i) { + if(i == 0) return; + var newpath = p.replace(/[^\/]*[\/]/, "/_VBA_PROJECT_CUR/"); + if(newpath.slice(-1) !== "/") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content); + }); +} + +var VBAFMTS = [ "xlsb", "xlsm", "xlam", "biff8", "xla" ]; + RELS.DS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet"; RELS.MS = "http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet"; /* macro and dialog sheet stubs */ -function parse_ds_bin(data, opts, rels, wb, themes, styles) { return {'!type':'dialog'}; } -function parse_ds_xml(data, opts, rels, wb, themes, styles) { return {'!type':'dialog'}; } -function parse_ms_bin(data, opts, rels, wb, themes, styles) { return {'!type':'macro'}; } -function parse_ms_xml(data, opts, rels, wb, themes, styles) { return {'!type':'macro'}; } +function parse_ds_bin() { return {'!type':'dialog'}; } +function parse_ds_xml() { return {'!type':'dialog'}; } +function parse_ms_bin() { return {'!type':'macro'}; } +function parse_ms_xml() { return {'!type':'macro'}; } /* TODO: it will be useful to parse the function str */ var rc_to_a1 = (function(){ - var rcregex = /(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g; + var rcregex = /(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g; var rcbase = ({r:0,c:0}); - function rcfunc($$,$1,$2,$3,$4,$5) { - var R = $3.length>0?parseInt($3,10)|0:0, C = $5.length>0?parseInt($5,10)|0:0; - if(C<0 && $4.length === 0) C=0; + function rcfunc($$,$1,$2,$3) { var cRel = false, rRel = false; - if($4.length > 0 || $5.length == 0) cRel = true; if(cRel) C += rcbase.c; else --C; - if($2.length > 0 || $3.length == 0) rRel = true; if(rRel) R += rcbase.r; else --R; + + if($2.length == 0) rRel = true; + else if($2.charAt(0) == "[") { rRel = true; $2 = $2.slice(1, -1); } + + if($3.length == 0) cRel = true; + else if($3.charAt(0) == "[") { cRel = true; $3 = $3.slice(1, -1); } + + var R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0; + + if(cRel) C += rcbase.c; else --C; + if(rRel) R += rcbase.r; else --R; return $1 + (cRel ? "" : "$") + encode_col(C) + (rRel ? "" : "$") + encode_row(R); } return function rc_to_a1(fstr, base) { @@ -24173,21 +27136,22 @@ var rc_to_a1 = (function(){ }; })(); -var crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)([1-9]\d{0,5}|10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6])(?![_.\(A-Za-z0-9])/g; +var crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g; var a1_to_rc =(function(){ return function a1_to_rc(fstr, base) { - return fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5, off, str) { - /* TODO: handle fixcol / fixrow */ - var c = decode_col($3) - base.c; - var r = decode_row($5) - base.r; - return $1 + "R" + (r == 0 ? "" : "[" + r + "]") + "C" + (c == 0 ? "" : "[" + c + "]"); + return fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) { + var c = decode_col($3) - ($2 ? 0 : base.c); + var r = decode_row($5) - ($4 ? 0 : base.r); + var R = (r == 0 ? "" : !$4 ? "[" + r + "]" : (r+1)); + var C = (c == 0 ? "" : !$2 ? "[" + c + "]" : (c+1)); + return $1 + "R" + R + "C" + C; }); }; })(); /* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */ function shift_formula_str(f, delta) { - return f.replace(crefregex, function($0, $1, $2, $3, $4, $5, off, str) { + return f.replace(crefregex, function($0, $1, $2, $3, $4, $5) { return $1+($2=="$" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4=="$" ? $4+$5 : encode_row(decode_row($5) + delta.r)); }); } @@ -24197,20 +27161,25 @@ function shift_formula_xlsx(f, range, cell) { var delta = {r:c.r - s.r, c:c.c - s.c}; return shift_formula_str(f, delta); } -/* --- formula references point to MS-XLS --- */ -/* Small helpers */ -function parseread1(blob) { blob.l+=1; return; } -/* Rgce Helpers */ +/* TODO: parse formula */ +function fuzzyfmla(f) { + if(f.length == 1) return false; + return true; +} + +function _xlfn(f) { + return f.replace(/_xlfn\./g,""); +} +function parseread1(blob) { blob.l+=1; return; } -/* 2.5.51 */ +/* [MS-XLS] 2.5.51 */ function parse_ColRelU(blob, length) { var c = blob.read_shift(length == 1 ? 1 : 2); return [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1]; } -/* [MS-XLS] 2.5.198.105 */ -/* [MS-XLSB] 2.5.97.89 */ +/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */ function parse_RgceArea(blob, length, opts) { var w = 2; if(opts) { @@ -24230,41 +27199,48 @@ function parse_RgceArea_BIFF2(blob) { return { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} }; } -/* 2.5.198.105 TODO */ -function parse_RgceAreaRel(blob, length) { - var r=blob.read_shift(length == 12 ? 4 : 2), R=blob.read_shift(length == 12 ? 4 : 2); +/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */ +function parse_RgceAreaRel(blob, length, opts) { + if(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts); + var r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2); var c=parse_ColRelU(blob, 2); var C=parse_ColRelU(blob, 2); return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} }; } -/* 2.5.198.109 */ +/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */ function parse_RgceLoc(blob, length, opts) { if(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts); var r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2); var c = parse_ColRelU(blob, 2); return {r:r, c:c[0], cRel:c[1], rRel:c[2]}; } -function parse_RgceLoc_BIFF2(blob, length, opts) { +function parse_RgceLoc_BIFF2(blob) { var r = parse_ColRelU(blob, 2); var c = blob.read_shift(1); return {r:r[0], c:c, cRel:r[1], rRel:r[2]}; } -/* [MS-XLS] 2.5.198.111 TODO */ -/* [MS-XLSB] 2.5.97.92 TODO */ +/* [MS-XLS] 2.5.198.107, 2.5.47 */ +function parse_RgceElfLoc(blob) { + var r = blob.read_shift(2); + var c = blob.read_shift(2); + return {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 }; +} + +/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */ function parse_RgceLocRel(blob, length, opts) { var biff = opts && opts.biff ? opts.biff : 8; if(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts); var r = blob.read_shift(biff >= 12 ? 4 : 2); var cl = blob.read_shift(2); - var cRel = (cl & 0x8000) >> 15, rRel = (cl & 0x4000) >> 14; + var cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15; cl &= 0x3FFF; if(rRel == 1) while(r > 0x7FFFF) r -= 0x100000; if(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000; return {r:r,c:cl,cRel:cRel,rRel:rRel}; } -function parse_RgceLocRel_BIFF2(blob, length) { +function parse_RgceLocRel_BIFF2(blob) { var rl = blob.read_shift(2); var c = blob.read_shift(1); var rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14; @@ -24274,17 +27250,14 @@ function parse_RgceLocRel_BIFF2(blob, length) { return {r:rl,c:c,cRel:cRel,rRel:rRel}; } -/* Ptg Tokens */ - -/* 2.5.198.27 */ +/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */ function parse_PtgArea(blob, length, opts) { var type = (blob[blob.l++] & 0x60) >> 5; var area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts); return [type, area]; } -/* [MS-XLS] 2.5.198.28 */ -/* [MS-XLSB] 2.5.97.19 */ +/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */ function parse_PtgArea3d(blob, length, opts) { var type = (blob[blob.l++] & 0x60) >> 5; var ixti = blob.read_shift(2, 'i'); @@ -24297,13 +27270,13 @@ function parse_PtgArea3d(blob, length, opts) { return [type, ixti, area]; } -/* 2.5.198.29 */ +/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */ function parse_PtgAreaErr(blob, length, opts) { var type = (blob[blob.l++] & 0x60) >> 5; - blob.l += opts && opts.biff > 8 ? 12 : 8; + blob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8); return [type]; } -/* 2.5.198.30 */ +/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */ function parse_PtgAreaErr3d(blob, length, opts) { var type = (blob[blob.l++] & 0x60) >> 5; var ixti = blob.read_shift(2); @@ -24316,30 +27289,29 @@ function parse_PtgAreaErr3d(blob, length, opts) { return [type, ixti]; } -/* 2.5.198.31 */ +/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */ function parse_PtgAreaN(blob, length, opts) { var type = (blob[blob.l++] & 0x60) >> 5; - var area = parse_RgceAreaRel(blob, opts && opts.biff > 8 ? 12 : 8, opts); + var area = parse_RgceAreaRel(blob, length - 1, opts); return [type, area]; } -/* [MS-XLS] 2.5.198.32 */ -/* [MS-XLSB] 2.5.97.23 */ +/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */ function parse_PtgArray(blob, length, opts) { var type = (blob[blob.l++] & 0x60) >> 5; blob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7; return [type]; } -/* 2.5.198.33 */ -function parse_PtgAttrBaxcel(blob, length) { +/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */ +function parse_PtgAttrBaxcel(blob) { var bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */ var bitBaxcel = 1; blob.l += 4; return [bitSemi, bitBaxcel]; } -/* 2.5.198.34 */ +/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */ function parse_PtgAttrChoose(blob, length, opts) { blob.l +=2; var offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2); @@ -24349,14 +27321,14 @@ function parse_PtgAttrChoose(blob, length, opts) { return o; } -/* 2.5.198.35 */ +/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */ function parse_PtgAttrGoto(blob, length, opts) { var bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0; blob.l += 2; return [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)]; } -/* 2.5.198.36 */ +/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */ function parse_PtgAttrIf(blob, length, opts) { var bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0; blob.l += 2; @@ -24364,47 +27336,47 @@ function parse_PtgAttrIf(blob, length, opts) { } /* [MS-XLSB] 2.5.97.28 */ -function parse_PtgAttrIfError(blob, length) { +function parse_PtgAttrIfError(blob) { var bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0; blob.l += 2; return [bitIf, blob.read_shift(2)]; } -/* 2.5.198.37 */ +/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */ function parse_PtgAttrSemi(blob, length, opts) { var bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0; blob.l += opts && opts.biff == 2 ? 3 : 4; return [bitSemi]; } -/* 2.5.198.40 (used by PtgAttrSpace and PtgAttrSpaceSemi) */ -function parse_PtgAttrSpaceType(blob, length) { +/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */ +function parse_PtgAttrSpaceType(blob) { var type = blob.read_shift(1), cch = blob.read_shift(1); return [type, cch]; } -/* 2.5.198.38 */ -function parse_PtgAttrSpace(blob, length) { +/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */ +function parse_PtgAttrSpace(blob) { blob.read_shift(2); return parse_PtgAttrSpaceType(blob, 2); } -/* 2.5.198.39 */ -function parse_PtgAttrSpaceSemi(blob, length) { +/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */ +function parse_PtgAttrSpaceSemi(blob) { blob.read_shift(2); return parse_PtgAttrSpaceType(blob, 2); } -/* 2.5.198.84 TODO */ +/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */ function parse_PtgRef(blob, length, opts) { - var ptg = blob[blob.l] & 0x1F; + //var ptg = blob[blob.l] & 0x1F; var type = (blob[blob.l] & 0x60)>>5; blob.l += 1; var loc = parse_RgceLoc(blob, 0, opts); return [type, loc]; } -/* 2.5.198.88 TODO */ +/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */ function parse_PtgRefN(blob, length, opts) { var type = (blob[blob.l] & 0x60)>>5; blob.l += 1; @@ -24412,44 +27384,42 @@ function parse_PtgRefN(blob, length, opts) { return [type, loc]; } -/* 2.5.198.85 TODO */ +/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */ function parse_PtgRef3d(blob, length, opts) { var type = (blob[blob.l] & 0x60)>>5; blob.l += 1; var ixti = blob.read_shift(2); // XtiIndex + if(opts && opts.biff == 5) blob.l += 12; var loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel return [type, ixti, loc]; } -/* 2.5.198.62 TODO */ +/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */ function parse_PtgFunc(blob, length, opts) { - var ptg = blob[blob.l] & 0x1F; + //var ptg = blob[blob.l] & 0x1F; var type = (blob[blob.l] & 0x60)>>5; blob.l += 1; var iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2); return [FtabArgc[iftab], Ftab[iftab], type]; } -/* 2.5.198.63 TODO */ +/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */ function parse_PtgFuncVar(blob, length, opts) { - blob.l++; - var cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [0, blob.read_shift(1)]: parsetab(blob); + var type = blob[blob.l++]; + var cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob); return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]]; } -function parsetab(blob, length) { +function parsetab(blob) { return [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF]; } -/* 2.5.198.41 */ +/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */ function parse_PtgAttrSum(blob, length, opts) { blob.l += opts && opts.biff == 2 ? 3 : 4; return; } -/* 2.5.198.43 */ -var parse_PtgConcat = parseread1; - -/* 2.5.198.58 */ +/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */ function parse_PtgExp(blob, length, opts) { blob.l++; if(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0]; @@ -24458,19 +27428,19 @@ function parse_PtgExp(blob, length, opts) { return [row, col]; } -/* 2.5.198.57 */ -function parse_PtgErr(blob, length) { blob.l++; return BErr[blob.read_shift(1)]; } +/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */ +function parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; } -/* 2.5.198.66 */ -function parse_PtgInt(blob, length) { blob.l++; return blob.read_shift(2); } +/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */ +function parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); } -/* 2.5.198.42 */ -function parse_PtgBool(blob, length) { blob.l++; return blob.read_shift(1)!==0;} +/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */ +function parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;} -/* 2.5.198.79 */ -function parse_PtgNum(blob, length) { blob.l++; return parse_Xnum(blob, 8); } +/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */ +function parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); } -/* 2.5.198.89 */ +/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */ function parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); } /* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */ @@ -24484,37 +27454,33 @@ function parse_SerAr(blob, biff) { case 0x01: val[0] = 0x02; break; /* SerStr */ } switch(val[0]) { - /* 2.5.192.113 */ case 0x04: /* SerBool -- boolean */ val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE'; - blob.l += 7; break; - /* 2.5.192.114 */ + if(biff != 12) blob.l += 7; break; + case 0x25: /* appears to be an alias */ case 0x10: /* SerErr -- error */ val[1] = BErr[blob[blob.l]]; - blob.l += 8; break; - /* 2.5.192.115 */ + blob.l += ((biff == 12) ? 4 : 8); break; case 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */ blob.l += 8; break; - /* 2.5.192.116 */ case 0x01: /* SerNum -- Xnum */ val[1] = parse_Xnum(blob, 8); break; - /* 2.5.192.117 */ case 0x02: /* SerStr -- XLUnicodeString (<256 chars) */ val[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break; - // default: throw "Bad SerAr: " + val[0]; /* Unreachable */ + default: throw new Error("Bad SerAr: " + val[0]); /* Unreachable */ } return val; } -/* 2.5.198.61 */ -function parse_PtgExtraMem(blob, cce) { - var count = blob.read_shift(2); +/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */ +function parse_PtgExtraMem(blob, cce, opts) { + var count = blob.read_shift((opts.biff == 12) ? 4 : 2); var out = []; - for(var i = 0; i != count; ++i) out.push(parse_Ref8U(blob, 8)); + for(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8)); return out; } -/* 2.5.198.59 */ +/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */ function parse_PtgExtraArray(blob, length, opts) { var rows = 0, cols = 0; if(opts.biff == 12) { @@ -24526,12 +27492,12 @@ function parse_PtgExtraArray(blob, length, opts) { } if(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; } // $FlowIgnore - for(var i = 0, o=[]; i != rows && (o[i] = []); ++i) + for(var i = 0, o = []; i != rows && (o[i] = []); ++i) for(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff); return o; } -/* 2.5.198.76 */ +/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */ function parse_PtgName(blob, length, opts) { var type = (blob.read_shift(1) >>> 5) & 0x03; var w = (!opts || (opts.biff >= 8)) ? 4 : 2; @@ -24544,7 +27510,7 @@ function parse_PtgName(blob, length, opts) { return [type, 0, nameindex]; } -/* 2.5.198.77 */ +/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */ function parse_PtgNameX(blob, length, opts) { if(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts); var type = (blob.read_shift(1) >>> 5) & 0x03; @@ -24552,7 +27518,7 @@ function parse_PtgNameX(blob, length, opts) { var nameindex = blob.read_shift(4); return [type, ixti, nameindex]; } -function parse_PtgNameX_BIFF5(blob, length, opts) { +function parse_PtgNameX_BIFF5(blob) { var type = (blob.read_shift(1) >>> 5) & 0x03; var ixti = blob.read_shift(2, 'i'); // XtiIndex blob.l += 8; @@ -24561,7 +27527,7 @@ function parse_PtgNameX_BIFF5(blob, length, opts) { return [type, ixti, nameindex]; } -/* 2.5.198.70 */ +/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */ function parse_PtgMemArea(blob, length, opts) { var type = (blob.read_shift(1) >>> 5) & 0x03; blob.l += (opts && opts.biff == 2 ? 3 : 4); @@ -24569,7 +27535,7 @@ function parse_PtgMemArea(blob, length, opts) { return [type, cce]; } -/* 2.5.198.72 */ +/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */ function parse_PtgMemFunc(blob, length, opts) { var type = (blob.read_shift(1) >>> 5) & 0x03; var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2); @@ -24577,98 +27543,156 @@ function parse_PtgMemFunc(blob, length, opts) { } -/* 2.5.198.86 */ +/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */ function parse_PtgRefErr(blob, length, opts) { var type = (blob.read_shift(1) >>> 5) & 0x03; blob.l += 4; + if(opts.biff < 8) blob.l--; if(opts.biff == 12) blob.l += 2; return [type]; } -/* 2.5.198.87 */ +/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */ function parse_PtgRefErr3d(blob, length, opts) { var type = (blob[blob.l++] & 0x60) >> 5; var ixti = blob.read_shift(2); var w = 4; if(opts) switch(opts.biff) { - case 5: throw new Error("PtgRefErr3d -- 5"); // TODO: find test case + case 5: w = 15; break; case 12: w = 6; break; } blob.l += w; return [type, ixti]; } -/* 2.5.198.26 */ -var parse_PtgAdd = parseread1; -/* 2.5.198.45 */ -var parse_PtgDiv = parseread1; -/* 2.5.198.56 */ -var parse_PtgEq = parseread1; -/* 2.5.198.64 */ -var parse_PtgGe = parseread1; -/* 2.5.198.65 */ -var parse_PtgGt = parseread1; -/* 2.5.198.67 */ -var parse_PtgIsect = parseread1; -/* 2.5.198.68 */ -var parse_PtgLe = parseread1; -/* 2.5.198.69 */ -var parse_PtgLt = parseread1; -/* 2.5.198.74 */ -var parse_PtgMissArg = parseread1; -/* 2.5.198.75 */ -var parse_PtgMul = parseread1; -/* 2.5.198.78 */ -var parse_PtgNe = parseread1; -/* 2.5.198.80 */ -var parse_PtgParen = parseread1; -/* 2.5.198.81 */ -var parse_PtgPercent = parseread1; -/* 2.5.198.82 */ -var parse_PtgPower = parseread1; -/* 2.5.198.83 */ -var parse_PtgRange = parseread1; -/* 2.5.198.90 */ -var parse_PtgSub = parseread1; -/* 2.5.198.93 */ -var parse_PtgUminus = parseread1; -/* 2.5.198.94 */ -var parse_PtgUnion = parseread1; -/* 2.5.198.95 */ -var parse_PtgUplus = parseread1; - -/* 2.5.198.71 */ +/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */ var parse_PtgMemErr = parsenoop; -/* 2.5.198.73 */ +/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */ var parse_PtgMemNoMem = parsenoop; -/* 2.5.198.92 */ +/* [MS-XLS] 2.5.198.92 */ var parse_PtgTbl = parsenoop; -/* 2.5.198.25 */ +function parse_PtgElfLoc(blob, length, opts) { + blob.l += 2; + return [parse_RgceElfLoc(blob, 4, opts)]; +} +function parse_PtgElfNoop(blob) { + blob.l += 6; + return []; +} +/* [MS-XLS] 2.5.198.46 */ +var parse_PtgElfCol = parse_PtgElfLoc; +/* [MS-XLS] 2.5.198.47 */ +var parse_PtgElfColS = parse_PtgElfNoop; +/* [MS-XLS] 2.5.198.48 */ +var parse_PtgElfColSV = parse_PtgElfNoop; +/* [MS-XLS] 2.5.198.49 */ +var parse_PtgElfColV = parse_PtgElfLoc; +/* [MS-XLS] 2.5.198.50 */ +function parse_PtgElfLel(blob) { + blob.l += 2; + return [parseuint16(blob), blob.read_shift(2) & 0x01]; +} +/* [MS-XLS] 2.5.198.51 */ +var parse_PtgElfRadical = parse_PtgElfLoc; +/* [MS-XLS] 2.5.198.52 */ +var parse_PtgElfRadicalLel = parse_PtgElfLel; +/* [MS-XLS] 2.5.198.53 */ +var parse_PtgElfRadicalS = parse_PtgElfNoop; +/* [MS-XLS] 2.5.198.54 */ +var parse_PtgElfRw = parse_PtgElfLoc; +/* [MS-XLS] 2.5.198.55 */ +var parse_PtgElfRwV = parse_PtgElfLoc; + +/* [MS-XLSB] 2.5.97.52 TODO */ +var PtgListRT = [ + "Data", + "All", + "Headers", + "??", + "?Data2", + "??", + "?DataHeaders", + "??", + "Totals", + "??", + "??", + "??", + "?DataTotals", + "??", + "??", + "??", + "?Current" +]; +function parse_PtgList(blob) { + blob.l += 2; + var ixti = blob.read_shift(2); + var flags = blob.read_shift(2); + var idx = blob.read_shift(4); + var c = blob.read_shift(2); + var C = blob.read_shift(2); + var rt = PtgListRT[(flags >> 2) & 0x1F]; + return {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C}; +} +/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */ +function parse_PtgSxName(blob) { + blob.l += 2; + return [blob.read_shift(4)]; +} + +/* [XLS] old spec */ +function parse_PtgSheet(blob, length, opts) { + blob.l += 5; + blob.l += 2; + blob.l += (opts.biff == 2 ? 1 : 4); + return ["PTGSHEET"]; +} +function parse_PtgEndSheet(blob, length, opts) { + blob.l += (opts.biff == 2 ? 4 : 5); + return ["PTGENDSHEET"]; +} +function parse_PtgMemAreaN(blob) { + var type = (blob.read_shift(1) >>> 5) & 0x03; + var cce = blob.read_shift(2); + return [type, cce]; +} +function parse_PtgMemNoMemN(blob) { + var type = (blob.read_shift(1) >>> 5) & 0x03; + var cce = blob.read_shift(2); + return [type, cce]; +} +function parse_PtgAttrNoop(blob) { + blob.l += 4; + return [0, 0]; +} + +/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */ var PtgTypes = { 0x01: { n:'PtgExp', f:parse_PtgExp }, 0x02: { n:'PtgTbl', f:parse_PtgTbl }, -0x03: { n:'PtgAdd', f:parse_PtgAdd }, -0x04: { n:'PtgSub', f:parse_PtgSub }, -0x05: { n:'PtgMul', f:parse_PtgMul }, -0x06: { n:'PtgDiv', f:parse_PtgDiv }, -0x07: { n:'PtgPower', f:parse_PtgPower }, -0x08: { n:'PtgConcat', f:parse_PtgConcat }, -0x09: { n:'PtgLt', f:parse_PtgLt }, -0x0A: { n:'PtgLe', f:parse_PtgLe }, -0x0B: { n:'PtgEq', f:parse_PtgEq }, -0x0C: { n:'PtgGe', f:parse_PtgGe }, -0x0D: { n:'PtgGt', f:parse_PtgGt }, -0x0E: { n:'PtgNe', f:parse_PtgNe }, -0x0F: { n:'PtgIsect', f:parse_PtgIsect }, -0x10: { n:'PtgUnion', f:parse_PtgUnion }, -0x11: { n:'PtgRange', f:parse_PtgRange }, -0x12: { n:'PtgUplus', f:parse_PtgUplus }, -0x13: { n:'PtgUminus', f:parse_PtgUminus }, -0x14: { n:'PtgPercent', f:parse_PtgPercent }, -0x15: { n:'PtgParen', f:parse_PtgParen }, -0x16: { n:'PtgMissArg', f:parse_PtgMissArg }, +0x03: { n:'PtgAdd', f:parseread1 }, +0x04: { n:'PtgSub', f:parseread1 }, +0x05: { n:'PtgMul', f:parseread1 }, +0x06: { n:'PtgDiv', f:parseread1 }, +0x07: { n:'PtgPower', f:parseread1 }, +0x08: { n:'PtgConcat', f:parseread1 }, +0x09: { n:'PtgLt', f:parseread1 }, +0x0A: { n:'PtgLe', f:parseread1 }, +0x0B: { n:'PtgEq', f:parseread1 }, +0x0C: { n:'PtgGe', f:parseread1 }, +0x0D: { n:'PtgGt', f:parseread1 }, +0x0E: { n:'PtgNe', f:parseread1 }, +0x0F: { n:'PtgIsect', f:parseread1 }, +0x10: { n:'PtgUnion', f:parseread1 }, +0x11: { n:'PtgRange', f:parseread1 }, +0x12: { n:'PtgUplus', f:parseread1 }, +0x13: { n:'PtgUminus', f:parseread1 }, +0x14: { n:'PtgPercent', f:parseread1 }, +0x15: { n:'PtgParen', f:parseread1 }, +0x16: { n:'PtgMissArg', f:parseread1 }, 0x17: { n:'PtgStr', f:parse_PtgStr }, +0x1A: { n:'PtgSheet', f:parse_PtgSheet }, +0x1B: { n:'PtgEndSheet', f:parse_PtgEndSheet }, 0x1C: { n:'PtgErr', f:parse_PtgErr }, 0x1D: { n:'PtgBool', f:parse_PtgBool }, 0x1E: { n:'PtgInt', f:parse_PtgInt }, @@ -24687,6 +27711,8 @@ var PtgTypes = { 0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr }, 0x2C: { n:'PtgRefN', f:parse_PtgRefN }, 0x2D: { n:'PtgAreaN', f:parse_PtgAreaN }, +0x2E: { n:'PtgMemAreaN', f:parse_PtgMemAreaN }, +0x2F: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN }, 0x39: { n:'PtgNameX', f:parse_PtgNameX }, 0x3A: { n:'PtgRef3d', f:parse_PtgRef3d }, 0x3B: { n:'PtgArea3d', f:parse_PtgArea3d }, @@ -24710,6 +27736,9 @@ var PtgDupes = { 0x4B: 0x2B, 0x6B: 0x2B, 0x4C: 0x2C, 0x6C: 0x2C, 0x4D: 0x2D, 0x6D: 0x2D, +0x4E: 0x2E, 0x6E: 0x2E, +0x4F: 0x2F, 0x6F: 0x2F, +0x58: 0x22, 0x78: 0x22, 0x59: 0x39, 0x79: 0x39, 0x5A: 0x3A, 0x7A: 0x3A, 0x5B: 0x3B, 0x7B: 0x3B, @@ -24719,10 +27748,22 @@ var PtgDupes = { (function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})(); var Ptg18 = { -// 0x19: { n:'PtgList', f:parse_PtgList }, // TODO -// 0x1D: { n:'PtgSxName', f:parse_PtgSxName }, // TODO +0x01: { n:'PtgElfLel', f:parse_PtgElfLel }, +0x02: { n:'PtgElfRw', f:parse_PtgElfRw }, +0x03: { n:'PtgElfCol', f:parse_PtgElfCol }, +0x06: { n:'PtgElfRwV', f:parse_PtgElfRwV }, +0x07: { n:'PtgElfColV', f:parse_PtgElfColV }, +0x0A: { n:'PtgElfRadical', f:parse_PtgElfRadical }, +0x0B: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS }, +0x0D: { n:'PtgElfColS', f:parse_PtgElfColS }, +0x0F: { n:'PtgElfColSV', f:parse_PtgElfColSV }, +0x10: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel }, +0x19: { n:'PtgList', f:parse_PtgList }, +0x1D: { n:'PtgSxName', f:parse_PtgSxName }, +0xFF: {} }; var Ptg19 = { +0x00: { n:'PtgAttrNoop', f:parse_PtgAttrNoop }, 0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi }, 0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf }, 0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose }, @@ -24734,38 +27775,9 @@ var Ptg19 = { 0x80: { n:'PtgAttrIfError', f:parse_PtgAttrIfError }, 0xFF: {} }; +Ptg19[0x21] = Ptg19[0x20]; -/* 2.4.127 TODO */ -function parse_Formula(blob, length, opts) { - var end = blob.l + length; - var cell = parse_XLSCell(blob, 6); - if(opts.biff == 2) ++blob.l; - var val = parse_FormulaValue(blob,8); - var flags = blob.read_shift(1); - if(opts.biff != 2) { - blob.read_shift(1); - if(opts.biff >= 5) { - var chn = blob.read_shift(4); - } - } - var cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts); - return {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]}; -} - -/* 2.5.133 TODO: how to emit empty strings? */ -function parse_FormulaValue(blob) { - var b; - if(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n']; - switch(blob[blob.l]) { - case 0x00: blob.l += 8; return ["String", 's']; - case 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b']; - case 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e']; - case 0x03: blob.l += 8; return ["",'s']; - } - return []; -} - -/* 2.5.198.103 */ +/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */ function parse_RgbExtra(blob, length, rgce, opts) { if(opts.biff < 8) return parsenoop(blob, length); var target = blob.l + length; @@ -24777,7 +27789,7 @@ function parse_RgbExtra(blob, length, rgce, opts) { o.push(rgce[i][1]); break; case 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */ - rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1]); + rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts); o.push(rgce[i][2]); break; case 'PtgExp': /* PtgExp -> PtgExtraCol */ @@ -24785,6 +27797,11 @@ function parse_RgbExtra(blob, length, rgce, opts) { rgce[i][1][1] = blob.read_shift(4); o.push(rgce[i][1]); } break; + case 'PtgList': /* TODO: PtgList -> PtgExtraList */ + case 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */ + case 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */ + case 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */ + throw "Unsupported " + rgce[i][0]; default: break; } } @@ -24795,46 +27812,7 @@ function parse_RgbExtra(blob, length, rgce, opts) { return o; } -/* 2.5.198.21 */ -function parse_NameParsedFormula(blob, length, opts, cce) { - var target = blob.l + length; - var rgce = parse_Rgce(blob, cce, opts); - var rgcb; - if(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts); - return [rgce, rgcb]; -} - -/* 2.5.198.3 TODO */ -function parse_XLSCellParsedFormula(blob, length, opts) { - var target = blob.l + length, len = opts.biff == 2 ? 1 : 2; - var rgcb, cce = blob.read_shift(len); // length of rgce - if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; - var rgce = parse_Rgce(blob, cce, opts); - if(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts); - return [rgce, rgcb]; -} - -/* 2.5.198.118 TODO */ -function parse_SharedParsedFormula(blob, length, opts) { - var target = blob.l + length; - var rgcb, cce = blob.read_shift(2); // length of rgce - var rgce = parse_Rgce(blob, cce, opts); - if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; - if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts); - return [rgce, rgcb]; -} - -/* 2.5.198.1 TODO */ -function parse_ArrayParsedFormula(blob, length, opts, ref) { - var target = blob.l + length, len = opts.biff == 2 ? 1 : 2; - var rgcb, cce = blob.read_shift(len); // length of rgce - if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; - var rgce = parse_Rgce(blob, cce, opts); - if(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts); - return [rgce, rgcb]; -} - -/* 2.5.198.104 */ +/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */ function parse_Rgce(blob, length, opts) { var target = blob.l + length; var R, id, ptgs = []; @@ -24842,12 +27820,8 @@ function parse_Rgce(blob, length, opts) { length = target - blob.l; id = blob[blob.l]; R = PtgTypes[id]; - if(id === 0x18 || id === 0x19) { - id = blob[blob.l + 1]; - R = (id === 0x18 ? Ptg18 : Ptg19)[id]; - } + if(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]]; if(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); } - // $FlowIgnore else { ptgs.push([R.n, R.f(blob, length, opts)]); } } return ptgs; @@ -24871,8 +27845,7 @@ r.push('"' + y[1].replace(/"/g,'""') + '"'); break; return o.join(";"); } -/* [MS-XLS] 2.2.2 TODO */ -/* [MS-XLSB] 2.2.2 */ +/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */ var PtgBinOp = { PtgAdd: "+", PtgConcat: "&", @@ -24887,39 +27860,80 @@ var PtgBinOp = { PtgPower: "^", PtgSub: "-" }; + +// List of invalid characters needs to be tested further +var quoteCharacters = new RegExp(/[^\w\u4E00-\u9FFF\u3040-\u30FF]/); +function formula_quote_sheet_name(sname, opts) { + if(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error("empty sheet name"); + if (quoteCharacters.test(sname)) return "'" + sname + "'"; + return sname; +} +function get_ixti_raw(supbooks, ixti, opts) { + if(!supbooks) return "SH33TJSERR0"; + if(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti]; + if(!supbooks.XTI) return "SH33TJSERR6"; + var XTI = supbooks.XTI[ixti]; + if(opts.biff < 8) { + if(ixti > 10000) ixti-= 65536; + if(ixti < 0) ixti = -ixti; + return ixti == 0 ? "" : supbooks.XTI[ixti - 1]; + } + if(!XTI) return "SH33TJSERR1"; + var o = ""; + if(opts.biff > 8) switch(supbooks[XTI[0]][0]) { + case 0x0165: /* 'BrtSupSelf' */ + o = XTI[1] == -1 ? "#REF" : supbooks.SheetNames[XTI[1]]; + return XTI[1] == XTI[2] ? o : o + ":" + supbooks.SheetNames[XTI[2]]; + case 0x0166: /* 'BrtSupSame' */ + if(opts.SID != null) return supbooks.SheetNames[opts.SID]; + return "SH33TJSSAME" + supbooks[XTI[0]][0]; + case 0x0163: /* 'BrtSupBookSrc' */ + /* falls through */ + default: return "SH33TJSSRC" + supbooks[XTI[0]][0]; + } + switch(supbooks[XTI[0]][0][0]) { + case 0x0401: + o = XTI[1] == -1 ? "#REF" : (supbooks.SheetNames[XTI[1]] || "SH33TJSERR3"); + return XTI[1] == XTI[2] ? o : o + ":" + supbooks.SheetNames[XTI[2]]; + case 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(";;"); //return "SH33TJSERR8"; + default: + if(!supbooks[XTI[0]][0][3]) return "SH33TJSERR2"; + o = XTI[1] == -1 ? "#REF" : (supbooks[XTI[0]][0][3][XTI[1]] || "SH33TJSERR4"); + return XTI[1] == XTI[2] ? o : o + ":" + supbooks[XTI[0]][0][3][XTI[2]]; + } +} function get_ixti(supbooks, ixti, opts) { - return supbooks.SheetNames[ixti]; + var ixtiraw = get_ixti_raw(supbooks, ixti, opts); + return ixtiraw == "#REF" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts); } function stringify_formula(formula/*Array*/, range, cell, supbooks, opts) { - //console.log(formula); + var biff = (opts && opts.biff) || 8; var _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}}; - var stack = [], e1, e2, type, c, ixti=0, nameidx=0, r, sname=""; + var stack = [], e1, e2, c, ixti=0, nameidx=0, r, sname=""; if(!formula[0] || !formula[0][0]) return ""; var last_sp = -1, sp = ""; - //console.log("--",cell,formula[0]) for(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) { var f = formula[0][ff]; - //console.log("++",f, stack) switch(f[0]) { - case 'PtgUminus': /* 2.5.198.93 */ + case 'PtgUminus': /* [MS-XLS] 2.5.198.93 */ stack.push("-" + stack.pop()); break; - case 'PtgUplus': /* 2.5.198.95 */ + case 'PtgUplus': /* [MS-XLS] 2.5.198.95 */ stack.push("+" + stack.pop()); break; - case 'PtgPercent': /* 2.5.198.81 */ + case 'PtgPercent': /* [MS-XLS] 2.5.198.81 */ stack.push(stack.pop() + "%"); break; - case 'PtgAdd': /* 2.5.198.26 */ - case 'PtgConcat': /* 2.5.198.43 */ - case 'PtgDiv': /* 2.5.198.45 */ - case 'PtgEq': /* 2.5.198.56 */ - case 'PtgGe': /* 2.5.198.64 */ - case 'PtgGt': /* 2.5.198.65 */ - case 'PtgLe': /* 2.5.198.68 */ - case 'PtgLt': /* 2.5.198.69 */ - case 'PtgMul': /* 2.5.198.75 */ - case 'PtgNe': /* 2.5.198.78 */ - case 'PtgPower': /* 2.5.198.82 */ - case 'PtgSub': /* 2.5.198.90 */ + case 'PtgAdd': /* [MS-XLS] 2.5.198.26 */ + case 'PtgConcat': /* [MS-XLS] 2.5.198.43 */ + case 'PtgDiv': /* [MS-XLS] 2.5.198.45 */ + case 'PtgEq': /* [MS-XLS] 2.5.198.56 */ + case 'PtgGe': /* [MS-XLS] 2.5.198.64 */ + case 'PtgGt': /* [MS-XLS] 2.5.198.65 */ + case 'PtgLe': /* [MS-XLS] 2.5.198.68 */ + case 'PtgLt': /* [MS-XLS] 2.5.198.69 */ + case 'PtgMul': /* [MS-XLS] 2.5.198.75 */ + case 'PtgNe': /* [MS-XLS] 2.5.198.78 */ + case 'PtgPower': /* [MS-XLS] 2.5.198.82 */ + case 'PtgSub': /* [MS-XLS] 2.5.198.90 */ e1 = stack.pop(); e2 = stack.pop(); if(last_sp >= 0) { switch(formula[0][last_sp][1][0]) { @@ -24940,106 +27954,105 @@ function stringify_formula(formula/*Array*/, range, cell, supbooks, opts) { stack.push(e2+PtgBinOp[f[0]]+e1); break; - case 'PtgIsect': /* 2.5.198.67 */ + case 'PtgIsect': /* [MS-XLS] 2.5.198.67 */ e1 = stack.pop(); e2 = stack.pop(); stack.push(e2+" "+e1); break; - case 'PtgUnion': /* 2.5.198.94 */ + case 'PtgUnion': /* [MS-XLS] 2.5.198.94 */ e1 = stack.pop(); e2 = stack.pop(); stack.push(e2+","+e1); break; - case 'PtgRange': /* 2.5.198.83 */ + case 'PtgRange': /* [MS-XLS] 2.5.198.83 */ e1 = stack.pop(); e2 = stack.pop(); stack.push(e2+":"+e1); break; - case 'PtgAttrChoose': /* 2.5.198.34 */ + case 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */ break; - case 'PtgAttrGoto': /* 2.5.198.35 */ + case 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */ break; - case 'PtgAttrIf': /* 2.5.198.36 */ + case 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */ break; case 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */ break; - case 'PtgRef': /* 2.5.198.84 */ - type = f[1][0]; c = shift_cell_xls((f[1][1]), _range, opts); - stack.push(encode_cell_xls(c)); + case 'PtgRef': /* [MS-XLS] 2.5.198.84 */ +c = shift_cell_xls((f[1][1]), _range, opts); + stack.push(encode_cell_xls(c, biff)); break; - case 'PtgRefN': /* 2.5.198.88 */ - type = f[1][0]; c = cell ? shift_cell_xls((f[1][1]), cell, opts) : (f[1][1]); - stack.push(encode_cell_xls(c)); + case 'PtgRefN': /* [MS-XLS] 2.5.198.88 */ +c = cell ? shift_cell_xls((f[1][1]), cell, opts) : (f[1][1]); + stack.push(encode_cell_xls(c, biff)); break; - case 'PtgRef3d': /* 2.5.198.85 */ - type = f[1][0]; ixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts); + case 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */ +ixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts); sname = get_ixti(supbooks, ixti, opts); - var w = sname; /* IE9 fails on defined names */ - stack.push(sname + "!" + encode_cell_xls(c)); + var w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars + stack.push(sname + "!" + encode_cell_xls(c, biff)); break; - case 'PtgFunc': /* 2.5.198.62 */ - case 'PtgFuncVar': /* 2.5.198.63 */ - //console.log(f[1]); + case 'PtgFunc': /* [MS-XLS] 2.5.198.62 */ + case 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */ /* f[1] = [argc, func, type] */ - var argc = f[1][0], func = f[1][1]; + var argc = (f[1][0]), func = (f[1][1]); if(!argc) argc = 0; + argc &= 0x7F; var args = argc == 0 ? [] : stack.slice(-argc); stack.length -= argc; if(func === 'User') func = args.shift(); stack.push(func + "(" + args.join(",") + ")"); break; - case 'PtgBool': /* 2.5.198.42 */ + case 'PtgBool': /* [MS-XLS] 2.5.198.42 */ stack.push(f[1] ? "TRUE" : "FALSE"); break; - case 'PtgInt': /* 2.5.198.66 */ + case 'PtgInt': /* [MS-XLS] 2.5.198.66 */ stack.push(f[1]); break; - case 'PtgNum': /* 2.5.198.79 TODO: precision? */ + case 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */ stack.push(String(f[1])); break; - case 'PtgStr': /* 2.5.198.89 */ + case 'PtgStr': /* [MS-XLS] 2.5.198.89 */ // $FlowIgnore - stack.push('"' + f[1] + '"'); break; - case 'PtgErr': /* 2.5.198.57 */ + stack.push('"' + f[1].replace(/"/g, '""') + '"'); break; + case 'PtgErr': /* [MS-XLS] 2.5.198.57 */ stack.push(f[1]); break; - case 'PtgAreaN': /* 2.5.198.31 TODO */ - type = f[1][0]; r = shift_range_xls(f[1][1], _range, opts); + case 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */ +r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts); stack.push(encode_range_xls((r), opts)); break; - case 'PtgArea': /* 2.5.198.27 TODO: fixed points */ - type = f[1][0]; r = shift_range_xls(f[1][1], _range, opts); + case 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */ +r = shift_range_xls(f[1][1], _range, opts); stack.push(encode_range_xls((r), opts)); break; - case 'PtgArea3d': /* 2.5.198.28 TODO */ - type = f[1][0]; ixti = f[1][1]; r = f[1][2]; - sname = (supbooks && supbooks[1] ? supbooks[1][ixti+1] : "**MISSING**"); - stack.push(sname + "!" + encode_range((r))); + case 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */ +ixti = f[1][1]; r = f[1][2]; + sname = get_ixti(supbooks, ixti, opts); + stack.push(sname + "!" + encode_range_xls((r), opts)); break; - case 'PtgAttrSum': /* 2.5.198.41 */ + case 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */ stack.push("SUM(" + stack.pop() + ")"); break; - case 'PtgAttrSemi': /* 2.5.198.37 */ + case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */ + case 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */ break; - case 'PtgName': /* 2.5.97.60 TODO: revisions */ + case 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */ /* f[1] = type, 0, nameindex */ nameidx = (f[1][2]); var lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx]; - var name = lbl ? lbl.Name : "SH33TJSERR7" + String(nameidx); + var name = lbl ? lbl.Name : "SH33TJSNAME" + String(nameidx); if(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name]; stack.push(name); break; - case 'PtgNameX': /* 2.5.97.61 TODO: revisions */ + case 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */ /* f[1] = type, ixti, nameindex */ var bookidx = (f[1][1]); nameidx = (f[1][2]); var externbook; - /* TODO: Properly handle missing values */ - //console.log(bookidx, supbooks); + /* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */ if(opts.biff <= 5) { if(bookidx < 0) bookidx = -bookidx; if(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx]; } else { - var pnxname = supbooks.SheetNames[bookidx]; var o = ""; if(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */} else if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){ @@ -25050,7 +28063,11 @@ function stringify_formula(formula/*Array*/, range, cell, supbooks, opts) { else o = supbooks.SheetNames[nameidx-1]+ "!"; if(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name; else if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name; - else o += "SH33TJSERRX"; + else { + var ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||"").split(";;"); + if(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct + else o += "SH33TJSERRX"; + } stack.push(o); break; } @@ -25058,7 +28075,7 @@ function stringify_formula(formula/*Array*/, range, cell, supbooks, opts) { stack.push(externbook.Name); break; - case 'PtgParen': /* 2.5.198.80 */ + case 'PtgParen': /* [MS-XLS] 2.5.198.80 */ var lp = '(', rp = ')'; if(last_sp >= 0) { sp = ""; @@ -25079,20 +28096,19 @@ function stringify_formula(formula/*Array*/, range, cell, supbooks, opts) { } stack.push(lp + stack.pop() + rp); break; - case 'PtgRefErr': /* 2.5.198.86 */ + case 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */ stack.push('#REF!'); break; - case 'PtgRefErr3d': /* 2.5.198.87 */ + case 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */ stack.push('#REF!'); break; - case 'PtgExp': /* 2.5.198.58 TODO */ - c = {c:f[1][1],r:f[1][0]}; + case 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */ + c = {c:(f[1][1]),r:(f[1][0])}; var q = ({c: cell.c, r:cell.r}); if(supbooks.sharedf[encode_cell(c)]) { var parsedf = (supbooks.sharedf[encode_cell(c)]); stack.push(stringify_formula(parsedf, _range, q, supbooks, opts)); - } - else { + } else { var fnd = false; for(e1=0;e1!=supbooks.arrayf.length; ++e1) { /* TODO: should be something like range_has */ @@ -25107,42 +28123,70 @@ function stringify_formula(formula/*Array*/, range, cell, supbooks, opts) { } break; - case 'PtgArray': /* 2.5.198.32 TODO */ + case 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */ stack.push("{" + stringify_array(f[1]) + "}"); break; - case 'PtgMemArea': /* 2.5.198.70 TODO: confirm this is a non-display */ + case 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */ //stack.push("(" + f[2].map(encode_range).join(",") + ")"); break; - case 'PtgAttrSpace': /* 2.5.198.38 */ - case 'PtgAttrSpaceSemi': /* 2.5.198.39 */ + case 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */ + case 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */ last_sp = ff; break; - case 'PtgTbl': /* 2.5.198.92 TODO */ + case 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */ break; - case 'PtgMemErr': /* 2.5.198.71 */ + case 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */ break; - case 'PtgMissArg': /* 2.5.198.74 */ + case 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */ stack.push(""); break; - case 'PtgAreaErr': /* 2.5.198.29 */ + case 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */ stack.push("#REF!"); break; - case 'PtgAreaErr3d': /* 2.5.198.30 */ + case 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */ stack.push("#REF!"); break; - case 'PtgMemFunc': /* 2.5.198.72 TODO */ + case 'PtgList': /* [MS-XLSB] 2.5.97.52 */ + // $FlowIgnore + stack.push("Table" + f[1].idx + "[#" + f[1].rt + "]"); + break; + + case 'PtgMemAreaN': + case 'PtgMemNoMemN': + case 'PtgAttrNoop': + case 'PtgSheet': + case 'PtgEndSheet': break; + case 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */ + break; + case 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */ + break; + + case 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */ + case 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */ + case 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */ + case 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */ + case 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */ + case 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */ + case 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */ + case 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */ + case 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */ + case 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */ + throw new Error("Unsupported ELFs"); + + case 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */ + throw new Error('Unrecognized Formula Token: ' + String(f)); default: throw new Error('Unrecognized Formula Token: ' + String(f)); } var PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto']; - if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) { + if(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) { f = formula[0][last_sp]; var _left = true; switch(f[1][0]) { @@ -25165,16 +28209,118 @@ function stringify_formula(formula/*Array*/, range, cell, supbooks, opts) { stack.push((_left ? sp : "") + stack.pop() + (_left ? "" : sp)); last_sp = -1; } - //console.log("::",f, stack) } - //console.log("--",stack); if(stack.length > 1 && opts.WTF) throw new Error("bad formula stack"); return stack[0]; } +/* [MS-XLS] 2.5.198.1 TODO */ +function parse_ArrayParsedFormula(blob, length, opts) { + var target = blob.l + length, len = opts.biff == 2 ? 1 : 2; + var rgcb, cce = blob.read_shift(len); // length of rgce + if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; + var rgce = parse_Rgce(blob, cce, opts); + if(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts); + blob.l = target; + return [rgce, rgcb]; +} + +/* [MS-XLS] 2.5.198.3 TODO */ +function parse_XLSCellParsedFormula(blob, length, opts) { + var target = blob.l + length, len = opts.biff == 2 ? 1 : 2; + var rgcb, cce = blob.read_shift(len); // length of rgce + if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; + var rgce = parse_Rgce(blob, cce, opts); + if(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts); + blob.l = target; + return [rgce, rgcb]; +} + +/* [MS-XLS] 2.5.198.21 */ +function parse_NameParsedFormula(blob, length, opts, cce) { + var target = blob.l + length; + var rgce = parse_Rgce(blob, cce, opts); + var rgcb; + if(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts); + return [rgce, rgcb]; +} + +/* [MS-XLS] 2.5.198.118 TODO */ +function parse_SharedParsedFormula(blob, length, opts) { + var target = blob.l + length; + var rgcb, cce = blob.read_shift(2); // length of rgce + var rgce = parse_Rgce(blob, cce, opts); + if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; + if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts); + return [rgce, rgcb]; +} + +/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */ +function parse_FormulaValue(blob) { + var b; + if(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n']; + switch(blob[blob.l]) { + case 0x00: blob.l += 8; return ["String", 's']; + case 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b']; + case 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e']; + case 0x03: blob.l += 8; return ["",'s']; + } + return []; +} +function write_FormulaValue(value) { + if(value == null) { + // Blank String Value + var o = new_buf(8); + o.write_shift(1, 0x03); + o.write_shift(1, 0); + o.write_shift(2, 0); + o.write_shift(2, 0); + o.write_shift(2, 0xFFFF); + return o; + } else if(typeof value == "number") return write_Xnum(value); + return write_Xnum(0); +} + +/* [MS-XLS] 2.4.127 TODO */ +function parse_Formula(blob, length, opts) { + var end = blob.l + length; + var cell = parse_XLSCell(blob, 6); + if(opts.biff == 2) ++blob.l; + var val = parse_FormulaValue(blob,8); + var flags = blob.read_shift(1); + if(opts.biff != 2) { + blob.read_shift(1); + if(opts.biff >= 5) { + /*var chn = */blob.read_shift(4); + } + } + var cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts); + return {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]}; +} +function write_Formula(cell, R, C, opts, os) { + // Cell + var o1 = write_XLSCell(R, C, os); + + // FormulaValue + var o2 = write_FormulaValue(cell.v); + + // flags + cache + var o3 = new_buf(6); + var flags = 0x01 | 0x20; + o3.write_shift(2, flags); + o3.write_shift(4, 0); + + // CellParsedFormula + var bf = new_buf(cell.bf.length); + for(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i]; + + var out = bconcat([o1, o2, o3, bf]); + return out; +} + + /* XLSB Parsed Formula records have the same shape */ function parse_XLSBParsedFormula(data, length, opts) { - var end = data.l + length; var cce = data.read_shift(4); var rgce = parse_Rgce(data, cce, opts); var cb = data.read_shift(4); @@ -25186,17 +28332,14 @@ function parse_XLSBParsedFormula(data, length, opts) { var parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula; /* [MS-XLSB] 2.5.97.4 CellParsedFormula */ var parse_XLSBCellParsedFormula = parse_XLSBParsedFormula; +/* [MS-XLSB] 2.5.97.8 DVParsedFormula */ +//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula; +/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */ +//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2; /* [MS-XLSB] 2.5.97.12 NameParsedFormula */ var parse_XLSBNameParsedFormula = parse_XLSBParsedFormula; /* [MS-XLSB] 2.5.97.98 SharedParsedFormula */ var parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula; -/* [MS-XLS] 2.5.198.44 */ -var PtgDataType = { -0x1: "REFERENCE", // reference to range -0x2: "VALUE", // single value -0x3: "ARRAY" // array of values -}; - /* [MS-XLS] 2.5.198.4 */ var Cetab = { 0x0000: 'BEEP', @@ -26084,6 +29227,7 @@ var Ftab = { var FtabArgc = { 0x0002: 1, /* ISNA */ 0x0003: 1, /* ISERROR */ +0x000A: 0, /* NA */ 0x000F: 1, /* SIN */ 0x0010: 1, /* COS */ 0x0011: 1, /* TAN */ @@ -26101,6 +29245,8 @@ var FtabArgc = { 0x001F: 3, /* MID */ 0x0020: 1, /* LEN */ 0x0021: 1, /* VALUE */ +0x0022: 0, /* TRUE */ +0x0023: 0, /* FALSE */ 0x0026: 1, /* NOT */ 0x0027: 2, /* MOD */ 0x0028: 3, /* DCOUNT */ @@ -26113,6 +29259,7 @@ var FtabArgc = { 0x0030: 2, /* TEXT */ 0x0035: 1, /* GOTO */ 0x003D: 3, /* MIRR */ +0x003F: 0, /* RAND */ 0x0041: 3, /* DATE */ 0x0042: 3, /* TIME */ 0x0043: 1, /* DAY */ @@ -26122,6 +29269,7 @@ var FtabArgc = { 0x0047: 1, /* HOUR */ 0x0048: 1, /* MINUTE */ 0x0049: 1, /* SECOND */ +0x004A: 0, /* NOW */ 0x004B: 1, /* AREAS */ 0x004C: 1, /* ROWS */ 0x004D: 1, /* COLUMNS */ @@ -26130,13 +29278,18 @@ var FtabArgc = { 0x0053: 1, /* TRANSPOSE */ 0x0055: 0, /* STEP */ 0x0056: 1, /* TYPE */ +0x0059: 0, /* CALLER */ 0x005A: 1, /* DEREF */ +0x005E: 0, /* ACTIVE.CELL */ +0x005F: 0, /* SELECTION */ 0x0061: 2, /* ATAN2 */ 0x0062: 1, /* ASIN */ 0x0063: 1, /* ACOS */ 0x0065: 3, /* HLOOKUP */ 0x0066: 3, /* VLOOKUP */ 0x0069: 1, /* ISREF */ +0x006A: 1, /* GET.FORMULA */ +0x006C: 2, /* SET.VALUE */ 0x006F: 1, /* CHAR */ 0x0070: 1, /* LOWER */ 0x0071: 1, /* UPPER */ @@ -26162,6 +29315,7 @@ var FtabArgc = { 0x008E: 3, /* SLN */ 0x008F: 4, /* SYD */ 0x0090: 4, /* DDB */ +0x00A1: 1, /* DIALOG.BOX */ 0x00A2: 1, /* CLEAN */ 0x00A3: 1, /* MDETERM */ 0x00A4: 1, /* MINVERSE */ @@ -26173,6 +29327,7 @@ var FtabArgc = { 0x00B2: 2, /* EXECUTE */ 0x00B3: 1, /* TERMINATE */ 0x00B8: 1, /* FACT */ +0x00BA: 1, /* GET.WORKSPACE */ 0x00BD: 3, /* DPRODUCT */ 0x00BE: 1, /* ISNONTEXT */ 0x00C3: 3, /* DSTDEVP */ @@ -26188,6 +29343,7 @@ var FtabArgc = { 0x00D5: 2, /* ROUNDDOWN */ 0x00D6: 1, /* ASC */ 0x00D7: 1, /* DBCS */ +0x00E1: 0, /* END.IF */ 0x00E5: 1, /* SINH */ 0x00E6: 1, /* COSH */ 0x00E7: 1, /* TANH */ @@ -26350,6 +29506,7 @@ var XLSXFutureFunctions = { "_xlfn.CHISQ.INV.RT": "CHISQ.INV.RT", "_xlfn.CHISQ.TEST": "CHISQ.TEST", "_xlfn.COMBINA": "COMBINA", + "_xlfn.CONCAT": "CONCAT", "_xlfn.CONFIDENCE.NORM": "CONFIDENCE.NORM", "_xlfn.CONFIDENCE.T": "CONFIDENCE.T", "_xlfn.COT": "COT", @@ -26373,6 +29530,11 @@ var XLSXFutureFunctions = { "_xlfn.FILTERXML": "FILTERXML", "_xlfn.FLOOR.MATH": "FLOOR.MATH", "_xlfn.FLOOR.PRECISE": "FLOOR.PRECISE", + "_xlfn.FORECAST.ETS": "FORECAST.ETS", + "_xlfn.FORECAST.ETS.CONFINT": "FORECAST.ETS.CONFINT", + "_xlfn.FORECAST.ETS.SEASONALITY": "FORECAST.ETS.SEASONALITY", + "_xlfn.FORECAST.ETS.STAT": "FORECAST.ETS.STAT", + "_xlfn.FORECAST.LINEAR": "FORECAST.LINEAR", "_xlfn.FORMULATEXT": "FORMULATEXT", "_xlfn.GAMMA": "GAMMA", "_xlfn.GAMMA.DIST": "GAMMA.DIST", @@ -26380,8 +29542,9 @@ var XLSXFutureFunctions = { "_xlfn.GAMMALN.PRECISE": "GAMMALN.PRECISE", "_xlfn.GAUSS": "GAUSS", "_xlfn.HYPGEOM.DIST": "HYPGEOM.DIST", - "_xlfn.IFNA": "IFNA", "_xlfn.IFERROR": "IFERROR", + "_xlfn.IFNA": "IFNA", + "_xlfn.IFS": "IFS", "_xlfn.IMCOSH": "IMCOSH", "_xlfn.IMCOT": "IMCOT", "_xlfn.IMCSC": "IMCSC", @@ -26395,6 +29558,8 @@ var XLSXFutureFunctions = { "_xlfn.ISOWEEKNUM": "ISOWEEKNUM", "_xlfn.LOGNORM.DIST": "LOGNORM.DIST", "_xlfn.LOGNORM.INV": "LOGNORM.INV", + "_xlfn.MAXIFS": "MAXIFS", + "_xlfn.MINIFS": "MINIFS", "_xlfn.MODE.MULT": "MODE.MULT", "_xlfn.MODE.SNGL": "MODE.SNGL", "_xlfn.MUNIT": "MUNIT", @@ -26428,12 +29593,14 @@ var XLSXFutureFunctions = { "_xlfn.STDEV.P": "STDEV.P", "_xlfn.STDEV.S": "STDEV.S", "_xlfn.SUMIFS": "SUMIFS", + "_xlfn.SWITCH": "SWITCH", "_xlfn.T.DIST": "T.DIST", "_xlfn.T.DIST.2T": "T.DIST.2T", "_xlfn.T.DIST.RT": "T.DIST.RT", "_xlfn.T.INV": "T.INV", "_xlfn.T.INV.2T": "T.INV.2T", "_xlfn.T.TEST": "T.TEST", + "_xlfn.TEXTJOIN": "TEXTJOIN", "_xlfn.UNICHAR": "UNICHAR", "_xlfn.UNICODE": "UNICODE", "_xlfn.VAR.P": "VAR.P", @@ -26447,11 +29614,11 @@ var XLSXFutureFunctions = { /* Part 3 TODO: actually parse formulae */ function ods_to_csf_formula(f) { - if(f.substr(0,3) == "of:") f = f.substr(3); + if(f.slice(0,3) == "of:") f = f.slice(3); /* 5.2 Basic Expressions */ if(f.charCodeAt(0) == 61) { - f = f.substr(1); - if(f.charCodeAt(0) == 61) f = f.substr(1); + f = f.slice(1); + if(f.charCodeAt(0) == 61) f = f.slice(1); } f = f.replace(/COM\.MICROSOFT\./g, ""); /* Part 3 Section 5.8 References */ @@ -26467,11 +29634,16 @@ function csf_to_ods_formula(f) { return o.replace(/;/g, "|").replace(/,/g,";"); } -function ods_to_csf_range_3D(r) { +function ods_to_csf_3D(r) { var a = r.split(":"); var s = a[0].split(".")[0]; - return [s, a[0].split(".")[1] + ":" + a[1].split(".")[1]]; + return [s, a[0].split(".")[1] + (a.length > 1 ? (":" + (a[1].split(".")[1] || a[1].split(".")[0])) : "")]; +} + +function csf_to_ods_3D(r) { + return r.replace(/\./,"!"); } + var strs = {}; // shared strings var _ssfopts = {}; // spreadsheet formatting options @@ -26480,9 +29652,32 @@ RELS.WS = [ "http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet" ]; -function get_sst_id(sst, str) { - for(var i = 0, len = sst.length; i < len; ++i) if(sst[i].t === str) { sst.Count ++; return i; } - sst[len] = {t:str}; sst.Count ++; sst.Unique ++; return len; +/*global Map */ +var browser_has_Map = typeof Map !== 'undefined'; + +function get_sst_id(sst, str, rev) { + var i = 0, len = sst.length; + if(rev) { + if(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) { + var revarr = browser_has_Map ? rev.get(str) : rev[str]; + for(; i < revarr.length; ++i) { + if(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; } + } + } + } else for(; i < len; ++i) { + if(sst[i].t === str) { sst.Count ++; return i; } + } + sst[len] = ({t:str}); sst.Count ++; sst.Unique ++; + if(rev) { + if(browser_has_Map) { + if(!rev.has(str)) rev.set(str, []); + rev.get(str).push(len); + } else { + if(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = []; + rev[str].push(len); + } + } + return len; } function col_obj_w(C, col) { @@ -26496,6 +29691,7 @@ function col_obj_w(C, col) { if(wch > -1) { p.width = char2width(wch); p.customWidth = 1; } else if(col.width != null) p.width = col.width; if(col.hidden) p.hidden = true; + if(col.level != null) { p.outlineLevel = p.level = col.level; } return p; } @@ -26517,6 +29713,7 @@ function get_cell_style(styles, cell, opts) { if(z == null && opts.ssf) { for(; i < 0x188; ++i) if(opts.ssf[i] == null) { SSF.load(cell.z, i); + // $FlowIgnore opts.ssf[i] = cell.z; opts.revssf[cell.z] = z = i; break; @@ -26535,12 +29732,13 @@ function get_cell_style(styles, cell, opts) { } function safe_format(p, fmtid, fillid, opts, themes, styles) { - if(p.t === 'z') return; - if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v); try { if(opts.cellNF) p.z = SSF._table[fmtid]; } catch(e) { if(opts.WTF) throw e; } - if(!opts || opts.cellText !== false) try { + if(p.t === 'z' && !opts.cellStyles) return; + if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v); + if((!opts || opts.cellText !== false) && p.t !== 'z') try { + if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid); if(p.t === 'e') p.w = p.w || BErr[p.v]; else if(fmtid === 0) { if(p.t === 'n') { @@ -26558,7 +29756,8 @@ function safe_format(p, fmtid, fillid, opts, themes, styles) { else if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts); else p.w = SSF.format(fmtid,p.v,_ssfopts); } catch(e) { if(opts.WTF) throw e; } - if(fillid) try { + if(!opts.cellStyles) return; + if(fillid != null) try { p.s = styles.Fills[fillid]; if (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) { p.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0); @@ -26568,22 +29767,34 @@ function safe_format(p, fmtid, fillid, opts, themes, styles) { p.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0); if(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb; } - } catch(e) { if(opts.WTF) throw e; } + } catch(e) { if(opts.WTF && styles.Fills) throw e; } +} + +function check_ws(ws, sname, i) { + if(ws && ws['!ref']) { + var range = safe_decode_range(ws['!ref']); + if(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error("Bad range (" + i + "): " + ws['!ref']); + } } function parse_ws_xml_dim(ws, s) { var d = safe_decode_range(s); if(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws["!ref"] = encode_range(d); } var mergecregex = /<(?:\w:)?mergeCell ref="[A-Z0-9:]+"\s*[\/]?>/g; -var sheetdataregex = /<(?:\w+:)?sheetData>([\s\S]*)<\/(?:\w+:)?sheetData>/; +var sheetdataregex = /<(?:\w+:)?sheetData[^>]*>([\s\S]*)<\/(?:\w+:)?sheetData>/; var hlinkregex = /<(?:\w:)?hyperlink [^>]*>/mg; var dimregex = /"(\w*:\w*)"/; -var colregex = /<(?:\w:)?col[^>]*[\/]?>/g; +var colregex = /<(?:\w:)?col\b[^>]*[\/]?>/g; var afregex = /<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g; var marginregex= /<(?:\w:)?pageMargins[^>]*\/>/g; +var sheetprregex = /<(?:\w:)?sheetPr\b(?:[^>a-z][^>]*)?\/>/; +var sheetprregex2= /<(?:\w:)?sheetPr[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetPr)>/; +var svsregex = /<(?:\w:)?sheetViews[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetViews)>/; + /* 18.3 Worksheets */ -function parse_ws_xml(data, opts, rels, wb, themes, styles) { +function parse_ws_xml(data, opts, idx, rels, wb, themes, styles) { if(!data) return data; + if(!rels) rels = {'!id':{}}; if(DENSE != null && opts.dense == null) opts.dense = DENSE; /* 18.3.1.99 worksheet CT_Worksheet */ @@ -26593,18 +29804,26 @@ function parse_ws_xml(data, opts, rels, wb, themes, styles) { var data1 = "", data2 = ""; var mtch = data.match(sheetdataregex); if(mtch) { - data1 = data.substr(0, mtch.index); - data2 = data.substr(mtch.index + mtch[0].length); + data1 = data.slice(0, mtch.index); + data2 = data.slice(mtch.index + mtch[0].length); } else data1 = data2 = data; - /* 18.3.1.35 dimension CT_SheetDimension ? */ - // $FlowIgnore + /* 18.3.1.82 sheetPr CT_SheetPr */ + var sheetPr = data1.match(sheetprregex); + if(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx); + else if((sheetPr = data1.match(sheetprregex2))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||"", s, wb, idx, styles, themes); + + /* 18.3.1.35 dimension CT_SheetDimension */ var ridx = (data1.match(/<(?:\w*:)?dimension/)||{index:-1}).index; if(ridx > 0) { - var ref = data1.substr(ridx,50).match(dimregex); + var ref = data1.slice(ridx,ridx+50).match(dimregex); if(ref) parse_ws_xml_dim(s, ref[1]); } + /* 18.3.1.88 sheetViews CT_SheetViews */ + var svs = data1.match(svsregex); + if(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb); + /* 18.3.1.17 cols CT_Cols */ var columns = []; if(opts.cellStyles) { @@ -26621,10 +29840,10 @@ function parse_ws_xml(data, opts, rels, wb, themes, styles) { if(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]); /* 18.3.1.55 mergeCells CT_MergeCells */ - var mergecells = []; - var merges = data2.match(mergecregex); - if(merges) for(ridx = 0; ridx != merges.length; ++ridx) - mergecells[ridx] = safe_decode_range(merges[ridx].substr(merges[ridx].indexOf("\"")+1)); + var merges = []; + var _merge = data2.match(mergecregex); + if(_merge) for(ridx = 0; ridx != _merge.length; ++ridx) + merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf("\"")+1)); /* 18.3.1.48 hyperlinks CT_Hyperlinks */ var hlink = data2.match(hlinkregex); @@ -26637,7 +29856,7 @@ function parse_ws_xml(data, opts, rels, wb, themes, styles) { if(!s["!ref"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s["!ref"] = encode_range(refguess); if(opts.sheetRows > 0 && s["!ref"]) { var tmpref = safe_decode_range(s["!ref"]); - if(opts.sheetRows < +tmpref.e.r) { + if(opts.sheetRows <= +tmpref.e.r) { tmpref.e.r = opts.sheetRows - 1; if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r; if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r; @@ -26648,30 +29867,60 @@ function parse_ws_xml(data, opts, rels, wb, themes, styles) { } } if(columns.length > 0) s["!cols"] = columns; - if(mergecells.length > 0) s["!merges"] = mergecells; + if(merges.length > 0) s["!merges"] = merges; return s; } function write_ws_xml_merges(merges) { - if(merges.length == 0) return ""; + if(merges.length === 0) return ""; var o = ''; for(var i = 0; i != merges.length; ++i) o += ''; return o + ''; } -/* 18.3.1.85 sheetPr CT_SheetProtection */ +/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */ +function parse_ws_xml_sheetpr(sheetPr, s, wb, idx) { + var data = parsexmltag(sheetPr); + if(!wb.Sheets[idx]) wb.Sheets[idx] = {}; + if(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName)); +} +function parse_ws_xml_sheetpr2(sheetPr, body, s, wb, idx, styles, themes) { + parse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(">")), s, wb, idx); +} +function write_ws_xml_sheetpr(ws, wb, idx, opts, o) { + var needed = false; + var props = {}, payload = null; + if(opts.bookType !== 'xlsx' && wb.vbaraw) { + var cname = wb.SheetNames[idx]; + try { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {} + needed = true; + props.codeName = utf8write(escapexml(cname)); + } + + if(ws && ws["!outline"]) { + var outlineprops = {summaryBelow:1, summaryRight:1}; + if(ws["!outline"].above) outlineprops.summaryBelow = 0; + if(ws["!outline"].left) outlineprops.summaryRight = 0; + payload = (payload||"") + writextag('outlinePr', null, outlineprops); + } + + if(!needed && !payload) return; + o[o.length] = (writextag('sheetPr', payload, props)); +} + +/* 18.3.1.85 sheetProtection CT_SheetProtection */ +var sheetprot_deffalse = ["objects", "scenarios", "selectLockedCells", "selectUnlockedCells"]; +var sheetprot_deftrue = [ + "formatColumns", "formatRows", "formatCells", + "insertColumns", "insertRows", "insertHyperlinks", + "deleteColumns", "deleteRows", + "sort", "autoFilter", "pivotTables" +]; function write_ws_xml_protection(sp) { - // algorithmName, hashValue, saltValue, spinCountpassword + // algorithmName, hashValue, saltValue, spinCount var o = ({sheet:1}); - var deffalse = ["objects", "scenarios", "selectLockedCells", "selectUnlockedCells"]; - var deftrue = [ - "formatColumns", "formatRows", "formatCells", - "insertColumns", "insertRows", "insertHyperlinks", - "deleteColumns", "deleteRows", - "sort", "autoFilter", "pivotTables" - ]; - deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = "1"; }); - deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = "0"; }); + sheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = "1"; }); + sheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = "0"; }); /* TODO: algorithm */ if(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase(); return writextag('sheetProtection', null, o); @@ -26682,16 +29931,15 @@ function parse_ws_xml_hlinks(s, data, rels) { for(var i = 0; i != data.length; ++i) { var val = parsexmltag(utf8read(data[i]), true); if(!val.ref) return; - var rel = rels ? rels['!id'][val.id] : null; + var rel = ((rels || {})['!id']||[])[val.id]; if(rel) { val.Target = rel.Target; - if(val.location) val.Target += "#"+val.location; - val.Rel = rel; + if(val.location) val.Target += "#"+unescapexml(val.location); } else { - val.Target = val.location; - rel = {Target: val.location, TargetMode: 'Internal'}; - val.Rel = rel; + val.Target = "#" + unescapexml(val.location); + rel = {Target: val.Target, TargetMode: 'Internal'}; } + val.Rel = rel; if(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; } var rng = safe_decode_range(val.ref); for(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) { @@ -26726,15 +29974,15 @@ function parse_ws_xml_cols(columns, cols) { var coll = parsexmltag(cols[coli], true); if(coll.hidden) coll.hidden = parsexmlbool(coll.hidden); var colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1; + if(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0); delete coll.min; delete coll.max; coll.width = +coll.width; if(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); } process_col(coll); while(colm <= colM) columns[colm++] = dup(coll); } } - function write_ws_xml_cols(ws, cols) { - var o = [""], col, width; + var o = [""], col; for(var i = 0; i != cols.length; ++i) { if(!(col = cols[i])) continue; o[o.length] = (writextag('col', null, col_obj_w(i, col))); @@ -26747,27 +29995,57 @@ function parse_ws_xml_autofilter(data) { var o = { ref: (data.match(/ref="([^"]*)"/)||[])[1]}; return o; } -function write_ws_xml_autofilter(data) { - return writextag("autoFilter", null, {ref:data.ref}); +function write_ws_xml_autofilter(data, ws, wb, idx) { + var ref = typeof data.ref == "string" ? data.ref : encode_range(data.ref); + if(!wb.Workbook) wb.Workbook = ({Sheets:[]}); + if(!wb.Workbook.Names) wb.Workbook.Names = []; + var names = wb.Workbook.Names; + var range = decode_range(ref); + if(range.s.r == range.e.r) { range.e.r = decode_range(ws["!ref"]).e.r; ref = encode_range(range); } + for(var i = 0; i < names.length; ++i) { + var name = names[i]; + if(name.Name != '_xlnm._FilterDatabase') continue; + if(name.Sheet != idx) continue; + name.Ref = "'" + wb.SheetNames[idx] + "'!" + ref; break; + } + if(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref }); + return writextag("autoFilter", null, {ref:ref}); } /* 18.3.1.88 sheetViews CT_SheetViews */ /* 18.3.1.87 sheetView CT_SheetView */ +var sviewregex = /<(?:\w:)?sheetView(?:[^>a-z][^>]*)?\/?>/; +function parse_ws_xml_sheetviews(data, wb) { + if(!wb.Views) wb.Views = [{}]; + (data.match(sviewregex)||[]).forEach(function(r, i) { + var tag = parsexmltag(r); + // $FlowIgnore + if(!wb.Views[i]) wb.Views[i] = {}; + // $FlowIgnore + if(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale; + // $FlowIgnore + if(parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true; + }); +} function write_ws_xml_sheetviews(ws, opts, idx, wb) { - return writextag("sheetViews", writextag("sheetView", null, {workbookViewId:"0"}), {}); + var sview = ({workbookViewId:"0"}); + // $FlowIgnore + if((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? "1" : "0"; + return writextag("sheetViews", writextag("sheetView", null, sview), {}); } -function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) { - if(cell.v === undefined && cell.f === undefined || cell.t === 'z') return ""; +function write_ws_xml_cell(cell, ref, ws, opts) { + if(cell.v === undefined && typeof cell.f !== "string" || cell.t === 'z') return ""; var vv = ""; var oldt = cell.t, oldv = cell.v; - switch(cell.t) { + if(cell.t !== "z") switch(cell.t) { case 'b': vv = cell.v ? "1" : "0"; break; case 'n': vv = ''+cell.v; break; case 'e': vv = BErr[cell.v]; break; case 'd': - if(opts.cellDates) vv = parseDate(cell.v, -1).toISOString(); + if(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString(); else { + cell = dup(cell); cell.t = 'n'; vv = ''+(cell.v = datenum(parseDate(cell.v))); } @@ -26784,16 +30062,18 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) { case 'd': o.t = "d"; break; case 'b': o.t = "b"; break; case 'e': o.t = "e"; break; + case 'z': break; default: if(cell.v == null) { delete cell.t; break; } - if(opts.bookSST) { - v = writetag('v', ''+get_sst_id(opts.Strings, cell.v)); + if(cell.v.length > 32767) throw new Error("Text length must not exceed 32767 characters"); + if(opts && opts.bookSST) { + v = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings)); o.t = "s"; break; } o.t = "str"; break; } if(cell.t != oldt) { cell.t = oldt; cell.v = oldv; } - if(cell.f) { - var ff = cell.F && cell.F.substr(0, ref.length) == ref ? {t:"array", ref:cell.F} : null; + if(typeof cell.f == "string" && cell.f) { + var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:"array", ref:cell.F} : null; v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : ""); } if(cell.l) ws['!links'].push([ref, cell.l]); @@ -26801,8 +30081,8 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) { return writextag('c', v, o); } -var parse_ws_xml_data = (function parse_ws_xml_data_factory() { - var cellregex = /<(?:\w+:)?c[ >]/, rowregex = /<\/(?:\w+:)?row>/; +var parse_ws_xml_data = (function() { + var cellregex = /<(?:\w+:)?c[ \/>]/, rowregex = /<\/(?:\w+:)?row>/; var rregex = /r=["']([^"']*)["']/, isregex = /<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/; var refregex = /ref=["']([^"']*)["']/; var match_v = matchtag("v"), match_f = matchtag("f"); @@ -26817,14 +30097,33 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) { var sharedf = []; var dense = Array.isArray(s); var rows = [], rowobj = {}, rowrite = false; + var sheetStubs = !!opts.sheetStubs; for(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) { x = marr[mt].trim(); var xlen = x.length; if(xlen === 0) continue; /* 18.3.1.73 row CT_Row */ - for(ri = 0; ri < xlen; ++ri) if(x.charCodeAt(ri) === 62) break; ++ri; - tag = parsexmltag(x.substr(0,ri), true); + var rstarti = 0; + outa: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) { + case ">" /*62*/: + if(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != "/") { ++ri; break outa; } + if(opts && opts.cellStyles) { + // TODO: avoid duplication + tag = parsexmltag(x.slice(rstarti,ri), true); + tagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1; + if(opts.sheetRows && opts.sheetRows < tagr) continue; + rowobj = {}; rowrite = false; + if(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); } + if(tag.hidden == "1") { rowrite = true; rowobj.hidden = true; } + if(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; } + if(rowrite) rows[tagr-1] = rowobj; + } + break; + case "<" /*60*/: rstarti = ri; break; + } + if(rstarti >= ri) break; + tag = parsexmltag(x.slice(rstarti,ri), true); tagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1; if(opts.sheetRows && opts.sheetRows < tagr) continue; if(guess.s.r > tagr - 1) guess.s.r = tagr - 1; @@ -26839,12 +30138,14 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) { } /* 18.3.1.4 c CT_Cell */ - cells = x.substr(ri).split(cellregex); + cells = x.slice(ri).split(cellregex); + for(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != "<") break; + cells = cells.slice(rslice); for(ri = 0; ri != cells.length; ++ri) { x = cells[ri].trim(); if(x.length === 0) continue; cref = x.match(rregex); idx = ri; i=0; cc=0; - x = "":"") + x; + x = "":"") + x; if(cref != null && cref.length === 2) { idx = 0; d=cref[1]; for(i=0; i != d.length; ++i) { @@ -26855,27 +30156,30 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) { tagc = idx; } else ++tagc; for(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i; - tag = parsexmltag(x.substr(0,i), true); + tag = parsexmltag(x.slice(0,i), true); if(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc}); - d = x.substr(i); + d = x.slice(i); p = ({t:""}); if((cref=d.match(match_v))!= null && cref[1] !== '') p.v=unescapexml(cref[1]); if(opts.cellFormula) { if((cref=d.match(match_f))!= null && cref[1] !== '') { /* TODO: match against XLSXFutureFunctions */ - p.f=unescapexml(utf8read(cref[1])).replace(/_xlfn\./,""); + p.f=unescapexml(utf8read(cref[1])).replace(/\r\n/g, "\n"); + if(!opts.xlfn) p.f = _xlfn(p.f); if(cref[0].indexOf('t="array"') > -1) { p.F = (d.match(refregex)||[])[1]; if(p.F.indexOf(":") > -1) arrayf.push([safe_decode_range(p.F), p.F]); } else if(cref[0].indexOf('t="shared"') > -1) { // TODO: parse formula ftag = parsexmltag(cref[0]); - sharedf[parseInt(ftag.si, 10)] = [ftag, unescapexml(utf8read(cref[1]))]; + var ___f = unescapexml(utf8read(cref[1])); + if(!opts.xlfn) ___f = _xlfn(___f); + sharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r]; } } else if((cref=d.match(/]*\/>/))) { ftag = parsexmltag(cref[0]); - if(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][0].ref, tag.r); + if(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r); } /* TODO: factor out contains logic */ var _tag = decode_cell(tag.r); @@ -26888,20 +30192,23 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) { if(tag.t == null && p.v === undefined) { if(p.f || p.F) { p.v = 0; p.t = "n"; - } else if(!opts.sheetStubs) continue; + } else if(!sheetStubs) continue; else p.t = "z"; } else p.t = tag.t || "n"; - if(guess.s.c > idx) guess.s.c = idx; - if(guess.e.c < idx) guess.e.c = idx; + if(guess.s.c > tagc) guess.s.c = tagc; + if(guess.e.c < tagc) guess.e.c = tagc; /* 18.18.11 t ST_CellType */ switch(p.t) { case 'n': - p.v = parseFloat(p.v); + if(p.v == "" || p.v == null) { + if(!sheetStubs) continue; + p.t = 'z'; + } else p.v = parseFloat(p.v); break; case 's': if(typeof p.v == 'undefined') { - if(!opts.sheetStubs) continue; + if(!sheetStubs) continue; p.t = 'z'; } else { sstr = strs[parseInt(p.v, 10)]; @@ -26918,7 +30225,10 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) { case 'inlineStr': cref = d.match(isregex); p.t = 's'; - if(cref != null && (sstr = parse_si(cref[1]))) p.v = sstr.t; else p.v = ""; + if(cref != null && (sstr = parse_si(cref[1]))) { + p.v = sstr.t; + if(opts.cellHTML) p.h = sstr.h; + } else p.v = ""; break; case 'b': p.v = parsexmlbool(p.v); break; case 'd': @@ -26932,6 +30242,7 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) { } /* formatting */ fmtid = fillid = 0; + cf = null; if(do_format && tag.s !== undefined) { cf = styles.CellXf[tag.s]; if(cf != null) { @@ -26953,9 +30264,10 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) { if(rows.length > 0) s['!rows'] = rows; }; })(); -function write_ws_xml_data(ws, opts, idx, wb, rels) { - var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R=0, C=0, rows = ws['!rows']; +function write_ws_xml_data(ws, opts, idx, wb) { + var o = [], r = [], range = safe_decode_range(ws['!ref']), cell="", ref, rr = "", cols = [], R=0, C=0, rows = ws['!rows']; var dense = Array.isArray(ws); + var params = ({r:rr}), row, height = -1; for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C); for(R = range.s.r; R <= range.e.r; ++R) { r = []; @@ -26966,16 +30278,16 @@ function write_ws_xml_data(ws, opts, idx, wb, rels) { if(_cell === undefined) continue; if((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell); } - if(r.length > 0 || rows && rows[R]) { - var params = ({r:rr}); + if(r.length > 0 || (rows && rows[R])) { + params = ({r:rr}); if(rows && rows[R]) { - var row = rows[R]; + row = rows[R]; if(row.hidden) params.hidden = 1; - var height = -1; - if (row.hpx) height = px2pt(row.hpx); - else if (row.hpt) height = row.hpt; - if (height > -1) { params.ht = height; params.customHeight = 1; } - if (row.level) { params.outlineLevel = row.level; } + height = -1; + if(row.hpx) height = px2pt(row.hpx); + else if(row.hpt) height = row.hpt; + if(height > -1) { params.ht = height; params.customHeight = 1; } + if(row.level) { params.outlineLevel = row.level; } } o[o.length] = (writextag('row', r.join(""), params)); } @@ -27006,12 +30318,19 @@ function write_ws_xml(idx, opts, wb, rels) { var s = wb.SheetNames[idx], sidx = 0, rdata = ""; var ws = wb.Sheets[s]; if(ws == null) ws = {}; - var ref = ws['!ref']; if(ref == null) ref = 'A1'; + var ref = ws['!ref'] || 'A1'; + var range = safe_decode_range(ref); + if(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) { + if(opts.WTF) throw new Error("Range " + ref + " exceeds format limit A1:XFD1048576"); + range.e.c = Math.min(range.e.c, 0x3FFF); + range.e.r = Math.min(range.e.c, 0xFFFFF); + ref = encode_range(range); + } if(!rels) rels = {}; ws['!comments'] = []; - ws['!drawing'] = []; + var _drawing = []; - o[o.length] = (writextag('sheetPr', null, {'codeName': escapexml(wb.SheetNames[idx])})); + write_ws_xml_sheetpr(ws, wb, idx, opts, o); o[o.length] = (writextag('dimension', null, {'ref': ref})); @@ -27036,12 +30355,12 @@ function write_ws_xml(idx, opts, wb, rels) { /* sheetCalcPr */ - if(ws['!protect'] != null) o[o.length] = write_ws_xml_protection(ws['!protect']); + if(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']); /* protectedRanges */ /* scenarios */ - if(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter']); + if(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx); /* sortState */ /* dataConsolidate */ @@ -27056,11 +30375,14 @@ function write_ws_xml(idx, opts, wb, rels) { var relc = -1, rel, rId = -1; if(ws['!links'].length > 0) { o[o.length] = ""; - ws['!links'].forEach(function(l) { +ws['!links'].forEach(function(l) { if(!l[1].Target) return; - rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, ""), RELS.HLINK); - rel = ({"ref":l[0], "r:id":"rId"+rId}); - if((relc = l[1].Target.indexOf("#")) > -1) rel.location = escapexml(l[1].Target.substr(relc+1)); + rel = ({"ref":l[0]}); + if(l[1].Target.charAt(0) != "#") { + rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, ""), RELS.HLINK); + rel["r:id"] = "rId"+rId; + } + if((relc = l[1].Target.indexOf("#")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1)); if(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip); o[o.length] = writextag("hyperlink",null,rel); }); @@ -27069,24 +30391,25 @@ function write_ws_xml(idx, opts, wb, rels) { delete ws['!links']; /* printOptions */ - if (ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']); - /* pageSetup */ - var hfidx = o.length; - o[o.length] = ""; + if(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']); + /* pageSetup */ + /* headerFooter */ /* rowBreaks */ /* colBreaks */ /* customProperties */ /* cellWatches */ - /* ignoredErrors */ + + if(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag("ignoredErrors", writextag("ignoredError", null, {numberStoredAsText:1, sqref:ref})); + /* smartTags */ - if(ws['!drawing'].length > 0) { + if(_drawing.length > 0) { rId = add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW); o[o.length] = writextag("drawing", null, {"r:id":"rId" + rId}); + ws['!drawing'] = _drawing; } - else delete ws['!drawing']; if(ws['!comments'].length > 0) { rId = add_rels(rels, -1, "../drawings/vmlDrawing" + (idx+1) + ".vml", RELS.VML); @@ -27094,19 +30417,19 @@ function write_ws_xml(idx, opts, wb, rels) { ws['!legacy'] = rId; } - /* drawingHF */ + /* legacyDrawingHF */ /* picture */ /* oleObjects */ /* controls */ /* webPublishItems */ /* tableParts */ - /* extList */ + /* extLst */ - if(o.length>2) { o[o.length] = (''); o[1]=o[1].replace("/>",">"); } + if(o.length>1) { o[o.length] = (''); o[1]=o[1].replace("/>",">"); } return o.join(""); } -/* [MS-XLSB] 2.4.718 BrtRowHdr */ +/* [MS-XLSB] 2.4.726 BrtRowHdr */ function parse_BrtRowHdr(data, length) { var z = ({}); var tgt = data.l + length; @@ -27149,7 +30472,7 @@ function write_BrtRowHdr(R, range, ws) { var caddr = {r:R, c:0}; for(var i = 0; i < 16; ++i) { - if(range.s.c > ((i+1) << 10) || range.e.c < (i << 10)) continue; + if((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue; var first = -1, last = -1; for(var j = (i<<10); j < ((i+1)<<10); ++j) { caddr.c = j; @@ -27171,29 +30494,38 @@ function write_BrtRowHdr(R, range, ws) { } function write_row_header(ba, ws, range, R) { var o = write_BrtRowHdr(R, range, ws); - if(o.length > 17 || (ws['!rows']||[])[R]) write_record(ba, 'BrtRowHdr', o); + if((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 'BrtRowHdr', o); } -/* [MS-XLSB] 2.4.812 BrtWsDim */ +/* [MS-XLSB] 2.4.820 BrtWsDim */ var parse_BrtWsDim = parse_UncheckedRfX; var write_BrtWsDim = write_UncheckedRfX; -/* [MS-XLSB] 2.4.813 BrtWsFmtInfo */ -function parse_BrtWsFmtInfo(data, length) { +/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */ +function parse_BrtWsFmtInfo() { } //function write_BrtWsFmtInfo(ws, o) { } -/* [MS-XLSB] 2.4.815 BrtWsProp */ +/* [MS-XLSB] 2.4.823 BrtWsProp */ function parse_BrtWsProp(data, length) { var z = {}; + var f = data[data.l]; ++data.l; + z.above = !(f & 0x40); + z.left = !(f & 0x80); /* TODO: pull flags */ - data.l += 19; + data.l += 18; z.name = parse_XLSBCodeName(data, length - 19); return z; } -function write_BrtWsProp(str, o) { +function write_BrtWsProp(str, outl, o) { if(o == null) o = new_buf(84+4*str.length); - for(var i = 0; i < 3; ++i) o.write_shift(1,0); + var f = 0xC0; + if(outl) { + if(outl.above) f &= ~0x40; + if(outl.left) f &= ~0x80; + } + o.write_shift(1, f); + for(var i = 1; i < 3; ++i) o.write_shift(1,0); write_BrtColor({auto:1}, o); o.write_shift(-4,-1); o.write_shift(-4,-1); @@ -27201,8 +30533,8 @@ function write_BrtWsProp(str, o) { return o.slice(0, o.l); } -/* [MS-XLSB] 2.4.303 BrtCellBlank */ -function parse_BrtCellBlank(data, length) { +/* [MS-XLSB] 2.4.306 BrtCellBlank */ +function parse_BrtCellBlank(data) { var cell = parse_XLSBCell(data); return [cell]; } @@ -27210,10 +30542,17 @@ function write_BrtCellBlank(cell, ncell, o) { if(o == null) o = new_buf(8); return write_XLSBCell(ncell, o); } +function parse_BrtShortBlank(data) { + var cell = parse_XLSBShortCell(data); + return [cell]; +} +function write_BrtShortBlank(cell, ncell, o) { + if(o == null) o = new_buf(4); + return write_XLSBShortCell(ncell, o); +} - -/* [MS-XLSB] 2.4.304 BrtCellBool */ -function parse_BrtCellBool(data, length) { +/* [MS-XLSB] 2.4.307 BrtCellBool */ +function parse_BrtCellBool(data) { var cell = parse_XLSBCell(data); var fBool = data.read_shift(1); return [cell, fBool, 'b']; @@ -27224,16 +30563,47 @@ function write_BrtCellBool(cell, ncell, o) { o.write_shift(1, cell.v ? 1 : 0); return o; } +function parse_BrtShortBool(data) { + var cell = parse_XLSBShortCell(data); + var fBool = data.read_shift(1); + return [cell, fBool, 'b']; +} +function write_BrtShortBool(cell, ncell, o) { + if(o == null) o = new_buf(5); + write_XLSBShortCell(ncell, o); + o.write_shift(1, cell.v ? 1 : 0); + return o; +} -/* [MS-XLSB] 2.4.305 BrtCellError */ -function parse_BrtCellError(data, length) { +/* [MS-XLSB] 2.4.308 BrtCellError */ +function parse_BrtCellError(data) { var cell = parse_XLSBCell(data); var bError = data.read_shift(1); return [cell, bError, 'e']; } +function write_BrtCellError(cell, ncell, o) { + if(o == null) o = new_buf(9); + write_XLSBCell(ncell, o); + o.write_shift(1, cell.v); + return o; +} +function parse_BrtShortError(data) { + var cell = parse_XLSBShortCell(data); + var bError = data.read_shift(1); + return [cell, bError, 'e']; +} +function write_BrtShortError(cell, ncell, o) { + if(o == null) o = new_buf(8); + write_XLSBShortCell(ncell, o); + o.write_shift(1, cell.v); + o.write_shift(2, 0); + o.write_shift(1, 0); + return o; +} -/* [MS-XLSB] 2.4.308 BrtCellIsst */ -function parse_BrtCellIsst(data, length) { + +/* [MS-XLSB] 2.4.311 BrtCellIsst */ +function parse_BrtCellIsst(data) { var cell = parse_XLSBCell(data); var isst = data.read_shift(4); return [cell, isst, 's']; @@ -27244,9 +30614,20 @@ function write_BrtCellIsst(cell, ncell, o) { o.write_shift(4, ncell.v); return o; } +function parse_BrtShortIsst(data) { + var cell = parse_XLSBShortCell(data); + var isst = data.read_shift(4); + return [cell, isst, 's']; +} +function write_BrtShortIsst(cell, ncell, o) { + if(o == null) o = new_buf(8); + write_XLSBShortCell(ncell, o); + o.write_shift(4, ncell.v); + return o; +} -/* [MS-XLSB] 2.4.310 BrtCellReal */ -function parse_BrtCellReal(data, length) { +/* [MS-XLSB] 2.4.313 BrtCellReal */ +function parse_BrtCellReal(data) { var cell = parse_XLSBCell(data); var value = parse_Xnum(data); return [cell, value, 'n']; @@ -27257,9 +30638,20 @@ function write_BrtCellReal(cell, ncell, o) { write_Xnum(cell.v, o); return o; } +function parse_BrtShortReal(data) { + var cell = parse_XLSBShortCell(data); + var value = parse_Xnum(data); + return [cell, value, 'n']; +} +function write_BrtShortReal(cell, ncell, o) { + if(o == null) o = new_buf(12); + write_XLSBShortCell(ncell, o); + write_Xnum(cell.v, o); + return o; +} -/* [MS-XLSB] 2.4.311 BrtCellRk */ -function parse_BrtCellRk(data, length) { +/* [MS-XLSB] 2.4.314 BrtCellRk */ +function parse_BrtCellRk(data) { var cell = parse_XLSBCell(data); var value = parse_RkNumber(data); return [cell, value, 'n']; @@ -27270,10 +30662,21 @@ function write_BrtCellRk(cell, ncell, o) { write_RkNumber(cell.v, o); return o; } +function parse_BrtShortRk(data) { + var cell = parse_XLSBShortCell(data); + var value = parse_RkNumber(data); + return [cell, value, 'n']; +} +function write_BrtShortRk(cell, ncell, o) { + if(o == null) o = new_buf(8); + write_XLSBShortCell(ncell, o); + write_RkNumber(cell.v, o); + return o; +} -/* [MS-XLSB] 2.4.314 BrtCellSt */ -function parse_BrtCellSt(data, length) { +/* [MS-XLSB] 2.4.317 BrtCellSt */ +function parse_BrtCellSt(data) { var cell = parse_XLSBCell(data); var value = parse_XLWideString(data); return [cell, value, 'str']; @@ -27284,8 +30687,19 @@ function write_BrtCellSt(cell, ncell, o) { write_XLWideString(cell.v, o); return o.length > o.l ? o.slice(0, o.l) : o; } +function parse_BrtShortSt(data) { + var cell = parse_XLSBShortCell(data); + var value = parse_XLWideString(data); + return [cell, value, 'str']; +} +function write_BrtShortSt(cell, ncell, o) { + if(o == null) o = new_buf(8 + 4 * cell.v.length); + write_XLSBShortCell(ncell, o); + write_XLWideString(cell.v, o); + return o.length > o.l ? o.slice(0, o.l) : o; +} -/* [MS-XLSB] 2.4.647 BrtFmlaBool */ +/* [MS-XLSB] 2.4.653 BrtFmlaBool */ function parse_BrtFmlaBool(data, length, opts) { var end = data.l + length; var cell = parse_XLSBCell(data); @@ -27301,7 +30715,7 @@ function parse_BrtFmlaBool(data, length, opts) { return o; } -/* [MS-XLSB] 2.4.648 BrtFmlaError */ +/* [MS-XLSB] 2.4.654 BrtFmlaError */ function parse_BrtFmlaError(data, length, opts) { var end = data.l + length; var cell = parse_XLSBCell(data); @@ -27317,7 +30731,7 @@ function parse_BrtFmlaError(data, length, opts) { return o; } -/* [MS-XLSB] 2.4.649 BrtFmlaNum */ +/* [MS-XLSB] 2.4.655 BrtFmlaNum */ function parse_BrtFmlaNum(data, length, opts) { var end = data.l + length; var cell = parse_XLSBCell(data); @@ -27333,7 +30747,7 @@ function parse_BrtFmlaNum(data, length, opts) { return o; } -/* [MS-XLSB] 2.4.650 BrtFmlaString */ +/* [MS-XLSB] 2.4.656 BrtFmlaString */ function parse_BrtFmlaString(data, length, opts) { var end = data.l + length; var cell = parse_XLSBCell(data); @@ -27349,18 +30763,18 @@ function parse_BrtFmlaString(data, length, opts) { return o; } -/* [MS-XLSB] 2.4.676 BrtMergeCell */ +/* [MS-XLSB] 2.4.682 BrtMergeCell */ var parse_BrtMergeCell = parse_UncheckedRfX; var write_BrtMergeCell = write_UncheckedRfX; -/* [MS-XLSB] 2.4.108 BrtBeginMergeCells */ +/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */ function write_BrtBeginMergeCells(cnt, o) { if(o == null) o = new_buf(4); o.write_shift(4, cnt); return o; } -/* [MS-XLSB] 2.4.656 BrtHLink */ -function parse_BrtHLink(data, length, opts) { +/* [MS-XLSB] 2.4.662 BrtHLink */ +function parse_BrtHLink(data, length) { var end = data.l + length; var rfx = parse_UncheckedRfX(data, 16); var relId = parse_XLNullableWideString(data); @@ -27368,20 +30782,26 @@ function parse_BrtHLink(data, length, opts) { var tooltip = parse_XLWideString(data); var display = parse_XLWideString(data); data.l = end; - return {rfx:rfx, relId:relId, loc:loc, Tooltip:tooltip, display:display}; + var o = ({rfx:rfx, relId:relId, loc:loc, display:display}); + if(tooltip) o.Tooltip = tooltip; + return o; } -function write_BrtHLink(l, rId, o) { - if(o == null) o = new_buf(50+4*l[1].Target.length); +function write_BrtHLink(l, rId) { + var o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || "").length)); write_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o); write_RelID("rId" + rId, o); var locidx = l[1].Target.indexOf("#"); - var loc = locidx == -1 ? "" : l[1].Target.substr(locidx+1); + var loc = locidx == -1 ? "" : l[1].Target.slice(locidx+1); write_XLWideString(loc || "", o); write_XLWideString(l[1].Tooltip || "", o); write_XLWideString("", o); return o.slice(0, o.l); } +/* [MS-XLSB] 2.4.692 BrtPane */ +function parse_BrtPane(/*data, length, opts*/) { +} + /* [MS-XLSB] 2.4.6 BrtArrFmla */ function parse_BrtArrFmla(data, length, opts) { var end = data.l + length; @@ -27395,7 +30815,7 @@ function parse_BrtArrFmla(data, length, opts) { return o; } -/* [MS-XLSB] 2.4.742 BrtShrFmla */ +/* [MS-XLSB] 2.4.750 BrtShrFmla */ function parse_BrtShrFmla(data, length, opts) { var end = data.l + length; var rfx = parse_UncheckedRfX(data, 16); @@ -27420,38 +30840,36 @@ function write_BrtColInfo(C, col, o) { var flags = 0; if(col.hidden) flags |= 0x01; if(typeof p.width == 'number') flags |= 0x02; - o.write_shift(1, flags); // bit flag - o.write_shift(1, 0); // bit flag + if(col.level) flags |= (col.level << 8); + o.write_shift(2, flags); // bit flag return o; } -/* [MS-XLSB] 2.4.672 BrtMargins */ -function parse_BrtMargins(data, length, opts) { - return { - left: parse_Xnum(data, 8), - right: parse_Xnum(data, 8), - top: parse_Xnum(data, 8), - bottom: parse_Xnum(data, 8), - header: parse_Xnum(data, 8), - footer: parse_Xnum(data, 8) - }; +/* [MS-XLSB] 2.4.678 BrtMargins */ +var BrtMarginKeys = ["left","right","top","bottom","header","footer"]; +function parse_BrtMargins(data) { + var margins = ({}); + BrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); }); + return margins; } function write_BrtMargins(margins, o) { if(o == null) o = new_buf(6*8); default_margins(margins); - write_Xnum(margins.left, o); - write_Xnum(margins.right, o); - write_Xnum(margins.top, o); - write_Xnum(margins.bottom, o); - write_Xnum(margins.header, o); - write_Xnum(margins.footer, o); + BrtMarginKeys.forEach(function(k) { write_Xnum((margins)[k], o); }); return o; } -/* [MS-XLSB] 2.4.292 BrtBeginWsView */ -function write_BrtBeginWsView(ws, o) { +/* [MS-XLSB] 2.4.299 BrtBeginWsView */ +function parse_BrtBeginWsView(data) { + var f = data.read_shift(2); + data.l += 28; + return { RTL: f & 0x20 }; +} +function write_BrtBeginWsView(ws, Workbook, o) { if(o == null) o = new_buf(30); - o.write_shift(2, 924); // bit flag + var f = 0x39c; + if((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20; + o.write_shift(2, f); // bit flag o.write_shift(4, 0); o.write_shift(4, 0); // view first row o.write_shift(4, 0); // view first col @@ -27466,7 +30884,16 @@ function write_BrtBeginWsView(ws, o) { return o; } -/* [MS-XLSB] 2.4.740 BrtSheetProtection */ +/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */ +function write_BrtCellIgnoreEC(ref) { + var o = new_buf(24); + o.write_shift(4, 4); + o.write_shift(4, 1); + write_UncheckedRfX(ref, o); + return o; +} + +/* [MS-XLSB] 2.4.748 BrtSheetProtection */ function write_BrtSheetProtection(sp, o) { if(o == null) o = new_buf(16*4+2); o.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0); @@ -27494,8 +30921,12 @@ if(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0); return o; } +function parse_BrtDVal(/*data, length, opts*/) { +} +function parse_BrtDVal14(/*data, length, opts*/) { +} /* [MS-XLSB] 2.1.7.61 Worksheet */ -function parse_ws_bin(data, _opts, rels, wb, themes, styles) { +function parse_ws_bin(data, _opts, idx, rels, wb, themes, styles) { if(!data) return data; var opts = _opts || {}; if(!rels) rels = {'!id':{}}; @@ -27505,27 +30936,31 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { var ref; var refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} }; + var state = []; var pass = false, end = false; var row, p, cf, R, C, addr, sstr, rr, cell; - var mergecells = []; + var merges = []; opts.biff = 12; opts['!row'] = 0; var ai = 0, af = false; - var array_formulae = []; - var shared_formulae = {}; - var supbooks = ([[]]); - supbooks.sharedf = shared_formulae; - supbooks.arrayf = array_formulae; + var arrayf = []; + var sharedf = {}; + var supbooks = opts.supbooks || wb.supbooks || ([[]]); + supbooks.sharedf = sharedf; + supbooks.arrayf = arrayf; supbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; }); - opts.supbooks = supbooks; - for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i]; + if(!opts.supbooks) { + opts.supbooks = supbooks; + if(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i]; + } var colinfo = [], rowinfo = []; - var defwidth = 0, defheight = 0; // twips / MDW respectively var seencol = false; + XLSBRecordEnum[0x0010] = { n:"BrtShortReal", f:parse_BrtShortReal }; + recordhopper(data, function ws_parse(val, R_n, RT) { if(end) return; switch(RT) { @@ -27552,22 +30987,28 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { case 0x0009: /* 'BrtFmlaNum' */ case 0x000A: /* 'BrtFmlaBool' */ case 0x000B: /* 'BrtFmlaError' */ + case 0x000D: /* 'BrtShortRk' */ + case 0x000E: /* 'BrtShortError' */ + case 0x000F: /* 'BrtShortBool' */ + case 0x0010: /* 'BrtShortReal' */ + case 0x0011: /* 'BrtShortSt' */ + case 0x0012: /* 'BrtShortIsst' */ p = ({t:val[2]}); switch(val[2]) { case 'n': p.v = val[1]; break; case 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break; case 'b': p.v = val[1] ? true : false; break; case 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break; - case 'str': p.t = 's'; p.v = utf8read(val[1]); break; + case 'str': p.t = 's'; p.v = val[1]; break; } if((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles); - C = val[0].c; + C = val[0].c == -1 ? C + 1 : val[0].c; if(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; } else s[encode_col(C) + rr] = p; if(opts.cellFormula) { af = false; - for(ai = 0; ai < array_formulae.length; ++ai) { - var aii = array_formulae[ai]; + for(ai = 0; ai < arrayf.length; ++ai) { + var aii = arrayf[ai]; if(row.r >= aii[0].s.r && row.r <= aii[0].e.r) if(C >= aii[0].s.c && C <= aii[0].e.c) { p.F = encode_range(aii[0]); af = true; @@ -27585,9 +31026,10 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { break; case 0x0001: /* 'BrtCellBlank' */ + case 0x000C: /* 'BrtShortBlank' */ if(!opts.sheetStubs || pass) break; p = ({t:'z',v:undefined}); - C = val[0].c; + C = val[0].c == -1 ? C + 1 : val[0].c; if(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; } else s[encode_col(C) + rr] = p; if(refguess.s.r > row.r) refguess.s.r = row.r; @@ -27597,7 +31039,7 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { break; case 0x00B0: /* 'BrtMergeCell' */ - mergecells.push(val); break; + merges.push(val); break; case 0x01EE: /* 'BrtHLink' */ var rel = rels['!id'][val.relId]; @@ -27605,6 +31047,8 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { val.Target = rel.Target; if(val.loc) val.Target += "#"+val.loc; val.Rel = rel; + } else if(val.relId == '') { + val.Target = "#" + val.loc; } for(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) { if(opts.dense) { @@ -27621,14 +31065,14 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { case 0x01AA: /* 'BrtArrFmla' */ if(!opts.cellFormula) break; - array_formulae.push(val); + arrayf.push(val); cell = ((opts.dense ? s[R][C] : s[encode_col(C) + rr])); cell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts); cell.F = encode_range(val[0]); break; case 0x01AB: /* 'BrtShrFmla' */ if(!opts.cellFormula) break; - shared_formulae[encode_cell(val[0].s)] = val[1]; + sharedf[encode_cell(val[0].s)] = val[1]; cell = (opts.dense ? s[R][C] : s[encode_col(C) + rr]); cell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts); break; @@ -27637,7 +31081,7 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { case 0x003C: /* 'BrtColInfo' */ if(!opts.cellStyles) break; while(val.e >= val.s) { - colinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01) }; + colinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level }; if(!seencol) { seencol = true; find_mdw_colw(val.w/256); } process_col(colinfo[val.e+1]); } @@ -27651,8 +31095,28 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { s['!margins'] = val; break; + case 0x0093: /* 'BrtWsProp' */ + if(!wb.Sheets[idx]) wb.Sheets[idx] = {}; + if(val.name) wb.Sheets[idx].CodeName = val.name; + if(val.above || val.left) s['!outline'] = { above: val.above, left: val.left }; + break; + + case 0x0089: /* 'BrtBeginWsView' */ + if(!wb.Views) wb.Views = [{}]; + if(!wb.Views[0]) wb.Views[0] = {}; + if(val.RTL) wb.Views[0].RTL = true; + break; + case 0x01E5: /* 'BrtWsFmtInfo' */ - /* case 'BrtUid' */ + break; + + case 0x0040: /* 'BrtDVal' */ + case 0x041D: /* 'BrtDVal14' */ + break; + + case 0x0097: /* 'BrtPane' */ + break; + case 0x0098: /* 'BrtSel' */ case 0x00AF: /* 'BrtAFilterDateGroupItem' */ case 0x0284: /* 'BrtActiveX' */ case 0x0271: /* 'BrtBigName' */ @@ -27673,8 +31137,7 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { case 0x00AE: /* 'BrtCustomFilter' */ case 0x049C: /* 'BrtCustomFilter14' */ case 0x01F3: /* 'BrtDRef' */ - case 0x0040: /* 'BrtDVal' */ - case 0x041D: /* 'BrtDVal14' */ + case 0x01FB: /* 'BrtDXF' */ case 0x0226: /* 'BrtDrawing' */ case 0x00AB: /* 'BrtDynamicFilter' */ case 0x00A7: /* 'BrtFilter' */ @@ -27686,7 +31149,6 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { case 0x0295: /* 'BrtListPart' */ case 0x027F: /* 'BrtOleObject' */ case 0x01DE: /* 'BrtPageSetup' */ - case 0x0097: /* 'BrtPane' */ case 0x0219: /* 'BrtPhoneticInfo' */ case 0x01DD: /* 'BrtPrintOptions' */ case 0x0218: /* 'BrtRangeProtection' */ @@ -27694,7 +31156,6 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { case 0x02A8: /* 'BrtRangeProtectionIso' */ case 0x0450: /* 'BrtRangeProtectionIso14' */ case 0x0400: /* 'BrtRwDescent' */ - case 0x0098: /* 'BrtSel' */ case 0x0297: /* 'BrtSheetCalcProp' */ case 0x0217: /* 'BrtSheetProtection' */ case 0x02A6: /* 'BrtSheetProtectionIso' */ @@ -27702,18 +31163,20 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { case 0x0413: /* 'BrtSparkline' */ case 0x01AC: /* 'BrtTable' */ case 0x00AA: /* 'BrtTop10Filter' */ + case 0x0C00: /* 'BrtUid' */ case 0x0032: /* 'BrtValueMeta' */ case 0x0816: /* 'BrtWebExtension' */ case 0x0415: /* 'BrtWsFmtInfoEx14' */ - case 0x0093: /* 'BrtWsProp' */ break; case 0x0023: /* 'BrtFRTBegin' */ pass = true; break; case 0x0024: /* 'BrtFRTEnd' */ pass = false; break; - case 0x0025: /* 'BrtACBegin' */ break; - case 0x0026: /* 'BrtACEnd' */ break; + case 0x0025: /* 'BrtACBegin' */ + state.push(R_n); pass = true; break; + case 0x0026: /* 'BrtACEnd' */ + state.pop(); pass = false; break; default: if((R_n||"").indexOf("Begin") > 0){/* empty */} @@ -27728,7 +31191,7 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { if(!s["!ref"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s["!ref"] = encode_range(ref || refguess); if(opts.sheetRows && s["!ref"]) { var tmpref = safe_decode_range(s["!ref"]); - if(opts.sheetRows < +tmpref.e.r) { + if(opts.sheetRows <= +tmpref.e.r) { tmpref.e.r = opts.sheetRows - 1; if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r; if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r; @@ -27738,22 +31201,22 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) { s["!ref"] = encode_range(tmpref); } } - if(mergecells.length > 0) s["!merges"] = mergecells; + if(merges.length > 0) s["!merges"] = merges; if(colinfo.length > 0) s["!cols"] = colinfo; if(rowinfo.length > 0) s["!rows"] = rowinfo; return s; } /* TODO: something useful -- this is a stub */ -function write_ws_bin_cell(ba, cell, R, C, opts, ws) { - if(cell.v === undefined) return ""; - var vv = ""; var olddate = null; +function write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen) { + if(cell.v === undefined) return false; + var vv = ""; switch(cell.t) { case 'b': vv = cell.v ? "1" : "0"; break; case 'd': // no BrtCellDate :( + cell = dup(cell); cell.z = cell.z || SSF._table[14]; - olddate = cell.v; - cell.v = datenum((cell.v)); cell.t = 'n'; + cell.v = datenum(parseDate(cell.v)); cell.t = 'n'; break; /* falls through */ case 'n': case 'e': vv = ''+cell.v; break; @@ -27767,30 +31230,42 @@ function write_ws_bin_cell(ba, cell, R, C, opts, ws) { switch(cell.t) { case 's': case 'str': if(opts.bookSST) { - vv = get_sst_id(opts.Strings, (cell.v)); + vv = get_sst_id(opts.Strings, (cell.v), opts.revStrings); o.t = "s"; o.v = vv; - write_record(ba, "BrtCellIsst", write_BrtCellIsst(cell, o)); + if(last_seen) write_record(ba, "BrtShortIsst", write_BrtShortIsst(cell, o)); + else write_record(ba, "BrtCellIsst", write_BrtCellIsst(cell, o)); } else { o.t = "str"; - write_record(ba, "BrtCellSt", write_BrtCellSt(cell, o)); + if(last_seen) write_record(ba, "BrtShortSt", write_BrtShortSt(cell, o)); + else write_record(ba, "BrtCellSt", write_BrtCellSt(cell, o)); } - return; + return true; case 'n': /* TODO: determine threshold for Real vs RK */ - if(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) write_record(ba, "BrtCellRk", write_BrtCellRk(cell, o)); - else write_record(ba, "BrtCellReal", write_BrtCellReal(cell, o)); - if(olddate) { cell.t = 'd'; cell.v = olddate; } - return; + if(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) { + if(last_seen) write_record(ba, "BrtShortRk", write_BrtShortRk(cell, o)); + else write_record(ba, "BrtCellRk", write_BrtCellRk(cell, o)); + } else { + if(last_seen) write_record(ba, "BrtShortReal", write_BrtShortReal(cell, o)); + else write_record(ba, "BrtCellReal", write_BrtCellReal(cell, o)); + } return true; case 'b': o.t = "b"; - write_record(ba, "BrtCellBool", write_BrtCellBool(cell, o)); - return; - case 'e': /* TODO: error */ o.t = "e"; break; + if(last_seen) write_record(ba, "BrtShortBool", write_BrtShortBool(cell, o)); + else write_record(ba, "BrtCellBool", write_BrtCellBool(cell, o)); + return true; + case 'e': + o.t = "e"; + if(last_seen) write_record(ba, "BrtShortError", write_BrtShortError(cell, o)); + else write_record(ba, "BrtCellError", write_BrtCellError(cell, o)); + return true; } - write_record(ba, "BrtCellBlank", write_BrtCellBlank(cell, o)); + if(last_seen) write_record(ba, "BrtShortBlank", write_BrtShortBlank(cell, o)); + else write_record(ba, "BrtCellBlank", write_BrtCellBlank(cell, o)); + return true; } -function write_CELLTABLE(ba, ws, idx, opts, wb) { +function write_CELLTABLE(ba, ws, idx, opts) { var range = safe_decode_range(ws['!ref'] || "A1"), ref, rr = "", cols = []; write_record(ba, 'BrtBeginSheetData'); var dense = Array.isArray(ws); @@ -27801,14 +31276,15 @@ function write_CELLTABLE(ba, ws, idx, opts, wb) { /* [ACCELLTABLE] */ /* BrtRowHdr */ write_row_header(ba, ws, range, R); + var last_seen = false; if(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) { /* *16384CELL */ if(R === range.s.r) cols[C] = encode_col(C); ref = cols[C] + rr; var cell = dense ? (ws[R]||[])[C] : ws[ref]; - if(!cell) continue; + if(!cell) { last_seen = false; continue; } /* write cell */ - write_ws_bin_cell(ba, cell, R, C, opts, ws); + last_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen); } } write_record(ba, 'BrtEndSheetData'); @@ -27821,13 +31297,20 @@ function write_MERGECELLS(ba, ws) { write_record(ba, 'BrtEndMergeCells'); } -function write_COLINFOS(ba, ws, idx, opts, wb) { +function write_COLINFOS(ba, ws) { if(!ws || !ws['!cols']) return; write_record(ba, 'BrtBeginColInfos'); ws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 'BrtColInfo', write_BrtColInfo(i, m)); }); write_record(ba, 'BrtEndColInfos'); } +function write_IGNOREECS(ba, ws) { + if(!ws || !ws['!ref']) return; + write_record(ba, 'BrtBeginCellIgnoreECs'); + write_record(ba, 'BrtCellIgnoreEC', write_BrtCellIgnoreEC(safe_decode_range(ws['!ref']))); + write_record(ba, 'BrtEndCellIgnoreECs'); +} + function write_HLINKS(ba, ws, rels) { /* *BrtHLink */ ws['!links'].forEach(function(l) { @@ -27846,20 +31329,37 @@ function write_LEGACYDRAWING(ba, ws, idx, rels) { } } -function write_AUTOFILTER(ba, ws) { +function write_AUTOFILTER(ba, ws, wb, idx) { if(!ws['!autofilter']) return; - write_record(ba, "BrtBeginAFilter", write_UncheckedRfX(decode_range(ws['!autofilter'].ref))); + var data = ws['!autofilter']; + var ref = typeof data.ref === "string" ? data.ref : encode_range(data.ref); + + /* Update FilterDatabase defined name for the worksheet */ + if(!wb.Workbook) wb.Workbook = ({Sheets:[]}); + if(!wb.Workbook.Names) wb.Workbook.Names = []; + var names = wb.Workbook.Names; + var range = decode_range(ref); + if(range.s.r == range.e.r) { range.e.r = decode_range(ws["!ref"]).e.r; ref = encode_range(range); } + for(var i = 0; i < names.length; ++i) { + var name = names[i]; + if(name.Name != '_xlnm._FilterDatabase') continue; + if(name.Sheet != idx) continue; + name.Ref = "'" + wb.SheetNames[idx] + "'!" + ref; break; + } + if(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref }); + + write_record(ba, "BrtBeginAFilter", write_UncheckedRfX(safe_decode_range(ref))); /* *FILTERCOLUMN */ /* [SORTSTATE] */ /* BrtEndAFilter */ write_record(ba, "BrtEndAFilter"); } -function write_WSVIEWS2(ba, ws) { +function write_WSVIEWS2(ba, ws, Workbook) { write_record(ba, "BrtBeginWsViews"); { /* 1*WSVIEW2 */ /* [ACUID] */ - write_record(ba, "BrtBeginWsView", write_BrtBeginWsView(ws)); + write_record(ba, "BrtBeginWsView", write_BrtBeginWsView(ws, Workbook)); /* [BrtPane] */ /* *4BrtSel */ /* *4SXSELECT */ @@ -27870,7 +31370,7 @@ function write_WSVIEWS2(ba, ws) { write_record(ba, "BrtEndWsViews"); } -function write_WSFMTINFO(ba, ws) { +function write_WSFMTINFO() { /* [ACWSFMTINFO] */ //write_record(ba, "BrtWsFmtInfo", write_BrtWsFmtInfo(ws)); } @@ -27884,14 +31384,20 @@ function write_SHEETPROTECT(ba, ws) { function write_ws_bin(idx, opts, wb, rels) { var ba = buf_array(); var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {}; + var c = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {} var r = safe_decode_range(ws['!ref'] || "A1"); + if(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) { + if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:XFD1048576"); + r.e.c = Math.min(r.e.c, 0x3FFF); + r.e.r = Math.min(r.e.c, 0xFFFFF); + } ws['!links'] = []; /* passed back to write_zip and removed there */ ws['!comments'] = []; write_record(ba, "BrtBeginSheet"); - write_record(ba, "BrtWsProp", write_BrtWsProp(s)); + if(wb.vbaraw || ws['!outline']) write_record(ba, "BrtWsProp", write_BrtWsProp(c, ws['!outline'])); write_record(ba, "BrtWsDim", write_BrtWsDim(r)); - write_WSVIEWS2(ba, ws); + write_WSVIEWS2(ba, ws, wb.Workbook); write_WSFMTINFO(ba, ws); write_COLINFOS(ba, ws, idx, opts, wb); write_CELLTABLE(ba, ws, idx, opts, wb); @@ -27899,7 +31405,7 @@ function write_ws_bin(idx, opts, wb, rels) { write_SHEETPROTECT(ba, ws); /* *([BrtRangeProtectionIso] BrtRangeProtection) */ /* [SCENMAN] */ - write_AUTOFILTER(ba, ws); + write_AUTOFILTER(ba, ws, wb, idx); /* [SORTSTATE] */ /* [DCON] */ /* [USERSHVIEWS] */ @@ -27916,7 +31422,7 @@ function write_ws_bin(idx, opts, wb, rels) { /* [COLBRK] */ /* *BrtBigName */ /* [CELLWATCHES] */ - /* [IGNOREECS] */ + if(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws); /* [SMARTTAGS] */ /* [BrtDrawing] */ write_LEGACYDRAWING(ba, ws, idx, rels); @@ -27930,20 +31436,27 @@ function write_ws_bin(idx, opts, wb, rels) { write_record(ba, "BrtEndSheet"); return ba.end(); } -function parse_numCache(data) { +RELS.CHART = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"; +RELS.CHARTEX = "http://schemas.microsoft.com/office/2014/relationships/chartEx"; + +function parse_Cache(data) { var col = []; + var num = data.match(/^/); + var f; /* 21.2.2.150 pt CT_NumVal */ (data.match(/(.*?)<\/c:pt>/mg)||[]).forEach(function(pt) { - var q = pt.match(/(.*)<\/c:v><\/c:pt>/); + var q = pt.match(/(.*)<\/c:v><\/c:pt>/); if(!q) return; - col[+q[1]] = +q[2]; + col[+q[1]] = num ? +q[2] : q[2]; }); /* 21.2.2.71 formatCode CT_Xstring */ var nf = unescapexml((data.match(/([\s\S]*?)<\/c:formatCode>/) || ["","General"])[1]); - return [col, nf]; + (data.match(/(.*?)<\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,""); }); + + return [col, nf, f]; } /* 21.2 DrawingML - Charts */ @@ -27957,7 +31470,7 @@ function parse_chart(data, name, opts, rels, wb, csheet) { /* 21.2.2.120 numCache CT_NumData */ (data.match(/[\s\S]*?<\/c:numCache>/gm)||[]).forEach(function(nc) { - var cache = parse_numCache(nc); + var cache = parse_Cache(nc); refguess.s.r = refguess.s.c = 0; refguess.e.c = C; col = encode_col(C); @@ -27979,23 +31492,34 @@ var CS_XML_ROOT = writextag('chartsheet', null, { }); /* 18.3 Worksheets also covers Chartsheets */ -function parse_cs_xml(data, opts, rels, wb, themes, styles) { +function parse_cs_xml(data, opts, idx, rels, wb) { if(!data) return data; /* 18.3.1.12 chartsheet CT_ChartSheet */ if(!rels) rels = {'!id':{}}; - var s = {'!type':"chart", '!chart':null, '!rel':""}; + var s = ({'!type':"chart", '!drawel':null, '!rel':""}); var m; + /* 18.3.1.83 sheetPr CT_ChartsheetPr */ + var sheetPr = data.match(sheetprregex); + if(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx); + /* 18.3.1.36 drawing CT_Drawing */ if((m = data.match(/drawing r:id="(.*?)"/))) s['!rel'] = m[1]; - if(rels['!id'][s['!rel']]) s['!chart'] = rels['!id'][s['!rel']]; + if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']]; return s; } -function parse_cs_bin(data, opts, rels, wb, themes, styles) { +function parse_BrtCsProp(data, length) { + data.l += 10; + var name = parse_XLWideString(data, length - 10); + return { name: name }; +} + +/* [MS-XLSB] 2.1.7.7 Chart Sheet */ +function parse_cs_bin(data, opts, idx, rels, wb) { if(!data) return data; if(!rels) rels = {'!id':{}}; - var s = {'!type':"chart", '!chart':null, '!rel':""}; + var s = {'!type':"chart", '!drawel':null, '!rel':""}; var state = []; var pass = false; recordhopper(data, function cs_parse(val, R_n, RT) { @@ -28004,15 +31528,19 @@ function parse_cs_bin(data, opts, rels, wb, themes, styles) { case 0x0226: /* 'BrtDrawing' */ s['!rel'] = val; break; - /* case 'BrtUid': */ + case 0x028B: /* 'BrtCsProp' */ + if(!wb.Sheets[idx]) wb.Sheets[idx] = {}; + if(val.name) wb.Sheets[idx].CodeName = val.name; + break; + case 0x0232: /* 'BrtBkHim' */ case 0x028C: /* 'BrtCsPageSetup' */ - case 0x028B: /* 'BrtCsProp' */ case 0x029D: /* 'BrtCsProtection' */ case 0x02A7: /* 'BrtCsProtectionIso' */ case 0x0227: /* 'BrtLegacyDrawing' */ case 0x0228: /* 'BrtLegacyDrawingHF' */ case 0x01DC: /* 'BrtMargins' */ + case 0x0C00: /* 'BrtUid' */ break; case 0x0023: /* 'BrtFRTBegin' */ @@ -28031,7 +31559,7 @@ function parse_cs_bin(data, opts, rels, wb, themes, styles) { } }, opts); - if(rels['!id'][s['!rel']]) s['!chart'] = rels['!id'][s['!rel']]; + if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']]; return s; } var WBPropsDef = [ @@ -28039,7 +31567,7 @@ var WBPropsDef = [ ['autoCompressPictures', true, "bool"], ['backupFile', false, "bool"], ['checkCompatibility', false, "bool"], - ['codeName', ''], + ['CodeName', ''], ['date1904', false, "bool"], ['defaultThemeVersion', 0, "int"], ['filterPrivacy', false, "bool"], @@ -28089,7 +31617,7 @@ var CalcPrDef = [ ]; /* 18.2.3 (CT_CustomWorkbookView) Defaults */ -var CustomWBViewDef = [ +/*var CustomWBViewDef = [ ['autoUpdate', 'false'], ['changesSavedWin', 'false'], ['includeHiddenRowCol', 'true'], @@ -28108,14 +31636,14 @@ var CustomWBViewDef = [ ['tabRatio', '600'], ['xWindow', '0'], ['yWindow', '0'] -]; +];*/ function push_defaults_array(target, defaults) { for(var j = 0; j != target.length; ++j) { var w = target[j]; for(var i=0; i != defaults.length; ++i) { var z = defaults[i]; if(w[z[0]] == null) w[z[0]] = z[1]; else switch(z[2]) { - case "bool": if(typeof w[z[0]] == "string") w[z[0]] = parsexmlbool(w[z[0]], z[0]); break; + case "bool": if(typeof w[z[0]] == "string") w[z[0]] = parsexmlbool(w[z[0]]); break; case "int": if(typeof w[z[0]] == "string") w[z[0]] = parseInt(w[z[0]], 10); break; } } @@ -28125,7 +31653,7 @@ function push_defaults(target, defaults) { for(var i = 0; i != defaults.length; ++i) { var z = defaults[i]; if(target[z[0]] == null) target[z[0]] = z[1]; else switch(z[2]) { - case "bool": if(typeof target[z[0]] == "string") target[z[0]] = parsexmlbool(target[z[0]], z[0]); break; + case "bool": if(typeof target[z[0]] == "string") target[z[0]] = parsexmlbool(target[z[0]]); break; case "int": if(typeof target[z[0]] == "string") target[z[0]] = parseInt(target[z[0]], 10); break; } } @@ -28138,7 +31666,14 @@ function parse_wb_defaults(wb) { push_defaults_array(wb.WBView, WBViewDef); push_defaults_array(wb.Sheets, SheetDef); - _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904'); + _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904); +} + +function safe1904(wb) { + /* TODO: store date1904 somewhere else */ + if(!wb.Workbook) return "false"; + if(!wb.Workbook.WBProps) return "false"; + return parsexmlbool(wb.Workbook.WBProps.date1904) ? "true" : "false"; } var badchars = "][*?\/\\".split(""); @@ -28152,15 +31687,22 @@ function check_ws_name(n, safe) { }); return _good; } -function check_wb_names(N) { +function check_wb_names(N, S, codes) { N.forEach(function(n,i) { check_ws_name(n); for(var j = 0; j < i; ++j) if(n == N[j]) throw new Error("Duplicate Sheet Name: " + n); + if(codes) { + var cn = (S && S[i] && S[i].CodeName) || n; + if(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error("Bad Code Name: Worksheet" + cn); + } }); } function check_wb(wb) { if(!wb || !wb.SheetNames || !wb.Sheets) throw new Error("Invalid Workbook"); - check_wb_names(wb.SheetNames); + if(!wb.SheetNames.length) throw new Error("Workbook is empty"); + var Sheets = (wb.Workbook && wb.Workbook.Sheets) || []; + check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw); + for(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i); /* TODO: validate workbook */ } /* 18.2 Workbook */ @@ -28170,7 +31712,6 @@ function parse_wb_xml(data, opts) { var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: "" }; var pass = false, xmlns = "xmlns"; var dname = {}, dnstart = 0; - /*(data.match(tagregex)||[]).forEach */ data.replace(tagregex, function xml_wb(x, idx) { var y = parsexmltag(x); switch(strip_ns(y[0])) { @@ -28188,7 +31729,9 @@ function parse_wb_xml(data, opts) { case '': case '': break; /* 18.2.12 fileSharing CT_FileSharing ? */ - case '': break; + case '': break; /* 18.2.28 workbookPr CT_WorkbookPr ? */ case '': break; /* 18.2.29 workbookProtection CT_WorkbookProtection ? */ - case '': break; /* 18.2.1 bookViews CT_BookViews ? */ case '': case '': break; /* 18.2.30 workbookView CT_BookView + */ - case '': delete y[0]; wb.WBView.push(y); break; case '': break; /* 18.2.20 sheets CT_Sheets 1 */ @@ -28245,13 +31790,14 @@ function parse_wb_xml(data, opts) { /* 18.2.5 definedName CT_DefinedName + */ case '': { - dname.Ref = data.slice(dnstart, idx); + dname.Ref = unescapexml(utf8read(data.slice(dnstart, idx))); wb.Names.push(dname); } break; case '': break; @@ -28266,7 +31812,7 @@ function parse_wb_xml(data, opts) { /* 18.2.4 customWorkbookViews CT_CustomWorkbookViews ? */ case '': case '': case '': break; /* 18.2.18 pivotCaches CT_PivotCaches ? */ @@ -28279,7 +31825,7 @@ function parse_wb_xml(data, opts) { /* 18.2.23 smartTagTypes CT_SmartTagTypes ? */ case '': case '': break; - /* 18.2.22 smartTagType CT_SmartTagType ? */ + /* 18.2.22 smartTagType CT_SmartTagType ? */ case '': case '': case '': break; - /* 18.2.7 ext CT_Extension + */ + /* 18.2.7 ext CT_Extension + */ case '': pass=false; break; /* Others */ case '': pass=true; break; case '': pass=false; break; /* TODO */ @@ -28325,7 +31872,7 @@ var WB_XML_ROOT = writextag('workbook', null, { 'xmlns:r': XMLNS.r }); -function write_wb_xml(wb, opts) { +function write_wb_xml(wb) { var o = [XML_HEADER]; o[o.length] = WB_XML_ROOT; @@ -28336,22 +31883,35 @@ function write_wb_xml(wb, opts) { var workbookPr = ({codeName:"ThisWorkbook"}); if(wb.Workbook && wb.Workbook.WBProps) { - if(wb.Workbook.WBProps.codeName) workbookPr.codeName = wb.Workbook.WBProps.codeName; WBPropsDef.forEach(function(x) { if((wb.Workbook.WBProps[x[0]]) == null) return; if((wb.Workbook.WBProps[x[0]]) == x[1]) return; workbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]); }); +if(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; } } o[o.length] = (writextag('workbookPr', null, workbookPr)); /* workbookProtection */ - /* bookViews */ - o[o.length] = ""; var sheets = wb.Workbook && wb.Workbook.Sheets || []; - for(var i = 0; i != wb.SheetNames.length; ++i) { - var sht = ({name:escapexml(wb.SheetNames[i].substr(0,31))}); + var i = 0; + + /* bookViews only written if first worksheet is hidden */ + if(sheets && sheets[0] && !!sheets[0].Hidden) { + o[o.length] = ""; + for(i = 0; i != wb.SheetNames.length; ++i) { + if(!sheets[i]) break; + if(!sheets[i].Hidden) break; + } + if(i == wb.SheetNames.length) i = 0; + o[o.length] = ''; + o[o.length] = ""; + } + + o[o.length] = ""; + for(i = 0; i != wb.SheetNames.length; ++i) { + var sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}); sht.sheetId = ""+(i+1); sht["r:id"] = "rId"+(i+1); if(sheets[i]) switch(sheets[i].Hidden) { @@ -28371,8 +31931,9 @@ if((wb.Workbook.WBProps[x[0]]) == null) return; var d = {name:n.Name}; if(n.Comment) d.comment = n.Comment; if(n.Sheet != null) d.localSheetId = ""+n.Sheet; + if(n.Hidden) d.hidden = "1"; if(!n.Ref) return; - o[o.length] = writextag('definedName', String(n.Ref), d); + o[o.length] = writextag('definedName', escapexml(n.Ref), d); }); o[o.length] = ""; } @@ -28391,7 +31952,7 @@ if((wb.Workbook.WBProps[x[0]]) == null) return; if(o.length>2){ o[o.length] = ''; o[1]=o[1].replace("/>",">"); } return o.join(""); } -/* [MS-XLSB] 2.4.301 BrtBundleSh */ +/* [MS-XLSB] 2.4.304 BrtBundleSh */ function parse_BrtBundleSh(data, length) { var z = {}; z.Hidden = data.read_shift(4); //hsState ST_SheetState @@ -28405,17 +31966,17 @@ function write_BrtBundleSh(data, o) { o.write_shift(4, data.Hidden); o.write_shift(4, data.iTabID); write_RelID(data.strRelID, o); - write_XLWideString(data.name.substr(0,31), o); + write_XLWideString(data.name.slice(0,31), o); return o.length > o.l ? o.slice(0, o.l) : o; } -/* [MS-XLSB] 2.4.807 BrtWbProp */ +/* [MS-XLSB] 2.4.815 BrtWbProp */ function parse_BrtWbProp(data, length) { var o = ({}); var flags = data.read_shift(4); o.defaultThemeVersion = data.read_shift(4); var strName = (length > 8) ? parse_XLWideString(data) : ""; - if(strName.length > 0) o.codeName = strName; + if(strName.length > 0) o.CodeName = strName; o.autoCompressPictures = !!(flags & 0x10000); o.backupFile = !!(flags & 0x40); o.checkCompatibility = !!(flags & 0x1000); @@ -28442,7 +32003,7 @@ function write_BrtWbProp(data, o) { } o.write_shift(4, flags); o.write_shift(4, 0); - write_XLSBCodeName("ThisWorkbook", o); + write_XLSBCodeName(data && data.CodeName || "ThisWorkbook", o); return o.slice(0, o.l); } @@ -28454,11 +32015,11 @@ function parse_BrtFRTArchID$(data, length) { return o; } -/* [MS-XLSB] 2.4.680 BrtName */ +/* [MS-XLSB] 2.4.687 BrtName */ function parse_BrtName(data, length, opts) { var end = data.l + length; - var flags = data.read_shift(4); - var chKey = data.read_shift(1); + data.l += 4; //var flags = data.read_shift(4); + data.l += 1; //var chKey = data.read_shift(1); var itab = data.read_shift(4); var name = parse_XLNameWideString(data); var formula = parse_XLSBNameParsedFormula(data, 0, opts); @@ -28470,22 +32031,27 @@ function parse_BrtName(data, length, opts) { // unusedstring2: XLNullableWideString //} data.l = end; - var out = ({Name:name, Ptg:formula, Comment:comment}); + var out = ({Name:name, Ptg:formula}); if(itab < 0xFFFFFFF) out.Sheet = itab; + if(comment) out.Comment = comment; return out; } -/* [MS-XLSB] 2.1.7.60 Workbook */ +/* [MS-XLSB] 2.1.7.61 Workbook */ function parse_wb_bin(data, opts) { var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" }; - var pass = false, z; + var state = []; + var pass = false; if(!opts) opts = {}; opts.biff = 12; var Names = []; - var supbooks = ([]); + var supbooks = ([[]]); supbooks.SheetNames = []; + supbooks.XTI = []; + + XLSBRecordEnum[0x0010] = { n:"BrtFRTArchID$", f:parse_BrtFRTArchID$ }; recordhopper(data, function hopper_wb(val, R_n, RT) { switch(RT) { @@ -28497,7 +32063,9 @@ function parse_wb_bin(data, opts) { wb.WBProps = val; break; case 0x0027: /* 'BrtName' */ + if(val.Sheet != null) opts.SID = val.Sheet; val.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts); + delete opts.SID; delete val.Ptg; Names.push(val); break; @@ -28507,17 +32075,30 @@ function parse_wb_bin(data, opts) { case 0x0166: /* 'BrtSupSame' */ case 0x0163: /* 'BrtSupBookSrc' */ case 0x029B: /* 'BrtSupAddin' */ + if(!supbooks[0].length) supbooks[0] = [RT, val]; + else supbooks.push([RT, val]); + supbooks[supbooks.length - 1].XTI = []; + break; case 0x016A: /* 'BrtExternSheet' */ + if(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; } + supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); + supbooks.XTI = supbooks.XTI.concat(val); + break; case 0x0169: /* 'BrtPlaceholderName' */ break; - /* case 'BrtModelTimeGroupingCalcCol' */ - /* case 'BrtRevisionPtr' */ - /* case 'BrtUid' */ case 0x0817: /* 'BrtAbsPath15' */ + case 0x009E: /* 'BrtBookView' */ + case 0x008F: /* 'BrtBeginBundleShs' */ + case 0x0298: /* 'BrtBeginFnGroup' */ + case 0x0161: /* 'BrtBeginExternals' */ + break; + + /* case 'BrtModelTimeGroupingCalcCol' */ + case 0x0C00: /* 'BrtUid' */ + case 0x0C01: /* 'BrtRevisionPtr' */ case 0x0216: /* 'BrtBookProtection' */ case 0x02A5: /* 'BrtBookProtectionIso' */ - case 0x009E: /* 'BrtBookView' */ case 0x009D: /* 'BrtCalcProp' */ case 0x0262: /* 'BrtCrashRecErr' */ case 0x0802: /* 'BrtDecoupledPivotCacheID' */ @@ -28542,18 +32123,20 @@ function parse_wb_bin(data, opts) { break; case 0x0023: /* 'BrtFRTBegin' */ - pass = true; break; + state.push(R_n); pass = true; break; case 0x0024: /* 'BrtFRTEnd' */ - pass = false; break; - case 0x0025: /* 'BrtACBegin' */ break; - case 0x0026: /* 'BrtACEnd' */ break; + state.pop(); pass = false; break; + case 0x0025: /* 'BrtACBegin' */ + state.push(R_n); pass = true; break; + case 0x0026: /* 'BrtACEnd' */ + state.pop(); pass = false; break; case 0x0010: /* 'BrtFRTArchID$' */ break; default: if((R_n||"").indexOf("Begin") > 0){/* empty */} else if((R_n||"").indexOf("End") > 0){/* empty */} - else if(!pass || opts.WTF) throw new Error("Unexpected record " + RT + " " + R_n); + else if(!pass || (opts.WTF && state[state.length-1] != "BrtACBegin" && state[state.length-1] != "BrtFRTBegin")) throw new Error("Unexpected record " + RT + " " + R_n); } }, opts); @@ -28562,11 +32145,11 @@ function parse_wb_bin(data, opts) { // $FlowIgnore wb.Names = Names; + (wb).supbooks = supbooks; return wb; } -/* [MS-XLSB] 2.1.7.60 Workbook */ -function write_BUNDLESHS(ba, wb, opts) { +function write_BUNDLESHS(ba, wb) { write_record(ba, "BrtBeginBundleShs"); for(var idx = 0; idx != wb.SheetNames.length; ++idx) { var viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0; @@ -28576,7 +32159,7 @@ function write_BUNDLESHS(ba, wb, opts) { write_record(ba, "BrtEndBundleShs"); } -/* [MS-XLSB] 2.4.643 BrtFileVersion */ +/* [MS-XLSB] 2.4.649 BrtFileVersion */ function write_BrtFileVersion(data, o) { if(!o) o = new_buf(127); for(var i = 0; i != 4; ++i) o.write_shift(4, 0); @@ -28584,11 +32167,10 @@ function write_BrtFileVersion(data, o) { write_XLWideString(XLSX.version, o); write_XLWideString(XLSX.version, o); write_XLWideString("7262", o); - o.length = o.l; return o.length > o.l ? o.slice(0, o.l) : o; } -/* [MS-XLSB] 2.4.298 BrtBookView */ +/* [MS-XLSB] 2.4.301 BrtBookView */ function write_BrtBookView(idx, o) { if(!o) o = new_buf(29); o.write_shift(-4, 0); @@ -28603,8 +32185,7 @@ function write_BrtBookView(idx, o) { return o.length > o.l ? o.slice(0, o.l) : o; } -/* [MS-XLSB] 2.1.7.60 Workbook */ -function write_BOOKVIEWS(ba, wb, opts) { +function write_BOOKVIEWS(ba, wb) { /* required if hidden tab appears before visible tab */ if(!wb.Workbook || !wb.Workbook.Sheets) return; var sheets = wb.Workbook.Sheets; @@ -28620,7 +32201,27 @@ function write_BOOKVIEWS(ba, wb, opts) { write_record(ba, "BrtEndBookViews"); } -/* [MS-XLSB] 2.4.302 BrtCalcProp */ +/* [MS-XLSB] 2.4.305 BrtCalcProp */ +/*function write_BrtCalcProp(data, o) { + if(!o) o = new_buf(26); + o.write_shift(4,0); // force recalc + o.write_shift(4,1); + o.write_shift(4,0); + write_Xnum(0, o); + o.write_shift(-4, 1023); + o.write_shift(1, 0x33); + o.write_shift(1, 0x00); + return o; +}*/ + +/* [MS-XLSB] 2.4.646 BrtFileRecover */ +/*function write_BrtFileRecover(data, o) { + if(!o) o = new_buf(1); + o.write_shift(1,0); + return o; +}*/ + +/* [MS-XLSB] 2.1.7.61 Workbook */ function write_wb_bin(wb, opts) { var ba = buf_array(); write_record(ba, "BrtBeginBook"); @@ -28654,24 +32255,24 @@ function parse_wb(data, name, opts) { return parse_wb_xml((data), opts); } -function parse_ws(data, name, opts, rels, wb, themes, styles) { - if(name.slice(-4)===".bin") return parse_ws_bin((data), opts, rels, wb, themes, styles); - return parse_ws_xml((data), opts, rels, wb, themes, styles); +function parse_ws(data, name, idx, opts, rels, wb, themes, styles) { + if(name.slice(-4)===".bin") return parse_ws_bin((data), opts, idx, rels, wb, themes, styles); + return parse_ws_xml((data), opts, idx, rels, wb, themes, styles); } -function parse_cs(data, name, opts, rels, wb, themes, styles) { - if(name.slice(-4)===".bin") return parse_cs_bin((data), opts, rels, wb, themes, styles); - return parse_cs_xml((data), opts, rels, wb, themes, styles); +function parse_cs(data, name, idx, opts, rels, wb, themes, styles) { + if(name.slice(-4)===".bin") return parse_cs_bin((data), opts, idx, rels, wb, themes, styles); + return parse_cs_xml((data), opts, idx, rels, wb, themes, styles); } -function parse_ms(data, name, opts, rels, wb, themes, styles) { - if(name.slice(-4)===".bin") return parse_ms_bin((data), opts, rels, wb, themes, styles); - return parse_ms_xml((data), opts, rels, wb, themes, styles); +function parse_ms(data, name, idx, opts, rels, wb, themes, styles) { + if(name.slice(-4)===".bin") return parse_ms_bin((data), opts, idx, rels, wb, themes, styles); + return parse_ms_xml((data), opts, idx, rels, wb, themes, styles); } -function parse_ds(data, name, opts, rels, wb, themes, styles) { - if(name.slice(-4)===".bin") return parse_ds_bin((data), opts, rels, wb, themes, styles); - return parse_ds_xml((data), opts, rels, wb, themes, styles); +function parse_ds(data, name, idx, opts, rels, wb, themes, styles) { + if(name.slice(-4)===".bin") return parse_ds_bin((data), opts, idx, rels, wb, themes, styles); + return parse_ds_xml((data), opts, idx, rels, wb, themes, styles); } function parse_sty(data, name, themes, opts) { @@ -28694,8 +32295,13 @@ function parse_cmnt(data, name, opts) { } function parse_cc(data, name, opts) { - if(name.slice(-4)===".bin") return parse_cc_bin((data), opts); - return parse_cc_xml((data), opts); + if(name.slice(-4)===".bin") return parse_cc_bin((data), name, opts); + return parse_cc_xml((data), name, opts); +} + +function parse_xlink(data, rel, name, opts) { + if(name.slice(-4)===".bin") return parse_xlink_bin((data), rel, name, opts); + return parse_xlink_xml((data), rel, name, opts); } function write_wb(wb, name, opts) { @@ -28706,6 +32312,7 @@ function write_ws(data, name, opts, wb, rels) { return (name.slice(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels); } +// eslint-disable-next-line no-unused-vars function write_sty(data, name, opts) { return (name.slice(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts); } @@ -28724,7 +32331,6 @@ function write_cc(data, name:string, opts) { */ var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g; var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/; -var _chr = function(c) { return String.fromCharCode(c); }; function xlml_parsexmltag(tag, skip_root) { var words = tag.split(/\s+/); var z = ([]); if(!skip_root) z[0] = words[0]; @@ -28732,11 +32338,11 @@ function xlml_parsexmltag(tag, skip_root) { var m = tag.match(attregexg2), y, j, w, i; if(m) for(i = 0; i != m.length; ++i) { y = m[i].match(attregex2); -if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2); +if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1); else { - if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6); - else w = y[1].substr(j+1); - z[w] = y[2].substr(1,y[2].length-2); + if(y[1].slice(0,6) === "xmlns:") w = "xmlns"+y[1].slice(6); + else w = y[1].slice(j+1); + z[w] = y[2].slice(1,y[2].length-1); } } return z; @@ -28748,11 +32354,11 @@ function xlml_parsexmltagobj(tag) { var m = tag.match(attregexg2), y, j, w, i; if(m) for(i = 0; i != m.length; ++i) { y = m[i].match(attregex2); -if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2); +if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1); else { - if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6); - else w = y[1].substr(j+1); - z[w] = y[2].substr(1,y[2].length-2); + if(y[1].slice(0,6) === "xmlns:") w = "xmlns"+y[1].slice(6); + else w = y[1].slice(j+1); + z[w] = y[2].slice(1,y[2].length-1); } } return z; @@ -28766,7 +32372,7 @@ function xlml_format(format, value) { return SSF.format(fmt, value); } -function xlml_set_custprop(Custprops, Rn, cp, val) { +function xlml_set_custprop(Custprops, key, cp, val) { var oval = val; switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]) { case "boolean": oval = parsexmlbool(val); break; @@ -28776,7 +32382,7 @@ function xlml_set_custprop(Custprops, Rn, cp, val) { case "i8": case "string": case "fixed": case "uuid": case "bin.base64": break; default: throw new Error("bad custprop:" + cp[0]); } - Custprops[unescapexml(Rn[3])] = oval; + Custprops[unescapexml(key)] = oval; } function safe_format_xlml(cell, nf, o) { @@ -28831,7 +32437,7 @@ function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o break; case 'String': cell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml)); - cell.v = xml.indexOf("<") > -1 ? unescapexml(ss) : cell.r; + cell.v = (xml.indexOf("<") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, "") : cell.r); // todo: BR etc break; case 'DateTime': if(xml.slice(-1) != "Z") xml += "Z"; @@ -28845,14 +32451,17 @@ function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o if(!cell.t) cell.t = 'n'; break; case 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break; - default: cell.t = 's'; cell.v = xlml_fixstr(ss||xml); break; + default: + if(xml == "" && ss == "") { cell.t = 'z'; } + else { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); } + break; } safe_format_xlml(cell, nf, o); if(o.cellFormula !== false) { if(cell.Formula) { var fstr = unescapexml(cell.Formula); /* strictly speaking, the leading = is required but some writers omit */ - if(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.substr(1); + if(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1); cell.f = rc_to_a1(fstr, base); delete cell.Formula; if(cell.ArrayRange == "RC") cell.F = rc_to_a1("RC:RC", base); @@ -28873,7 +32482,7 @@ function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o }); cell.s = S; } - cell.ixfe = cell.StyleID !== undefined ? cell.StyleID : 'Default'; + if(cell.StyleID !== undefined) cell.ixfe = cell.StyleID; } function xlml_clean_comment(comment) { @@ -28885,47 +32494,60 @@ function xlml_clean_comment(comment) { function xlml_normalize(d) { if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8'); if(typeof d === 'string') return d; + /* duktape */ + if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); throw new Error("Bad input format: expected Buffer or string"); } /* TODO: Everything */ /* UOS uses CJK in tags */ -var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/mg; +var xlmlregex = /<(\/?)([^\s?>:\/]+)(?:[\s?:\/][^>]*)?>/mg; //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg; function parse_xlml_xml(d, _opts) { var opts = _opts || {}; make_ssf(SSF); var str = debom(xlml_normalize(d)); - if(opts && opts.type == 'binary' && typeof cptable !== 'undefined') str = cptable.utils.decode(65001, char_codes(str)); + if(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') { + if(typeof cptable !== 'undefined') str = cptable.utils.decode(65001, char_codes(str)); + else str = utf8read(str); + } var opening = str.slice(0, 1024).toLowerCase(), ishtml = false; + opening = opening.replace(/".*?"/g, ""); + if((opening.indexOf(">") & 1023) > Math.min((opening.indexOf(",") & 1023), (opening.indexOf(";")&1023))) { var _o = dup(opts); _o.type = "string"; return PRN.to_workbook(str, _o); } if(opening.indexOf("= 0) ishtml = true; }); if(ishtml) return HTML_.to_workbook(str, opts); var Rn; var state = [], tmp; if(DENSE != null && opts.dense == null) opts.dense = DENSE; var sheets = {}, sheetnames = [], cursheet = (opts.dense ? [] : {}), sheetname = ""; - var table = {}, cell = ({}), row = {}; + var table = {}, cell = ({}), row = {};// eslint-disable-line no-unused-vars var dtag = xlml_parsexmltag(''), didx = 0; var c = 0, r = 0; var refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} }; var styles = {}, stag = {}; var ss = "", fidx = 0; - var mergecells = []; - var Props = {}, Custprops = {}, pidx = 0, cp = {}; - var comments = [], comment = {}; + var merges = []; + var Props = {}, Custprops = {}, pidx = 0, cp = []; + var comments = [], comment = ({}); var cstys = [], csty, seencol = false; var arrayf = []; - var rowinfo = [], rowobj = {}; + var rowinfo = [], rowobj = {}, cc = 0, rr = 0; var Workbook = ({ Sheets:[], WBProps:{date1904:false} }), wsprops = {}; xlmlregex.lastIndex = 0; str = str.replace(//mg,""); - while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { - case 'Data': + var raw_Rn3 = ""; + while((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) { + case 'data' /*case 'Data'*/: + if(raw_Rn3 == "data") { + if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));} + else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]); + break; + } if(state[state.length-1][1]) break; - if(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]=="Comment"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts); + if(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*"Comment"*/"comment"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts); else { ss = ""; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; } break; - case 'Cell': + case 'cell' /*case 'Cell'*/: if(Rn[1]==='/'){ if(comments.length > 0) cell.c = comments; if((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) { @@ -28935,13 +32557,14 @@ function parse_xlml_xml(d, _opts) { } else cursheet[encode_col(c) + encode_row(r)] = cell; } if(cell.HRef) { - cell.l = {Target:cell.HRef, Tooltip:cell.HRefScreenTip}; + cell.l = ({Target:unescapexml(cell.HRef)}); + if(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip; delete cell.HRef; delete cell.HRefScreenTip; } if(cell.MergeAcross || cell.MergeDown) { - var cc = c + (parseInt(cell.MergeAcross,10)|0); - var rr = r + (parseInt(cell.MergeDown,10)|0); - mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}}); + cc = c + (parseInt(cell.MergeAcross,10)|0); + rr = r + (parseInt(cell.MergeDown,10)|0); + merges.push({s:{c:c,r:r},e:{c:cc,r:rr}}); } if(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; } else if(cell.MergeAcross || cell.MergeDown) { @@ -28967,7 +32590,7 @@ for(var cma = c; cma <= cc; ++cma) { comments = []; } break; - case 'Row': + case 'row' /*case 'Row'*/: if(Rn[1]==='/' || Rn[0].slice(-2) === "/>") { if(r < refguess.s.r) refguess.s.r = r; if(r > refguess.e.r) refguess.e.r = r; @@ -28987,12 +32610,19 @@ for(var cma = c; cma <= cc; ++cma) { if(row.Hidden == "1") { rowobj.hidden = true; rowinfo[r] = rowobj; } } break; - case 'Worksheet': /* TODO: read range from FullRows/FullColumns */ + case 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */ if(Rn[1]==='/'){ if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|")); sheetnames.push(sheetname); - if(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) cursheet["!ref"] = encode_range(refguess); - if(mergecells.length) cursheet["!merges"] = mergecells; + if(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) { + cursheet["!ref"] = encode_range(refguess); + if(opts.sheetRows && opts.sheetRows <= refguess.e.r) { + cursheet["!fullref"] = cursheet["!ref"]; + refguess.e.r = opts.sheetRows - 1; + cursheet["!ref"] = encode_range(refguess); + } + } + if(merges.length) cursheet["!merges"] = merges; if(cstys.length > 0) cursheet["!cols"] = cstys; if(rowinfo.length > 0) cursheet["!rows"] = rowinfo; sheets[sheetname] = cursheet; @@ -29003,14 +32633,14 @@ for(var cma = c; cma <= cc; ++cma) { tmp = xlml_parsexmltag(Rn[0]); sheetname = unescapexml(tmp.Name); cursheet = (opts.dense ? [] : {}); - mergecells = []; + merges = []; arrayf = []; rowinfo = []; wsprops = {name:sheetname, Hidden:0}; Workbook.Sheets.push(wsprops); } break; - case 'Table': + case 'table' /*case 'Table'*/: if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));} else if(Rn[0].slice(-2) == "/>") break; else { @@ -29020,20 +32650,20 @@ for(var cma = c; cma <= cc; ++cma) { } break; - case 'Style': + case 'style' /*case 'Style'*/: if(Rn[1]==='/') process_style_xlml(styles, stag, opts); else stag = xlml_parsexmltag(Rn[0]); break; - case 'NumberFormat': + case 'numberformat' /*case 'NumberFormat'*/: stag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || "General"); if(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf]; for(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == stag.nf) break; if(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == null) { SSF.load(stag.nf, ssfidx); break; } break; - case 'Column': - if(state[state.length-1][0] !== 'Table') break; + case 'column' /*case 'Column'*/: + if(state[state.length-1][0] !== /*'Table'*/'table') break; csty = xlml_parsexmltag(Rn[0]); if(csty.Hidden) { csty.hidden = true; delete csty.Hidden; } if(csty.Width) csty.wpx = parseInt(csty.Width, 10); @@ -29046,71 +32676,77 @@ for(var cma = c; cma <= cc; ++cma) { for(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty); break; - case 'NamedRange': + case 'namedrange' /*case 'NamedRange'*/: + if(Rn[1]==='/') break; if(!Workbook.Names) Workbook.Names = []; var _NamedRange = parsexmltag(Rn[0]); var _DefinedName = ({ Name: _NamedRange.Name, - Ref: rc_to_a1(_NamedRange.RefersTo.substr(1)) + Ref: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0}) }); if(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1; Workbook.Names.push(_DefinedName); break; - case 'NamedCell': break; - case 'B': break; - case 'I': break; - case 'U': break; - case 'S': break; - case 'Sub': break; - case 'Sup': break; - case 'Span': break; - case 'Border': break; - case 'Alignment': break; - case 'Borders': break; - case 'Font': + case 'namedcell' /*case 'NamedCell'*/: break; + case 'b' /*case 'B'*/: break; + case 'i' /*case 'I'*/: break; + case 'u' /*case 'U'*/: break; + case 's' /*case 'S'*/: break; + case 'em' /*case 'EM'*/: break; + case 'h2' /*case 'H2'*/: break; + case 'h3' /*case 'H3'*/: break; + case 'sub' /*case 'Sub'*/: break; + case 'sup' /*case 'Sup'*/: break; + case 'span' /*case 'Span'*/: break; + case 'alignment' /*case 'Alignment'*/: + break; + case 'borders' /*case 'Borders'*/: break; + case 'border' /*case 'Border'*/: break; + case 'font' /*case 'Font'*/: if(Rn[0].slice(-2) === "/>") break; else if(Rn[1]==="/") ss += str.slice(fidx, Rn.index); else fidx = Rn.index + Rn[0].length; break; - case 'Interior': + case 'interior' /*case 'Interior'*/: if(!opts.cellStyles) break; stag.Interior = xlml_parsexmltag(Rn[0]); break; - case 'Protection': break; - - case 'Author': - case 'Title': - case 'Description': - case 'Created': - case 'Keywords': - case 'Subject': - case 'Category': - case 'Company': - case 'LastAuthor': - case 'LastSaved': - case 'LastPrinted': - case 'Version': - case 'Revision': - case 'TotalTime': - case 'HyperlinkBase': - case 'Manager': - case 'ContentStatus': - case 'Identifier': - case 'Language': + case 'protection' /*case 'Protection'*/: break; + + case 'author' /*case 'Author'*/: + case 'title' /*case 'Title'*/: + case 'description' /*case 'Description'*/: + case 'created' /*case 'Created'*/: + case 'keywords' /*case 'Keywords'*/: + case 'subject' /*case 'Subject'*/: + case 'category' /*case 'Category'*/: + case 'company' /*case 'Company'*/: + case 'lastauthor' /*case 'LastAuthor'*/: + case 'lastsaved' /*case 'LastSaved'*/: + case 'lastprinted' /*case 'LastPrinted'*/: + case 'version' /*case 'Version'*/: + case 'revision' /*case 'Revision'*/: + case 'totaltime' /*case 'TotalTime'*/: + case 'hyperlinkbase' /*case 'HyperlinkBase'*/: + case 'manager' /*case 'Manager'*/: + case 'contentstatus' /*case 'ContentStatus'*/: + case 'identifier' /*case 'Identifier'*/: + case 'language' /*case 'Language'*/: + case 'appname' /*case 'AppName'*/: if(Rn[0].slice(-2) === "/>") break; - else if(Rn[1]==="/") xlml_set_prop(Props, Rn[3], str.slice(pidx, Rn.index)); + else if(Rn[1]==="/") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index)); else pidx = Rn.index + Rn[0].length; break; - case 'Paragraphs': break; + case 'paragraphs' /*case 'Paragraphs'*/: break; - case 'Styles': - case 'Workbook': + case 'styles' /*case 'Styles'*/: + case 'workbook' /*case 'Workbook'*/: if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));} else state.push([Rn[3], false]); break; - case 'Comment': + case 'comment' /*case 'Comment'*/: if(Rn[1]==='/'){ if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|")); xlml_clean_comment(comment); @@ -29118,11 +32754,11 @@ Workbook.Names.push(_DefinedName); } else { state.push([Rn[3], false]); tmp = xlml_parsexmltag(Rn[0]); - comment = {a:tmp.Author}; + comment = ({a:tmp.Author}); } break; - case 'AutoFilter': + case 'autofilter' /*case 'AutoFilter'*/: if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));} else if(Rn[0].charAt(Rn[0].length-2) !== '/') { var AutoFilter = xlml_parsexmltag(Rn[0]); @@ -29131,132 +32767,142 @@ Workbook.Names.push(_DefinedName); } break; - case 'Name': break; - - case 'ComponentOptions': - case 'DocumentProperties': - case 'CustomDocumentProperties': - case 'OfficeDocumentSettings': - case 'PivotTable': - case 'PivotCache': - case 'Names': - case 'MapInfo': - case 'PageBreaks': - case 'QueryTable': - case 'DataValidation': - case 'Sorting': - case 'Schema': - case 'data': - case 'ConditionalFormatting': - case 'SmartTagType': - case 'SmartTags': - case 'ExcelWorkbook': - case 'WorkbookOptions': - case 'WorksheetOptions': + case 'name' /*case 'Name'*/: break; + + case 'datavalidation' /*case 'DataValidation'*/: + if(Rn[1]==='/'){ + if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|")); + } else { + if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]); + } + break; + + case 'pixelsperinch' /*case 'PixelsPerInch'*/: + break; + case 'componentoptions' /*case 'ComponentOptions'*/: + case 'documentproperties' /*case 'DocumentProperties'*/: + case 'customdocumentproperties' /*case 'CustomDocumentProperties'*/: + case 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: + case 'pivottable' /*case 'PivotTable'*/: + case 'pivotcache' /*case 'PivotCache'*/: + case 'names' /*case 'Names'*/: + case 'mapinfo' /*case 'MapInfo'*/: + case 'pagebreaks' /*case 'PageBreaks'*/: + case 'querytable' /*case 'QueryTable'*/: + case 'sorting' /*case 'Sorting'*/: + case 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/: + case 'conditionalformatting' /*case 'ConditionalFormatting'*/: + case 'smarttagtype' /*case 'SmartTagType'*/: + case 'smarttags' /*case 'SmartTags'*/: + case 'excelworkbook' /*case 'ExcelWorkbook'*/: + case 'workbookoptions' /*case 'WorkbookOptions'*/: + case 'worksheetoptions' /*case 'WorksheetOptions'*/: if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error("Bad state: "+tmp.join("|"));} else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]); break; + case 'null' /*case 'Null'*/: break; + default: /* FODS file root is */ if(state.length == 0 && Rn[3] == "document") return parse_fods(str, opts); /* UOS file root is */ - if(state.length == 0 && Rn[3] == "UOF") return parse_fods(str, opts); + if(state.length == 0 && Rn[3] == "uof"/*"UOF"*/) return parse_fods(str, opts); var seen = true; switch(state[state.length-1][0]) { /* OfficeDocumentSettings */ - case 'OfficeDocumentSettings': switch(Rn[3]) { - case 'AllowPNG': break; - case 'RemovePersonalInformation': break; - case 'DownloadComponents': break; - case 'LocationOfComponents': break; - case 'Colors': break; - case 'Color': break; - case 'Index': break; - case 'RGB': break; - case 'PixelsPerInch': break; // TODO: set PPI - case 'TargetScreenSize': break; - case 'ReadOnlyRecommended': break; + case 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) { + case 'allowpng' /*case 'AllowPNG'*/: break; + case 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break; + case 'downloadcomponents' /*case 'DownloadComponents'*/: break; + case 'locationofcomponents' /*case 'LocationOfComponents'*/: break; + case 'colors' /*case 'Colors'*/: break; + case 'color' /*case 'Color'*/: break; + case 'index' /*case 'Index'*/: break; + case 'rgb' /*case 'RGB'*/: break; + case 'targetscreensize' /*case 'TargetScreenSize'*/: break; + case 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break; default: seen = false; } break; /* ComponentOptions */ - case 'ComponentOptions': switch(Rn[3]) { - case 'Toolbar': break; - case 'HideOfficeLogo': break; - case 'SpreadsheetAutoFit': break; - case 'Label': break; - case 'Caption': break; - case 'MaxHeight': break; - case 'MaxWidth': break; - case 'NextSheetNumber': break; + case 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) { + case 'toolbar' /*case 'Toolbar'*/: break; + case 'hideofficelogo' /*case 'HideOfficeLogo'*/: break; + case 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break; + case 'label' /*case 'Label'*/: break; + case 'caption' /*case 'Caption'*/: break; + case 'maxheight' /*case 'MaxHeight'*/: break; + case 'maxwidth' /*case 'MaxWidth'*/: break; + case 'nextsheetnumber' /*case 'NextSheetNumber'*/: break; default: seen = false; } break; /* ExcelWorkbook */ - case 'ExcelWorkbook': switch(Rn[3]) { - case 'Date1904': + case 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) { + case 'date1904' /*case 'Date1904'*/: Workbook.WBProps.date1904 = true; break; - case 'WindowHeight': break; - case 'WindowWidth': break; - case 'WindowTopX': break; - case 'WindowTopY': break; - case 'TabRatio': break; - case 'ProtectStructure': break; - case 'ProtectWindows': break; - case 'ActiveSheet': break; - case 'DisplayInkNotes': break; - case 'FirstVisibleSheet': break; - case 'SupBook': break; - case 'SheetName': break; - case 'SheetIndex': break; - case 'SheetIndexFirst': break; - case 'SheetIndexLast': break; - case 'Dll': break; - case 'AcceptLabelsInFormulas': break; - case 'DoNotSaveLinkValues': break; - case 'Iteration': break; - case 'MaxIterations': break; - case 'MaxChange': break; - case 'Path': break; - case 'Xct': break; - case 'Count': break; - case 'SelectedSheets': break; - case 'Calculation': break; - case 'Uncalced': break; - case 'StartupPrompt': break; - case 'Crn': break; - case 'ExternName': break; - case 'Formula': break; - case 'ColFirst': break; - case 'ColLast': break; - case 'WantAdvise': break; - case 'Boolean': break; - case 'Error': break; - case 'Text': break; - case 'OLE': break; - case 'NoAutoRecover': break; - case 'PublishObjects': break; - case 'DoNotCalculateBeforeSave': break; - case 'Number': break; - case 'RefModeR1C1': break; - case 'EmbedSaveSmartTags': break; + case 'windowheight' /*case 'WindowHeight'*/: break; + case 'windowwidth' /*case 'WindowWidth'*/: break; + case 'windowtopx' /*case 'WindowTopX'*/: break; + case 'windowtopy' /*case 'WindowTopY'*/: break; + case 'tabratio' /*case 'TabRatio'*/: break; + case 'protectstructure' /*case 'ProtectStructure'*/: break; + case 'protectwindow' /*case 'ProtectWindow'*/: break; + case 'protectwindows' /*case 'ProtectWindows'*/: break; + case 'activesheet' /*case 'ActiveSheet'*/: break; + case 'displayinknotes' /*case 'DisplayInkNotes'*/: break; + case 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break; + case 'supbook' /*case 'SupBook'*/: break; + case 'sheetname' /*case 'SheetName'*/: break; + case 'sheetindex' /*case 'SheetIndex'*/: break; + case 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break; + case 'sheetindexlast' /*case 'SheetIndexLast'*/: break; + case 'dll' /*case 'Dll'*/: break; + case 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break; + case 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break; + case 'iteration' /*case 'Iteration'*/: break; + case 'maxiterations' /*case 'MaxIterations'*/: break; + case 'maxchange' /*case 'MaxChange'*/: break; + case 'path' /*case 'Path'*/: break; + case 'xct' /*case 'Xct'*/: break; + case 'count' /*case 'Count'*/: break; + case 'selectedsheets' /*case 'SelectedSheets'*/: break; + case 'calculation' /*case 'Calculation'*/: break; + case 'uncalced' /*case 'Uncalced'*/: break; + case 'startupprompt' /*case 'StartupPrompt'*/: break; + case 'crn' /*case 'Crn'*/: break; + case 'externname' /*case 'ExternName'*/: break; + case 'formula' /*case 'Formula'*/: break; + case 'colfirst' /*case 'ColFirst'*/: break; + case 'collast' /*case 'ColLast'*/: break; + case 'wantadvise' /*case 'WantAdvise'*/: break; + case 'boolean' /*case 'Boolean'*/: break; + case 'error' /*case 'Error'*/: break; + case 'text' /*case 'Text'*/: break; + case 'ole' /*case 'OLE'*/: break; + case 'noautorecover' /*case 'NoAutoRecover'*/: break; + case 'publishobjects' /*case 'PublishObjects'*/: break; + case 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break; + case 'number' /*case 'Number'*/: break; + case 'refmoder1c1' /*case 'RefModeR1C1'*/: break; + case 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break; default: seen = false; } break; /* WorkbookOptions */ - case 'WorkbookOptions': switch(Rn[3]) { - case 'OWCVersion': break; - case 'Height': break; - case 'Width': break; + case 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) { + case 'owcversion' /*case 'OWCVersion'*/: break; + case 'height' /*case 'Height'*/: break; + case 'width' /*case 'Width'*/: break; default: seen = false; } break; /* WorksheetOptions */ - case 'WorksheetOptions': switch(Rn[3]) { - case 'Visible': + case 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) { + case 'visible' /*case 'Visible'*/: if(Rn[0].slice(-2) === "/>"){/* empty */} else if(Rn[1]==="/") switch(str.slice(pidx, Rn.index)) { case "SheetHidden": wsprops.Hidden = 1; break; @@ -29264,15 +32910,15 @@ Workbook.WBProps.date1904 = true; } else pidx = Rn.index + Rn[0].length; break; - case 'Header': + case 'header' /*case 'Header'*/: if(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml'); cursheet['!margins'].header = parsexmltag(Rn[0]).Margin; break; - case 'Footer': + case 'footer' /*case 'Footer'*/: if(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml'); cursheet['!margins'].footer = parsexmltag(Rn[0]).Margin; break; - case 'PageMargins': + case 'pagemargins' /*case 'PageMargins'*/: var pagemargins = parsexmltag(Rn[0]); if(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml'); if(pagemargins.Top) cursheet['!margins'].top = pagemargins.Top; @@ -29280,248 +32926,297 @@ Workbook.WBProps.date1904 = true; if(pagemargins.Right) cursheet['!margins'].right = pagemargins.Right; if(pagemargins.Bottom) cursheet['!margins'].bottom = pagemargins.Bottom; break; - case 'Unsynced': break; - case 'Print': break; - case 'Panes': break; - case 'Scale': break; - case 'Pane': break; - case 'Number': break; - case 'Layout': break; - case 'PageSetup': break; - case 'Selected': break; - case 'ProtectObjects': break; - case 'EnableSelection': break; - case 'ProtectScenarios': break; - case 'ValidPrinterInfo': break; - case 'HorizontalResolution': break; - case 'VerticalResolution': break; - case 'NumberofCopies': break; - case 'ActiveRow': break; - case 'ActiveCol': break; - case 'ActivePane': break; - case 'TopRowVisible': break; - case 'TopRowBottomPane': break; - case 'LeftColumnVisible': break; - case 'LeftColumnRightPane': break; - case 'FitToPage': break; - case 'RangeSelection': break; - case 'PaperSizeIndex': break; - case 'PageLayoutZoom': break; - case 'PageBreakZoom': break; - case 'FilterOn': break; - case 'DoNotDisplayGridlines': break; - case 'SplitHorizontal': break; - case 'SplitVertical': break; - case 'FreezePanes': break; - case 'FrozenNoSplit': break; - case 'FitWidth': break; - case 'FitHeight': break; - case 'CommentsLayout': break; - case 'Zoom': break; - case 'LeftToRight': break; - case 'Gridlines': break; - case 'AllowSort': break; - case 'AllowFilter': break; - case 'AllowInsertRows': break; - case 'AllowDeleteRows': break; - case 'AllowInsertCols': break; - case 'AllowDeleteCols': break; - case 'AllowInsertHyperlinks': break; - case 'AllowFormatCells': break; - case 'AllowSizeCols': break; - case 'AllowSizeRows': break; - case 'NoSummaryRowsBelowDetail': break; - case 'TabColorIndex': break; - case 'DoNotDisplayHeadings': break; - case 'ShowPageLayoutZoom': break; - case 'NoSummaryColumnsRightDetail': break; - case 'BlackAndWhite': break; - case 'DoNotDisplayZeros': break; - case 'DisplayPageBreak': break; - case 'RowColHeadings': break; - case 'DoNotDisplayOutline': break; - case 'NoOrientation': break; - case 'AllowUsePivotTables': break; - case 'ZeroHeight': break; - case 'ViewableRange': break; - case 'Selection': break; - case 'ProtectContents': break; + case 'displayrighttoleft' /*case 'DisplayRightToLeft'*/: + if(!Workbook.Views) Workbook.Views = []; + if(!Workbook.Views[0]) Workbook.Views[0] = {}; + Workbook.Views[0].RTL = true; + break; + + case 'freezepanes' /*case 'FreezePanes'*/: break; + case 'frozennosplit' /*case 'FrozenNoSplit'*/: break; + + case 'splithorizontal' /*case 'SplitHorizontal'*/: + case 'splitvertical' /*case 'SplitVertical'*/: + break; + + case 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/: + break; + + case 'activerow' /*case 'ActiveRow'*/: break; + case 'activecol' /*case 'ActiveCol'*/: break; + case 'toprowbottompane' /*case 'TopRowBottomPane'*/: break; + case 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break; + + case 'unsynced' /*case 'Unsynced'*/: break; + case 'print' /*case 'Print'*/: break; + case 'printerrors' /*case 'PrintErrors'*/: break; + case 'panes' /*case 'Panes'*/: break; + case 'scale' /*case 'Scale'*/: break; + case 'pane' /*case 'Pane'*/: break; + case 'number' /*case 'Number'*/: break; + case 'layout' /*case 'Layout'*/: break; + case 'pagesetup' /*case 'PageSetup'*/: break; + case 'selected' /*case 'Selected'*/: break; + case 'protectobjects' /*case 'ProtectObjects'*/: break; + case 'enableselection' /*case 'EnableSelection'*/: break; + case 'protectscenarios' /*case 'ProtectScenarios'*/: break; + case 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break; + case 'horizontalresolution' /*case 'HorizontalResolution'*/: break; + case 'verticalresolution' /*case 'VerticalResolution'*/: break; + case 'numberofcopies' /*case 'NumberofCopies'*/: break; + case 'activepane' /*case 'ActivePane'*/: break; + case 'toprowvisible' /*case 'TopRowVisible'*/: break; + case 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break; + case 'fittopage' /*case 'FitToPage'*/: break; + case 'rangeselection' /*case 'RangeSelection'*/: break; + case 'papersizeindex' /*case 'PaperSizeIndex'*/: break; + case 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break; + case 'pagebreakzoom' /*case 'PageBreakZoom'*/: break; + case 'filteron' /*case 'FilterOn'*/: break; + case 'fitwidth' /*case 'FitWidth'*/: break; + case 'fitheight' /*case 'FitHeight'*/: break; + case 'commentslayout' /*case 'CommentsLayout'*/: break; + case 'zoom' /*case 'Zoom'*/: break; + case 'lefttoright' /*case 'LeftToRight'*/: break; + case 'gridlines' /*case 'Gridlines'*/: break; + case 'allowsort' /*case 'AllowSort'*/: break; + case 'allowfilter' /*case 'AllowFilter'*/: break; + case 'allowinsertrows' /*case 'AllowInsertRows'*/: break; + case 'allowdeleterows' /*case 'AllowDeleteRows'*/: break; + case 'allowinsertcols' /*case 'AllowInsertCols'*/: break; + case 'allowdeletecols' /*case 'AllowDeleteCols'*/: break; + case 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break; + case 'allowformatcells' /*case 'AllowFormatCells'*/: break; + case 'allowsizecols' /*case 'AllowSizeCols'*/: break; + case 'allowsizerows' /*case 'AllowSizeRows'*/: break; + case 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/: + if(!cursheet["!outline"]) cursheet["!outline"] = {}; + cursheet["!outline"].above = true; + break; + case 'tabcolorindex' /*case 'TabColorIndex'*/: break; + case 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break; + case 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break; + case 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/: + if(!cursheet["!outline"]) cursheet["!outline"] = {}; + cursheet["!outline"].left = true; + break; + case 'blackandwhite' /*case 'BlackAndWhite'*/: break; + case 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break; + case 'displaypagebreak' /*case 'DisplayPageBreak'*/: break; + case 'rowcolheadings' /*case 'RowColHeadings'*/: break; + case 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break; + case 'noorientation' /*case 'NoOrientation'*/: break; + case 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break; + case 'zeroheight' /*case 'ZeroHeight'*/: break; + case 'viewablerange' /*case 'ViewableRange'*/: break; + case 'selection' /*case 'Selection'*/: break; + case 'protectcontents' /*case 'ProtectContents'*/: break; default: seen = false; } break; /* PivotTable */ - case 'PivotTable': case 'PivotCache': switch(Rn[3]) { - case 'ImmediateItemsOnDrop': break; - case 'ShowPageMultipleItemLabel': break; - case 'CompactRowIndent': break; - case 'Location': break; - case 'PivotField': break; - case 'Orientation': break; - case 'LayoutForm': break; - case 'LayoutSubtotalLocation': break; - case 'LayoutCompactRow': break; - case 'Position': break; - case 'PivotItem': break; - case 'DataType': break; - case 'DataField': break; - case 'SourceName': break; - case 'ParentField': break; - case 'PTLineItems': break; - case 'PTLineItem': break; - case 'CountOfSameItems': break; - case 'Item': break; - case 'ItemType': break; - case 'PTSource': break; - case 'CacheIndex': break; - case 'ConsolidationReference': break; - case 'FileName': break; - case 'Reference': break; - case 'NoColumnGrand': break; - case 'NoRowGrand': break; - case 'BlankLineAfterItems': break; - case 'Hidden': break; - case 'Subtotal': break; - case 'BaseField': break; - case 'MapChildItems': break; - case 'Function': break; - case 'RefreshOnFileOpen': break; - case 'PrintSetTitles': break; - case 'MergeLabels': break; - case 'DefaultVersion': break; - case 'RefreshName': break; - case 'RefreshDate': break; - case 'RefreshDateCopy': break; - case 'VersionLastRefresh': break; - case 'VersionLastUpdate': break; - case 'VersionUpdateableMin': break; - case 'VersionRefreshableMin': break; - case 'Calculation': break; + case 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) { + case 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break; + case 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break; + case 'compactrowindent' /*case 'CompactRowIndent'*/: break; + case 'location' /*case 'Location'*/: break; + case 'pivotfield' /*case 'PivotField'*/: break; + case 'orientation' /*case 'Orientation'*/: break; + case 'layoutform' /*case 'LayoutForm'*/: break; + case 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break; + case 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break; + case 'position' /*case 'Position'*/: break; + case 'pivotitem' /*case 'PivotItem'*/: break; + case 'datatype' /*case 'DataType'*/: break; + case 'datafield' /*case 'DataField'*/: break; + case 'sourcename' /*case 'SourceName'*/: break; + case 'parentfield' /*case 'ParentField'*/: break; + case 'ptlineitems' /*case 'PTLineItems'*/: break; + case 'ptlineitem' /*case 'PTLineItem'*/: break; + case 'countofsameitems' /*case 'CountOfSameItems'*/: break; + case 'item' /*case 'Item'*/: break; + case 'itemtype' /*case 'ItemType'*/: break; + case 'ptsource' /*case 'PTSource'*/: break; + case 'cacheindex' /*case 'CacheIndex'*/: break; + case 'consolidationreference' /*case 'ConsolidationReference'*/: break; + case 'filename' /*case 'FileName'*/: break; + case 'reference' /*case 'Reference'*/: break; + case 'nocolumngrand' /*case 'NoColumnGrand'*/: break; + case 'norowgrand' /*case 'NoRowGrand'*/: break; + case 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break; + case 'hidden' /*case 'Hidden'*/: break; + case 'subtotal' /*case 'Subtotal'*/: break; + case 'basefield' /*case 'BaseField'*/: break; + case 'mapchilditems' /*case 'MapChildItems'*/: break; + case 'function' /*case 'Function'*/: break; + case 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break; + case 'printsettitles' /*case 'PrintSetTitles'*/: break; + case 'mergelabels' /*case 'MergeLabels'*/: break; + case 'defaultversion' /*case 'DefaultVersion'*/: break; + case 'refreshname' /*case 'RefreshName'*/: break; + case 'refreshdate' /*case 'RefreshDate'*/: break; + case 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break; + case 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break; + case 'versionlastupdate' /*case 'VersionLastUpdate'*/: break; + case 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break; + case 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break; + case 'calculation' /*case 'Calculation'*/: break; default: seen = false; } break; /* PageBreaks */ - case 'PageBreaks': switch(Rn[3]) { - case 'ColBreaks': break; - case 'ColBreak': break; - case 'RowBreaks': break; - case 'RowBreak': break; - case 'ColStart': break; - case 'ColEnd': break; - case 'RowEnd': break; + case 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) { + case 'colbreaks' /*case 'ColBreaks'*/: break; + case 'colbreak' /*case 'ColBreak'*/: break; + case 'rowbreaks' /*case 'RowBreaks'*/: break; + case 'rowbreak' /*case 'RowBreak'*/: break; + case 'colstart' /*case 'ColStart'*/: break; + case 'colend' /*case 'ColEnd'*/: break; + case 'rowend' /*case 'RowEnd'*/: break; default: seen = false; } break; /* AutoFilter */ - case 'AutoFilter': switch(Rn[3]) { - case 'AutoFilterColumn': break; - case 'AutoFilterCondition': break; - case 'AutoFilterAnd': break; - case 'AutoFilterOr': break; + case 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) { + case 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break; + case 'autofiltercondition' /*case 'AutoFilterCondition'*/: break; + case 'autofilterand' /*case 'AutoFilterAnd'*/: break; + case 'autofilteror' /*case 'AutoFilterOr'*/: break; default: seen = false; } break; /* QueryTable */ - case 'QueryTable': switch(Rn[3]) { - case 'Id': break; - case 'AutoFormatFont': break; - case 'AutoFormatPattern': break; - case 'QuerySource': break; - case 'QueryType': break; - case 'EnableRedirections': break; - case 'RefreshedInXl9': break; - case 'URLString': break; - case 'HTMLTables': break; - case 'Connection': break; - case 'CommandText': break; - case 'RefreshInfo': break; - case 'NoTitles': break; - case 'NextId': break; - case 'ColumnInfo': break; - case 'OverwriteCells': break; - case 'DoNotPromptForFile': break; - case 'TextWizardSettings': break; - case 'Source': break; - case 'Number': break; - case 'Decimal': break; - case 'ThousandSeparator': break; - case 'TrailingMinusNumbers': break; - case 'FormatSettings': break; - case 'FieldType': break; - case 'Delimiters': break; - case 'Tab': break; - case 'Comma': break; - case 'AutoFormatName': break; - case 'VersionLastEdit': break; - case 'VersionLastRefresh': break; + case 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) { + case 'id' /*case 'Id'*/: break; + case 'autoformatfont' /*case 'AutoFormatFont'*/: break; + case 'autoformatpattern' /*case 'AutoFormatPattern'*/: break; + case 'querysource' /*case 'QuerySource'*/: break; + case 'querytype' /*case 'QueryType'*/: break; + case 'enableredirections' /*case 'EnableRedirections'*/: break; + case 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break; + case 'urlstring' /*case 'URLString'*/: break; + case 'htmltables' /*case 'HTMLTables'*/: break; + case 'connection' /*case 'Connection'*/: break; + case 'commandtext' /*case 'CommandText'*/: break; + case 'refreshinfo' /*case 'RefreshInfo'*/: break; + case 'notitles' /*case 'NoTitles'*/: break; + case 'nextid' /*case 'NextId'*/: break; + case 'columninfo' /*case 'ColumnInfo'*/: break; + case 'overwritecells' /*case 'OverwriteCells'*/: break; + case 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break; + case 'textwizardsettings' /*case 'TextWizardSettings'*/: break; + case 'source' /*case 'Source'*/: break; + case 'number' /*case 'Number'*/: break; + case 'decimal' /*case 'Decimal'*/: break; + case 'thousandseparator' /*case 'ThousandSeparator'*/: break; + case 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break; + case 'formatsettings' /*case 'FormatSettings'*/: break; + case 'fieldtype' /*case 'FieldType'*/: break; + case 'delimiters' /*case 'Delimiters'*/: break; + case 'tab' /*case 'Tab'*/: break; + case 'comma' /*case 'Comma'*/: break; + case 'autoformatname' /*case 'AutoFormatName'*/: break; + case 'versionlastedit' /*case 'VersionLastEdit'*/: break; + case 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break; + default: seen = false; + } break; + + case 'datavalidation' /*case 'DataValidation'*/: + switch(Rn[3]) { + case 'range' /*case 'Range'*/: break; + + case 'type' /*case 'Type'*/: break; + case 'min' /*case 'Min'*/: break; + case 'max' /*case 'Max'*/: break; + case 'sort' /*case 'Sort'*/: break; + case 'descending' /*case 'Descending'*/: break; + case 'order' /*case 'Order'*/: break; + case 'casesensitive' /*case 'CaseSensitive'*/: break; + case 'value' /*case 'Value'*/: break; + case 'errorstyle' /*case 'ErrorStyle'*/: break; + case 'errormessage' /*case 'ErrorMessage'*/: break; + case 'errortitle' /*case 'ErrorTitle'*/: break; + case 'inputmessage' /*case 'InputMessage'*/: break; + case 'inputtitle' /*case 'InputTitle'*/: break; + case 'combohide' /*case 'ComboHide'*/: break; + case 'inputhide' /*case 'InputHide'*/: break; + case 'condition' /*case 'Condition'*/: break; + case 'qualifier' /*case 'Qualifier'*/: break; + case 'useblank' /*case 'UseBlank'*/: break; + case 'value1' /*case 'Value1'*/: break; + case 'value2' /*case 'Value2'*/: break; + case 'format' /*case 'Format'*/: break; + + case 'cellrangelist' /*case 'CellRangeList'*/: break; default: seen = false; } break; - case 'Sorting': - case 'ConditionalFormatting': - case 'DataValidation': + case 'sorting' /*case 'Sorting'*/: + case 'conditionalformatting' /*case 'ConditionalFormatting'*/: switch(Rn[3]) { - case 'Range': break; - case 'Type': break; - case 'Min': break; - case 'Max': break; - case 'Sort': break; - case 'Descending': break; - case 'Order': break; - case 'CaseSensitive': break; - case 'Value': break; - case 'ErrorStyle': break; - case 'ErrorMessage': break; - case 'ErrorTitle': break; - case 'CellRangeList': break; - case 'InputMessage': break; - case 'InputTitle': break; - case 'ComboHide': break; - case 'InputHide': break; - case 'Condition': break; - case 'Qualifier': break; - case 'UseBlank': break; - case 'Value1': break; - case 'Value2': break; - case 'Format': break; + case 'range' /*case 'Range'*/: break; + case 'type' /*case 'Type'*/: break; + case 'min' /*case 'Min'*/: break; + case 'max' /*case 'Max'*/: break; + case 'sort' /*case 'Sort'*/: break; + case 'descending' /*case 'Descending'*/: break; + case 'order' /*case 'Order'*/: break; + case 'casesensitive' /*case 'CaseSensitive'*/: break; + case 'value' /*case 'Value'*/: break; + case 'errorstyle' /*case 'ErrorStyle'*/: break; + case 'errormessage' /*case 'ErrorMessage'*/: break; + case 'errortitle' /*case 'ErrorTitle'*/: break; + case 'cellrangelist' /*case 'CellRangeList'*/: break; + case 'inputmessage' /*case 'InputMessage'*/: break; + case 'inputtitle' /*case 'InputTitle'*/: break; + case 'combohide' /*case 'ComboHide'*/: break; + case 'inputhide' /*case 'InputHide'*/: break; + case 'condition' /*case 'Condition'*/: break; + case 'qualifier' /*case 'Qualifier'*/: break; + case 'useblank' /*case 'UseBlank'*/: break; + case 'value1' /*case 'Value1'*/: break; + case 'value2' /*case 'Value2'*/: break; + case 'format' /*case 'Format'*/: break; default: seen = false; } break; /* MapInfo (schema) */ - case 'MapInfo': case 'Schema': case 'data': switch(Rn[3]) { - case 'Map': break; - case 'Entry': break; - case 'Range': break; - case 'XPath': break; - case 'Field': break; - case 'XSDType': break; - case 'FilterOn': break; - case 'Aggregate': break; - case 'ElementType': break; - case 'AttributeType': break; + case 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) { + case 'map' /*case 'Map'*/: break; + case 'entry' /*case 'Entry'*/: break; + case 'range' /*case 'Range'*/: break; + case 'xpath' /*case 'XPath'*/: break; + case 'field' /*case 'Field'*/: break; + case 'xsdtype' /*case 'XSDType'*/: break; + case 'filteron' /*case 'FilterOn'*/: break; + case 'aggregate' /*case 'Aggregate'*/: break; + case 'elementtype' /*case 'ElementType'*/: break; + case 'attributetype' /*case 'AttributeType'*/: break; /* These are from xsd (XML Schema Definition) */ - case 'schema': - case 'element': - case 'complexType': - case 'datatype': - case 'all': - case 'attribute': - case 'extends': break; - - case 'row': break; + case 'schema' /*case 'schema'*/: + case 'element' /*case 'element'*/: + case 'complextype' /*case 'complexType'*/: + case 'datatype' /*case 'datatype'*/: + case 'all' /*case 'all'*/: + case 'attribute' /*case 'attribute'*/: + case 'extends' /*case 'extends'*/: break; + + case 'row' /*case 'row'*/: break; default: seen = false; } break; /* SmartTags (can be anything) */ - case 'SmartTags': break; + case 'smarttags' /*case 'SmartTags'*/: break; default: seen = false; break; } if(seen) break; /* CustomDocumentProperties */ + if(Rn[3].match(/!\[CDATA/)) break; if(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|"); - if(state[state.length-1][0]==='CustomDocumentProperties') { + if(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') { if(Rn[0].slice(-2) === "/>") break; - else if(Rn[1]==="/") xlml_set_custprop(Custprops, Rn, cp, str.slice(pidx, Rn.index)); + else if(Rn[1]==="/") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index)); else { cp = Rn; pidx = Rn.index + Rn[0].length; } break; } @@ -29542,7 +33237,7 @@ function parse_xlml(data, opts) { switch(opts.type||"base64") { case "base64": return parse_xlml_xml(Base64.decode(data), opts); case "binary": case "buffer": case "file": return parse_xlml_xml(data, opts); - case "array": return parse_xlml_xml(data.map(_chr).join(""), opts); + case "array": return parse_xlml_xml(a2s(data), opts); } } @@ -29556,7 +33251,7 @@ function write_props_xlml(wb, opts) { return o.join(""); } /* TODO */ -function write_wb_xlml(wb, opts) { +function write_wb_xlml() { /* OfficeDocumentSettings */ /* ExcelWorkbook */ return ""; @@ -29564,7 +33259,44 @@ function write_wb_xlml(wb, opts) { /* TODO */ function write_sty_xlml(wb, opts) { /* Styles */ - return ""; + var styles = ['']; + opts.cellXfs.forEach(function(xf, id) { + var payload = []; + payload.push(writextag('NumberFormat', null, {"ss:Format": escapexml(SSF._table[xf.numFmtId])})); + + var o = {"ss:ID": "s" + (21+id)}; + styles.push(writextag('Style', payload.join(""), o)); + }); + return writextag("Styles", styles.join("")); +} +function write_name_xlml(n) { return writextag("NamedRange", null, {"ss:Name": n.Name, "ss:RefersTo":"=" + a1_to_rc(n.Ref, {r:0,c:0})}); } +function write_names_xlml(wb) { + if(!((wb||{}).Workbook||{}).Names) return ""; +var names = wb.Workbook.Names; + var out = []; + for(var i = 0; i < names.length; ++i) { + var n = names[i]; + if(n.Sheet != null) continue; + if(n.Name.match(/^_xlfn\./)) continue; + out.push(write_name_xlml(n)); + } + return writextag("Names", out.join("")); +} +function write_ws_xlml_names(ws, opts, idx, wb) { + if(!ws) return ""; + if(!((wb||{}).Workbook||{}).Names) return ""; +var names = wb.Workbook.Names; + var out = []; + for(var i = 0; i < names.length; ++i) { + var n = names[i]; + if(n.Sheet != idx) continue; + /*switch(n.Name) { + case "_": continue; + }*/ + if(n.Name.match(/^_xlfn\./)) continue; + out.push(write_name_xlml(n)); + } + return out.join(""); } /* WorksheetOptions */ function write_ws_xlml_wsopts(ws, opts, idx, wb) { @@ -29622,7 +33354,9 @@ function write_ws_xlml_wsopts(ws, opts, idx, wb) { } /* LeftColumnVisible */ - /* DisplayRightToLeft */ + + if(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(""); + /* GridlineColorIndex */ /* DisplayFormulas */ /* DoNotDisplayGridlines */ @@ -29655,9 +33389,9 @@ function write_ws_xlml_wsopts(ws, opts, idx, wb) { if(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag("EnableSelection", "NoSelection")); else if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag("EnableSelection", "UnlockedCells")); [ - [ "formatColumns", "AllowFormatCells" ], - [ "formatRows", "AllowSizeCols" ], - [ "formatCells", "AllowSizeRows" ], + [ "formatCells", "AllowFormatCells" ], + [ "formatColumns", "AllowSizeCols" ], + [ "formatRows", "AllowSizeRows" ], [ "insertColumns", "AllowInsertCols" ], [ "insertRows", "AllowInsertRows" ], [ "insertHyperlinks", "AllowInsertHyperlinks" ], @@ -29681,12 +33415,12 @@ function write_ws_xlml_comment(comments) { }).join(""); } function write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr){ - if(!cell || cell.v == undefined && cell.f == undefined) return ""; + if(!cell || (cell.v == undefined && cell.f == undefined)) return ""; var attr = {}; if(cell.f) attr["ss:Formula"] = "=" + escapexml(a1_to_rc(cell.f, addr)); - if(cell.F && cell.F.substr(0, ref.length) == ref) { - var end = decode_cell(cell.F.substr(ref.length + 1)); + if(cell.F && cell.F.slice(0, ref.length) == ref) { + var end = decode_cell(cell.F.slice(ref.length + 1)); attr["ss:ArrayRange"] = "RC:R" + (end.r == addr.r ? "" : "[" + (end.r - addr.r) + "]") + "C" + (end.c == addr.c ? "" : "[" + (end.c - addr.c) + "]"); } @@ -29706,21 +33440,19 @@ function write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr){ var t = "", p = ""; switch(cell.t) { - case 'z': return ""; + case 'z': if(!opts.sheetStubs) return ""; break; case 'n': t = 'Number'; p = String(cell.v); break; case 'b': t = 'Boolean'; p = (cell.v ? "1" : "0"); break; case 'e': t = 'Error'; p = BErr[cell.v]; break; - case 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); break; - case 's': t = 'String'; p = escapexml(cell.v||""); break; + case 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || SSF._table[14]; break; + case 's': t = 'String'; p = escapexlml(cell.v||""); break; } + /* TODO: cell style */ + var os = get_cell_style(opts.cellXfs, cell, opts); + attr["ss:StyleID"] = "s" + (21+os); + attr["ss:Index"] = addr.c + 1; var _v = (cell.v != null ? p : ""); - if(opts && opts.type == 'binary' && typeof cptable !== 'undefined' && cell.t == 's') { - _v = cptable.utils.encode(65001, _v); - var __v = ""; - for(var __i = 0; __i < _v.length; ++__i) __v += String.fromCharCode(_v[__i]); - _v = __v; - } - var m = '' + _v + ''; + var m = cell.t == 'z' ? "" : ('' + _v + ''); if((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c); @@ -29778,8 +33510,11 @@ function write_ws_xlml(idx, opts, wb) { var s = wb.SheetNames[idx]; var ws = wb.Sheets[s]; + var t = ws ? write_ws_xlml_names(ws, opts, idx, wb) : ""; + if(t.length > 0) o.push("" + t + ""); + /* Table */ - var t = ws ? write_ws_xlml_table(ws, opts, idx, wb) : ""; + t = ws ? write_ws_xlml_table(ws, opts, idx, wb) : ""; if(t.length > 0) o.push("" + t + "
"); /* WorksheetOptions */ @@ -29788,12 +33523,25 @@ function write_ws_xlml(idx, opts, wb) { return o.join(""); } function write_xlml(wb, opts) { + if(!opts) opts = {}; + if(!wb.SSF) wb.SSF = SSF.get_table(); + if(wb.SSF) { + make_ssf(SSF); SSF.load_table(wb.SSF); + // $FlowIgnore + opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0; + opts.ssf = wb.SSF; + opts.cellXfs = []; + get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}}); + } var d = []; d.push(write_props_xlml(wb, opts)); d.push(write_wb_xlml(wb, opts)); - d.push(write_sty_xlml(wb, opts)); + d.push(""); + d.push(""); for(var i = 0; i < wb.SheetNames.length; ++i) d.push(writextag("Worksheet", write_ws_xlml(i, opts, wb), {"ss:Name":escapexml(wb.SheetNames[i])})); + d[2] = write_sty_xlml(wb, opts); + d[3] = write_names_xlml(wb, opts); return XML_HEADER + writextag("Workbook", d.join(""), { 'xmlns': XLMLNS.ss, 'xmlns:o': XLMLNS.o, @@ -29807,27 +33555,26 @@ function write_xlml(wb, opts) { function parse_compobj(obj) { var v = {}; var o = obj.content; +/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */ + o.l = 28; + + v.AnsiUserType = o.read_shift(0, "lpstr-ansi"); + v.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o); + + if(o.length - o.l <= 4) return v; - /* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */ - var l = 28, m; - m = __lpstr(o, l); - l += 4 + __readUInt32LE(o,l); - v.UserType = m; - - /* [MS-OLEDS] 2.3.1 ClipboardFormatOrAnsiString */ - m = __readUInt32LE(o,l); l+= 4; - switch(m) { - case 0x00000000: break; - case 0xffffffff: case 0xfffffffe: l+=4; break; - default: - if(m > 0x190) throw new Error("Unsupported Clipboard: " + m.toString(16)); - l += m; - } + var m = o.read_shift(4); + if(m == 0 || m > 40) return v; + o.l-=4; v.Reserved1 = o.read_shift(0, "lpstr-ansi"); - m = __lpstr(o, l); l += m.length === 0 ? 0 : 5 + m.length; v.Reserved1 = m; + if(o.length - o.l <= 4) return v; + m = o.read_shift(4); + if(m !== 0x71b239f4) return v; + v.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o); - if((m = __readUInt32LE(o,l)) !== 0x71b2e9f4) return v; - throw new Error("Unsupported Unicode Extension"); + m = o.read_shift(4); + if(m == 0 || m > 40) return v; + o.l-=4; v.Reserved2 = o.read_shift(0, "lpwstr"); } /* @@ -29842,11 +33589,13 @@ function slurp(R, blob, length, opts) { var l = length; var bufs = []; var d = blob.slice(blob.l,blob.l+l); - if(opts && opts.enc && opts.enc.insitu_decrypt) switch(R.n) { - case 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break; + if(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(R.n) { + case 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': case 'EOF': + break; + case 'BoundSheet8': + break; default: - if(d.length === 0) break; - opts.enc.insitu_decrypt(d); + opts.enc.insitu(d); } bufs.push(d); blob.l += l; @@ -29856,8 +33605,11 @@ function slurp(R, blob, length, opts) { l = __readUInt16LE(blob,blob.l+2); start = blob.l + 4; if(next.n == 'ContinueFrt') start += 4; - else if(next.n.slice(0,11) == 'ContinueFrt') start += 12; - bufs.push(blob.slice(start,blob.l+4+l)); + else if(next.n.slice(0,11) == 'ContinueFrt') { + start += 12; + } + d = blob.slice(start,blob.l+4+l); + bufs.push(d); blob.l += 4+l; next = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]); } @@ -29865,6 +33617,7 @@ function slurp(R, blob, length, opts) { prep_blob(b, 0); var ll = 0; b.lens = []; for(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; } + if(b.length < length) throw "XLS Record " + (R && R.n || "??") + " Truncated: " + b.length + " < " + length; return R.f(b, b.length, opts); } @@ -29885,11 +33638,11 @@ function safe_format_xf(p, opts, date1904) { } else p.w = SSF._general(p.v); } - else p.w = SSF.format(fmtid,p.v, {date1904:!!date1904}); - if(opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) { - var _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); } - } + else p.w = SSF.format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF}); } catch(e) { if(opts.WTF) throw e; } + if(opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) { + var _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); } + } } function make_cell(val, ixfe, t) { @@ -29903,21 +33656,19 @@ function parse_workbook(blob, options) { if(DENSE != null && options.dense == null) options.dense = DENSE; var out = ((options.dense ? [] : {})); var Directory = {}; - var found_sheet = false; var range = ({}); var last_formula = null; - var sst = []; + var sst = ([]); var cur_sheet = ""; var Preamble = {}; - var lastcell, last_cell = "", cc, cmnt, rng, rngC, rngR; - var shared_formulae = {}; - var array_formulae = []; /* TODO: something more clever */ + var lastcell, last_cell = "", cc, cmnt, rngC, rngR; + var sharedf = {}; + var arrayf = []; var temp_val; var country; - var cell_valid = true; var XFs = []; /* XF records */ var palette = []; - var Workbook = ({ Sheets:[], WBProps:{date1904:false} }), wsprops = {}; + var Workbook = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }), wsprops = {}; var get_rgb = function getrgb(icv) { if(icv < 8) return XLSIcv[icv]; if(icv < 64) return palette[icv-8] || XLSIcv[icv]; @@ -29934,33 +33685,27 @@ function parse_workbook(blob, options) { }; var addcell = function addcell(cell, line, options) { if(file_depth > 1) return; - if(!cell_valid) return; + if(options.sheetRows && cell.r >= options.sheetRows) return; if(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options); + delete line.ixfe; delete line.XF; lastcell = cell; last_cell = encode_cell(cell); - if(range.s) { - if(cell.r < range.s.r) range.s.r = cell.r; - if(cell.c < range.s.c) range.s.c = cell.c; - } - if(range.e) { - if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1; - if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1; - } + if(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}}; + if(cell.r < range.s.r) range.s.r = cell.r; + if(cell.c < range.s.c) range.s.c = cell.c; + if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1; + if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1; if(options.cellFormula && line.f) { - for(var afi = 0; afi < array_formulae.length; ++afi) { - if(array_formulae[afi][0].s.c > cell.c) continue; - if(array_formulae[afi][0].s.r > cell.r) continue; - if(array_formulae[afi][0].e.c < cell.c) continue; - if(array_formulae[afi][0].e.r < cell.r) continue; - line.F = encode_range(array_formulae[afi][0]); - if(array_formulae[afi][0].s.c != cell.c) delete line.f; - if(array_formulae[afi][0].s.r != cell.r) delete line.f; - if(line.f) line.f = "" + stringify_formula(array_formulae[afi][1], range, cell, supbooks, opts); + for(var afi = 0; afi < arrayf.length; ++afi) { + if(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue; + if(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue; + line.F = encode_range(arrayf[afi][0]); + if(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f; + if(line.f) line.f = "" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts); break; } } - if(options.sheetRows && lastcell.r >= options.sheetRows) cell_valid = false; - else { + { if(options.dense) { if(!out[cell.r]) out[cell.r] = []; out[cell.r][cell.c] = line; @@ -29971,8 +33716,8 @@ function parse_workbook(blob, options) { enc: false, // encrypted sbcch: 0, // cch in the preceding SupBook snames: [], // sheetnames - sharedf: shared_formulae, // shared formulae by address - arrayf: array_formulae, // array formulae array + sharedf: sharedf, // shared formulae by address + arrayf: arrayf, // array formulae array rrtabid: [], // RRTabId lastuser: "", // Last User from WriteAccess biff: 8, // BIFF version @@ -29982,9 +33727,11 @@ function parse_workbook(blob, options) { WTF: !!options && !!options.wtf }); if(options.password) opts.password = options.password; - var mergecells = []; + var themes; + var merges = []; var objects = []; var colinfo = [], rowinfo = []; + // eslint-disable-next-line no-unused-vars var defwidth = 0, defheight = 0; // twips / MDW respectively var seencol = false; var supbooks = ([]); // 1-indexed, will hold extern names @@ -29995,19 +33742,19 @@ function parse_workbook(blob, options) { supbooks.XTI = []; var last_Rn = ''; var file_depth = 0; /* TODO: make a real stack */ - var BIFF2Fmt = 0; - var BIFF2FmtTable = []; + var BIFF2Fmt = 0, BIFF2FmtTable = []; var FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */ var last_lbl; /* explicit override for some broken writers */ opts.codepage = 1200; set_cp(1200); + var seen_codepage = false; while(blob.l < blob.length - 1) { var s = blob.l; var RecordType = blob.read_shift(2); if(RecordType === 0 && last_Rn === 'EOF') break; - var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y; + var length = (blob.l === blob.length ? 0 : blob.read_shift(2)); var R = XLSRecordEnum[RecordType]; //console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length); //if(!R) console.log(blob.slice(blob.l, blob.l + length)); @@ -30018,14 +33765,17 @@ function parse_workbook(blob, options) { last_Rn = R.n; if(R.r === 2 || R.r == 12) { var rt = blob.read_shift(2); length -= 2; - if(!opts.enc && rt !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType); - if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT + if(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType); + if(R.r == 12){ + blob.l += 10; length -= 10; + } // skip FRT } //console.error(R,blob.l,length,blob.length); - var val; + var val = ({}); if(R.n === 'EOF') val = R.f(blob, length, opts); else val = slurp(R, blob, length, opts); var Rn = R.n; +if(file_depth == 0 && Rn != 'BOF') continue; /* nested switch statements to workaround V8 128 limit */ switch(Rn) { /* Workbook Options */ @@ -30035,7 +33785,6 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; case 'FilePass': if(!opts.enc) blob.l = 0; opts.enc = val; - if(opts.WTF) console.error(val); if(!options.password) throw new Error("File is password-protected"); if(val.valid == null) throw new Error("Encryption scheme unsupported"); if(!val.valid) throw new Error("Password is incorrect"); @@ -30043,30 +33792,40 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; case 'WriteAccess': opts.lastuser = val; break; case 'FileSharing': break; //TODO case 'CodePage': + var cpval = Number(val); /* overrides based on test cases */ - if(val === 0x5212) val = 1200; - else if(val === 0x8001) val = 1252; - opts.codepage = val; - set_cp(val); + switch(cpval) { + case 0x5212: cpval = 1200; break; + case 0x8000: cpval = 10000; break; + case 0x8001: cpval = 1252; break; + } + set_cp(opts.codepage = cpval); + seen_codepage = true; break; case 'RRTabId': opts.rrtabid = val; break; case 'WinProtect': opts.winlocked = val; break; case 'Template': break; // TODO - case 'RefreshAll': wb.opts.RefreshAll = val; break; case 'BookBool': break; // TODO case 'UsesELFs': break; case 'MTRSettings': break; - case 'CalcCount': wb.opts.CalcCount = val; break; - case 'CalcDelta': wb.opts.CalcDelta = val; break; - case 'CalcIter': wb.opts.CalcIter = val; break; - case 'CalcMode': wb.opts.CalcMode = val; break; - case 'CalcPrecision': wb.opts.CalcPrecision = val; break; - case 'CalcSaveRecalc': wb.opts.CalcSaveRecalc = val; break; + case 'RefreshAll': + case 'CalcCount': + case 'CalcDelta': + case 'CalcIter': + case 'CalcMode': + case 'CalcPrecision': + case 'CalcSaveRecalc': + wb.opts[Rn] = val; break; case 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1 case 'Uncalced': break; case 'ForceFullCalculation': wb.opts.FullCalc = val; break; - case 'WsBool': break; // TODO - case 'XF': XFs.push(val); break; + case 'WsBool': + if(val.fDialog) out["!type"] = "dialog"; + if(!val.fBelow) (out["!outline"] || (out["!outline"] = {})).above = true; + if(!val.fRight) (out["!outline"] || (out["!outline"] = {})).left = true; + break; // TODO + case 'XF': + XFs.push(val); break; case 'ExtSST': break; // TODO case 'BookExt': break; // TODO case 'RichTextStream': break; @@ -30087,7 +33846,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; }); if(val.itab > 0) last_lbl.Sheet = val.itab - 1; supbooks.names.push(last_lbl); - if(!supbooks[0]) supbooks[0] = []; + if(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; } supbooks[supbooks.length-1].push(val); if(val.Name == "_xlnm._FilterDatabase" && val.itab > 0) if(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d') @@ -30117,9 +33876,16 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; if(range.e.r > 0 && range.e.c > 0) { range.e.r--; range.e.c--; out["!ref"] = encode_range(range); + if(options.sheetRows && options.sheetRows <= range.e.r) { + var tmpri = range.e.r; + range.e.r = options.sheetRows - 1; + out["!fullref"] = out["!ref"]; + out["!ref"] = encode_range(range); + range.e.r = tmpri; + } range.e.r++; range.e.c++; } - if(mergecells.length > 0) out["!merges"] = mergecells; + if(merges.length > 0) out["!merges"] = merges; if(objects.length > 0) out["!objects"] = objects; if(colinfo.length > 0) out["!cols"] = colinfo; if(rowinfo.length > 0) out["!rows"] = rowinfo; @@ -30129,19 +33895,28 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; out = ((options.dense ? [] : {})); } break; case 'BOF': { - if(opts.biff !== 8){/* empty */} - else if(RecordType === 0x0009) opts.biff = 2; - else if(RecordType === 0x0209) opts.biff = 3; - else if(RecordType === 0x0409) opts.biff = 4; - else if(val.BIFFVer === 0x0500) opts.biff = 5; - else if(val.BIFFVer === 0x0600) opts.biff = 8; - else if(val.BIFFVer === 0x0002) opts.biff = 2; - else if(val.BIFFVer === 0x0007) opts.biff = 2; + if(opts.biff === 8) opts.biff = { +0x0009:2, +0x0209:3, +0x0409:4 + }[RecordType] || { +0x0200:2, +0x0300:3, +0x0400:4, +0x0500:5, +0x0600:8, +0x0002:2, +0x0007:2 + }[val.BIFFVer] || 8; + opts.biffguess = val.BIFFVer == 0; + if(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); } + if(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2; if(file_depth++) break; - cell_valid = true; out = ((options.dense ? [] : {})); - if(opts.biff < 5) { + if(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); } + + if(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) { if(cur_sheet === "") cur_sheet = "Sheet1"; range = {s:{r:0,c:0},e:{r:0,c:0}}; /* fake BoundSheet8 */ @@ -30151,9 +33926,10 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; } else cur_sheet = (Directory[s] || {name:""}).name; if(val.dt == 0x20) out["!type"] = "chart"; - mergecells = []; + if(val.dt == 0x40) out["!type"] = "macro"; + merges = []; objects = []; - array_formulae = []; opts.arrayf = array_formulae; + opts.arrayf = arrayf = []; colinfo = []; rowinfo = []; defwidth = defheight = 0; seencol = false; @@ -30163,19 +33939,19 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; case 'Number': case 'BIFF2NUM': case 'BIFF2INT': { if(out["!type"] == "chart") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c; temp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}); - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell({c:val.c, r:val.r}, temp_val, options); } break; case 'BoolErr': { temp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}); - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell({c:val.c, r:val.r}, temp_val, options); } break; case 'RK': { temp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}); - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell({c:val.c, r:val.r}, temp_val, options); } break; @@ -30183,7 +33959,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; for(var j = val.c; j <= val.C; ++j) { var ixfe = val.rkrec[j-val.c][0]; temp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}); - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell({c:j, r:val.r}, temp_val, options); } @@ -30197,11 +33973,11 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; if(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') { var _fr = _f[0][0][1][0], _fc = _f[0][0][1][1]; var _fe = encode_cell({r:_fr, c:_fc}); - if(shared_formulae[_fe]) temp_val.f = ""+stringify_formula(val.formula,range,val.cell,supbooks, opts); + if(sharedf[_fe]) temp_val.f = ""+stringify_formula(val.formula,range,val.cell,supbooks, opts); else temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F; } else temp_val.f = ""+stringify_formula(val.formula,range,val.cell,supbooks, opts); } - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell(val.cell, temp_val, options); last_formula = val; @@ -30214,14 +33990,14 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; if(options.cellFormula) { temp_val.f = ""+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts); } - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell(last_formula.cell, temp_val, options); last_formula = null; } else throw new Error("String record expects Formula"); } break; case 'Array': { - array_formulae.push(val); + arrayf.push(val); var _arraystart = encode_cell(val[0].s); cc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart]; if(options.cellFormula && cc) { @@ -30232,26 +34008,26 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; } } break; case 'ShrFmla': { - if(!cell_valid) break; if(!options.cellFormula) break; if(last_cell) { /* TODO: capture range */ if(!last_formula) break; /* technically unreachable */ - shared_formulae[encode_cell(last_formula.cell)]= val[0]; + sharedf[encode_cell(last_formula.cell)]= val[0]; cc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)]; (cc||{}).f = ""+stringify_formula(val[0], range, lastcell, supbooks, opts); } } break; case 'LabelSst': temp_val=make_cell(sst[val.isst].t, val.ixfe, 's'); + if(sst[val.isst].h) temp_val.h = sst[val.isst].h; temp_val.XF = XFs[temp_val.ixfe]; - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell({c:val.c, r:val.r}, temp_val, options); break; case 'Blank': if(options.sheetStubs) { temp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}); - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell({c:val.c, r:val.r}, temp_val, options); } break; @@ -30259,7 +34035,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; for(var _j = val.c; _j <= val.C; ++_j) { var _ixfe = val.ixfe[_j-val.c]; temp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}); - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell({c:_j, r:val.r}, temp_val, options); } @@ -30268,7 +34044,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; case 'Label': case 'BIFF2STR': temp_val=make_cell(val.val, val.ixfe, 's'); temp_val.XF = XFs[temp_val.ixfe]; - if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F]; + if(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F]; safe_format_xf(temp_val, options, wb.opts.Date1904); addcell({c:val.c, r:val.r}, temp_val, options); break; @@ -30280,7 +34056,12 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; sst = val; } break; case 'Format': { /* val = [id, fmt] */ - SSF.load(val[1], val[0]); + if(opts.biff == 4) { + BIFF2FmtTable[BIFF2Fmt++] = val[1]; + for(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(SSF._table[b4idx] == val[1]) break; + if(b4idx >= 163) SSF.load(val[1], BIFF2Fmt + 163); + } + else SSF.load(val[1], val[0]); } break; case 'BIFF2FORMAT': { BIFF2FmtTable[BIFF2Fmt++] = val; @@ -30288,7 +34069,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; if(b2idx >= 163) SSF.load(val, BIFF2Fmt + 163); } break; - case 'MergeCells': mergecells = mergecells.concat(val); break; + case 'MergeCells': merges = merges.concat(val); break; case 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break; case 'TxO': opts.lastobj.TxO = val; break; @@ -30305,7 +34086,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) { cc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})]; - if(cc) cc.l.Tooltip = val[1]; + if(cc && cc.l) cc.l.Tooltip = val[1]; } } break; @@ -30314,7 +34095,18 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; if(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */ cc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])]; var noteobj = objects[val[2]]; - if(!cc) break; + if(!cc) { + if(options.dense) { + if(!out[val[0].r]) out[val[0].r] = []; + cc = out[val[0].r][val[0].c] = ({t:"z"}); + } else { + cc = out[encode_cell(val[0])] = ({t:"z"}); + } + range.e.r = Math.max(range.e.r, val[0].r); + range.s.r = Math.min(range.s.r, val[0].r); + range.e.c = Math.max(range.e.c, val[0].c); + range.s.c = Math.min(range.s.c, val[0].c); + } if(!cc.c) cc.c = []; cmnt = {a:val[1],t:noteobj.TxO.t}; cc.c.push(cmnt); @@ -30330,7 +34122,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; case 'ColInfo': { if(!opts.cellStyles) break; while(val.e >= val.s) { - colinfo[val.e--] = { width: val.w/256 }; + colinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) }; if(!seencol) { seencol = true; find_mdw_colw(val.w/256); } process_col(colinfo[val.e+1]); } @@ -30353,12 +34145,19 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; out['!margins'][Rn.slice(0,-6).toLowerCase()] = val; break; + case 'Selection': break; + case 'Setup': // TODO if(!out['!margins']) default_margins(out['!margins'] = {}); out['!margins'].header = val.header; out['!margins'].footer = val.footer; break; + case 'Window2': // TODO + // $FlowIgnore + if(val.RTL) Workbook.Views[0].RTL = true; + break; + case 'Header': break; // TODO case 'Footer': break; // TODO case 'HCenter': break; // TODO @@ -30380,7 +34179,6 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; case 'SXLI': break; // TODO case 'SXEx': break; // TODO case 'QsiSXTag': break; // TODO - case 'Selection': break; case 'Feat': break; case 'FeatHdr': case 'FeatHdr11': break; case 'Feature11': case 'Feature12': case 'List12': break; @@ -30392,8 +34190,8 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; case 'XFCRC': break; // TODO case 'Style': break; // TODO case 'StyleExt': break; // TODO - case 'Palette': palette = val; break; // TODO - case 'Theme': break; // TODO + case 'Palette': palette = val; break; + case 'Theme': themes = val; break; /* Protection */ case 'ScenarioProtect': break; case 'ObjProtect': break; @@ -30457,7 +34255,8 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; /* empty */ } break; case 'CodeName': { - /* empty */ +if(!cur_sheet) Workbook.WBProps.CodeName = val || "ThisWorkbook"; + else wsprops.CodeName = val || wsprops.name; } break; case 'GUIDTypeLib': { /* empty */ @@ -30492,10 +34291,11 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; /* Explicitly Ignored */ case 'Excel9File': break; case 'Units': break; - case 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': case 'BuiltInFnGroupCount': break; + case 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': break; + case 'BuiltInFnGroupCount': /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */ break; /* View Stuff */ - case 'Window1': case 'Window2': case 'HideObj': case 'GridSet': case 'Guts': - case 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd': + case 'Window1': case 'HideObj': case 'GridSet': case 'Guts': + case 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd': break; case 'Pane': break; default: switch(R.n) { /* nested */ /* Chart */ @@ -30581,6 +34381,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; /* BIFF2-4 records */ case 'BIFF2FONTCLR': case 'BIFF2FMTCNT': case 'BIFF2FONTXTRA': break; case 'BIFF2XF': case 'BIFF3XF': case 'BIFF4XF': break; + case 'BIFF2XFINDEX': break; case 'BIFF4FMTCNT': case 'BIFF2ROW': case 'BIFF2WINDOW2': break; /* Miscellaneous */ @@ -30591,20 +34392,26 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; case 'ListObj': case 'ListField': break; case 'RRSort': break; case 'BigName': break; + case 'ToolbarHdr': case 'ToolbarEnd': break; + case 'DDEObjName': break; + case 'FRTArchId$': break; default: if(options.WTF) throw 'Unrecognized Record ' + R.n; }}}} } else blob.l += length; } - var sheetnamesraw = Object.keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;}); - var sheetnames = sheetnamesraw.slice(); - wb.Directory=sheetnamesraw; - wb.SheetNames=sheetnamesraw; + wb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;}); if(!options.bookSheets) wb.Sheets=Sheets; + if(!wb.SheetNames.length && Preamble["!ref"]) { + wb.SheetNames.push("Sheet1"); + /*jshint -W069 */ + if(wb.Sheets) wb.Sheets["Sheet1"] = Preamble; + /*jshint +W069 */ + } else wb.Preamble=Preamble; if(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; }); - wb.Preamble=Preamble; wb.Strings = sst; wb.SSF = SSF.get_table(); if(opts.enc) wb.Encryption = opts.enc; + if(themes) wb.Themes = themes; wb.Metadata = {}; if(country !== undefined) wb.Metadata.Country = country; if(supbooks.names.length > 0) Workbook.Names = supbooks.names; @@ -30612,56 +34419,122 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break; return wb; } -/* TODO: WTF */ -function parse_props(cfb) { +/* TODO: split props*/ +var PSCLSID = { + SI: "e0859ff2f94f6810ab9108002b27b3d9", + DSI: "02d5cdd59c2e1b10939708002b2cf9ae", + UDI: "05d5cdd59c2e1b10939708002b2cf9ae" +}; +function parse_xls_props(cfb, props, o) { /* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */ - var DSI = cfb.find('!DocumentSummaryInformation'); - if(DSI) try { cfb.DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI); } catch(e) {/* empty */} + var DSI = CFB.find(cfb, '/!DocumentSummaryInformation'); + if(DSI && DSI.size > 0) try { + var DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI); + for(var d in DocSummary) props[d] = DocSummary[d]; + } catch(e) {if(o.WTF) throw e;/* empty */} /* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/ - var SI = cfb.find('!SummaryInformation'); - if(SI) try { cfb.Summary = parse_PropertySetStream(SI, SummaryPIDSI); } catch(e) {/* empty */} + var SI = CFB.find(cfb, '/!SummaryInformation'); + if(SI && SI.size > 0) try { + var Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI); + for(var s in Summary) if(props[s] == null) props[s] = Summary[s]; + } catch(e) {if(o.WTF) throw e;/* empty */} + + if(props.HeadingPairs && props.TitlesOfParts) { + load_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o); + delete props.HeadingPairs; delete props.TitlesOfParts; + } +} +function write_xls_props(wb, cfb) { + var DSEntries = [], SEntries = [], CEntries = []; + var i = 0, Keys; + if(wb.Props) { + Keys = keys(wb.Props); + // $FlowIgnore + for(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]); + } + if(wb.Custprops) { + Keys = keys(wb.Custprops); + // $FlowIgnore + for(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]); + } + var CEntries2 = []; + for(i = 0; i < CEntries.length; ++i) { + if(XLSPSSkip.indexOf(CEntries[i][0]) > -1) continue; + if(CEntries[i][1] == null) continue; + CEntries2.push(CEntries[i]); + } + if(SEntries.length) CFB.utils.cfb_add(cfb, "/\u0005SummaryInformation", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI)); + if(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, "/\u0005DocumentSummaryInformation", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI)); } function parse_xlscfb(cfb, options) { if(!options) options = {}; fix_read_opts(options); reset_cp(); -var CompObj, Summary, Workbook; +if(options.codepage) set_ansi(options.codepage); +var CompObj, WB; if(cfb.FullPaths) { - CompObj = cfb.find('!CompObj'); - Summary = cfb.find('!SummaryInformation'); - Workbook = cfb.find('/Workbook'); + if(CFB.find(cfb, '/encryption')) throw new Error("File is password-protected"); + CompObj = CFB.find(cfb, '!CompObj'); + WB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book'); } else { + switch(options.type) { + case 'base64': cfb = s2a(Base64.decode(cfb)); break; + case 'binary': cfb = s2a(cfb); break; + case 'buffer': break; + case 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break; + } prep_blob(cfb, 0); - Workbook = ({content: cfb}); + WB = ({content: cfb}); } +var WorkbookP; -if(!Workbook) Workbook = cfb.find('/Book'); -var CompObjP, SummaryP, WorkbookP; - -if(CompObj) CompObjP = parse_compobj(CompObj); +var _data; +if(CompObj) parse_compobj(CompObj); if(options.bookProps && !options.bookSheets) WorkbookP = ({}); else { - if(Workbook) WorkbookP = parse_workbook(Workbook.content, options); + var T = has_buf ? 'buffer' : 'array'; + if(WB && WB.content) WorkbookP = parse_workbook(WB.content, options); /* Quattro Pro 7-8 */ - else if(cfb.find('PerfectOffice_MAIN')) WorkbookP = WK_.to_workbook(cfb.find('PerfectOffice_MAIN').content, options); + else if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options)); /* Quattro Pro 9 */ - else if(cfb.find('NativeContent_MAIN')) WorkbookP = WK_.to_workbook(cfb.find('NativeContent_MAIN').content, options); + else if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options)); + /* Works 4 for Mac */ + else if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error("Unsupported Works 4 for Mac file"); else throw new Error("Cannot find Workbook stream"); + if(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb); } -if(cfb.FullPaths) parse_props(cfb); - var props = {}; -for(var y in cfb.Summary) props[y] = cfb.Summary[y]; -for(y in cfb.DocSummary) props[y] = cfb.DocSummary[y]; +if(cfb.FullPaths) parse_xls_props(cfb, props, options); + WorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */ if(options.bookFiles) WorkbookP.cfb = cfb; /*WorkbookP.CompObjP = CompObjP; // TODO: storage? */ return WorkbookP; } + +function write_xlscfb(wb, opts) { + var o = opts || {}; + var cfb = CFB.utils.cfb_new({root:"R"}); + var wbpath = "/Workbook"; + switch(o.bookType || "xls") { + case "xls": o.bookType = "biff8"; + /* falls through */ + case "xla": if(!o.bookType) o.bookType = "xla"; + /* falls through */ + case "biff8": wbpath = "/Workbook"; o.biff = 8; break; + case "biff5": wbpath = "/Book"; o.biff = 5; break; + default: throw new Error("invalid type " + o.bookType + " for XLS CFB"); + } + CFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o)); + if(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb); + // TODO: SI, DSI, CO + if(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == "string" ? "binary" : "buffer"})); + return cfb; +} /* [MS-XLSB] 2.3 Record Enumeration */ var XLSBRecordEnum = { 0x0000: { n:"BrtRowHdr", f:parse_BrtRowHdr }, @@ -30676,1290 +34549,1350 @@ var XLSBRecordEnum = { 0x0009: { n:"BrtFmlaNum", f:parse_BrtFmlaNum }, 0x000A: { n:"BrtFmlaBool", f:parse_BrtFmlaBool }, 0x000B: { n:"BrtFmlaError", f:parse_BrtFmlaError }, -0x0010: { n:"BrtFRTArchID$", f:parse_BrtFRTArchID$ }, +0x000C: { n:"BrtShortBlank", f:parse_BrtShortBlank }, +0x000D: { n:"BrtShortRk", f:parse_BrtShortRk }, +0x000E: { n:"BrtShortError", f:parse_BrtShortError }, +0x000F: { n:"BrtShortBool", f:parse_BrtShortBool }, +0x0010: { n:"BrtShortReal", f:parse_BrtShortReal }, +0x0011: { n:"BrtShortSt", f:parse_BrtShortSt }, +0x0012: { n:"BrtShortIsst", f:parse_BrtShortIsst }, 0x0013: { n:"BrtSSTItem", f:parse_RichStr }, -0x0014: { n:"BrtPCDIMissing", f:parsenoop }, -0x0015: { n:"BrtPCDINumber", f:parsenoop }, -0x0016: { n:"BrtPCDIBoolean", f:parsenoop }, -0x0017: { n:"BrtPCDIError", f:parsenoop }, -0x0018: { n:"BrtPCDIString", f:parsenoop }, -0x0019: { n:"BrtPCDIDatetime", f:parsenoop }, -0x001A: { n:"BrtPCDIIndex", f:parsenoop }, -0x001B: { n:"BrtPCDIAMissing", f:parsenoop }, -0x001C: { n:"BrtPCDIANumber", f:parsenoop }, -0x001D: { n:"BrtPCDIABoolean", f:parsenoop }, -0x001E: { n:"BrtPCDIAError", f:parsenoop }, -0x001F: { n:"BrtPCDIAString", f:parsenoop }, -0x0020: { n:"BrtPCDIADatetime", f:parsenoop }, -0x0021: { n:"BrtPCRRecord", f:parsenoop }, -0x0022: { n:"BrtPCRRecordDt", f:parsenoop }, -0x0023: { n:"BrtFRTBegin", f:parsenoop }, -0x0024: { n:"BrtFRTEnd", f:parsenoop }, -0x0025: { n:"BrtACBegin", f:parsenoop }, -0x0026: { n:"BrtACEnd", f:parsenoop }, +0x0014: { n:"BrtPCDIMissing" }, +0x0015: { n:"BrtPCDINumber" }, +0x0016: { n:"BrtPCDIBoolean" }, +0x0017: { n:"BrtPCDIError" }, +0x0018: { n:"BrtPCDIString" }, +0x0019: { n:"BrtPCDIDatetime" }, +0x001A: { n:"BrtPCDIIndex" }, +0x001B: { n:"BrtPCDIAMissing" }, +0x001C: { n:"BrtPCDIANumber" }, +0x001D: { n:"BrtPCDIABoolean" }, +0x001E: { n:"BrtPCDIAError" }, +0x001F: { n:"BrtPCDIAString" }, +0x0020: { n:"BrtPCDIADatetime" }, +0x0021: { n:"BrtPCRRecord" }, +0x0022: { n:"BrtPCRRecordDt" }, +0x0023: { n:"BrtFRTBegin" }, +0x0024: { n:"BrtFRTEnd" }, +0x0025: { n:"BrtACBegin" }, +0x0026: { n:"BrtACEnd" }, 0x0027: { n:"BrtName", f:parse_BrtName }, -0x0028: { n:"BrtIndexRowBlock", f:parsenoop }, -0x002A: { n:"BrtIndexBlock", f:parsenoop }, +0x0028: { n:"BrtIndexRowBlock" }, +0x002A: { n:"BrtIndexBlock" }, 0x002B: { n:"BrtFont", f:parse_BrtFont }, 0x002C: { n:"BrtFmt", f:parse_BrtFmt }, -0x002D: { n:"BrtFill", f:parsenoop }, -0x002E: { n:"BrtBorder", f:parsenoop }, +0x002D: { n:"BrtFill", f:parse_BrtFill }, +0x002E: { n:"BrtBorder", f:parse_BrtBorder }, 0x002F: { n:"BrtXF", f:parse_BrtXF }, -0x0030: { n:"BrtStyle", f:parsenoop }, -0x0031: { n:"BrtCellMeta", f:parsenoop }, -0x0032: { n:"BrtValueMeta", f:parsenoop }, -0x0033: { n:"BrtMdb", f:parsenoop }, -0x0034: { n:"BrtBeginFmd", f:parsenoop }, -0x0035: { n:"BrtEndFmd", f:parsenoop }, -0x0036: { n:"BrtBeginMdx", f:parsenoop }, -0x0037: { n:"BrtEndMdx", f:parsenoop }, -0x0038: { n:"BrtBeginMdxTuple", f:parsenoop }, -0x0039: { n:"BrtEndMdxTuple", f:parsenoop }, -0x003A: { n:"BrtMdxMbrIstr", f:parsenoop }, -0x003B: { n:"BrtStr", f:parsenoop }, +0x0030: { n:"BrtStyle" }, +0x0031: { n:"BrtCellMeta" }, +0x0032: { n:"BrtValueMeta" }, +0x0033: { n:"BrtMdb" }, +0x0034: { n:"BrtBeginFmd" }, +0x0035: { n:"BrtEndFmd" }, +0x0036: { n:"BrtBeginMdx" }, +0x0037: { n:"BrtEndMdx" }, +0x0038: { n:"BrtBeginMdxTuple" }, +0x0039: { n:"BrtEndMdxTuple" }, +0x003A: { n:"BrtMdxMbrIstr" }, +0x003B: { n:"BrtStr" }, 0x003C: { n:"BrtColInfo", f:parse_ColInfo }, -0x003E: { n:"BrtCellRString", f:parsenoop }, +0x003E: { n:"BrtCellRString" }, 0x003F: { n:"BrtCalcChainItem$", f:parse_BrtCalcChainItem$ }, -0x0040: { n:"BrtDVal", f:parsenoop }, -0x0041: { n:"BrtSxvcellNum", f:parsenoop }, -0x0042: { n:"BrtSxvcellStr", f:parsenoop }, -0x0043: { n:"BrtSxvcellBool", f:parsenoop }, -0x0044: { n:"BrtSxvcellErr", f:parsenoop }, -0x0045: { n:"BrtSxvcellDate", f:parsenoop }, -0x0046: { n:"BrtSxvcellNil", f:parsenoop }, -0x0080: { n:"BrtFileVersion", f:parsenoop }, -0x0081: { n:"BrtBeginSheet", f:parsenoop }, -0x0082: { n:"BrtEndSheet", f:parsenoop }, +0x0040: { n:"BrtDVal", f:parse_BrtDVal }, +0x0041: { n:"BrtSxvcellNum" }, +0x0042: { n:"BrtSxvcellStr" }, +0x0043: { n:"BrtSxvcellBool" }, +0x0044: { n:"BrtSxvcellErr" }, +0x0045: { n:"BrtSxvcellDate" }, +0x0046: { n:"BrtSxvcellNil" }, +0x0080: { n:"BrtFileVersion" }, +0x0081: { n:"BrtBeginSheet" }, +0x0082: { n:"BrtEndSheet" }, 0x0083: { n:"BrtBeginBook", f:parsenoop, p:0 }, -0x0084: { n:"BrtEndBook", f:parsenoop }, -0x0085: { n:"BrtBeginWsViews", f:parsenoop }, -0x0086: { n:"BrtEndWsViews", f:parsenoop }, -0x0087: { n:"BrtBeginBookViews", f:parsenoop }, -0x0088: { n:"BrtEndBookViews", f:parsenoop }, -0x0089: { n:"BrtBeginWsView", f:parsenoop }, -0x008A: { n:"BrtEndWsView", f:parsenoop }, -0x008B: { n:"BrtBeginCsViews", f:parsenoop }, -0x008C: { n:"BrtEndCsViews", f:parsenoop }, -0x008D: { n:"BrtBeginCsView", f:parsenoop }, -0x008E: { n:"BrtEndCsView", f:parsenoop }, -0x008F: { n:"BrtBeginBundleShs", f:parsenoop }, -0x0090: { n:"BrtEndBundleShs", f:parsenoop }, -0x0091: { n:"BrtBeginSheetData", f:parsenoop }, -0x0092: { n:"BrtEndSheetData", f:parsenoop }, +0x0084: { n:"BrtEndBook" }, +0x0085: { n:"BrtBeginWsViews" }, +0x0086: { n:"BrtEndWsViews" }, +0x0087: { n:"BrtBeginBookViews" }, +0x0088: { n:"BrtEndBookViews" }, +0x0089: { n:"BrtBeginWsView", f:parse_BrtBeginWsView }, +0x008A: { n:"BrtEndWsView" }, +0x008B: { n:"BrtBeginCsViews" }, +0x008C: { n:"BrtEndCsViews" }, +0x008D: { n:"BrtBeginCsView" }, +0x008E: { n:"BrtEndCsView" }, +0x008F: { n:"BrtBeginBundleShs" }, +0x0090: { n:"BrtEndBundleShs" }, +0x0091: { n:"BrtBeginSheetData" }, +0x0092: { n:"BrtEndSheetData" }, 0x0093: { n:"BrtWsProp", f:parse_BrtWsProp }, 0x0094: { n:"BrtWsDim", f:parse_BrtWsDim, p:16 }, -0x0097: { n:"BrtPane", f:parsenoop }, -0x0098: { n:"BrtSel", f:parsenoop }, +0x0097: { n:"BrtPane", f:parse_BrtPane }, +0x0098: { n:"BrtSel" }, 0x0099: { n:"BrtWbProp", f:parse_BrtWbProp }, -0x009A: { n:"BrtWbFactoid", f:parsenoop }, -0x009B: { n:"BrtFileRecover", f:parsenoop }, +0x009A: { n:"BrtWbFactoid" }, +0x009B: { n:"BrtFileRecover" }, 0x009C: { n:"BrtBundleSh", f:parse_BrtBundleSh }, -0x009D: { n:"BrtCalcProp", f:parsenoop }, -0x009E: { n:"BrtBookView", f:parsenoop }, +0x009D: { n:"BrtCalcProp" }, +0x009E: { n:"BrtBookView" }, 0x009F: { n:"BrtBeginSst", f:parse_BrtBeginSst }, -0x00A0: { n:"BrtEndSst", f:parsenoop }, +0x00A0: { n:"BrtEndSst" }, 0x00A1: { n:"BrtBeginAFilter", f:parse_UncheckedRfX }, -0x00A2: { n:"BrtEndAFilter", f:parsenoop }, -0x00A3: { n:"BrtBeginFilterColumn", f:parsenoop }, -0x00A4: { n:"BrtEndFilterColumn", f:parsenoop }, -0x00A5: { n:"BrtBeginFilters", f:parsenoop }, -0x00A6: { n:"BrtEndFilters", f:parsenoop }, -0x00A7: { n:"BrtFilter", f:parsenoop }, -0x00A8: { n:"BrtColorFilter", f:parsenoop }, -0x00A9: { n:"BrtIconFilter", f:parsenoop }, -0x00AA: { n:"BrtTop10Filter", f:parsenoop }, -0x00AB: { n:"BrtDynamicFilter", f:parsenoop }, -0x00AC: { n:"BrtBeginCustomFilters", f:parsenoop }, -0x00AD: { n:"BrtEndCustomFilters", f:parsenoop }, -0x00AE: { n:"BrtCustomFilter", f:parsenoop }, -0x00AF: { n:"BrtAFilterDateGroupItem", f:parsenoop }, +0x00A2: { n:"BrtEndAFilter" }, +0x00A3: { n:"BrtBeginFilterColumn" }, +0x00A4: { n:"BrtEndFilterColumn" }, +0x00A5: { n:"BrtBeginFilters" }, +0x00A6: { n:"BrtEndFilters" }, +0x00A7: { n:"BrtFilter" }, +0x00A8: { n:"BrtColorFilter" }, +0x00A9: { n:"BrtIconFilter" }, +0x00AA: { n:"BrtTop10Filter" }, +0x00AB: { n:"BrtDynamicFilter" }, +0x00AC: { n:"BrtBeginCustomFilters" }, +0x00AD: { n:"BrtEndCustomFilters" }, +0x00AE: { n:"BrtCustomFilter" }, +0x00AF: { n:"BrtAFilterDateGroupItem" }, 0x00B0: { n:"BrtMergeCell", f:parse_BrtMergeCell }, -0x00B1: { n:"BrtBeginMergeCells", f:parsenoop }, -0x00B2: { n:"BrtEndMergeCells", f:parsenoop }, -0x00B3: { n:"BrtBeginPivotCacheDef", f:parsenoop }, -0x00B4: { n:"BrtEndPivotCacheDef", f:parsenoop }, -0x00B5: { n:"BrtBeginPCDFields", f:parsenoop }, -0x00B6: { n:"BrtEndPCDFields", f:parsenoop }, -0x00B7: { n:"BrtBeginPCDField", f:parsenoop }, -0x00B8: { n:"BrtEndPCDField", f:parsenoop }, -0x00B9: { n:"BrtBeginPCDSource", f:parsenoop }, -0x00BA: { n:"BrtEndPCDSource", f:parsenoop }, -0x00BB: { n:"BrtBeginPCDSRange", f:parsenoop }, -0x00BC: { n:"BrtEndPCDSRange", f:parsenoop }, -0x00BD: { n:"BrtBeginPCDFAtbl", f:parsenoop }, -0x00BE: { n:"BrtEndPCDFAtbl", f:parsenoop }, -0x00BF: { n:"BrtBeginPCDIRun", f:parsenoop }, -0x00C0: { n:"BrtEndPCDIRun", f:parsenoop }, -0x00C1: { n:"BrtBeginPivotCacheRecords", f:parsenoop }, -0x00C2: { n:"BrtEndPivotCacheRecords", f:parsenoop }, -0x00C3: { n:"BrtBeginPCDHierarchies", f:parsenoop }, -0x00C4: { n:"BrtEndPCDHierarchies", f:parsenoop }, -0x00C5: { n:"BrtBeginPCDHierarchy", f:parsenoop }, -0x00C6: { n:"BrtEndPCDHierarchy", f:parsenoop }, -0x00C7: { n:"BrtBeginPCDHFieldsUsage", f:parsenoop }, -0x00C8: { n:"BrtEndPCDHFieldsUsage", f:parsenoop }, -0x00C9: { n:"BrtBeginExtConnection", f:parsenoop }, -0x00CA: { n:"BrtEndExtConnection", f:parsenoop }, -0x00CB: { n:"BrtBeginECDbProps", f:parsenoop }, -0x00CC: { n:"BrtEndECDbProps", f:parsenoop }, -0x00CD: { n:"BrtBeginECOlapProps", f:parsenoop }, -0x00CE: { n:"BrtEndECOlapProps", f:parsenoop }, -0x00CF: { n:"BrtBeginPCDSConsol", f:parsenoop }, -0x00D0: { n:"BrtEndPCDSConsol", f:parsenoop }, -0x00D1: { n:"BrtBeginPCDSCPages", f:parsenoop }, -0x00D2: { n:"BrtEndPCDSCPages", f:parsenoop }, -0x00D3: { n:"BrtBeginPCDSCPage", f:parsenoop }, -0x00D4: { n:"BrtEndPCDSCPage", f:parsenoop }, -0x00D5: { n:"BrtBeginPCDSCPItem", f:parsenoop }, -0x00D6: { n:"BrtEndPCDSCPItem", f:parsenoop }, -0x00D7: { n:"BrtBeginPCDSCSets", f:parsenoop }, -0x00D8: { n:"BrtEndPCDSCSets", f:parsenoop }, -0x00D9: { n:"BrtBeginPCDSCSet", f:parsenoop }, -0x00DA: { n:"BrtEndPCDSCSet", f:parsenoop }, -0x00DB: { n:"BrtBeginPCDFGroup", f:parsenoop }, -0x00DC: { n:"BrtEndPCDFGroup", f:parsenoop }, -0x00DD: { n:"BrtBeginPCDFGItems", f:parsenoop }, -0x00DE: { n:"BrtEndPCDFGItems", f:parsenoop }, -0x00DF: { n:"BrtBeginPCDFGRange", f:parsenoop }, -0x00E0: { n:"BrtEndPCDFGRange", f:parsenoop }, -0x00E1: { n:"BrtBeginPCDFGDiscrete", f:parsenoop }, -0x00E2: { n:"BrtEndPCDFGDiscrete", f:parsenoop }, -0x00E3: { n:"BrtBeginPCDSDTupleCache", f:parsenoop }, -0x00E4: { n:"BrtEndPCDSDTupleCache", f:parsenoop }, -0x00E5: { n:"BrtBeginPCDSDTCEntries", f:parsenoop }, -0x00E6: { n:"BrtEndPCDSDTCEntries", f:parsenoop }, -0x00E7: { n:"BrtBeginPCDSDTCEMembers", f:parsenoop }, -0x00E8: { n:"BrtEndPCDSDTCEMembers", f:parsenoop }, -0x00E9: { n:"BrtBeginPCDSDTCEMember", f:parsenoop }, -0x00EA: { n:"BrtEndPCDSDTCEMember", f:parsenoop }, -0x00EB: { n:"BrtBeginPCDSDTCQueries", f:parsenoop }, -0x00EC: { n:"BrtEndPCDSDTCQueries", f:parsenoop }, -0x00ED: { n:"BrtBeginPCDSDTCQuery", f:parsenoop }, -0x00EE: { n:"BrtEndPCDSDTCQuery", f:parsenoop }, -0x00EF: { n:"BrtBeginPCDSDTCSets", f:parsenoop }, -0x00F0: { n:"BrtEndPCDSDTCSets", f:parsenoop }, -0x00F1: { n:"BrtBeginPCDSDTCSet", f:parsenoop }, -0x00F2: { n:"BrtEndPCDSDTCSet", f:parsenoop }, -0x00F3: { n:"BrtBeginPCDCalcItems", f:parsenoop }, -0x00F4: { n:"BrtEndPCDCalcItems", f:parsenoop }, -0x00F5: { n:"BrtBeginPCDCalcItem", f:parsenoop }, -0x00F6: { n:"BrtEndPCDCalcItem", f:parsenoop }, -0x00F7: { n:"BrtBeginPRule", f:parsenoop }, -0x00F8: { n:"BrtEndPRule", f:parsenoop }, -0x00F9: { n:"BrtBeginPRFilters", f:parsenoop }, -0x00FA: { n:"BrtEndPRFilters", f:parsenoop }, -0x00FB: { n:"BrtBeginPRFilter", f:parsenoop }, -0x00FC: { n:"BrtEndPRFilter", f:parsenoop }, -0x00FD: { n:"BrtBeginPNames", f:parsenoop }, -0x00FE: { n:"BrtEndPNames", f:parsenoop }, -0x00FF: { n:"BrtBeginPName", f:parsenoop }, -0x0100: { n:"BrtEndPName", f:parsenoop }, -0x0101: { n:"BrtBeginPNPairs", f:parsenoop }, -0x0102: { n:"BrtEndPNPairs", f:parsenoop }, -0x0103: { n:"BrtBeginPNPair", f:parsenoop }, -0x0104: { n:"BrtEndPNPair", f:parsenoop }, -0x0105: { n:"BrtBeginECWebProps", f:parsenoop }, -0x0106: { n:"BrtEndECWebProps", f:parsenoop }, -0x0107: { n:"BrtBeginEcWpTables", f:parsenoop }, -0x0108: { n:"BrtEndECWPTables", f:parsenoop }, -0x0109: { n:"BrtBeginECParams", f:parsenoop }, -0x010A: { n:"BrtEndECParams", f:parsenoop }, -0x010B: { n:"BrtBeginECParam", f:parsenoop }, -0x010C: { n:"BrtEndECParam", f:parsenoop }, -0x010D: { n:"BrtBeginPCDKPIs", f:parsenoop }, -0x010E: { n:"BrtEndPCDKPIs", f:parsenoop }, -0x010F: { n:"BrtBeginPCDKPI", f:parsenoop }, -0x0110: { n:"BrtEndPCDKPI", f:parsenoop }, -0x0111: { n:"BrtBeginDims", f:parsenoop }, -0x0112: { n:"BrtEndDims", f:parsenoop }, -0x0113: { n:"BrtBeginDim", f:parsenoop }, -0x0114: { n:"BrtEndDim", f:parsenoop }, -0x0115: { n:"BrtIndexPartEnd", f:parsenoop }, -0x0116: { n:"BrtBeginStyleSheet", f:parsenoop }, -0x0117: { n:"BrtEndStyleSheet", f:parsenoop }, -0x0118: { n:"BrtBeginSXView", f:parsenoop }, -0x0119: { n:"BrtEndSXVI", f:parsenoop }, -0x011A: { n:"BrtBeginSXVI", f:parsenoop }, -0x011B: { n:"BrtBeginSXVIs", f:parsenoop }, -0x011C: { n:"BrtEndSXVIs", f:parsenoop }, -0x011D: { n:"BrtBeginSXVD", f:parsenoop }, -0x011E: { n:"BrtEndSXVD", f:parsenoop }, -0x011F: { n:"BrtBeginSXVDs", f:parsenoop }, -0x0120: { n:"BrtEndSXVDs", f:parsenoop }, -0x0121: { n:"BrtBeginSXPI", f:parsenoop }, -0x0122: { n:"BrtEndSXPI", f:parsenoop }, -0x0123: { n:"BrtBeginSXPIs", f:parsenoop }, -0x0124: { n:"BrtEndSXPIs", f:parsenoop }, -0x0125: { n:"BrtBeginSXDI", f:parsenoop }, -0x0126: { n:"BrtEndSXDI", f:parsenoop }, -0x0127: { n:"BrtBeginSXDIs", f:parsenoop }, -0x0128: { n:"BrtEndSXDIs", f:parsenoop }, -0x0129: { n:"BrtBeginSXLI", f:parsenoop }, -0x012A: { n:"BrtEndSXLI", f:parsenoop }, -0x012B: { n:"BrtBeginSXLIRws", f:parsenoop }, -0x012C: { n:"BrtEndSXLIRws", f:parsenoop }, -0x012D: { n:"BrtBeginSXLICols", f:parsenoop }, -0x012E: { n:"BrtEndSXLICols", f:parsenoop }, -0x012F: { n:"BrtBeginSXFormat", f:parsenoop }, -0x0130: { n:"BrtEndSXFormat", f:parsenoop }, -0x0131: { n:"BrtBeginSXFormats", f:parsenoop }, -0x0132: { n:"BrtEndSxFormats", f:parsenoop }, -0x0133: { n:"BrtBeginSxSelect", f:parsenoop }, -0x0134: { n:"BrtEndSxSelect", f:parsenoop }, -0x0135: { n:"BrtBeginISXVDRws", f:parsenoop }, -0x0136: { n:"BrtEndISXVDRws", f:parsenoop }, -0x0137: { n:"BrtBeginISXVDCols", f:parsenoop }, -0x0138: { n:"BrtEndISXVDCols", f:parsenoop }, -0x0139: { n:"BrtEndSXLocation", f:parsenoop }, -0x013A: { n:"BrtBeginSXLocation", f:parsenoop }, -0x013B: { n:"BrtEndSXView", f:parsenoop }, -0x013C: { n:"BrtBeginSXTHs", f:parsenoop }, -0x013D: { n:"BrtEndSXTHs", f:parsenoop }, -0x013E: { n:"BrtBeginSXTH", f:parsenoop }, -0x013F: { n:"BrtEndSXTH", f:parsenoop }, -0x0140: { n:"BrtBeginISXTHRws", f:parsenoop }, -0x0141: { n:"BrtEndISXTHRws", f:parsenoop }, -0x0142: { n:"BrtBeginISXTHCols", f:parsenoop }, -0x0143: { n:"BrtEndISXTHCols", f:parsenoop }, -0x0144: { n:"BrtBeginSXTDMPS", f:parsenoop }, -0x0145: { n:"BrtEndSXTDMPs", f:parsenoop }, -0x0146: { n:"BrtBeginSXTDMP", f:parsenoop }, -0x0147: { n:"BrtEndSXTDMP", f:parsenoop }, -0x0148: { n:"BrtBeginSXTHItems", f:parsenoop }, -0x0149: { n:"BrtEndSXTHItems", f:parsenoop }, -0x014A: { n:"BrtBeginSXTHItem", f:parsenoop }, -0x014B: { n:"BrtEndSXTHItem", f:parsenoop }, -0x014C: { n:"BrtBeginMetadata", f:parsenoop }, -0x014D: { n:"BrtEndMetadata", f:parsenoop }, -0x014E: { n:"BrtBeginEsmdtinfo", f:parsenoop }, -0x014F: { n:"BrtMdtinfo", f:parsenoop }, -0x0150: { n:"BrtEndEsmdtinfo", f:parsenoop }, -0x0151: { n:"BrtBeginEsmdb", f:parsenoop }, -0x0152: { n:"BrtEndEsmdb", f:parsenoop }, -0x0153: { n:"BrtBeginEsfmd", f:parsenoop }, -0x0154: { n:"BrtEndEsfmd", f:parsenoop }, -0x0155: { n:"BrtBeginSingleCells", f:parsenoop }, -0x0156: { n:"BrtEndSingleCells", f:parsenoop }, -0x0157: { n:"BrtBeginList", f:parsenoop }, -0x0158: { n:"BrtEndList", f:parsenoop }, -0x0159: { n:"BrtBeginListCols", f:parsenoop }, -0x015A: { n:"BrtEndListCols", f:parsenoop }, -0x015B: { n:"BrtBeginListCol", f:parsenoop }, -0x015C: { n:"BrtEndListCol", f:parsenoop }, -0x015D: { n:"BrtBeginListXmlCPr", f:parsenoop }, -0x015E: { n:"BrtEndListXmlCPr", f:parsenoop }, -0x015F: { n:"BrtListCCFmla", f:parsenoop }, -0x0160: { n:"BrtListTrFmla", f:parsenoop }, -0x0161: { n:"BrtBeginExternals", f:parsenoop }, -0x0162: { n:"BrtEndExternals", f:parsenoop }, +0x00B1: { n:"BrtBeginMergeCells" }, +0x00B2: { n:"BrtEndMergeCells" }, +0x00B3: { n:"BrtBeginPivotCacheDef" }, +0x00B4: { n:"BrtEndPivotCacheDef" }, +0x00B5: { n:"BrtBeginPCDFields" }, +0x00B6: { n:"BrtEndPCDFields" }, +0x00B7: { n:"BrtBeginPCDField" }, +0x00B8: { n:"BrtEndPCDField" }, +0x00B9: { n:"BrtBeginPCDSource" }, +0x00BA: { n:"BrtEndPCDSource" }, +0x00BB: { n:"BrtBeginPCDSRange" }, +0x00BC: { n:"BrtEndPCDSRange" }, +0x00BD: { n:"BrtBeginPCDFAtbl" }, +0x00BE: { n:"BrtEndPCDFAtbl" }, +0x00BF: { n:"BrtBeginPCDIRun" }, +0x00C0: { n:"BrtEndPCDIRun" }, +0x00C1: { n:"BrtBeginPivotCacheRecords" }, +0x00C2: { n:"BrtEndPivotCacheRecords" }, +0x00C3: { n:"BrtBeginPCDHierarchies" }, +0x00C4: { n:"BrtEndPCDHierarchies" }, +0x00C5: { n:"BrtBeginPCDHierarchy" }, +0x00C6: { n:"BrtEndPCDHierarchy" }, +0x00C7: { n:"BrtBeginPCDHFieldsUsage" }, +0x00C8: { n:"BrtEndPCDHFieldsUsage" }, +0x00C9: { n:"BrtBeginExtConnection" }, +0x00CA: { n:"BrtEndExtConnection" }, +0x00CB: { n:"BrtBeginECDbProps" }, +0x00CC: { n:"BrtEndECDbProps" }, +0x00CD: { n:"BrtBeginECOlapProps" }, +0x00CE: { n:"BrtEndECOlapProps" }, +0x00CF: { n:"BrtBeginPCDSConsol" }, +0x00D0: { n:"BrtEndPCDSConsol" }, +0x00D1: { n:"BrtBeginPCDSCPages" }, +0x00D2: { n:"BrtEndPCDSCPages" }, +0x00D3: { n:"BrtBeginPCDSCPage" }, +0x00D4: { n:"BrtEndPCDSCPage" }, +0x00D5: { n:"BrtBeginPCDSCPItem" }, +0x00D6: { n:"BrtEndPCDSCPItem" }, +0x00D7: { n:"BrtBeginPCDSCSets" }, +0x00D8: { n:"BrtEndPCDSCSets" }, +0x00D9: { n:"BrtBeginPCDSCSet" }, +0x00DA: { n:"BrtEndPCDSCSet" }, +0x00DB: { n:"BrtBeginPCDFGroup" }, +0x00DC: { n:"BrtEndPCDFGroup" }, +0x00DD: { n:"BrtBeginPCDFGItems" }, +0x00DE: { n:"BrtEndPCDFGItems" }, +0x00DF: { n:"BrtBeginPCDFGRange" }, +0x00E0: { n:"BrtEndPCDFGRange" }, +0x00E1: { n:"BrtBeginPCDFGDiscrete" }, +0x00E2: { n:"BrtEndPCDFGDiscrete" }, +0x00E3: { n:"BrtBeginPCDSDTupleCache" }, +0x00E4: { n:"BrtEndPCDSDTupleCache" }, +0x00E5: { n:"BrtBeginPCDSDTCEntries" }, +0x00E6: { n:"BrtEndPCDSDTCEntries" }, +0x00E7: { n:"BrtBeginPCDSDTCEMembers" }, +0x00E8: { n:"BrtEndPCDSDTCEMembers" }, +0x00E9: { n:"BrtBeginPCDSDTCEMember" }, +0x00EA: { n:"BrtEndPCDSDTCEMember" }, +0x00EB: { n:"BrtBeginPCDSDTCQueries" }, +0x00EC: { n:"BrtEndPCDSDTCQueries" }, +0x00ED: { n:"BrtBeginPCDSDTCQuery" }, +0x00EE: { n:"BrtEndPCDSDTCQuery" }, +0x00EF: { n:"BrtBeginPCDSDTCSets" }, +0x00F0: { n:"BrtEndPCDSDTCSets" }, +0x00F1: { n:"BrtBeginPCDSDTCSet" }, +0x00F2: { n:"BrtEndPCDSDTCSet" }, +0x00F3: { n:"BrtBeginPCDCalcItems" }, +0x00F4: { n:"BrtEndPCDCalcItems" }, +0x00F5: { n:"BrtBeginPCDCalcItem" }, +0x00F6: { n:"BrtEndPCDCalcItem" }, +0x00F7: { n:"BrtBeginPRule" }, +0x00F8: { n:"BrtEndPRule" }, +0x00F9: { n:"BrtBeginPRFilters" }, +0x00FA: { n:"BrtEndPRFilters" }, +0x00FB: { n:"BrtBeginPRFilter" }, +0x00FC: { n:"BrtEndPRFilter" }, +0x00FD: { n:"BrtBeginPNames" }, +0x00FE: { n:"BrtEndPNames" }, +0x00FF: { n:"BrtBeginPName" }, +0x0100: { n:"BrtEndPName" }, +0x0101: { n:"BrtBeginPNPairs" }, +0x0102: { n:"BrtEndPNPairs" }, +0x0103: { n:"BrtBeginPNPair" }, +0x0104: { n:"BrtEndPNPair" }, +0x0105: { n:"BrtBeginECWebProps" }, +0x0106: { n:"BrtEndECWebProps" }, +0x0107: { n:"BrtBeginEcWpTables" }, +0x0108: { n:"BrtEndECWPTables" }, +0x0109: { n:"BrtBeginECParams" }, +0x010A: { n:"BrtEndECParams" }, +0x010B: { n:"BrtBeginECParam" }, +0x010C: { n:"BrtEndECParam" }, +0x010D: { n:"BrtBeginPCDKPIs" }, +0x010E: { n:"BrtEndPCDKPIs" }, +0x010F: { n:"BrtBeginPCDKPI" }, +0x0110: { n:"BrtEndPCDKPI" }, +0x0111: { n:"BrtBeginDims" }, +0x0112: { n:"BrtEndDims" }, +0x0113: { n:"BrtBeginDim" }, +0x0114: { n:"BrtEndDim" }, +0x0115: { n:"BrtIndexPartEnd" }, +0x0116: { n:"BrtBeginStyleSheet" }, +0x0117: { n:"BrtEndStyleSheet" }, +0x0118: { n:"BrtBeginSXView" }, +0x0119: { n:"BrtEndSXVI" }, +0x011A: { n:"BrtBeginSXVI" }, +0x011B: { n:"BrtBeginSXVIs" }, +0x011C: { n:"BrtEndSXVIs" }, +0x011D: { n:"BrtBeginSXVD" }, +0x011E: { n:"BrtEndSXVD" }, +0x011F: { n:"BrtBeginSXVDs" }, +0x0120: { n:"BrtEndSXVDs" }, +0x0121: { n:"BrtBeginSXPI" }, +0x0122: { n:"BrtEndSXPI" }, +0x0123: { n:"BrtBeginSXPIs" }, +0x0124: { n:"BrtEndSXPIs" }, +0x0125: { n:"BrtBeginSXDI" }, +0x0126: { n:"BrtEndSXDI" }, +0x0127: { n:"BrtBeginSXDIs" }, +0x0128: { n:"BrtEndSXDIs" }, +0x0129: { n:"BrtBeginSXLI" }, +0x012A: { n:"BrtEndSXLI" }, +0x012B: { n:"BrtBeginSXLIRws" }, +0x012C: { n:"BrtEndSXLIRws" }, +0x012D: { n:"BrtBeginSXLICols" }, +0x012E: { n:"BrtEndSXLICols" }, +0x012F: { n:"BrtBeginSXFormat" }, +0x0130: { n:"BrtEndSXFormat" }, +0x0131: { n:"BrtBeginSXFormats" }, +0x0132: { n:"BrtEndSxFormats" }, +0x0133: { n:"BrtBeginSxSelect" }, +0x0134: { n:"BrtEndSxSelect" }, +0x0135: { n:"BrtBeginISXVDRws" }, +0x0136: { n:"BrtEndISXVDRws" }, +0x0137: { n:"BrtBeginISXVDCols" }, +0x0138: { n:"BrtEndISXVDCols" }, +0x0139: { n:"BrtEndSXLocation" }, +0x013A: { n:"BrtBeginSXLocation" }, +0x013B: { n:"BrtEndSXView" }, +0x013C: { n:"BrtBeginSXTHs" }, +0x013D: { n:"BrtEndSXTHs" }, +0x013E: { n:"BrtBeginSXTH" }, +0x013F: { n:"BrtEndSXTH" }, +0x0140: { n:"BrtBeginISXTHRws" }, +0x0141: { n:"BrtEndISXTHRws" }, +0x0142: { n:"BrtBeginISXTHCols" }, +0x0143: { n:"BrtEndISXTHCols" }, +0x0144: { n:"BrtBeginSXTDMPS" }, +0x0145: { n:"BrtEndSXTDMPs" }, +0x0146: { n:"BrtBeginSXTDMP" }, +0x0147: { n:"BrtEndSXTDMP" }, +0x0148: { n:"BrtBeginSXTHItems" }, +0x0149: { n:"BrtEndSXTHItems" }, +0x014A: { n:"BrtBeginSXTHItem" }, +0x014B: { n:"BrtEndSXTHItem" }, +0x014C: { n:"BrtBeginMetadata" }, +0x014D: { n:"BrtEndMetadata" }, +0x014E: { n:"BrtBeginEsmdtinfo" }, +0x014F: { n:"BrtMdtinfo" }, +0x0150: { n:"BrtEndEsmdtinfo" }, +0x0151: { n:"BrtBeginEsmdb" }, +0x0152: { n:"BrtEndEsmdb" }, +0x0153: { n:"BrtBeginEsfmd" }, +0x0154: { n:"BrtEndEsfmd" }, +0x0155: { n:"BrtBeginSingleCells" }, +0x0156: { n:"BrtEndSingleCells" }, +0x0157: { n:"BrtBeginList" }, +0x0158: { n:"BrtEndList" }, +0x0159: { n:"BrtBeginListCols" }, +0x015A: { n:"BrtEndListCols" }, +0x015B: { n:"BrtBeginListCol" }, +0x015C: { n:"BrtEndListCol" }, +0x015D: { n:"BrtBeginListXmlCPr" }, +0x015E: { n:"BrtEndListXmlCPr" }, +0x015F: { n:"BrtListCCFmla" }, +0x0160: { n:"BrtListTrFmla" }, +0x0161: { n:"BrtBeginExternals" }, +0x0162: { n:"BrtEndExternals" }, 0x0163: { n:"BrtSupBookSrc", f:parse_RelID}, -0x0165: { n:"BrtSupSelf", f:parsenoop }, -0x0166: { n:"BrtSupSame", f:parsenoop }, -0x0167: { n:"BrtSupTabs", f:parsenoop }, -0x0168: { n:"BrtBeginSupBook", f:parsenoop }, -0x0169: { n:"BrtPlaceholderName", f:parsenoop }, +0x0165: { n:"BrtSupSelf" }, +0x0166: { n:"BrtSupSame" }, +0x0167: { n:"BrtSupTabs" }, +0x0168: { n:"BrtBeginSupBook" }, +0x0169: { n:"BrtPlaceholderName" }, 0x016A: { n:"BrtExternSheet", f:parse_ExternSheet }, -0x016B: { n:"BrtExternTableStart", f:parsenoop }, -0x016C: { n:"BrtExternTableEnd", f:parsenoop }, -0x016E: { n:"BrtExternRowHdr", f:parsenoop }, -0x016F: { n:"BrtExternCellBlank", f:parsenoop }, -0x0170: { n:"BrtExternCellReal", f:parsenoop }, -0x0171: { n:"BrtExternCellBool", f:parsenoop }, -0x0172: { n:"BrtExternCellError", f:parsenoop }, -0x0173: { n:"BrtExternCellString", f:parsenoop }, -0x0174: { n:"BrtBeginEsmdx", f:parsenoop }, -0x0175: { n:"BrtEndEsmdx", f:parsenoop }, -0x0176: { n:"BrtBeginMdxSet", f:parsenoop }, -0x0177: { n:"BrtEndMdxSet", f:parsenoop }, -0x0178: { n:"BrtBeginMdxMbrProp", f:parsenoop }, -0x0179: { n:"BrtEndMdxMbrProp", f:parsenoop }, -0x017A: { n:"BrtBeginMdxKPI", f:parsenoop }, -0x017B: { n:"BrtEndMdxKPI", f:parsenoop }, -0x017C: { n:"BrtBeginEsstr", f:parsenoop }, -0x017D: { n:"BrtEndEsstr", f:parsenoop }, -0x017E: { n:"BrtBeginPRFItem", f:parsenoop }, -0x017F: { n:"BrtEndPRFItem", f:parsenoop }, -0x0180: { n:"BrtBeginPivotCacheIDs", f:parsenoop }, -0x0181: { n:"BrtEndPivotCacheIDs", f:parsenoop }, -0x0182: { n:"BrtBeginPivotCacheID", f:parsenoop }, -0x0183: { n:"BrtEndPivotCacheID", f:parsenoop }, -0x0184: { n:"BrtBeginISXVIs", f:parsenoop }, -0x0185: { n:"BrtEndISXVIs", f:parsenoop }, -0x0186: { n:"BrtBeginColInfos", f:parsenoop }, -0x0187: { n:"BrtEndColInfos", f:parsenoop }, -0x0188: { n:"BrtBeginRwBrk", f:parsenoop }, -0x0189: { n:"BrtEndRwBrk", f:parsenoop }, -0x018A: { n:"BrtBeginColBrk", f:parsenoop }, -0x018B: { n:"BrtEndColBrk", f:parsenoop }, -0x018C: { n:"BrtBrk", f:parsenoop }, -0x018D: { n:"BrtUserBookView", f:parsenoop }, -0x018E: { n:"BrtInfo", f:parsenoop }, -0x018F: { n:"BrtCUsr", f:parsenoop }, -0x0190: { n:"BrtUsr", f:parsenoop }, -0x0191: { n:"BrtBeginUsers", f:parsenoop }, -0x0193: { n:"BrtEOF", f:parsenoop }, -0x0194: { n:"BrtUCR", f:parsenoop }, -0x0195: { n:"BrtRRInsDel", f:parsenoop }, -0x0196: { n:"BrtRREndInsDel", f:parsenoop }, -0x0197: { n:"BrtRRMove", f:parsenoop }, -0x0198: { n:"BrtRREndMove", f:parsenoop }, -0x0199: { n:"BrtRRChgCell", f:parsenoop }, -0x019A: { n:"BrtRREndChgCell", f:parsenoop }, -0x019B: { n:"BrtRRHeader", f:parsenoop }, -0x019C: { n:"BrtRRUserView", f:parsenoop }, -0x019D: { n:"BrtRRRenSheet", f:parsenoop }, -0x019E: { n:"BrtRRInsertSh", f:parsenoop }, -0x019F: { n:"BrtRRDefName", f:parsenoop }, -0x01A0: { n:"BrtRRNote", f:parsenoop }, -0x01A1: { n:"BrtRRConflict", f:parsenoop }, -0x01A2: { n:"BrtRRTQSIF", f:parsenoop }, -0x01A3: { n:"BrtRRFormat", f:parsenoop }, -0x01A4: { n:"BrtRREndFormat", f:parsenoop }, -0x01A5: { n:"BrtRRAutoFmt", f:parsenoop }, -0x01A6: { n:"BrtBeginUserShViews", f:parsenoop }, -0x01A7: { n:"BrtBeginUserShView", f:parsenoop }, -0x01A8: { n:"BrtEndUserShView", f:parsenoop }, -0x01A9: { n:"BrtEndUserShViews", f:parsenoop }, +0x016B: { n:"BrtExternTableStart" }, +0x016C: { n:"BrtExternTableEnd" }, +0x016E: { n:"BrtExternRowHdr" }, +0x016F: { n:"BrtExternCellBlank" }, +0x0170: { n:"BrtExternCellReal" }, +0x0171: { n:"BrtExternCellBool" }, +0x0172: { n:"BrtExternCellError" }, +0x0173: { n:"BrtExternCellString" }, +0x0174: { n:"BrtBeginEsmdx" }, +0x0175: { n:"BrtEndEsmdx" }, +0x0176: { n:"BrtBeginMdxSet" }, +0x0177: { n:"BrtEndMdxSet" }, +0x0178: { n:"BrtBeginMdxMbrProp" }, +0x0179: { n:"BrtEndMdxMbrProp" }, +0x017A: { n:"BrtBeginMdxKPI" }, +0x017B: { n:"BrtEndMdxKPI" }, +0x017C: { n:"BrtBeginEsstr" }, +0x017D: { n:"BrtEndEsstr" }, +0x017E: { n:"BrtBeginPRFItem" }, +0x017F: { n:"BrtEndPRFItem" }, +0x0180: { n:"BrtBeginPivotCacheIDs" }, +0x0181: { n:"BrtEndPivotCacheIDs" }, +0x0182: { n:"BrtBeginPivotCacheID" }, +0x0183: { n:"BrtEndPivotCacheID" }, +0x0184: { n:"BrtBeginISXVIs" }, +0x0185: { n:"BrtEndISXVIs" }, +0x0186: { n:"BrtBeginColInfos" }, +0x0187: { n:"BrtEndColInfos" }, +0x0188: { n:"BrtBeginRwBrk" }, +0x0189: { n:"BrtEndRwBrk" }, +0x018A: { n:"BrtBeginColBrk" }, +0x018B: { n:"BrtEndColBrk" }, +0x018C: { n:"BrtBrk" }, +0x018D: { n:"BrtUserBookView" }, +0x018E: { n:"BrtInfo" }, +0x018F: { n:"BrtCUsr" }, +0x0190: { n:"BrtUsr" }, +0x0191: { n:"BrtBeginUsers" }, +0x0193: { n:"BrtEOF" }, +0x0194: { n:"BrtUCR" }, +0x0195: { n:"BrtRRInsDel" }, +0x0196: { n:"BrtRREndInsDel" }, +0x0197: { n:"BrtRRMove" }, +0x0198: { n:"BrtRREndMove" }, +0x0199: { n:"BrtRRChgCell" }, +0x019A: { n:"BrtRREndChgCell" }, +0x019B: { n:"BrtRRHeader" }, +0x019C: { n:"BrtRRUserView" }, +0x019D: { n:"BrtRRRenSheet" }, +0x019E: { n:"BrtRRInsertSh" }, +0x019F: { n:"BrtRRDefName" }, +0x01A0: { n:"BrtRRNote" }, +0x01A1: { n:"BrtRRConflict" }, +0x01A2: { n:"BrtRRTQSIF" }, +0x01A3: { n:"BrtRRFormat" }, +0x01A4: { n:"BrtRREndFormat" }, +0x01A5: { n:"BrtRRAutoFmt" }, +0x01A6: { n:"BrtBeginUserShViews" }, +0x01A7: { n:"BrtBeginUserShView" }, +0x01A8: { n:"BrtEndUserShView" }, +0x01A9: { n:"BrtEndUserShViews" }, 0x01AA: { n:"BrtArrFmla", f:parse_BrtArrFmla }, 0x01AB: { n:"BrtShrFmla", f:parse_BrtShrFmla }, -0x01AC: { n:"BrtTable", f:parsenoop }, -0x01AD: { n:"BrtBeginExtConnections", f:parsenoop }, -0x01AE: { n:"BrtEndExtConnections", f:parsenoop }, -0x01AF: { n:"BrtBeginPCDCalcMems", f:parsenoop }, -0x01B0: { n:"BrtEndPCDCalcMems", f:parsenoop }, -0x01B1: { n:"BrtBeginPCDCalcMem", f:parsenoop }, -0x01B2: { n:"BrtEndPCDCalcMem", f:parsenoop }, -0x01B3: { n:"BrtBeginPCDHGLevels", f:parsenoop }, -0x01B4: { n:"BrtEndPCDHGLevels", f:parsenoop }, -0x01B5: { n:"BrtBeginPCDHGLevel", f:parsenoop }, -0x01B6: { n:"BrtEndPCDHGLevel", f:parsenoop }, -0x01B7: { n:"BrtBeginPCDHGLGroups", f:parsenoop }, -0x01B8: { n:"BrtEndPCDHGLGroups", f:parsenoop }, -0x01B9: { n:"BrtBeginPCDHGLGroup", f:parsenoop }, -0x01BA: { n:"BrtEndPCDHGLGroup", f:parsenoop }, -0x01BB: { n:"BrtBeginPCDHGLGMembers", f:parsenoop }, -0x01BC: { n:"BrtEndPCDHGLGMembers", f:parsenoop }, -0x01BD: { n:"BrtBeginPCDHGLGMember", f:parsenoop }, -0x01BE: { n:"BrtEndPCDHGLGMember", f:parsenoop }, -0x01BF: { n:"BrtBeginQSI", f:parsenoop }, -0x01C0: { n:"BrtEndQSI", f:parsenoop }, -0x01C1: { n:"BrtBeginQSIR", f:parsenoop }, -0x01C2: { n:"BrtEndQSIR", f:parsenoop }, -0x01C3: { n:"BrtBeginDeletedNames", f:parsenoop }, -0x01C4: { n:"BrtEndDeletedNames", f:parsenoop }, -0x01C5: { n:"BrtBeginDeletedName", f:parsenoop }, -0x01C6: { n:"BrtEndDeletedName", f:parsenoop }, -0x01C7: { n:"BrtBeginQSIFs", f:parsenoop }, -0x01C8: { n:"BrtEndQSIFs", f:parsenoop }, -0x01C9: { n:"BrtBeginQSIF", f:parsenoop }, -0x01CA: { n:"BrtEndQSIF", f:parsenoop }, -0x01CB: { n:"BrtBeginAutoSortScope", f:parsenoop }, -0x01CC: { n:"BrtEndAutoSortScope", f:parsenoop }, -0x01CD: { n:"BrtBeginConditionalFormatting", f:parsenoop }, -0x01CE: { n:"BrtEndConditionalFormatting", f:parsenoop }, -0x01CF: { n:"BrtBeginCFRule", f:parsenoop }, -0x01D0: { n:"BrtEndCFRule", f:parsenoop }, -0x01D1: { n:"BrtBeginIconSet", f:parsenoop }, -0x01D2: { n:"BrtEndIconSet", f:parsenoop }, -0x01D3: { n:"BrtBeginDatabar", f:parsenoop }, -0x01D4: { n:"BrtEndDatabar", f:parsenoop }, -0x01D5: { n:"BrtBeginColorScale", f:parsenoop }, -0x01D6: { n:"BrtEndColorScale", f:parsenoop }, -0x01D7: { n:"BrtCFVO", f:parsenoop }, -0x01D8: { n:"BrtExternValueMeta", f:parsenoop }, -0x01D9: { n:"BrtBeginColorPalette", f:parsenoop }, -0x01DA: { n:"BrtEndColorPalette", f:parsenoop }, -0x01DB: { n:"BrtIndexedColor", f:parsenoop }, +0x01AC: { n:"BrtTable" }, +0x01AD: { n:"BrtBeginExtConnections" }, +0x01AE: { n:"BrtEndExtConnections" }, +0x01AF: { n:"BrtBeginPCDCalcMems" }, +0x01B0: { n:"BrtEndPCDCalcMems" }, +0x01B1: { n:"BrtBeginPCDCalcMem" }, +0x01B2: { n:"BrtEndPCDCalcMem" }, +0x01B3: { n:"BrtBeginPCDHGLevels" }, +0x01B4: { n:"BrtEndPCDHGLevels" }, +0x01B5: { n:"BrtBeginPCDHGLevel" }, +0x01B6: { n:"BrtEndPCDHGLevel" }, +0x01B7: { n:"BrtBeginPCDHGLGroups" }, +0x01B8: { n:"BrtEndPCDHGLGroups" }, +0x01B9: { n:"BrtBeginPCDHGLGroup" }, +0x01BA: { n:"BrtEndPCDHGLGroup" }, +0x01BB: { n:"BrtBeginPCDHGLGMembers" }, +0x01BC: { n:"BrtEndPCDHGLGMembers" }, +0x01BD: { n:"BrtBeginPCDHGLGMember" }, +0x01BE: { n:"BrtEndPCDHGLGMember" }, +0x01BF: { n:"BrtBeginQSI" }, +0x01C0: { n:"BrtEndQSI" }, +0x01C1: { n:"BrtBeginQSIR" }, +0x01C2: { n:"BrtEndQSIR" }, +0x01C3: { n:"BrtBeginDeletedNames" }, +0x01C4: { n:"BrtEndDeletedNames" }, +0x01C5: { n:"BrtBeginDeletedName" }, +0x01C6: { n:"BrtEndDeletedName" }, +0x01C7: { n:"BrtBeginQSIFs" }, +0x01C8: { n:"BrtEndQSIFs" }, +0x01C9: { n:"BrtBeginQSIF" }, +0x01CA: { n:"BrtEndQSIF" }, +0x01CB: { n:"BrtBeginAutoSortScope" }, +0x01CC: { n:"BrtEndAutoSortScope" }, +0x01CD: { n:"BrtBeginConditionalFormatting" }, +0x01CE: { n:"BrtEndConditionalFormatting" }, +0x01CF: { n:"BrtBeginCFRule" }, +0x01D0: { n:"BrtEndCFRule" }, +0x01D1: { n:"BrtBeginIconSet" }, +0x01D2: { n:"BrtEndIconSet" }, +0x01D3: { n:"BrtBeginDatabar" }, +0x01D4: { n:"BrtEndDatabar" }, +0x01D5: { n:"BrtBeginColorScale" }, +0x01D6: { n:"BrtEndColorScale" }, +0x01D7: { n:"BrtCFVO" }, +0x01D8: { n:"BrtExternValueMeta" }, +0x01D9: { n:"BrtBeginColorPalette" }, +0x01DA: { n:"BrtEndColorPalette" }, +0x01DB: { n:"BrtIndexedColor" }, 0x01DC: { n:"BrtMargins", f:parse_BrtMargins }, -0x01DD: { n:"BrtPrintOptions", f:parsenoop }, -0x01DE: { n:"BrtPageSetup", f:parsenoop }, -0x01DF: { n:"BrtBeginHeaderFooter", f:parsenoop }, -0x01E0: { n:"BrtEndHeaderFooter", f:parsenoop }, -0x01E1: { n:"BrtBeginSXCrtFormat", f:parsenoop }, -0x01E2: { n:"BrtEndSXCrtFormat", f:parsenoop }, -0x01E3: { n:"BrtBeginSXCrtFormats", f:parsenoop }, -0x01E4: { n:"BrtEndSXCrtFormats", f:parsenoop }, +0x01DD: { n:"BrtPrintOptions" }, +0x01DE: { n:"BrtPageSetup" }, +0x01DF: { n:"BrtBeginHeaderFooter" }, +0x01E0: { n:"BrtEndHeaderFooter" }, +0x01E1: { n:"BrtBeginSXCrtFormat" }, +0x01E2: { n:"BrtEndSXCrtFormat" }, +0x01E3: { n:"BrtBeginSXCrtFormats" }, +0x01E4: { n:"BrtEndSXCrtFormats" }, 0x01E5: { n:"BrtWsFmtInfo", f:parse_BrtWsFmtInfo }, -0x01E6: { n:"BrtBeginMgs", f:parsenoop }, -0x01E7: { n:"BrtEndMGs", f:parsenoop }, -0x01E8: { n:"BrtBeginMGMaps", f:parsenoop }, -0x01E9: { n:"BrtEndMGMaps", f:parsenoop }, -0x01EA: { n:"BrtBeginMG", f:parsenoop }, -0x01EB: { n:"BrtEndMG", f:parsenoop }, -0x01EC: { n:"BrtBeginMap", f:parsenoop }, -0x01ED: { n:"BrtEndMap", f:parsenoop }, +0x01E6: { n:"BrtBeginMgs" }, +0x01E7: { n:"BrtEndMGs" }, +0x01E8: { n:"BrtBeginMGMaps" }, +0x01E9: { n:"BrtEndMGMaps" }, +0x01EA: { n:"BrtBeginMG" }, +0x01EB: { n:"BrtEndMG" }, +0x01EC: { n:"BrtBeginMap" }, +0x01ED: { n:"BrtEndMap" }, 0x01EE: { n:"BrtHLink", f:parse_BrtHLink }, -0x01EF: { n:"BrtBeginDCon", f:parsenoop }, -0x01F0: { n:"BrtEndDCon", f:parsenoop }, -0x01F1: { n:"BrtBeginDRefs", f:parsenoop }, -0x01F2: { n:"BrtEndDRefs", f:parsenoop }, -0x01F3: { n:"BrtDRef", f:parsenoop }, -0x01F4: { n:"BrtBeginScenMan", f:parsenoop }, -0x01F5: { n:"BrtEndScenMan", f:parsenoop }, -0x01F6: { n:"BrtBeginSct", f:parsenoop }, -0x01F7: { n:"BrtEndSct", f:parsenoop }, -0x01F8: { n:"BrtSlc", f:parsenoop }, -0x01F9: { n:"BrtBeginDXFs", f:parsenoop }, -0x01FA: { n:"BrtEndDXFs", f:parsenoop }, -0x01FB: { n:"BrtDXF", f:parsenoop }, -0x01FC: { n:"BrtBeginTableStyles", f:parsenoop }, -0x01FD: { n:"BrtEndTableStyles", f:parsenoop }, -0x01FE: { n:"BrtBeginTableStyle", f:parsenoop }, -0x01FF: { n:"BrtEndTableStyle", f:parsenoop }, -0x0200: { n:"BrtTableStyleElement", f:parsenoop }, -0x0201: { n:"BrtTableStyleClient", f:parsenoop }, -0x0202: { n:"BrtBeginVolDeps", f:parsenoop }, -0x0203: { n:"BrtEndVolDeps", f:parsenoop }, -0x0204: { n:"BrtBeginVolType", f:parsenoop }, -0x0205: { n:"BrtEndVolType", f:parsenoop }, -0x0206: { n:"BrtBeginVolMain", f:parsenoop }, -0x0207: { n:"BrtEndVolMain", f:parsenoop }, -0x0208: { n:"BrtBeginVolTopic", f:parsenoop }, -0x0209: { n:"BrtEndVolTopic", f:parsenoop }, -0x020A: { n:"BrtVolSubtopic", f:parsenoop }, -0x020B: { n:"BrtVolRef", f:parsenoop }, -0x020C: { n:"BrtVolNum", f:parsenoop }, -0x020D: { n:"BrtVolErr", f:parsenoop }, -0x020E: { n:"BrtVolStr", f:parsenoop }, -0x020F: { n:"BrtVolBool", f:parsenoop }, -0x0210: { n:"BrtBeginCalcChain$", f:parsenoop }, -0x0211: { n:"BrtEndCalcChain$", f:parsenoop }, -0x0212: { n:"BrtBeginSortState", f:parsenoop }, -0x0213: { n:"BrtEndSortState", f:parsenoop }, -0x0214: { n:"BrtBeginSortCond", f:parsenoop }, -0x0215: { n:"BrtEndSortCond", f:parsenoop }, -0x0216: { n:"BrtBookProtection", f:parsenoop }, -0x0217: { n:"BrtSheetProtection", f:parsenoop }, -0x0218: { n:"BrtRangeProtection", f:parsenoop }, -0x0219: { n:"BrtPhoneticInfo", f:parsenoop }, -0x021A: { n:"BrtBeginECTxtWiz", f:parsenoop }, -0x021B: { n:"BrtEndECTxtWiz", f:parsenoop }, -0x021C: { n:"BrtBeginECTWFldInfoLst", f:parsenoop }, -0x021D: { n:"BrtEndECTWFldInfoLst", f:parsenoop }, -0x021E: { n:"BrtBeginECTwFldInfo", f:parsenoop }, -0x0224: { n:"BrtFileSharing", f:parsenoop }, -0x0225: { n:"BrtOleSize", f:parsenoop }, +0x01EF: { n:"BrtBeginDCon" }, +0x01F0: { n:"BrtEndDCon" }, +0x01F1: { n:"BrtBeginDRefs" }, +0x01F2: { n:"BrtEndDRefs" }, +0x01F3: { n:"BrtDRef" }, +0x01F4: { n:"BrtBeginScenMan" }, +0x01F5: { n:"BrtEndScenMan" }, +0x01F6: { n:"BrtBeginSct" }, +0x01F7: { n:"BrtEndSct" }, +0x01F8: { n:"BrtSlc" }, +0x01F9: { n:"BrtBeginDXFs" }, +0x01FA: { n:"BrtEndDXFs" }, +0x01FB: { n:"BrtDXF" }, +0x01FC: { n:"BrtBeginTableStyles" }, +0x01FD: { n:"BrtEndTableStyles" }, +0x01FE: { n:"BrtBeginTableStyle" }, +0x01FF: { n:"BrtEndTableStyle" }, +0x0200: { n:"BrtTableStyleElement" }, +0x0201: { n:"BrtTableStyleClient" }, +0x0202: { n:"BrtBeginVolDeps" }, +0x0203: { n:"BrtEndVolDeps" }, +0x0204: { n:"BrtBeginVolType" }, +0x0205: { n:"BrtEndVolType" }, +0x0206: { n:"BrtBeginVolMain" }, +0x0207: { n:"BrtEndVolMain" }, +0x0208: { n:"BrtBeginVolTopic" }, +0x0209: { n:"BrtEndVolTopic" }, +0x020A: { n:"BrtVolSubtopic" }, +0x020B: { n:"BrtVolRef" }, +0x020C: { n:"BrtVolNum" }, +0x020D: { n:"BrtVolErr" }, +0x020E: { n:"BrtVolStr" }, +0x020F: { n:"BrtVolBool" }, +0x0210: { n:"BrtBeginCalcChain$" }, +0x0211: { n:"BrtEndCalcChain$" }, +0x0212: { n:"BrtBeginSortState" }, +0x0213: { n:"BrtEndSortState" }, +0x0214: { n:"BrtBeginSortCond" }, +0x0215: { n:"BrtEndSortCond" }, +0x0216: { n:"BrtBookProtection" }, +0x0217: { n:"BrtSheetProtection" }, +0x0218: { n:"BrtRangeProtection" }, +0x0219: { n:"BrtPhoneticInfo" }, +0x021A: { n:"BrtBeginECTxtWiz" }, +0x021B: { n:"BrtEndECTxtWiz" }, +0x021C: { n:"BrtBeginECTWFldInfoLst" }, +0x021D: { n:"BrtEndECTWFldInfoLst" }, +0x021E: { n:"BrtBeginECTwFldInfo" }, +0x0224: { n:"BrtFileSharing" }, +0x0225: { n:"BrtOleSize" }, 0x0226: { n:"BrtDrawing", f:parse_RelID }, -0x0227: { n:"BrtLegacyDrawing", f:parsenoop }, -0x0228: { n:"BrtLegacyDrawingHF", f:parsenoop }, -0x0229: { n:"BrtWebOpt", f:parsenoop }, -0x022A: { n:"BrtBeginWebPubItems", f:parsenoop }, -0x022B: { n:"BrtEndWebPubItems", f:parsenoop }, -0x022C: { n:"BrtBeginWebPubItem", f:parsenoop }, -0x022D: { n:"BrtEndWebPubItem", f:parsenoop }, -0x022E: { n:"BrtBeginSXCondFmt", f:parsenoop }, -0x022F: { n:"BrtEndSXCondFmt", f:parsenoop }, -0x0230: { n:"BrtBeginSXCondFmts", f:parsenoop }, -0x0231: { n:"BrtEndSXCondFmts", f:parsenoop }, -0x0232: { n:"BrtBkHim", f:parsenoop }, -0x0234: { n:"BrtColor", f:parsenoop }, -0x0235: { n:"BrtBeginIndexedColors", f:parsenoop }, -0x0236: { n:"BrtEndIndexedColors", f:parsenoop }, -0x0239: { n:"BrtBeginMRUColors", f:parsenoop }, -0x023A: { n:"BrtEndMRUColors", f:parsenoop }, -0x023C: { n:"BrtMRUColor", f:parsenoop }, -0x023D: { n:"BrtBeginDVals", f:parsenoop }, -0x023E: { n:"BrtEndDVals", f:parsenoop }, -0x0241: { n:"BrtSupNameStart", f:parsenoop }, -0x0242: { n:"BrtSupNameValueStart", f:parsenoop }, -0x0243: { n:"BrtSupNameValueEnd", f:parsenoop }, -0x0244: { n:"BrtSupNameNum", f:parsenoop }, -0x0245: { n:"BrtSupNameErr", f:parsenoop }, -0x0246: { n:"BrtSupNameSt", f:parsenoop }, -0x0247: { n:"BrtSupNameNil", f:parsenoop }, -0x0248: { n:"BrtSupNameBool", f:parsenoop }, -0x0249: { n:"BrtSupNameFmla", f:parsenoop }, -0x024A: { n:"BrtSupNameBits", f:parsenoop }, -0x024B: { n:"BrtSupNameEnd", f:parsenoop }, -0x024C: { n:"BrtEndSupBook", f:parsenoop }, -0x024D: { n:"BrtCellSmartTagProperty", f:parsenoop }, -0x024E: { n:"BrtBeginCellSmartTag", f:parsenoop }, -0x024F: { n:"BrtEndCellSmartTag", f:parsenoop }, -0x0250: { n:"BrtBeginCellSmartTags", f:parsenoop }, -0x0251: { n:"BrtEndCellSmartTags", f:parsenoop }, -0x0252: { n:"BrtBeginSmartTags", f:parsenoop }, -0x0253: { n:"BrtEndSmartTags", f:parsenoop }, -0x0254: { n:"BrtSmartTagType", f:parsenoop }, -0x0255: { n:"BrtBeginSmartTagTypes", f:parsenoop }, -0x0256: { n:"BrtEndSmartTagTypes", f:parsenoop }, -0x0257: { n:"BrtBeginSXFilters", f:parsenoop }, -0x0258: { n:"BrtEndSXFilters", f:parsenoop }, -0x0259: { n:"BrtBeginSXFILTER", f:parsenoop }, -0x025A: { n:"BrtEndSXFilter", f:parsenoop }, -0x025B: { n:"BrtBeginFills", f:parsenoop }, -0x025C: { n:"BrtEndFills", f:parsenoop }, -0x025D: { n:"BrtBeginCellWatches", f:parsenoop }, -0x025E: { n:"BrtEndCellWatches", f:parsenoop }, -0x025F: { n:"BrtCellWatch", f:parsenoop }, -0x0260: { n:"BrtBeginCRErrs", f:parsenoop }, -0x0261: { n:"BrtEndCRErrs", f:parsenoop }, -0x0262: { n:"BrtCrashRecErr", f:parsenoop }, -0x0263: { n:"BrtBeginFonts", f:parsenoop }, -0x0264: { n:"BrtEndFonts", f:parsenoop }, -0x0265: { n:"BrtBeginBorders", f:parsenoop }, -0x0266: { n:"BrtEndBorders", f:parsenoop }, -0x0267: { n:"BrtBeginFmts", f:parsenoop }, -0x0268: { n:"BrtEndFmts", f:parsenoop }, -0x0269: { n:"BrtBeginCellXFs", f:parsenoop }, -0x026A: { n:"BrtEndCellXFs", f:parsenoop }, -0x026B: { n:"BrtBeginStyles", f:parsenoop }, -0x026C: { n:"BrtEndStyles", f:parsenoop }, -0x0271: { n:"BrtBigName", f:parsenoop }, -0x0272: { n:"BrtBeginCellStyleXFs", f:parsenoop }, -0x0273: { n:"BrtEndCellStyleXFs", f:parsenoop }, -0x0274: { n:"BrtBeginComments", f:parsenoop }, -0x0275: { n:"BrtEndComments", f:parsenoop }, -0x0276: { n:"BrtBeginCommentAuthors", f:parsenoop }, -0x0277: { n:"BrtEndCommentAuthors", f:parsenoop }, +0x0227: { n:"BrtLegacyDrawing" }, +0x0228: { n:"BrtLegacyDrawingHF" }, +0x0229: { n:"BrtWebOpt" }, +0x022A: { n:"BrtBeginWebPubItems" }, +0x022B: { n:"BrtEndWebPubItems" }, +0x022C: { n:"BrtBeginWebPubItem" }, +0x022D: { n:"BrtEndWebPubItem" }, +0x022E: { n:"BrtBeginSXCondFmt" }, +0x022F: { n:"BrtEndSXCondFmt" }, +0x0230: { n:"BrtBeginSXCondFmts" }, +0x0231: { n:"BrtEndSXCondFmts" }, +0x0232: { n:"BrtBkHim" }, +0x0234: { n:"BrtColor" }, +0x0235: { n:"BrtBeginIndexedColors" }, +0x0236: { n:"BrtEndIndexedColors" }, +0x0239: { n:"BrtBeginMRUColors" }, +0x023A: { n:"BrtEndMRUColors" }, +0x023C: { n:"BrtMRUColor" }, +0x023D: { n:"BrtBeginDVals" }, +0x023E: { n:"BrtEndDVals" }, +0x0241: { n:"BrtSupNameStart" }, +0x0242: { n:"BrtSupNameValueStart" }, +0x0243: { n:"BrtSupNameValueEnd" }, +0x0244: { n:"BrtSupNameNum" }, +0x0245: { n:"BrtSupNameErr" }, +0x0246: { n:"BrtSupNameSt" }, +0x0247: { n:"BrtSupNameNil" }, +0x0248: { n:"BrtSupNameBool" }, +0x0249: { n:"BrtSupNameFmla" }, +0x024A: { n:"BrtSupNameBits" }, +0x024B: { n:"BrtSupNameEnd" }, +0x024C: { n:"BrtEndSupBook" }, +0x024D: { n:"BrtCellSmartTagProperty" }, +0x024E: { n:"BrtBeginCellSmartTag" }, +0x024F: { n:"BrtEndCellSmartTag" }, +0x0250: { n:"BrtBeginCellSmartTags" }, +0x0251: { n:"BrtEndCellSmartTags" }, +0x0252: { n:"BrtBeginSmartTags" }, +0x0253: { n:"BrtEndSmartTags" }, +0x0254: { n:"BrtSmartTagType" }, +0x0255: { n:"BrtBeginSmartTagTypes" }, +0x0256: { n:"BrtEndSmartTagTypes" }, +0x0257: { n:"BrtBeginSXFilters" }, +0x0258: { n:"BrtEndSXFilters" }, +0x0259: { n:"BrtBeginSXFILTER" }, +0x025A: { n:"BrtEndSXFilter" }, +0x025B: { n:"BrtBeginFills" }, +0x025C: { n:"BrtEndFills" }, +0x025D: { n:"BrtBeginCellWatches" }, +0x025E: { n:"BrtEndCellWatches" }, +0x025F: { n:"BrtCellWatch" }, +0x0260: { n:"BrtBeginCRErrs" }, +0x0261: { n:"BrtEndCRErrs" }, +0x0262: { n:"BrtCrashRecErr" }, +0x0263: { n:"BrtBeginFonts" }, +0x0264: { n:"BrtEndFonts" }, +0x0265: { n:"BrtBeginBorders" }, +0x0266: { n:"BrtEndBorders" }, +0x0267: { n:"BrtBeginFmts" }, +0x0268: { n:"BrtEndFmts" }, +0x0269: { n:"BrtBeginCellXFs" }, +0x026A: { n:"BrtEndCellXFs" }, +0x026B: { n:"BrtBeginStyles" }, +0x026C: { n:"BrtEndStyles" }, +0x0271: { n:"BrtBigName" }, +0x0272: { n:"BrtBeginCellStyleXFs" }, +0x0273: { n:"BrtEndCellStyleXFs" }, +0x0274: { n:"BrtBeginComments" }, +0x0275: { n:"BrtEndComments" }, +0x0276: { n:"BrtBeginCommentAuthors" }, +0x0277: { n:"BrtEndCommentAuthors" }, 0x0278: { n:"BrtCommentAuthor", f:parse_BrtCommentAuthor }, -0x0279: { n:"BrtBeginCommentList", f:parsenoop }, -0x027A: { n:"BrtEndCommentList", f:parsenoop }, +0x0279: { n:"BrtBeginCommentList" }, +0x027A: { n:"BrtEndCommentList" }, 0x027B: { n:"BrtBeginComment", f:parse_BrtBeginComment}, -0x027C: { n:"BrtEndComment", f:parsenoop }, +0x027C: { n:"BrtEndComment" }, 0x027D: { n:"BrtCommentText", f:parse_BrtCommentText }, -0x027E: { n:"BrtBeginOleObjects", f:parsenoop }, -0x027F: { n:"BrtOleObject", f:parsenoop }, -0x0280: { n:"BrtEndOleObjects", f:parsenoop }, -0x0281: { n:"BrtBeginSxrules", f:parsenoop }, -0x0282: { n:"BrtEndSxRules", f:parsenoop }, -0x0283: { n:"BrtBeginActiveXControls", f:parsenoop }, -0x0284: { n:"BrtActiveX", f:parsenoop }, -0x0285: { n:"BrtEndActiveXControls", f:parsenoop }, -0x0286: { n:"BrtBeginPCDSDTCEMembersSortBy", f:parsenoop }, -0x0288: { n:"BrtBeginCellIgnoreECs", f:parsenoop }, -0x0289: { n:"BrtCellIgnoreEC", f:parsenoop }, -0x028A: { n:"BrtEndCellIgnoreECs", f:parsenoop }, -0x028B: { n:"BrtCsProp", f:parsenoop }, -0x028C: { n:"BrtCsPageSetup", f:parsenoop }, -0x028D: { n:"BrtBeginUserCsViews", f:parsenoop }, -0x028E: { n:"BrtEndUserCsViews", f:parsenoop }, -0x028F: { n:"BrtBeginUserCsView", f:parsenoop }, -0x0290: { n:"BrtEndUserCsView", f:parsenoop }, -0x0291: { n:"BrtBeginPcdSFCIEntries", f:parsenoop }, -0x0292: { n:"BrtEndPCDSFCIEntries", f:parsenoop }, -0x0293: { n:"BrtPCDSFCIEntry", f:parsenoop }, -0x0294: { n:"BrtBeginListParts", f:parsenoop }, -0x0295: { n:"BrtListPart", f:parsenoop }, -0x0296: { n:"BrtEndListParts", f:parsenoop }, -0x0297: { n:"BrtSheetCalcProp", f:parsenoop }, -0x0298: { n:"BrtBeginFnGroup", f:parsenoop }, -0x0299: { n:"BrtFnGroup", f:parsenoop }, -0x029A: { n:"BrtEndFnGroup", f:parsenoop }, -0x029B: { n:"BrtSupAddin", f:parsenoop }, -0x029C: { n:"BrtSXTDMPOrder", f:parsenoop }, -0x029D: { n:"BrtCsProtection", f:parsenoop }, -0x029F: { n:"BrtBeginWsSortMap", f:parsenoop }, -0x02A0: { n:"BrtEndWsSortMap", f:parsenoop }, -0x02A1: { n:"BrtBeginRRSort", f:parsenoop }, -0x02A2: { n:"BrtEndRRSort", f:parsenoop }, -0x02A3: { n:"BrtRRSortItem", f:parsenoop }, -0x02A4: { n:"BrtFileSharingIso", f:parsenoop }, -0x02A5: { n:"BrtBookProtectionIso", f:parsenoop }, -0x02A6: { n:"BrtSheetProtectionIso", f:parsenoop }, -0x02A7: { n:"BrtCsProtectionIso", f:parsenoop }, -0x02A8: { n:"BrtRangeProtectionIso", f:parsenoop }, -0x0400: { n:"BrtRwDescent", f:parsenoop }, -0x0401: { n:"BrtKnownFonts", f:parsenoop }, -0x0402: { n:"BrtBeginSXTupleSet", f:parsenoop }, -0x0403: { n:"BrtEndSXTupleSet", f:parsenoop }, -0x0404: { n:"BrtBeginSXTupleSetHeader", f:parsenoop }, -0x0405: { n:"BrtEndSXTupleSetHeader", f:parsenoop }, -0x0406: { n:"BrtSXTupleSetHeaderItem", f:parsenoop }, -0x0407: { n:"BrtBeginSXTupleSetData", f:parsenoop }, -0x0408: { n:"BrtEndSXTupleSetData", f:parsenoop }, -0x0409: { n:"BrtBeginSXTupleSetRow", f:parsenoop }, -0x040A: { n:"BrtEndSXTupleSetRow", f:parsenoop }, -0x040B: { n:"BrtSXTupleSetRowItem", f:parsenoop }, -0x040C: { n:"BrtNameExt", f:parsenoop }, -0x040D: { n:"BrtPCDH14", f:parsenoop }, -0x040E: { n:"BrtBeginPCDCalcMem14", f:parsenoop }, -0x040F: { n:"BrtEndPCDCalcMem14", f:parsenoop }, -0x0410: { n:"BrtSXTH14", f:parsenoop }, -0x0411: { n:"BrtBeginSparklineGroup", f:parsenoop }, -0x0412: { n:"BrtEndSparklineGroup", f:parsenoop }, -0x0413: { n:"BrtSparkline", f:parsenoop }, -0x0414: { n:"BrtSXDI14", f:parsenoop }, -0x0415: { n:"BrtWsFmtInfoEx14", f:parsenoop }, -0x0416: { n:"BrtBeginConditionalFormatting14", f:parsenoop }, -0x0417: { n:"BrtEndConditionalFormatting14", f:parsenoop }, -0x0418: { n:"BrtBeginCFRule14", f:parsenoop }, -0x0419: { n:"BrtEndCFRule14", f:parsenoop }, -0x041A: { n:"BrtCFVO14", f:parsenoop }, -0x041B: { n:"BrtBeginDatabar14", f:parsenoop }, -0x041C: { n:"BrtBeginIconSet14", f:parsenoop }, -0x041D: { n:"BrtDVal14", f:parsenoop }, -0x041E: { n:"BrtBeginDVals14", f:parsenoop }, -0x041F: { n:"BrtColor14", f:parsenoop }, -0x0420: { n:"BrtBeginSparklines", f:parsenoop }, -0x0421: { n:"BrtEndSparklines", f:parsenoop }, -0x0422: { n:"BrtBeginSparklineGroups", f:parsenoop }, -0x0423: { n:"BrtEndSparklineGroups", f:parsenoop }, -0x0425: { n:"BrtSXVD14", f:parsenoop }, -0x0426: { n:"BrtBeginSxview14", f:parsenoop }, -0x0427: { n:"BrtEndSxview14", f:parsenoop }, -0x042A: { n:"BrtBeginPCD14", f:parsenoop }, -0x042B: { n:"BrtEndPCD14", f:parsenoop }, -0x042C: { n:"BrtBeginExtConn14", f:parsenoop }, -0x042D: { n:"BrtEndExtConn14", f:parsenoop }, -0x042E: { n:"BrtBeginSlicerCacheIDs", f:parsenoop }, -0x042F: { n:"BrtEndSlicerCacheIDs", f:parsenoop }, -0x0430: { n:"BrtBeginSlicerCacheID", f:parsenoop }, -0x0431: { n:"BrtEndSlicerCacheID", f:parsenoop }, -0x0433: { n:"BrtBeginSlicerCache", f:parsenoop }, -0x0434: { n:"BrtEndSlicerCache", f:parsenoop }, -0x0435: { n:"BrtBeginSlicerCacheDef", f:parsenoop }, -0x0436: { n:"BrtEndSlicerCacheDef", f:parsenoop }, -0x0437: { n:"BrtBeginSlicersEx", f:parsenoop }, -0x0438: { n:"BrtEndSlicersEx", f:parsenoop }, -0x0439: { n:"BrtBeginSlicerEx", f:parsenoop }, -0x043A: { n:"BrtEndSlicerEx", f:parsenoop }, -0x043B: { n:"BrtBeginSlicer", f:parsenoop }, -0x043C: { n:"BrtEndSlicer", f:parsenoop }, -0x043D: { n:"BrtSlicerCachePivotTables", f:parsenoop }, -0x043E: { n:"BrtBeginSlicerCacheOlapImpl", f:parsenoop }, -0x043F: { n:"BrtEndSlicerCacheOlapImpl", f:parsenoop }, -0x0440: { n:"BrtBeginSlicerCacheLevelsData", f:parsenoop }, -0x0441: { n:"BrtEndSlicerCacheLevelsData", f:parsenoop }, -0x0442: { n:"BrtBeginSlicerCacheLevelData", f:parsenoop }, -0x0443: { n:"BrtEndSlicerCacheLevelData", f:parsenoop }, -0x0444: { n:"BrtBeginSlicerCacheSiRanges", f:parsenoop }, -0x0445: { n:"BrtEndSlicerCacheSiRanges", f:parsenoop }, -0x0446: { n:"BrtBeginSlicerCacheSiRange", f:parsenoop }, -0x0447: { n:"BrtEndSlicerCacheSiRange", f:parsenoop }, -0x0448: { n:"BrtSlicerCacheOlapItem", f:parsenoop }, -0x0449: { n:"BrtBeginSlicerCacheSelections", f:parsenoop }, -0x044A: { n:"BrtSlicerCacheSelection", f:parsenoop }, -0x044B: { n:"BrtEndSlicerCacheSelections", f:parsenoop }, -0x044C: { n:"BrtBeginSlicerCacheNative", f:parsenoop }, -0x044D: { n:"BrtEndSlicerCacheNative", f:parsenoop }, -0x044E: { n:"BrtSlicerCacheNativeItem", f:parsenoop }, -0x044F: { n:"BrtRangeProtection14", f:parsenoop }, -0x0450: { n:"BrtRangeProtectionIso14", f:parsenoop }, -0x0451: { n:"BrtCellIgnoreEC14", f:parsenoop }, -0x0457: { n:"BrtList14", f:parsenoop }, -0x0458: { n:"BrtCFIcon", f:parsenoop }, -0x0459: { n:"BrtBeginSlicerCachesPivotCacheIDs", f:parsenoop }, -0x045A: { n:"BrtEndSlicerCachesPivotCacheIDs", f:parsenoop }, -0x045B: { n:"BrtBeginSlicers", f:parsenoop }, -0x045C: { n:"BrtEndSlicers", f:parsenoop }, -0x045D: { n:"BrtWbProp14", f:parsenoop }, -0x045E: { n:"BrtBeginSXEdit", f:parsenoop }, -0x045F: { n:"BrtEndSXEdit", f:parsenoop }, -0x0460: { n:"BrtBeginSXEdits", f:parsenoop }, -0x0461: { n:"BrtEndSXEdits", f:parsenoop }, -0x0462: { n:"BrtBeginSXChange", f:parsenoop }, -0x0463: { n:"BrtEndSXChange", f:parsenoop }, -0x0464: { n:"BrtBeginSXChanges", f:parsenoop }, -0x0465: { n:"BrtEndSXChanges", f:parsenoop }, -0x0466: { n:"BrtSXTupleItems", f:parsenoop }, -0x0468: { n:"BrtBeginSlicerStyle", f:parsenoop }, -0x0469: { n:"BrtEndSlicerStyle", f:parsenoop }, -0x046A: { n:"BrtSlicerStyleElement", f:parsenoop }, -0x046B: { n:"BrtBeginStyleSheetExt14", f:parsenoop }, -0x046C: { n:"BrtEndStyleSheetExt14", f:parsenoop }, -0x046D: { n:"BrtBeginSlicerCachesPivotCacheID", f:parsenoop }, -0x046E: { n:"BrtEndSlicerCachesPivotCacheID", f:parsenoop }, -0x046F: { n:"BrtBeginConditionalFormattings", f:parsenoop }, -0x0470: { n:"BrtEndConditionalFormattings", f:parsenoop }, -0x0471: { n:"BrtBeginPCDCalcMemExt", f:parsenoop }, -0x0472: { n:"BrtEndPCDCalcMemExt", f:parsenoop }, -0x0473: { n:"BrtBeginPCDCalcMemsExt", f:parsenoop }, -0x0474: { n:"BrtEndPCDCalcMemsExt", f:parsenoop }, -0x0475: { n:"BrtPCDField14", f:parsenoop }, -0x0476: { n:"BrtBeginSlicerStyles", f:parsenoop }, -0x0477: { n:"BrtEndSlicerStyles", f:parsenoop }, -0x0478: { n:"BrtBeginSlicerStyleElements", f:parsenoop }, -0x0479: { n:"BrtEndSlicerStyleElements", f:parsenoop }, -0x047A: { n:"BrtCFRuleExt", f:parsenoop }, -0x047B: { n:"BrtBeginSXCondFmt14", f:parsenoop }, -0x047C: { n:"BrtEndSXCondFmt14", f:parsenoop }, -0x047D: { n:"BrtBeginSXCondFmts14", f:parsenoop }, -0x047E: { n:"BrtEndSXCondFmts14", f:parsenoop }, -0x0480: { n:"BrtBeginSortCond14", f:parsenoop }, -0x0481: { n:"BrtEndSortCond14", f:parsenoop }, -0x0482: { n:"BrtEndDVals14", f:parsenoop }, -0x0483: { n:"BrtEndIconSet14", f:parsenoop }, -0x0484: { n:"BrtEndDatabar14", f:parsenoop }, -0x0485: { n:"BrtBeginColorScale14", f:parsenoop }, -0x0486: { n:"BrtEndColorScale14", f:parsenoop }, -0x0487: { n:"BrtBeginSxrules14", f:parsenoop }, -0x0488: { n:"BrtEndSxrules14", f:parsenoop }, -0x0489: { n:"BrtBeginPRule14", f:parsenoop }, -0x048A: { n:"BrtEndPRule14", f:parsenoop }, -0x048B: { n:"BrtBeginPRFilters14", f:parsenoop }, -0x048C: { n:"BrtEndPRFilters14", f:parsenoop }, -0x048D: { n:"BrtBeginPRFilter14", f:parsenoop }, -0x048E: { n:"BrtEndPRFilter14", f:parsenoop }, -0x048F: { n:"BrtBeginPRFItem14", f:parsenoop }, -0x0490: { n:"BrtEndPRFItem14", f:parsenoop }, -0x0491: { n:"BrtBeginCellIgnoreECs14", f:parsenoop }, -0x0492: { n:"BrtEndCellIgnoreECs14", f:parsenoop }, -0x0493: { n:"BrtDxf14", f:parsenoop }, -0x0494: { n:"BrtBeginDxF14s", f:parsenoop }, -0x0495: { n:"BrtEndDxf14s", f:parsenoop }, -0x0499: { n:"BrtFilter14", f:parsenoop }, -0x049A: { n:"BrtBeginCustomFilters14", f:parsenoop }, -0x049C: { n:"BrtCustomFilter14", f:parsenoop }, -0x049D: { n:"BrtIconFilter14", f:parsenoop }, -0x049E: { n:"BrtPivotCacheConnectionName", f:parsenoop }, -0x0800: { n:"BrtBeginDecoupledPivotCacheIDs", f:parsenoop }, -0x0801: { n:"BrtEndDecoupledPivotCacheIDs", f:parsenoop }, -0x0802: { n:"BrtDecoupledPivotCacheID", f:parsenoop }, -0x0803: { n:"BrtBeginPivotTableRefs", f:parsenoop }, -0x0804: { n:"BrtEndPivotTableRefs", f:parsenoop }, -0x0805: { n:"BrtPivotTableRef", f:parsenoop }, -0x0806: { n:"BrtSlicerCacheBookPivotTables", f:parsenoop }, -0x0807: { n:"BrtBeginSxvcells", f:parsenoop }, -0x0808: { n:"BrtEndSxvcells", f:parsenoop }, -0x0809: { n:"BrtBeginSxRow", f:parsenoop }, -0x080A: { n:"BrtEndSxRow", f:parsenoop }, -0x080C: { n:"BrtPcdCalcMem15", f:parsenoop }, -0x0813: { n:"BrtQsi15", f:parsenoop }, -0x0814: { n:"BrtBeginWebExtensions", f:parsenoop }, -0x0815: { n:"BrtEndWebExtensions", f:parsenoop }, -0x0816: { n:"BrtWebExtension", f:parsenoop }, -0x0817: { n:"BrtAbsPath15", f:parsenoop }, -0x0818: { n:"BrtBeginPivotTableUISettings", f:parsenoop }, -0x0819: { n:"BrtEndPivotTableUISettings", f:parsenoop }, -0x081B: { n:"BrtTableSlicerCacheIDs", f:parsenoop }, -0x081C: { n:"BrtTableSlicerCacheID", f:parsenoop }, -0x081D: { n:"BrtBeginTableSlicerCache", f:parsenoop }, -0x081E: { n:"BrtEndTableSlicerCache", f:parsenoop }, -0x081F: { n:"BrtSxFilter15", f:parsenoop }, -0x0820: { n:"BrtBeginTimelineCachePivotCacheIDs", f:parsenoop }, -0x0821: { n:"BrtEndTimelineCachePivotCacheIDs", f:parsenoop }, -0x0822: { n:"BrtTimelineCachePivotCacheID", f:parsenoop }, -0x0823: { n:"BrtBeginTimelineCacheIDs", f:parsenoop }, -0x0824: { n:"BrtEndTimelineCacheIDs", f:parsenoop }, -0x0825: { n:"BrtBeginTimelineCacheID", f:parsenoop }, -0x0826: { n:"BrtEndTimelineCacheID", f:parsenoop }, -0x0827: { n:"BrtBeginTimelinesEx", f:parsenoop }, -0x0828: { n:"BrtEndTimelinesEx", f:parsenoop }, -0x0829: { n:"BrtBeginTimelineEx", f:parsenoop }, -0x082A: { n:"BrtEndTimelineEx", f:parsenoop }, -0x082B: { n:"BrtWorkBookPr15", f:parsenoop }, -0x082C: { n:"BrtPCDH15", f:parsenoop }, -0x082D: { n:"BrtBeginTimelineStyle", f:parsenoop }, -0x082E: { n:"BrtEndTimelineStyle", f:parsenoop }, -0x082F: { n:"BrtTimelineStyleElement", f:parsenoop }, -0x0830: { n:"BrtBeginTimelineStylesheetExt15", f:parsenoop }, -0x0831: { n:"BrtEndTimelineStylesheetExt15", f:parsenoop }, -0x0832: { n:"BrtBeginTimelineStyles", f:parsenoop }, -0x0833: { n:"BrtEndTimelineStyles", f:parsenoop }, -0x0834: { n:"BrtBeginTimelineStyleElements", f:parsenoop }, -0x0835: { n:"BrtEndTimelineStyleElements", f:parsenoop }, -0x0836: { n:"BrtDxf15", f:parsenoop }, -0x0837: { n:"BrtBeginDxfs15", f:parsenoop }, -0x0838: { n:"brtEndDxfs15", f:parsenoop }, -0x0839: { n:"BrtSlicerCacheHideItemsWithNoData", f:parsenoop }, -0x083A: { n:"BrtBeginItemUniqueNames", f:parsenoop }, -0x083B: { n:"BrtEndItemUniqueNames", f:parsenoop }, -0x083C: { n:"BrtItemUniqueName", f:parsenoop }, -0x083D: { n:"BrtBeginExtConn15", f:parsenoop }, -0x083E: { n:"BrtEndExtConn15", f:parsenoop }, -0x083F: { n:"BrtBeginOledbPr15", f:parsenoop }, -0x0840: { n:"BrtEndOledbPr15", f:parsenoop }, -0x0841: { n:"BrtBeginDataFeedPr15", f:parsenoop }, -0x0842: { n:"BrtEndDataFeedPr15", f:parsenoop }, -0x0843: { n:"BrtTextPr15", f:parsenoop }, -0x0844: { n:"BrtRangePr15", f:parsenoop }, -0x0845: { n:"BrtDbCommand15", f:parsenoop }, -0x0846: { n:"BrtBeginDbTables15", f:parsenoop }, -0x0847: { n:"BrtEndDbTables15", f:parsenoop }, -0x0848: { n:"BrtDbTable15", f:parsenoop }, -0x0849: { n:"BrtBeginDataModel", f:parsenoop }, -0x084A: { n:"BrtEndDataModel", f:parsenoop }, -0x084B: { n:"BrtBeginModelTables", f:parsenoop }, -0x084C: { n:"BrtEndModelTables", f:parsenoop }, -0x084D: { n:"BrtModelTable", f:parsenoop }, -0x084E: { n:"BrtBeginModelRelationships", f:parsenoop }, -0x084F: { n:"BrtEndModelRelationships", f:parsenoop }, -0x0850: { n:"BrtModelRelationship", f:parsenoop }, -0x0851: { n:"BrtBeginECTxtWiz15", f:parsenoop }, -0x0852: { n:"BrtEndECTxtWiz15", f:parsenoop }, -0x0853: { n:"BrtBeginECTWFldInfoLst15", f:parsenoop }, -0x0854: { n:"BrtEndECTWFldInfoLst15", f:parsenoop }, -0x0855: { n:"BrtBeginECTWFldInfo15", f:parsenoop }, -0x0856: { n:"BrtFieldListActiveItem", f:parsenoop }, -0x0857: { n:"BrtPivotCacheIdVersion", f:parsenoop }, -0x0858: { n:"BrtSXDI15", f:parsenoop }, -0xFFFF: { n:"", f:parsenoop } +0x027E: { n:"BrtBeginOleObjects" }, +0x027F: { n:"BrtOleObject" }, +0x0280: { n:"BrtEndOleObjects" }, +0x0281: { n:"BrtBeginSxrules" }, +0x0282: { n:"BrtEndSxRules" }, +0x0283: { n:"BrtBeginActiveXControls" }, +0x0284: { n:"BrtActiveX" }, +0x0285: { n:"BrtEndActiveXControls" }, +0x0286: { n:"BrtBeginPCDSDTCEMembersSortBy" }, +0x0288: { n:"BrtBeginCellIgnoreECs" }, +0x0289: { n:"BrtCellIgnoreEC" }, +0x028A: { n:"BrtEndCellIgnoreECs" }, +0x028B: { n:"BrtCsProp", f:parse_BrtCsProp }, +0x028C: { n:"BrtCsPageSetup" }, +0x028D: { n:"BrtBeginUserCsViews" }, +0x028E: { n:"BrtEndUserCsViews" }, +0x028F: { n:"BrtBeginUserCsView" }, +0x0290: { n:"BrtEndUserCsView" }, +0x0291: { n:"BrtBeginPcdSFCIEntries" }, +0x0292: { n:"BrtEndPCDSFCIEntries" }, +0x0293: { n:"BrtPCDSFCIEntry" }, +0x0294: { n:"BrtBeginListParts" }, +0x0295: { n:"BrtListPart" }, +0x0296: { n:"BrtEndListParts" }, +0x0297: { n:"BrtSheetCalcProp" }, +0x0298: { n:"BrtBeginFnGroup" }, +0x0299: { n:"BrtFnGroup" }, +0x029A: { n:"BrtEndFnGroup" }, +0x029B: { n:"BrtSupAddin" }, +0x029C: { n:"BrtSXTDMPOrder" }, +0x029D: { n:"BrtCsProtection" }, +0x029F: { n:"BrtBeginWsSortMap" }, +0x02A0: { n:"BrtEndWsSortMap" }, +0x02A1: { n:"BrtBeginRRSort" }, +0x02A2: { n:"BrtEndRRSort" }, +0x02A3: { n:"BrtRRSortItem" }, +0x02A4: { n:"BrtFileSharingIso" }, +0x02A5: { n:"BrtBookProtectionIso" }, +0x02A6: { n:"BrtSheetProtectionIso" }, +0x02A7: { n:"BrtCsProtectionIso" }, +0x02A8: { n:"BrtRangeProtectionIso" }, +0x02A9: { n:"BrtDValList" }, +0x0400: { n:"BrtRwDescent" }, +0x0401: { n:"BrtKnownFonts" }, +0x0402: { n:"BrtBeginSXTupleSet" }, +0x0403: { n:"BrtEndSXTupleSet" }, +0x0404: { n:"BrtBeginSXTupleSetHeader" }, +0x0405: { n:"BrtEndSXTupleSetHeader" }, +0x0406: { n:"BrtSXTupleSetHeaderItem" }, +0x0407: { n:"BrtBeginSXTupleSetData" }, +0x0408: { n:"BrtEndSXTupleSetData" }, +0x0409: { n:"BrtBeginSXTupleSetRow" }, +0x040A: { n:"BrtEndSXTupleSetRow" }, +0x040B: { n:"BrtSXTupleSetRowItem" }, +0x040C: { n:"BrtNameExt" }, +0x040D: { n:"BrtPCDH14" }, +0x040E: { n:"BrtBeginPCDCalcMem14" }, +0x040F: { n:"BrtEndPCDCalcMem14" }, +0x0410: { n:"BrtSXTH14" }, +0x0411: { n:"BrtBeginSparklineGroup" }, +0x0412: { n:"BrtEndSparklineGroup" }, +0x0413: { n:"BrtSparkline" }, +0x0414: { n:"BrtSXDI14" }, +0x0415: { n:"BrtWsFmtInfoEx14" }, +0x0416: { n:"BrtBeginConditionalFormatting14" }, +0x0417: { n:"BrtEndConditionalFormatting14" }, +0x0418: { n:"BrtBeginCFRule14" }, +0x0419: { n:"BrtEndCFRule14" }, +0x041A: { n:"BrtCFVO14" }, +0x041B: { n:"BrtBeginDatabar14" }, +0x041C: { n:"BrtBeginIconSet14" }, +0x041D: { n:"BrtDVal14", f: parse_BrtDVal14 }, +0x041E: { n:"BrtBeginDVals14" }, +0x041F: { n:"BrtColor14" }, +0x0420: { n:"BrtBeginSparklines" }, +0x0421: { n:"BrtEndSparklines" }, +0x0422: { n:"BrtBeginSparklineGroups" }, +0x0423: { n:"BrtEndSparklineGroups" }, +0x0425: { n:"BrtSXVD14" }, +0x0426: { n:"BrtBeginSXView14" }, +0x0427: { n:"BrtEndSXView14" }, +0x0428: { n:"BrtBeginSXView16" }, +0x0429: { n:"BrtEndSXView16" }, +0x042A: { n:"BrtBeginPCD14" }, +0x042B: { n:"BrtEndPCD14" }, +0x042C: { n:"BrtBeginExtConn14" }, +0x042D: { n:"BrtEndExtConn14" }, +0x042E: { n:"BrtBeginSlicerCacheIDs" }, +0x042F: { n:"BrtEndSlicerCacheIDs" }, +0x0430: { n:"BrtBeginSlicerCacheID" }, +0x0431: { n:"BrtEndSlicerCacheID" }, +0x0433: { n:"BrtBeginSlicerCache" }, +0x0434: { n:"BrtEndSlicerCache" }, +0x0435: { n:"BrtBeginSlicerCacheDef" }, +0x0436: { n:"BrtEndSlicerCacheDef" }, +0x0437: { n:"BrtBeginSlicersEx" }, +0x0438: { n:"BrtEndSlicersEx" }, +0x0439: { n:"BrtBeginSlicerEx" }, +0x043A: { n:"BrtEndSlicerEx" }, +0x043B: { n:"BrtBeginSlicer" }, +0x043C: { n:"BrtEndSlicer" }, +0x043D: { n:"BrtSlicerCachePivotTables" }, +0x043E: { n:"BrtBeginSlicerCacheOlapImpl" }, +0x043F: { n:"BrtEndSlicerCacheOlapImpl" }, +0x0440: { n:"BrtBeginSlicerCacheLevelsData" }, +0x0441: { n:"BrtEndSlicerCacheLevelsData" }, +0x0442: { n:"BrtBeginSlicerCacheLevelData" }, +0x0443: { n:"BrtEndSlicerCacheLevelData" }, +0x0444: { n:"BrtBeginSlicerCacheSiRanges" }, +0x0445: { n:"BrtEndSlicerCacheSiRanges" }, +0x0446: { n:"BrtBeginSlicerCacheSiRange" }, +0x0447: { n:"BrtEndSlicerCacheSiRange" }, +0x0448: { n:"BrtSlicerCacheOlapItem" }, +0x0449: { n:"BrtBeginSlicerCacheSelections" }, +0x044A: { n:"BrtSlicerCacheSelection" }, +0x044B: { n:"BrtEndSlicerCacheSelections" }, +0x044C: { n:"BrtBeginSlicerCacheNative" }, +0x044D: { n:"BrtEndSlicerCacheNative" }, +0x044E: { n:"BrtSlicerCacheNativeItem" }, +0x044F: { n:"BrtRangeProtection14" }, +0x0450: { n:"BrtRangeProtectionIso14" }, +0x0451: { n:"BrtCellIgnoreEC14" }, +0x0457: { n:"BrtList14" }, +0x0458: { n:"BrtCFIcon" }, +0x0459: { n:"BrtBeginSlicerCachesPivotCacheIDs" }, +0x045A: { n:"BrtEndSlicerCachesPivotCacheIDs" }, +0x045B: { n:"BrtBeginSlicers" }, +0x045C: { n:"BrtEndSlicers" }, +0x045D: { n:"BrtWbProp14" }, +0x045E: { n:"BrtBeginSXEdit" }, +0x045F: { n:"BrtEndSXEdit" }, +0x0460: { n:"BrtBeginSXEdits" }, +0x0461: { n:"BrtEndSXEdits" }, +0x0462: { n:"BrtBeginSXChange" }, +0x0463: { n:"BrtEndSXChange" }, +0x0464: { n:"BrtBeginSXChanges" }, +0x0465: { n:"BrtEndSXChanges" }, +0x0466: { n:"BrtSXTupleItems" }, +0x0468: { n:"BrtBeginSlicerStyle" }, +0x0469: { n:"BrtEndSlicerStyle" }, +0x046A: { n:"BrtSlicerStyleElement" }, +0x046B: { n:"BrtBeginStyleSheetExt14" }, +0x046C: { n:"BrtEndStyleSheetExt14" }, +0x046D: { n:"BrtBeginSlicerCachesPivotCacheID" }, +0x046E: { n:"BrtEndSlicerCachesPivotCacheID" }, +0x046F: { n:"BrtBeginConditionalFormattings" }, +0x0470: { n:"BrtEndConditionalFormattings" }, +0x0471: { n:"BrtBeginPCDCalcMemExt" }, +0x0472: { n:"BrtEndPCDCalcMemExt" }, +0x0473: { n:"BrtBeginPCDCalcMemsExt" }, +0x0474: { n:"BrtEndPCDCalcMemsExt" }, +0x0475: { n:"BrtPCDField14" }, +0x0476: { n:"BrtBeginSlicerStyles" }, +0x0477: { n:"BrtEndSlicerStyles" }, +0x0478: { n:"BrtBeginSlicerStyleElements" }, +0x0479: { n:"BrtEndSlicerStyleElements" }, +0x047A: { n:"BrtCFRuleExt" }, +0x047B: { n:"BrtBeginSXCondFmt14" }, +0x047C: { n:"BrtEndSXCondFmt14" }, +0x047D: { n:"BrtBeginSXCondFmts14" }, +0x047E: { n:"BrtEndSXCondFmts14" }, +0x0480: { n:"BrtBeginSortCond14" }, +0x0481: { n:"BrtEndSortCond14" }, +0x0482: { n:"BrtEndDVals14" }, +0x0483: { n:"BrtEndIconSet14" }, +0x0484: { n:"BrtEndDatabar14" }, +0x0485: { n:"BrtBeginColorScale14" }, +0x0486: { n:"BrtEndColorScale14" }, +0x0487: { n:"BrtBeginSxrules14" }, +0x0488: { n:"BrtEndSxrules14" }, +0x0489: { n:"BrtBeginPRule14" }, +0x048A: { n:"BrtEndPRule14" }, +0x048B: { n:"BrtBeginPRFilters14" }, +0x048C: { n:"BrtEndPRFilters14" }, +0x048D: { n:"BrtBeginPRFilter14" }, +0x048E: { n:"BrtEndPRFilter14" }, +0x048F: { n:"BrtBeginPRFItem14" }, +0x0490: { n:"BrtEndPRFItem14" }, +0x0491: { n:"BrtBeginCellIgnoreECs14" }, +0x0492: { n:"BrtEndCellIgnoreECs14" }, +0x0493: { n:"BrtDxf14" }, +0x0494: { n:"BrtBeginDxF14s" }, +0x0495: { n:"BrtEndDxf14s" }, +0x0499: { n:"BrtFilter14" }, +0x049A: { n:"BrtBeginCustomFilters14" }, +0x049C: { n:"BrtCustomFilter14" }, +0x049D: { n:"BrtIconFilter14" }, +0x049E: { n:"BrtPivotCacheConnectionName" }, +0x0800: { n:"BrtBeginDecoupledPivotCacheIDs" }, +0x0801: { n:"BrtEndDecoupledPivotCacheIDs" }, +0x0802: { n:"BrtDecoupledPivotCacheID" }, +0x0803: { n:"BrtBeginPivotTableRefs" }, +0x0804: { n:"BrtEndPivotTableRefs" }, +0x0805: { n:"BrtPivotTableRef" }, +0x0806: { n:"BrtSlicerCacheBookPivotTables" }, +0x0807: { n:"BrtBeginSxvcells" }, +0x0808: { n:"BrtEndSxvcells" }, +0x0809: { n:"BrtBeginSxRow" }, +0x080A: { n:"BrtEndSxRow" }, +0x080C: { n:"BrtPcdCalcMem15" }, +0x0813: { n:"BrtQsi15" }, +0x0814: { n:"BrtBeginWebExtensions" }, +0x0815: { n:"BrtEndWebExtensions" }, +0x0816: { n:"BrtWebExtension" }, +0x0817: { n:"BrtAbsPath15" }, +0x0818: { n:"BrtBeginPivotTableUISettings" }, +0x0819: { n:"BrtEndPivotTableUISettings" }, +0x081B: { n:"BrtTableSlicerCacheIDs" }, +0x081C: { n:"BrtTableSlicerCacheID" }, +0x081D: { n:"BrtBeginTableSlicerCache" }, +0x081E: { n:"BrtEndTableSlicerCache" }, +0x081F: { n:"BrtSxFilter15" }, +0x0820: { n:"BrtBeginTimelineCachePivotCacheIDs" }, +0x0821: { n:"BrtEndTimelineCachePivotCacheIDs" }, +0x0822: { n:"BrtTimelineCachePivotCacheID" }, +0x0823: { n:"BrtBeginTimelineCacheIDs" }, +0x0824: { n:"BrtEndTimelineCacheIDs" }, +0x0825: { n:"BrtBeginTimelineCacheID" }, +0x0826: { n:"BrtEndTimelineCacheID" }, +0x0827: { n:"BrtBeginTimelinesEx" }, +0x0828: { n:"BrtEndTimelinesEx" }, +0x0829: { n:"BrtBeginTimelineEx" }, +0x082A: { n:"BrtEndTimelineEx" }, +0x082B: { n:"BrtWorkBookPr15" }, +0x082C: { n:"BrtPCDH15" }, +0x082D: { n:"BrtBeginTimelineStyle" }, +0x082E: { n:"BrtEndTimelineStyle" }, +0x082F: { n:"BrtTimelineStyleElement" }, +0x0830: { n:"BrtBeginTimelineStylesheetExt15" }, +0x0831: { n:"BrtEndTimelineStylesheetExt15" }, +0x0832: { n:"BrtBeginTimelineStyles" }, +0x0833: { n:"BrtEndTimelineStyles" }, +0x0834: { n:"BrtBeginTimelineStyleElements" }, +0x0835: { n:"BrtEndTimelineStyleElements" }, +0x0836: { n:"BrtDxf15" }, +0x0837: { n:"BrtBeginDxfs15" }, +0x0838: { n:"brtEndDxfs15" }, +0x0839: { n:"BrtSlicerCacheHideItemsWithNoData" }, +0x083A: { n:"BrtBeginItemUniqueNames" }, +0x083B: { n:"BrtEndItemUniqueNames" }, +0x083C: { n:"BrtItemUniqueName" }, +0x083D: { n:"BrtBeginExtConn15" }, +0x083E: { n:"BrtEndExtConn15" }, +0x083F: { n:"BrtBeginOledbPr15" }, +0x0840: { n:"BrtEndOledbPr15" }, +0x0841: { n:"BrtBeginDataFeedPr15" }, +0x0842: { n:"BrtEndDataFeedPr15" }, +0x0843: { n:"BrtTextPr15" }, +0x0844: { n:"BrtRangePr15" }, +0x0845: { n:"BrtDbCommand15" }, +0x0846: { n:"BrtBeginDbTables15" }, +0x0847: { n:"BrtEndDbTables15" }, +0x0848: { n:"BrtDbTable15" }, +0x0849: { n:"BrtBeginDataModel" }, +0x084A: { n:"BrtEndDataModel" }, +0x084B: { n:"BrtBeginModelTables" }, +0x084C: { n:"BrtEndModelTables" }, +0x084D: { n:"BrtModelTable" }, +0x084E: { n:"BrtBeginModelRelationships" }, +0x084F: { n:"BrtEndModelRelationships" }, +0x0850: { n:"BrtModelRelationship" }, +0x0851: { n:"BrtBeginECTxtWiz15" }, +0x0852: { n:"BrtEndECTxtWiz15" }, +0x0853: { n:"BrtBeginECTWFldInfoLst15" }, +0x0854: { n:"BrtEndECTWFldInfoLst15" }, +0x0855: { n:"BrtBeginECTWFldInfo15" }, +0x0856: { n:"BrtFieldListActiveItem" }, +0x0857: { n:"BrtPivotCacheIdVersion" }, +0x0858: { n:"BrtSXDI15" }, +0x0859: { n:"BrtBeginModelTimeGroupings" }, +0x085A: { n:"BrtEndModelTimeGroupings" }, +0x085B: { n:"BrtBeginModelTimeGrouping" }, +0x085C: { n:"BrtEndModelTimeGrouping" }, +0x085D: { n:"BrtModelTimeGroupingCalcCol" }, +0x0C00: { n:"BrtUid" }, +0x0C01: { n:"BrtRevisionPtr" }, +0x13e7: { n:"BrtBeginCalcFeatures" }, +0x13e8: { n:"BrtEndCalcFeatures" }, +0x13e9: { n:"BrtCalcFeature" }, +0xFFFF: { n:"" } }; -var evert_RE = evert_key(XLSBRecordEnum, 'n'); +var XLSBRE = evert_key(XLSBRecordEnum, 'n'); +/*jshint -W069 */ +XLSBRE["BrtFRTArchID$"] = 0x0010; +/*jshint +W069 */ -/* [MS-XLS] 2.3 Record Enumeration */ +/* [MS-XLS] 2.3 Record Enumeration (and other sources) */ var XLSRecordEnum = { -0x0003: { n:"BIFF2NUM", f:parse_BIFF2NUM }, -0x0004: { n:"BIFF2STR", f:parse_BIFF2STR }, + /* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */ 0x0006: { n:"Formula", f:parse_Formula }, -0x0009: { n:'BOF', f:parse_BOF }, -0x000a: { n:'EOF', f:parse_EOF }, -0x000c: { n:"CalcCount", f:parse_CalcCount }, -0x000d: { n:"CalcMode", f:parse_CalcMode }, -0x000e: { n:"CalcPrecision", f:parse_CalcPrecision }, -0x000f: { n:"CalcRefMode", f:parse_CalcRefMode }, -0x0010: { n:"CalcDelta", f:parse_CalcDelta }, -0x0011: { n:"CalcIter", f:parse_CalcIter }, -0x0012: { n:"Protect", f:parse_Protect }, -0x0013: { n:"Password", f:parse_Password }, -0x0014: { n:"Header", f:parse_Header }, -0x0015: { n:"Footer", f:parse_Footer }, +0x000a: { n:'EOF', f:parsenoop2 }, +0x000c: { n:"CalcCount", f:parseuint16 }, +0x000d: { n:"CalcMode", f:parseuint16 }, +0x000e: { n:"CalcPrecision", f:parsebool }, +0x000f: { n:"CalcRefMode", f:parsebool }, +0x0010: { n:"CalcDelta", f:parse_Xnum }, +0x0011: { n:"CalcIter", f:parsebool }, +0x0012: { n:"Protect", f:parsebool }, +0x0013: { n:"Password", f:parseuint16 }, +0x0014: { n:"Header", f:parse_XLHeaderFooter }, +0x0015: { n:"Footer", f:parse_XLHeaderFooter }, 0x0017: { n:"ExternSheet", f:parse_ExternSheet }, 0x0018: { n:"Lbl", f:parse_Lbl }, -0x0019: { n:"WinProtect", f:parse_WinProtect }, -0x001a: { n:"VerticalPageBreaks", f:parse_VerticalPageBreaks }, -0x001b: { n:"HorizontalPageBreaks", f:parse_HorizontalPageBreaks }, +0x0019: { n:"WinProtect", f:parsebool }, +0x001a: { n:"VerticalPageBreaks" }, +0x001b: { n:"HorizontalPageBreaks" }, 0x001c: { n:"Note", f:parse_Note }, -0x001d: { n:"Selection", f:parse_Selection }, -0x0022: { n:"Date1904", f:parse_Date1904 }, +0x001d: { n:"Selection" }, +0x0022: { n:"Date1904", f:parsebool }, 0x0023: { n:"ExternName", f:parse_ExternName }, -0x0026: { n:"LeftMargin", f:parse_LeftMargin }, -0x0027: { n:"RightMargin", f:parse_RightMargin }, -0x0028: { n:"TopMargin", f:parse_TopMargin }, -0x0029: { n:"BottomMargin", f:parse_BottomMargin }, -0x002a: { n:"PrintRowCol", f:parse_PrintRowCol }, -0x002b: { n:"PrintGrid", f:parse_PrintGrid }, +0x0026: { n:"LeftMargin", f:parse_Xnum }, +0x0027: { n:"RightMargin", f:parse_Xnum }, +0x0028: { n:"TopMargin", f:parse_Xnum }, +0x0029: { n:"BottomMargin", f:parse_Xnum }, +0x002a: { n:"PrintRowCol", f:parsebool }, +0x002b: { n:"PrintGrid", f:parsebool }, 0x002f: { n:"FilePass", f:parse_FilePass }, 0x0031: { n:"Font", f:parse_Font }, -0x0033: { n:"PrintSize", f:parse_PrintSize }, -0x003c: { n:"Continue", f:parse_Continue }, +0x0033: { n:"PrintSize", f:parseuint16 }, +0x003c: { n:"Continue" }, 0x003d: { n:"Window1", f:parse_Window1 }, -0x0040: { n:"Backup", f:parse_Backup }, +0x0040: { n:"Backup", f:parsebool }, 0x0041: { n:"Pane", f:parse_Pane }, -0x0042: { n:'CodePage', f:parse_CodePage }, -0x004d: { n:"Pls", f:parse_Pls }, -0x0050: { n:"DCon", f:parse_DCon }, -0x0051: { n:"DConRef", f:parse_DConRef }, -0x0052: { n:"DConName", f:parse_DConName }, -0x0055: { n:"DefColWidth", f:parse_DefColWidth }, -0x0059: { n:"XCT", f:parse_XCT }, -0x005a: { n:"CRN", f:parse_CRN }, -0x005b: { n:"FileSharing", f:parse_FileSharing }, +0x0042: { n:'CodePage', f:parseuint16 }, +0x004d: { n:"Pls" }, +0x0050: { n:"DCon" }, +0x0051: { n:"DConRef" }, +0x0052: { n:"DConName" }, +0x0055: { n:"DefColWidth", f:parseuint16 }, +0x0059: { n:"XCT" }, +0x005a: { n:"CRN" }, +0x005b: { n:"FileSharing" }, 0x005c: { n:'WriteAccess', f:parse_WriteAccess }, 0x005d: { n:"Obj", f:parse_Obj }, -0x005e: { n:"Uncalced", f:parse_Uncalced }, -0x005f: { n:"CalcSaveRecalc", f:parse_CalcSaveRecalc }, -0x0060: { n:"Template", f:parse_Template }, -0x0061: { n:"Intl", f:parse_Intl }, -0x0063: { n:"ObjProtect", f:parse_ObjProtect }, +0x005e: { n:"Uncalced" }, +0x005f: { n:"CalcSaveRecalc", f:parsebool }, +0x0060: { n:"Template" }, +0x0061: { n:"Intl" }, +0x0063: { n:"ObjProtect", f:parsebool }, 0x007d: { n:"ColInfo", f:parse_ColInfo }, 0x0080: { n:"Guts", f:parse_Guts }, 0x0081: { n:"WsBool", f:parse_WsBool }, -0x0082: { n:"GridSet", f:parse_GridSet }, -0x0083: { n:"HCenter", f:parse_HCenter }, -0x0084: { n:"VCenter", f:parse_VCenter }, +0x0082: { n:"GridSet", f:parseuint16 }, +0x0083: { n:"HCenter", f:parsebool }, +0x0084: { n:"VCenter", f:parsebool }, 0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 }, -0x0086: { n:"WriteProtect", f:parse_WriteProtect }, +0x0086: { n:"WriteProtect" }, 0x008c: { n:"Country", f:parse_Country }, -0x008d: { n:"HideObj", f:parse_HideObj }, -0x0090: { n:"Sort", f:parse_Sort }, +0x008d: { n:"HideObj", f:parseuint16 }, +0x0090: { n:"Sort" }, 0x0092: { n:"Palette", f:parse_Palette }, -0x0097: { n:"Sync", f:parse_Sync }, -0x0098: { n:"LPr", f:parse_LPr }, -0x0099: { n:"DxGCol", f:parse_DxGCol }, -0x009a: { n:"FnGroupName", f:parse_FnGroupName }, -0x009b: { n:"FilterMode", f:parse_FilterMode }, -0x009c: { n:"BuiltInFnGroupCount", f:parse_BuiltInFnGroupCount }, -0x009d: { n:"AutoFilterInfo", f:parse_AutoFilterInfo }, -0x009e: { n:"AutoFilter", f:parse_AutoFilter }, +0x0097: { n:"Sync" }, +0x0098: { n:"LPr" }, +0x0099: { n:"DxGCol" }, +0x009a: { n:"FnGroupName" }, +0x009b: { n:"FilterMode" }, +0x009c: { n:"BuiltInFnGroupCount", f:parseuint16 }, +0x009d: { n:"AutoFilterInfo" }, +0x009e: { n:"AutoFilter" }, 0x00a0: { n:"Scl", f:parse_Scl }, 0x00a1: { n:"Setup", f:parse_Setup }, -0x00ae: { n:"ScenMan", f:parse_ScenMan }, -0x00af: { n:"SCENARIO", f:parse_SCENARIO }, -0x00b0: { n:"SxView", f:parse_SxView }, -0x00b1: { n:"Sxvd", f:parse_Sxvd }, -0x00b2: { n:"SXVI", f:parse_SXVI }, -0x00b4: { n:"SxIvd", f:parse_SxIvd }, -0x00b5: { n:"SXLI", f:parse_SXLI }, -0x00b6: { n:"SXPI", f:parse_SXPI }, -0x00b8: { n:"DocRoute", f:parse_DocRoute }, -0x00b9: { n:"RecipName", f:parse_RecipName }, +0x00ae: { n:"ScenMan" }, +0x00af: { n:"SCENARIO" }, +0x00b0: { n:"SxView" }, +0x00b1: { n:"Sxvd" }, +0x00b2: { n:"SXVI" }, +0x00b4: { n:"SxIvd" }, +0x00b5: { n:"SXLI" }, +0x00b6: { n:"SXPI" }, +0x00b8: { n:"DocRoute" }, +0x00b9: { n:"RecipName" }, 0x00bd: { n:"MulRk", f:parse_MulRk }, 0x00be: { n:"MulBlank", f:parse_MulBlank }, -0x00c1: { n:'Mms', f:parse_Mms }, -0x00c5: { n:"SXDI", f:parse_SXDI }, -0x00c6: { n:"SXDB", f:parse_SXDB }, -0x00c7: { n:"SXFDB", f:parse_SXFDB }, -0x00c8: { n:"SXDBB", f:parse_SXDBB }, -0x00c9: { n:"SXNum", f:parse_SXNum }, -0x00ca: { n:"SxBool", f:parse_SxBool }, -0x00cb: { n:"SxErr", f:parse_SxErr }, -0x00cc: { n:"SXInt", f:parse_SXInt }, -0x00cd: { n:"SXString", f:parse_SXString }, -0x00ce: { n:"SXDtr", f:parse_SXDtr }, -0x00cf: { n:"SxNil", f:parse_SxNil }, -0x00d0: { n:"SXTbl", f:parse_SXTbl }, -0x00d1: { n:"SXTBRGIITM", f:parse_SXTBRGIITM }, -0x00d2: { n:"SxTbpg", f:parse_SxTbpg }, -0x00d3: { n:"ObProj", f:parse_ObProj }, -0x00d5: { n:"SXStreamID", f:parse_SXStreamID }, -0x00d7: { n:"DBCell", f:parse_DBCell }, -0x00d8: { n:"SXRng", f:parse_SXRng }, -0x00d9: { n:"SxIsxoper", f:parse_SxIsxoper }, -0x00da: { n:"BookBool", f:parse_BookBool }, -0x00dc: { n:"DbOrParamQry", f:parse_DbOrParamQry }, -0x00dd: { n:"ScenarioProtect", f:parse_ScenarioProtect }, -0x00de: { n:"OleObjectSize", f:parse_OleObjectSize }, +0x00c1: { n:'Mms', f:parsenoop2 }, +0x00c5: { n:"SXDI" }, +0x00c6: { n:"SXDB" }, +0x00c7: { n:"SXFDB" }, +0x00c8: { n:"SXDBB" }, +0x00c9: { n:"SXNum" }, +0x00ca: { n:"SxBool", f:parsebool }, +0x00cb: { n:"SxErr" }, +0x00cc: { n:"SXInt" }, +0x00cd: { n:"SXString" }, +0x00ce: { n:"SXDtr" }, +0x00cf: { n:"SxNil" }, +0x00d0: { n:"SXTbl" }, +0x00d1: { n:"SXTBRGIITM" }, +0x00d2: { n:"SxTbpg" }, +0x00d3: { n:"ObProj" }, +0x00d5: { n:"SXStreamID" }, +0x00d7: { n:"DBCell" }, +0x00d8: { n:"SXRng" }, +0x00d9: { n:"SxIsxoper" }, +0x00da: { n:"BookBool", f:parseuint16 }, +0x00dc: { n:"DbOrParamQry" }, +0x00dd: { n:"ScenarioProtect", f:parsebool }, +0x00de: { n:"OleObjectSize" }, 0x00e0: { n:"XF", f:parse_XF }, 0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr }, -0x00e2: { n:'InterfaceEnd', f:parse_InterfaceEnd }, -0x00e3: { n:"SXVS", f:parse_SXVS }, +0x00e2: { n:'InterfaceEnd', f:parsenoop2 }, +0x00e3: { n:"SXVS" }, 0x00e5: { n:"MergeCells", f:parse_MergeCells }, -0x00e9: { n:"BkHim", f:parse_BkHim }, -0x00eb: { n:"MsoDrawingGroup", f:parse_MsoDrawingGroup }, -0x00ec: { n:"MsoDrawing", f:parse_MsoDrawing }, -0x00ed: { n:"MsoDrawingSelection", f:parse_MsoDrawingSelection }, -0x00ef: { n:"PhoneticInfo", f:parse_PhoneticInfo }, -0x00f0: { n:"SxRule", f:parse_SxRule }, -0x00f1: { n:"SXEx", f:parse_SXEx }, -0x00f2: { n:"SxFilt", f:parse_SxFilt }, -0x00f4: { n:"SxDXF", f:parse_SxDXF }, -0x00f5: { n:"SxItm", f:parse_SxItm }, -0x00f6: { n:"SxName", f:parse_SxName }, -0x00f7: { n:"SxSelect", f:parse_SxSelect }, -0x00f8: { n:"SXPair", f:parse_SXPair }, -0x00f9: { n:"SxFmla", f:parse_SxFmla }, -0x00fb: { n:"SxFormat", f:parse_SxFormat }, +0x00e9: { n:"BkHim" }, +0x00eb: { n:"MsoDrawingGroup" }, +0x00ec: { n:"MsoDrawing" }, +0x00ed: { n:"MsoDrawingSelection" }, +0x00ef: { n:"PhoneticInfo" }, +0x00f0: { n:"SxRule" }, +0x00f1: { n:"SXEx" }, +0x00f2: { n:"SxFilt" }, +0x00f4: { n:"SxDXF" }, +0x00f5: { n:"SxItm" }, +0x00f6: { n:"SxName" }, +0x00f7: { n:"SxSelect" }, +0x00f8: { n:"SXPair" }, +0x00f9: { n:"SxFmla" }, +0x00fb: { n:"SxFormat" }, 0x00fc: { n:"SST", f:parse_SST }, 0x00fd: { n:"LabelSst", f:parse_LabelSst }, 0x00ff: { n:"ExtSST", f:parse_ExtSST }, -0x0100: { n:"SXVDEx", f:parse_SXVDEx }, -0x0103: { n:"SXFormula", f:parse_SXFormula }, -0x0122: { n:"SXDBEx", f:parse_SXDBEx }, -0x0137: { n:"RRDInsDel", f:parse_RRDInsDel }, -0x0138: { n:"RRDHead", f:parse_RRDHead }, -0x013b: { n:"RRDChgCell", f:parse_RRDChgCell }, -0x013d: { n:"RRTabId", f:parse_RRTabId }, -0x013e: { n:"RRDRenSheet", f:parse_RRDRenSheet }, -0x013f: { n:"RRSort", f:parse_RRSort }, -0x0140: { n:"RRDMove", f:parse_RRDMove }, -0x014a: { n:"RRFormat", f:parse_RRFormat }, -0x014b: { n:"RRAutoFmt", f:parse_RRAutoFmt }, -0x014d: { n:"RRInsertSh", f:parse_RRInsertSh }, -0x014e: { n:"RRDMoveBegin", f:parse_RRDMoveBegin }, -0x014f: { n:"RRDMoveEnd", f:parse_RRDMoveEnd }, -0x0150: { n:"RRDInsDelBegin", f:parse_RRDInsDelBegin }, -0x0151: { n:"RRDInsDelEnd", f:parse_RRDInsDelEnd }, -0x0152: { n:"RRDConflict", f:parse_RRDConflict }, -0x0153: { n:"RRDDefName", f:parse_RRDDefName }, -0x0154: { n:"RRDRstEtxp", f:parse_RRDRstEtxp }, -0x015f: { n:"LRng", f:parse_LRng }, -0x0160: { n:"UsesELFs", f:parse_UsesELFs }, -0x0161: { n:"DSF", f:parse_DSF }, -0x0191: { n:"CUsr", f:parse_CUsr }, -0x0192: { n:"CbUsr", f:parse_CbUsr }, -0x0193: { n:"UsrInfo", f:parse_UsrInfo }, -0x0194: { n:"UsrExcl", f:parse_UsrExcl }, -0x0195: { n:"FileLock", f:parse_FileLock }, -0x0196: { n:"RRDInfo", f:parse_RRDInfo }, -0x0197: { n:"BCUsrs", f:parse_BCUsrs }, -0x0198: { n:"UsrChk", f:parse_UsrChk }, -0x01a9: { n:"UserBView", f:parse_UserBView }, -0x01aa: { n:"UserSViewBegin", f:parse_UserSViewBegin }, -0x01ab: { n:"UserSViewEnd", f:parse_UserSViewEnd }, -0x01ac: { n:"RRDUserView", f:parse_RRDUserView }, -0x01ad: { n:"Qsi", f:parse_Qsi }, +0x0100: { n:"SXVDEx" }, +0x0103: { n:"SXFormula" }, +0x0122: { n:"SXDBEx" }, +0x0137: { n:"RRDInsDel" }, +0x0138: { n:"RRDHead" }, +0x013b: { n:"RRDChgCell" }, +0x013d: { n:"RRTabId", f:parseuint16a }, +0x013e: { n:"RRDRenSheet" }, +0x013f: { n:"RRSort" }, +0x0140: { n:"RRDMove" }, +0x014a: { n:"RRFormat" }, +0x014b: { n:"RRAutoFmt" }, +0x014d: { n:"RRInsertSh" }, +0x014e: { n:"RRDMoveBegin" }, +0x014f: { n:"RRDMoveEnd" }, +0x0150: { n:"RRDInsDelBegin" }, +0x0151: { n:"RRDInsDelEnd" }, +0x0152: { n:"RRDConflict" }, +0x0153: { n:"RRDDefName" }, +0x0154: { n:"RRDRstEtxp" }, +0x015f: { n:"LRng" }, +0x0160: { n:"UsesELFs", f:parsebool }, +0x0161: { n:"DSF", f:parsenoop2 }, +0x0191: { n:"CUsr" }, +0x0192: { n:"CbUsr" }, +0x0193: { n:"UsrInfo" }, +0x0194: { n:"UsrExcl" }, +0x0195: { n:"FileLock" }, +0x0196: { n:"RRDInfo" }, +0x0197: { n:"BCUsrs" }, +0x0198: { n:"UsrChk" }, +0x01a9: { n:"UserBView" }, +0x01aa: { n:"UserSViewBegin" }, +0x01ab: { n:"UserSViewEnd" }, +0x01ac: { n:"RRDUserView" }, +0x01ad: { n:"Qsi" }, 0x01ae: { n:"SupBook", f:parse_SupBook }, -0x01af: { n:"Prot4Rev", f:parse_Prot4Rev }, -0x01b0: { n:"CondFmt", f:parse_CondFmt }, -0x01b1: { n:"CF", f:parse_CF }, -0x01b2: { n:"DVal", f:parse_DVal }, -0x01b5: { n:"DConBin", f:parse_DConBin }, +0x01af: { n:"Prot4Rev", f:parsebool }, +0x01b0: { n:"CondFmt" }, +0x01b1: { n:"CF" }, +0x01b2: { n:"DVal" }, +0x01b5: { n:"DConBin" }, 0x01b6: { n:"TxO", f:parse_TxO }, -0x01b7: { n:"RefreshAll", f:parse_RefreshAll }, +0x01b7: { n:"RefreshAll", f:parsebool }, 0x01b8: { n:"HLink", f:parse_HLink }, -0x01b9: { n:"Lel", f:parse_Lel }, -0x01ba: { n:"CodeName", f:parse_XLSCodeName }, -0x01bb: { n:"SXFDBType", f:parse_SXFDBType }, -0x01bc: { n:"Prot4RevPass", f:parse_Prot4RevPass }, -0x01bd: { n:"ObNoMacros", f:parse_ObNoMacros }, -0x01be: { n:"Dv", f:parse_Dv }, -0x01c0: { n:"Excel9File", f:parse_Excel9File }, +0x01b9: { n:"Lel" }, +0x01ba: { n:"CodeName", f:parse_XLUnicodeString }, +0x01bb: { n:"SXFDBType" }, +0x01bc: { n:"Prot4RevPass", f:parseuint16 }, +0x01bd: { n:"ObNoMacros" }, +0x01be: { n:"Dv" }, +0x01c0: { n:"Excel9File", f:parsenoop2 }, 0x01c1: { n:"RecalcId", f:parse_RecalcId, r:2}, -0x01c2: { n:"EntExU2", f:parse_EntExU2 }, +0x01c2: { n:"EntExU2", f:parsenoop2 }, 0x0200: { n:"Dimensions", f:parse_Dimensions }, 0x0201: { n:"Blank", f:parse_Blank }, 0x0203: { n:"Number", f:parse_Number }, 0x0204: { n:"Label", f:parse_Label }, 0x0205: { n:"BoolErr", f:parse_BoolErr }, -0x0206: { n:"Formula", f:parse_Formula }, 0x0207: { n:"String", f:parse_String }, 0x0208: { n:'Row', f:parse_Row }, -0x020b: { n:"Index", f:parse_Index }, +0x020b: { n:"Index" }, 0x0221: { n:"Array", f:parse_Array }, 0x0225: { n:"DefaultRowHeight", f:parse_DefaultRowHeight }, -0x0236: { n:"Table", f:parse_Table }, +0x0236: { n:"Table" }, 0x023e: { n:"Window2", f:parse_Window2 }, 0x027e: { n:"RK", f:parse_RK }, -0x0293: { n:"Style", f:parse_Style }, -0x0406: { n:"Formula", f:parse_Formula }, -0x0418: { n:"BigName", f:parse_BigName }, +0x0293: { n:"Style" }, +0x0418: { n:"BigName" }, 0x041e: { n:"Format", f:parse_Format }, -0x043c: { n:"ContinueBigName", f:parse_ContinueBigName }, +0x043c: { n:"ContinueBigName" }, 0x04bc: { n:"ShrFmla", f:parse_ShrFmla }, 0x0800: { n:"HLinkTooltip", f:parse_HLinkTooltip }, -0x0801: { n:"WebPub", f:parse_WebPub }, -0x0802: { n:"QsiSXTag", f:parse_QsiSXTag }, -0x0803: { n:"DBQueryExt", f:parse_DBQueryExt }, -0x0804: { n:"ExtString", f:parse_ExtString }, -0x0805: { n:"TxtQry", f:parse_TxtQry }, -0x0806: { n:"Qsir", f:parse_Qsir }, -0x0807: { n:"Qsif", f:parse_Qsif }, -0x0808: { n:"RRDTQSIF", f:parse_RRDTQSIF }, +0x0801: { n:"WebPub" }, +0x0802: { n:"QsiSXTag" }, +0x0803: { n:"DBQueryExt" }, +0x0804: { n:"ExtString" }, +0x0805: { n:"TxtQry" }, +0x0806: { n:"Qsir" }, +0x0807: { n:"Qsif" }, +0x0808: { n:"RRDTQSIF" }, 0x0809: { n:'BOF', f:parse_BOF }, -0x080a: { n:"OleDbConn", f:parse_OleDbConn }, -0x080b: { n:"WOpt", f:parse_WOpt }, -0x080c: { n:"SXViewEx", f:parse_SXViewEx }, -0x080d: { n:"SXTH", f:parse_SXTH }, -0x080e: { n:"SXPIEx", f:parse_SXPIEx }, -0x080f: { n:"SXVDTEx", f:parse_SXVDTEx }, -0x0810: { n:"SXViewEx9", f:parse_SXViewEx9 }, -0x0812: { n:"ContinueFrt", f:parse_ContinueFrt }, -0x0813: { n:"RealTimeData", f:parse_RealTimeData }, -0x0850: { n:"ChartFrtInfo", f:parse_ChartFrtInfo }, -0x0851: { n:"FrtWrapper", f:parse_FrtWrapper }, -0x0852: { n:"StartBlock", f:parse_StartBlock }, -0x0853: { n:"EndBlock", f:parse_EndBlock }, -0x0854: { n:"StartObject", f:parse_StartObject }, -0x0855: { n:"EndObject", f:parse_EndObject }, -0x0856: { n:"CatLab", f:parse_CatLab }, -0x0857: { n:"YMult", f:parse_YMult }, -0x0858: { n:"SXViewLink", f:parse_SXViewLink }, -0x0859: { n:"PivotChartBits", f:parse_PivotChartBits }, -0x085a: { n:"FrtFontList", f:parse_FrtFontList }, -0x0862: { n:"SheetExt", f:parse_SheetExt }, -0x0863: { n:"BookExt", f:parse_BookExt, r:12}, -0x0864: { n:"SXAddl", f:parse_SXAddl }, -0x0865: { n:"CrErr", f:parse_CrErr }, -0x0866: { n:"HFPicture", f:parse_HFPicture }, -0x0867: { n:'FeatHdr', f:parse_FeatHdr }, -0x0868: { n:"Feat", f:parse_Feat }, -0x086a: { n:"DataLabExt", f:parse_DataLabExt }, -0x086b: { n:"DataLabExtContents", f:parse_DataLabExtContents }, -0x086c: { n:"CellWatch", f:parse_CellWatch }, -0x0871: { n:"FeatHdr11", f:parse_FeatHdr11 }, -0x0872: { n:"Feature11", f:parse_Feature11 }, -0x0874: { n:"DropDownObjIds", f:parse_DropDownObjIds }, -0x0875: { n:"ContinueFrt11", f:parse_ContinueFrt11 }, -0x0876: { n:"DConn", f:parse_DConn }, -0x0877: { n:"List12", f:parse_List12 }, -0x0878: { n:"Feature12", f:parse_Feature12 }, -0x0879: { n:"CondFmt12", f:parse_CondFmt12 }, -0x087a: { n:"CF12", f:parse_CF12 }, -0x087b: { n:"CFEx", f:parse_CFEx }, +0x080a: { n:"OleDbConn" }, +0x080b: { n:"WOpt" }, +0x080c: { n:"SXViewEx" }, +0x080d: { n:"SXTH" }, +0x080e: { n:"SXPIEx" }, +0x080f: { n:"SXVDTEx" }, +0x0810: { n:"SXViewEx9" }, +0x0812: { n:"ContinueFrt" }, +0x0813: { n:"RealTimeData" }, +0x0850: { n:"ChartFrtInfo" }, +0x0851: { n:"FrtWrapper" }, +0x0852: { n:"StartBlock" }, +0x0853: { n:"EndBlock" }, +0x0854: { n:"StartObject" }, +0x0855: { n:"EndObject" }, +0x0856: { n:"CatLab" }, +0x0857: { n:"YMult" }, +0x0858: { n:"SXViewLink" }, +0x0859: { n:"PivotChartBits" }, +0x085a: { n:"FrtFontList" }, +0x0862: { n:"SheetExt" }, +0x0863: { n:"BookExt", r:12}, +0x0864: { n:"SXAddl" }, +0x0865: { n:"CrErr" }, +0x0866: { n:"HFPicture" }, +0x0867: { n:'FeatHdr', f:parsenoop2 }, +0x0868: { n:"Feat" }, +0x086a: { n:"DataLabExt" }, +0x086b: { n:"DataLabExtContents" }, +0x086c: { n:"CellWatch" }, +0x0871: { n:"FeatHdr11" }, +0x0872: { n:"Feature11" }, +0x0874: { n:"DropDownObjIds" }, +0x0875: { n:"ContinueFrt11" }, +0x0876: { n:"DConn" }, +0x0877: { n:"List12" }, +0x0878: { n:"Feature12" }, +0x0879: { n:"CondFmt12" }, +0x087a: { n:"CF12" }, +0x087b: { n:"CFEx" }, 0x087c: { n:"XFCRC", f:parse_XFCRC, r:12 }, 0x087d: { n:"XFExt", f:parse_XFExt, r:12 }, -0x087e: { n:"AutoFilter12", f:parse_AutoFilter12 }, -0x087f: { n:"ContinueFrt12", f:parse_ContinueFrt12 }, -0x0884: { n:"MDTInfo", f:parse_MDTInfo }, -0x0885: { n:"MDXStr", f:parse_MDXStr }, -0x0886: { n:"MDXTuple", f:parse_MDXTuple }, -0x0887: { n:"MDXSet", f:parse_MDXSet }, -0x0888: { n:"MDXProp", f:parse_MDXProp }, -0x0889: { n:"MDXKPI", f:parse_MDXKPI }, -0x088a: { n:"MDB", f:parse_MDB }, -0x088b: { n:"PLV", f:parse_PLV }, -0x088c: { n:"Compat12", f:parse_Compat12, r:12 }, -0x088d: { n:"DXF", f:parse_DXF }, -0x088e: { n:"TableStyles", f:parse_TableStyles, r:12 }, -0x088f: { n:"TableStyle", f:parse_TableStyle }, -0x0890: { n:"TableStyleElement", f:parse_TableStyleElement }, -0x0892: { n:"StyleExt", f:parse_StyleExt }, -0x0893: { n:"NamePublish", f:parse_NamePublish }, +0x087e: { n:"AutoFilter12" }, +0x087f: { n:"ContinueFrt12" }, +0x0884: { n:"MDTInfo" }, +0x0885: { n:"MDXStr" }, +0x0886: { n:"MDXTuple" }, +0x0887: { n:"MDXSet" }, +0x0888: { n:"MDXProp" }, +0x0889: { n:"MDXKPI" }, +0x088a: { n:"MDB" }, +0x088b: { n:"PLV" }, +0x088c: { n:"Compat12", f:parsebool, r:12 }, +0x088d: { n:"DXF" }, +0x088e: { n:"TableStyles", r:12 }, +0x088f: { n:"TableStyle" }, +0x0890: { n:"TableStyleElement" }, +0x0892: { n:"StyleExt" }, +0x0893: { n:"NamePublish" }, 0x0894: { n:"NameCmt", f:parse_NameCmt, r:12 }, -0x0895: { n:"SortData", f:parse_SortData }, +0x0895: { n:"SortData" }, 0x0896: { n:"Theme", f:parse_Theme, r:12 }, -0x0897: { n:"GUIDTypeLib", f:parse_GUIDTypeLib }, -0x0898: { n:"FnGrp12", f:parse_FnGrp12 }, -0x0899: { n:"NameFnGrp12", f:parse_NameFnGrp12 }, +0x0897: { n:"GUIDTypeLib" }, +0x0898: { n:"FnGrp12" }, +0x0899: { n:"NameFnGrp12" }, 0x089a: { n:"MTRSettings", f:parse_MTRSettings, r:12 }, -0x089b: { n:"CompressPictures", f:parse_CompressPictures }, -0x089c: { n:"HeaderFooter", f:parse_HeaderFooter }, -0x089d: { n:"CrtLayout12", f:parse_CrtLayout12 }, -0x089e: { n:"CrtMlFrt", f:parse_CrtMlFrt }, -0x089f: { n:"CrtMlFrtContinue", f:parse_CrtMlFrtContinue }, +0x089b: { n:"CompressPictures", f:parsenoop2 }, +0x089c: { n:"HeaderFooter" }, +0x089d: { n:"CrtLayout12" }, +0x089e: { n:"CrtMlFrt" }, +0x089f: { n:"CrtMlFrtContinue" }, 0x08a3: { n:"ForceFullCalculation", f:parse_ForceFullCalculation }, -0x08a4: { n:"ShapePropsStream", f:parse_ShapePropsStream }, -0x08a5: { n:"TextPropsStream", f:parse_TextPropsStream }, -0x08a6: { n:"RichTextStream", f:parse_RichTextStream }, -0x08a7: { n:"CrtLayout12A", f:parse_CrtLayout12A }, -0x1001: { n:"Units", f:parse_Units }, -0x1002: { n:"Chart", f:parse_Chart }, -0x1003: { n:"Series", f:parse_Series }, -0x1006: { n:"DataFormat", f:parse_DataFormat }, -0x1007: { n:"LineFormat", f:parse_LineFormat }, -0x1009: { n:"MarkerFormat", f:parse_MarkerFormat }, -0x100a: { n:"AreaFormat", f:parse_AreaFormat }, -0x100b: { n:"PieFormat", f:parse_PieFormat }, -0x100c: { n:"AttachedLabel", f:parse_AttachedLabel }, -0x100d: { n:"SeriesText", f:parse_SeriesText }, -0x1014: { n:"ChartFormat", f:parse_ChartFormat }, -0x1015: { n:"Legend", f:parse_Legend }, -0x1016: { n:"SeriesList", f:parse_SeriesList }, -0x1017: { n:"Bar", f:parse_Bar }, -0x1018: { n:"Line", f:parse_Line }, -0x1019: { n:"Pie", f:parse_Pie }, -0x101a: { n:"Area", f:parse_Area }, -0x101b: { n:"Scatter", f:parse_Scatter }, -0x101c: { n:"CrtLine", f:parse_CrtLine }, -0x101d: { n:"Axis", f:parse_Axis }, -0x101e: { n:"Tick", f:parse_Tick }, -0x101f: { n:"ValueRange", f:parse_ValueRange }, -0x1020: { n:"CatSerRange", f:parse_CatSerRange }, -0x1021: { n:"AxisLine", f:parse_AxisLine }, -0x1022: { n:"CrtLink", f:parse_CrtLink }, -0x1024: { n:"DefaultText", f:parse_DefaultText }, -0x1025: { n:"Text", f:parse_Text }, -0x1026: { n:"FontX", f:parse_FontX }, -0x1027: { n:"ObjectLink", f:parse_ObjectLink }, -0x1032: { n:"Frame", f:parse_Frame }, -0x1033: { n:"Begin", f:parse_Begin }, -0x1034: { n:"End", f:parse_End }, -0x1035: { n:"PlotArea", f:parse_PlotArea }, -0x103a: { n:"Chart3d", f:parse_Chart3d }, -0x103c: { n:"PicF", f:parse_PicF }, -0x103d: { n:"DropBar", f:parse_DropBar }, -0x103e: { n:"Radar", f:parse_Radar }, -0x103f: { n:"Surf", f:parse_Surf }, -0x1040: { n:"RadarArea", f:parse_RadarArea }, -0x1041: { n:"AxisParent", f:parse_AxisParent }, -0x1043: { n:"LegendException", f:parse_LegendException }, +0x08a4: { n:"ShapePropsStream" }, +0x08a5: { n:"TextPropsStream" }, +0x08a6: { n:"RichTextStream" }, +0x08a7: { n:"CrtLayout12A" }, +0x1001: { n:"Units" }, +0x1002: { n:"Chart" }, +0x1003: { n:"Series" }, +0x1006: { n:"DataFormat" }, +0x1007: { n:"LineFormat" }, +0x1009: { n:"MarkerFormat" }, +0x100a: { n:"AreaFormat" }, +0x100b: { n:"PieFormat" }, +0x100c: { n:"AttachedLabel" }, +0x100d: { n:"SeriesText" }, +0x1014: { n:"ChartFormat" }, +0x1015: { n:"Legend" }, +0x1016: { n:"SeriesList" }, +0x1017: { n:"Bar" }, +0x1018: { n:"Line" }, +0x1019: { n:"Pie" }, +0x101a: { n:"Area" }, +0x101b: { n:"Scatter" }, +0x101c: { n:"CrtLine" }, +0x101d: { n:"Axis" }, +0x101e: { n:"Tick" }, +0x101f: { n:"ValueRange" }, +0x1020: { n:"CatSerRange" }, +0x1021: { n:"AxisLine" }, +0x1022: { n:"CrtLink" }, +0x1024: { n:"DefaultText" }, +0x1025: { n:"Text" }, +0x1026: { n:"FontX", f:parseuint16 }, +0x1027: { n:"ObjectLink" }, +0x1032: { n:"Frame" }, +0x1033: { n:"Begin" }, +0x1034: { n:"End" }, +0x1035: { n:"PlotArea" }, +0x103a: { n:"Chart3d" }, +0x103c: { n:"PicF" }, +0x103d: { n:"DropBar" }, +0x103e: { n:"Radar" }, +0x103f: { n:"Surf" }, +0x1040: { n:"RadarArea" }, +0x1041: { n:"AxisParent" }, +0x1043: { n:"LegendException" }, 0x1044: { n:"ShtProps", f:parse_ShtProps }, -0x1045: { n:"SerToCrt", f:parse_SerToCrt }, -0x1046: { n:"AxesUsed", f:parse_AxesUsed }, -0x1048: { n:"SBaseRef", f:parse_SBaseRef }, -0x104a: { n:"SerParent", f:parse_SerParent }, -0x104b: { n:"SerAuxTrend", f:parse_SerAuxTrend }, -0x104e: { n:"IFmtRecord", f:parse_IFmtRecord }, -0x104f: { n:"Pos", f:parse_Pos }, -0x1050: { n:"AlRuns", f:parse_AlRuns }, -0x1051: { n:"BRAI", f:parse_BRAI }, -0x105b: { n:"SerAuxErrBar", f:parse_SerAuxErrBar }, +0x1045: { n:"SerToCrt" }, +0x1046: { n:"AxesUsed" }, +0x1048: { n:"SBaseRef" }, +0x104a: { n:"SerParent" }, +0x104b: { n:"SerAuxTrend" }, +0x104e: { n:"IFmtRecord" }, +0x104f: { n:"Pos" }, +0x1050: { n:"AlRuns" }, +0x1051: { n:"BRAI" }, +0x105b: { n:"SerAuxErrBar" }, 0x105c: { n:"ClrtClient", f:parse_ClrtClient }, -0x105d: { n:"SerFmt", f:parse_SerFmt }, -0x105f: { n:"Chart3DBarShape", f:parse_Chart3DBarShape }, -0x1060: { n:"Fbi", f:parse_Fbi }, -0x1061: { n:"BopPop", f:parse_BopPop }, -0x1062: { n:"AxcExt", f:parse_AxcExt }, -0x1063: { n:"Dat", f:parse_Dat }, -0x1064: { n:"PlotGrowth", f:parse_PlotGrowth }, -0x1065: { n:"SIIndex", f:parse_SIIndex }, -0x1066: { n:"GelFrame", f:parse_GelFrame }, -0x1067: { n:"BopPopCustom", f:parse_BopPopCustom }, -0x1068: { n:"Fbi2", f:parse_Fbi2 }, - - /* These are specified in an older version of the spec */ +0x105d: { n:"SerFmt" }, +0x105f: { n:"Chart3DBarShape" }, +0x1060: { n:"Fbi" }, +0x1061: { n:"BopPop" }, +0x1062: { n:"AxcExt" }, +0x1063: { n:"Dat" }, +0x1064: { n:"PlotGrowth" }, +0x1065: { n:"SIIndex" }, +0x1066: { n:"GelFrame" }, +0x1067: { n:"BopPopCustom" }, +0x1068: { n:"Fbi2" }, + 0x0000: { n:"Dimensions", f:parse_Dimensions }, +0x0001: { n:"BIFF2BLANK" }, 0x0002: { n:"BIFF2INT", f:parse_BIFF2INT }, +0x0003: { n:"BIFF2NUM", f:parse_BIFF2NUM }, +0x0004: { n:"BIFF2STR", f:parse_BIFF2STR }, 0x0005: { n:"BoolErr", f:parse_BoolErr }, 0x0007: { n:"String", f:parse_BIFF2STRING }, -0x0008: { n:"BIFF2ROW", f:parsenoop }, -0x000b: { n:"Index", f:parse_Index }, -0x0016: { n:"ExternCount", f:parse_ExternCount }, +0x0008: { n:"BIFF2ROW" }, +0x0009: { n:'BOF', f:parse_BOF }, +0x000b: { n:"Index" }, +0x0016: { n:"ExternCount", f:parseuint16 }, 0x001e: { n:"BIFF2FORMAT", f:parse_BIFF2Format }, -0x001f: { n:"BIFF2FMTCNT", f:parsenoop }, /* 16-bit cnt of BIFF2FORMAT records */ -0x0020: { n:"BIFF2COLINFO", f:parsenoop }, +0x001f: { n:"BIFF2FMTCNT" }, /* 16-bit cnt of BIFF2FORMAT records */ +0x0020: { n:"BIFF2COLINFO" }, 0x0021: { n:"Array", f:parse_Array }, +0x0024: { n:"COLWIDTH" }, 0x0025: { n:"DefaultRowHeight", f:parse_DefaultRowHeight }, + // 0x2c ?? + // 0x2d ?? + // 0x2e ?? + // 0x30 FONTCOUNT: number of fonts 0x0032: { n:"BIFF2FONTXTRA", f:parse_BIFF2FONTXTRA }, -0x003e: { n:"BIFF2WINDOW2", f:parsenoop }, -0x0045: { n:"BIFF2FONTCLR", f:parsenoop }, -0x0056: { n:"BIFF4FMTCNT", f:parsenoop }, /* 16-bit cnt, similar to BIFF2 */ -0x007e: { n:"RK", f:parsenoop }, /* Not necessarily same as 0x027e */ + // 0x35: INFOOPTS + // 0x36: TABLE (BIFF2 only) + // 0x37: TABLE2 (BIFF2 only) + // 0x38: WNDESK + // 0x39 ?? + // 0x3a: BEGINPREF + // 0x3b: ENDPREF +0x003e: { n:"BIFF2WINDOW2" }, + // 0x3f ?? + // 0x46: SHOWSCROLL + // 0x47: SHOWFORMULA + // 0x48: STATUSBAR + // 0x49: SHORTMENUS + // 0x4A: + // 0x4B: + // 0x4C: + // 0x4E: + // 0x4F: + // 0x58: TOOLBAR (BIFF3) + + /* - - - */ +0x0034: { n:"DDEObjName" }, +0x0043: { n:"BIFF2XF" }, +0x0044: { n:"BIFF2XFINDEX", f:parseuint16 }, +0x0045: { n:"BIFF2FONTCLR" }, +0x0056: { n:"BIFF4FMTCNT" }, /* 16-bit cnt, similar to BIFF2 */ +0x007e: { n:"RK" }, /* Not necessarily same as 0x027e */ 0x007f: { n:"ImData", f:parse_ImData }, -0x0087: { n:"Addin", f:parsenoop }, -0x0088: { n:"Edg", f:parsenoop }, -0x0089: { n:"Pub", f:parsenoop }, -0x0091: { n:"Sub", f:parsenoop }, -0x0094: { n:"LHRecord", f:parsenoop }, -0x0095: { n:"LHNGraph", f:parsenoop }, -0x0096: { n:"Sound", f:parsenoop }, -0x00a9: { n:"CoordList", f:parsenoop }, -0x00ab: { n:"GCW", f:parsenoop }, -0x00bc: { n:"ShrFmla", f:parsenoop }, /* Not necessarily same as 0x04bc */ -0x00c2: { n:"AddMenu", f:parsenoop }, -0x00c3: { n:"DelMenu", f:parsenoop }, +0x0087: { n:"Addin" }, +0x0088: { n:"Edg" }, +0x0089: { n:"Pub" }, + // 0x8A + // 0x8B LH: alternate menu key flag (BIFF3/4) + // 0x8E + // 0x8F +0x0091: { n:"Sub" }, + // 0x93 STYLE +0x0094: { n:"LHRecord" }, +0x0095: { n:"LHNGraph" }, +0x0096: { n:"Sound" }, + // 0xA2 FNPROTO: function prototypes (BIFF4) + // 0xA3 + // 0xA8 +0x00a9: { n:"CoordList" }, +0x00ab: { n:"GCW" }, +0x00bc: { n:"ShrFmla" }, /* Not necessarily same as 0x04bc */ +0x00bf: { n:"ToolbarHdr" }, +0x00c0: { n:"ToolbarEnd" }, +0x00c2: { n:"AddMenu" }, +0x00c3: { n:"DelMenu" }, 0x00d6: { n:"RString", f:parse_RString }, -0x00df: { n:"UDDesc", f:parsenoop }, -0x00ea: { n:"TabIdConf", f:parsenoop }, -0x0162: { n:"XL5Modify", f:parsenoop }, -0x01a5: { n:"FileSharing2", f:parsenoop }, +0x00df: { n:"UDDesc" }, +0x00ea: { n:"TabIdConf" }, +0x0162: { n:"XL5Modify" }, +0x01a5: { n:"FileSharing2" }, +0x0206: { n:"Formula", f:parse_Formula }, 0x0209: { n:'BOF', f:parse_BOF }, 0x0218: { n:"Lbl", f:parse_Lbl }, 0x0223: { n:"ExternName", f:parse_ExternName }, -0x0231: { n:"Font", f:parsenoop }, +0x0231: { n:"Font" }, +0x0243: { n:"BIFF3XF" }, +0x0406: { n:"Formula", f:parse_Formula }, 0x0409: { n:'BOF', f:parse_BOF }, -0x086d: { n:"FeatInfo", f:parsenoop }, -0x0873: { n:"FeatInfo11", f:parsenoop }, -0x0881: { n:"SXAddl12", f:parsenoop }, -0x08c0: { n:"AutoWebPub", f:parsenoop }, -0x08c1: { n:"ListObj", f:parsenoop }, -0x08c2: { n:"ListField", f:parsenoop }, -0x08c3: { n:"ListDV", f:parsenoop }, -0x08c4: { n:"ListCondFmt", f:parsenoop }, -0x08c5: { n:"ListCF", f:parsenoop }, -0x08c6: { n:"FMQry", f:parsenoop }, -0x08c7: { n:"FMSQry", f:parsenoop }, -0x08c8: { n:"PLV", f:parsenoop }, -0x08c9: { n:"LnExt", f:parsenoop }, -0x08ca: { n:"MkrExt", f:parsenoop }, -0x08cb: { n:"CrtCoopt", f:parsenoop }, - -0x0043: { n:"BIFF2XF", f:parsenoop }, -0x0243: { n:"BIFF3XF", f:parsenoop }, -0x0443: { n:"BIFF4XF", f:parsenoop }, +0x0443: { n:"BIFF4XF" }, +0x086d: { n:"FeatInfo" }, +0x0873: { n:"FeatInfo11" }, +0x0881: { n:"SXAddl12" }, +0x08c0: { n:"AutoWebPub" }, +0x08c1: { n:"ListObj" }, +0x08c2: { n:"ListField" }, +0x08c3: { n:"ListDV" }, +0x08c4: { n:"ListCondFmt" }, +0x08c5: { n:"ListCF" }, +0x08c6: { n:"FMQry" }, +0x08c7: { n:"FMSQry" }, +0x08c8: { n:"PLV" }, +0x08c9: { n:"LnExt" }, +0x08ca: { n:"MkrExt" }, +0x08cb: { n:"CrtCoopt" }, +0x08d6: { n:"FRTArchId$", r:12 }, 0x7262: {} }; - -/* BIFF2-4 single-sheet workbooks */ -function write_biff_rec(ba, t, payload, length) { - var len = (length || (payload||[]).length); - var o = ba.next(4 + len); +var XLSRE = evert_key(XLSRecordEnum, 'n'); +function write_biff_rec(ba, type, payload, length) { + var t = typeof type == "number" ? type : (+type || +XLSRE[type]); + if(isNaN(t)) return; + var len = length || (payload||[]).length || 0; + var o = ba.next(4); o.write_shift(2, t); o.write_shift(2, len); if(len > 0 && is_buf(payload)) ba.push(payload); } -function write_BOF(wb, o) { - if(o.bookType != 'biff2') throw "unsupported BIFF version"; - var out = new_buf(4); - out.write_shift(2, 0x0002); // "unused" - out.write_shift(2, 0x0010); // Sheet - return out; +function write_biff_continue(ba, type, payload, length) { + var len = length || (payload||[]).length || 0; + if(len <= 8224) return write_biff_rec(ba, type, payload, len); + var t = +type || +XLSRE[type]; + if(isNaN(t)) return; + var parts = payload.parts || [], sidx = 0; + var i = 0, w = 0; + while(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; } + var o = ba.next(4); + o.write_shift(2, t); + o.write_shift(2, w); + ba.push(payload.slice(i, i + w)); + i += w; + while(i < len) { + o = ba.next(4); + o.write_shift(2, 0x3c); // TODO: figure out correct continue type + w = 0; + while(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; } + o.write_shift(2, w); + ba.push(payload.slice(i, i+w)); i+= w; + } } function write_BIFF2Cell(out, r, c) { if(!out) out = new_buf(7); out.write_shift(2, r); out.write_shift(2, c); + out.write_shift(2, 0); out.write_shift(1, 0); - out.write_shift(1, 0); - out.write_shift(1, 0); - return out; -} - -function write_BIFF2INT(r, c, val) { - var out = new_buf(9); - write_BIFF2Cell(out, r, c); - out.write_shift(2, val); - return out; -} - -function write_BIFF2NUMBER(r, c, val) { - var out = new_buf(15); - write_BIFF2Cell(out, r, c); - out.write_shift(8, val, 'f'); return out; } function write_BIFF2BERR(r, c, val, t) { var out = new_buf(9); write_BIFF2Cell(out, r, c); - if(t == 'e') { out.write_shift(1, val); out.write_shift(1, 1); } - else { out.write_shift(1, val?1:0); out.write_shift(1, 0); } + write_Bes(val, t || 'b', out); return out; } @@ -31972,27 +35905,33 @@ function write_BIFF2LABEL(r, c, val) { return out.l < out.length ? out.slice(0, out.l) : out; } -function write_ws_biff_cell(ba, cell, R, C, opts) { +function write_ws_biff2_cell(ba, cell, R, C) { if(cell.v != null) switch(cell.t) { case 'd': case 'n': - var v = cell.t == 'd' ? datenum(cell.v) : cell.v; + var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v; if((v == (v|0)) && (v >= 0) && (v < 65536)) write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v)); else - write_biff_rec(ba, 0x0003, write_BIFF2NUMBER(R,C, v)); + write_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v)); return; case 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return; /* TODO: codepage, sst */ case 's': case 'str': - write_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v)); + write_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, (cell.v||"").slice(0,255))); return; } write_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C)); } -function write_biff_ws(ba, ws, idx, opts, wb) { +function write_ws_biff2(ba, ws, idx, opts) { var dense = Array.isArray(ws); var range = safe_decode_range(ws['!ref'] || "A1"), ref, rr = "", cols = []; + if(range.e.c > 0xFF || range.e.r > 0x3FFF) { + if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:IV16384"); + range.e.c = Math.min(range.e.c, 0xFF); + range.e.r = Math.min(range.e.c, 0x3FFF); + ref = encode_range(range); + } for(var R = range.s.r; R <= range.e.r; ++R) { rr = encode_row(R); for(var C = range.s.c; C <= range.e.c; ++C) { @@ -32001,87 +35940,383 @@ function write_biff_ws(ba, ws, idx, opts, wb) { var cell = dense ? (ws[R]||[])[C] : ws[ref]; if(!cell) continue; /* write cell */ - write_ws_biff_cell(ba, cell, R, C, opts); + write_ws_biff2_cell(ba, cell, R, C, opts); } } } /* Based on test files */ -function write_biff_buf(wb, opts) { +function write_biff2_buf(wb, opts) { var o = opts || {}; if(DENSE != null && o.dense == null) o.dense = DENSE; var ba = buf_array(); var idx = 0; for(var i=0;i 0xFF || range.e.r >= MAX_ROWS) { + if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:IV16384"); + range.e.c = Math.min(range.e.c, 0xFF); + range.e.r = Math.min(range.e.c, MAX_ROWS-1); + } + + write_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts)); + /* [Uncalced] Index */ + write_biff_rec(ba, "CalcMode", writeuint16(1)); + write_biff_rec(ba, "CalcCount", writeuint16(100)); + write_biff_rec(ba, "CalcRefMode", writebool(true)); + write_biff_rec(ba, "CalcIter", writebool(false)); + write_biff_rec(ba, "CalcDelta", write_Xnum(0.001)); + write_biff_rec(ba, "CalcSaveRecalc", writebool(true)); + write_biff_rec(ba, "PrintRowCol", writebool(false)); + write_biff_rec(ba, "PrintGrid", writebool(false)); + write_biff_rec(ba, "GridSet", writeuint16(1)); + write_biff_rec(ba, "Guts", write_Guts([0,0])); + /* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */ + /* Header (string) */ + /* Footer (string) */ + write_biff_rec(ba, "HCenter", writebool(false)); + write_biff_rec(ba, "VCenter", writebool(false)); + /* ... */ + if(b8) write_ws_cols_biff8(ba, ws["!cols"], ws); + /* ... */ + write_biff_rec(ba, 0x200, write_Dimensions(range, opts)); + /* ... */ + + if(b8) ws['!links'] = []; + for(var R = range.s.r; R <= range.e.r; ++R) { + rr = encode_row(R); + for(var C = range.s.c; C <= range.e.c; ++C) { + if(R === range.s.r) cols[C] = encode_col(C); + ref = cols[C] + rr; + var cell = dense ? (ws[R]||[])[C] : ws[ref]; + if(!cell) continue; + /* write cell */ + write_ws_biff8_cell(ba, cell, R, C, opts); + if(b8 && cell.l) ws['!links'].push([ref, cell.l]); + } + } + var cname = _sheet.CodeName || _sheet.name || s; + /* ... */ + if(b8) write_biff_rec(ba, "Window2", write_Window2((_WB.Views||[])[0])); + /* ... */ + if(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, "MergeCells", write_MergeCells(ws['!merges'])); + /* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */ + if(b8) write_ws_biff8_hlinks(ba, ws); + /* [DVAL] */ + write_biff_rec(ba, "CodeName", write_XLUnicodeString(cname, opts)); + /* *WebPub *CellWatch [SheetExt] */ + if(b8) write_FEAT(ba, ws); + /* *FEAT11 *RECORD12 */ + write_biff_rec(ba, "EOF"); return ba.end(); } + +/* [MS-XLS] 2.1.7.20.3 */ +function write_biff8_global(wb, bufs, opts) { + var A = buf_array(); + var _WB = ((wb||{}).Workbook||{}); + var _sheets = (_WB.Sheets||[]); + var _wb = _WB.WBProps||{}; + var b8 = opts.biff == 8, b5 = opts.biff == 5; + write_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts)); + if(opts.bookType == "xla") write_biff_rec(A, "Addin"); + write_biff_rec(A, "InterfaceHdr", b8 ? writeuint16(0x04b0) : null); + write_biff_rec(A, "Mms", writezeroes(2)); + if(b5) write_biff_rec(A, "ToolbarHdr"); + if(b5) write_biff_rec(A, "ToolbarEnd"); + write_biff_rec(A, "InterfaceEnd"); + write_biff_rec(A, "WriteAccess", write_WriteAccess("SheetJS", opts)); + /* [FileSharing] */ + write_biff_rec(A, "CodePage", writeuint16(b8 ? 0x04b0 : 0x04E4)); + /* *2047 Lel */ + if(b8) write_biff_rec(A, "DSF", writeuint16(0)); + if(b8) write_biff_rec(A, "Excel9File"); + write_biff_rec(A, "RRTabId", write_RRTabId(wb.SheetNames.length)); + if(b8 && wb.vbaraw) write_biff_rec(A, "ObProj"); + /* [ObNoMacros] */ + if(b8 && wb.vbaraw) { + var cname = _wb.CodeName || "ThisWorkbook"; + write_biff_rec(A, "CodeName", write_XLUnicodeString(cname, opts)); + } + write_biff_rec(A, "BuiltInFnGroupCount", writeuint16(0x11)); + /* *FnGroupName *FnGrp12 */ + /* *Lbl */ + /* [OleObjectSize] */ + write_biff_rec(A, "WinProtect", writebool(false)); + write_biff_rec(A, "Protect", writebool(false)); + write_biff_rec(A, "Password", writeuint16(0)); + if(b8) write_biff_rec(A, "Prot4Rev", writebool(false)); + if(b8) write_biff_rec(A, "Prot4RevPass", writeuint16(0)); + write_biff_rec(A, "Window1", write_Window1(opts)); + write_biff_rec(A, "Backup", writebool(false)); + write_biff_rec(A, "HideObj", writeuint16(0)); + write_biff_rec(A, "Date1904", writebool(safe1904(wb)=="true")); + write_biff_rec(A, "CalcPrecision", writebool(true)); + if(b8) write_biff_rec(A, "RefreshAll", writebool(false)); + write_biff_rec(A, "BookBool", writeuint16(0)); + /* ... */ + write_FONTS_biff8(A, wb, opts); + write_FMTS_biff8(A, wb.SSF, opts); + write_CELLXFS_biff8(A, opts); + /* ... */ + if(b8) write_biff_rec(A, "UsesELFs", writebool(false)); + var a = A.end(); + + var C = buf_array(); + /* METADATA [MTRSettings] [ForceFullCalculation] */ + if(b8) write_biff_rec(C, "Country", write_Country()); + /* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */ + + /* BIFF8: [SST *Continue] ExtSST */ + if(b8 && opts.Strings) write_biff_continue(C, "SST", write_SST(opts.Strings, opts)); + + /* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */ + write_biff_rec(C, "EOF"); + var c = C.end(); + + var B = buf_array(); + var blen = 0, j = 0; + for(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length; + var start = a.length + blen + c.length; + for(j = 0; j < wb.SheetNames.length; ++j) { + var _sheet = _sheets[j] || ({}); + write_biff_rec(B, "BoundSheet8", write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts)); + start += bufs[j].length; + } + /* 1*BoundSheet8 */ + var b = B.end(); + if(blen != b.length) throw new Error("BS8 " + blen + " != " + b.length); + + var out = []; + if(a.length) out.push(a); + if(b.length) out.push(b); + if(c.length) out.push(c); + return __toBuffer([out]); +} + +/* [MS-XLS] 2.1.7.20 Workbook Stream */ +function write_biff8_buf(wb, opts) { + var o = opts || {}; + var bufs = []; + + if(wb && !wb.SSF) { + wb.SSF = SSF.get_table(); + } + if(wb && wb.SSF) { + make_ssf(SSF); SSF.load_table(wb.SSF); + // $FlowIgnore + o.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0; + o.ssf = wb.SSF; + } + + o.Strings = []; o.Strings.Count = 0; o.Strings.Unique = 0; + fix_write_opts(o); + + o.cellXfs = []; + get_cell_style(o.cellXfs, {}, {revssf:{"General":0}}); + + if(!wb.Props) wb.Props = {}; + + for(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb); + bufs.unshift(write_biff8_global(wb, bufs, o)); + return __toBuffer([bufs]); +} + +function write_biff_buf(wb, opts) { + for(var i = 0; i <= wb.SheetNames.length; ++i) { + var ws = wb.Sheets[wb.SheetNames[i]]; + if(!ws || !ws["!ref"]) continue; + var range = decode_range(ws["!ref"]); + if(range.e.c > 255) { // note: 255 is IV + if(typeof console != "undefined" && console.error) console.error("Worksheet '" + wb.SheetNames[i] + "' extends beyond column IV (255). Data may be lost."); + } + } + + var o = opts || {}; + switch(o.biff || 2) { + case 8: case 5: return write_biff8_buf(wb, opts); + case 4: case 3: case 2: return write_biff2_buf(wb, opts); + } + throw new Error("invalid type " + o.bookType + " for BIFF"); +} /* note: browser DOM element cannot see mso- style attrs, must parse */ var HTML_ = (function() { function html_to_sheet(str, _opts) { var opts = _opts || {}; if(DENSE != null && opts.dense == null) opts.dense = DENSE; var ws = opts.dense ? ([]) : ({}); + str = str.replace(//g, ""); var mtch = str.match(/"); var mtch2 = str.match(/<\/table/i); var i = mtch.index, j = mtch2 && mtch2.index || str.length; - var rows = str.slice(i, j).split(/(:?]*>)/i); + var rows = split_regex(str.slice(i, j), /(:?]*>)/i, ""); var R = -1, C = 0, RS = 0, CS = 0; var range = {s:{r:10000000, c:10000000},e:{r:0,c:0}}; - var merges = [], midx = 0; + var merges = []; for(i = 0; i < rows.length; ++i) { var row = rows[i].trim(); - var hd = row.substr(0,3).toLowerCase(); - if(hd == "/i); + var hd = row.slice(0,3).toLowerCase(); + if(hd == "/i); for(j = 0; j < cells.length; ++j) { var cell = cells[j].trim(); - if(cell.substr(0,3).toLowerCase() != "")) > -1) m = m.slice(cc+1); - while(m.indexOf(">") > -1) m = m.slice(0, m.lastIndexOf("<")); + for(var midx = 0; midx < merges.length; ++midx) { + var _merge = merges[midx]; + if(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; } + } var tag = parsexmltag(cell.slice(0, cell.indexOf(">"))); CS = tag.colspan ? +tag.colspan : 1; - if((RS = +tag.rowspan)>0 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}}); + if((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}}); + var _t = tag.t || tag["data-t"] || ""; /* TODO: generate stub cells */ if(!m.length) { C += CS; continue; } - m = unescapexml(m).replace(/[\r\n]/g,""); - if(range.s.r > R) range.s.r = R; - if(range.e.r < R) range.e.r = R; - if(range.s.c > C) range.s.c = C; - if(range.e.c < C) range.e.c = C; - if(opts.dense) { - if(!ws[R]) ws[R] = []; - if(Number(m) == Number(m)) ws[R][C] = {t:'n', v:+m}; - else ws[R][C] = {t:'s', v:m}; - } else { - var coord = encode_cell({r:R, c:C}); - /* TODO: value parsing */ - if(Number(m) == Number(m)) ws[coord] = {t:'n', v:+m}; - else ws[coord] = {t:'s', v:m}; + m = htmldecode(m); + if(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R; + if(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C; + if(!m.length) continue; + var o = {t:'s', v:m}; + if(opts.raw || !m.trim().length || _t == 's'){} + else if(m === 'TRUE') o = {t:'b', v:true}; + else if(m === 'FALSE') o = {t:'b', v:false}; + else if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)}; + else if(!isNaN(fuzzydate(m).getDate())) { + o = ({t:'d', v:parseDate(m)}); + if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}); + o.z = opts.dateNF || SSF._table[14]; } + if(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; } + else ws[encode_cell({r:R, c:C})] = o; C += CS; } } ws['!ref'] = encode_range(range); + if(merges.length) ws["!merges"] = merges; return ws; } function html_to_book(str, opts) { - return sheet_to_workbook(html_to_sheet(str, opts), opts); + var mtch = str.match(/[\s\S]*?<\/table>/gi); + if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find
"); + if(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts); + var wb = utils.book_new(); + mtch.forEach(function(s, idx) { utils.book_append_sheet(wb, html_to_sheet(s, opts), "Sheet" + (idx+1)); }); + return wb; } function make_html_row(ws, r, R, o) { var M = (ws['!merges'] ||[]); var oo = []; - var nullcell = ""; for(var C = r.s.c; C <= r.e.c; ++C) { var RS = 0, CS = 0; for(var j = 0; j < M.length; ++j) { @@ -32093,14 +36328,19 @@ var HTML_ = (function() { if(RS < 0) continue; var coord = encode_cell({r:R,c:C}); var cell = o.dense ? (ws[R]||[])[C] : ws[coord]; - if(!cell || cell.v == null) { oo.push(nullcell); continue; } /* TODO: html entities */ - var w = cell.h || escapexml(cell.w || (format_cell(cell), cell.w) || ""); - var sp = {}; + var w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || "")) || ""; + var sp = ({}); if(RS > 1) sp.rowspan = RS; if(CS > 1) sp.colspan = CS; - if(o.editable) sp.contenteditable = "true"; - sp.id = "sjs-" + coord; + if(o.editable) w = '' + w + ''; + else if(cell) { + sp["data-t"] = cell && cell.t || 'z'; + if(cell.v != null) sp["data-v"] = cell.v; + if(cell.z != null) sp["data-z"] = cell.z; + if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '' + w + ''; + } + sp.id = (o.id || "sjs") + "-" + coord; oo.push(writextag('td', w, sp)); } var preamble = ""; @@ -32108,11 +36348,11 @@ var HTML_ = (function() { } function make_html_preamble(ws, R, o) { var out = []; - return out.join("") + '
'; + return out.join("") + ''; } var _BEGIN = 'SheetJS Table Export'; var _END = ''; - function sheet_to_html(ws, opts, wb) { + function sheet_to_html(ws, opts/*, wb:?Workbook*/) { var o = opts || {}; var header = o.header != null ? o.header : _BEGIN; var footer = o.footer != null ? o.footer : _END; @@ -32123,8 +36363,8 @@ var HTML_ = (function() { for(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o)); out.push("
" + footer); return out.join(""); - } + } return { to_workbook: html_to_book, to_sheet: html_to_sheet, @@ -32136,66 +36376,142 @@ var HTML_ = (function() { }; })(); -function parse_dom_table(table, _opts) { +function sheet_add_dom(ws, table, _opts) { var opts = _opts || {}; if(DENSE != null) opts.dense = DENSE; - var ws = opts.dense ? ([]) : ({}); + var or_R = 0, or_C = 0; + if(opts.origin != null) { + if(typeof opts.origin == 'number') or_R = opts.origin; + else { + var _origin = typeof opts.origin == "string" ? decode_cell(opts.origin) : opts.origin; + or_R = _origin.r; or_C = _origin.c; + } + } var rows = table.getElementsByTagName('tr'); - var range = {s:{r:0,c:0},e:{r:rows.length - 1,c:0}}; + var sheetRows = Math.min(opts.sheetRows||10000000, rows.length); + var range = {s:{r:0,c:0},e:{r:or_R,c:or_C}}; + if(ws["!ref"]) { + var _range = decode_range(ws["!ref"]); + range.s.r = Math.min(range.s.r, _range.s.r); + range.s.c = Math.min(range.s.c, _range.s.c); + range.e.r = Math.max(range.e.r, _range.e.r); + range.e.c = Math.max(range.e.c, _range.e.c); + if(or_R == -1) range.e.r = or_R = _range.e.r + 1; + } var merges = [], midx = 0; - var R = 0, _C = 0, C = 0, RS = 0, CS = 0; - for(; R < rows.length; ++R) { - var row = rows[R]; - var elts = row.children; + var rowinfo = ws["!rows"] || (ws["!rows"] = []); + var _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0; + if(!ws["!cols"]) ws['!cols'] = []; + for(; _R < rows.length && R < sheetRows; ++_R) { + var row = rows[_R]; + if (is_dom_element_hidden(row)) { + if (opts.display) continue; + rowinfo[R] = {hidden: true}; + } + var elts = (row.children); for(_C = C = 0; _C < elts.length; ++_C) { - var elt = elts[_C], v = elts[_C].innerText || elts[_C].textContent; + var elt = elts[_C]; + if (opts.display && is_dom_element_hidden(elt)) continue; + var v = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML); + var z = elt.getAttribute('data-z') || elt.getAttribute('z'); for(midx = 0; midx < merges.length; ++midx) { var m = merges[midx]; - if(m.s.c == C && m.s.r <= R && R <= m.e.r) { C = m.e.c+1; midx = -1; } + if(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; } } /* TODO: figure out how to extract nonstandard mso- style */ CS = +elt.getAttribute("colspan") || 1; - if((RS = +elt.getAttribute("rowspan"))>0 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}}); + if( ((RS = (+elt.getAttribute("rowspan") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}}); var o = {t:'s', v:v}; - if(v != null && v.length) { - if(!isNaN(Number(v))) o = {t:'n', v:Number(v)}; + var _t = elt.getAttribute("data-t") || elt.getAttribute("t") || ""; + if(v != null) { + if(v.length == 0) o.t = _t || 'z'; + else if(opts.raw || v.trim().length == 0 || _t == "s"){} + else if(v === 'TRUE') o = {t:'b', v:true}; + else if(v === 'FALSE') o = {t:'b', v:false}; + else if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)}; else if(!isNaN(fuzzydate(v).getDate())) { o = ({t:'d', v:parseDate(v)}); if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}); o.z = opts.dateNF || SSF._table[14]; } } - if(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; } - else ws[encode_cell({c:C, r:R})] = o; - if(range.e.c < C) range.e.c = C; + if(o.z === undefined && z != null) o.z = z; + /* The first link is used. Links are assumed to be fully specified. + * TODO: The right way to process relative links is to make a new */ + var l = "", Aelts = elt.getElementsByTagName("A"); + if(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti) if(Aelts[Aelti].hasAttribute("href")) { + l = Aelts[Aelti].getAttribute("href"); if(l.charAt(0) != "#") break; + } + if(l && l.charAt(0) != "#") o.l = ({ Target: l }); + if(opts.dense) { if(!ws[R + or_R]) ws[R + or_R] = []; ws[R + or_R][C + or_C] = o; } + else ws[encode_cell({c:C + or_C, r:R + or_R})] = o; + if(range.e.c < C + or_C) range.e.c = C + or_C; C += CS; } + ++R; } - ws['!merges'] = merges; + if(merges.length) ws['!merges'] = (ws["!merges"] || []).concat(merges); + range.e.r = Math.max(range.e.r, R - 1 + or_R); ws['!ref'] = encode_range(range); + if(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance return ws; } +function parse_dom_table(table, _opts) { + var opts = _opts || {}; + var ws = opts.dense ? ([]) : ({}); + return sheet_add_dom(ws, table, _opts); +} + function table_to_book(table, opts) { return sheet_to_workbook(parse_dom_table(table, opts), opts); } + +function is_dom_element_hidden(element) { + var display = ''; + var get_computed_style = get_get_computed_style_function(element); + if(get_computed_style) display = get_computed_style(element).getPropertyValue('display'); + if(!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document) + return display === 'none'; +} + +/* global getComputedStyle */ +function get_get_computed_style_function(element) { + // The proper getComputedStyle implementation is the one defined in the element window + if(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle; + // If it is not available, try to get one from the global namespace + if(typeof getComputedStyle === 'function') return getComputedStyle; + return null; +} /* OpenDocument */ var parse_content_xml = (function() { - var parse_text_p = function(text, tag) { - return unescapexml(text.replace(//g," ").replace(/<[^>]*>/g,"")); + var parse_text_p = function(text) { + /* 6.1.2 White Space Characters */ + var fixed = text + .replace(/[\t\r\n]/g, " ").trim().replace(/ +/g, " ") + .replace(//g," ") + .replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(" "); }) + .replace(/]*\/>/g,"\t") + .replace(//g,"\n"); + var v = unescapexml(fixed.replace(/<[^>]*>/g,"")); + + return [v]; }; var number_formats = { /* ods name: [short ssf fmt, long ssf fmt] */ - day: ["d", "dd"], - month: ["m", "mm"], - year: ["y", "yy"], - hours: ["h", "hh"], - minutes: ["m", "mm"], - seconds: ["s", "ss"], - "am-pm": ["A/P", "AM/PM"], - "day-of-week": ["ddd", "dddd"] + day: ["d", "dd"], + month: ["m", "mm"], + year: ["y", "yy"], + hours: ["h", "hh"], + minutes: ["m", "mm"], + seconds: ["s", "ss"], + "am-pm": ["A/P", "AM/PM"], + "day-of-week": ["ddd", "dddd"], + era: ["e", "ee"], + /* there is no native representation of LO "Q" format */ + quarter: ["\\Qm", "m\\\"th quarter\""] }; return function pcx(d, _opts) { @@ -32210,15 +36526,21 @@ var parse_content_xml = (function() { var Sheets = {}, SheetNames = []; var ws = opts.dense ? ([]) : ({}); var Rn, q; - var ctag = {value:""}; + var ctag = ({value:""}); var textp = "", textpidx = 0, textptag; + var textR = []; var R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}}; + var row_ol = 0; var number_format_map = {}; var merges = [], mrange = {}, mR = 0, mC = 0; + var rowinfo = [], rowpeat = 1, colpeat = 1; var arrayf = []; - var comments = [], comment = {}; + var WB = {Names:[]}; + var atag = ({}); + var _Ref = ["", ""]; + var comments = [], comment = ({}); var creator = "", creatoridx = 0; - var rept = 1, isstub = false; + var isstub = false, intable = false; var i = 0; xlmlregex.lastIndex = 0; str = str.replace(//mg,"").replace(//gm,""); @@ -32227,46 +36549,77 @@ var parse_content_xml = (function() { case 'table': case '工作表': // 9.1.2 if(Rn[1]==='/') { if(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range); + else ws['!ref'] = "A1:A1"; + if(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) { + ws['!fullref'] = ws['!ref']; + range.e.r = opts.sheetRows - 1; + ws['!ref'] = encode_range(range); + } if(merges.length) ws['!merges'] = merges; - sheetag.name = utf8read(sheetag['名称'] || sheetag.name); + if(rowinfo.length) ws["!rows"] = rowinfo; + sheetag.name = sheetag['名称'] || sheetag.name; + if(typeof JSON !== 'undefined') JSON.stringify(sheetag); SheetNames.push(sheetag.name); Sheets[sheetag.name] = ws; + intable = false; } else if(Rn[0].charAt(Rn[0].length-2) !== '/') { sheetag = parsexmltag(Rn[0], false); R = C = -1; range.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0; ws = opts.dense ? ([]) : ({}); merges = []; + rowinfo = []; + intable = true; } break; + case 'table-row-group': // 9.1.9 + if(Rn[1] === "/") --row_ol; else ++row_ol; + break; case 'table-row': case '行': // 9.1.3 - if(Rn[1] === '/') break; + if(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; } rowtag = parsexmltag(Rn[0], false); - if(rowtag['行号']) R = rowtag['行号'] - 1; else ++R; + if(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0; + rowpeat = +rowtag['number-rows-repeated'] || 1; + /* TODO: remove magic */ + if(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol}; C = -1; break; case 'covered-table-cell': // 9.1.5 - ++C; + if(Rn[1] !== '/') ++C; if(opts.sheetStubs) { if(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; } else ws[encode_cell({r:R,c:C})] = {t:'z'}; } + textp = ""; textR = []; break; /* stub */ case 'table-cell': case '数据': if(Rn[0].charAt(Rn[0].length-2) === '/') { + ++C; ctag = parsexmltag(Rn[0], false); - if(ctag['number-columns-repeated']) C+= parseInt(ctag['number-columns-repeated'], 10); - else ++C; - } - else if(Rn[1]!=='/') { + colpeat = parseInt(ctag['number-columns-repeated']||"1", 10); + q = ({t:'z', v:null}); + if(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula)); + if((ctag['数据类型'] || ctag['value-type']) == "string") { + q.t = "s"; q.v = unescapexml(ctag['string-value'] || ""); + if(opts.dense) { + if(!ws[R]) ws[R] = []; + ws[R][C] = q; + } else { + ws[encode_cell({r:R,c:C})] = q; + } + } + C+= colpeat-1; + } else if(Rn[1]!=='/') { ++C; - rept = 1; + textp = ""; textpidx = 0; textR = []; + colpeat = 1; + var rptR = rowpeat ? R + rowpeat - 1 : R; if(C > range.e.c) range.e.c = C; - if(R > range.e.r) range.e.r = R; if(C < range.s.c) range.s.c = C; if(R < range.s.r) range.s.r = R; + if(rptR > range.e.r) range.e.r = rptR; ctag = parsexmltag(Rn[0], false); - comments = []; comment = {}; + comments = []; comment = ({}); q = ({t:ctag['数据类型'] || ctag['value-type'], v:null}); if(opts.cellFormula) { if(ctag.formula) ctag.formula = unescapexml(ctag.formula); @@ -32291,7 +36644,7 @@ var parse_content_xml = (function() { } /* 19.675.2 table:number-columns-repeated */ - if(ctag['number-columns-repeated']) rept = parseInt(ctag['number-columns-repeated'], 10); + if(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10); /* 19.385 office:value-type */ switch(q.t) { @@ -32302,38 +36655,49 @@ var parse_content_xml = (function() { case 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']); if(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); } q.z = 'm/d/yy'; break; - case 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; break; + case 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; + if(opts.cellDates) { q.t = 'd'; q.v = numdate(q.v); } + q.z = 'HH:MM:SS'; break; case 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break; default: if(q.t === 'string' || q.t === 'text' || !q.t) { q.t = 's'; - if(ctag['string-value'] != null) textp = unescapexml(ctag['string-value']); + if(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; } } else throw new Error('Unsupported value type ' + q.t); } } else { isstub = false; if(q.t === 's') { q.v = textp || ''; + if(textR.length) q.R = textR; isstub = textpidx == 0; } + if(atag.Target) q.l = atag; if(comments.length > 0) { q.c = comments; comments = []; } if(textp && opts.cellText !== false) q.w = textp; + if(isstub) { q.t = "z"; delete q.v; } if(!isstub || opts.sheetStubs) { - if(!(opts.sheetRows && opts.sheetRows < R)) { - if(opts.dense) { - if(!ws[R]) ws[R] = []; - ws[R][C] = q; - while(--rept > 0) ws[R][++C] = dup(q); - } else { - ws[encode_cell({r:R,c:C})] = q; - while(--rept > 0) ws[encode_cell({r:R,c:++C})] = dup(q); + if(!(opts.sheetRows && opts.sheetRows <= R)) { + for(var rpt = 0; rpt < rowpeat; ++rpt) { + colpeat = parseInt(ctag['number-columns-repeated']||"1", 10); + if(opts.dense) { + if(!ws[R + rpt]) ws[R + rpt] = []; + ws[R + rpt][C] = rpt == 0 ? q : dup(q); + while(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q); + } else { + ws[encode_cell({r:R + rpt,c:C})] = q; + while(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q); + } + if(range.e.c <= C) range.e.c = C; } - if(range.e.c <= C) range.e.c = C; } - } else { C += rept; rept = 0; } + } + colpeat = parseInt(ctag['number-columns-repeated']||"1", 10); + C += colpeat-1; colpeat = 0; q = {}; - textp = ""; + textp = ""; textR = []; } + atag = ({}); break; // 9.1.4 /* pure state */ @@ -32343,6 +36707,7 @@ var parse_content_xml = (function() { case 'scripts': // 3.12 case 'styles': // TODO case 'font-face-decls': // 3.14 + case 'master-styles': // 3.15.4 -- relevant for FODS if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;} else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]); break; @@ -32351,12 +36716,13 @@ var parse_content_xml = (function() { if(Rn[1]==='/'){ if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp; comment.t = textp; + if(textR.length) comment.R = textR; comment.a = creator; comments.push(comment); } else if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);} creator = ""; creatoridx = 0; - textp = ""; textpidx = 0; + textp = ""; textpidx = 0; textR = []; break; case 'creator': // 4.3.2.7 @@ -32380,9 +36746,10 @@ var parse_content_xml = (function() { case 'form': // 13.13 case 'dde-links': // 9.8 case 'event-listeners': // TODO + case 'chart': // TODO if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;} else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]); - textp = ""; textpidx = 0; + textp = ""; textpidx = 0; textR = []; break; case 'scientific-number': // TODO: @@ -32407,11 +36774,11 @@ var parse_content_xml = (function() { case 'script': break; // 3.13 case 'libraries': break; // TODO: case 'automatic-styles': break; // 3.15.3 - case 'master-styles': break; // TODO: case 'default-style': // TODO: case 'page-layout': break; // TODO: - case 'style': break; // 16.2 + case 'style': // 16.2 + break; case 'map': break; // 16.3 case 'font-face': break; // 16.21 @@ -32463,25 +36830,35 @@ var parse_content_xml = (function() { } else pidx = Rn.index + Rn[0].length; break; + + case 'named-range': // 9.4.12 + tag = parsexmltag(Rn[0], false); + _Ref = ods_to_csf_3D(tag['cell-range-address']); + var nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}); + if(intable) nrange.Sheet = SheetNames.length; + WB.Names.push(nrange); + break; + case 'text-content': break; // 16.27.27 case 'text-properties': break; // 16.27.27 + case 'embedded-text': break; // 16.27.4 case 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3 case 'forms': break; // 12.25.2 13.2 case 'table-column': break; // 9.1.6 case 'table-header-rows': break; // 9.1.7 + case 'table-rows': break; // 9.1.12 /* TODO: outline levels */ - case 'table-row-group': break; // 9.1.9 case 'table-column-group': break; // 9.1.10 case 'table-header-columns': break; // 9.1.11 + case 'table-columns': break; // 9.1.12 case 'null-date': break; // 9.4.2 TODO: date1904 case 'graphic-properties': break; // 17.21 case 'calculation-settings': break; // 9.4.1 case 'named-expressions': break; // 9.4.11 - case 'named-range': break; // 9.4.12 case 'label-range': break; // 9.4.9 case 'label-ranges': break; // 9.4.10 case 'named-expression': break; // 9.4.13 @@ -32493,24 +36870,28 @@ var parse_content_xml = (function() { case 'line-break': break; // 6.1.5 case 'span': break; // 6.1.7 case 'p': case '文本串': // 5.1.3 - if(Rn[1]==='/') textp = (textp.length > 0 ? textp + "\n" : "") + parse_text_p(str.slice(textpidx,Rn.index), textptag); - else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; } + if(['master-styles'].indexOf(state[state.length-1][0]) > -1) break; + if(Rn[1]==='/' && (!ctag || !ctag['string-value'])) { + var ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag); + textp = (textp.length > 0 ? textp + "\n" : "") + ptp[0]; + } else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; } break; // + case 's': break; // case 'database-range': // 9.4.15 if(Rn[1]==='/') break; try { - var AutoFilter = ods_to_csf_range_3D(parsexmltag(Rn[0])['target-range-address']); - Sheets[AutoFilter[0]]['!autofilter'] = { ref: AutoFilter[1] }; + _Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']); + Sheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] }; } catch(e) {/* empty */} break; - case 's': break; // case 'date': break; // <*:date> case 'object': break; // 10.4.6.2 case 'title': case '标题': break; // <*:title> OR case 'desc': break; // <*:desc> + case 'binary-data': break; // 10.4.5 TODO: b64 blob /* 9.2 Advanced Tables */ case 'table-source': break; // 9.2.6 @@ -32560,9 +36941,12 @@ var parse_content_xml = (function() { /* TODO: FODS Properties */ case 'initial-creator': case 'creation-date': + case 'print-date': case 'generator': case 'document-statistic': case 'user-defined': + case 'editing-duration': + case 'editing-cycles': break; /* TODO: FODS Config */ @@ -32613,39 +36997,57 @@ var parse_content_xml = (function() { case 'properties': break; // 13.7 case 'property': break; // 13.8 - case 'a': break; // 6.1.8 hyperlink + case 'a': // 6.1.8 hyperlink + if(Rn[1]!== '/') { + atag = parsexmltag(Rn[0], false); + if(!atag.href) break; + atag.Target = unescapexml(atag.href); delete atag.href; + if(atag.Target.charAt(0) == "#" && atag.Target.indexOf(".") > -1) { + _Ref = ods_to_csf_3D(atag.Target.slice(1)); + atag.Target = "#" + _Ref[0] + "!" + _Ref[1]; + } else if(atag.Target.match(/^\.\.[\\\/]/)) atag.Target = atag.Target.slice(3); + } + break; /* non-standard */ case 'table-protection': break; case 'data-pilot-grand-total': break; // ', + '', + '', + '', + '', + '', + '', + '' + ].join(""); + + var payload = '' + master_styles + ''; + + return function wso() { + return XML_HEADER + payload; }; })(); var write_content_ods = (function() { + /* 6.1.2 White Space Characters */ + var write_text_p = function(text) { + return escapexml(text) + .replace(/ +/g, function($$){return '';}) + .replace(/\t/g, "") + .replace(/\n/g, "") + .replace(/^ /, "").replace(/ $/, ""); + }; + var null_cell_xml = ' \n'; var covered_cell_xml = ' \n'; - var write_ws = function(ws, wb, i, opts) { + var write_ws = function(ws, wb, i) { /* Section 9 Tables */ var o = []; - o.push(' \n'); - var R=0,C=0, range = decode_range(ws['!ref']); + o.push(' \n'); + var R=0,C=0, range = decode_range(ws['!ref']||"A1"); var marr = ws['!merges'] || [], mi = 0; var dense = Array.isArray(ws); - for(R = 0; R < range.s.r; ++R) o.push(' \n'); + if(ws["!cols"]) { + for(C = 0; C <= range.e.c; ++C) o.push(' \n'); + } + var H = "", ROWS = ws["!rows"]||[]; + for(R = 0; R < range.s.r; ++R) { + H = ROWS[R] ? ' table:style-name="ro' + ROWS[R].ods + '"' : ""; + o.push(' \n'); + } for(; R <= range.e.r; ++R) { - o.push(' \n'); + H = ROWS[R] ? ' table:style-name="ro' + ROWS[R].ods + '"' : ""; + o.push(' \n'); for(C=0; C < range.s.c; ++C) o.push(null_cell_xml); for(; C <= range.e.c; ++C) { var skip = false, ct = {}, textp = ""; @@ -32689,7 +37133,7 @@ var write_content_ods = (function() { if(cell && cell.f) { ct['table:formula'] = escapexml(csf_to_ods_formula(cell.f)); if(cell.F) { - if(cell.F.substr(0, ref.length) == ref) { + if(cell.F.slice(0, ref.length) == ref) { var _Fref = decode_range(cell.F); ct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1); ct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1); @@ -32709,7 +37153,7 @@ var write_content_ods = (function() { ct['office:value'] = (cell.v||0); break; case 's': case 'str': - textp = escapexml(cell.v); + textp = cell.v == null ? "" : cell.v; ct['office:value-type'] = "string"; break; case 'd': @@ -32721,7 +37165,15 @@ var write_content_ods = (function() { //case 'e': default: o.push(null_cell_xml); continue; } - o.push(' ' + writextag('table:table-cell', writextag('text:p', textp, {}), ct) + '\n'); + var text_p = write_text_p(textp); + if(cell.l && cell.l.Target) { + var _tgt = cell.l.Target; + _tgt = _tgt.charAt(0) == "#" ? "#" + csf_to_ods_3D(_tgt.slice(1)) : _tgt; + // TODO: choose correct parent path format based on link delimiters + if(_tgt.charAt(0) != "#" && !_tgt.match(/^\w+:/)) _tgt = '../' + _tgt; + text_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, "&")}); + } + o.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\n'); } o.push(' \n'); } @@ -32729,8 +37181,9 @@ var write_content_ods = (function() { return o.join(""); }; - var write_automatic_styles_ods = function(o) { + var write_automatic_styles_ods = function(o, wb) { o.push(' \n'); + o.push(' \n'); o.push(' \n'); o.push(' /\n'); @@ -32738,7 +37191,52 @@ var write_content_ods = (function() { o.push(' /\n'); o.push(' \n'); o.push(' \n'); + + /* column styles */ + var cidx = 0; + wb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) { + if(!ws) return; + if(ws["!cols"]) { + for(var C = 0; C < ws["!cols"].length; ++C) if(ws["!cols"][C]) { + var colobj = ws["!cols"][C]; + if(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue; + process_col(colobj); + colobj.ods = cidx; + var w = ws["!cols"][C].wpx + "px"; + o.push(' \n'); + o.push(' \n'); + o.push(' \n'); + ++cidx; + } + } + }); + + /* row styles */ + var ridx = 0; + wb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) { + if(!ws) return; + if(ws["!rows"]) { + for(var R = 0; R < ws["!rows"].length; ++R) if(ws["!rows"][R]) { + ws["!rows"][R].ods = ridx; + var h = ws["!rows"][R].hpx + "px"; + o.push(' \n'); + o.push(' \n'); + o.push(' \n'); + ++ridx; + } + } + }); + + /* table */ + o.push(' \n'); + o.push(' \n'); + o.push(' \n'); + + /* table cells, text */ o.push(' \n'); + + /* page-layout */ + o.push(' \n'); }; @@ -32786,13 +37284,17 @@ var write_content_ods = (function() { }); var fods = wxt_helper({ - 'xmlns:config':"urn:oasis:names:tc:opendocument:xmlns:config:1.0", - 'office:mimetype':"application/vnd.oasis.opendocument.spreadsheet" + 'xmlns:config': "urn:oasis:names:tc:opendocument:xmlns:config:1.0", + 'office:mimetype': "application/vnd.oasis.opendocument.spreadsheet" }); - if(opts.bookType == "fods") o.push('\n'); - else o.push('\n'); - write_automatic_styles_ods(o); + if(opts.bookType == "fods") { + o.push('\n'); + o.push(write_meta_ods().replace(/office:document-meta/g, "office:meta")); + // TODO: settings (equiv of settings.xml for ODS) + } else o.push('\n'); + // o.push(' \n'); + write_automatic_styles_ods(o, wb); o.push(' \n'); o.push(' \n'); for(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts)); @@ -32807,62 +37309,623 @@ var write_content_ods = (function() { function write_ods(wb, opts) { if(opts.bookType == "fods") return write_content_ods(wb, opts); -var zip = new jszip$$1(); + var zip = zip_new(); var f = ""; var manifest = []; var rdf = []; - /* 3:3.3 and 2:2.2.4 */ + /* Part 3 Section 3.3 MIME Media Type */ f = "mimetype"; - zip.file(f, "application/vnd.oasis.opendocument.spreadsheet"); + zip_add_file(zip, f, "application/vnd.oasis.opendocument.spreadsheet"); /* Part 1 Section 2.2 Documents */ f = "content.xml"; - zip.file(f, write_content_ods(wb, opts)); + zip_add_file(zip, f, write_content_ods(wb, opts)); manifest.push([f, "text/xml"]); rdf.push([f, "ContentFile"]); /* TODO: these are hard-coded styles to satiate excel */ f = "styles.xml"; - zip.file(f, write_styles_ods(wb, opts)); + zip_add_file(zip, f, write_styles_ods(wb, opts)); manifest.push([f, "text/xml"]); rdf.push([f, "StylesFile"]); - /* Part 3 Section 6 Metadata Manifest File */ - f = "manifest.rdf"; - zip.file(f, write_rdf(rdf, opts)); - manifest.push([f, "application/rdf+xml"]); - /* TODO: this is hard-coded to satiate excel */ f = "meta.xml"; - zip.file(f, write_meta_ods(wb, opts)); + zip_add_file(zip, f, XML_HEADER + write_meta_ods()); manifest.push([f, "text/xml"]); rdf.push([f, "MetadataFile"]); - /* Part 3 Section 4 Manifest File */ - f = "META-INF/manifest.xml"; - zip.file(f, write_manifest(manifest, opts)); + /* Part 3 Section 6 Metadata Manifest File */ + f = "manifest.rdf"; + zip_add_file(zip, f, write_rdf(rdf/*, opts*/)); + manifest.push([f, "application/rdf+xml"]); + + /* Part 3 Section 4 Manifest File */ + f = "META-INF/manifest.xml"; + zip_add_file(zip, f, write_manifest(manifest/*, opts*/)); + + return zip; +} + +var NUMBERS = (function() { + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __markAsModule = function(target) { + return __defProp(target, "__esModule", { value: true }); + }; + var __export = function(target, all) { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); + }; + var __reExport = function(target, module, copyDefault, desc) { + if (module && typeof module === "object" || typeof module === "function") + for (var keys = __getOwnPropNames(module), i = 0, n = keys.length, key; i < n; i++) { + key = keys[i]; + if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default")) + __defProp(target, key, { get: function(k) { + return module[k]; + }.bind(null, key), enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable }); + } + return target; + }; + var __toCommonJS = /* @__PURE__ */ function(cache) { + return function(module, temp) { + return cache && cache.get(module) || (temp = __reExport(__markAsModule({}), module, 1), cache && cache.set(module, temp), temp); + }; + }(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0); + + // 83_numbers.ts + var numbers_exports = {}; + __export(numbers_exports, { + parse_numbers: function() { + return numbers_default; + } + }); + + // src/util.ts + var u8_to_dataview = function(array) { + return new DataView(array.buffer, array.byteOffset, array.byteLength); + }; + var u8str = function(u8) { + return typeof TextDecoder != "undefined" ? new TextDecoder().decode(u8) : utf8read(a2s(u8)); + }; + var u8concat = function(u8a) { + var len = u8a.reduce(function(acc, x) { + return acc + x.length; + }, 0); + var out = new Uint8Array(len); + var off = 0; + u8a.forEach(function(u8) { + out.set(u8, off); + off += u8.length; + }); + return out; + }; + var popcnt = function(x) { + x -= x >> 1 & 1431655765; + x = (x & 858993459) + (x >> 2 & 858993459); + return (x + (x >> 4) & 252645135) * 16843009 >>> 24; + }; + + // src/proto.ts + function parse_varint49(buf, ptr) { + var l = ptr ? ptr[0] : 0; + var usz = buf[l] & 127; + varint: + if (buf[l++] >= 128) { + usz |= (buf[l] & 127) << 7; + if (buf[l++] < 128) + break varint; + usz |= (buf[l] & 127) << 14; + if (buf[l++] < 128) + break varint; + usz |= (buf[l] & 127) << 21; + if (buf[l++] < 128) + break varint; + usz += (buf[l] & 127) * Math.pow(2, 28); + ++l; + if (buf[l++] < 128) + break varint; + usz += (buf[l] & 127) * Math.pow(2, 35); + ++l; + if (buf[l++] < 128) + break varint; + usz += (buf[l] & 127) * Math.pow(2, 42); + ++l; + if (buf[l++] < 128) + break varint; + } + if (ptr) + ptr[0] = l; + return usz; + } + function varint_to_i32(buf) { + var l = 0, i32 = buf[l] & 127; + varint: + if (buf[l++] >= 128) { + i32 |= (buf[l] & 127) << 7; + if (buf[l++] < 128) + break varint; + i32 |= (buf[l] & 127) << 14; + if (buf[l++] < 128) + break varint; + i32 |= (buf[l] & 127) << 21; + if (buf[l++] < 128) + break varint; + i32 |= (buf[l] & 127) << 28; + } + return i32; + } + function parse_shallow(buf) { + var out = [], ptr = [0]; + while (ptr[0] < buf.length) { + var off = ptr[0]; + var num = parse_varint49(buf, ptr); + var type = num & 7; + num = Math.floor(num / 8); + var len = 0; + var res; + if (num == 0) + break; + switch (type) { + case 0: + { + var l = ptr[0]; + while (buf[ptr[0]++] >= 128) + ; + res = buf.slice(l, ptr[0]); + } + break; + case 5: + len = 4; + res = buf.slice(ptr[0], ptr[0] + len); + ptr[0] += len; + break; + case 1: + len = 8; + res = buf.slice(ptr[0], ptr[0] + len); + ptr[0] += len; + break; + case 2: + len = parse_varint49(buf, ptr); + res = buf.slice(ptr[0], ptr[0] + len); + ptr[0] += len; + break; + case 3: + case 4: + default: + throw new Error("PB Type ".concat(type, " for Field ").concat(num, " at offset ").concat(off)); + } + var v = { offset: off, data: res, type: type }; + if (out[num] == null) + out[num] = [v]; + else + out[num].push(v); + } + return out; + } + function mappa(data, cb) { + if (!data) + return []; + return data.map(function(d) { + var _a; + try { + return cb(d.data); + } catch (e) { + var m = (_a = e.message) == null ? void 0 : _a.match(/at offset (\d+)/); + if (m) + e.message = e.message.replace(/at offset (\d+)/, "at offset " + (+m[1] + d.offset)); + throw e; + } + }); + } - return zip; -} + // src/frame.ts + function deframe(buf) { + var out = []; + var l = 0; + while (l < buf.length) { + var t = buf[l++]; + var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16; + l += 3; + out.push(parse_snappy_chunk(t, buf.slice(l, l + len))); + l += len; + } + if (l !== buf.length) + throw new Error("data is not a valid framed stream!"); + return u8concat(out); + } + function parse_snappy_chunk(type, buf) { + if (type != 0) + throw new Error("Unexpected Snappy chunk type ".concat(type)); + var ptr = [0]; + var usz = parse_varint49(buf, ptr); + var chunks = []; + while (ptr[0] < buf.length) { + var tag = buf[ptr[0]] & 3; + if (tag == 0) { + var len = buf[ptr[0]++] >> 2; + if (len < 60) + ++len; + else { + var c = len - 59; + len = buf[ptr[0]]; + if (c > 1) + len |= buf[ptr[0] + 1] << 8; + if (c > 2) + len |= buf[ptr[0] + 2] << 16; + if (c > 3) + len |= buf[ptr[0] + 3] << 24; + len >>>= 0; + len++; + ptr[0] += c; + } + chunks.push(buf.slice(ptr[0], ptr[0] + len)); + ptr[0] += len; + continue; + } else { + var offset = 0, length = 0; + if (tag == 1) { + length = (buf[ptr[0]] >> 2 & 7) + 4; + offset = (buf[ptr[0]++] & 224) << 3; + offset |= buf[ptr[0]++]; + } else { + length = (buf[ptr[0]++] >> 2) + 1; + if (tag == 2) { + offset = buf[ptr[0]] | buf[ptr[0] + 1] << 8; + ptr[0] += 2; + } else { + offset = (buf[ptr[0]] | buf[ptr[0] + 1] << 8 | buf[ptr[0] + 2] << 16 | buf[ptr[0] + 3] << 24) >>> 0; + ptr[0] += 4; + } + } + chunks = [u8concat(chunks)]; + if (offset == 0) + throw new Error("Invalid offset 0"); + if (offset > chunks[0].length) + throw new Error("Invalid offset beyond length"); + if (length >= offset) { + chunks.push(chunks[0].slice(-offset)); + length -= offset; + while (length >= chunks[chunks.length - 1].length) { + chunks.push(chunks[chunks.length - 1]); + length -= chunks[chunks.length - 1].length; + } + } + chunks.push(chunks[0].slice(-offset, -offset + length)); + } + } + var o = u8concat(chunks); + if (o.length != usz) + throw new Error("Unexpected length: ".concat(o.length, " != ").concat(usz)); + return o; + } -/* actual implementation elsewhere, wrappers are for read/write */ -function write_obj_str(factory) { - return function write_str(wb, o) { - var idx = 0; - for(var i=0;i 0 }; + break; + case 7: + ret = { t: "n", v: ieee }; + break; + case 8: + ret = { t: "e", v: 0 }; + break; + case 9: + { + if (ridx > -1) + ret = { t: "s", v: rsst[ridx] }; + else if (sidx > -1) + ret = { t: "s", v: sst[sidx] }; + else if (!isNaN(ieee)) + ret = { t: "n", v: ieee }; + else + throw new Error("Unsupported cell type ".concat(buf.slice(0, 4))); + } + break; + default: + throw new Error("Unsupported cell type ".concat(buf.slice(0, 4))); + } + return ret; + } + function parse(buf, sst, rsst) { + var version = buf[0]; + switch (version) { + case 3: + case 4: + return parseit(buf, sst, rsst, version); + default: + throw new Error("Unsupported pre-BNC version ".concat(version)); + } + } -var write_htm_str = write_obj_str(HTML_); -var write_csv_str = write_obj_str({from_sheet:sheet_to_csv}); -var write_slk_str = write_obj_str(SYLK); -var write_dif_str = write_obj_str(DIF); -var write_prn_str = write_obj_str(PRN); -var write_txt_str = write_obj_str({from_sheet:sheet_to_txt}); + // src/numbers.ts + var encode_col = function(C) { + var s = ""; + for (++C; C; C = Math.floor((C - 1) / 26)) + s = String.fromCharCode((C - 1) % 26 + 65) + s; + return s; + }; + var encode_cell = function(c) { + return "".concat(encode_col(c.c)).concat(c.r + 1); + }; + var encode_range = function(r) { + return encode_cell(r.s) + ":" + encode_cell(r.e); + }; + var book_new = function() { + return { Sheets: {}, SheetNames: [] }; + }; + var book_append_sheet = function(wb, ws, name) { + if (!name) + for (var i = 1; i < 9999; ++i) { + if (wb.SheetNames.indexOf(name = "Sheet ".concat(i)) == -1) + break; + } + else if (wb.SheetNames.indexOf(name) > -1) + for (var i = 1; i < 9999; ++i) { + if (wb.SheetNames.indexOf("".concat(name, "_").concat(i)) == -1) { + name = "".concat(name, "_").concat(i); + break; + } + } + wb.SheetNames.push(name); + wb.Sheets[name] = ws; + }; + function parse_numbers(cfb) { + var out = []; + cfb.FileIndex.forEach(function(s) { + if (!s.name.match(/\.iwa$/)) + return; + var o; + try { + o = deframe(s.content); + } catch (e) { + return console.log("?? " + s.content.length + " " + (e.message || e)); + } + var packets; + try { + packets = parse_iwa(o); + } catch (e) { + return console.log("## " + (e.message || e)); + } + packets.forEach(function(packet) { + out[+packet.id] = packet.messages; + }); + }); + if (!out.length) + throw new Error("File has no messages"); + var docroot; + out.forEach(function(iwams) { + iwams.forEach(function(iwam) { + var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0; + if (mtype == 1) { + if (!docroot) + docroot = iwam; + else + throw new Error("Document has multiple roots"); + } + }); + }); + if (!docroot) + throw new Error("Cannot find Document root"); + return parse_docroot(out, docroot); + } + var numbers_default = parse_numbers; + function parse_Reference(buf) { + var pb = parse_shallow(buf); + return parse_varint49(pb[1][0].data); + } + function parse_TST_TableDataList(M, root) { + var pb = parse_shallow(root.data); + var type = varint_to_i32(pb[1][0].data); + var entries = pb[3]; + var data = []; + (entries || []).forEach(function(entry) { + var le = parse_shallow(entry.data); + var key = varint_to_i32(le[1][0].data) >>> 0; + switch (type) { + case 1: + data[key] = u8str(le[3][0].data); + break; + case 8: + { + var rt = M[parse_Reference(le[9][0].data)][0]; + var rtp = parse_shallow(rt.data); + var rtpref = M[parse_Reference(rtp[1][0].data)][0]; + var mtype = varint_to_i32(rtpref.meta[1][0].data); + if (mtype != 2001) + throw new Error("2000 unexpected reference to ".concat(mtype)); + var tswpsa = parse_shallow(rtpref.data); + data[key] = tswpsa[3].map(function(x) { + return u8str(x.data); + }).join(""); + } + break; + } + }); + return data; + } + function parse_TST_TileRowInfo(u8) { + var pb = parse_shallow(u8); + var R = varint_to_i32(pb[1][0].data) >>> 0; + var storage = pb[3][0].data; + var offsets = u8_to_dataview(pb[4][0].data); + var cells = []; + for (var C = 0; C < offsets.byteLength / 2; ++C) { + var off = offsets.getUint16(C * 2, true); + if (off > storage.length) + continue; + cells[C] = storage.subarray(off, offsets.getUint16(C * 2 + 2, true)); + } + return { R: R, cells: cells }; + } + function parse_TST_Tile(M, root) { + var pb = parse_shallow(root.data); + var ri = mappa(pb[5], parse_TST_TileRowInfo); + return ri.reduce(function(acc, x) { + if (!acc[x.R]) + acc[x.R] = []; + x.cells.forEach(function(cell, C) { + if (acc[x.R][C]) + throw new Error("Duplicate cell r=".concat(x.R, " c=").concat(C)); + acc[x.R][C] = cell; + }); + return acc; + }, []); + } + function parse_TST_TableModelArchive(M, root, ws) { + var _a; + var pb = parse_shallow(root.data); + var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } }; + range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1; + if (range.e.r < 0) + throw new Error("Invalid row varint ".concat(pb[6][0].data)); + range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1; + if (range.e.c < 0) + throw new Error("Invalid col varint ".concat(pb[7][0].data)); + ws["!ref"] = encode_range(range); + { + var store = parse_shallow(pb[4][0].data); + var sst = parse_TST_TableDataList(M, M[parse_Reference(store[4][0].data)][0]); + var rsst = ((_a = store[17]) == null ? void 0 : _a[0]) ? parse_TST_TableDataList(M, M[parse_Reference(store[17][0].data)][0]) : []; + { + var tile = parse_shallow(store[3][0].data); + var tiles = []; + tile[1].forEach(function(t) { + var tl = parse_shallow(t.data); + var ref = M[parse_Reference(tl[2][0].data)][0]; + var mtype = varint_to_i32(ref.meta[1][0].data); + if (mtype != 6002) + throw new Error("6001 unexpected reference to ".concat(mtype)); + tiles.push({ id: varint_to_i32(tl[1][0].data), ref: parse_TST_Tile(M, ref) }); + }); + tiles.forEach(function(tile2) { + tile2.ref.forEach(function(row, R) { + row.forEach(function(buf, C) { + var addr = encode_cell({ r: R, c: C }); + var res = parse(buf, sst, rsst); + if (res) + ws[addr] = res; + }); + }); + }); + } + } + } + function parse_TST_TableInfoArchive(M, root) { + var pb = parse_shallow(root.data); + var out = { "!ref": "A1" }; + var tableref = M[parse_Reference(pb[2][0].data)]; + var mtype = varint_to_i32(tableref[0].meta[1][0].data); + if (mtype != 6001) + throw new Error("6000 unexpected reference to ".concat(mtype)); + parse_TST_TableModelArchive(M, tableref[0], out); + return out; + } + function parse_sheetroot(M, root) { + var _a; + var pb = parse_shallow(root.data); + var out = { + name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : "", + sheets: [] + }; + var shapeoffs = mappa(pb[2], parse_Reference); + shapeoffs.forEach(function(off) { + M[off].forEach(function(m) { + var mtype = varint_to_i32(m.meta[1][0].data); + if (mtype == 6e3) + out.sheets.push(parse_TST_TableInfoArchive(M, m)); + }); + }); + return out; + } + function parse_docroot(M, root) { + var out = book_new(); + var pb = parse_shallow(root.data); + var sheetoffs = mappa(pb[1], parse_Reference); + sheetoffs.forEach(function(off) { + M[off].forEach(function(m) { + var mtype = varint_to_i32(m.meta[1][0].data); + if (mtype == 2) { + var root2 = parse_sheetroot(M, m); + root2.sheets.forEach(function(sheet) { + book_append_sheet(out, sheet, root2.name); + }); + } + }); + }); + if (out.SheetNames.length == 0) + throw new Error("Empty NUMBERS file"); + return out; + } + return __toCommonJS(numbers_exports); +})(); +/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */ function fix_opts_func(defaults) { return function fix_opts(opts) { for(var i = 0; i != defaults.length; ++i) { @@ -32873,7 +37936,8 @@ function fix_opts_func(defaults) { }; } -var fix_read_opts = fix_opts_func([ +var fix_read_opts = function(opts) { +fix_opts_func([ ['cellNF', false], /* emit cell number format string as .z */ ['cellHTML', true], /* emit html string as .h */ ['cellFormula', true], /* emit formulae as .f */ @@ -32892,8 +37956,8 @@ var fix_read_opts = fix_opts_func([ ['password',''], /* password */ ['WTF', false] /* WTF mode (throws errors) */ -]); - +])(opts); +}; var fix_write_opts = fix_opts_func([ ['cellDates', false], /* write date cells with type `d` */ @@ -32911,8 +37975,7 @@ function get_sheet_type(n) { if(RELS.CS && n == RELS.CS) return "chart"; if(RELS.DS && n == RELS.DS) return "dialog"; if(RELS.MS && n == RELS.MS) return "macro"; - if(!n || !n.length) return "sheet"; - return n; + return (n && n.length) ? n : "sheet"; } function safe_parse_wbrels(wbrels, sheets) { if(!wbrels) return 0; @@ -32922,43 +37985,71 @@ function safe_parse_wbrels(wbrels, sheets) { return !wbrels || wbrels.length === 0 ? null : wbrels; } -function safe_parse_sheet(zip, path, relsPath, sheet, sheetRels, sheets, stype, opts, wb, themes, styles) { +function safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, stype, opts, wb, themes, styles) { try { sheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path); var data = getzipdata(zip, path); + var _ws; switch(stype) { - case 'sheet': sheets[sheet]=parse_ws(data, path, opts,sheetRels[sheet], wb, themes, styles); break; - case 'chart': - var cs = parse_cs(data, path, opts,sheetRels[sheet], wb, themes, styles); - sheets[sheet] = cs; - if(!cs || !cs['!chart']) break; - var dfile = resolve_path(cs['!chart'].Target, path); + case 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break; + case 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); + if(!_ws || !_ws['!drawel']) break; + var dfile = resolve_path(_ws['!drawel'].Target, path); var drelsp = get_rels_path(dfile); - var draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip,drelsp,true), dfile)); + var draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile)); var chartp = resolve_path(draw, dfile); var crelsp = get_rels_path(chartp); - cs = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp,true), chartp), wb, cs); + _ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws); break; - case 'macro': sheets[sheet]=parse_ms(data, path, opts,sheetRels[sheet], wb, themes, styles); break; - case 'dialog': sheets[sheet]=parse_ds(data, path, opts,sheetRels[sheet], wb, themes, styles); break; + case 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break; + case 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break; + default: throw new Error("Unrecognized sheet type " + stype); } + sheets[sheet] = _ws; + + /* scan rels for comments */ + var comments = []; + if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) { + if(sheetRels[sheet][n].Type == RELS.CMNT) { + var dfile = resolve_path(sheetRels[sheet][n].Target, path); + comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts); + if(!comments || !comments.length) return; + sheet_insert_comments(_ws, comments); + } + }); } catch(e) { if(opts.WTF) throw e; } } -var nodirs = function nodirs(x){return x.slice(-1) != '/';}; +function strip_front_slash(x) { return x.charAt(0) == '/' ? x.slice(1) : x; } + function parse_zip(zip, opts) { make_ssf(SSF); opts = opts || {}; fix_read_opts(opts); - reset_cp(); /* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */ if(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts); /* UOC */ if(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts); + /* Numbers */ + if(safegetzipfile(zip, 'Index/Document.iwa')) { + if(typeof Uint8Array == "undefined") throw new Error('NUMBERS file parsing requires Uint8Array support'); + if(typeof NUMBERS != "undefined") { + if(zip.FileIndex) return NUMBERS.parse_numbers(zip); + var _zip = CFB.utils.cfb_new(); + zipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); }); + return NUMBERS.parse_numbers(_zip); + } + throw new Error('Unsupported NUMBERS file'); + } + if(!safegetzipfile(zip, '[Content_Types].xml')) { + if(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file'); + if(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file'); + throw new Error('Unsupported ZIP file'); + } - var entries = keys(zip.files).filter(nodirs).sort(); - var dir = parse_ct((getzipstr(zip, '[Content_Types].xml')), opts); + var entries = zipentries(zip); + var dir = parse_ct((getzipstr(zip, '[Content_Types].xml'))); var xlsb = false; var sheets, binname; if(dir.workbooks.length === 0) { @@ -32972,36 +38063,42 @@ function parse_zip(zip, opts) { xlsb = true; } if(dir.workbooks[0].slice(-3) == "bin") xlsb = true; - if(xlsb) set_cp(1200); var themes = ({}); var styles = ({}); if(!opts.bookSheets && !opts.bookProps) { strs = []; - if(dir.sst) strs=parse_sst(getzipdata(zip, dir.sst.replace(/^\//,'')), dir.sst, opts); + if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; } if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"",dir.themes[0], opts); - if(dir.style) styles = parse_sty(getzipdata(zip, dir.style.replace(/^\//,'')),dir.style, themes, opts); + if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts); } - var wb = parse_wb(getzipdata(zip, dir.workbooks[0].replace(/^\//,'')), dir.workbooks[0], opts); + /*var externbooks = */dir.links.map(function(link) { + try { + var rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link); + return parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts); + } catch(e) {} + }); + + var wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts); var props = {}, propdata = ""; - if(dir.coreprops.length !== 0) { - propdata = getzipstr(zip, dir.coreprops[0].replace(/^\//,''), true); + if(dir.coreprops.length) { + propdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true); if(propdata) props = parse_core_props(propdata); if(dir.extprops.length !== 0) { - propdata = getzipstr(zip, dir.extprops[0].replace(/^\//,''), true); - if(propdata) parse_ext_props(propdata, props); + propdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true); + if(propdata) parse_ext_props(propdata, props, opts); } } var custprops = {}; if(!opts.bookSheets || opts.bookProps) { if (dir.custprops.length !== 0) { - propdata = getzipstr(zip, dir.custprops[0].replace(/^\//,''), true); + propdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true); if(propdata) custprops = parse_cust_props(propdata, opts); } } @@ -33017,7 +38114,7 @@ function parse_zip(zip, opts) { sheets = {}; var deps = {}; - if(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, dir.calcchain.replace(/^\//,'')),dir.calcchain,opts); + if(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts); var i=0; var sheetRels = ({}); @@ -33033,26 +38130,41 @@ function parse_zip(zip, opts) { } var wbext = xlsb ? "bin" : "xml"; - var wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels'; + var wbrelsi = dir.workbooks[0].lastIndexOf("/"); + var wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + "_rels/" + dir.workbooks[0].slice(wbrelsi+1) + ".rels").replace(/^\//,""); + if(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels'; var wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile); if(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets); + /* Numbers iOS hack */ var nmode = (getzipdata(zip,"xl/worksheets/sheet.xml",true))?1:0; - for(i = 0; i != props.Worksheets; ++i) { + wsloop: for(i = 0; i != props.Worksheets; ++i) { var stype = "sheet"; if(wbrels && wbrels[i]) { path = 'xl/' + (wbrels[i][1]).replace(/[\/]?xl\//, ""); + if(!safegetzipfile(zip, path)) path = wbrels[i][1]; + if(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\/.*$/,"") + wbrels[i][1]; stype = wbrels[i][2]; } else { path = 'xl/worksheets/sheet'+(i+1-nmode)+"." + wbext; path = path.replace(/sheet0\./,"sheet."); } relsPath = path.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels"); - safe_parse_sheet(zip, path, relsPath, props.SheetNames[i], sheetRels, sheets, stype, opts, wb, themes, styles); + if(opts && opts.sheets != null) switch(typeof opts.sheets) { + case "number": if(i != opts.sheets) continue wsloop; break; + case "string": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break; + default: if(Array.isArray && Array.isArray(opts.sheets)) { + var snjseen = false; + for(var snj = 0; snj != opts.sheets.length; ++snj) { + if(typeof opts.sheets[snj] == "number" && opts.sheets[snj] == i) snjseen=1; + if(typeof opts.sheets[snj] == "string" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1; + } + if(!snjseen) continue wsloop; + } + } + safe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles); } - if(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts); - out = ({ Directory: dir, Workbook: wb, @@ -33066,50 +38178,68 @@ function parse_zip(zip, opts) { Themes: themes, SSF: SSF.get_table() }); - if(opts.bookFiles) { - out.keys = entries; - out.files = zip.files; + if(opts && opts.bookFiles) { + if(zip.files) { + out.keys = entries; + out.files = zip.files; + } else { + out.keys = []; + out.files = {}; + zip.FullPaths.forEach(function(p, idx) { + p = p.replace(/^Root Entry[\/]/, ""); + out.keys.push(p); + out.files[p] = zip.FileIndex[idx]; + }); + } } - if(opts.bookVBA) { - if(dir.vba.length > 0) out.vbaraw = getzipdata(zip,dir.vba[0].replace(/^\//,''),true); - else if(dir.defaults && dir.defaults.bin === 'application/vnd.ms-office.vbaProject') out.vbaraw = getzipdata(zip,'xl/vbaProject.bin',true); + if(opts && opts.bookVBA) { + if(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true); + else if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true); } return out; } -/* references to [MS-OFFCRYPTO] */ -function parse_xlsxcfb(cfb, opts) { - var f = 'Version'; - var data = cfb.find(f); - if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); - var version = parse_DataSpaceVersionInfo(data.content); +/* [MS-OFFCRYPTO] 2.1.1 */ +function parse_xlsxcfb(cfb, _opts) { + var opts = _opts || {}; + var f = 'Workbook', data = CFB.find(cfb, f); + try { + f = '/!DataSpaces/Version'; + data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); + /*var version = */parse_DataSpaceVersionInfo(data.content); /* 2.3.4.1 */ - f = 'DataSpaceMap'; - data = cfb.find(f); - if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); + f = '/!DataSpaces/DataSpaceMap'; + data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); var dsm = parse_DataSpaceMap(data.content); - if(dsm.length != 1 || dsm[0].comps.length != 1 || dsm[0].comps[0].t != 0 || dsm[0].name != "StrongEncryptionDataSpace" || dsm[0].comps[0].v != "EncryptedPackage") + if(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== "StrongEncryptionDataSpace" || dsm[0].comps[0].v !== "EncryptedPackage") throw new Error("ECMA-376 Encrypted file bad " + f); - f = 'StrongEncryptionDataSpace'; - data = cfb.find(f); - if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); + /* 2.3.4.2 */ + f = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace'; + data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); var seds = parse_DataSpaceDefinition(data.content); if(seds.length != 1 || seds[0] != "StrongEncryptionTransform") throw new Error("ECMA-376 Encrypted file bad " + f); /* 2.3.4.3 */ - f = '!Primary'; - data = cfb.find(f); - if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); - var hdr = parse_Primary(data.content); - - f = 'EncryptionInfo'; - data = cfb.find(f); - if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); + f = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary'; + data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); + /*var hdr = */parse_Primary(data.content); + } catch(e) {} + + f = '/EncryptionInfo'; + data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); var einfo = parse_EncryptionInfo(data.content); + /* 2.3.4.4 */ + f = '/EncryptedPackage'; + data = CFB.find(cfb, f); if(!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f); + +/*global decrypt_agile */ +if(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || "", opts); +/*global decrypt_std76 */ +if(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || "", opts); throw new Error("File is password-protected"); } @@ -33127,11 +38257,13 @@ function write_zip(wb, opts) { } opts.rels = {}; opts.wbrels = {}; opts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0; + if(browser_has_Map) opts.revStrings = new Map(); + else { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; } var wbext = opts.bookType == "xlsb" ? "bin" : "xml"; - var vbafmt = opts.bookType == "xlsb" || opts.bookType == "xlsm"; + var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1; var ct = new_ct(); fix_write_opts(opts = opts || {}); -var zip = new jszip$$1(); + var zip = zip_new(); var f = "", rId = 0; opts.cellXfs = []; @@ -33140,100 +38272,101 @@ var zip = new jszip$$1(); if(!wb.Props) wb.Props = {}; f = "docProps/core.xml"; - zip.file(f, write_core_props(wb.Props, opts)); + zip_add_file(zip, f, write_core_props(wb.Props, opts)); ct.coreprops.push(f); add_rels(opts.rels, 2, f, RELS.CORE_PROPS); f = "docProps/app.xml"; if(wb.Props && wb.Props.SheetNames){/* empty */} else if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames; - // $FlowIgnore - else wb.Props.SheetNames = wb.SheetNames.map(function(x,i) { return [(wb.Workbook.Sheets[i]||{}).Hidden != 2, x];}).filter(function(x) { return x[0]; }).map(function(x) { return x[1]; }); + else { + var _sn = []; + for(var _i = 0; _i < wb.SheetNames.length; ++_i) + if((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]); + wb.Props.SheetNames = _sn; + } wb.Props.Worksheets = wb.Props.SheetNames.length; - zip.file(f, write_ext_props(wb.Props, opts)); + zip_add_file(zip, f, write_ext_props(wb.Props, opts)); ct.extprops.push(f); add_rels(opts.rels, 3, f, RELS.EXT_PROPS); if(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) { f = "docProps/custom.xml"; - zip.file(f, write_cust_props(wb.Custprops, opts)); + zip_add_file(zip, f, write_cust_props(wb.Custprops, opts)); ct.custprops.push(f); add_rels(opts.rels, 4, f, RELS.CUST_PROPS); } - f = "xl/workbook." + wbext; - zip.file(f, write_wb(wb, f, opts)); - ct.workbooks.push(f); - add_rels(opts.rels, 1, f, RELS.WB); - for(rId=1;rId <= wb.SheetNames.length; ++rId) { var wsrels = {'!id':{}}; var ws = wb.Sheets[wb.SheetNames[rId-1]]; var _type = (ws || {})["!type"] || "sheet"; switch(_type) { - case "chart": /* - f = "xl/chartsheets/sheet" + rId + "." + wbext; - zip.file(f, write_cs(rId-1, f, opts, wb, wsrels)); - ct.charts.push(f); - add_rels(wsrels, -1, "chartsheets/sheet" + rId + "." + wbext, RELS.CS); - break; */ + case "chart": /* falls through */ default: f = "xl/worksheets/sheet" + rId + "." + wbext; - zip.file(f, write_ws(rId-1, f, opts, wb, wsrels)); + zip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels)); ct.sheets.push(f); add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]); } if(ws) { var comments = ws['!comments']; + var need_vml = false; if(comments && comments.length > 0) { var cf = "xl/comments" + rId + "." + wbext; - zip.file(cf, write_cmnt(comments, cf, opts)); + zip_add_file(zip, cf, write_cmnt(comments, cf, opts)); ct.comments.push(cf); add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT); + need_vml = true; } if(ws['!legacy']) { - zip.file("xl/drawings/vmlDrawing" + (rId) + ".vml", write_comments_vml(rId, ws['!comments'])); + if(need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + (rId) + ".vml", write_comments_vml(rId, ws['!comments'])); } delete ws['!comments']; delete ws['!legacy']; } - if(wsrels['!id'].rId1) zip.file(get_rels_path(f), write_rels(wsrels)); + if(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels)); } if(opts.Strings != null && opts.Strings.length > 0) { f = "xl/sharedStrings." + wbext; - zip.file(f, write_sst(opts.Strings, f, opts)); + zip_add_file(zip, f, write_sst(opts.Strings, f, opts)); ct.strs.push(f); add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST); } + f = "xl/workbook." + wbext; + zip_add_file(zip, f, write_wb(wb, f, opts)); + ct.workbooks.push(f); + add_rels(opts.rels, 1, f, RELS.WB); + /* TODO: something more intelligent with themes */ f = "xl/theme/theme1.xml"; - zip.file(f, write_theme(wb.Themes, opts)); + zip_add_file(zip, f, write_theme(wb.Themes, opts)); ct.themes.push(f); add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME); /* TODO: something more intelligent with styles */ f = "xl/styles." + wbext; - zip.file(f, write_sty(wb, f, opts)); + zip_add_file(zip, f, write_sty(wb, f, opts)); ct.styles.push(f); add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY); if(wb.vbaraw && vbafmt) { f = "xl/vbaProject.bin"; - zip.file(f, wb.vbaraw); + zip_add_file(zip, f, wb.vbaraw); ct.vba.push(f); add_rels(opts.wbrels, -1, "vbaProject.bin", RELS.VBA); } - zip.file("[Content_Types].xml", write_ct(ct, opts)); - zip.file('_rels/.rels', write_rels(opts.rels)); - zip.file('xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels)); + zip_add_file(zip, "[Content_Types].xml", write_ct(ct, opts)); + zip_add_file(zip, '_rels/.rels', write_rels(opts.rels)); + zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels)); delete opts.revssf; delete opts.ssf; return zip; @@ -33241,30 +38374,25 @@ f = "docProps/app.xml"; function firstbyte(f,o) { var x = ""; switch((o||{}).type || "base64") { - case 'buffer': return [f[0], f[1], f[2], f[3]]; - case 'base64': x = Base64.decode(f.substr(0,24)); break; + case 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]]; + case 'base64': x = Base64.decode(f.slice(0,12)); break; case 'binary': x = f; break; - case 'array': return [f[0], f[1], f[2], f[3]]; + case 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]]; default: throw new Error("Unrecognized type " + (o && o.type || "undefined")); } - return [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3)]; + return [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)]; } function read_cfb(cfb, opts) { - if(cfb.find("EncryptedPackage")) return parse_xlsxcfb(cfb, opts); + if(CFB.find(cfb, "EncryptedPackage")) return parse_xlsxcfb(cfb, opts); return parse_xlscfb(cfb, opts); } function read_zip(data, opts) { -var zip, d = data; + var zip, d = data; var o = opts||{}; if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64"; - switch(o.type) { - case "base64": zip = new jszip$$1(d, { base64:true }); break; - case "binary": case "array": zip = new jszip$$1(d, { base64:false }); break; - case "buffer": zip = new jszip$$1(d); break; - default: throw new Error("Unrecognized type " + o.type); - } + zip = zip_read(d, o); return parse_zip(zip, o); } @@ -33299,74 +38427,152 @@ function read_utf16(data, o) { return read_plaintext(d, o); } +function bstrify(data) { + return !data.match(/[^\x00-\x7F]/) ? data : utf8write(data); +} + +function read_prn(data, d, o, str) { + if(str) { o.type = "string"; return PRN.to_workbook(data, o); } + return PRN.to_workbook(d, o); +} + function readSync(data, opts) { - var zip, d = data, n=[0]; + reset_cp(); var o = opts||{}; + if(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = "array", o)); + var d = data, n = [0,0,0,0], str = false; + if(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; } _ssfopts = {}; if(o.dateNF) _ssfopts.dateNF = o.dateNF; if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64"; - if(o.type == "file") { o.type = "buffer"; d = _fs.readFileSync(data); } + if(o.type == "file") { o.type = has_buf ? "buffer" : "binary"; d = read_binary(data); } + if(o.type == "string") { str = true; o.type = "binary"; o.codepage = 65001; d = bstrify(data); } + if(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') { + // $FlowIgnore + var ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo="bar"; + // $FlowIgnore + if(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);} + } switch((n = firstbyte(d, o))[0]) { - case 0xD0: return read_cfb(CFB.read(d, o), o); - case 0x09: return parse_xlscfb(s2a(o.type === 'base64' ? Base64.decode(d) : d), o); + case 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break; + case 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break; case 0x3C: return parse_xlml(d, o); - case 0x49: if(n[1] == 0x44) return read_wb_ID(d, o); break; - case 0x54: if(n[1] == 0x41 && n[2] == 0x42 && n[3] == 0x4C) return DIF.to_workbook(d, o); break; - case 0x50: if(n[1] == 0x4B && n[2] < 0x20 && n[3] < 0x20) return read_zip(d, o); break; - case 0xEF: return n[3] == 0x3C ? parse_xlml(d, o) : PRN.to_workbook(d,o); - case 0xFF: if(n[1] == 0xFE){ return read_utf16(d, o); } break; - case 0x00: if(n[1] == 0x00 && n[2] >= 0x02 && n[3] == 0x00) return WK_.to_workbook(d, o); break; - case 0x03: case 0x83: case 0x8B: return DBF.to_workbook(d, o); - case 0x7B: if(n[1] == 0x5C && n[2] == 0x72 && n[3] == 0x74) throw new Error("Unsupported RTF"); break; + case 0x49: + if(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error("TIFF Image File is not a spreadsheet"); + if(n[1] === 0x44) return read_wb_ID(d, o); + break; + case 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break; + case 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str); + case 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str); + case 0xFF: + if(n[1] === 0xFE) { return read_utf16(d, o); } + else if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o); + break; + case 0x00: + if(n[1] === 0x00) { + if(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o); + if(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o); + } + break; + case 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o); + case 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break; case 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o); + case 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error("PNG Image File is not a spreadsheet"); break; } - if(n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o); - if(0x20>n[0]||n[0]>0x7F) throw new Error("Unsupported file " + n.join("|")); - return PRN.to_workbook(d, o); + if(DBF.versions.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o); + return read_prn(data, d, o, str); } function readFileSync(filename, opts) { var o = opts||{}; o.type = 'file'; return readSync(filename, o); } +function write_obj_str(factory) { + return function write_str(wb, o) { + var idx = 0; + if(o.sheet) { + if(typeof o.sheet == "number") idx = o.sheet; + else idx = wb.SheetNames.indexOf(o.sheet); + if(!wb.SheetNames[idx]) throw new Error("Sheet not found: " + o.sheet + " : " + (typeof o.sheet)); + } + return factory.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb); + }; +} + +var write_htm_str = write_obj_str(HTML_); +var write_csv_str = write_obj_str({from_sheet:sheet_to_csv}); +var write_slk_str = write_obj_str(typeof SYLK !== "undefined" ? SYLK : {}); +var write_dif_str = write_obj_str(typeof DIF !== "undefined" ? DIF : {}); +var write_prn_str = write_obj_str(typeof PRN !== "undefined" ? PRN : {}); +var write_rtf_str = write_obj_str(typeof RTF !== "undefined" ? RTF : {}); +var write_txt_str = write_obj_str({from_sheet:sheet_to_txt}); +var write_dbf_buf = write_obj_str(typeof DBF !== "undefined" ? DBF : {}); +var write_eth_str = write_obj_str(typeof ETH !== "undefined" ? ETH : {}); +var write_wk1_buf = write_obj_str(typeof WK_ !== "undefined" ? {from_sheet:WK_.sheet_to_wk1} : {}); + +function write_cfb_ctr(cfb, o) { + switch(o.type) { + case "base64": case "binary": break; + case "buffer": case "array": o.type = ""; break; + case "file": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : ""})); + case "string": throw new Error("'string' output type invalid for '" + o.bookType + "' files"); + default: throw new Error("Unrecognized type " + o.type); + } + return CFB.write(cfb, o); +} + function write_zip_type(wb, opts) { - var o = opts||{}; + var o = dup(opts||{}); var z = write_zip(wb, o); var oopts = {}; if(o.compression) oopts.compression = 'DEFLATE'; - switch(o.type) { + if(o.password) oopts.type = has_buf ? "nodebuffer" : "string"; + else switch(o.type) { case "base64": oopts.type = "base64"; break; case "binary": oopts.type = "string"; break; + case "string": throw new Error("'string' output type invalid for '" + o.bookType + "' files"); case "buffer": - case "file": oopts.type = "nodebuffer"; break; + case "file": oopts.type = has_buf ? "nodebuffer" : "string"; break; default: throw new Error("Unrecognized type " + o.type); } - if(o.type === "file") return _fs.writeFileSync(o.file, z.generate(oopts)); - return z.generate(oopts); + var out = z.FullPaths ? CFB.write(z, {fileType:"zip", type: {"nodebuffer": "buffer", "string": "binary"}[oopts.type] || oopts.type}) : z.generate(oopts); +/*jshint -W083 */ + if(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef +/*jshint +W083 */ + if(o.type === "file") return write_dl(o.file, out); + return o.type == "string" ? utf8read(out) : out; } -/* TODO: test consistency */ -function write_bstr_type(out, opts) { +function write_cfb_type(wb, opts) { + var o = opts||{}; + var cfb = write_xlscfb(wb, o); + return write_cfb_ctr(cfb, o); +} + +function write_string_type(out, opts, bom) { + if(!bom) bom = ""; + var o = bom + out; switch(opts.type) { - case "base64": return Base64.encode(out); - case "binary": return out; - case "file": return _fs.writeFileSync(opts.file, out, 'binary'); + case "base64": return Base64.encode(utf8write(o)); + case "binary": return utf8write(o); + case "string": return out; + case "file": return write_dl(opts.file, o, 'utf8'); case "buffer": { - if(has_buf) return new Buffer(out, 'binary'); - else return out.split("").map(function(c) { return c.charCodeAt(0); }); + if(has_buf) return Buffer_from(o, 'utf8'); + else return write_string_type(o, {type:'binary'}).split("").map(function(c) { return c.charCodeAt(0); }); } } throw new Error("Unrecognized type " + opts.type); } -/* TODO: test consistency */ -function write_string_type(out, opts) { +function write_stxt_type(out, opts) { switch(opts.type) { case "base64": return Base64.encode(out); case "binary": return out; - case "file": return _fs.writeFileSync(opts.file, out, 'utf8'); + case "string": return out; /* override in sheet_to_txt */ + case "file": return write_dl(opts.file, out, 'binary'); case "buffer": { - if(has_buf) return new Buffer(out, 'utf8'); + if(has_buf) return Buffer_from(out, 'binary'); else return out.split("").map(function(c) { return c.charCodeAt(0); }); } } @@ -33376,59 +38582,70 @@ function write_string_type(out, opts) { /* TODO: test consistency */ function write_binary_type(out, opts) { switch(opts.type) { + case "string": case "base64": case "binary": var bstr = ""; + // $FlowIgnore for(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]); - return opts.type == 'base64' ? Base64.encode(bstr) : bstr; - case "file": return _fs.writeFileSync(opts.file, out); + return opts.type == 'base64' ? Base64.encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr; + case "file": return write_dl(opts.file, out); case "buffer": return out; default: throw new Error("Unrecognized type " + opts.type); } } function writeSync(wb, opts) { + reset_cp(); check_wb(wb); - var o = opts||{}; + var o = dup(opts||{}); + if(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; } + if(o.type == "array") { o.type = "binary"; var out = (writeSync(wb, o)); o.type = "array"; return s2ab(out); } switch(o.bookType || 'xlsb') { case 'xml': case 'xlml': return write_string_type(write_xlml(wb, o), o); case 'slk': case 'sylk': return write_string_type(write_slk_str(wb, o), o); + case 'htm': case 'html': return write_string_type(write_htm_str(wb, o), o); - case 'txt': return write_bstr_type(write_txt_str(wb, o), o); - case 'csv': return write_string_type(write_csv_str(wb, o), o); + case 'txt': return write_stxt_type(write_txt_str(wb, o), o); + case 'csv': return write_string_type(write_csv_str(wb, o), o, "\ufeff"); case 'dif': return write_string_type(write_dif_str(wb, o), o); + case 'dbf': return write_binary_type(write_dbf_buf(wb, o), o); case 'prn': return write_string_type(write_prn_str(wb, o), o); + case 'rtf': return write_string_type(write_rtf_str(wb, o), o); + case 'eth': return write_string_type(write_eth_str(wb, o), o); case 'fods': return write_string_type(write_ods(wb, o), o); - case 'biff2': return write_binary_type(write_biff_buf(wb, o), o); + case 'wk1': return write_binary_type(write_wk1_buf(wb, o), o); + case 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o); + case 'biff2': if(!o.biff) o.biff = 2; /* falls through */ + case 'biff3': if(!o.biff) o.biff = 3; /* falls through */ + case 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o); + case 'biff5': if(!o.biff) o.biff = 5; /* falls through */ + case 'biff8': + case 'xla': + case 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o); case 'xlsx': case 'xlsm': + case 'xlam': case 'xlsb': case 'ods': return write_zip_type(wb, o); default: throw new Error ("Unrecognized bookType |" + o.bookType + "|"); } } -function resolve_book_type(o/*?WriteFileOpts*/) { - if(!o.bookType) switch(o.file.slice(o.file.lastIndexOf(".")).toLowerCase()) { - case '.xlsx': o.bookType = 'xlsx'; break; - case '.xlsm': o.bookType = 'xlsm'; break; - case '.xlsb': o.bookType = 'xlsb'; break; - case '.fods': o.bookType = 'fods'; break; - case '.xlml': o.bookType = 'xlml'; break; - case '.sylk': o.bookType = 'sylk'; break; - case '.html': o.bookType = 'html'; break; - case '.xls': o.bookType = 'biff2'; break; - case '.xml': o.bookType = 'xml'; break; - case '.ods': o.bookType = 'ods'; break; - case '.csv': o.bookType = 'csv'; break; - case '.txt': o.bookType = 'txt'; break; - case '.dif': o.bookType = 'dif'; break; - case '.prn': o.bookType = 'prn'; break; - case '.slk': o.bookType = 'sylk'; break; - case '.htm': o.bookType = 'html'; break; - } +function resolve_book_type(o) { + if(o.bookType) return; + var _BT = { + "xls": "biff8", + "htm": "html", + "slk": "sylk", + "socialcalc": "eth", + "Sh33tJS": "WTF" + }; + var ext = o.file.slice(o.file.lastIndexOf(".")).toLowerCase(); + if(ext.match(/^\.[a-z]+$/)) o.bookType = ext.slice(1); + o.bookType = _BT[o.bookType] || o.bookType; } function writeFileSync(wb, filename, opts) { @@ -33446,17 +38663,55 @@ function writeFileAsync(filename, wb, opts, cb) { var _cb = cb; if(!(_cb instanceof Function)) _cb = (opts); return _fs.writeFile(filename, writeSync(wb, o), _cb); } -function sheet_to_json(sheet, opts){ +function make_json_row(sheet, r, R, cols, header, hdr, dense, o) { + var rr = encode_row(R); + var defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, "raw"); + var isempty = true; + var row = (header === 1) ? [] : {}; + if(header !== 1) { + if(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; } + else row.__rowNum__ = R; + } + if(!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) { + var val = dense ? sheet[R][C] : sheet[cols[C] + rr]; + if(val === undefined || val.t === undefined) { + if(defval === undefined) continue; + if(hdr[C] != null) { row[hdr[C]] = defval; } + continue; + } + var v = val.v; + switch(val.t){ + case 'z': if(v == null) break; continue; + case 'e': v = (v == 0 ? null : void 0); break; + case 's': case 'd': case 'b': case 'n': break; + default: throw new Error('unrecognized type ' + val.t); + } + if(hdr[C] != null) { + if(v == null) { + if(val.t == "e" && v === null) row[hdr[C]] = null; + else if(defval !== undefined) row[hdr[C]] = defval; + else if(raw && v === null) row[hdr[C]] = null; + else continue; + } else { + row[hdr[C]] = raw || (o.rawNumbers && val.t == "n") ? v : format_cell(val,v,o); + } + if(v != null) isempty = false; + } + } + return { row: row, isempty: isempty }; +} + + +function sheet_to_json(sheet, opts) { if(sheet == null || sheet["!ref"] == null) return []; - var val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], isempty = true, v=0, vv=""; + var val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=""; var r = {s:{r:0,c:0},e:{r:0,c:0}}; - var o = opts != null ? opts : {}; - var raw = o.raw; - var defval = o.defval; + var o = opts || {}; var range = o.range != null ? o.range : sheet["!ref"]; if(o.header === 1) header = 1; else if(o.header === "A") header = 2; else if(Array.isArray(o.header)) header = 3; + else if(o.header == null) header = 0; switch(typeof range) { case 'string': r = safe_decode_range(range); break; case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; @@ -33464,8 +38719,8 @@ function sheet_to_json(sheet, opts){ } if(header > 0) offset = 0; var rr = encode_row(r.s.r); - var cols = new Array(r.e.c-r.s.c+1); - var out = new Array(r.e.r-r.s.r-offset+1); + var cols = []; + var out = []; var outi = 0, counter = 0; var dense = Array.isArray(sheet); var R = r.s.r, C = 0, CC = 0; @@ -33478,49 +38733,16 @@ function sheet_to_json(sheet, opts){ case 2: hdr[C] = cols[C]; break; case 3: hdr[C] = o.header[C - r.s.c]; break; default: - if(val == null) continue; + if(val == null) val = {w: "__EMPTY", t: "s"}; vv = v = format_cell(val, null, o); counter = 0; for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); hdr[C] = vv; } } - var row = (header === 1) ? [] : {}; for (R = r.s.r + offset; R <= r.e.r; ++R) { - rr = encode_row(R); - isempty = true; - if(header === 1) row = []; - else { - row = {}; - if(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; } - else row.__rowNum__ = R; - } - if(!dense || sheet[R]) for (C = r.s.c; C <= r.e.c; ++C) { - val = dense ? sheet[R][C] : sheet[cols[C] + rr]; - if(val === undefined || val.t === undefined) { - if(defval === undefined) continue; - if(hdr[C] != null) { row[hdr[C]] = defval; isempty = false; } - continue; - } - v = val.v; - switch(val.t){ - case 'z': if(v == null) break; continue; - case 'e': continue; - case 's': case 'd': case 'b': case 'n': break; - default: throw new Error('unrecognized type ' + val.t); - } - if(hdr[C] != null) { - if(v == null) { - if(defval !== undefined) row[hdr[C]] = defval; - else if(raw && v === null) row[hdr[C]] = null; - else continue; - } else { - row[hdr[C]] = raw ? v : format_cell(val,v,o); - } - isempty = false; - } - } - if((isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row; + var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); + if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row; } out.length = outi; return out; @@ -33529,24 +38751,25 @@ function sheet_to_json(sheet, opts){ var qreg = /"/g; function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) { var isempty = true; - var row = "", txt = "", rr = encode_row(R); + var row = [], txt = "", rr = encode_row(R); for(var C = r.s.c; C <= r.e.c; ++C) { + if (!cols[C]) continue; var val = o.dense ? (sheet[R]||[])[C]: sheet[cols[C] + rr]; if(val == null) txt = ""; else if(val.v != null) { isempty = false; - txt = ''+format_cell(val, null, o); - for(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34) {txt = "\"" + txt.replace(qreg, '""') + "\""; break; } + txt = ''+(o.rawNumbers && val.t == "n" ? val.v : format_cell(val, null, o)); + for(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = "\"" + txt.replace(qreg, '""') + "\""; break; } if(txt == "ID") txt = '"ID"'; } else if(val.f != null && !val.F) { isempty = false; txt = '=' + val.f; if(txt.indexOf(",") >= 0) txt = '"' + txt.replace(qreg, '""') + '"'; } else txt = ""; /* NOTE: Excel CSV does not support array formulae */ - row += (C === r.s.c ? "" : FS) + txt; + row.push(txt); } if(o.blankrows === false && isempty) return null; - return row; + return row.join(FS); } function sheet_to_csv(sheet, opts) { @@ -33559,8 +38782,11 @@ function sheet_to_csv(sheet, opts) { var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); var row = "", cols = []; o.dense = Array.isArray(sheet); - for(var C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C); + var colinfo = o.skipHidden && sheet["!cols"] || []; + var rowinfo = o.skipHidden && sheet["!rows"] || []; + for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); for(var R = r.s.r; R <= r.e.r; ++R) { + if ((rowinfo[R]||{}).hidden) continue; row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); if(row == null) { continue; } if(o.strip) row = row.replace(endregex,""); @@ -33573,9 +38799,9 @@ function sheet_to_csv(sheet, opts) { function sheet_to_txt(sheet, opts) { if(!opts) opts = {}; opts.FS = "\t"; opts.RS = "\n"; var s = sheet_to_csv(sheet, opts); - if(typeof cptable == 'undefined') return s; - var o = cptable.utils.encode(1200, s); - return "\xff\xfe" + o; + if(typeof cptable == 'undefined' || opts.type == 'string') return s; + var o = cptable.utils.encode(1200, s, 'str'); + return String.fromCharCode(255) + String.fromCharCode(254) + o; } function sheet_to_formulae(sheet) { @@ -33612,36 +38838,67 @@ function sheet_to_formulae(sheet) { return cmds; } -function json_to_sheet(js, opts) { +function sheet_add_json(_ws, js, opts) { var o = opts || {}; - var ws = ({}); + var offset = +!o.skipHeader; + var ws = _ws || ({}); + var _R = 0, _C = 0; + if(ws && o.origin != null) { + if(typeof o.origin == 'number') _R = o.origin; + else { + var _origin = typeof o.origin == "string" ? decode_cell(o.origin) : o.origin; + _R = _origin.r; _C = _origin.c; + } + } var cell; - var range = ({s: {c:0, r:0}, e: {c:0, r:js.length}}); + var range = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}); + if(ws['!ref']) { + var _range = safe_decode_range(ws['!ref']); + range.e.c = Math.max(range.e.c, _range.e.c); + range.e.r = Math.max(range.e.r, _range.e.r); + if(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; } + } else { + if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; } + } var hdr = o.header || [], C = 0; - for(var R = 0; R != js.length; ++R) { - Object.keys(js[R]).filter(function(x) { return js[R].hasOwnProperty(x); }).forEach(function(k) { + js.forEach(function (JS, R) { + keys(JS).forEach(function(k) { if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k; - var v = js[R][k]; + var v = JS[k]; var t = 'z'; var z = ""; - if(typeof v == 'number') t = 'n'; - else if(typeof v == 'boolean') t = 'b'; - else if(typeof v == 'string') t = 's'; - else if(v instanceof Date) { - t = 'd'; - if(!o.cellDates) { t = 'n'; v = datenum(v); } - z = o.dateNF || SSF._table[14]; + var ref = encode_cell({c:_C + C,r:_R + R + offset}); + cell = utils.sheet_get_cell(ws, ref); + if(v && typeof v === 'object' && !(v instanceof Date)){ + ws[ref] = v; + } else { + if(typeof v == 'number') t = 'n'; + else if(typeof v == 'boolean') t = 'b'; + else if(typeof v == 'string') t = 's'; + else if(v instanceof Date) { + t = 'd'; + if(!o.cellDates) { t = 'n'; v = datenum(v); } + z = (o.dateNF || SSF._table[14]); + } + else if(v === null && o.nullError) { t = 'e'; v = 0; } + if(!cell) ws[ref] = cell = ({t:t, v:v}); + else { + cell.t = t; cell.v = v; + delete cell.w; delete cell.R; + if(z) cell.z = z; + } + if(z) cell.z = z; } - ws[encode_cell({c:C,r:R+1})] = cell = ({t:t, v:v}); - if(z) cell.z = z; }); - } - range.e.c = hdr.length - 1; - for(C = 0; C < hdr.length; ++C) ws[encode_col(C) + "1"] = {t:'s', v:hdr[C]}; + }); + range.e.c = Math.max(range.e.c, _C + hdr.length - 1); + var __R = encode_row(_R); + if(offset) for(C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]}; ws['!ref'] = encode_range(range); return ws; } +function json_to_sheet(js, opts) { return sheet_add_json(null, js, opts); } var utils = { encode_col: encode_col, @@ -33658,11 +38915,15 @@ var utils = { make_csv: sheet_to_csv, make_json: sheet_to_json, make_formulae: sheet_to_formulae, + sheet_add_aoa: sheet_add_aoa, + sheet_add_json: sheet_add_json, + sheet_add_dom: sheet_add_dom, aoa_to_sheet: aoa_to_sheet, json_to_sheet: json_to_sheet, table_to_sheet: parse_dom_table, table_to_book: table_to_book, sheet_to_csv: sheet_to_csv, + sheet_to_txt: sheet_to_txt, sheet_to_json: sheet_to_json, sheet_to_html: HTML_.from_sheet, sheet_to_formulae: sheet_to_formulae, @@ -33678,12 +38939,21 @@ function get_default(x, y, z) { return x[y] != null ? x[y] : (x[y] = z); } /* get cell, creating a stub if necessary */ function ws_get_cell_stub(ws, R, C) { /* A1 cell address */ - if(typeof R == "string") return ws[R] || (ws[R] = {t:'z'}); + if(typeof R == "string") { + /* dense */ + if(Array.isArray(ws)) { + var RC = decode_cell(R); + if(!ws[RC.r]) ws[RC.r] = []; + return ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {t:'z'}); + } + return ws[R] || (ws[R] = {t:'z'}); + } /* cell address object */ if(typeof R != "number") return ws_get_cell_stub(ws, encode_cell(R)); /* R and C are 0-based indices */ return ws_get_cell_stub(ws, encode_cell({r:R,c:C||0})); } +utils.sheet_get_cell = ws_get_cell_stub; /* find sheet index for given name / validate index */ function wb_sheet_idx(wb, sh) { @@ -33704,8 +38974,8 @@ utils.book_new = function() { /* add a worksheet to the end of a given workbook */ utils.book_append_sheet = function(wb, ws, name) { - if(!name) for(var i = 1; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = "Sheet" + i) == -1) break; - if(!name) throw new Error("Too many worksheets"); + if(!name) for(var i = 1; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = "Sheet" + i) == -1) break; + if(!name || wb.SheetNames.length >= 0xFFFF) throw new Error("Too many worksheets"); check_ws_name(name); if(wb.SheetNames.indexOf(name) >= 0) throw new Error("Worksheet with name |" + name + "| already exists!"); @@ -33751,6 +39021,7 @@ utils.cell_set_hyperlink = function(cell, target, tooltip) { } return cell; }; +utils.cell_set_internal_link = function(cell, range, tooltip) { return utils.cell_set_hyperlink(cell, "#" + range, tooltip); }; /* add to cell comments */ utils.cell_add_comment = function(cell, text, author) { @@ -33776,11 +39047,13 @@ return utils; })(utils); if(has_buf && typeof commonjsRequire != 'undefined') (function() { - var Readable = require$$4.Readable; + var strmod = require$$4; + if(!strmod) return; + var Readable = strmod.Readable; + if(!Readable) return; var write_csv_stream = function(sheet, opts) { var stream = Readable(); - var out = ""; var o = opts == null ? {} : opts; if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } var r = safe_decode_range(sheet["!ref"]); @@ -33789,19 +39062,24 @@ if(has_buf && typeof commonjsRequire != 'undefined') (function() { var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); var row = "", cols = []; o.dense = Array.isArray(sheet); - for(var C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C); + var colinfo = o.skipHidden && sheet["!cols"] || []; + var rowinfo = o.skipHidden && sheet["!rows"] || []; + for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); var R = r.s.r; + var BOM = false; stream._read = function() { - if(R > r.e.r) return stream.push(null); + if(!BOM) { BOM = true; return stream.push("\uFEFF"); } while(R <= r.e.r) { - row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); ++R; + if ((rowinfo[R-1]||{}).hidden) continue; + row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); if(row != null) { if(o.strip) row = row.replace(endregex,""); stream.push(row + RS); break; } } + if(R > r.e.r) return stream.push(null); }; return stream; }; @@ -33832,16 +39110,68 @@ if(has_buf && typeof commonjsRequire != 'undefined') (function() { return stream; }; + var write_json_stream = function(sheet, opts) { + var stream = Readable({objectMode:true}); + + if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } + var val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=""; + var r = {s:{r:0,c:0},e:{r:0,c:0}}; + var o = opts || {}; + var range = o.range != null ? o.range : sheet["!ref"]; + if(o.header === 1) header = 1; + else if(o.header === "A") header = 2; + else if(Array.isArray(o.header)) header = 3; + switch(typeof range) { + case 'string': r = safe_decode_range(range); break; + case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; + default: r = range; + } + if(header > 0) offset = 0; + var rr = encode_row(r.s.r); + var cols = []; + var counter = 0; + var dense = Array.isArray(sheet); + var R = r.s.r, C = 0, CC = 0; + if(dense && !sheet[R]) sheet[R] = []; + for(C = r.s.c; C <= r.e.c; ++C) { + cols[C] = encode_col(C); + val = dense ? sheet[R][C] : sheet[cols[C] + rr]; + switch(header) { + case 1: hdr[C] = C - r.s.c; break; + case 2: hdr[C] = cols[C]; break; + case 3: hdr[C] = o.header[C - r.s.c]; break; + default: + if(val == null) val = {w: "__EMPTY", t: "s"}; + vv = v = format_cell(val, null, o); + counter = 0; + for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); + hdr[C] = vv; + } + } + R = r.s.r + offset; + stream._read = function() { + if(R > r.e.r) return stream.push(null); + while(R <= r.e.r) { + //if ((rowinfo[R-1]||{}).hidden) continue; + var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); + ++R; + if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { + stream.push(row.row); + break; + } + } + }; + return stream; + }; + XLSX.stream = { + to_json: write_json_stream, to_html: write_html_stream, to_csv: write_csv_stream }; })(); -XLSX.parse_xlscfb = parse_xlscfb; -XLSX.parse_ods = parse_ods; -XLSX.parse_fods = parse_fods; -XLSX.write_ods = write_ods; +if(typeof parse_xlscfb !== "undefined") XLSX.parse_xlscfb = parse_xlscfb; XLSX.parse_zip = parse_zip; XLSX.read = readSync; //xlsread XLSX.readFile = readFileSync; //readFile @@ -33852,13 +39182,15 @@ XLSX.writeFileSync = writeFileSync; XLSX.writeFileAsync = writeFileAsync; XLSX.utils = utils; XLSX.SSF = SSF; -})(exports); -/*exported XLS */ -var XLS = XLSX; -/*exported ODS */ -var ODS = XLSX; +if(typeof CFB !== "undefined") XLSX.CFB = CFB; +} +/*global define */ +make_xlsx_lib(exports); +/* NOTE: the following extra line is needed for "Lightning Locker Service" */ +if(typeof window !== 'undefined' && !window.XLSX) try { window.XLSX = XLSX; } catch(e) {} }); +unwrapExports(xlsx); var xlsx_1 = xlsx.utils; var xlsx_2 = xlsx.write; var xlsx_3 = xlsx.read; diff --git a/dist/js2excel.min.js b/dist/js2excel.min.js index bc03381..ac030be 100644 --- a/dist/js2excel.min.js +++ b/dist/js2excel.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.js2excel=t()}(this,function(){"use strict";var Zd="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Qd(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function e(e,t){return e(t={exports:{}},t.exports),t.exports}var t,u=e(function(e){var t=t||function(o){if(!(void 0===o||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var e=o.document,l=function(){return o.URL||o.webkitURL||o},c=e.createElementNS("http://www.w3.org/1999/xhtml","a"),f="download"in c,h=/constructor/i.test(o.HTMLElement)||o.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent),d=function(e){(o.setImmediate||o.setTimeout)(function(){throw e},0)},p=function(e){setTimeout(function(){"string"==typeof e?l().revokeObjectURL(e):e.remove()},4e4)},g=function(e){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e},n=function(e,r,t){t||(e=g(e));var n,a=this,s="application/octet-stream"===e.type,i=function(){!function(e,t,r){for(var n=(t=[].concat(t)).length;n--;){var a=e["on"+t[n]];if("function"==typeof a)try{a.call(e,r||e)}catch(e){d(e)}}}(a,"writestart progress write writeend".split(" "))};if(a.readyState=a.INIT,f)return n=l().createObjectURL(e),void setTimeout(function(){var e,t;c.href=n,c.download=r,e=c,t=new MouseEvent("click"),e.dispatchEvent(t),i(),p(n),a.readyState=a.DONE});!function(){if((u||s&&h)&&o.FileReader){var t=new FileReader;return t.onloadend=function(){var e=u?t.result:t.result.replace(/^data:[^;]*;/,"data:attachment/file;");o.open(e,"_blank")||(o.location.href=e),e=void 0,a.readyState=a.DONE,i()},t.readAsDataURL(e),a.readyState=a.INIT}n||(n=l().createObjectURL(e)),s?o.location.href=n:o.open(n,"_blank")||(o.location.href=n);a.readyState=a.DONE,i(),p(n)}()},t=n.prototype;return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(e,t,r){return t=t||e.name||"download",r||(e=g(e)),navigator.msSaveOrOpenBlob(e,t)}:(t.abort=function(){},t.readyState=t.INIT=0,t.WRITING=1,t.DONE=2,t.error=t.onwritestart=t.onprogress=t.onwrite=t.onabort=t.onerror=t.onwriteend=null,function(e,t,r){return new n(e,t||e.name||"download",r)})}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||Zd.content);e.exports&&(e.exports.saveAs=t)}).saveAs,qd=e(function(n){var a={version:"1.10.0"};a[437]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[620]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàąçêëèïîćÄĄĘęłôöĆûùŚÖܢ٥śƒŹŻóÓńŃźż¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[737]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[850]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[852]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[857]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[861]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[865]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[866]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[874]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[895]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ČüéďäĎŤčěĚĹÍľǪÄÁÉžŽôöÓůÚýÖÜŠĽÝŘťáíóúňŇŮÔšřŕŔ¼§«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[932]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚��������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[129]="���������������������������������������������������������������� 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×�÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓�����������∈∋⊆⊇⊂⊃∪∩��������∧∨¬⇒⇔∀∃�����������∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬�������ʼn♯♭♪†‡¶����◯���".split(""),e=0;e!=n[129].length;++e)65533!==n[129][e].charCodeAt(0)&&(r[n[129][e]]=33024+e,t[33024+e]=n[129][e]);for(n[130]="�������������������������������������������������������������������������������0123456789�������ABCDEFGHIJKLMNOPQRSTUVWXYZ�������abcdefghijklmnopqrstuvwxyz����ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん��������������".split(""),e=0;e!=n[130].length;++e)65533!==n[130][e].charCodeAt(0)&&(r[n[130][e]]=33280+e,t[33280+e]=n[130][e]);for(n[131]="����������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ�ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ��������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�����������������������������������������".split(""),e=0;e!=n[131].length;++e)65533!==n[131][e].charCodeAt(0)&&(r[n[131][e]]=33536+e,t[33536+e]=n[131][e]);for(n[132]="����������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмн�опрстуфхцчшщъыьэюя�������������─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂�����������������������������������������������������������������".split(""),e=0;e!=n[132].length;++e)65533!==n[132][e].charCodeAt(0)&&(r[n[132][e]]=33792+e,t[33792+e]=n[132][e]);for(n[135]="����������������������������������������������������������������①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡��������㍻�〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪���������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[135].length;++e)65533!==n[135][e].charCodeAt(0)&&(r[n[135][e]]=34560+e,t[34560+e]=n[135][e]);for(n[136]="���������������������������������������������������������������������������������������������������������������������������������������������������������������亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭���".split(""),e=0;e!=n[136].length;++e)65533!==n[136][e].charCodeAt(0)&&(r[n[136][e]]=34816+e,t[34816+e]=n[136][e]);for(n[137]="����������������������������������������������������������������院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円�園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改���".split(""),e=0;e!=n[137].length;++e)65533!==n[137][e].charCodeAt(0)&&(r[n[137][e]]=35072+e,t[35072+e]=n[137][e]);for(n[138]="����������������������������������������������������������������魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫�橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄���".split(""),e=0;e!=n[138].length;++e)65533!==n[138][e].charCodeAt(0)&&(r[n[138][e]]=35328+e,t[35328+e]=n[138][e]);for(n[139]="����������������������������������������������������������������機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救�朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈���".split(""),e=0;e!=n[139].length;++e)65533!==n[139][e].charCodeAt(0)&&(r[n[139][e]]=35584+e,t[35584+e]=n[139][e]);for(n[140]="����������������������������������������������������������������掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨�劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向���".split(""),e=0;e!=n[140].length;++e)65533!==n[140][e].charCodeAt(0)&&(r[n[140][e]]=35840+e,t[35840+e]=n[140][e]);for(n[141]="����������������������������������������������������������������后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降�項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷���".split(""),e=0;e!=n[141].length;++e)65533!==n[141][e].charCodeAt(0)&&(r[n[141][e]]=36096+e,t[36096+e]=n[141][e]);for(n[142]="����������������������������������������������������������������察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止�死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周���".split(""),e=0;e!=n[142].length;++e)65533!==n[142][e].charCodeAt(0)&&(r[n[142][e]]=36352+e,t[36352+e]=n[142][e]);for(n[143]="����������������������������������������������������������������宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳�準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾���".split(""),e=0;e!=n[143].length;++e)65533!==n[143][e].charCodeAt(0)&&(r[n[143][e]]=36608+e,t[36608+e]=n[143][e]);for(n[144]="����������������������������������������������������������������拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨�逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線���".split(""),e=0;e!=n[144].length;++e)65533!==n[144][e].charCodeAt(0)&&(r[n[144][e]]=36864+e,t[36864+e]=n[144][e]);for(n[145]="����������������������������������������������������������������繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻�操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只���".split(""),e=0;e!=n[145].length;++e)65533!==n[145][e].charCodeAt(0)&&(r[n[145][e]]=37120+e,t[37120+e]=n[145][e]);for(n[146]="����������������������������������������������������������������叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄�逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓���".split(""),e=0;e!=n[146].length;++e)65533!==n[146][e].charCodeAt(0)&&(r[n[146][e]]=37376+e,t[37376+e]=n[146][e]);for(n[147]="����������������������������������������������������������������邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬�凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入���".split(""),e=0;e!=n[147].length;++e)65533!==n[147][e].charCodeAt(0)&&(r[n[147][e]]=37632+e,t[37632+e]=n[147][e]);for(n[148]="����������������������������������������������������������������如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅�楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美���".split(""),e=0;e!=n[148].length;++e)65533!==n[148][e].charCodeAt(0)&&(r[n[148][e]]=37888+e,t[37888+e]=n[148][e]);for(n[149]="����������������������������������������������������������������鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷�斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋���".split(""),e=0;e!=n[149].length;++e)65533!==n[149][e].charCodeAt(0)&&(r[n[149][e]]=38144+e,t[38144+e]=n[149][e]);for(n[150]="����������������������������������������������������������������法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆�摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒���".split(""),e=0;e!=n[150].length;++e)65533!==n[150][e].charCodeAt(0)&&(r[n[150][e]]=38400+e,t[38400+e]=n[150][e]);for(n[151]="����������������������������������������������������������������諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲�沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯���".split(""),e=0;e!=n[151].length;++e)65533!==n[151][e].charCodeAt(0)&&(r[n[151][e]]=38656+e,t[38656+e]=n[151][e]);for(n[152]="����������������������������������������������������������������蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕��������������������������������������������弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲���".split(""),e=0;e!=n[152].length;++e)65533!==n[152][e].charCodeAt(0)&&(r[n[152][e]]=38912+e,t[38912+e]=n[152][e]);for(n[153]="����������������������������������������������������������������僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭�凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨���".split(""),e=0;e!=n[153].length;++e)65533!==n[153][e].charCodeAt(0)&&(r[n[153][e]]=39168+e,t[39168+e]=n[153][e]);for(n[154]="����������������������������������������������������������������咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸�噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩���".split(""),e=0;e!=n[154].length;++e)65533!==n[154][e].charCodeAt(0)&&(r[n[154][e]]=39424+e,t[39424+e]=n[154][e]);for(n[155]="����������������������������������������������������������������奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀�它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏���".split(""),e=0;e!=n[155].length;++e)65533!==n[155][e].charCodeAt(0)&&(r[n[155][e]]=39680+e,t[39680+e]=n[155][e]);for(n[156]="����������������������������������������������������������������廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠�怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛���".split(""),e=0;e!=n[156].length;++e)65533!==n[156][e].charCodeAt(0)&&(r[n[156][e]]=39936+e,t[39936+e]=n[156][e]);for(n[157]="����������������������������������������������������������������戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫�捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼���".split(""),e=0;e!=n[157].length;++e)65533!==n[157][e].charCodeAt(0)&&(r[n[157][e]]=40192+e,t[40192+e]=n[157][e]);for(n[158]="����������������������������������������������������������������曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎�梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣���".split(""),e=0;e!=n[158].length;++e)65533!==n[158][e].charCodeAt(0)&&(r[n[158][e]]=40448+e,t[40448+e]=n[158][e]);for(n[159]="����������������������������������������������������������������檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯�麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌���".split(""),e=0;e!=n[159].length;++e)65533!==n[159][e].charCodeAt(0)&&(r[n[159][e]]=40704+e,t[40704+e]=n[159][e]);for(n[224]="����������������������������������������������������������������漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝�烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱���".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="����������������������������������������������������������������瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿�痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬���".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="����������������������������������������������������������������磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰�窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆���".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="����������������������������������������������������������������紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷�縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋���".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="����������������������������������������������������������������隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤�艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈���".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="����������������������������������������������������������������蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬�蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞���".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="����������������������������������������������������������������襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧�諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊���".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="����������������������������������������������������������������蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜�轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮���".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="����������������������������������������������������������������錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙�閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰���".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="����������������������������������������������������������������顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃�騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈���".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="����������������������������������������������������������������鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯�黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙�������������������������������������������������������������������������������������������".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[237]="����������������������������������������������������������������纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏�塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱���".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="����������������������������������������������������������������犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙�蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"���".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[250]="����������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊�兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯���".split(""),e=0;e!=n[250].length;++e)65533!==n[250][e].charCodeAt(0)&&(r[n[250][e]]=64e3+e,t[64e3+e]=n[250][e]);for(n[251]="����������������������������������������������������������������涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神�祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙���".split(""),e=0;e!=n[251].length;++e)65533!==n[251][e].charCodeAt(0)&&(r[n[251][e]]=64256+e,t[64256+e]=n[251][e]);for(n[252]="����������������������������������������������������������������髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[252].length;++e)65533!==n[252][e].charCodeAt(0)&&(r[n[252][e]]=64512+e,t[64512+e]=n[252][e]);return{enc:r,dec:t}}(),a[936]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[129]="����������������������������������������������������������������丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪乫乬乭乮乯乲乴乵乶乷乸乹乺乻乼乽乿亀亁亂亃亄亅亇亊�亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂伃伄伅伆伇伈伋伌伒伓伔伕伖伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾伿佀佁佂佄佅佇佈佉佊佋佌佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢�".split(""),e=0;e!=n[129].length;++e)65533!==n[129][e].charCodeAt(0)&&(r[n[129][e]]=33024+e,t[33024+e]=n[129][e]);for(n[130]="����������������������������������������������������������������侤侫侭侰侱侲侳侴侶侷侸侹侺侻侼侽侾俀俁係俆俇俈俉俋俌俍俒俓俔俕俖俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿倀倁倂倃倄倅倆倇倈倉倊�個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯倰倱倲倳倴倵倶倷倸倹倻倽倿偀偁偂偄偅偆偉偊偋偍偐偑偒偓偔偖偗偘偙偛偝偞偟偠偡偢偣偤偦偧偨偩偪偫偭偮偯偰偱偲偳側偵偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟傠傡傢傤傦傪傫傭傮傯傰傱傳傴債傶傷傸傹傼�".split(""),e=0;e!=n[130].length;++e)65533!==n[130][e].charCodeAt(0)&&(r[n[130][e]]=33280+e,t[33280+e]=n[130][e]);for(n[131]="����������������������������������������������������������������傽傾傿僀僁僂僃僄僅僆僇僈僉僊僋僌働僎僐僑僒僓僔僕僗僘僙僛僜僝僞僟僠僡僢僣僤僥僨僩僪僫僯僰僱僲僴僶僷僸價僺僼僽僾僿儀儁儂儃億儅儈�儉儊儌儍儎儏儐儑儓儔儕儖儗儘儙儚儛儜儝儞償儠儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾兂兇兊兌兎兏児兒兓兗兘兙兛兝兞兟兠兡兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦冧冨冩冪冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒凓凔凕凖凗�".split(""),e=0;e!=n[131].length;++e)65533!==n[131][e].charCodeAt(0)&&(r[n[131][e]]=33536+e,t[33536+e]=n[131][e]);for(n[132]="����������������������������������������������������������������凘凙凚凜凞凟凢凣凥処凧凨凩凪凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄剅剆則剈剉剋剎剏剒剓剕剗剘�剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳剴創剶剷剸剹剺剻剼剾劀劃劄劅劆劇劉劊劋劌劍劎劏劑劒劔劕劖劗劘劙劚劜劤劥劦劧劮劯劰労劵劶劷劸効劺劻劼劽勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務勚勛勜勝勞勠勡勢勣勥勦勧勨勩勪勫勬勭勮勯勱勲勳勴勵勶勷勸勻勼勽匁匂匃匄匇匉匊匋匌匎�".split(""),e=0;e!=n[132].length;++e)65533!==n[132][e].charCodeAt(0)&&(r[n[132][e]]=33792+e,t[33792+e]=n[132][e]);for(n[133]="����������������������������������������������������������������匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯匰匱匲匳匴匵匶匷匸匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏�厐厑厒厓厔厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯厰厱厲厳厴厵厷厸厹厺厼厽厾叀參叄叅叆叇収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝呞呟呠呡呣呥呧呩呪呫呬呭呮呯呰呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡�".split(""),e=0;e!=n[133].length;++e)65533!==n[133][e].charCodeAt(0)&&(r[n[133][e]]=34048+e,t[34048+e]=n[133][e]);for(n[134]="����������������������������������������������������������������咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠員哢哣哤哫哬哯哰哱哴哵哶哷哸哹哻哾唀唂唃唄唅唈唊唋唌唍唎唒唓唕唖唗唘唙唚唜唝唞唟唡唥唦�唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋啌啍啎問啑啒啓啔啗啘啙啚啛啝啞啟啠啢啣啨啩啫啯啰啱啲啳啴啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠喡喢喣喤喥喦喨喩喪喫喬喭單喯喰喲喴営喸喺喼喿嗀嗁嗂嗃嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗嗘嗙嗚嗛嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸嗹嗺嗻嗼嗿嘂嘃嘄嘅�".split(""),e=0;e!=n[134].length;++e)65533!==n[134][e].charCodeAt(0)&&(r[n[134][e]]=34304+e,t[34304+e]=n[134][e]);for(n[135]="����������������������������������������������������������������嘆嘇嘊嘋嘍嘐嘑嘒嘓嘔嘕嘖嘗嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀噁噂噃噄噅噆噇噈噉噊噋噏噐噑噒噓噕噖噚噛噝噞噟噠噡�噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽噾噿嚀嚁嚂嚃嚄嚇嚈嚉嚊嚋嚌嚍嚐嚑嚒嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟嚠嚡嚢嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚰嚱嚲嚳嚴嚵嚶嚸嚹嚺嚻嚽嚾嚿囀囁囂囃囄囅囆囇囈囉囋囌囍囎囏囐囑囒囓囕囖囘囙囜団囥囦囧囨囩囪囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國圌圍圎圏圐圑�".split(""),e=0;e!=n[135].length;++e)65533!==n[135][e].charCodeAt(0)&&(r[n[135][e]]=34560+e,t[34560+e]=n[135][e]);for(n[136]="����������������������������������������������������������������園圓圔圕圖圗團圙圚圛圝圞圠圡圢圤圥圦圧圫圱圲圴圵圶圷圸圼圽圿坁坃坄坅坆坈坉坋坒坓坔坕坖坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀�垁垇垈垉垊垍垎垏垐垑垔垕垖垗垘垙垚垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹垺垻垼垽垾垿埀埁埄埅埆埇埈埉埊埌埍埐埑埓埖埗埛埜埞埡埢埣埥埦埧埨埩埪埫埬埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥堦堧堨堩堫堬堭堮堯報堲堳場堶堷堸堹堺堻堼堽�".split(""),e=0;e!=n[136].length;++e)65533!==n[136][e].charCodeAt(0)&&(r[n[136][e]]=34816+e,t[34816+e]=n[136][e]);for(n[137]="����������������������������������������������������������������堾堿塀塁塂塃塅塆塇塈塉塊塋塎塏塐塒塓塕塖塗塙塚塛塜塝塟塠塡塢塣塤塦塧塨塩塪塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塿墂墄墆墇墈墊墋墌�墍墎墏墐墑墔墕墖増墘墛墜墝墠墡墢墣墤墥墦墧墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墽墾墿壀壂壃壄壆壇壈壉壊壋壌壍壎壏壐壒壓壔壖壗壘壙壚壛壜壝壞壟壠壡壢壣壥壦壧壨壩壪壭壯壱売壴壵壷壸壺壻壼壽壾壿夀夁夃夅夆夈変夊夋夌夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻�".split(""),e=0;e!=n[137].length;++e)65533!==n[137][e].charCodeAt(0)&&(r[n[137][e]]=35072+e,t[35072+e]=n[137][e]);for(n[138]="����������������������������������������������������������������夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛奜奝奞奟奡奣奤奦奧奨奩奪奫奬奭奮奯奰奱奲奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦�妧妬妭妰妱妳妴妵妶妷妸妺妼妽妿姀姁姂姃姄姅姇姈姉姌姍姎姏姕姖姙姛姞姟姠姡姢姤姦姧姩姪姫姭姮姯姰姱姲姳姴姵姶姷姸姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪娫娬娭娮娯娰娳娵娷娸娹娺娻娽娾娿婁婂婃婄婅婇婈婋婌婍婎婏婐婑婒婓婔婖婗婘婙婛婜婝婞婟婠�".split(""),e=0;e!=n[138].length;++e)65533!==n[138][e].charCodeAt(0)&&(r[n[138][e]]=35328+e,t[35328+e]=n[138][e]);for(n[139]="����������������������������������������������������������������婡婣婤婥婦婨婩婫婬婭婮婯婰婱婲婳婸婹婻婼婽婾媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媓媔媕媖媗媘媙媜媝媞媟媠媡媢媣媤媥媦媧媨媩媫媬�媭媮媯媰媱媴媶媷媹媺媻媼媽媿嫀嫃嫄嫅嫆嫇嫈嫊嫋嫍嫎嫏嫐嫑嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬嫭嫮嫯嫰嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬁嬂嬃嬄嬅嬆嬇嬈嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬸嬹嬺嬻嬼嬽嬾嬿孁孂孃孄孅孆孇�".split(""),e=0;e!=n[139].length;++e)65533!==n[139][e].charCodeAt(0)&&(r[n[139][e]]=35584+e,t[35584+e]=n[139][e]);for(n[140]="����������������������������������������������������������������孈孉孊孋孌孍孎孏孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏�寑寔寕寖寗寘寙寚寛寜寠寢寣實寧審寪寫寬寭寯寱寲寳寴寵寶寷寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧屨屩屪屫屬屭屰屲屳屴屵屶屷屸屻屼屽屾岀岃岄岅岆岇岉岊岋岎岏岒岓岕岝岞岟岠岡岤岥岦岧岨�".split(""),e=0;e!=n[140].length;++e)65533!==n[140][e].charCodeAt(0)&&(r[n[140][e]]=35840+e,t[35840+e]=n[140][e]);for(n[141]="����������������������������������������������������������������岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅峆峇峈峉峊峌峍峎峏峐峑峓峔峕峖峗峘峚峛峜峝峞峟峠峢峣峧峩峫峬峮峯峱峲峳峴峵島峷峸峹峺峼峽峾峿崀�崁崄崅崈崉崊崋崌崍崏崐崑崒崓崕崗崘崙崚崜崝崟崠崡崢崣崥崨崪崫崬崯崰崱崲崳崵崶崷崸崹崺崻崼崿嵀嵁嵂嵃嵄嵅嵆嵈嵉嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵙嵚嵜嵞嵟嵠嵡嵢嵣嵤嵥嵦嵧嵨嵪嵭嵮嵰嵱嵲嵳嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶚嶛嶜嶞嶟嶠�".split(""),e=0;e!=n[141].length;++e)65533!==n[141][e].charCodeAt(0)&&(r[n[141][e]]=36096+e,t[36096+e]=n[141][e]);for(n[142]="����������������������������������������������������������������嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶸嶹嶺嶻嶼嶽嶾嶿巀巁巂巃巄巆巇巈巉巊巋巌巎巏巐巑巒巓巔巕巖巗巘巙巚巜巟巠巣巤巪巬巭�巰巵巶巸巹巺巻巼巿帀帄帇帉帊帋帍帎帒帓帗帞帟帠帡帢帣帤帥帨帩帪師帬帯帰帲帳帴帵帶帹帺帾帿幀幁幃幆幇幈幉幊幋幍幎幏幐幑幒幓幖幗幘幙幚幜幝幟幠幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨庩庪庫庬庮庯庰庱庲庴庺庻庼庽庿廀廁廂廃廄廅�".split(""),e=0;e!=n[142].length;++e)65533!==n[142][e].charCodeAt(0)&&(r[n[142][e]]=36352+e,t[36352+e]=n[142][e]);for(n[143]="����������������������������������������������������������������廆廇廈廋廌廍廎廏廐廔廕廗廘廙廚廜廝廞廟廠廡廢廣廤廥廦廧廩廫廬廭廮廯廰廱廲廳廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤�弨弫弬弮弰弲弳弴張弶強弸弻弽弾弿彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢徣徤徥徦徧復徫徬徯徰徱徲徳徴徶徸徹徺徻徾徿忀忁忂忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇�".split(""),e=0;e!=n[143].length;++e)65533!==n[143][e].charCodeAt(0)&&(r[n[143][e]]=36608+e,t[36608+e]=n[143][e]);for(n[144]="����������������������������������������������������������������怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰怱怲怳怴怶怷怸怹怺怽怾恀恄恅恆恇恈恉恊恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀�悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽悾悿惀惁惂惃惄惇惈惉惌惍惎惏惐惒惓惔惖惗惙惛惞惡惢惣惤惥惪惱惲惵惷惸惻惼惽惾惿愂愃愄愅愇愊愋愌愐愑愒愓愔愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾慀慁慂慃慄慅慆�".split(""),e=0;e!=n[144].length;++e)65533!==n[144][e].charCodeAt(0)&&(r[n[144][e]]=36864+e,t[36864+e]=n[144][e]);for(n[145]="����������������������������������������������������������������慇慉態慍慏慐慒慓慔慖慗慘慙慚慛慜慞慟慠慡慣慤慥慦慩慪慫慬慭慮慯慱慲慳慴慶慸慹慺慻慼慽慾慿憀憁憂憃憄憅憆憇憈憉憊憌憍憏憐憑憒憓憕�憖憗憘憙憚憛憜憞憟憠憡憢憣憤憥憦憪憫憭憮憯憰憱憲憳憴憵憶憸憹憺憻憼憽憿懀懁懃懄懅懆懇應懌懍懎懏懐懓懕懖懗懘懙懚懛懜懝懞懟懠懡懢懣懤懥懧懨懩懪懫懬懭懮懯懰懱懲懳懴懶懷懸懹懺懻懼懽懾戀戁戂戃戄戅戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸戹戺戻戼扂扄扅扆扊�".split(""),e=0;e!=n[145].length;++e)65533!==n[145][e].charCodeAt(0)&&(r[n[145][e]]=37120+e,t[37120+e]=n[145][e]);for(n[146]="����������������������������������������������������������������扏扐払扖扗扙扚扜扝扞扟扠扡扢扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋抌抍抎抏抐抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁�拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳挴挵挶挷挸挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖捗捘捙捚捛捜捝捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙掚掛掜掝掞掟採掤掦掫掯掱掲掵掶掹掻掽掿揀�".split(""),e=0;e!=n[146].length;++e)65533!==n[146][e].charCodeAt(0)&&(r[n[146][e]]=37376+e,t[37376+e]=n[146][e]);for(n[147]="����������������������������������������������������������������揁揂揃揅揇揈揊揋揌揑揓揔揕揗揘揙揚換揜揝揟揢揤揥揦揧揨揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆搇搈搉搊損搎搑搒搕搖搗搘搙搚搝搟搢搣搤�搥搧搨搩搫搮搯搰搱搲搳搵搶搷搸搹搻搼搾摀摂摃摉摋摌摍摎摏摐摑摓摕摖摗摙摚摛摜摝摟摠摡摢摣摤摥摦摨摪摫摬摮摯摰摱摲摳摴摵摶摷摻摼摽摾摿撀撁撃撆撈撉撊撋撌撍撎撏撐撓撔撗撘撚撛撜撝撟撠撡撢撣撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆擇擈擉擊擋擌擏擑擓擔擕擖擙據�".split(""),e=0;e!=n[147].length;++e)65533!==n[147][e].charCodeAt(0)&&(r[n[147][e]]=37632+e,t[37632+e]=n[147][e]);for(n[148]="����������������������������������������������������������������擛擜擝擟擠擡擣擥擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿攁攂攃攄攅攆攇攈攊攋攌攍攎攏攐攑攓攔攕攖攗攙攚攛攜攝攞攟攠攡�攢攣攤攦攧攨攩攪攬攭攰攱攲攳攷攺攼攽敀敁敂敃敄敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數敹敺敻敼敽敾敿斀斁斂斃斄斅斆斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱斲斳斴斵斶斷斸斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘旙旚旛旜旝旞旟旡旣旤旪旫�".split(""),e=0;e!=n[148].length;++e)65533!==n[148][e].charCodeAt(0)&&(r[n[148][e]]=37888+e,t[37888+e]=n[148][e]);for(n[149]="����������������������������������������������������������������旲旳旴旵旸旹旻旼旽旾旿昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷昸昹昺昻昽昿晀時晄晅晆晇晈晉晊晍晎晐晑晘�晙晛晜晝晞晠晢晣晥晧晩晪晫晬晭晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘暙暚暛暜暞暟暠暡暢暣暤暥暦暩暪暫暬暭暯暰暱暲暳暵暶暷暸暺暻暼暽暿曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曚曞曟曠曡曢曣曤曥曧曨曪曫曬曭曮曯曱曵曶書曺曻曽朁朂會�".split(""),e=0;e!=n[149].length;++e)65533!==n[149][e].charCodeAt(0)&&(r[n[149][e]]=38144+e,t[38144+e]=n[149][e]);for(n[150]="����������������������������������������������������������������朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠朡朢朣朤朥朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗杘杙杚杛杝杢杣杤杦杧杫杬杮東杴杶�杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹枺枻枼枽枾枿柀柂柅柆柇柈柉柊柋柌柍柎柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵柶柷柸柹柺査柼柾栁栂栃栄栆栍栐栒栔栕栘栙栚栛栜栞栟栠栢栣栤栥栦栧栨栫栬栭栮栯栰栱栴栵栶栺栻栿桇桋桍桏桒桖桗桘桙桚桛�".split(""),e=0;e!=n[150].length;++e)65533!==n[150][e].charCodeAt(0)&&(r[n[150][e]]=38400+e,t[38400+e]=n[150][e]);for(n[151]="����������������������������������������������������������������桜桝桞桟桪桬桭桮桯桰桱桲桳桵桸桹桺桻桼桽桾桿梀梂梄梇梈梉梊梋梌梍梎梐梑梒梔梕梖梘梙梚梛梜條梞梟梠梡梣梤梥梩梪梫梬梮梱梲梴梶梷梸�梹梺梻梼梽梾梿棁棃棄棅棆棇棈棊棌棎棏棐棑棓棔棖棗棙棛棜棝棞棟棡棢棤棥棦棧棨棩棪棫棬棭棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆椇椈椉椊椌椏椑椓椔椕椖椗椘椙椚椛検椝椞椡椢椣椥椦椧椨椩椪椫椬椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楕楖楘楙楛楜楟�".split(""),e=0;e!=n[151].length;++e)65533!==n[151][e].charCodeAt(0)&&(r[n[151][e]]=38656+e,t[38656+e]=n[151][e]);for(n[152]="����������������������������������������������������������������楡楢楤楥楧楨楩楪楬業楯楰楲楳楴極楶楺楻楽楾楿榁榃榅榊榋榌榎榏榐榑榒榓榖榗榙榚榝榞榟榠榡榢榣榤榥榦榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽�榾榿槀槂槃槄槅槆槇槈槉構槍槏槑槒槓槕槖槗様槙槚槜槝槞槡槢槣槤槥槦槧槨槩槪槫槬槮槯槰槱槳槴槵槶槷槸槹槺槻槼槾樀樁樂樃樄樅樆樇樈樉樋樌樍樎樏樐樑樒樓樔樕樖標樚樛樜樝樞樠樢樣樤樥樦樧権樫樬樭樮樰樲樳樴樶樷樸樹樺樻樼樿橀橁橂橃橅橆橈橉橊橋橌橍橎橏橑橒橓橔橕橖橗橚�".split(""),e=0;e!=n[152].length;++e)65533!==n[152][e].charCodeAt(0)&&(r[n[152][e]]=38912+e,t[38912+e]=n[152][e]);for(n[153]="����������������������������������������������������������������橜橝橞機橠橢橣橤橦橧橨橩橪橫橬橭橮橯橰橲橳橴橵橶橷橸橺橻橽橾橿檁檂檃檅檆檇檈檉檊檋檌檍檏檒檓檔檕檖檘檙檚檛檜檝檞檟檡檢檣檤檥檦�檧檨檪檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟欥欦欨欩欪欫欬欭欮�".split(""),e=0;e!=n[153].length;++e)65533!==n[153][e].charCodeAt(0)&&(r[n[153][e]]=39168+e,t[39168+e]=n[153][e]);for(n[154]="����������������������������������������������������������������欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍歎歏歐歑歒歓歔歕歖歗歘歚歛歜歝歞歟歠歡歨歩歫歬歭歮歯歰歱歲歳歴歵歶歷歸歺歽歾歿殀殅殈�殌殎殏殐殑殔殕殗殘殙殜殝殞殟殠殢殣殤殥殦殧殨殩殫殬殭殮殯殰殱殲殶殸殹殺殻殼殽殾毀毃毄毆毇毈毉毊毌毎毐毑毘毚毜毝毞毟毠毢毣毤毥毦毧毨毩毬毭毮毰毱毲毴毶毷毸毺毻毼毾毿氀氁氂氃氄氈氉氊氋氌氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋汌汍汎汏汑汒汓汖汘�".split(""),e=0;e!=n[154].length;++e)65533!==n[154][e].charCodeAt(0)&&(r[n[154][e]]=39424+e,t[39424+e]=n[154][e]);for(n[155]="����������������������������������������������������������������汙汚汢汣汥汦汧汫汬汭汮汯汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘�泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟洠洡洢洣洤洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽浾浿涀涁涃涄涆涇涊涋涍涏涐涒涖涗涘涙涚涜涢涥涬涭涰涱涳涴涶涷涹涺涻涼涽涾淁淂淃淈淉淊�".split(""),e=0;e!=n[155].length;++e)65533!==n[155][e].charCodeAt(0)&&(r[n[155][e]]=39680+e,t[39680+e]=n[155][e]);for(n[156]="����������������������������������������������������������������淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽淾淿渀渁渂渃渄渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵�渶渷渹渻渼渽渾渿湀湁湂湅湆湇湈湉湊湋湌湏湐湑湒湕湗湙湚湜湝湞湠湡湢湣湤湥湦湧湨湩湪湬湭湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽満溁溂溄溇溈溊溋溌溍溎溑溒溓溔溕準溗溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪滫滬滭滮滯�".split(""),e=0;e!=n[156].length;++e)65533!==n[156][e].charCodeAt(0)&&(r[n[156][e]]=39936+e,t[39936+e]=n[156][e]);for(n[157]="����������������������������������������������������������������滰滱滲滳滵滶滷滸滺滻滼滽滾滿漀漁漃漄漅漇漈漊漋漌漍漎漐漑漒漖漗漘漙漚漛漜漝漞漟漡漢漣漥漦漧漨漬漮漰漲漴漵漷漸漹漺漻漼漽漿潀潁潂�潃潄潅潈潉潊潌潎潏潐潑潒潓潔潕潖潗潙潚潛潝潟潠潡潣潤潥潧潨潩潪潫潬潯潰潱潳潵潶潷潹潻潽潾潿澀澁澂澃澅澆澇澊澋澏澐澑澒澓澔澕澖澗澘澙澚澛澝澞澟澠澢澣澤澥澦澨澩澪澫澬澭澮澯澰澱澲澴澵澷澸澺澻澼澽澾澿濁濃濄濅濆濇濈濊濋濌濍濎濏濐濓濔濕濖濗濘濙濚濛濜濝濟濢濣濤濥�".split(""),e=0;e!=n[157].length;++e)65533!==n[157][e].charCodeAt(0)&&(r[n[157][e]]=40192+e,t[40192+e]=n[157][e]);for(n[158]="����������������������������������������������������������������濦濧濨濩濪濫濬濭濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀒瀓瀔瀕瀖瀗瀘瀙瀜瀝瀞瀟瀠瀡瀢瀤瀥瀦瀧瀨瀩瀪�瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀶瀷瀸瀺瀻瀼瀽瀾瀿灀灁灂灃灄灅灆灇灈灉灊灋灍灎灐灑灒灓灔灕灖灗灘灙灚灛灜灝灟灠灡灢灣灤灥灦灧灨灩灪灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞炟炠炡炢炣炤炥炦炧炨炩炪炰炲炴炵炶為炾炿烄烅烆烇烉烋烌烍烎烏烐烑烒烓烔烕烖烗烚�".split(""),e=0;e!=n[158].length;++e)65533!==n[158][e].charCodeAt(0)&&(r[n[158][e]]=40448+e,t[40448+e]=n[158][e]);for(n[159]="����������������������������������������������������������������烜烝烞烠烡烢烣烥烪烮烰烱烲烳烴烵烶烸烺烻烼烾烿焀焁焂焃焄焅焆焇焈焋焌焍焎焏焑焒焔焗焛焜焝焞焟焠無焢焣焤焥焧焨焩焪焫焬焭焮焲焳焴�焵焷焸焹焺焻焼焽焾焿煀煁煂煃煄煆煇煈煉煋煍煏煐煑煒煓煔煕煖煗煘煙煚煛煝煟煠煡煢煣煥煩煪煫煬煭煯煰煱煴煵煶煷煹煻煼煾煿熀熁熂熃熅熆熇熈熉熋熌熍熎熐熑熒熓熕熖熗熚熛熜熝熞熡熢熣熤熥熦熧熩熪熫熭熮熯熰熱熲熴熶熷熸熺熻熼熽熾熿燀燁燂燄燅燆燇燈燉燊燋燌燍燏燐燑燒燓�".split(""),e=0;e!=n[159].length;++e)65533!==n[159][e].charCodeAt(0)&&(r[n[159][e]]=40704+e,t[40704+e]=n[159][e]);for(n[160]="����������������������������������������������������������������燖燗燘燙燚燛燜燝燞營燡燢燣燤燦燨燩燪燫燬燭燯燰燱燲燳燴燵燶燷燸燺燻燼燽燾燿爀爁爂爃爄爅爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚�爛爜爞爟爠爡爢爣爤爥爦爧爩爫爭爮爯爲爳爴爺爼爾牀牁牂牃牄牅牆牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅犆犇犈犉犌犎犐犑犓犔犕犖犗犘犙犚犛犜犝犞犠犡犢犣犤犥犦犧犨犩犪犫犮犱犲犳犵犺犻犼犽犾犿狀狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛�".split(""),e=0;e!=n[160].length;++e)65533!==n[160][e].charCodeAt(0)&&(r[n[160][e]]=40960+e,t[40960+e]=n[160][e]);for(n[161]="����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�".split(""),e=0;e!=n[161].length;++e)65533!==n[161][e].charCodeAt(0)&&(r[n[161][e]]=41216+e,t[41216+e]=n[161][e]);for(n[162]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���".split(""),e=0;e!=n[162].length;++e)65533!==n[162][e].charCodeAt(0)&&(r[n[162][e]]=41472+e,t[41472+e]=n[162][e]);for(n[163]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=n[163].length;++e)65533!==n[163][e].charCodeAt(0)&&(r[n[163][e]]=41728+e,t[41728+e]=n[163][e]);for(n[164]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=n[164].length;++e)65533!==n[164][e].charCodeAt(0)&&(r[n[164][e]]=41984+e,t[41984+e]=n[164][e]);for(n[165]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=n[165].length;++e)65533!==n[165][e].charCodeAt(0)&&(r[n[165][e]]=42240+e,t[42240+e]=n[165][e]);for(n[166]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������︵︶︹︺︿﹀︽︾﹁﹂﹃﹄��︻︼︷︸︱�︳︴����������".split(""),e=0;e!=n[166].length;++e)65533!==n[166][e].charCodeAt(0)&&(r[n[166][e]]=42496+e,t[42496+e]=n[166][e]);for(n[167]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=n[167].length;++e)65533!==n[167][e].charCodeAt(0)&&(r[n[167][e]]=42752+e,t[42752+e]=n[167][e]);for(n[168]="����������������������������������������������������������������ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇�█▉▊▋▌▍▎▏▓▔▕▼▽◢◣◤◥☉⊕〒〝〞�����������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ�ńň�ɡ����ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������".split(""),e=0;e!=n[168].length;++e)65533!==n[168][e].charCodeAt(0)&&(r[n[168][e]]=43008+e,t[43008+e]=n[168][e]);for(n[169]="����������������������������������������������������������������〡〢〣〤〥〦〧〨〩㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦�℡㈱�‐���ー゛゜ヽヾ〆ゝゞ﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡�﹢﹣﹤﹥﹦﹨﹩﹪﹫�������������〇�������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������".split(""),e=0;e!=n[169].length;++e)65533!==n[169][e].charCodeAt(0)&&(r[n[169][e]]=43264+e,t[43264+e]=n[169][e]);for(n[170]="����������������������������������������������������������������狜狝狟狢狣狤狥狦狧狪狫狵狶狹狽狾狿猀猂猄猅猆猇猈猉猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀獁獂獃獄獅獆獇獈�獉獊獋獌獎獏獑獓獔獕獖獘獙獚獛獜獝獞獟獡獢獣獤獥獦獧獨獩獪獫獮獰獱�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[170].length;++e)65533!==n[170][e].charCodeAt(0)&&(r[n[170][e]]=43520+e,t[43520+e]=n[170][e]);for(n[171]="����������������������������������������������������������������獲獳獴獵獶獷獸獹獺獻獼獽獿玀玁玂玃玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣玤玥玦玧玨玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃珄珅珆珇�珋珌珎珒珓珔珕珖珗珘珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳珴珵珶珷�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[171].length;++e)65533!==n[171][e].charCodeAt(0)&&(r[n[171][e]]=43776+e,t[43776+e]=n[171][e]);for(n[172]="����������������������������������������������������������������珸珹珺珻珼珽現珿琀琁琂琄琇琈琋琌琍琎琑琒琓琔琕琖琗琘琙琜琝琞琟琠琡琣琤琧琩琫琭琯琱琲琷琸琹琺琻琽琾琿瑀瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍�瑎瑏瑐瑑瑒瑓瑔瑖瑘瑝瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑮瑯瑱瑲瑳瑴瑵瑸瑹瑺�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[172].length;++e)65533!==n[172][e].charCodeAt(0)&&(r[n[172][e]]=44032+e,t[44032+e]=n[172][e]);for(n[173]="����������������������������������������������������������������瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑璒璓璔璕璖璗璘璙璚璛璝璟璠璡璢璣璤璥璦璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璻璼璽璾璿瓀瓁瓂瓃瓄瓅瓆瓇�瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓓瓔瓕瓖瓗瓘瓙瓚瓛瓝瓟瓡瓥瓧瓨瓩瓪瓫瓬瓭瓰瓱瓲�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[173].length;++e)65533!==n[173][e].charCodeAt(0)&&(r[n[173][e]]=44288+e,t[44288+e]=n[173][e]);for(n[174]="����������������������������������������������������������������瓳瓵瓸瓹瓺瓻瓼瓽瓾甀甁甂甃甅甆甇甈甉甊甋甌甎甐甒甔甕甖甗甛甝甞甠甡產産甤甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘�畝畞畟畠畡畢畣畤畧畨畩畫畬畭畮畯異畱畳畵當畷畺畻畼畽畾疀疁疂疄疅疇�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[174].length;++e)65533!==n[174][e].charCodeAt(0)&&(r[n[174][e]]=44544+e,t[44544+e]=n[174][e]);for(n[175]="����������������������������������������������������������������疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦疧疨疩疪疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇�瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[175].length;++e)65533!==n[175][e].charCodeAt(0)&&(r[n[175][e]]=44800+e,t[44800+e]=n[175][e]);for(n[176]="����������������������������������������������������������������癅癆癇癈癉癊癋癎癏癐癑癒癓癕癗癘癙癚癛癝癟癠癡癢癤癥癦癧癨癩癪癬癭癮癰癱癲癳癴癵癶癷癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛�皜皝皞皟皠皡皢皣皥皦皧皨皩皪皫皬皭皯皰皳皵皶皷皸皹皺皻皼皽皾盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�".split(""),e=0;e!=n[176].length;++e)65533!==n[176][e].charCodeAt(0)&&(r[n[176][e]]=45056+e,t[45056+e]=n[176][e]);for(n[177]="����������������������������������������������������������������盄盇盉盋盌盓盕盙盚盜盝盞盠盡盢監盤盦盧盨盩盪盫盬盭盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎眏眐眑眒眓眔眕眖眗眘眛眜眝眞眡眣眤眥眧眪眫�眬眮眰眱眲眳眴眹眻眽眾眿睂睄睅睆睈睉睊睋睌睍睎睏睒睓睔睕睖睗睘睙睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�".split(""),e=0;e!=n[177].length;++e)65533!==n[177][e].charCodeAt(0)&&(r[n[177][e]]=45312+e,t[45312+e]=n[177][e]);for(n[178]="����������������������������������������������������������������睝睞睟睠睤睧睩睪睭睮睯睰睱睲睳睴睵睶睷睸睺睻睼瞁瞂瞃瞆瞇瞈瞉瞊瞋瞏瞐瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶瞷瞸瞹瞺�瞼瞾矀矁矂矃矄矅矆矇矈矉矊矋矌矎矏矐矑矒矓矔矕矖矘矙矚矝矞矟矠矡矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�".split(""),e=0;e!=n[178].length;++e)65533!==n[178][e].charCodeAt(0)&&(r[n[178][e]]=45568+e,t[45568+e]=n[178][e]);for(n[179]="����������������������������������������������������������������矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃砄砅砆砇砈砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚�硛硜硞硟硠硡硢硣硤硥硦硧硨硩硯硰硱硲硳硴硵硶硸硹硺硻硽硾硿碀碁碂碃场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�".split(""),e=0;e!=n[179].length;++e)65533!==n[179][e].charCodeAt(0)&&(r[n[179][e]]=45824+e,t[45824+e]=n[179][e]);for(n[180]="����������������������������������������������������������������碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨碩碪碫碬碭碮碯碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚磛磜磝磞磟磠磡磢磣�磤磥磦磧磩磪磫磭磮磯磰磱磳磵磶磸磹磻磼磽磾磿礀礂礃礄礆礇礈礉礊礋礌础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�".split(""),e=0;e!=n[180].length;++e)65533!==n[180][e].charCodeAt(0)&&(r[n[180][e]]=46080+e,t[46080+e]=n[180][e]);for(n[181]="����������������������������������������������������������������礍礎礏礐礑礒礔礕礖礗礘礙礚礛礜礝礟礠礡礢礣礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礵礶礷礸礹礽礿祂祃祄祅祇祊祋祌祍祎祏祐祑祒祔祕祘祙祡祣�祤祦祩祪祫祬祮祰祱祲祳祴祵祶祹祻祼祽祾祿禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�".split(""),e=0;e!=n[181].length;++e)65533!==n[181][e].charCodeAt(0)&&(r[n[181][e]]=46336+e,t[46336+e]=n[181][e]);for(n[182]="����������������������������������������������������������������禓禔禕禖禗禘禙禛禜禝禞禟禠禡禢禣禤禥禦禨禩禪禫禬禭禮禯禰禱禲禴禵禶禷禸禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙秚秛秜秝秞秠秡秢秥秨秪�秬秮秱秲秳秴秵秶秷秹秺秼秾秿稁稄稅稇稈稉稊稌稏稐稑稒稓稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�".split(""),e=0;e!=n[182].length;++e)65533!==n[182][e].charCodeAt(0)&&(r[n[182][e]]=46592+e,t[46592+e]=n[182][e]);for(n[183]="����������������������������������������������������������������稝稟稡稢稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稴稵稶稸稺稾穀穁穂穃穄穅穇穈穉穊穋穌積穎穏穐穒穓穔穕穖穘穙穚穛穜穝穞穟穠穡穢穣穤穥穦穧穨�穩穪穫穬穭穮穯穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�".split(""),e=0;e!=n[183].length;++e)65533!==n[183][e].charCodeAt(0)&&(r[n[183][e]]=46848+e,t[46848+e]=n[183][e]);for(n[184]="����������������������������������������������������������������窣窤窧窩窪窫窮窯窰窱窲窴窵窶窷窸窹窺窻窼窽窾竀竁竂竃竄竅竆竇竈竉竊竌竍竎竏竐竑竒竓竔竕竗竘竚竛竜竝竡竢竤竧竨竩竪竫竬竮竰竱竲竳�竴竵競竷竸竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�".split(""),e=0;e!=n[184].length;++e)65533!==n[184][e].charCodeAt(0)&&(r[n[184][e]]=47104+e,t[47104+e]=n[184][e]);for(n[185]="����������������������������������������������������������������笯笰笲笴笵笶笷笹笻笽笿筀筁筂筃筄筆筈筊筍筎筓筕筗筙筜筞筟筡筣筤筥筦筧筨筩筪筫筬筭筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆箇箈箉箊箋箌箎箏�箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹箺箻箼箽箾箿節篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�".split(""),e=0;e!=n[185].length;++e)65533!==n[185][e].charCodeAt(0)&&(r[n[185][e]]=47360+e,t[47360+e]=n[185][e]);for(n[186]="����������������������������������������������������������������篅篈築篊篋篍篎篏篐篒篔篕篖篗篘篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲篳篴篵篶篸篹篺篻篽篿簀簁簂簃簄簅簆簈簉簊簍簎簐簑簒簓簔簕簗簘簙�簚簛簜簝簞簠簡簢簣簤簥簨簩簫簬簭簮簯簰簱簲簳簴簵簶簷簹簺簻簼簽簾籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�".split(""),e=0;e!=n[186].length;++e)65533!==n[186][e].charCodeAt(0)&&(r[n[186][e]]=47616+e,t[47616+e]=n[186][e]);for(n[187]="����������������������������������������������������������������籃籄籅籆籇籈籉籊籋籌籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲籵籶籷籸籹籺籾籿粀粁粂粃粄粅粆粇�粈粊粋粌粍粎粏粐粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴粵粶粷粸粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�".split(""),e=0;e!=n[187].length;++e)65533!==n[187][e].charCodeAt(0)&&(r[n[187][e]]=47872+e,t[47872+e]=n[187][e]);for(n[188]="����������������������������������������������������������������粿糀糂糃糄糆糉糋糎糏糐糑糒糓糔糘糚糛糝糞糡糢糣糤糥糦糧糩糪糫糬糭糮糰糱糲糳糴糵糶糷糹糺糼糽糾糿紀紁紂紃約紅紆紇紈紉紋紌納紎紏紐�紑紒紓純紕紖紗紘紙級紛紜紝紞紟紡紣紤紥紦紨紩紪紬紭紮細紱紲紳紴紵紶肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�".split(""),e=0;e!=n[188].length;++e)65533!==n[188][e].charCodeAt(0)&&(r[n[188][e]]=48128+e,t[48128+e]=n[188][e]);for(n[189]="����������������������������������������������������������������紷紸紹紺紻紼紽紾紿絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟絠絡絢絣絤絥給絧絨絩絪絫絬絭絯絰統絲絳絴絵絶�絸絹絺絻絼絽絾絿綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�".split(""),e=0;e!=n[189].length;++e)65533!==n[189][e].charCodeAt(0)&&(r[n[189][e]]=48384+e,t[48384+e]=n[189][e]);for(n[190]="����������������������������������������������������������������継続綛綜綝綞綟綠綡綢綣綤綥綧綨綩綪綫綬維綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙�線緛緜緝緞緟締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�".split(""),e=0;e!=n[190].length;++e)65533!==n[190][e].charCodeAt(0)&&(r[n[190][e]]=48640+e,t[48640+e]=n[190][e]);for(n[191]="����������������������������������������������������������������緻緼緽緾緿縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹�縺縼總績縿繀繂繃繄繅繆繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�".split(""),e=0;e!=n[191].length;++e)65533!==n[191][e].charCodeAt(0)&&(r[n[191][e]]=48896+e,t[48896+e]=n[191][e]);for(n[192]="����������������������������������������������������������������繞繟繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿纀纁纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纜纝纞�纮纴纻纼绖绤绬绹缊缐缞缷缹缻缼缽缾缿罀罁罃罆罇罈罉罊罋罌罍罎罏罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�".split(""),e=0;e!=n[192].length;++e)65533!==n[192][e].charCodeAt(0)&&(r[n[192][e]]=49152+e,t[49152+e]=n[192][e]);for(n[193]="����������������������������������������������������������������罖罙罛罜罝罞罠罣罤罥罦罧罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂羃羄羅羆羇羈羉羋羍羏羐羑羒羓羕羖羗羘羙羛羜羠羢羣羥羦羨義羪羫羬羭羮羱�羳羴羵羶羷羺羻羾翀翂翃翄翆翇翈翉翋翍翏翐翑習翓翖翗翙翚翛翜翝翞翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�".split(""),e=0;e!=n[193].length;++e)65533!==n[193][e].charCodeAt(0)&&(r[n[193][e]]=49408+e,t[49408+e]=n[193][e]);for(n[194]="����������������������������������������������������������������翤翧翨翪翫翬翭翯翲翴翵翶翷翸翹翺翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫耬耭耮耯耰耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗�聙聛聜聝聞聟聠聡聢聣聤聥聦聧聨聫聬聭聮聯聰聲聳聴聵聶職聸聹聺聻聼聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�".split(""),e=0;e!=n[194].length;++e)65533!==n[194][e].charCodeAt(0)&&(r[n[194][e]]=49664+e,t[49664+e]=n[194][e]);for(n[195]="����������������������������������������������������������������聾肁肂肅肈肊肍肎肏肐肑肒肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇胈胉胊胋胏胐胑胒胓胔胕胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋�脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�".split(""),e=0;e!=n[195].length;++e)65533!==n[195][e].charCodeAt(0)&&(r[n[195][e]]=49920+e,t[49920+e]=n[195][e]);for(n[196]="����������������������������������������������������������������腀腁腂腃腄腅腇腉腍腎腏腒腖腗腘腛腜腝腞腟腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃膄膅膆膇膉膋膌膍膎膐膒膓膔膕膖膗膙膚膞膟膠膡膢膤膥�膧膩膫膬膭膮膯膰膱膲膴膵膶膷膸膹膼膽膾膿臄臅臇臈臉臋臍臎臏臐臑臒臓摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�".split(""),e=0;e!=n[196].length;++e)65533!==n[196][e].charCodeAt(0)&&(r[n[196][e]]=50176+e,t[50176+e]=n[196][e]);for(n[197]="����������������������������������������������������������������臔臕臖臗臘臙臚臛臜臝臞臟臠臡臢臤臥臦臨臩臫臮臯臰臱臲臵臶臷臸臹臺臽臿舃與興舉舊舋舎舏舑舓舕舖舗舘舙舚舝舠舤舥舦舧舩舮舲舺舼舽舿�艀艁艂艃艅艆艈艊艌艍艎艐艑艒艓艔艕艖艗艙艛艜艝艞艠艡艢艣艤艥艦艧艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�".split(""),e=0;e!=n[197].length;++e)65533!==n[197][e].charCodeAt(0)&&(r[n[197][e]]=50432+e,t[50432+e]=n[197][e]);for(n[198]="����������������������������������������������������������������艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸�苺苼苽苾苿茀茊茋茍茐茒茓茖茘茙茝茞茟茠茡茢茣茤茥茦茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�".split(""),e=0;e!=n[198].length;++e)65533!==n[198][e].charCodeAt(0)&&(r[n[198][e]]=50688+e,t[50688+e]=n[198][e]);for(n[199]="����������������������������������������������������������������茾茿荁荂荄荅荈荊荋荌荍荎荓荕荖荗荘荙荝荢荰荱荲荳荴荵荶荹荺荾荿莀莁莂莃莄莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡莢莣莤莥莦莧莬莭莮�莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�".split(""),e=0;e!=n[199].length;++e)65533!==n[199][e].charCodeAt(0)&&(r[n[199][e]]=50944+e,t[50944+e]=n[199][e]);for(n[200]="����������������������������������������������������������������菮華菳菴菵菶菷菺菻菼菾菿萀萂萅萇萈萉萊萐萒萓萔萕萖萗萙萚萛萞萟萠萡萢萣萩萪萫萬萭萮萯萰萲萳萴萵萶萷萹萺萻萾萿葀葁葂葃葄葅葇葈葉�葊葋葌葍葎葏葐葒葓葔葕葖葘葝葞葟葠葢葤葥葦葧葨葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�".split(""),e=0;e!=n[200].length;++e)65533!==n[200][e].charCodeAt(0)&&(r[n[200][e]]=51200+e,t[51200+e]=n[200][e]);for(n[201]="����������������������������������������������������������������葽葾葿蒀蒁蒃蒄蒅蒆蒊蒍蒏蒐蒑蒒蒓蒔蒕蒖蒘蒚蒛蒝蒞蒟蒠蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗�蓘蓙蓚蓛蓜蓞蓡蓢蓤蓧蓨蓩蓪蓫蓭蓮蓯蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�".split(""),e=0;e!=n[201].length;++e)65533!==n[201][e].charCodeAt(0)&&(r[n[201][e]]=51456+e,t[51456+e]=n[201][e]);for(n[202]="����������������������������������������������������������������蔃蔄蔅蔆蔇蔈蔉蔊蔋蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢蔣蔤蔥蔦蔧蔨蔩蔪蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔾蔿蕀蕁蕂蕄蕅蕆蕇蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕�蕗蕘蕚蕛蕜蕝蕟蕠蕡蕢蕣蕥蕦蕧蕩蕪蕫蕬蕭蕮蕯蕰蕱蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�".split(""),e=0;e!=n[202].length;++e)65533!==n[202][e].charCodeAt(0)&&(r[n[202][e]]=51712+e,t[51712+e]=n[202][e]);for(n[203]="����������������������������������������������������������������薂薃薆薈薉薊薋薌薍薎薐薑薒薓薔薕薖薗薘薙薚薝薞薟薠薡薢薣薥薦薧薩薫薬薭薱薲薳薴薵薶薸薺薻薼薽薾薿藀藂藃藄藅藆藇藈藊藋藌藍藎藑藒�藔藖藗藘藙藚藛藝藞藟藠藡藢藣藥藦藧藨藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�".split(""),e=0;e!=n[203].length;++e)65533!==n[203][e].charCodeAt(0)&&(r[n[203][e]]=51968+e,t[51968+e]=n[203][e]);for(n[204]="����������������������������������������������������������������藹藺藼藽藾蘀蘁蘂蘃蘄蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘒蘓蘔蘕蘗蘘蘙蘚蘛蘜蘝蘞蘟蘠蘡蘢蘣蘤蘥蘦蘨蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘹蘺蘻蘽蘾蘿虀�虁虂虃虄虅虆虇虈虉虊虋虌虒虓處虖虗虘虙虛虜虝號虠虡虣虤虥虦虧虨虩虪獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�".split(""),e=0;e!=n[204].length;++e)65533!==n[204][e].charCodeAt(0)&&(r[n[204][e]]=52224+e,t[52224+e]=n[204][e]);for(n[205]="����������������������������������������������������������������虭虯虰虲虳虴虵虶虷虸蚃蚄蚅蚆蚇蚈蚉蚎蚏蚐蚑蚒蚔蚖蚗蚘蚙蚚蚛蚞蚟蚠蚡蚢蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻蚼蚽蚾蚿蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜�蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�".split(""),e=0;e!=n[205].length;++e)65533!==n[205][e].charCodeAt(0)&&(r[n[205][e]]=52480+e,t[52480+e]=n[205][e]);for(n[206]="����������������������������������������������������������������蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀蝁蝂蝃蝄蝅蝆蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚蝛蝜蝝蝞蝟蝡蝢蝦蝧蝨蝩蝪蝫蝬蝭蝯蝱蝲蝳蝵�蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎螏螐螑螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�".split(""),e=0;e!=n[206].length;++e)65533!==n[206][e].charCodeAt(0)&&(r[n[206][e]]=52736+e,t[52736+e]=n[206][e]);for(n[207]="����������������������������������������������������������������螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁蟂蟃蟄蟅蟇蟈蟉蟌蟍蟎蟏蟐蟔蟕蟖蟗蟘蟙蟚蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸�蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋蠌蠍蠎蠏蠐蠑蠒蠔蠗蠘蠙蠚蠜蠝蠞蠟蠠蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�".split(""),e=0;e!=n[207].length;++e)65533!==n[207][e].charCodeAt(0)&&(r[n[207][e]]=52992+e,t[52992+e]=n[207][e]);for(n[208]="����������������������������������������������������������������蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠳蠴蠵蠶蠷蠸蠺蠻蠽蠾蠿衁衂衃衆衇衈衉衊衋衎衏衐衑衒術衕衖衘衚衛衜衝衞衟衠衦衧衪衭衯衱衳衴衵衶衸衹衺�衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�".split(""),e=0;e!=n[208].length;++e)65533!==n[208][e].charCodeAt(0)&&(r[n[208][e]]=53248+e,t[53248+e]=n[208][e]);for(n[209]="����������������������������������������������������������������袬袮袯袰袲袳袴袵袶袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚裛補裝裞裠裡裦裧裩裪裫裬裭裮裯裲裵裶裷裺裻製裿褀褁褃褄褅褆複褈�褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟褠褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�".split(""),e=0;e!=n[209].length;++e)65533!==n[209][e].charCodeAt(0)&&(r[n[209][e]]=53504+e,t[53504+e]=n[209][e]);for(n[210]="����������������������������������������������������������������褸褹褺褻褼褽褾褿襀襂襃襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襠襡襢襣襤襥襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襼�襽襾覀覂覄覅覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�".split(""),e=0;e!=n[210].length;++e)65533!==n[210][e].charCodeAt(0)&&(r[n[210][e]]=53760+e,t[53760+e]=n[210][e]);for(n[211]="����������������������������������������������������������������覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿觀觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴觵觶觷觸觹觺�觻觼觽觾觿訁訂訃訄訅訆計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�".split(""),e=0;e!=n[211].length;++e)65533!==n[211][e].charCodeAt(0)&&(r[n[211][e]]=54016+e,t[54016+e]=n[211][e]);for(n[212]="����������������������������������������������������������������訞訟訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訿詀詁詂詃詄詅詆詇詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞�詟詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詺詻詼詽詾詿誀浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�".split(""),e=0;e!=n[212].length;++e)65533!==n[212][e].charCodeAt(0)&&(r[n[212][e]]=54272+e,t[54272+e]=n[212][e]);for(n[213]="����������������������������������������������������������������誁誂誃誄誅誆誇誈誋誌認誎誏誐誑誒誔誕誖誗誘誙誚誛誜誝語誟誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調諀諁諂�諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟諠諡諢諣铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�".split(""),e=0;e!=n[213].length;++e)65533!==n[213][e].charCodeAt(0)&&(r[n[213][e]]=54528+e,t[54528+e]=n[213][e]);for(n[214]="����������������������������������������������������������������諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿謀謁謂謃謄謅謆謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟謠謡謢謣�謤謥謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿譀譁譂譃譄譅帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�".split(""),e=0;e!=n[214].length;++e)65533!==n[214][e].charCodeAt(0)&&(r[n[214][e]]=54784+e,t[54784+e]=n[214][e]);for(n[215]="����������������������������������������������������������������譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟譠譡譢譣譤譥譧譨譩譪譫譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿讀讁讂讃讄讅讆�讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������".split(""),e=0;e!=n[215].length;++e)65533!==n[215][e].charCodeAt(0)&&(r[n[215][e]]=55040+e,t[55040+e]=n[215][e]);for(n[216]="����������������������������������������������������������������谸谹谺谻谼谽谾谿豀豂豃豄豅豈豊豋豍豎豏豐豑豒豓豔豖豗豘豙豛豜豝豞豟豠豣豤豥豦豧豨豩豬豭豮豯豰豱豲豴豵豶豷豻豼豽豾豿貀貁貃貄貆貇�貈貋貍貎貏貐貑貒貓貕貖貗貙貚貛貜貝貞貟負財貢貣貤貥貦貧貨販貪貫責貭亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�".split(""),e=0;e!=n[216].length;++e)65533!==n[216][e].charCodeAt(0)&&(r[n[216][e]]=55296+e,t[55296+e]=n[216][e]);for(n[217]="����������������������������������������������������������������貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟賠賡賢賣賤賥賦賧賨賩質賫賬�賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿贀贁贂贃贄贅贆贇贈贉贊贋贌贍佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�".split(""),e=0;e!=n[217].length;++e)65533!==n[217][e].charCodeAt(0)&&(r[n[217][e]]=55552+e,t[55552+e]=n[217][e]);for(n[218]="����������������������������������������������������������������贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸赹赺赻赼赽赾赿趀趂趃趆趇趈趉趌趍趎趏趐趒趓趕趖趗趘趙趚趛趜趝趞趠趡�趢趤趥趦趧趨趩趪趫趬趭趮趯趰趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�".split(""),e=0;e!=n[218].length;++e)65533!==n[218][e].charCodeAt(0)&&(r[n[218][e]]=55808+e,t[55808+e]=n[218][e]);for(n[219]="����������������������������������������������������������������跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾跿踀踁踂踃踄踆踇踈踋踍踎踐踑踒踓踕踖踗踘踙踚踛踜踠踡踤踥踦踧踨踫踭踰踲踳踴踶踷踸踻踼踾�踿蹃蹅蹆蹌蹍蹎蹏蹐蹓蹔蹕蹖蹗蹘蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�".split(""),e=0;e!=n[219].length;++e)65533!==n[219][e].charCodeAt(0)&&(r[n[219][e]]=56064+e,t[56064+e]=n[219][e]);for(n[220]="����������������������������������������������������������������蹳蹵蹷蹸蹹蹺蹻蹽蹾躀躂躃躄躆躈躉躊躋躌躍躎躑躒躓躕躖躗躘躙躚躛躝躟躠躡躢躣躤躥躦躧躨躩躪躭躮躰躱躳躴躵躶躷躸躹躻躼躽躾躿軀軁軂�軃軄軅軆軇軈軉車軋軌軍軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟軠軡転軣軤堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�".split(""),e=0;e!=n[220].length;++e)65533!==n[220][e].charCodeAt(0)&&(r[n[220][e]]=56320+e,t[56320+e]=n[220][e]);for(n[221]="����������������������������������������������������������������軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟輠輡輢輣�輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿轀轁轂轃轄荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�".split(""),e=0;e!=n[221].length;++e)65533!==n[221][e].charCodeAt(0)&&(r[n[221][e]]=56576+e,t[56576+e]=n[221][e]);for(n[222]="����������������������������������������������������������������轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟轠轡轢轣轤轥轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆�迉迊迋迌迍迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�".split(""),e=0;e!=n[222].length;++e)65533!==n[222][e].charCodeAt(0)&&(r[n[222][e]]=56832+e,t[56832+e]=n[222][e]);for(n[223]="����������������������������������������������������������������這逜連逤逥逧逨逩逪逫逬逰週進逳逴逷逹逺逽逿遀遃遅遆遈遉遊運遌過達違遖遙遚遜遝遞遟遠遡遤遦遧適遪遫遬遯遰遱遲遳遶遷選遹遺遻遼遾邁�還邅邆邇邉邊邌邍邎邏邐邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�".split(""),e=0;e!=n[223].length;++e)65533!==n[223][e].charCodeAt(0)&&(r[n[223][e]]=57088+e,t[57088+e]=n[223][e]);for(n[224]="����������������������������������������������������������������郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄚鄛鄜�鄝鄟鄠鄡鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄰鄲鄳鄴鄵鄶鄷鄸鄺鄻鄼鄽鄾鄿酀酁酂酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="����������������������������������������������������������������酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀醁醂醃醄醆醈醊醎醏醓醔醕醖醗醘醙醜醝醞醟醠醡醤醥醦醧醨醩醫醬醰醱醲醳醶醷醸醹醻�醼醽醾醿釀釁釂釃釄釅釆釈釋釐釒釓釔釕釖釗釘釙釚釛針釞釟釠釡釢釣釤釥帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="����������������������������������������������������������������釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟鈠鈡鈢鈣鈤�鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿鉀鉁鉂鉃鉄鉅狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="����������������������������������������������������������������鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿銀銁銂銃銄銅�銆銇銈銉銊銋銌銍銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟銠銡銢銣銤銥銦銧恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="����������������������������������������������������������������銨銩銪銫銬銭銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿鋀鋁鋂鋃鋄鋅鋆鋇鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟鋠鋡鋢鋣鋤鋥鋦鋧鋨�鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿錀錁錂錃錄錅錆錇錈錉洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="����������������������������������������������������������������錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錿鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉�鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="����������������������������������������������������������������鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫�鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="����������������������������������������������������������������鏎鏏鏐鏑鏒鏓鏔鏕鏗鏘鏙鏚鏛鏜鏝鏞鏟鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍�鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="����������������������������������������������������������������鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐿鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑬鑭鑮鑯�鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿钀钁钂钃钄钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="����������������������������������������������������������������锧锳锽镃镈镋镕镚镠镮镴镵長镸镹镺镻镼镽镾門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟閠閡関閣閤閥閦閧閨閩閪�閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿闀闁闂闃闄闅闆闇闈闉闊闋椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="����������������������������������������������������������������闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟闠闡闢闣闤闥闦闧闬闿阇阓阘阛阞阠阣阤阥阦阧阨阩阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗�陘陙陚陜陝陞陠陣陥陦陫陭陮陯陰陱陳陸陹険陻陼陽陾陿隀隁隂隃隄隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[235]="����������������������������������������������������������������隌階隑隒隓隕隖隚際隝隞隟隠隡隢隣隤隥隦隨隩險隫隬隭隮隯隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖雗雘雙雚雛雜雝雞雟雡離難雤雥雦雧雫�雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗霘霙霚霛霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�".split(""),e=0;e!=n[235].length;++e)65533!==n[235][e].charCodeAt(0)&&(r[n[235][e]]=60160+e,t[60160+e]=n[235][e]);for(n[236]="����������������������������������������������������������������霡霢霣霤霥霦霧霨霩霫霬霮霯霱霳霴霵霶霷霺霻霼霽霿靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑靔靕靗靘靚靜靝靟靣靤靦靧靨靪靫靬靭靮靯靰靱�靲靵靷靸靹靺靻靽靾靿鞀鞁鞂鞃鞄鞆鞇鞈鞉鞊鞌鞎鞏鞐鞓鞕鞖鞗鞙鞚鞛鞜鞝臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�".split(""),e=0;e!=n[236].length;++e)65533!==n[236][e].charCodeAt(0)&&(r[n[236][e]]=60416+e,t[60416+e]=n[236][e]);for(n[237]="����������������������������������������������������������������鞞鞟鞡鞢鞤鞥鞦鞧鞨鞩鞪鞬鞮鞰鞱鞳鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟韠韡韢韣�韤韥韨韮韯韰韱韲韴韷韸韹韺韻韼韽韾響頀頁頂頃頄項順頇須頉頊頋頌頍頎怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="����������������������������������������������������������������頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿顀顁顂顃顄顅顆顇顈顉顊顋題額�顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[239]="����������������������������������������������������������������顯顰顱顲顳顴颋颎颒颕颙颣風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿飀飁飂飃飄飅飆飇飈飉飊飋飌飍飏飐飔飖飗飛飜飝飠飡飢飣飤�飥飦飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿餀餁餂餃餄餅餆餇铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�".split(""),e=0;e!=n[239].length;++e)65533!==n[239][e].charCodeAt(0)&&(r[n[239][e]]=61184+e,t[61184+e]=n[239][e]);for(n[240]="����������������������������������������������������������������餈餉養餋餌餎餏餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟餠餡餢餣餤餥餦餧館餩餪餫餬餭餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿饀饁饂饃饄饅饆饇饈饉�饊饋饌饍饎饏饐饑饒饓饖饗饘饙饚饛饜饝饞饟饠饡饢饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�".split(""),e=0;e!=n[240].length;++e)65533!==n[240][e].charCodeAt(0)&&(r[n[240][e]]=61440+e,t[61440+e]=n[240][e]);for(n[241]="����������������������������������������������������������������馌馎馚馛馜馝馞馟馠馡馢馣馤馦馧馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘�駙駚駛駜駝駞駟駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�".split(""),e=0;e!=n[241].length;++e)65533!==n[241][e].charCodeAt(0)&&(r[n[241][e]]=61696+e,t[61696+e]=n[241][e]);for(n[242]="����������������������������������������������������������������駺駻駼駽駾駿騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸�騹騺騻騼騽騾騿驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�".split(""),e=0;e!=n[242].length;++e)65533!==n[242][e].charCodeAt(0)&&(r[n[242][e]]=61952+e,t[61952+e]=n[242][e]);for(n[243]="����������������������������������������������������������������驚驛驜驝驞驟驠驡驢驣驤驥驦驧驨驩驪驫驲骃骉骍骎骔骕骙骦骩骪骫骬骭骮骯骲骳骴骵骹骻骽骾骿髃髄髆髇髈髉髊髍髎髏髐髒體髕髖髗髙髚髛髜�髝髞髠髢髣髤髥髧髨髩髪髬髮髰髱髲髳髴髵髶髷髸髺髼髽髾髿鬀鬁鬂鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�".split(""),e=0;e!=n[243].length;++e)65533!==n[243][e].charCodeAt(0)&&(r[n[243][e]]=62208+e,t[62208+e]=n[243][e]);for(n[244]="����������������������������������������������������������������鬇鬉鬊鬋鬌鬍鬎鬐鬑鬒鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬠鬡鬢鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬰鬱鬳鬴鬵鬶鬷鬸鬹鬺鬽鬾鬿魀魆魊魋魌魎魐魒魓魕魖魗魘魙魚�魛魜魝魞魟魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�".split(""),e=0;e!=n[244].length;++e)65533!==n[244][e].charCodeAt(0)&&(r[n[244][e]]=62464+e,t[62464+e]=n[244][e]);for(n[245]="����������������������������������������������������������������魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺�鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�".split(""),e=0;e!=n[245].length;++e)65533!==n[245][e].charCodeAt(0)&&(r[n[245][e]]=62720+e,t[62720+e]=n[245][e]);for(n[246]="����������������������������������������������������������������鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚�鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�".split(""),e=0;e!=n[246].length;++e)65533!==n[246][e].charCodeAt(0)&&(r[n[246][e]]=62976+e,t[62976+e]=n[246][e]);for(n[247]="����������������������������������������������������������������鰼鰽鰾鰿鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺�鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾鲿鳀鳁鳂鳈鳉鳑鳒鳚鳛鳠鳡鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�".split(""),e=0;e!=n[247].length;++e)65533!==n[247][e].charCodeAt(0)&&(r[n[247][e]]=63232+e,t[63232+e]=n[247][e]);for(n[248]="����������������������������������������������������������������鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡�鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[248].length;++e)65533!==n[248][e].charCodeAt(0)&&(r[n[248][e]]=63488+e,t[63488+e]=n[248][e]);for(n[249]="����������������������������������������������������������������鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁�鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[249].length;++e)65533!==n[249][e].charCodeAt(0)&&(r[n[249][e]]=63744+e,t[63744+e]=n[249][e]);for(n[250]="����������������������������������������������������������������鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡�鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[250].length;++e)65533!==n[250][e].charCodeAt(0)&&(r[n[250][e]]=64e3+e,t[64e3+e]=n[250][e]);for(n[251]="����������������������������������������������������������������鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽麀�麁麃麄麅麆麉麊麌麍麎麏麐麑麔麕麖麗麘麙麚麛麜麞麠麡麢麣麤麥麧麨麩麪�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[251].length;++e)65533!==n[251][e].charCodeAt(0)&&(r[n[251][e]]=64256+e,t[64256+e]=n[251][e]);for(n[252]="����������������������������������������������������������������麫麬麭麮麯麰麱麲麳麵麶麷麹麺麼麿黀黁黂黃黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰黱黲黳黴黵黶黷黸黺黽黿鼀鼁鼂鼃鼄鼅�鼆鼇鼈鼉鼊鼌鼏鼑鼒鼔鼕鼖鼘鼚鼛鼜鼝鼞鼟鼡鼣鼤鼥鼦鼧鼨鼩鼪鼫鼭鼮鼰鼱�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[252].length;++e)65533!==n[252][e].charCodeAt(0)&&(r[n[252][e]]=64512+e,t[64512+e]=n[252][e]);for(n[253]="����������������������������������������������������������������鼲鼳鼴鼵鼶鼸鼺鼼鼿齀齁齂齃齅齆齇齈齉齊齋齌齍齎齏齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸�齹齺齻齼齽齾龁龂龍龎龏龐龑龒龓龔龕龖龗龘龜龝龞龡龢龣龤龥郎凉秊裏隣�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[253].length;++e)65533!==n[253][e].charCodeAt(0)&&(r[n[253][e]]=64768+e,t[64768+e]=n[253][e]);for(n[254]="����������������������������������������������������������������兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[254].length;++e)65533!==n[254][e].charCodeAt(0)&&(r[n[254][e]]=65024+e,t[65024+e]=n[254][e]);return{enc:r,dec:t}}(),a[949]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[129]="�����������������������������������������������������������������갂갃갅갆갋갌갍갎갏갘갞갟갡갢갣갥갦갧갨갩갪갫갮갲갳갴������갵갶갷갺갻갽갾갿걁걂걃걄걅걆걇걈걉걊걌걎걏걐걑걒걓걕������걖걗걙걚걛걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯걲걳걵걶걹걻걼걽걾걿겂겇겈겍겎겏겑겒겓겕겖겗겘겙겚겛겞겢겣겤겥겦겧겫겭겮겱겲겳겴겵겶겷겺겾겿곀곂곃곅곆곇곉곊곋곍곎곏곐곑곒곓곔곖곘곙곚곛곜곝곞곟곢곣곥곦곩곫곭곮곲곴곷곸곹곺곻곾곿괁괂괃괅괇괈괉괊괋괎괐괒괓�".split(""),e=0;e!=n[129].length;++e)65533!==n[129][e].charCodeAt(0)&&(r[n[129][e]]=33024+e,t[33024+e]=n[129][e]);for(n[130]="�����������������������������������������������������������������괔괕괖괗괙괚괛괝괞괟괡괢괣괤괥괦괧괨괪괫괮괯괰괱괲괳������괶괷괹괺괻괽괾괿굀굁굂굃굆굈굊굋굌굍굎굏굑굒굓굕굖굗������굙굚굛굜굝굞굟굠굢굤굥굦굧굨굩굪굫굮굯굱굲굷굸굹굺굾궀궃궄궅궆궇궊궋궍궎궏궑궒궓궔궕궖궗궘궙궚궛궞궟궠궡궢궣궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궸궹궺궻궼궽궾궿귂귃귅귆귇귉귊귋귌귍귎귏귒귔귕귖귗귘귙귚귛귝귞귟귡귢귣귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷�".split(""),e=0;e!=n[130].length;++e)65533!==n[130][e].charCodeAt(0)&&(r[n[130][e]]=33280+e,t[33280+e]=n[130][e]);for(n[131]="�����������������������������������������������������������������귺귻귽귾긂긃긄긅긆긇긊긌긎긏긐긑긒긓긕긖긗긘긙긚긛긜������긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯긲긳긵긶긹긻긼������긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗깘깙깚깛깞깢깣깤깦깧깪깫깭깮깯깱깲깳깴깵깶깷깺깾깿꺀꺁꺂꺃꺆꺇꺈꺉꺊꺋꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺿껁껂껃껅껆껇껈껉껊껋껎껒껓껔껕껖껗껚껛껝껞껟껠껡껢껣껤껥�".split(""),e=0;e!=n[131].length;++e)65533!==n[131][e].charCodeAt(0)&&(r[n[131][e]]=33536+e,t[33536+e]=n[131][e]);for(n[132]="�����������������������������������������������������������������껦껧껩껪껬껮껯껰껱껲껳껵껶껷껹껺껻껽껾껿꼀꼁꼂꼃꼄꼅������꼆꼉꼊꼋꼌꼎꼏꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣������꼤꼥꼦꼧꼨꼩꼪꼫꼮꼯꼱꼳꼵꼶꼷꼸꼹꼺꼻꼾꽀꽄꽅꽆꽇꽊꽋꽌꽍꽎꽏꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽞꽟꽠꽡꽢꽣꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽺꽻꽼꽽꽾꽿꾁꾂꾃꾅꾆꾇꾉꾊꾋꾌꾍꾎꾏꾒꾓꾔꾖꾗꾘꾙꾚꾛꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾺꾻꾽꾾�".split(""),e=0;e!=n[132].length;++e)65533!==n[132][e].charCodeAt(0)&&(r[n[132][e]]=33792+e,t[33792+e]=n[132][e]);for(n[133]="�����������������������������������������������������������������꾿꿁꿂꿃꿄꿅꿆꿊꿌꿏꿐꿑꿒꿓꿕꿖꿗꿘꿙꿚꿛꿝꿞꿟꿠꿡������꿢꿣꿤꿥꿦꿧꿪꿫꿬꿭꿮꿯꿲꿳꿵꿶꿷꿹꿺꿻꿼꿽꿾꿿뀂뀃������뀅뀆뀇뀈뀉뀊뀋뀍뀎뀏뀑뀒뀓뀕뀖뀗뀘뀙뀚뀛뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끾끿낁낂낃낅낆낇낈낉낊낋낎낐낒낓낔낕낖낗낛낝낞낣낤�".split(""),e=0;e!=n[133].length;++e)65533!==n[133][e].charCodeAt(0)&&(r[n[133][e]]=34048+e,t[34048+e]=n[133][e]);for(n[134]="�����������������������������������������������������������������낥낦낧낪낰낲낶낷낹낺낻낽낾낿냀냁냂냃냆냊냋냌냍냎냏냒������냓냕냖냗냙냚냛냜냝냞냟냡냢냣냤냦냧냨냩냪냫냬냭냮냯냰������냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇넊넍넎넏넑넔넕넖넗넚넞넟넠넡넢넦넧넩넪넫넭넮넯넰넱넲넳넶넺넻넼넽넾넿녂녃녅녆녇녉녊녋녌녍녎녏녒녓녖녗녙녚녛녝녞녟녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷녺녻녽녾녿놁놃놄놅놆놇놊놌놎놏놐놑놕놖놗놙놚놛놝�".split(""),e=0;e!=n[134].length;++e)65533!==n[134][e].charCodeAt(0)&&(r[n[134][e]]=34304+e,t[34304+e]=n[134][e]);for(n[135]="�����������������������������������������������������������������놞놟놠놡놢놣놤놥놦놧놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸������놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇍뇎뇏뇑뇒뇓뇕������뇖뇗뇘뇙뇚뇛뇞뇠뇡뇢뇣뇤뇥뇦뇧뇪뇫뇭뇮뇯뇱뇲뇳뇴뇵뇶뇷뇸뇺뇼뇾뇿눀눁눂눃눆눇눉눊눍눎눏눐눑눒눓눖눘눚눛눜눝눞눟눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눵눶눷눸눹눺눻눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉙뉚뉛뉝뉞뉟뉡뉢뉣뉤뉥뉦뉧뉪뉫뉬뉭뉮�".split(""),e=0;e!=n[135].length;++e)65533!==n[135][e].charCodeAt(0)&&(r[n[135][e]]=34560+e,t[34560+e]=n[135][e]);for(n[136]="�����������������������������������������������������������������뉯뉰뉱뉲뉳뉶뉷뉸뉹뉺뉻뉽뉾뉿늀늁늂늃늆늇늈늊늋늌늍늎������늏늒늓늕늖늗늛늜늝늞늟늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷������늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇닊닋닍닎닏닑닓닔닕닖닗닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉댊댋댌댍댎댏댒댖댗댘댙댚댛댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓덗덙덚덝덠덡덢덣�".split(""),e=0;e!=n[136].length;++e)65533!==n[136][e].charCodeAt(0)&&(r[n[136][e]]=34816+e,t[34816+e]=n[136][e]);for(n[137]="�����������������������������������������������������������������덦덨덪덬덭덯덲덳덵덶덷덹덺덻덼덽덾덿뎂뎆뎇뎈뎉뎊뎋뎍������뎎뎏뎑뎒뎓뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎢뎣뎤뎥뎦뎧뎩뎪뎫뎭������뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됑됒됓됔됕됖됗됙됚됛됝됞됟됡됢됣됤됥됦됧됪됬됭됮됯됰됱됲됳됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄�".split(""),e=0;e!=n[137].length;++e)65533!==n[137][e].charCodeAt(0)&&(r[n[137][e]]=35072+e,t[35072+e]=n[137][e]);for(n[138]="�����������������������������������������������������������������둅둆둇둈둉둊둋둌둍둎둏둒둓둕둖둗둙둚둛둜둝둞둟둢둤둦������둧둨둩둪둫둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒁뒂������뒃뒄뒅뒆뒇뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒞뒟뒠뒡뒢뒣뒥뒦뒧뒩뒪뒫뒭뒮뒯뒰뒱뒲뒳뒴뒶뒸뒺뒻뒼뒽뒾뒿듁듂듃듅듆듇듉듊듋듌듍듎듏듑듒듓듔듖듗듘듙듚듛듞듟듡듢듥듧듨듩듪듫듮듰듲듳듴듵듶듷듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓딖딗딙딚딝�".split(""),e=0;e!=n[138].length;++e)65533!==n[138][e].charCodeAt(0)&&(r[n[138][e]]=35328+e,t[35328+e]=n[138][e]);for(n[139]="�����������������������������������������������������������������딞딟딠딡딢딣딦딫딬딭딮딯딲딳딵딶딷딹딺딻딼딽딾딿땂땆������땇땈땉땊땎땏땑땒땓땕땖땗땘땙땚땛땞땢땣땤땥땦땧땨땩땪������땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떢떣떥떦떧떩떬떭떮떯떲떶떷떸떹떺떾떿뗁뗂뗃뗅뗆뗇뗈뗉뗊뗋뗎뗒뗓뗔뗕뗖뗗뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿�".split(""),e=0;e!=n[139].length;++e)65533!==n[139][e].charCodeAt(0)&&(r[n[139][e]]=35584+e,t[35584+e]=n[139][e]);for(n[140]="�����������������������������������������������������������������똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏똒똓똕똖똗똙똚똛똜똝������똞똟똠똡똢똣똤똦똧똨똩똪똫똭똮똯똰똱똲똳똵똶똷똸똹똺������똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙥뙦뙧뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚞뚟뚡뚢뚣뚥뚦뚧뚨뚩뚪뚭뚮뚯뚰뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂�".split(""),e=0;e!=n[140].length;++e)65533!==n[140][e].charCodeAt(0)&&(r[n[140][e]]=35840+e,t[35840+e]=n[140][e]);for(n[141]="�����������������������������������������������������������������뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛕뛖뛗뛘뛙뛚뛛뛜뛝������뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛱뛲뛳뛵뛶뛷뛹뛺������뛻뛼뛽뛾뛿뜂뜃뜄뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜪뜫뜭뜮뜱뜲뜳뜴뜵뜶뜷뜺뜼뜽뜾뜿띀띁띂띃띅띆띇띉띊띋띍띎띏띐띑띒띓띖띗띘띙띚띛띜띝띞띟띡띢띣띥띦띧띩띪띫띬띭띮띯띲띴띶띷띸띹띺띻띾띿랁랂랃랅랆랇랈랉랊랋랎랓랔랕랚랛랝랞�".split(""),e=0;e!=n[141].length;++e)65533!==n[141][e].charCodeAt(0)&&(r[n[141][e]]=36096+e,t[36096+e]=n[141][e]);for(n[142]="�����������������������������������������������������������������랟랡랢랣랤랥랦랧랪랮랯랰랱랲랳랶랷랹랺랻랼랽랾랿럀럁������럂럃럄럅럆럈럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝������럞럟럠럡럢럣럤럥럦럧럨럩럪럫럮럯럱럲럳럵럶럷럸럹럺럻럾렂렃렄렅렆렊렋렍렎렏렑렒렓렔렕렖렗렚렜렞렟렠렡렢렣렦렧렩렪렫렭렮렯렰렱렲렳렶렺렻렼렽렾렿롁롂롃롅롆롇롈롉롊롋롌롍롎롏롐롒롔롕롖롗롘롙롚롛롞롟롡롢롣롥롦롧롨롩롪롫롮롰롲롳롴롵롶롷롹롺롻롽롾롿뢀뢁뢂뢃뢄�".split(""),e=0;e!=n[142].length;++e)65533!==n[142][e].charCodeAt(0)&&(r[n[142][e]]=36352+e,t[36352+e]=n[142][e]);for(n[143]="�����������������������������������������������������������������뢅뢆뢇뢈뢉뢊뢋뢌뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟������뢠뢡뢢뢣뢤뢥뢦뢧뢩뢪뢫뢬뢭뢮뢯뢱뢲뢳뢵뢶뢷뢹뢺뢻뢼뢽������뢾뢿룂룄룆룇룈룉룊룋룍룎룏룑룒룓룕룖룗룘룙룚룛룜룞룠룢룣룤룥룦룧룪룫룭룮룯룱룲룳룴룵룶룷룺룼룾룿뤀뤁뤂뤃뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤙뤚뤛뤜뤝뤞뤟뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤾뤿륁륂륃륅륆륇륈륉륊륋륍륎륐륒륓륔륕륖륗�".split(""),e=0;e!=n[143].length;++e)65533!==n[143][e].charCodeAt(0)&&(r[n[143][e]]=36608+e,t[36608+e]=n[143][e]);for(n[144]="�����������������������������������������������������������������륚륛륝륞륟륡륢륣륤륥륦륧륪륬륮륯륰륱륲륳륶륷륹륺륻륽������륾륿릀릁릂릃릆릈릋릌릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞������릟릠릡릢릣릤릥릦릧릨릩릪릫릮릯릱릲릳릵릶릷릸릹릺릻릾맀맂맃맄맅맆맇맊맋맍맓맔맕맖맗맚맜맟맠맢맦맧맩맪맫맭맮맯맰맱맲맳맶맻맼맽맾맿먂먃먄먅먆먇먉먊먋먌먍먎먏먐먑먒먓먔먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷먺먻먽먾먿멁멃멄멅멆�".split(""),e=0;e!=n[144].length;++e)65533!==n[144][e].charCodeAt(0)&&(r[n[144][e]]=36864+e,t[36864+e]=n[144][e]);for(n[145]="�����������������������������������������������������������������멇멊멌멏멐멑멒멖멗멙멚멛멝멞멟멠멡멢멣멦멪멫멬멭멮멯������멲멳멵멶멷멹멺멻멼멽멾멿몀몁몂몆몈몉몊몋몍몎몏몐몑몒������몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧몪몭몮몯몱몳몴몵몶몷몺몼몾몿뫀뫁뫂뫃뫅뫆뫇뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫽뫾뫿묁묂묃묅묆묇묈묉묊묋묌묎묐묒묓묔묕묖묗묙묚묛묝묞묟묡묢묣묤묥묦묧�".split(""),e=0;e!=n[145].length;++e)65533!==n[145][e].charCodeAt(0)&&(r[n[145][e]]=37120+e,t[37120+e]=n[145][e]);for(n[146]="�����������������������������������������������������������������묨묪묬묭묮묯묰묱묲묳묷묹묺묿뭀뭁뭂뭃뭆뭈뭊뭋뭌뭎뭑뭒������뭓뭕뭖뭗뭙뭚뭛뭜뭝뭞뭟뭠뭢뭤뭥뭦뭧뭨뭩뭪뭫뭭뭮뭯뭰뭱������뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮉뮊뮋뮍뮎뮏뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮥뮦뮧뮩뮪뮫뮭뮮뮯뮰뮱뮲뮳뮵뮶뮸뮹뮺뮻뮼뮽뮾뮿믁믂믃믅믆믇믉믊믋믌믍믎믏믑믒믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷믺믻믽믾밁�".split(""),e=0;e!=n[146].length;++e)65533!==n[146][e].charCodeAt(0)&&(r[n[146][e]]=37376+e,t[37376+e]=n[146][e]);for(n[147]="�����������������������������������������������������������������밃밄밅밆밇밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵������밶밷밹밺밻밼밽밾밿뱂뱆뱇뱈뱊뱋뱎뱏뱑뱒뱓뱔뱕뱖뱗뱘뱙������뱚뱛뱜뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃벆벇벉벊벍벏벐벑벒벓벖벘벛벜벝벞벟벢벣벥벦벩벪벫벬벭벮벯벲벶벷벸벹벺벻벾벿볁볂볃볅볆볇볈볉볊볋볌볎볒볓볔볖볗볙볚볛볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳볷볹볺볻볽�".split(""),e=0;e!=n[147].length;++e)65533!==n[147][e].charCodeAt(0)&&(r[n[147][e]]=37632+e,t[37632+e]=n[147][e]);for(n[148]="�����������������������������������������������������������������볾볿봀봁봂봃봆봈봊봋봌봍봎봏봑봒봓봕봖봗봘봙봚봛봜봝������봞봟봠봡봢봣봥봦봧봨봩봪봫봭봮봯봰봱봲봳봴봵봶봷봸봹������봺봻봼봽봾봿뵁뵂뵃뵄뵅뵆뵇뵊뵋뵍뵎뵏뵑뵒뵓뵔뵕뵖뵗뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵥뵦뵧뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿붂붃붅붆붋붌붍붎붏붒붔붖붗붘붛붝붞붟붠붡붢붣붥붦붧붨붩붪붫붬붭붮붯붱붲붳붴붵붶붷붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑�".split(""),e=0;e!=n[148].length;++e)65533!==n[148][e].charCodeAt(0)&&(r[n[148][e]]=37888+e,t[37888+e]=n[148][e]);for(n[149]="�����������������������������������������������������������������뷒뷓뷖뷗뷙뷚뷛뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷪뷫뷬뷭뷮뷯뷱������뷲뷳뷵뷶뷷뷹뷺뷻뷼뷽뷾뷿븁븂븄븆븇븈븉븊븋븎븏븑븒븓������븕븖븗븘븙븚븛븞븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃빆빇빉빊빋빍빏빐빑빒빓빖빘빜빝빞빟빢빣빥빦빧빩빫빬빭빮빯빲빶빷빸빹빺빾빿뺁뺂뺃뺅뺆뺇뺈뺉뺊뺋뺎뺒뺓뺔뺕뺖뺗뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷�".split(""),e=0;e!=n[149].length;++e)65533!==n[149][e].charCodeAt(0)&&(r[n[149][e]]=38144+e,t[38144+e]=n[149][e]);for(n[150]="�����������������������������������������������������������������뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻒뻓������뻕뻖뻙뻚뻛뻜뻝뻞뻟뻡뻢뻦뻧뻨뻩뻪뻫뻭뻮뻯뻰뻱뻲뻳뻴뻵������뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼂뼃뼄뼅뼆뼇뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼚뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽂뽃뽅뽆뽇뽉뽊뽋뽌뽍뽎뽏뽒뽓뽔뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂�".split(""),e=0;e!=n[150].length;++e)65533!==n[150][e].charCodeAt(0)&&(r[n[150][e]]=38400+e,t[38400+e]=n[150][e]);for(n[151]="�����������������������������������������������������������������뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾕뾖뾗뾘뾙뾚뾛뾜뾝������뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾱뾲뾳뾴뾵뾶뾷뾸������뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿆뿇뿈뿉뿊뿋뿎뿏뿑뿒뿓뿕뿖뿗뿘뿙뿚뿛뿝뿞뿠뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀽쀾쀿�".split(""),e=0;e!=n[151].length;++e)65533!==n[151][e].charCodeAt(0)&&(r[n[151][e]]=38656+e,t[38656+e]=n[151][e]);for(n[152]="�����������������������������������������������������������������쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁒쁓쁔쁕쁖쁗쁙쁚쁛������쁝쁞쁟쁡쁢쁣쁤쁥쁦쁧쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹������쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삒삓삕삖삗삙삚삛삜삝삞삟삢삤삦삧삨삩삪삫삮삱삲삷삸삹삺삻삾샂샃샄샆샇샊샋샍샎샏샑샒샓샔샕샖샗샚샞샟샠샡샢샣샦샧샩샪샫샭샮샯샰샱샲샳샶샸샺샻샼샽샾샿섁섂섃섅섆섇섉섊섋섌섍섎섏섑섒섓섔섖섗섘섙섚섛섡섢섥섨섩섪섫섮�".split(""),e=0;e!=n[152].length;++e)65533!==n[152][e].charCodeAt(0)&&(r[n[152][e]]=38912+e,t[38912+e]=n[152][e]);for(n[153]="�����������������������������������������������������������������섲섳섴섵섷섺섻섽섾섿셁셂셃셄셅셆셇셊셎셏셐셑셒셓셖셗������셙셚셛셝셞셟셠셡셢셣셦셪셫셬셭셮셯셱셲셳셵셶셷셹셺셻������셼셽셾셿솀솁솂솃솄솆솇솈솉솊솋솏솑솒솓솕솗솘솙솚솛솞솠솢솣솤솦솧솪솫솭솮솯솱솲솳솴솵솶솷솸솹솺솻솼솾솿쇀쇁쇂쇃쇅쇆쇇쇉쇊쇋쇍쇎쇏쇐쇑쇒쇓쇕쇖쇙쇚쇛쇜쇝쇞쇟쇡쇢쇣쇥쇦쇧쇩쇪쇫쇬쇭쇮쇯쇲쇴쇵쇶쇷쇸쇹쇺쇻쇾쇿숁숂숃숅숆숇숈숉숊숋숎숐숒숓숔숕숖숗숚숛숝숞숡숢숣�".split(""),e=0;e!=n[153].length;++e)65533!==n[153][e].charCodeAt(0)&&(r[n[153][e]]=39168+e,t[39168+e]=n[153][e]);for(n[154]="�����������������������������������������������������������������숤숥숦숧숪숬숮숰숳숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅������쉆쉇쉉쉊쉋쉌쉍쉎쉏쉒쉓쉕쉖쉗쉙쉚쉛쉜쉝쉞쉟쉡쉢쉣쉤쉦������쉧쉨쉩쉪쉫쉮쉯쉱쉲쉳쉵쉶쉷쉸쉹쉺쉻쉾슀슂슃슄슅슆슇슊슋슌슍슎슏슑슒슓슔슕슖슗슙슚슜슞슟슠슡슢슣슦슧슩슪슫슮슯슰슱슲슳슶슸슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛싞싟싡싢싥싦싧싨싩싪싮싰싲싳싴싵싷싺싽싾싿쌁쌂쌃쌄쌅쌆쌇쌊쌋쌎쌏�".split(""),e=0;e!=n[154].length;++e)65533!==n[154][e].charCodeAt(0)&&(r[n[154][e]]=39424+e,t[39424+e]=n[154][e]);for(n[155]="�����������������������������������������������������������������쌐쌑쌒쌖쌗쌙쌚쌛쌝쌞쌟쌠쌡쌢쌣쌦쌧쌪쌫쌬쌭쌮쌯쌰쌱쌲������쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썆썇썈썉썊썋썌썍������썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧썪썫썭썮썯썱썳썴썵썶썷썺썻썾썿쎀쎁쎂쎃쎅쎆쎇쎉쎊쎋쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏚�".split(""),e=0;e!=n[155].length;++e)65533!==n[155][e].charCodeAt(0)&&(r[n[155][e]]=39680+e,t[39680+e]=n[155][e]);for(n[156]="�����������������������������������������������������������������쏛쏝쏞쏡쏣쏤쏥쏦쏧쏪쏫쏬쏮쏯쏰쏱쏲쏳쏶쏷쏹쏺쏻쏼쏽쏾������쏿쐀쐁쐂쐃쐄쐅쐆쐇쐉쐊쐋쐌쐍쐎쐏쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚������쐛쐜쐝쐞쐟쐠쐡쐢쐣쐥쐦쐧쐨쐩쐪쐫쐭쐮쐯쐱쐲쐳쐵쐶쐷쐸쐹쐺쐻쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑦쑧쑩쑪쑫쑭쑮쑯쑰쑱쑲쑳쑶쑷쑸쑺쑻쑼쑽쑾쑿쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒕쒖쒗쒘쒙쒚쒛쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩�".split(""),e=0;e!=n[156].length;++e)65533!==n[156][e].charCodeAt(0)&&(r[n[156][e]]=39936+e,t[39936+e]=n[156][e]);for(n[157]="�����������������������������������������������������������������쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒹쒺쒻쒽쒾쒿쓀쓁쓂쓃쓄쓅������쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟������쓠쓡쓢쓣쓤쓥쓦쓧쓨쓪쓫쓬쓭쓮쓯쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂씃씄씅씆씇씈씉씊씋씍씎씏씑씒씓씕씖씗씘씙씚씛씝씞씟씠씡씢씣씤씥씦씧씪씫씭씮씯씱씲씳씴씵씶씷씺씼씾씿앀앁앂앃앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩앪앫앬앭앮앯앲앶앷앸앹앺앻앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔�".split(""),e=0;e!=n[157].length;++e)65533!==n[157][e].charCodeAt(0)&&(r[n[157][e]]=40192+e,t[40192+e]=n[157][e]);for(n[158]="�����������������������������������������������������������������얖얙얚얛얝얞얟얡얢얣얤얥얦얧얨얪얫얬얭얮얯얰얱얲얳얶������얷얺얿엀엁엂엃엋엍엏엒엓엕엖엗엙엚엛엜엝엞엟엢엤엦엧������엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑옒옓옔옕옖옗옚옝옞옟옠옡옢옣옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉왊왋왌왍왎왏왒왖왗왘왙왚왛왞왟왡왢왣왤왥왦왧왨왩왪왫왭왮왰왲왳왴왵왶왷왺왻왽왾왿욁욂욃욄욅욆욇욊욌욎욏욐욑욒욓욖욗욙욚욛욝욞욟욠욡욢욣욦�".split(""),e=0;e!=n[158].length;++e)65533!==n[158][e].charCodeAt(0)&&(r[n[158][e]]=40448+e,t[40448+e]=n[158][e]);for(n[159]="�����������������������������������������������������������������욨욪욫욬욭욮욯욲욳욵욶욷욻욼욽욾욿웂웄웆웇웈웉웊웋웎������웏웑웒웓웕웖웗웘웙웚웛웞웟웢웣웤웥웦웧웪웫웭웮웯웱웲������웳웴웵웶웷웺웻웼웾웿윀윁윂윃윆윇윉윊윋윍윎윏윐윑윒윓윖윘윚윛윜윝윞윟윢윣윥윦윧윩윪윫윬윭윮윯윲윴윶윸윹윺윻윾윿읁읂읃읅읆읇읈읉읋읎읐읙읚읛읝읞읟읡읢읣읤읥읦읧읩읪읬읭읮읯읰읱읲읳읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛잜잝잞잟잢잧잨잩잪잫잮잯잱잲잳잵잶잷�".split(""),e=0;e!=n[159].length;++e)65533!==n[159][e].charCodeAt(0)&&(r[n[159][e]]=40704+e,t[40704+e]=n[159][e]);for(n[160]="�����������������������������������������������������������������잸잹잺잻잾쟂쟃쟄쟅쟆쟇쟊쟋쟍쟏쟑쟒쟓쟔쟕쟖쟗쟙쟚쟛쟜������쟞쟟쟠쟡쟢쟣쟥쟦쟧쟩쟪쟫쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺������쟻쟼쟽쟾쟿젂젃젅젆젇젉젋젌젍젎젏젒젔젗젘젙젚젛젞젟젡젢젣젥젦젧젨젩젪젫젮젰젲젳젴젵젶젷젹젺젻젽젾젿졁졂졃졄졅졆졇졊졋졎졏졐졑졒졓졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯졲졳졵졶졷졹졻졼졽졾졿좂좄좈좉좊좎좏좐좑좒좓좕좖좗좘좙좚좛좜좞좠좢좣좤�".split(""),e=0;e!=n[160].length;++e)65533!==n[160][e].charCodeAt(0)&&(r[n[160][e]]=40960+e,t[40960+e]=n[160][e]);for(n[161]="�����������������������������������������������������������������좥좦좧좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좾좿죀죁������죂죃죅죆죇죉죊죋죍죎죏죐죑죒죓죖죘죚죛죜죝죞죟죢죣죥������죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죶죷죸죹죺죻죾죿줁줂줃줇줈줉줊줋줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈〉《》「」『』【】±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬�".split(""),e=0;e!=n[161].length;++e)65533!==n[161][e].charCodeAt(0)&&(r[n[161][e]]=41216+e,t[41216+e]=n[161][e]);for(n[162]="�����������������������������������������������������������������줐줒줓줔줕줖줗줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫������줭줮줯줰줱줲줳줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇������쥈쥉쥊쥋쥌쥍쥎쥏쥒쥓쥕쥖쥗쥙쥚쥛쥜쥝쥞쥟쥢쥤쥥쥦쥧쥨쥩쥪쥫쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®������������������������".split(""),e=0;e!=n[162].length;++e)65533!==n[162][e].charCodeAt(0)&&(r[n[162][e]]=41472+e,t[41472+e]=n[162][e]);for(n[163]="�����������������������������������������������������������������쥱쥲쥳쥵쥶쥷쥸쥹쥺쥻쥽쥾쥿즀즁즂즃즄즅즆즇즊즋즍즎즏������즑즒즓즔즕즖즗즚즜즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮������즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿짂짃짅짆짉짋짌짍짎짏짒짔짗짘짛!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[₩]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=n[163].length;++e)65533!==n[163][e].charCodeAt(0)&&(r[n[163][e]]=41728+e,t[41728+e]=n[163][e]);for(n[164]="�����������������������������������������������������������������짞짟짡짣짥짦짨짩짪짫짮짲짳짴짵짶짷짺짻짽짾짿쨁쨂쨃쨄������쨅쨆쨇쨊쨎쨏쨐쨑쨒쨓쨕쨖쨗쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥������쨦쨧쨨쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ�".split(""),e=0;e!=n[164].length;++e)65533!==n[164][e].charCodeAt(0)&&(r[n[164][e]]=41984+e,t[41984+e]=n[164][e]);for(n[165]="�����������������������������������������������������������������쩇쩈쩉쩊쩋쩎쩏쩑쩒쩓쩕쩖쩗쩘쩙쩚쩛쩞쩢쩣쩤쩥쩦쩧쩩쩪������쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩾쩿쪀쪁쪂쪃쪅쪆������쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ�����ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������".split(""),e=0;e!=n[165].length;++e)65533!==n[165][e].charCodeAt(0)&&(r[n[165][e]]=42240+e,t[42240+e]=n[165][e]);for(n[166]="�����������������������������������������������������������������쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪾쪿쫁쫂쫃쫅������쫆쫇쫈쫉쫊쫋쫎쫐쫒쫔쫕쫖쫗쫚쫛쫜쫝쫞쫟쫡쫢쫣쫤쫥쫦쫧������쫨쫩쫪쫫쫭쫮쫯쫰쫱쫲쫳쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃╄╅╆╇╈╉╊���������������������������".split(""),e=0;e!=n[166].length;++e)65533!==n[166][e].charCodeAt(0)&&(r[n[166][e]]=42496+e,t[42496+e]=n[166][e]);for(n[167]="�����������������������������������������������������������������쬋쬌쬍쬎쬏쬑쬒쬓쬕쬖쬗쬙쬚쬛쬜쬝쬞쬟쬢쬣쬤쬥쬦쬧쬨쬩������쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭂쭃쭄������쭅쭆쭇쭊쭋쭍쭎쭏쭑쭒쭓쭔쭕쭖쭗쭚쭛쭜쭞쭟쭠쭡쭢쭣쭥쭦쭧쭨쭩쭪쭫쭬㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆����������������".split(""),e=0;e!=n[167].length;++e)65533!==n[167][e].charCodeAt(0)&&(r[n[167][e]]=42752+e,t[42752+e]=n[167][e]);for(n[168]="�����������������������������������������������������������������쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈������쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮝쮞쮟쮠쮡쮢쮣������쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄ÆÐªĦ�IJ�ĿŁØŒºÞŦŊ�㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮½⅓⅔¼¾⅛⅜⅝⅞�".split(""),e=0;e!=n[168].length;++e)65533!==n[168][e].charCodeAt(0)&&(r[n[168][e]]=43008+e,t[43008+e]=n[168][e]);for(n[169]="�����������������������������������������������������������������쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟������쯠쯡쯢쯣쯥쯦쯨쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼������쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찎찏찑찒찓찕찖찗찘찙찚찛찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂¹²³⁴ⁿ₁₂₃₄�".split(""),e=0;e!=n[169].length;++e)65533!==n[169][e].charCodeAt(0)&&(r[n[169][e]]=43264+e,t[43264+e]=n[169][e]);for(n[170]="�����������������������������������������������������������������찥찦찪찫찭찯찱찲찳찴찵찶찷찺찿챀챁챂챃챆챇챉챊챋챍챎������챏챐챑챒챓챖챚챛챜챝챞챟챡챢챣챥챧챩챪챫챬챭챮챯챱챲������챳챴챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=n[170].length;++e)65533!==n[170][e].charCodeAt(0)&&(r[n[170][e]]=43520+e,t[43520+e]=n[170][e]);for(n[171]="�����������������������������������������������������������������첔첕첖첗첚첛첝첞첟첡첢첣첤첥첦첧첪첮첯첰첱첲첳첶첷첹������첺첻첽첾첿쳀쳁쳂쳃쳆쳈쳊쳋쳌쳍쳎쳏쳑쳒쳓쳕쳖쳗쳘쳙쳚������쳛쳜쳝쳞쳟쳠쳡쳢쳣쳥쳦쳧쳨쳩쳪쳫쳭쳮쳯쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=n[171].length;++e)65533!==n[171][e].charCodeAt(0)&&(r[n[171][e]]=43776+e,t[43776+e]=n[171][e]);for(n[172]="�����������������������������������������������������������������쳾쳿촀촂촃촄촅촆촇촊촋촍촎촏촑촒촓촔촕촖촗촚촜촞촟촠������촡촢촣촥촦촧촩촪촫촭촮촯촰촱촲촳촴촵촶촷촸촺촻촼촽촾������촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛쵝쵞쵟АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=n[172].length;++e)65533!==n[172][e].charCodeAt(0)&&(r[n[172][e]]=44032+e,t[44032+e]=n[172][e]);for(n[173]="�����������������������������������������������������������������쵡쵢쵣쵥쵦쵧쵨쵩쵪쵫쵮쵰쵲쵳쵴쵵쵶쵷쵹쵺쵻쵼쵽쵾쵿춀������춁춂춃춄춅춆춇춉춊춋춌춍춎춏춐춑춒춓춖춗춙춚춛춝춞춟������춠춡춢춣춦춨춪춫춬춭춮춯춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췅�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[173].length;++e)65533!==n[173][e].charCodeAt(0)&&(r[n[173][e]]=44288+e,t[44288+e]=n[173][e]);for(n[174]="�����������������������������������������������������������������췆췇췈췉췊췋췍췎췏췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡������췢췣췤췥췦췧췩췪췫췭췮췯췱췲췳췴췵췶췷췺췼췾췿츀츁츂������츃츅츆츇츉츊츋츍츎츏츐츑츒츓츕츖츗츘츚츛츜츝츞츟츢츣츥츦츧츩츪츫�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[174].length;++e)65533!==n[174][e].charCodeAt(0)&&(r[n[174][e]]=44544+e,t[44544+e]=n[174][e]);for(n[175]="�����������������������������������������������������������������츬츭츮츯츲츴츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉������칊칋칌칍칎칏칐칑칒칓칔칕칖칗칚칛칝칞칢칣칤칥칦칧칪칬������칮칯칰칱칲칳칶칷칹칺칻칽칾칿캀캁캂캃캆캈캊캋캌캍캎캏캒캓캕캖캗캙�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[175].length;++e)65533!==n[175][e].charCodeAt(0)&&(r[n[175][e]]=44800+e,t[44800+e]=n[175][e]);for(n[176]="�����������������������������������������������������������������캚캛캜캝캞캟캢캦캧캨캩캪캫캮캯캰캱캲캳캴캵캶캷캸캹캺������캻캼캽캾캿컀컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕������컖컗컘컙컚컛컜컝컞컟컠컡컢컣컦컧컩컪컭컮컯컰컱컲컳컶컺컻컼컽컾컿가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆�".split(""),e=0;e!=n[176].length;++e)65533!==n[176][e].charCodeAt(0)&&(r[n[176][e]]=45056+e,t[45056+e]=n[176][e]);for(n[177]="�����������������������������������������������������������������켂켃켅켆켇켉켊켋켌켍켎켏켒켔켖켗켘켙켚켛켝켞켟켡켢켣������켥켦켧켨켩켪켫켮켲켳켴켵켶켷켹켺켻켼켽켾켿콀콁콂콃콄������콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓콖콗콙콚콛콝콞콟콠콡콢콣콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸�".split(""),e=0;e!=n[177].length;++e)65533!==n[177][e].charCodeAt(0)&&(r[n[177][e]]=45312+e,t[45312+e]=n[177][e]);for(n[178]="�����������������������������������������������������������������콭콮콯콲콳콵콶콷콹콺콻콼콽콾콿쾁쾂쾃쾄쾆쾇쾈쾉쾊쾋쾍������쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾢쾣쾤쾥쾦쾧쾩������쾪쾫쾬쾭쾮쾯쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿅쿆쿇쿈쿉쿊쿋깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙�".split(""),e=0;e!=n[178].length;++e)65533!==n[178][e].charCodeAt(0)&&(r[n[178][e]]=45568+e,t[45568+e]=n[178][e]);for(n[179]="�����������������������������������������������������������������쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿢쿣쿥쿦쿧쿩������쿪쿫쿬쿭쿮쿯쿲쿴쿶쿷쿸쿹쿺쿻쿽쿾쿿퀁퀂퀃퀅퀆퀇퀈퀉퀊������퀋퀌퀍퀎퀏퀐퀒퀓퀔퀕퀖퀗퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝�".split(""),e=0;e!=n[179].length;++e)65533!==n[179][e].charCodeAt(0)&&(r[n[179][e]]=45824+e,t[45824+e]=n[179][e]);for(n[180]="�����������������������������������������������������������������퀮퀯퀰퀱퀲퀳퀶퀷퀹퀺퀻퀽퀾퀿큀큁큂큃큆큈큊큋큌큍큎큏������큑큒큓큕큖큗큙큚큛큜큝큞큟큡큢큣큤큥큦큧큨큩큪큫큮큯������큱큲큳큵큶큷큸큹큺큻큾큿킀킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥�".split(""),e=0;e!=n[180].length;++e)65533!==n[180][e].charCodeAt(0)&&(r[n[180][e]]=46080+e,t[46080+e]=n[180][e]);for(n[181]="�����������������������������������������������������������������킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣킦킧킩킪킫킭킮킯킰킱킲������킳킶킸킺킻킼킽킾킿탂탃탅탆탇탊탋탌탍탎탏탒탖탗탘탙탚������탛탞탟탡탢탣탥탦탧탨탩탪탫탮탲탳탴탵탶탷탹탺탻탼탽탾탿턀턁턂턃턄덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸�".split(""),e=0;e!=n[181].length;++e)65533!==n[181][e].charCodeAt(0)&&(r[n[181][e]]=46336+e,t[46336+e]=n[181][e]);for(n[182]="�����������������������������������������������������������������턅턆턇턈턉턊턋턌턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟������턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯턲턳턵턶턷턹턻턼턽턾������턿텂텆텇텈텉텊텋텎텏텑텒텓텕텖텗텘텙텚텛텞텠텢텣텤텥텦텧텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗�".split(""),e=0;e!=n[182].length;++e)65533!==n[182][e].charCodeAt(0)&&(r[n[182][e]]=46592+e,t[46592+e]=n[182][e]);for(n[183]="�����������������������������������������������������������������텮텯텰텱텲텳텴텵텶텷텸텹텺텻텽텾텿톀톁톂톃톅톆톇톉톊������톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟톢톣톥톦톧������톩톪톫톬톭톮톯톲톴톶톷톸톹톻톽톾톿퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩�".split(""),e=0;e!=n[183].length;++e)65533!==n[183][e].charCodeAt(0)&&(r[n[183][e]]=46848+e,t[46848+e]=n[183][e]);for(n[184]="�����������������������������������������������������������������퇐퇑퇒퇓퇔퇕퇖퇗퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪������퇫퇬퇭퇮퇯퇰퇱퇲퇳퇵퇶퇷퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆������툈툊툋툌툍툎툏툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼�".split(""),e=0;e!=n[184].length;++e)65533!==n[184][e].charCodeAt(0)&&(r[n[184][e]]=47104+e,t[47104+e]=n[184][e]);for(n[185]="�����������������������������������������������������������������툪툫툮툯툱툲툳툵툶툷툸툹툺툻툾퉀퉂퉃퉄퉅퉆퉇퉉퉊퉋퉌������퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉝퉞퉟퉠퉡퉢퉣퉥퉦퉧퉨������퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗�".split(""),e=0;e!=n[185].length;++e)65533!==n[185][e].charCodeAt(0)&&(r[n[185][e]]=47360+e,t[47360+e]=n[185][e]);for(n[186]="�����������������������������������������������������������������튍튎튏튒튓튔튖튗튘튙튚튛튝튞튟튡튢튣튥튦튧튨튩튪튫튭������튮튯튰튲튳튴튵튶튷튺튻튽튾틁틃틄틅틆틇틊틌틍틎틏틐틑������틒틓틕틖틗틙틚틛틝틞틟틠틡틢틣틦틧틨틩틪틫틬틭틮틯틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤�".split(""),e=0;e!=n[186].length;++e)65533!==n[186][e].charCodeAt(0)&&(r[n[186][e]]=47616+e,t[47616+e]=n[186][e]);for(n[187]="�����������������������������������������������������������������틻틼틽틾틿팂팄팆팇팈팉팊팋팏팑팒팓팕팗팘팙팚팛팞팢팣������팤팦팧팪팫팭팮팯팱팲팳팴팵팶팷팺팾팿퍀퍁퍂퍃퍆퍇퍈퍉������퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤�".split(""),e=0;e!=n[187].length;++e)65533!==n[187][e].charCodeAt(0)&&(r[n[187][e]]=47872+e,t[47872+e]=n[187][e]);for(n[188]="�����������������������������������������������������������������퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍾퍿펁펂펃펅펆펇������펈펉펊펋펎펒펓펔펕펖펗펚펛펝펞펟펡펢펣펤펥펦펧펪펬펮������펯펰펱펲펳펵펶펷펹펺펻펽펾펿폀폁폂폃폆폇폊폋폌폍폎폏폑폒폓폔폕폖샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭�".split(""),e=0;e!=n[188].length;++e)65533!==n[188][e].charCodeAt(0)&&(r[n[188][e]]=48128+e,t[48128+e]=n[188][e]);for(n[189]="�����������������������������������������������������������������폗폙폚폛폜폝폞폟폠폢폤폥폦폧폨폩폪폫폮폯폱폲폳폵폶폷������폸폹폺폻폾퐀퐂퐃퐄퐅퐆퐇퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖������퐗퐘퐙퐚퐛퐜퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰�".split(""),e=0;e!=n[189].length;++e)65533!==n[189][e].charCodeAt(0)&&(r[n[189][e]]=48384+e,t[48384+e]=n[189][e]);for(n[190]="�����������������������������������������������������������������퐸퐹퐺퐻퐼퐽퐾퐿푁푂푃푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓������푔푕푖푗푘푙푚푛푝푞푟푡푢푣푥푦푧푨푩푪푫푬푮푰푱푲������푳푴푵푶푷푺푻푽푾풁풃풄풅풆풇풊풌풎풏풐풑풒풓풕풖풗풘풙풚풛풜풝쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎�".split(""),e=0;e!=n[190].length;++e)65533!==n[190][e].charCodeAt(0)&&(r[n[190][e]]=48640+e,t[48640+e]=n[190][e]);for(n[191]="�����������������������������������������������������������������풞풟풠풡풢풣풤풥풦풧풨풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸������풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓍퓎퓏퓑퓒퓓퓕������퓖퓗퓘퓙퓚퓛퓝퓞퓠퓡퓢퓣퓤퓥퓦퓧퓩퓪퓫퓭퓮퓯퓱퓲퓳퓴퓵퓶퓷퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨�".split(""),e=0;e!=n[191].length;++e)65533!==n[191][e].charCodeAt(0)&&(r[n[191][e]]=48896+e,t[48896+e]=n[191][e]);for(n[192]="�����������������������������������������������������������������퓾퓿픀픁픂픃픅픆픇픉픊픋픍픎픏픐픑픒픓픖픘픙픚픛픜픝������픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷������픸픹픺픻픾픿핁핂핃핅핆핇핈핉핊핋핎핐핒핓핔핕핖핗핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊�".split(""),e=0;e!=n[192].length;++e)65533!==n[192][e].charCodeAt(0)&&(r[n[192][e]]=49152+e,t[49152+e]=n[192][e]);for(n[193]="�����������������������������������������������������������������핤핦핧핪핬핮핯핰핱핲핳핶핷핹핺핻핽핾핿햀햁햂햃햆햊햋������햌햍햎햏햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤햦햧������햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓�".split(""),e=0;e!=n[193].length;++e)65533!==n[193][e].charCodeAt(0)&&(r[n[193][e]]=49408+e,t[49408+e]=n[193][e]);for(n[194]="�����������������������������������������������������������������헊헋헍헎헏헑헓헔헕헖헗헚헜헞헟헠헡헢헣헦헧헩헪헫헭헮������헯헰헱헲헳헶헸헺헻헼헽헾헿혂혃혅혆혇혉혊혋혌혍혎혏혒������혖혗혘혙혚혛혝혞혟혡혢혣혥혦혧혨혩혪혫혬혮혯혰혱혲혳혴혵혶혷혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻�".split(""),e=0;e!=n[194].length;++e)65533!==n[194][e].charCodeAt(0)&&(r[n[194][e]]=49664+e,t[49664+e]=n[194][e]);for(n[195]="�����������������������������������������������������������������혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝홞홟홠홡������홢홣홤홥홦홨홪홫홬홭홮홯홲홳홵홶홷홸홹홺홻홼홽홾홿횀������횁횂횄횆횇횈횉횊횋횎횏횑횒횓횕횖횗횘횙횚횛횜횞횠횢횣횤횥횦횧횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층�".split(""),e=0;e!=n[195].length;++e)65533!==n[195][e].charCodeAt(0)&&(r[n[195][e]]=49920+e,t[49920+e]=n[195][e]);for(n[196]="�����������������������������������������������������������������횫횭횮횯횱횲횳횴횵횶횷횸횺횼횽횾횿훀훁훂훃훆훇훉훊훋������훍훎훏훐훒훓훕훖훘훚훛훜훝훞훟훡훢훣훥훦훧훩훪훫훬훭������훮훯훱훲훳훴훶훷훸훹훺훻훾훿휁휂휃휅휆휇휈휉휊휋휌휍휎휏휐휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼�".split(""),e=0;e!=n[196].length;++e)65533!==n[196][e].charCodeAt(0)&&(r[n[196][e]]=50176+e,t[50176+e]=n[196][e]);for(n[197]="�����������������������������������������������������������������휕휖휗휚휛휝휞휟휡휢휣휤휥휦휧휪휬휮휯휰휱휲휳휶휷휹������휺휻휽휾휿흀흁흂흃흅흆흈흊흋흌흍흎흏흒흓흕흚흛흜흝흞������흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵흶흷흸흹흺흻흾흿힀힂힃힄힅힆힇힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜�".split(""),e=0;e!=n[197].length;++e)65533!==n[197][e].charCodeAt(0)&&(r[n[197][e]]=50432+e,t[50432+e]=n[197][e]);for(n[198]="�����������������������������������������������������������������힍힎힏힑힒힓힔힕힖힗힚힜힞힟힠힡힢힣������������������������������������������������������������������������������퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁�".split(""),e=0;e!=n[198].length;++e)65533!==n[198][e].charCodeAt(0)&&(r[n[198][e]]=50688+e,t[50688+e]=n[198][e]);for(n[199]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠�".split(""),e=0;e!=n[199].length;++e)65533!==n[199][e].charCodeAt(0)&&(r[n[199][e]]=50944+e,t[50944+e]=n[199][e]);for(n[200]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝�".split(""),e=0;e!=n[200].length;++e)65533!==n[200][e].charCodeAt(0)&&(r[n[200][e]]=51200+e,t[51200+e]=n[200][e]);for(n[202]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕�".split(""),e=0;e!=n[202].length;++e)65533!==n[202][e].charCodeAt(0)&&(r[n[202][e]]=51712+e,t[51712+e]=n[202][e]);for(n[203]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢�".split(""),e=0;e!=n[203].length;++e)65533!==n[203][e].charCodeAt(0)&&(r[n[203][e]]=51968+e,t[51968+e]=n[203][e]);for(n[204]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械�".split(""),e=0;e!=n[204].length;++e)65533!==n[204][e].charCodeAt(0)&&(r[n[204][e]]=52224+e,t[52224+e]=n[204][e]);for(n[205]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜�".split(""),e=0;e!=n[205].length;++e)65533!==n[205][e].charCodeAt(0)&&(r[n[205][e]]=52480+e,t[52480+e]=n[205][e]);for(n[206]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾�".split(""),e=0;e!=n[206].length;++e)65533!==n[206][e].charCodeAt(0)&&(r[n[206][e]]=52736+e,t[52736+e]=n[206][e]);for(n[207]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴�".split(""),e=0;e!=n[207].length;++e)65533!==n[207][e].charCodeAt(0)&&(r[n[207][e]]=52992+e,t[52992+e]=n[207][e]);for(n[208]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣�".split(""),e=0;e!=n[208].length;++e)65533!==n[208][e].charCodeAt(0)&&(r[n[208][e]]=53248+e,t[53248+e]=n[208][e]);for(n[209]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那樂洛烙珞落諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉�".split(""),e=0;e!=n[209].length;++e)65533!==n[209][e].charCodeAt(0)&&(r[n[209][e]]=53504+e,t[53504+e]=n[209][e]);for(n[210]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������納臘蠟衲囊娘廊朗浪狼郎乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺碌祿綠菉錄鹿論壟弄濃籠聾膿農惱牢磊腦賂雷尿壘屢樓淚漏累縷陋嫩訥杻紐勒肋凜凌稜綾能菱陵尼泥匿溺多茶�".split(""),e=0;e!=n[210].length;++e)65533!==n[210][e].charCodeAt(0)&&(r[n[210][e]]=53760+e,t[53760+e]=n[210][e]);for(n[211]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃�".split(""),e=0;e!=n[211].length;++e)65533!==n[211][e].charCodeAt(0)&&(r[n[211][e]]=54016+e,t[54016+e]=n[211][e]);for(n[212]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅�".split(""),e=0;e!=n[212].length;++e)65533!==n[212][e].charCodeAt(0)&&(r[n[212][e]]=54272+e,t[54272+e]=n[212][e]);for(n[213]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣�".split(""),e=0;e!=n[213].length;++e)65533!==n[213][e].charCodeAt(0)&&(r[n[213][e]]=54528+e,t[54528+e]=n[213][e]);for(n[214]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼�".split(""),e=0;e!=n[214].length;++e)65533!==n[214][e].charCodeAt(0)&&(r[n[214][e]]=54784+e,t[54784+e]=n[214][e]);for(n[215]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬�".split(""),e=0;e!=n[215].length;++e)65533!==n[215][e].charCodeAt(0)&&(r[n[215][e]]=55040+e,t[55040+e]=n[215][e]);for(n[216]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅�".split(""),e=0;e!=n[216].length;++e)65533!==n[216][e].charCodeAt(0)&&(r[n[216][e]]=55296+e,t[55296+e]=n[216][e]);for(n[217]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文�".split(""),e=0;e!=n[217].length;++e)65533!==n[217][e].charCodeAt(0)&&(r[n[217][e]]=55552+e,t[55552+e]=n[217][e]);for(n[218]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑�".split(""),e=0;e!=n[218].length;++e)65533!==n[218][e].charCodeAt(0)&&(r[n[218][e]]=55808+e,t[55808+e]=n[218][e]);for(n[219]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖�".split(""),e=0;e!=n[219].length;++e)65533!==n[219][e].charCodeAt(0)&&(r[n[219][e]]=56064+e,t[56064+e]=n[219][e]);for(n[220]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦�".split(""),e=0;e!=n[220].length;++e)65533!==n[220][e].charCodeAt(0)&&(r[n[220][e]]=56320+e,t[56320+e]=n[220][e]);for(n[221]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥�".split(""),e=0;e!=n[221].length;++e)65533!==n[221][e].charCodeAt(0)&&(r[n[221][e]]=56576+e,t[56576+e]=n[221][e]);for(n[222]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索�".split(""),e=0;e!=n[222].length;++e)65533!==n[222][e].charCodeAt(0)&&(r[n[222][e]]=56832+e,t[56832+e]=n[222][e]);for(n[223]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署�".split(""),e=0;e!=n[223].length;++e)65533!==n[223][e].charCodeAt(0)&&(r[n[223][e]]=57088+e,t[57088+e]=n[223][e]);for(n[224]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬�".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁�".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧�".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁�".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額�".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬�".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒�".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳�".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療�".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓�".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜�".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[235]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼�".split(""),e=0;e!=n[235].length;++e)65533!==n[235][e].charCodeAt(0)&&(r[n[235][e]]=60160+e,t[60160+e]=n[235][e]);for(n[236]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄�".split(""),e=0;e!=n[236].length;++e)65533!==n[236][e].charCodeAt(0)&&(r[n[236][e]]=60416+e,t[60416+e]=n[236][e]);for(n[237]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長�".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱�".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[239]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖�".split(""),e=0;e!=n[239].length;++e)65533!==n[239][e].charCodeAt(0)&&(r[n[239][e]]=61184+e,t[61184+e]=n[239][e]);for(n[240]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫�".split(""),e=0;e!=n[240].length;++e)65533!==n[240][e].charCodeAt(0)&&(r[n[240][e]]=61440+e,t[61440+e]=n[240][e]);for(n[241]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只�".split(""),e=0;e!=n[241].length;++e)65533!==n[241][e].charCodeAt(0)&&(r[n[241][e]]=61696+e,t[61696+e]=n[241][e]);for(n[242]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯�".split(""),e=0;e!=n[242].length;++e)65533!==n[242][e].charCodeAt(0)&&(r[n[242][e]]=61952+e,t[61952+e]=n[242][e]);for(n[243]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策�".split(""),e=0;e!=n[243].length;++e)65533!==n[243][e].charCodeAt(0)&&(r[n[243][e]]=62208+e,t[62208+e]=n[243][e]);for(n[244]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢�".split(""),e=0;e!=n[244].length;++e)65533!==n[244][e].charCodeAt(0)&&(r[n[244][e]]=62464+e,t[62464+e]=n[244][e]);for(n[245]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃�".split(""),e=0;e!=n[245].length;++e)65533!==n[245][e].charCodeAt(0)&&(r[n[245][e]]=62720+e,t[62720+e]=n[245][e]);for(n[246]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託�".split(""),e=0;e!=n[246].length;++e)65533!==n[246][e].charCodeAt(0)&&(r[n[246][e]]=62976+e,t[62976+e]=n[246][e]);for(n[247]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑�".split(""),e=0;e!=n[247].length;++e)65533!==n[247][e].charCodeAt(0)&&(r[n[247][e]]=63232+e,t[63232+e]=n[247][e]);for(n[248]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃�".split(""),e=0;e!=n[248].length;++e)65533!==n[248][e].charCodeAt(0)&&(r[n[248][e]]=63488+e,t[63488+e]=n[248][e]);for(n[249]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航�".split(""),e=0;e!=n[249].length;++e)65533!==n[249][e].charCodeAt(0)&&(r[n[249][e]]=63744+e,t[63744+e]=n[249][e]);for(n[250]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型�".split(""),e=0;e!=n[250].length;++e)65533!==n[250][e].charCodeAt(0)&&(r[n[250][e]]=64e3+e,t[64e3+e]=n[250][e]);for(n[251]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵�".split(""),e=0;e!=n[251].length;++e)65533!==n[251][e].charCodeAt(0)&&(r[n[251][e]]=64256+e,t[64256+e]=n[251][e]);for(n[252]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆�".split(""),e=0;e!=n[252].length;++e)65533!==n[252][e].charCodeAt(0)&&(r[n[252][e]]=64512+e,t[64512+e]=n[252][e]);for(n[253]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰�".split(""),e=0;e!=n[253].length;++e)65533!==n[253][e].charCodeAt(0)&&(r[n[253][e]]=64768+e,t[64768+e]=n[253][e]);return{enc:r,dec:t}}(),a[950]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[161]="���������������������������������������������������������������� ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚����������������������������������﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢﹣﹤﹥﹦~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/�".split(""),e=0;e!=n[161].length;++e)65533!==n[161][e].charCodeAt(0)&&(r[n[161][e]]=41216+e,t[41216+e]=n[161][e]);for(n[162]="����������������������������������������������������������������\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭����������������������������������╮╰╯═╞╪╡◢◣◥◤╱╲╳0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ〡〢〣〤〥〦〧〨〩十卄卅ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv�".split(""),e=0;e!=n[162].length;++e)65533!==n[162][e].charCodeAt(0)&&(r[n[162][e]]=41472+e,t[41472+e]=n[162][e]);for(n[163]="����������������������������������������������������������������wxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ����������������������������������ㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ���������������������������������€������������������������������".split(""),e=0;e!=n[163].length;++e)65533!==n[163][e].charCodeAt(0)&&(r[n[163][e]]=41728+e,t[41728+e]=n[163][e]);for(n[164]="����������������������������������������������������������������一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才����������������������������������丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙�".split(""),e=0;e!=n[164].length;++e)65533!==n[164][e].charCodeAt(0)&&(r[n[164][e]]=41984+e,t[41984+e]=n[164][e]);for(n[165]="����������������������������������������������������������������世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外����������������������������������央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全�".split(""),e=0;e!=n[165].length;++e)65533!==n[165][e].charCodeAt(0)&&(r[n[165][e]]=42240+e,t[42240+e]=n[165][e]);for(n[166]="����������������������������������������������������������������共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年����������������������������������式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣�".split(""),e=0;e!=n[166].length;++e)65533!==n[166][e].charCodeAt(0)&&(r[n[166][e]]=42496+e,t[42496+e]=n[166][e]);for(n[167]="����������������������������������������������������������������作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍����������������������������������均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠�".split(""),e=0;e!=n[167].length;++e)65533!==n[167][e].charCodeAt(0)&&(r[n[167][e]]=42752+e,t[42752+e]=n[167][e]);for(n[168]="����������������������������������������������������������������杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒����������������������������������芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵�".split(""),e=0;e!=n[168].length;++e)65533!==n[168][e].charCodeAt(0)&&(r[n[168][e]]=43008+e,t[43008+e]=n[168][e]);for(n[169]="����������������������������������������������������������������咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居����������������������������������屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊�".split(""),e=0;e!=n[169].length;++e)65533!==n[169][e].charCodeAt(0)&&(r[n[169][e]]=43264+e,t[43264+e]=n[169][e]);for(n[170]="����������������������������������������������������������������昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠����������������������������������炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附�".split(""),e=0;e!=n[170].length;++e)65533!==n[170][e].charCodeAt(0)&&(r[n[170][e]]=43520+e,t[43520+e]=n[170][e]);for(n[171]="����������������������������������������������������������������陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品����������������������������������哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷�".split(""),e=0;e!=n[171].length;++e)65533!==n[171][e].charCodeAt(0)&&(r[n[171][e]]=43776+e,t[43776+e]=n[171][e]);for(n[172]="����������������������������������������������������������������拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗����������������������������������活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄�".split(""),e=0;e!=n[172].length;++e)65533!==n[172][e].charCodeAt(0)&&(r[n[172][e]]=44032+e,t[44032+e]=n[172][e]);for(n[173]="����������������������������������������������������������������耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥����������������������������������迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪�".split(""),e=0;e!=n[173].length;++e)65533!==n[173][e].charCodeAt(0)&&(r[n[173][e]]=44288+e,t[44288+e]=n[173][e]);for(n[174]="����������������������������������������������������������������哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙����������������������������������恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓�".split(""),e=0;e!=n[174].length;++e)65533!==n[174][e].charCodeAt(0)&&(r[n[174][e]]=44544+e,t[44544+e]=n[174][e]);for(n[175]="����������������������������������������������������������������浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷����������������������������������砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃�".split(""),e=0;e!=n[175].length;++e)65533!==n[175][e].charCodeAt(0)&&(r[n[175][e]]=44800+e,t[44800+e]=n[175][e]);for(n[176]="����������������������������������������������������������������虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡����������������������������������陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀�".split(""),e=0;e!=n[176].length;++e)65533!==n[176][e].charCodeAt(0)&&(r[n[176][e]]=45056+e,t[45056+e]=n[176][e]);for(n[177]="����������������������������������������������������������������娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽����������������������������������情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺�".split(""),e=0;e!=n[177].length;++e)65533!==n[177][e].charCodeAt(0)&&(r[n[177][e]]=45312+e,t[45312+e]=n[177][e]);for(n[178]="����������������������������������������������������������������毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶����������������������������������瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼�".split(""),e=0;e!=n[178].length;++e)65533!==n[178][e].charCodeAt(0)&&(r[n[178][e]]=45568+e,t[45568+e]=n[178][e]);for(n[179]="����������������������������������������������������������������莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途����������������������������������部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠�".split(""),e=0;e!=n[179].length;++e)65533!==n[179][e].charCodeAt(0)&&(r[n[179][e]]=45824+e,t[45824+e]=n[179][e]);for(n[180]="����������������������������������������������������������������婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍����������������������������������插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋�".split(""),e=0;e!=n[180].length;++e)65533!==n[180][e].charCodeAt(0)&&(r[n[180][e]]=46080+e,t[46080+e]=n[180][e]);for(n[181]="����������������������������������������������������������������溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘����������������������������������窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁�".split(""),e=0;e!=n[181].length;++e)65533!==n[181][e].charCodeAt(0)&&(r[n[181][e]]=46336+e,t[46336+e]=n[181][e]);for(n[182]="����������������������������������������������������������������詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑����������������������������������間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼�".split(""),e=0;e!=n[182].length;++e)65533!==n[182][e].charCodeAt(0)&&(r[n[182][e]]=46592+e,t[46592+e]=n[182][e]);for(n[183]="����������������������������������������������������������������媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業����������������������������������楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督�".split(""),e=0;e!=n[183].length;++e)65533!==n[183][e].charCodeAt(0)&&(r[n[183][e]]=46848+e,t[46848+e]=n[183][e]);for(n[184]="����������������������������������������������������������������睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫����������������������������������腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊�".split(""),e=0;e!=n[184].length;++e)65533!==n[184][e].charCodeAt(0)&&(r[n[184][e]]=47104+e,t[47104+e]=n[184][e]);for(n[185]="����������������������������������������������������������������辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴����������������������������������飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇�".split(""),e=0;e!=n[185].length;++e)65533!==n[185][e].charCodeAt(0)&&(r[n[185][e]]=47360+e,t[47360+e]=n[185][e]);for(n[186]="����������������������������������������������������������������愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢����������������������������������滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬�".split(""),e=0;e!=n[186].length;++e)65533!==n[186][e].charCodeAt(0)&&(r[n[186][e]]=47616+e,t[47616+e]=n[186][e]);for(n[187]="����������������������������������������������������������������罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤����������������������������������說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜�".split(""),e=0;e!=n[187].length;++e)65533!==n[187][e].charCodeAt(0)&&(r[n[187][e]]=47872+e,t[47872+e]=n[187][e]);for(n[188]="����������������������������������������������������������������劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂����������������������������������慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃�".split(""),e=0;e!=n[188].length;++e)65533!==n[188][e].charCodeAt(0)&&(r[n[188][e]]=48128+e,t[48128+e]=n[188][e]);for(n[189]="����������������������������������������������������������������瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯����������������������������������翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞�".split(""),e=0;e!=n[189].length;++e)65533!==n[189][e].charCodeAt(0)&&(r[n[189][e]]=48384+e,t[48384+e]=n[189][e]);for(n[190]="����������������������������������������������������������������輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉����������������������������������鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡�".split(""),e=0;e!=n[190].length;++e)65533!==n[190][e].charCodeAt(0)&&(r[n[190][e]]=48640+e,t[48640+e]=n[190][e]);for(n[191]="����������������������������������������������������������������濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊����������������������������������縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚�".split(""),e=0;e!=n[191].length;++e)65533!==n[191][e].charCodeAt(0)&&(r[n[191][e]]=48896+e,t[48896+e]=n[191][e]);for(n[192]="����������������������������������������������������������������錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇����������������������������������嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬�".split(""),e=0;e!=n[192].length;++e)65533!==n[192][e].charCodeAt(0)&&(r[n[192][e]]=49152+e,t[49152+e]=n[192][e]);for(n[193]="����������������������������������������������������������������瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪����������������������������������薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁�".split(""),e=0;e!=n[193].length;++e)65533!==n[193][e].charCodeAt(0)&&(r[n[193][e]]=49408+e,t[49408+e]=n[193][e]);for(n[194]="����������������������������������������������������������������駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘����������������������������������癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦�".split(""),e=0;e!=n[194].length;++e)65533!==n[194][e].charCodeAt(0)&&(r[n[194][e]]=49664+e,t[49664+e]=n[194][e]);for(n[195]="����������������������������������������������������������������鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸����������������������������������獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類�".split(""),e=0;e!=n[195].length;++e)65533!==n[195][e].charCodeAt(0)&&(r[n[195][e]]=49920+e,t[49920+e]=n[195][e]);for(n[196]="����������������������������������������������������������������願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼����������������������������������纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴�".split(""),e=0;e!=n[196].length;++e)65533!==n[196][e].charCodeAt(0)&&(r[n[196][e]]=50176+e,t[50176+e]=n[196][e]);for(n[197]="����������������������������������������������������������������護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬����������������������������������禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒�".split(""),e=0;e!=n[197].length;++e)65533!==n[197][e].charCodeAt(0)&&(r[n[197][e]]=50432+e,t[50432+e]=n[197][e]);for(n[198]="����������������������������������������������������������������讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲���������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[198].length;++e)65533!==n[198][e].charCodeAt(0)&&(r[n[198][e]]=50688+e,t[50688+e]=n[198][e]);for(n[201]="����������������������������������������������������������������乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕����������������������������������氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋�".split(""),e=0;e!=n[201].length;++e)65533!==n[201][e].charCodeAt(0)&&(r[n[201][e]]=51456+e,t[51456+e]=n[201][e]);for(n[202]="����������������������������������������������������������������汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘����������������������������������吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇�".split(""),e=0;e!=n[202].length;++e)65533!==n[202][e].charCodeAt(0)&&(r[n[202][e]]=51712+e,t[51712+e]=n[202][e]);for(n[203]="����������������������������������������������������������������杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓����������������������������������芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢�".split(""),e=0;e!=n[203].length;++e)65533!==n[203][e].charCodeAt(0)&&(r[n[203][e]]=51968+e,t[51968+e]=n[203][e]);for(n[204]="����������������������������������������������������������������坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋����������������������������������怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲�".split(""),e=0;e!=n[204].length;++e)65533!==n[204][e].charCodeAt(0)&&(r[n[204][e]]=52224+e,t[52224+e]=n[204][e]);for(n[205]="����������������������������������������������������������������泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺����������������������������������矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏�".split(""),e=0;e!=n[205].length;++e)65533!==n[205][e].charCodeAt(0)&&(r[n[205][e]]=52480+e,t[52480+e]=n[205][e]);for(n[206]="����������������������������������������������������������������哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛����������������������������������峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺�".split(""),e=0;e!=n[206].length;++e)65533!==n[206][e].charCodeAt(0)&&(r[n[206][e]]=52736+e,t[52736+e]=n[206][e]);for(n[207]="����������������������������������������������������������������柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂����������������������������������洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀�".split(""),e=0;e!=n[207].length;++e)65533!==n[207][e].charCodeAt(0)&&(r[n[207][e]]=52992+e,t[52992+e]=n[207][e]);for(n[208]="����������������������������������������������������������������穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪����������������������������������苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱�".split(""),e=0;e!=n[208].length;++e)65533!==n[208][e].charCodeAt(0)&&(r[n[208][e]]=53248+e,t[53248+e]=n[208][e]);for(n[209]="����������������������������������������������������������������唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧����������������������������������恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤�".split(""),e=0;e!=n[209].length;++e)65533!==n[209][e].charCodeAt(0)&&(r[n[209][e]]=53504+e,t[53504+e]=n[209][e]);for(n[210]="����������������������������������������������������������������毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸����������������������������������牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐�".split(""),e=0;e!=n[210].length;++e)65533!==n[210][e].charCodeAt(0)&&(r[n[210][e]]=53760+e,t[53760+e]=n[210][e]);for(n[211]="����������������������������������������������������������������笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢����������������������������������荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐�".split(""),e=0;e!=n[211].length;++e)65533!==n[211][e].charCodeAt(0)&&(r[n[211][e]]=54016+e,t[54016+e]=n[211][e]);for(n[212]="����������������������������������������������������������������酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅����������������������������������唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏�".split(""),e=0;e!=n[212].length;++e)65533!==n[212][e].charCodeAt(0)&&(r[n[212][e]]=54272+e,t[54272+e]=n[212][e]);for(n[213]="����������������������������������������������������������������崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟����������������������������������捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉�".split(""),e=0;e!=n[213].length;++e)65533!==n[213][e].charCodeAt(0)&&(r[n[213][e]]=54528+e,t[54528+e]=n[213][e]);for(n[214]="����������������������������������������������������������������淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏����������������������������������痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟�".split(""),e=0;e!=n[214].length;++e)65533!==n[214][e].charCodeAt(0)&&(r[n[214][e]]=54784+e,t[54784+e]=n[214][e]);for(n[215]="����������������������������������������������������������������耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷����������������������������������蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪�".split(""),e=0;e!=n[215].length;++e)65533!==n[215][e].charCodeAt(0)&&(r[n[215][e]]=55040+e,t[55040+e]=n[215][e]);for(n[216]="����������������������������������������������������������������釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷����������������������������������堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔�".split(""),e=0;e!=n[216].length;++e)65533!==n[216][e].charCodeAt(0)&&(r[n[216][e]]=55296+e,t[55296+e]=n[216][e]);for(n[217]="����������������������������������������������������������������惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒����������������������������������晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞�".split(""),e=0;e!=n[217].length;++e)65533!==n[217][e].charCodeAt(0)&&(r[n[217][e]]=55552+e,t[55552+e]=n[217][e]);for(n[218]="����������������������������������������������������������������湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖����������������������������������琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥�".split(""),e=0;e!=n[218].length;++e)65533!==n[218][e].charCodeAt(0)&&(r[n[218][e]]=55808+e,t[55808+e]=n[218][e]);for(n[219]="����������������������������������������������������������������罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳����������������������������������菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺�".split(""),e=0;e!=n[219].length;++e)65533!==n[219][e].charCodeAt(0)&&(r[n[219][e]]=56064+e,t[56064+e]=n[219][e]);for(n[220]="����������������������������������������������������������������軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈����������������������������������隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆�".split(""),e=0;e!=n[220].length;++e)65533!==n[220][e].charCodeAt(0)&&(r[n[220][e]]=56320+e,t[56320+e]=n[220][e]);for(n[221]="����������������������������������������������������������������媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤����������������������������������搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼�".split(""),e=0;e!=n[221].length;++e)65533!==n[221][e].charCodeAt(0)&&(r[n[221][e]]=56576+e,t[56576+e]=n[221][e]);for(n[222]="����������������������������������������������������������������毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓����������������������������������煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓�".split(""),e=0;e!=n[222].length;++e)65533!==n[222][e].charCodeAt(0)&&(r[n[222][e]]=56832+e,t[56832+e]=n[222][e]);for(n[223]="����������������������������������������������������������������稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯����������������������������������腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤�".split(""),e=0;e!=n[223].length;++e)65533!==n[223][e].charCodeAt(0)&&(r[n[223][e]]=57088+e,t[57088+e]=n[223][e]);for(n[224]="����������������������������������������������������������������觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿����������������������������������遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠�".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="����������������������������������������������������������������凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠����������������������������������寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉�".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="����������������������������������������������������������������榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊����������������������������������漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓�".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="����������������������������������������������������������������禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞����������������������������������耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻�".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="����������������������������������������������������������������裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍����������������������������������銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘�".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="����������������������������������������������������������������噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉����������������������������������憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒�".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="����������������������������������������������������������������澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙����������������������������������獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟�".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="����������������������������������������������������������������膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢����������������������������������蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧�".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="����������������������������������������������������������������踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓����������������������������������銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮�".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="����������������������������������������������������������������噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺����������������������������������憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸�".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="����������������������������������������������������������������澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙����������������������������������瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘�".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[235]="����������������������������������������������������������������蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠����������������������������������諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌�".split(""),e=0;e!=n[235].length;++e)65533!==n[235][e].charCodeAt(0)&&(r[n[235][e]]=60160+e,t[60160+e]=n[235][e]);for(n[236]="����������������������������������������������������������������錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕����������������������������������魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎�".split(""),e=0;e!=n[236].length;++e)65533!==n[236][e].charCodeAt(0)&&(r[n[236][e]]=60416+e,t[60416+e]=n[236][e]);for(n[237]="����������������������������������������������������������������檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶����������������������������������瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞�".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="����������������������������������������������������������������蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞����������������������������������謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜�".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[239]="����������������������������������������������������������������鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰����������������������������������鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶�".split(""),e=0;e!=n[239].length;++e)65533!==n[239][e].charCodeAt(0)&&(r[n[239][e]]=61184+e,t[61184+e]=n[239][e]);for(n[240]="����������������������������������������������������������������璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒����������������������������������臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧�".split(""),e=0;e!=n[240].length;++e)65533!==n[240][e].charCodeAt(0)&&(r[n[240][e]]=61440+e,t[61440+e]=n[240][e]);for(n[241]="����������������������������������������������������������������蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪����������������������������������鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰�".split(""),e=0;e!=n[241].length;++e)65533!==n[241][e].charCodeAt(0)&&(r[n[241][e]]=61696+e,t[61696+e]=n[241][e]);for(n[242]="����������������������������������������������������������������徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛����������������������������������礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕�".split(""),e=0;e!=n[242].length;++e)65533!==n[242][e].charCodeAt(0)&&(r[n[242][e]]=61952+e,t[61952+e]=n[242][e]);for(n[243]="����������������������������������������������������������������譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦����������������������������������鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲�".split(""),e=0;e!=n[243].length;++e)65533!==n[243][e].charCodeAt(0)&&(r[n[243][e]]=62208+e,t[62208+e]=n[243][e]);for(n[244]="����������������������������������������������������������������嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩����������������������������������禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿�".split(""),e=0;e!=n[244].length;++e)65533!==n[244][e].charCodeAt(0)&&(r[n[244][e]]=62464+e,t[62464+e]=n[244][e]);for(n[245]="����������������������������������������������������������������鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛����������������������������������鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥�".split(""),e=0;e!=n[245].length;++e)65533!==n[245][e].charCodeAt(0)&&(r[n[245][e]]=62720+e,t[62720+e]=n[245][e]);for(n[246]="����������������������������������������������������������������蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺����������������������������������騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚�".split(""),e=0;e!=n[246].length;++e)65533!==n[246][e].charCodeAt(0)&&(r[n[246][e]]=62976+e,t[62976+e]=n[246][e]);for(n[247]="����������������������������������������������������������������糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊����������������������������������驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾�".split(""),e=0;e!=n[247].length;++e)65533!==n[247][e].charCodeAt(0)&&(r[n[247][e]]=63232+e,t[63232+e]=n[247][e]);for(n[248]="����������������������������������������������������������������讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏����������������������������������齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚�".split(""),e=0;e!=n[248].length;++e)65533!==n[248][e].charCodeAt(0)&&(r[n[248][e]]=63488+e,t[63488+e]=n[248][e]);for(n[249]="����������������������������������������������������������������纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊����������������������������������龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓�".split(""),e=0;e!=n[249].length;++e)65533!==n[249][e].charCodeAt(0)&&(r[n[249][e]]=63744+e,t[63744+e]=n[249][e]);return{enc:r,dec:t}}(),a[1250]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1251]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1252]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1253]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1254]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1255]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹ�ֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1256]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1257]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1258]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1e4]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10006]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10007]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10008]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€���������������������������������������������������������������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[161]="����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。・ˉˇ¨〃々―~�…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�".split(""),e=0;e!=n[161].length;++e)65533!==n[161][e].charCodeAt(0)&&(r[n[161][e]]=41216+e,t[41216+e]=n[161][e]);for(n[162]="���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���".split(""),e=0;e!=n[162].length;++e)65533!==n[162][e].charCodeAt(0)&&(r[n[162][e]]=41472+e,t[41472+e]=n[162][e]);for(n[163]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=n[163].length;++e)65533!==n[163][e].charCodeAt(0)&&(r[n[163][e]]=41728+e,t[41728+e]=n[163][e]);for(n[164]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=n[164].length;++e)65533!==n[164][e].charCodeAt(0)&&(r[n[164][e]]=41984+e,t[41984+e]=n[164][e]);for(n[165]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=n[165].length;++e)65533!==n[165][e].charCodeAt(0)&&(r[n[165][e]]=42240+e,t[42240+e]=n[165][e]);for(n[166]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω���������������������������������������".split(""),e=0;e!=n[166].length;++e)65533!==n[166][e].charCodeAt(0)&&(r[n[166][e]]=42496+e,t[42496+e]=n[166][e]);for(n[167]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=n[167].length;++e)65533!==n[167][e].charCodeAt(0)&&(r[n[167][e]]=42752+e,t[42752+e]=n[167][e]);for(n[168]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüê����������ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������".split(""),e=0;e!=n[168].length;++e)65533!==n[168][e].charCodeAt(0)&&(r[n[168][e]]=43008+e,t[43008+e]=n[168][e]);for(n[169]="��������������������������������������������������������������������������������������������������������������������������������������������������������������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������".split(""),e=0;e!=n[169].length;++e)65533!==n[169][e].charCodeAt(0)&&(r[n[169][e]]=43264+e,t[43264+e]=n[169][e]);for(n[176]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�".split(""),e=0;e!=n[176].length;++e)65533!==n[176][e].charCodeAt(0)&&(r[n[176][e]]=45056+e,t[45056+e]=n[176][e]);for(n[177]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�".split(""),e=0;e!=n[177].length;++e)65533!==n[177][e].charCodeAt(0)&&(r[n[177][e]]=45312+e,t[45312+e]=n[177][e]);for(n[178]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�".split(""),e=0;e!=n[178].length;++e)65533!==n[178][e].charCodeAt(0)&&(r[n[178][e]]=45568+e,t[45568+e]=n[178][e]);for(n[179]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�".split(""),e=0;e!=n[179].length;++e)65533!==n[179][e].charCodeAt(0)&&(r[n[179][e]]=45824+e,t[45824+e]=n[179][e]);for(n[180]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�".split(""),e=0;e!=n[180].length;++e)65533!==n[180][e].charCodeAt(0)&&(r[n[180][e]]=46080+e,t[46080+e]=n[180][e]);for(n[181]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�".split(""),e=0;e!=n[181].length;++e)65533!==n[181][e].charCodeAt(0)&&(r[n[181][e]]=46336+e,t[46336+e]=n[181][e]);for(n[182]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�".split(""),e=0;e!=n[182].length;++e)65533!==n[182][e].charCodeAt(0)&&(r[n[182][e]]=46592+e,t[46592+e]=n[182][e]);for(n[183]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�".split(""),e=0;e!=n[183].length;++e)65533!==n[183][e].charCodeAt(0)&&(r[n[183][e]]=46848+e,t[46848+e]=n[183][e]);for(n[184]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�".split(""),e=0;e!=n[184].length;++e)65533!==n[184][e].charCodeAt(0)&&(r[n[184][e]]=47104+e,t[47104+e]=n[184][e]);for(n[185]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�".split(""),e=0;e!=n[185].length;++e)65533!==n[185][e].charCodeAt(0)&&(r[n[185][e]]=47360+e,t[47360+e]=n[185][e]);for(n[186]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�".split(""),e=0;e!=n[186].length;++e)65533!==n[186][e].charCodeAt(0)&&(r[n[186][e]]=47616+e,t[47616+e]=n[186][e]);for(n[187]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�".split(""),e=0;e!=n[187].length;++e)65533!==n[187][e].charCodeAt(0)&&(r[n[187][e]]=47872+e,t[47872+e]=n[187][e]);for(n[188]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�".split(""),e=0;e!=n[188].length;++e)65533!==n[188][e].charCodeAt(0)&&(r[n[188][e]]=48128+e,t[48128+e]=n[188][e]);for(n[189]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�".split(""),e=0;e!=n[189].length;++e)65533!==n[189][e].charCodeAt(0)&&(r[n[189][e]]=48384+e,t[48384+e]=n[189][e]);for(n[190]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�".split(""),e=0;e!=n[190].length;++e)65533!==n[190][e].charCodeAt(0)&&(r[n[190][e]]=48640+e,t[48640+e]=n[190][e]);for(n[191]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�".split(""),e=0;e!=n[191].length;++e)65533!==n[191][e].charCodeAt(0)&&(r[n[191][e]]=48896+e,t[48896+e]=n[191][e]);for(n[192]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�".split(""),e=0;e!=n[192].length;++e)65533!==n[192][e].charCodeAt(0)&&(r[n[192][e]]=49152+e,t[49152+e]=n[192][e]);for(n[193]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�".split(""),e=0;e!=n[193].length;++e)65533!==n[193][e].charCodeAt(0)&&(r[n[193][e]]=49408+e,t[49408+e]=n[193][e]);for(n[194]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�".split(""),e=0;e!=n[194].length;++e)65533!==n[194][e].charCodeAt(0)&&(r[n[194][e]]=49664+e,t[49664+e]=n[194][e]);for(n[195]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�".split(""),e=0;e!=n[195].length;++e)65533!==n[195][e].charCodeAt(0)&&(r[n[195][e]]=49920+e,t[49920+e]=n[195][e]);for(n[196]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�".split(""),e=0;e!=n[196].length;++e)65533!==n[196][e].charCodeAt(0)&&(r[n[196][e]]=50176+e,t[50176+e]=n[196][e]);for(n[197]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�".split(""),e=0;e!=n[197].length;++e)65533!==n[197][e].charCodeAt(0)&&(r[n[197][e]]=50432+e,t[50432+e]=n[197][e]);for(n[198]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�".split(""),e=0;e!=n[198].length;++e)65533!==n[198][e].charCodeAt(0)&&(r[n[198][e]]=50688+e,t[50688+e]=n[198][e]);for(n[199]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�".split(""),e=0;e!=n[199].length;++e)65533!==n[199][e].charCodeAt(0)&&(r[n[199][e]]=50944+e,t[50944+e]=n[199][e]);for(n[200]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�".split(""),e=0;e!=n[200].length;++e)65533!==n[200][e].charCodeAt(0)&&(r[n[200][e]]=51200+e,t[51200+e]=n[200][e]);for(n[201]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�".split(""),e=0;e!=n[201].length;++e)65533!==n[201][e].charCodeAt(0)&&(r[n[201][e]]=51456+e,t[51456+e]=n[201][e]);for(n[202]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�".split(""),e=0;e!=n[202].length;++e)65533!==n[202][e].charCodeAt(0)&&(r[n[202][e]]=51712+e,t[51712+e]=n[202][e]);for(n[203]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�".split(""),e=0;e!=n[203].length;++e)65533!==n[203][e].charCodeAt(0)&&(r[n[203][e]]=51968+e,t[51968+e]=n[203][e]);for(n[204]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�".split(""),e=0;e!=n[204].length;++e)65533!==n[204][e].charCodeAt(0)&&(r[n[204][e]]=52224+e,t[52224+e]=n[204][e]);for(n[205]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�".split(""),e=0;e!=n[205].length;++e)65533!==n[205][e].charCodeAt(0)&&(r[n[205][e]]=52480+e,t[52480+e]=n[205][e]);for(n[206]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�".split(""),e=0;e!=n[206].length;++e)65533!==n[206][e].charCodeAt(0)&&(r[n[206][e]]=52736+e,t[52736+e]=n[206][e]);for(n[207]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�".split(""),e=0;e!=n[207].length;++e)65533!==n[207][e].charCodeAt(0)&&(r[n[207][e]]=52992+e,t[52992+e]=n[207][e]);for(n[208]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�".split(""),e=0;e!=n[208].length;++e)65533!==n[208][e].charCodeAt(0)&&(r[n[208][e]]=53248+e,t[53248+e]=n[208][e]);for(n[209]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�".split(""),e=0;e!=n[209].length;++e)65533!==n[209][e].charCodeAt(0)&&(r[n[209][e]]=53504+e,t[53504+e]=n[209][e]);for(n[210]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�".split(""),e=0;e!=n[210].length;++e)65533!==n[210][e].charCodeAt(0)&&(r[n[210][e]]=53760+e,t[53760+e]=n[210][e]);for(n[211]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�".split(""),e=0;e!=n[211].length;++e)65533!==n[211][e].charCodeAt(0)&&(r[n[211][e]]=54016+e,t[54016+e]=n[211][e]);for(n[212]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�".split(""),e=0;e!=n[212].length;++e)65533!==n[212][e].charCodeAt(0)&&(r[n[212][e]]=54272+e,t[54272+e]=n[212][e]);for(n[213]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�".split(""),e=0;e!=n[213].length;++e)65533!==n[213][e].charCodeAt(0)&&(r[n[213][e]]=54528+e,t[54528+e]=n[213][e]);for(n[214]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�".split(""),e=0;e!=n[214].length;++e)65533!==n[214][e].charCodeAt(0)&&(r[n[214][e]]=54784+e,t[54784+e]=n[214][e]);for(n[215]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������".split(""),e=0;e!=n[215].length;++e)65533!==n[215][e].charCodeAt(0)&&(r[n[215][e]]=55040+e,t[55040+e]=n[215][e]);for(n[216]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�".split(""),e=0;e!=n[216].length;++e)65533!==n[216][e].charCodeAt(0)&&(r[n[216][e]]=55296+e,t[55296+e]=n[216][e]);for(n[217]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�".split(""),e=0;e!=n[217].length;++e)65533!==n[217][e].charCodeAt(0)&&(r[n[217][e]]=55552+e,t[55552+e]=n[217][e]);for(n[218]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�".split(""),e=0;e!=n[218].length;++e)65533!==n[218][e].charCodeAt(0)&&(r[n[218][e]]=55808+e,t[55808+e]=n[218][e]);for(n[219]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�".split(""),e=0;e!=n[219].length;++e)65533!==n[219][e].charCodeAt(0)&&(r[n[219][e]]=56064+e,t[56064+e]=n[219][e]);for(n[220]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�".split(""),e=0;e!=n[220].length;++e)65533!==n[220][e].charCodeAt(0)&&(r[n[220][e]]=56320+e,t[56320+e]=n[220][e]);for(n[221]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�".split(""),e=0;e!=n[221].length;++e)65533!==n[221][e].charCodeAt(0)&&(r[n[221][e]]=56576+e,t[56576+e]=n[221][e]);for(n[222]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�".split(""),e=0;e!=n[222].length;++e)65533!==n[222][e].charCodeAt(0)&&(r[n[222][e]]=56832+e,t[56832+e]=n[222][e]);for(n[223]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�".split(""),e=0;e!=n[223].length;++e)65533!==n[223][e].charCodeAt(0)&&(r[n[223][e]]=57088+e,t[57088+e]=n[223][e]);for(n[224]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[235]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�".split(""),e=0;e!=n[235].length;++e)65533!==n[235][e].charCodeAt(0)&&(r[n[235][e]]=60160+e,t[60160+e]=n[235][e]);for(n[236]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�".split(""),e=0;e!=n[236].length;++e)65533!==n[236][e].charCodeAt(0)&&(r[n[236][e]]=60416+e,t[60416+e]=n[236][e]);for(n[237]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[239]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�".split(""),e=0;e!=n[239].length;++e)65533!==n[239][e].charCodeAt(0)&&(r[n[239][e]]=61184+e,t[61184+e]=n[239][e]);for(n[240]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�".split(""),e=0;e!=n[240].length;++e)65533!==n[240][e].charCodeAt(0)&&(r[n[240][e]]=61440+e,t[61440+e]=n[240][e]);for(n[241]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�".split(""),e=0;e!=n[241].length;++e)65533!==n[241][e].charCodeAt(0)&&(r[n[241][e]]=61696+e,t[61696+e]=n[241][e]);for(n[242]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�".split(""),e=0;e!=n[242].length;++e)65533!==n[242][e].charCodeAt(0)&&(r[n[242][e]]=61952+e,t[61952+e]=n[242][e]);for(n[243]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�".split(""),e=0;e!=n[243].length;++e)65533!==n[243][e].charCodeAt(0)&&(r[n[243][e]]=62208+e,t[62208+e]=n[243][e]);for(n[244]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�".split(""),e=0;e!=n[244].length;++e)65533!==n[244][e].charCodeAt(0)&&(r[n[244][e]]=62464+e,t[62464+e]=n[244][e]);for(n[245]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�".split(""),e=0;e!=n[245].length;++e)65533!==n[245][e].charCodeAt(0)&&(r[n[245][e]]=62720+e,t[62720+e]=n[245][e]);for(n[246]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�".split(""),e=0;e!=n[246].length;++e)65533!==n[246][e].charCodeAt(0)&&(r[n[246][e]]=62976+e,t[62976+e]=n[246][e]);for(n[247]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�".split(""),e=0;e!=n[247].length;++e)65533!==n[247][e].charCodeAt(0)&&(r[n[247][e]]=63232+e,t[63232+e]=n[247][e]);return{enc:r,dec:t}}(),a[10029]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10079]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10081]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),n.exports&&(n.exports=a),function(e,t){if(void 0===a){if(void 0===Qd)throw new Error("cptable not found");var r=a;n.exports?n.exports=t(r):e.cptable=t(r)}else a=t(a)}(Zd,function(_){var T={1200:"utf16le",1201:"utf16be",12e3:"utf32le",12001:"utf32be",16969:"utf64le",20127:"ascii",65e3:"utf7",65001:"utf8"},r=[874,1250,1251,1252,1253,1254,1255,1256,1e4],n=[932,936,949,950],a=[65001],s={},i={},k={},m={},b=function(e){return String.fromCharCode(e)},y=function(e){return e.charCodeAt(0)},x="undefined"!=typeof Buffer;if(x){var c=1024,f=new Buffer(c),o=function(e){var l=function(e){for(var t=new Buffer(65536),r=0;r<65536;++r)t[r]=0;for(var n=Object.keys(e),a=n.length,s=0,i=n[s];s>10&1023)],r[s++]=l[56320+(1023&o)]));r=r.slice(0,s)}else for(r=new Buffer(n),a=0;a>8}return function(e){var t=e.length,r=0,n=0;if(c<2*t&&(c=2*t,f=new Buffer(c)),Buffer.isBuffer(e))for(r=0;r>8}return function(e,t){var r=e.length,n=new Buffer(2*r),a=0,s=0,i=0,o=0,l=0;if("string"==typeof e){for(a=o=0;a>10&1023)),n[o++]=c[s+1]||c[s],0>8);return function(e){var t=e.length,r=new Buffer(2*t),n=0,a=0,s=0;if(Buffer.isBuffer(e))for(n=0;n>8):(a=55296+((n-=65536)>>10&1023),n=56320+(1023&n),f[o++]=255&a,f[o++]=a>>>8,f[o++]=255&n,f[o++]=n>>>8&255);return f.slice(0,o).toString("ucs2")},i[65001]=function(e,t){if(x&&Buffer.isBuffer(e))return t&&"buf"!==t?"arr"!==t?e.toString("binary"):[].slice.call(e):e;var r=e.length,n=0,a=0,s=0,i="string"==typeof e;c<4*r&&(c=4*r,f=new Buffer(c));for(var o=0;o>6),f[s++]=128+(63&n)):55296<=n&&n<=57343?(n-=55296,++o,a=(i?e.charCodeAt(o):e[o].charCodeAt(0))-56320+(n<<10),f[s++]=240+(a>>>18&7),f[s++]=144+(a>>>12&63),f[s++]=128+(a>>>6&63),f[s++]=128+(63&a)):(f[s++]=224+(n>>12),f[s++]=128+(n>>6&63),f[s++]=128+(63&n));return t&&"buf"!==t?"arr"!==t?f.slice(0,s).toString("binary"):[].slice.call(f,0,s):f.slice(0,s)}}var e=function(){if(x){if(k[r[0]])return;var e=0,t=0;for(e=0;e>10&1023),l=56320+(1023&l),i[h++]=String.fromCharCode(u)),i[h++]=String.fromCharCode(l);break;case"ascii":if(x&&Buffer.isBuffer(r))return r.toString(p);for(c=0;c>10&1023)),i[h++]=String.fromCharCode(56320+(1023&l))):i[h++]=String.fromCharCode(l);break;case"utf32be":for(4<=s&&255==r[3]&&254==r[2]&&0===r[1]&&0===r[0]&&(c=4),f=4;c>10&1023)),i[h++]=String.fromCharCode(56320+(1023&l))):i[h++]=String.fromCharCode(l);break;case"utf7":for(4<=s&&43==r[0]&&47==r[1]&&118==r[2]&&(5<=s&&56==r[3]&&45==r[4]?c=5:56!=r[3]&&57!=r[3]&&43!=r[3]&&47!=r[3]||(c=4));c>4,m.push(v),-1!==(w=R.indexOf(String.fromCharCode(r[c+B++]))))&&(E=(15&S)<<4|w>>2,m.push(E),-1!==(A=R.indexOf(String.fromCharCode(r[c+B++]))));)C=(3&w)<<6|A,A<64&&m.push(C);for(b=e(1201,m),B=0;B>8,i[++c]=255&o):i[c]=255&o;else{if(!(u=T[t]))throw new Error("Unrecognized CP: "+t);switch(u){case"utf8":if(x&&d){c=(i=new Buffer(r,u)).length;break}for(l=0;l>6),i[++c]=128+(63&o)):55296<=o&&o<=57343?(o-=55296,f=(d?r.charCodeAt(++l):r[++l].charCodeAt(0))-56320+(o<<10),i[c]=240+(f>>>18&7),i[++c]=144+(f>>>12&63),i[++c]=128+(f>>>6&63),i[++c]=128+(63&f)):(i[c]=224+(o>>12),i[++c]=128+(o>>6&63),i[++c]=128+(63&o));break;case"ascii":if(x&&"string"==typeof r){c=(i=new Buffer(r,u)).length;break}for(l=0;l>8;break;case"utf16be":for(l=0;l>8,i[c++]=255&o;break;case"utf32le":for(l=0;l>=8,i[c++]=255&o,o>>=8,i[c++]=255&o,o>>=8,i[c++]=255&o;break;case"utf32be":for(l=0;l>=8,i[c+2]=255&o,o>>=8,i[c+1]=255&o,o>>=8,i[c]=255&o,c+=4;break;case"utf7":for(l=0;l>2),i[c++]=R.charCodeAt(((3&g[0])<<4)+((g[1]||0)>>4)),i[c++]=R.charCodeAt(((15&g[1])<<2)+((g[2]||0)>>6)),i[c++]=45}else i[c++]=43,i[c++]=45}break;default:throw new Error("Unsupported magic: "+t+" "+T[t])}}return i=i.slice(0,c),x?n&&"buf"!==n?"arr"!==n?i.toString("binary"):[].slice.call(i):i:"str"==n?i.map(b).join(""):i},hascp:function(e){return!(!_[e]&&!T[e])},magic:T,cache:p},_})}),r={},n=Object.freeze({default:r}),Jd=e(function(e,t){e.exports=function a(s,i,o){function l(r,e){if(!i[r]){if(!s[r]){var t=Qd;if(!e&&t)return t(r,!0);if(c)return c(r,!0);throw new Error("Cannot find module '"+r+"'")}var n=i[r]={exports:{}};s[r][0].call(n.exports,function(e){var t=s[r][1][e];return l(t||e)},n,n.exports,a,s,i,o)}return i[r].exports}for(var c=Qd,e=0;e>2,i=(3&r)<<4|n>>4,o=(15&n)<<2|a>>6,l=63&a,isNaN(n)?o=l=64:isNaN(a)&&(l=64),c=c+h.charAt(s)+h.charAt(i)+h.charAt(o)+h.charAt(l);return c},r.decode=function(e,t){var r,n,a,s,i,o,l,c="",f=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");f>4,n=(15&i)<<4|o>>2,a=(3&o)<<6|l,c+=String.fromCharCode(r),64!=o&&(c+=String.fromCharCode(n)),64!=l&&(c+=String.fromCharCode(a));return c}},{}],2:[function(e,t,r){function n(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}n.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},t.exports=n},{}],3:[function(e,t,r){r.STORE={magic:"\0\0",compress:function(e){return e},uncompress:function(e){return e},compressInputType:null,uncompressInputType:null},r.DEFLATE=e("./flate")},{"./flate":8}],4:[function(e,t,r){var i=e("./utils"),o=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];t.exports=function(e,t){if(void 0===e||!e.length)return 0;var r="string"!==i.getTypeOf(e);void 0===t&&(t=0);var n=0;t^=-1;for(var a=0,s=e.length;a>>8^o[255&(t^n)];return-1^t}},{"./utils":21}],5:[function(e,t,r){var n=e("./utils");function a(e){this.data=null,this.length=0,this.index=0}a.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1)}},t.exports=a},{"./utils":21}],6:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!1,r.date=null,r.compression=null,r.comment=null},{}],7:[function(e,t,r){var n=e("./utils");r.string2binary=function(e){return n.string2binary(e)},r.string2Uint8Array=function(e){return n.transformTo("uint8array",e)},r.uint8Array2String=function(e){return n.transformTo("string",e)},r.string2Blob=function(e){var t=n.transformTo("arraybuffer",e);return n.arrayBuffer2Blob(t)},r.arrayBuffer2Blob=function(e){return n.arrayBuffer2Blob(e)},r.transformTo=function(e,t){return n.transformTo(e,t)},r.getTypeOf=function(e){return n.getTypeOf(e)},r.checkSupport=function(e){return n.checkSupport(e)},r.MAX_VALUE_16BITS=n.MAX_VALUE_16BITS,r.MAX_VALUE_32BITS=n.MAX_VALUE_32BITS,r.pretty=function(e){return n.pretty(e)},r.findCompression=function(e){return n.findCompression(e)},r.isRegExp=function(e){return n.isRegExp(e)}},{"./utils":21}],8:[function(e,t,r){var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,a=e("pako");r.uncompressInputType=n?"uint8array":"array",r.compressInputType=n?"uint8array":"array",r.magic="\b\0",r.compress=function(e){return a.deflateRaw(e)},r.uncompress=function(e){return a.inflateRaw(e)}},{pako:24}],9:[function(e,t,r){var n=e("./base64");function a(e,t){if(!(this instanceof a))return new a(e,t);this.files={},this.comment=null,this.root="",e&&this.load(e,t),this.clone=function(){var e=new a;for(var t in this)"function"!=typeof this[t]&&(e[t]=this[t]);return e}}(a.prototype=e("./object")).load=e("./load"),a.support=e("./support"),a.defaults=e("./defaults"),a.utils=e("./deprecatedPublicUtils"),a.base64={encode:function(e){return n.encode(e)},decode:function(e){return n.decode(e)}},a.compressions=e("./compressions"),t.exports=a},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(e,t,r){var i=e("./base64"),o=e("./zipEntries");t.exports=function(e,t){var r,n,a,s;for((t=t||{}).base64&&(e=i.decode(e)),n=new o(e,t),r=n.files,a=0;a>>=8;return n},_=function(){var e,t,r={};for(e=0;ee.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+c[e[r]]>t?r:t},i=function(e){var t,r,n,a,s=e.length,i=new Array(2*s);for(t=r=0;t>10&1023,i[r++]=56320|1023&n)}return i.length!==r&&(i.subarray?i=i.subarray(0,r):i.length=r),o.applyFromCharCode(i)};r.utf8encode=function(e){return l.nodebuffer?n(e,"utf-8"):function(e){var t,r,n,a,s,i=e.length,o=0;for(a=0;a>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},r.utf8decode=function(e){if(l.nodebuffer)return o.transformTo("nodebuffer",e).toString("utf-8");e=o.transformTo(l.uint8array?"uint8array":"array",e);for(var t=[],r=0,n=e.length;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return f(e,e.length)},r.binstring2buf=function(e){for(var t=new l.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&a)}return f(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+c[e[r]]>t?r:t}},{"./common":27}],29:[function(e,t,r){t.exports=function(e,t,r,n){for(var a=65535&e|0,s=e>>>16&65535|0,i=0;0!==r;){for(r-=i=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var a=o,s=n+r;e^=-1;for(var i=n;i>>8^a[255&(e^t[i])];return-1^e}},{}],32:[function(e,t,r){var u=e("../utils/common"),c=e("./trees"),d=e("./adler32"),p=e("./crc32"),n=e("./messages"),f=0,h=4,g=0,m=-2,l=-1,b=4,a=2,v=8,E=9,s=286,i=30,o=19,C=2*s+1,S=15,w=3,A=258,B=A+w+1,_=42,T=113,k=1,y=2,x=3,R=4;function I(e,t){return e.msg=n[t],t}function O(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(u.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function F(e,t){c._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,P(e.strm)}function N(e,t){e.pending_buf[e.pending++]=t}function L(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function M(e,t){var r,n,a=e.max_chain_length,s=e.strstart,i=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-B?e.strstart-(e.w_size-B):0,c=e.window,f=e.w_mask,h=e.prev,u=e.strstart+A,d=c[s+i-1],p=c[s+i];e.prev_length>=e.good_match&&(a>>=2),o>e.lookahead&&(o=e.lookahead);do{if(c[(r=t)+i]===p&&c[r+i-1]===d&&c[r]===c[s]&&c[++r]===c[s+1]){s+=2,r++;do{}while(c[++s]===c[++r]&&c[++s]===c[++r]&&c[++s]===c[++r]&&c[++s]===c[++r]&&c[++s]===c[++r]&&c[++s]===c[++r]&&c[++s]===c[++r]&&c[++s]===c[++r]&&sl&&0!=--a);return i<=e.lookahead?i:e.lookahead}function U(e){var t,r,n,a,s,i,o,l,c,f,h=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=h+(h-B)){for(u.arraySet(e.window,e.window,h,h,0),e.match_start-=h,e.strstart-=h,e.block_start-=h,r=e.hash_size,t=r;n=e.head[--t],e.head[t]=h<=n?n-h:0,--r;);for(t=r=h;n=e.prev[--t],e.prev[t]=h<=n?n-h:0,--r;);a+=h}if(0===e.strm.avail_in)break;if(i=e.strm,o=e.window,l=e.strstart+e.lookahead,c=a,f=void 0,f=i.avail_in,c=w)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=w&&(e.ins_h=(e.ins_h<=w)if(n=c._tr_tally(e,e.strstart-e.match_start,e.match_length-w),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=w){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=w&&(e.ins_h=(e.ins_h<=w&&e.match_length<=e.prev_length){for(a=e.strstart+e.lookahead-w,n=c._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-w),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=a&&(e.ins_h=(e.ins_h<>1,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,j(e)}H=[new V(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(U(e),0===e.lookahead&&t===f)return k;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,F(e,!1),0===e.strm.avail_out))return k;if(e.strstart-e.block_start>=e.w_size-B&&(F(e,!1),0===e.strm.avail_out))return k}return e.insert=0,t===h?(F(e,!0),0===e.strm.avail_out?x:R):(e.strstart>e.block_start&&(F(e,!1),e.strm.avail_out),k)}),new V(4,4,8,4,W),new V(4,5,16,8,W),new V(4,6,32,32,W),new V(4,4,16,16,z),new V(8,16,32,32,z),new V(8,16,128,128,z),new V(8,32,128,256,z),new V(32,128,258,1024,z),new V(32,258,258,4096,z)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=j,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?m:(e.state.gzhead=t,g):m},r.deflate=function(e,t){var r,n,a,s;if(!e||!e.state||5>8&255),N(n,n.gzhead.time>>16&255),N(n,n.gzhead.time>>24&255),N(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),N(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(N(n,255&n.gzhead.extra.length),N(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(N(n,0),N(n,0),N(n,0),N(n,0),N(n,0),N(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),N(n,3),n.status=T);else{var i=v+(n.w_bits-8<<4)<<8,o=-1;o=2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3,i|=o<<6,0!==n.strstart&&(i|=32),i+=31-i%31,n.status=T,L(n,i),0!==n.strstart&&(L(n,e.adler>>>16),L(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(a=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>a&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),P(e),a=n.pending,n.pending!==n.pending_buf_size));)N(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>a&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){a=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>a&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),P(e),a=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexa&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){a=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>a&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),P(e),a=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexa&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&P(e),n.pending+2<=n.pending_buf_size&&(N(n,255&e.adler),N(n,e.adler>>8&255),e.adler=0,n.status=T)):n.status=T),0!==n.pending){if(P(e),0===e.avail_out)return n.last_flush=-1,g}else if(0===e.avail_in&&O(t)<=O(r)&&t!==h)return I(e,-5);if(666===n.status&&0!==e.avail_in)return I(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==f&&666!==n.status){var l=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(U(e),0===e.lookahead)){if(t===f)return k;break}if(e.match_length=0,r=c._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(F(e,!1),0===e.strm.avail_out))return k}return e.insert=0,t===h?(F(e,!0),0===e.strm.avail_out?x:R):e.last_lit&&(F(e,!1),0===e.strm.avail_out)?k:y}(n,t):3===n.strategy?function(e,t){for(var r,n,a,s,i=e.window;;){if(e.lookahead<=A){if(U(e),e.lookahead<=A&&t===f)return k;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=w&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=w?(r=c._tr_tally(e,1,e.match_length-w),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=c._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(F(e,!1),0===e.strm.avail_out))return k}return e.insert=0,t===h?(F(e,!0),0===e.strm.avail_out?x:R):e.last_lit&&(F(e,!1),0===e.strm.avail_out)?k:y}(n,t):H[n.level].func(n,t);if(l!==x&&l!==R||(n.status=666),l===k||l===x)return 0===e.avail_out&&(n.last_flush=-1),g;if(l===y&&(1===t?c._tr_align(n):5!==t&&(c._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),P(e),0===e.avail_out))return n.last_flush=-1,g}return t!==h?g:n.wrap<=0?1:(2===n.wrap?(N(n,255&e.adler),N(n,e.adler>>8&255),N(n,e.adler>>16&255),N(n,e.adler>>24&255),N(n,255&e.total_in),N(n,e.total_in>>8&255),N(n,e.total_in>>16&255),N(n,e.total_in>>24&255)):(L(n,e.adler>>>16),L(n,65535&e.adler)),P(e),0>>=C=E>>>24,p-=C,0==(C=E>>>16&255))T[s++]=65535&E;else{if(!(16&C)){if(0==(64&C)){E=g[(65535&E)+(d&(1<>>=C,p-=C),p<15&&(d+=_[n++]<>>=C=E>>>24,p-=C,!(16&(C=E>>>16&255))){if(0==(64&C)){E=m[(65535&E)+(d&(1<>>=C,p-=C,(C=s-i)>3,d&=(1<<(p-=S<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new F.Buf16(320),this.work=new F.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function i(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=X,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new F.Buf32(n),t.distcode=t.distdyn=new F.Buf32(a),t.sane=1,t.back=-1,H):V}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,i(e)):V}function l(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15>>8&255,r.check=L(r.check,D,2,0),f=c=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&c)<<8)+(c>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&c)){e.msg="unknown compression method",r.mode=30;break}if(f-=4,w=8+(15&(c>>>=4)),0===r.wbits)r.wbits=w;else if(w>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(D[0]=255&c,D[1]=c>>>8&255,r.check=L(r.check,D,2,0)),f=c=0,r.mode=3;case 3:for(;f<32;){if(0===o)break e;o--,c+=n[s++]<>>8&255,D[2]=c>>>16&255,D[3]=c>>>24&255,r.check=L(r.check,D,4,0)),f=c=0,r.mode=4;case 4:for(;f<16;){if(0===o)break e;o--,c+=n[s++]<>8),512&r.flags&&(D[0]=255&c,D[1]=c>>>8&255,r.check=L(r.check,D,2,0)),f=c=0,r.mode=5;case 5:if(1024&r.flags){for(;f<16;){if(0===o)break e;o--,c+=n[s++]<>>8&255,r.check=L(r.check,D,2,0)),f=c=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(d=r.length,o>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;f<32;){if(0===o)break e;o--,c+=n[s++]<>>=7&f,f-=7&f,r.mode=27;break}for(;f<3;){if(0===o)break e;o--,c+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6===t){c>>>=2,f-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}c>>>=2,f-=2;break;case 14:for(c>>>=7&f,f-=7&f;f<32;){if(0===o)break e;o--,c+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&c,f=c=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,f-=5,r.ndist=1+(31&c),c>>>=5,f-=5,r.ncode=4+(15&c),c>>>=4,f-=4,286>>=3,f-=3}for(;r.have<19;)r.lens[P[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,B={bits:r.lenbits},A=U(0,r.lens,0,19,r.lencode,0,r.work,B),r.lenbits=B.bits,A){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,v=65535&O,!((m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[s++]<>>=m,f-=m,r.lens[r.have++]=v;else{if(16===v){for(_=m+2;f<_;){if(0===o)break e;o--,c+=n[s++]<>>=m,f-=m,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}w=r.lens[r.have-1],d=3+(3&c),c>>>=2,f-=2}else if(17===v){for(_=m+3;f<_;){if(0===o)break e;o--,c+=n[s++]<>>=m)),c>>>=3,f-=3}else{for(_=m+7;f<_;){if(0===o)break e;o--,c+=n[s++]<>>=m)),c>>>=7,f-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;d--;)r.lens[r.have++]=w}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,B={bits:r.lenbits},A=U(W,r.lens,0,r.nlen,r.lencode,0,r.work,B),r.lenbits=B.bits,A){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,B={bits:r.distbits},A=U(z,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,B),r.distbits=B.bits,A){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=l){e.next_out=i,e.avail_out=l,e.next_in=s,e.avail_in=o,r.hold=c,r.bits=f,M(e,u),i=e.next_out,a=e.output,l=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,c=r.hold,f=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;O=r.lencode[c&(1<>>16&255,v=65535&O,!((m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[s++]<>E)],b=O>>>16&255,v=65535&O,!(E+(m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[s++]<>>=E,f-=E,r.back+=E}if(c>>>=m,f-=m,r.back+=m,r.length=v,0===b){r.mode=26;break}if(32&b){r.back=-1,r.mode=12;break}if(64&b){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&b,r.mode=22;case 22:if(r.extra){for(_=r.extra;f<_;){if(0===o)break e;o--,c+=n[s++]<>>=r.extra,f-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;O=r.distcode[c&(1<>>16&255,v=65535&O,!((m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[s++]<>E)],b=O>>>16&255,v=65535&O,!(E+(m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[s++]<>>=E,f-=E,r.back+=E}if(c>>>=m,f-=m,r.back+=m,64&b){e.msg="invalid distance code",r.mode=30;break}r.offset=v,r.extra=15&b,r.mode=24;case 24:if(r.extra){for(_=r.extra;f<_;){if(0===o)break e;o--,c+=n[s++]<>>=r.extra,f-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===l)break e;if(d=u-l,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}d>r.wnext?(d-=r.wnext,p=r.wsize-d):p=r.wnext-d,d>r.length&&(d=r.length),g=r.window}else g=a,p=i-r.offset,d=r.length;for(l=I.wsize?(F.arraySet(I.window,k,y-I.wsize,I.wsize,0),I.wnext=0,I.whave=I.wsize):(R=I.wsize-I.wnext,xd?(g=O[D+i[E]],m=y[x+i[E]]):(g=96,m=0),l=1<>B)+(c-=l)]=p<<24|g<<16|m|0,0!==c;);for(l=1<>=1;if(0!==l?(k&=l-1,k+=l):k=0,E++,0==--R[v]){if(v===S)break;v=t[r+i[E]]}if(w>>7)]}function L(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function M(e,t,r){e.bi_valid>a-r?(e.bi_buf|=t<>a-e.bi_valid,e.bi_valid+=r-a):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function z(e,t,r){var n,a,s=new Array(b+1),i=0;for(n=1;n<=b;n++)s[n]=i=i+r[n-1]<<1;for(a=0;a<=t;a++){var o=e[2*a+1];0!==o&&(e[2*a]=W(s[o]++,o))}}function H(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(a=l;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*a]=s[2*r]+s[2*n],e.depth[a]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=a,e.heap[1]=a++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,a,s,i,o,l=t.dyn_tree,c=t.max_code,f=t.stat_desc.static_tree,h=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(s=0;s<=b;s++)e.bl_count[s]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return c;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=a&&(a=s)):a=s=r+5,r+4<=a&&-1!==t?Q(e,t,r,n):4===e.strategy||s===a?(M(e,2+(n?1:0),3),j(e,T,k)):(M(e,4+(n?1:0),3),function(e,t,r,n){var a;for(M(e,t-257,5),M(e,r-1,5),M(e,n-4,4),a=0;a>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(x[r]+h+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){var t;M(e,2,3),U(e,v,T),16===(t=e).bi_valid?(L(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}},{"../utils/common":27}],39:[function(e,t,r){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}]},{},[9])(9)});function l(){}function f(){f.init.call(this)}function c(e){return void 0===e._maxListeners?f.defaultMaxListeners:e._maxListeners}function a(e,t,r,n){var a,s,i;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function');if((s=e._events)?(s.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),s=e._events),i=s[t]):(s=e._events=new l,e._eventsCount=0),i){if("function"==typeof i?i=s[t]=n?[r,i]:[i,r]:n?i.unshift(r):i.push(r),!i.warned&&(a=c(e))&&0a){i.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=e,o.type=t,o.count=i.length,console.warn}}else i=s[t]=r,++e._eventsCount;return e}function s(e,t,r){var n=!1;function a(){e.removeListener(t,a),n||(n=!0,r.apply(e,arguments))}return a.listener=r,a}function i(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function h(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}function o(){throw new Error("setTimeout has not been defined")}function d(){throw new Error("clearTimeout has not been defined")}l.prototype=Object.create(null),(f.EventEmitter=f).usingDomains=!1,f.prototype.domain=void 0,f.prototype._events=void 0,f.prototype._maxListeners=void 0,f.defaultMaxListeners=10,f.init=function(){this.domain=null,f.usingDomains&&(!t.active||this instanceof t.Domain||(this.domain=t.active)),this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new l,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},f.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},f.prototype.getMaxListeners=function(){return c(this)},f.prototype.emit=function(e){var t,r,n,a,s,i,o,l="error"===e;if(i=this._events)l=l&&null==i.error;else if(!l)return!1;if(o=this.domain,l){if(t=arguments[1],!o){if(t instanceof Error)throw t;var c=new Error('Uncaught, unspecified "error" event. ('+t+")");throw c.context=t,c}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=o,t.domainThrown=!1,o.emit("error",t),!1}if(!(r=i[e]))return!1;var f="function"==typeof r;switch(n=arguments.length){case 1:!function(e,t,r){if(t)e.call(r);else for(var n=e.length,a=h(e,n),s=0;s>18&63]+ae[a>>12&63]+ae[a>>6&63]+ae[63&a]);return s.join("")}function fe(e){var t;oe||le();for(var r=e.length,n=r%3,a="",s=[],i=0,o=r-n;i>2],a+=ae[t<<4&63],a+="=="):2===n&&(t=(e[r-2]<<8)+e[r-1],a+=ae[t>>10],a+=ae[t>>4&63],a+=ae[t<<2&63],a+="="),s.push(a),s.join("")}function he(e,t,r,n,a){var s,i,o=8*a-n-1,l=(1<>1,f=-7,h=r?a-1:0,u=r?-1:1,d=e[t+h];for(h+=u,s=d&(1<<-f)-1,d>>=-f,f+=o;0>=-f,f+=n;0>1,u=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:s-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,i=f):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),2<=(t+=1<=i+h?u/l:u*Math.pow(2,1-h))*l&&(i++,l/=2),f<=i+h?(o=0,i=f):1<=i+h?(o=(t*l-1)*Math.pow(2,a),i+=h):(o=t*Math.pow(2,h-1)*Math.pow(2,a),i=0));8<=a;e[r+d]=255&o,d+=p,o/=256,a-=8);for(i=i<=ge())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+ge().toString(16)+" bytes");return 0|e}function Ae(e){return!(null==e||!e._isBuffer)}function Be(e,t){if(Ae(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return je(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Ye(e).length;default:if(n)return je(e).length;t=(""+t).toLowerCase(),n=!0}}function _e(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function Te(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):2147483647=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=be.from(t,n)),Ae(t))return 0===t.length?-1:ke(e,t,r,n,a);if("number"==typeof t)return t&=255,be.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):ke(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function ke(e,t,r,n,a){var s,i=1,o=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o/=i=2,l/=2,r/=2}function c(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(a){var f=-1;for(s=r;s>>10&1023|55296),f=56320|1023&f),n.push(f),a+=h}return function(e){var t=e.length;if(t<=Oe)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return Fe(this,t,r);case"utf8":case"utf-8":return Ie(this,t,r);case"ascii":return De(this,t,r);case"latin1":case"binary":return Pe(this,t,r);case"base64":return Re(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ne(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},be.prototype.equals=function(e){if(!Ae(e))throw new TypeError("Argument must be a Buffer");return this===e||0===be.compare(this,e)},be.prototype.inspect=function(){var e="";return 0"},be.prototype.compare=function(e,t,r,n,a){if(!Ae(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(a<=n&&r<=t)return 0;if(a<=n)return-1;if(r<=t)return 1;if(this===e)return 0;for(var s=(a>>>=0)-(n>>>=0),i=(r>>>=0)-(t>>>=0),o=Math.min(s,i),l=this.slice(n,a),c=e.slice(t,r),f=0;fthis.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var s,i,o,l,c,f,h,u,d,p=!1;;)switch(n){case"hex":return ye(this,e,t,r);case"utf8":case"utf-8":return u=t,d=r,Ke(je(e,(h=this).length-u),h,u,d);case"ascii":return xe(this,e,t,r);case"latin1":case"binary":return xe(this,e,t,r);case"base64":return l=this,c=t,f=r,Ke(Ye(e),l,c,f);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return i=t,o=r,Ke(function(e,t){for(var r,n,a,s=[],i=0;i>8,a=r%256,s.push(a),s.push(n);return s}(e,(s=this).length-i),s,i,o);default:if(p)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),p=!0}},be.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Oe=4096;function De(e,t,r){var n="";r=Math.min(e.length,r);for(var a=t;ae.length)throw new RangeError("Index out of range")}function Ue(e,t,r,n){t<0&&(t=65535+t+1);for(var a=0,s=Math.min(e.length-r,2);a>>8*(n?a:1-a)}function We(e,t,r,n){t<0&&(t=4294967295+t+1);for(var a=0,s=Math.min(e.length-r,4);a>>8*(n?a:3-a)&255}function ze(e,t,r,n,a,s){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function He(e,t,r,n,a){return a||ze(e,0,r,4),ue(e,t,r,n,23,4),r+4}function Ve(e,t,r,n,a){return a||ze(e,0,r,8),ue(e,t,r,n,52,8),r+8}be.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):n>>8):Ue(this,e,t,!0),t+2},be.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||Me(this,e,t,2,65535,0),be.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):Ue(this,e,t,!1),t+2},be.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||Me(this,e,t,4,4294967295,0),be.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):We(this,e,t,!0),t+4},be.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||Me(this,e,t,4,4294967295,0),be.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):We(this,e,t,!1),t+4},be.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var a=Math.pow(2,8*r-1);Me(this,e,t,r,a-1,-a)}var s=0,i=1,o=0;for(this[t]=255&e;++s>0)-o&255;return t+r},be.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var a=Math.pow(2,8*r-1);Me(this,e,t,r,a-1,-a)}var s=r-1,i=1,o=0;for(this[t+s]=255&e;0<=--s&&(i*=256);)e<0&&0===o&&0!==this[t+s+1]&&(o=1),this[t+s]=(e/i>>0)-o&255;return t+r},be.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||Me(this,e,t,1,127,-128),be.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},be.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||Me(this,e,t,2,32767,-32768),be.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):Ue(this,e,t,!0),t+2},be.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||Me(this,e,t,2,32767,-32768),be.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):Ue(this,e,t,!1),t+2},be.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||Me(this,e,t,4,2147483647,-2147483648),be.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):We(this,e,t,!0),t+4},be.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||Me(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),be.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):We(this,e,t,!1),t+4},be.prototype.writeFloatLE=function(e,t,r){return He(this,e,t,!0,r)},be.prototype.writeFloatBE=function(e,t,r){return He(this,e,t,!1,r)},be.prototype.writeDoubleLE=function(e,t,r){return Ve(this,e,t,!0,r)},be.prototype.writeDoubleBE=function(e,t,r){return Ve(this,e,t,!1,r)},be.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),0=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(s=t;s>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function Ye(e){return function(e){var t,r,n,a,s,i;oe||le();var o=e.length;if(0>16&255,i[l++]=a>>8&255,i[l++]=255&a;return 2===s?(a=se[e.charCodeAt(t)]<<2|se[e.charCodeAt(t+1)]>>4,i[l++]=255&a):1===s&&(a=se[e.charCodeAt(t)]<<10|se[e.charCodeAt(t+1)]<<4|se[e.charCodeAt(t+2)]>>2,i[l++]=a>>8&255,i[l++]=255&a),i}(function(e){var t;if((e=(t=e,t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")).replace(Xe,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function Ke(e,t,r,n){for(var a=0;a=t.length||a>=e.length);++a)t[a+r]=e[a];return a}function $e(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function Ze(){this.head=null,this.tail=null,this.length=0}Ze.prototype.push=function(e){var t={data:e,next:null};0>>0),r=this.head,n=0;r;)r.data.copy(t,n),n+=r.data.length,r=r.next;return t};var Qe=be.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function qe(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),function(e){if(e&&!Qe(e))throw new Error("Unknown encoding: "+e)}(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=et;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=tt;break;default:return void(this.write=Je)}this.charBuffer=new be(6),this.charReceived=0,this.charLength=0}function Je(e){return e.toString(this.encoding)}function et(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function tt(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}qe.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived>5==6){this.charLength=2;break}if(t<=2&&r>>4==14){this.charLength=3;break}if(t<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=t},qe.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,n=this.charBuffer,a=this.encoding;t+=n.slice(0,r).toString(a)}return t},at.ReadableState=nt;var rt=function(e){Z(U)&&(U=N.env.NODE_DEBUG||""),e=e.toUpperCase(),W[e]||(new RegExp("\\b"+e+"\\b","i").test(U)?W[e]=function(){(function(e){if(!$(e)){for(var t=[],r=0;rt.highWaterMark&&(t.highWaterMark=(it<=(r=e)?r=it:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0));var r}function lt(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(rt("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?A(ct,e):ct(e))}function ct(e){rt("emit readable"),e.emit("readable"),dt(e)}function ft(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;es.length?s.length:e;if(i===s.length?a+=s:a+=s.slice(0,e),0===(e-=i)){i===s.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r).data=s.slice(i);break}++n}return t.length-=n,a}(e,t):function(e,t){var r=Buffer.allocUnsafe(e),n=t.head,a=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var s=n.data,i=e>s.length?s.length:e;if(s.copy(r,r.length-e,0,i),0===(e-=i)){i===s.length?(++a,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n).data=s.slice(i);break}++a}return t.length-=a,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function gt(e){var t=e._readableState;if(0=t.highWaterMark||t.ended))return rt("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?gt(this):lt(this),null;if(0===(e=ot(e,t))&&t.ended)return 0===t.length&>(this),null;var n,a=t.needReadable;return rt("need readable",a),(0===t.length||t.length-e>1;++r)t[r]=String.fromCharCode(e.charCodeAt(2*r)+(e.charCodeAt(2*r+1)<<8));return t.join("")}(e.substr(2)):254==t&&255==r?function(e){for(var t=[],r=0;r>1;++r)t[r]=String.fromCharCode(e.charCodeAt(2*r+1)+(e.charCodeAt(2*r)<<8));return t.join("")}(e.substr(2)):65279==t?e.substr(1):e},f=function(e){return String.fromCharCode(e)};"undefined"!=typeof cptable&&(le=function(e){h=e},ne=function(e){return 255===e.charCodeAt(0)&&254===e.charCodeAt(1)?cptable.utils.decode(1200,re(e.substr(2))):e},f=function(e){return 1200===h?String.fromCharCode(e):cptable.utils.decode(h,[255&e,e>>8])[0]});var u,ce=null,S=(u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",{encode:function(e){for(var t,r,n,a,s,i,o,l="",c=0;c>2,s=(3&t)<<4|(r=e.charCodeAt(c++))>>4,i=(15&r)<<2|(n=e.charCodeAt(c++))>>6,o=63&n,isNaN(r)?i=o=64:isNaN(n)&&(o=64),l+=u.charAt(a)+u.charAt(s)+u.charAt(i)+u.charAt(o);return l},decode:function(e){var t,r,n,a,s,i,o="";e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var l=0;l>4,r=(15&a)<<4|(s=u.indexOf(e.charAt(l++)))>>2,n=(3&s)<<6|(i=u.indexOf(e.charAt(l++))),o+=String.fromCharCode(t),64!=s&&(o+=String.fromCharCode(r)),64!=i&&(o+=String.fromCharCode(n));return o}}),d="undefined"!=typeof Buffer&&"undefined"!=typeof process&&void 0!==process.versions&&process.versions.node;function w(e){return new(d?Buffer:Array)(e)}function y(e){return d?new Buffer(e,"binary"):e.split("").map(function(e){return 255&e.charCodeAt(0)})}var p=function(e){return[].concat.apply([],e)},x=/\u0000/g,R=/[\u0001-\u0006]/,fe={},ae=function(e){function U(e){for(var t="",r=e.length-1;0<=r;)t+=e.charAt(r--);return t}function W(e,t){for(var r="";r.length=7+t&&103==(32|e.charCodeAt(t))&&101==(32|e.charCodeAt(t+1))&&110==(32|e.charCodeAt(t+2))&&101==(32|e.charCodeAt(t+3))&&114==(32|e.charCodeAt(t+4))&&97==(32|e.charCodeAt(t+5))&&108==(32|e.charCodeAt(t+6))}var f=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],h=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function t(e){e[0]="General",e[1]="0",e[2]="0.00",e[3]="#,##0",e[4]="#,##0.00",e[9]="0%",e[10]="0.00%",e[11]="0.00E+00",e[12]="# ?/?",e[13]="# ??/??",e[14]="m/d/yy",e[15]="d-mmm-yy",e[16]="d-mmm",e[17]="mmm-yy",e[18]="h:mm AM/PM",e[19]="h:mm:ss AM/PM",e[20]="h:mm",e[21]="h:mm:ss",e[22]="m/d/yy h:mm",e[37]="#,##0 ;(#,##0)",e[38]="#,##0 ;[Red](#,##0)",e[39]="#,##0.00;(#,##0.00)",e[40]="#,##0.00;[Red](#,##0.00)",e[45]="mm:ss",e[46]="[h]:mm:ss",e[47]="mmss.0",e[48]="##0.0E+0",e[49]="@",e[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',e[65535]="General"}var s={};function G(e,t,r){for(var n=e<0?-1:1,a=e*n,s=0,i=1,o=0,l=1,c=0,f=0,h=Math.floor(a);c(r<0?12:11)&&(n=r.toPrecision(6)),t=n),u(function(e){for(var t=0;t!=e.length;++t)if(101==(32|e.charCodeAt(t)))return e.replace(c,".$1").replace(f,"E").replace("e","E").replace(h,"$10$2");return e}(t))}}();function x(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(0|e)===e?r(e):c(e);case"undefined":return"";case"object":if(null==e)return"";if(e instanceof Date)return b(14,o(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function R(e,t,r,n){var a,s="",i=0,o=0,l=r.y,c=0;switch(e){case 98:l=r.y+543;case 121:switch(t.length){case 1:case 2:a=l%100,c=2;break;default:a=l%1e4,c=4}break;case 109:switch(t.length){case 1:case 2:a=r.m,c=t.length;break;case 3:return h[r.m-1][1];case 5:return h[r.m-1][0];default:return h[r.m-1][2]}break;case 100:switch(t.length){case 1:case 2:a=r.d,c=t.length;break;case 3:return f[r.q][0];default:return f[r.q][1]}break;case 104:switch(t.length){case 1:case 2:a=1+(r.H+11)%12,c=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:a=r.H,c=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:a=r.M,c=t.length;break;default:throw"bad minute format: "+t}break;case 115:if("s"!=t&&"ss"!=t&&".0"!=t&&".00"!=t&&".000"!=t)throw"bad second format: "+t;return 0!==r.u||"s"!=t&&"ss"!=t?(60*(o=2<=n?3===n?1e3:100:1===n?10:1)<=(i=Math.round(o*(r.S+r.u)))&&(i=0),"s"===t?0===i?"0":""+i/o:(s=z(i,2+n),"ss"===t?s.substr(0,2):"."+s.substr(2,t.length-1))):z(r.S,t.length);case 90:switch(t){case"[h]":case"[hh]":a=24*r.D+r.H;break;case"[m]":case"[mm]":a=60*(24*r.D+r.H)+r.M;break;case"[s]":case"[ss]":a=60*(60*(24*r.D+r.H)+r.M)+Math.round(r.S+r.u);break;default:throw"bad abstime format: "+t}c=3===t.length?1:2;break;case 101:a=l,c=1}return 0t.length?c:F(t.substr(0,t.length-c.length))+c;if(f=t.match(I))return d=f,p=A,g=B,m=parseInt(d[4],10),b=Math.round(p*m),v=Math.floor(b/m),g+(0===v?"":""+v)+" "+(0===(E=b-v*(C=m))?W(" ",d[1].length+1+d[4].length):H(E,d[1].length)+d[2]+"/"+d[3]+z(C,d[4].length));if(t.match(/^#+0+$/))return B+X(A,t.length-t.indexOf("0"));if(f=t.match(O))return c=N(r,f[1].length).replace(/^([^\.]+)$/,"$1."+F(f[1])).replace(/\.$/,"."+F(f[1])).replace(/\.(\d*)$/,function(e,t){return"."+t+W("0",F(f[1]).length-t.length)}),-1!==t.indexOf("0.")?c:c.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),f=t.match(/^(0*)\.(#*)$/))return B+N(A,f[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,f[1].length?"0.":".");if(f=t.match(/^#{1,3},##0(\.?)$/))return B+j(X(A,0));if(f=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+M(e,t,-r):j(""+(Math.floor(r)+(S=r,(w=f[1].length)<(""+Math.round((S-Math.floor(S))*Math.pow(10,w))).length?1:0)))+"."+z(L(r,f[1].length),f[1].length);if(f=t.match(/^#,#*,#0/))return M(e,t.replace(/^#,#*,/,""),r);if(f=t.match(/^([0#]+)(\\?-([0#]+))+$/))return c=U(M(e,t.replace(/[\\-]/g,""),r)),h=0,U(U(t.replace(/\\/g,"")).replace(/[0#]/g,function(e){return ht.length?c:F(t.substr(0,t.length-c.length))+c;if(f=t.match(I))return m+(0===(p=g)?"":""+p)+W(" ",(d=f)[1].length+2+d[4].length);if(t.match(/^#+0+$/))return m+z(g,t.length-t.indexOf("0"));if(f=t.match(O))return c=(c=(""+r).replace(/^([^\.]+)$/,"$1."+F(f[1])).replace(/\.$/,"."+F(f[1]))).replace(/\.(\d*)$/,function(e,t){return"."+t+W("0",F(f[1]).length-t.length)}),-1!==t.indexOf("0.")?c:c.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),f=t.match(/^(0*)\.(#*)$/))return m+(""+g).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,f[1].length?"0.":".");if(f=t.match(/^#{1,3},##0(\.?)$/))return m+j(""+g);if(f=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+S(e,t,-r):j(""+r)+"."+W("0",f[1].length);if(f=t.match(/^#,#*,#0/))return S(e,t.replace(/^#,#*,/,""),r);if(f=t.match(/^([0#]+)(\\?-([0#]+))+$/))return c=U(S(e,t.replace(/[\\-]/g,""),r)),h=0,U(U(t.replace(/\\/g,"")).replace(/[0#]/g,function(e){return h=€acfijklopqrtuvwxzP".indexOf(f))throw new Error("unrecognized character "+f+" in "+e);o[o.length]={t:"t",v:f},++c}var m,b=0,v=0;for(c=o.length-1,h="t";0<=c;--c)switch(o[c].t){case"h":case"H":o[c].t=u,h="h",b<1&&(b=1);break;case"s":(m=o[c].v.match(/\.0+$/))&&(v=Math.max(v,m[0].length-1)),b<3&&(b=3);case"d":case"y":case"M":case"e":h=o[c].t;break;case"m":"s"===h&&(o[c].t="M",b<2&&(b=2));break;case"X":break;case"Z":b<1&&o[c].v.match(/[Hh]/)&&(b=1),b<2&&o[c].v.match(/[Mm]/)&&(b=2),b<3&&o[c].v.match(/[Ss]/)&&(b=3)}switch(b){case 0:break;case 1:.5<=a.u&&(a.u=0,++a.S),60<=a.S&&(a.S=0,++a.M),60<=a.M&&(a.M=0,++a.H);break;case 2:.5<=a.u&&(a.u=0,++a.S),60<=a.S&&(a.S=0,++a.M)}var E,C="";for(c=0;c=o[c].v.length-1?(E-=o[c].v.length,o[c].v=w.substr(E+1,o[c].v.length)):E<0?o[c].v="":(o[c].v=w.substr(0,E+1),E=-1),o[c].t="t",_=c);0<=E&&_]/,g=/\[([=<>]*)(-?\d+\.?\d*)\]/;function m(e,t){if(null==t)return!1;var r=parseFloat(t[2]);switch(t[1]){case"=":if(e==r)return!0;break;case">":if(r":if(e!=r)return!0;break;case">=":if(r<=e)return!0;break;case"<=":if(e<=r)return!0}return!1}function b(e,t,r){null==r&&(r={});var n="";switch(typeof e){case"string":n="m/d/yy"==e&&r.dateNF?r.dateNF:e;break;case"number":n=14==e&&r.dateNF?r.dateNF:(null!=r.table?r.table:s)[e]}if(k(n,0))return x(t,r);t instanceof Date&&(t=o(t,r.date1904));var a=function(e,t){var r=u(e),n=r.length,a=r[n-1].indexOf("@");if(n<4&&-1>>2)-1;if(!o)return;for(var c=0;c\/]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g,L=/<[^>]*>/g,M=/<\w*:/,H=/<(\/?)\w+:/;function oe(e,t){for(var r={},n=0,a=0;n!==e.length&&(32!==(a=e.charCodeAt(n))&&10!==a&&13!==a);++n);if(t||(r[0]=e.substr(0,n)),n===e.length)return r;var s=e.match(F),i=0,o="",l=0,c="",f="",h=1;if(s)for(l=0;l!=s.length;++l){for(f=s[l],a=0;a!=f.length&&61!==f.charCodeAt(a);++a);for(c=f.substr(0,a),h=34==(n=f.charCodeAt(a+1))||39==n?1:0,o=f.substring(a+1+h,f.length-h),i=0;i!=c.length&&58!==c.charCodeAt(i);++i);if(i===c.length)0","<":"<","&":"&"},G=e(X),he=(r=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/g,V=/_x([\da-fA-F]{4})_/g,function(e){return(e+"").replace(r,function(e,t){return X[e]||String.fromCharCode(parseInt(t,-1'"]/g,Y=/[\u0000-\u0008\u000b-\u001f]/g;function K(e,t){return(e+"").replace(j,function(e){return G[e]}).replace(Y,function(e){return"_x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+"_"})}function $(e){return K(e).replace(/ /g,"_x0020_")}var Z=/[\u0000-\u001f]/g;function Q(e){return(e+"").replace(j,function(e){return G[e]}).replace(Z,function(e){return"&#x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+";"})}var q=function(){var t=/&#(\d+);/g;function r(e,t){return String.fromCharCode(parseInt(t,10))}return function(e){return e.replace(t,r)}}(),J=function(e){return e.replace(/(\r\n|[\r\n])/g," ")};function ee(e,t){switch(e){case 1:case!0:case"1":case"true":case"TRUE":return!0;default:return!1}}var te=function(e){for(var t="",r=0,n=0,a=0,s=0,i=0,o=0;r>>10&1023)),t+=String.fromCharCode(56320+(1023&o)))));return t};if(d){var ue=function(e){var t,r,n,a=new Buffer(2*e.length),s=1,i=0,o=0;for(r=0;r>>10&1023),t=56320+(1023&t)),0!==o&&(a[i++]=255&o,a[i++]=o>>>8,o=0),a[i++]=t%256,a[i++]=t>>>8;return a.slice(0,i).toString("ucs2")},de="foo bar baz☃🍣";te(de)==ue(de)&&(te=ue);var pe=function(e){return Buffer(e,"binary").toString("utf8")};te(de)==pe(de)&&(te=pe)}var ge,me,be=(ge={},function(e,t){var r=e+"|"+(t||"");return ge[r]?ge[r]:ge[r]=new RegExp("<(?:\\w+:)?"+e+'(?: xml:space="preserve")?(?:[^>]*)>([\\s\\S]*?)",t||"")}),ve=(me={},function(e){return void 0!==me[e]?me[e]:me[e]=new RegExp("<(?:vt:)?"+e+">([\\s\\S]*?)","g")}),Ee=/<\/?(?:vt:)?variant>/g,Ce=/<(?:vt:)([^>]*)>([\s\S]*)"+t+""}function Be(t){return k(t).map(function(e){return" "+e+'="'+t[e]+'"'}).join("")}function _e(e,t,r){return"<"+e+(o(r)?Be(r):"")+(o(t)?(t.match(we)?' xml:space="preserve"':"")+">"+t+""}function Te(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}var ke,ye,xe,Re,Ie,Oe,De,Pe,Fe,Ne,Le,Me,Ue,We,ze,He,Ve,Xe='\r\n',Ge={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema",main:["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"]},je={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};ke=ye=function(e){for(var t=[],r=0;r>>7),n=((127&e[t+7])<<4)+(e[t+6]>>>4&15),a=15&e[t+6],s=5;0<=s;--s)a=256*a+e[t+s];return 2047==n?0==a?r*(1/0):NaN:(0==n?n=-1022:(n-=1023,a+=Math.pow(2,52)),r*Math.pow(2,n-52)*a)}(e,t)};var Ye=function(e){return Array.isArray(e)};d&&(xe=function(e,t,r){return Buffer.isBuffer(e)?e.toString("utf16le",t,r):Re(e,t,r)},Ie=function(e,t,r){return Buffer.isBuffer(e)?e.toString("hex",t,t+r):Oe(e,t,r)},Pe=function(e,t){if(!Buffer.isBuffer(e))return Fe(e,t);var r=e.readUInt32LE(t);return 0>>8&255},rt=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255,e[r+2]=t>>>16&255,e[r+3]=t>>>24&255},nt=function(e,t,r){e[r]=255&t,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255};function at(e,t,r){var n=0,a=0;if("dbcs"===r){for(a=0;a!=t.length;++a)tt(this,t.charCodeAt(a),this.l+2*a);n=2*t.length}else if("sbcs"===r){for(a=0;a!=t.length;++a)this[this.l+a]=255&t.charCodeAt(a);n=t.length}else switch(e){case 1:n=1,this[this.l]=255&t;break;case 2:n=2,this[this.l]=255&t,t>>>=8,this[this.l+1]=255&t;break;case 3:n=3,this[this.l]=255&t,t>>>=8,this[this.l+1]=255&t,t>>>=8,this[this.l+2]=255&t;break;case 4:n=4,rt(this,t,this.l);break;case 8:if(n=8,"f"===r){!function(e,t,r){var n=(t<0||1/t==-1/0?1:0)<<7,a=0,s=0,i=n?-t:t;isFinite(i)?(a=Math.floor(Math.log(i)*Math.LOG2E),s=t*Math.pow(2,52-a),a<=-1023&&(!isFinite(s)||s>4|n}(this,t,this.l);break}case 16:break;case-4:n=4,nt(this,t,this.l)}return this.l+=n,this}function st(e,t){var r=Ie(this,this.l,e.length>>1);if(r!==e)throw t+"Expected "+e+" saw "+r;this.l+=e.length>>1}function it(e,t){e.l=t,e.read_shift=et,e.chk=st,e.write_shift=at}function ot(e,t){e.l+=t}function lt(e){var t=w(e);return it(t,0),t}function ct(e,t,r){if(e){var n,a,s;it(e,e.l||0);for(var i=e.length,o=0,l=0;e.lr.l&&(r=r.slice(0,r.l)),0>7));for(var o=0;4!=o;++o){if(!(128<=n)){i.write_shift(1,n);break}i.write_shift(1,128+(127&n)),n>>=7}0s&&(a.s.r=s),a.s.c>i&&(a.s.c=i),a.e.r>2;return r?a/100:a}function jt(e){var t={s:{},e:{}};return t.s.r=e.read_shift(4),t.e.r=e.read_shift(4),t.s.c=e.read_shift(4),t.e.c=e.read_shift(4),t}var Yt=jt,Kt=function(e,t){return t||(t=lt(16)),t.write_shift(4,e.s.r),t.write_shift(4,e.e.r),t.write_shift(4,e.s.c),t.write_shift(4,e.e.c),t};function $t(e,t){return e.read_shift(8,"f")}function Zt(e,t){return(t||lt(8)).write_shift(8,e,"f")}var Qt={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},qt=A(Qt);function Jt(e,t){if(t||(t=lt(8)),!e||e.auto)return t.write_shift(4,0),t.write_shift(4,0),t;e.index?(t.write_shift(1,2),t.write_shift(1,e.index)):e.theme?(t.write_shift(1,6),t.write_shift(1,e.theme)):(t.write_shift(1,5),t.write_shift(1,0));var r=e.tint||0;if(0>16&255,e>>8&255,255&e]}),ur={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"},dr=(k(fr={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}}).forEach(function(e){fr[e].xlsm||(fr[e].xlsm=fr[e].xlsx)}),k(fr).forEach(function(t){k(fr[t]).forEach(function(e){ur[fr[t][e]]=t})}),fr),pr=function(e){for(var t=[],r=k(e),n=0;n!==r.length;++n)null==t[e[r[n]]]&&(t[e[r[n]]]=[]),t[e[r[n]]].push(r[n]);return t}(ur);Ge.CT="http://schemas.openxmlformats.org/package/2006/content-types";var gr=_e("Types",null,{xmlns:Ge.CT,"xmlns:xsd":Ge.xsd,"xmlns:xsi":Ge.xsi}),mr=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels",pr.rels[0]]].map(function(e){return _e("Default",null,{Extension:e[0],ContentType:e[1]})});var br={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function vr(e){var t=e.lastIndexOf("/");return e.substr(0,t+1)+"_rels/"+e.substr(t+1)+".rels"}function Er(e,a){if(!e)return e;"/"!==a.charAt(0)&&(a="/"+a);var s={},i={};return(e.match(L)||[]).forEach(function(e){var t=oe(e);if("",r[1]=r[1].replace("/>",">")),r.join("")}function wr(e,t,r,n,a){if(a||(a={}),e["!id"]||(e["!id"]={}),t<0)for(t=1;e["!id"]["rId"+t];++t);if(a.Id="rId"+t,a.Type=n,a.Target=r,a.Type==br.HLINK&&(a.TargetMode="External"),e["!id"][a.Id])throw new Error("Cannot rewrite rId "+t);return e["!id"][a.Id]=a,e[("/"+a.Target).replace("//","/")]=a,t}var Ar="application/vnd.oasis.opendocument.spreadsheet";function Br(e,t,r){return[' \n',' \n'," \n"].join("")}var _r,Tr=(_r='SheetJS '+n.version+"",function(e,t){return _r}),kr=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];Ge.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties",br.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var yr=function(){for(var e=new Array(kr.length),t=0;t]*>([\\s\\S]*?)")}return e}();var xr=_e("cp:coreProperties",null,{"xmlns:cp":Ge.CORE_PROPS,"xmlns:dc":Ge.dc,"xmlns:dcterms":Ge.dcterms,"xmlns:dcmitype":Ge.dcmitype,"xmlns:xsi":Ge.xsi});function Rr(e,t,r,n,a){null==a[e]&&null!=t&&""!==t&&(a[e]=t,n[n.length]=r?_e(e,t,r):Ae(e,t))}var Ir=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];Ge.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",br.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";var Or=_e("Properties",null,{xmlns:Ge.EXT_PROPS,"xmlns:vt":Ge.vt});Ge.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",br.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var Dr=/<[^>]+>[^<]*/g;var Pr=_e("Properties",null,{xmlns:Ge.CUST_PROPS,"xmlns:vt":Ge.vt});function Fr(t,e){var r=[Xe,Pr];if(!t)return r.join("");var n=1;return k(t).forEach(function(e){++n,r[r.length]=_e("property",function(e){switch(typeof e){case"string":return _e("vt:lpwstr",e);case"number":return _e((0|e)==e?"vt:i4":"vt:r8",String(e));case"boolean":return _e("vt:bool",e?"true":"false")}if(e instanceof Date)return _e("vt:filetime",Te(e));throw new Error("Unable to serialize "+e)}(t[e]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:n,name:e})}),2",r[1]=r[1].replace("/>",">")),r.join("")}var Nr={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"},Lr=e(Nr);function Mr(e){var t=e.read_shift(4),r=e.read_shift(4);return new Date(1e3*(r/1e7*Math.pow(2,32)+t/1e7-11644473600)).toISOString().replace(/\.000/,"")}function Ur(e,t,r){var n=e.read_shift(0,"lpstr");return r&&(e.l+=4-(n.length+1&3)&3),n}function Wr(e,t,r){var n=e.read_shift(0,"lpwstr");return r&&(e.l+=4-(n.length+1&3)&3),n}function zr(e,t,r){return 31===t?Wr(e):Ur(e,0,r)}function Hr(e,t,r){return zr(e,t,!1===r?0:4)}function Vr(e,t){for(var r=e.read_shift(4),n={},a=0;a!=r;++a){var s=e.read_shift(4),i=e.read_shift(4);n[s]=e.read_shift(i,1200===t?"utf16le":"utf8").replace(x,"").replace(R,"!")}return 3&e.l&&(e.l=e.l>>3<<2),n}function Xr(e){var t=e.read_shift(4),r=e.slice(e.l,e.l+t);return 0<(3&t)&&(e.l+=4-(3&t)&3),r}function Gr(e,t,r){var n,a,s,i=e.read_shift(2),o=r||{};if(e.l+=2,t!==rr&&i!==t&&-1===ar.indexOf(t))throw new Error("Expected type "+t+" saw "+i);switch(t===rr?i:t){case 2:return n=e.read_shift(2,"i"),o.raw||(e.l+=2),n;case 3:return n=e.read_shift(4,"i");case 11:return 0!==e.read_shift(4);case 19:return n=e.read_shift(4);case 30:return Ur(e,0,4).replace(x,"");case 31:return Wr(e);case 64:return Mr(e);case 65:return Xr(e);case 71:return(s={}).Size=(a=e).read_shift(4),a.l+=s.Size,s;case 80:return Hr(e,i,!o.raw&&4).replace(x,"");case 81:return function(e,t){if(!t)throw new Error("dafuq?");return zr(e,t,0)}(e,i).replace(x,"");case 4108:return function(e){for(var t,r=e.read_shift(4),n=[],a=0;a!=r/2;++a)n.push([Gr(t=e,nr),Gr(t,tr)]);return n}(e);case 4126:return function(e){for(var t=e.read_shift(4),r=[],n=0;n!=t;++n)r[n]=e.read_shift(0,"lpstr");return r}(e);default:throw new Error("TypedPropertyValue unrecognized type "+t+" "+i)}}function jr(e,t){var r=e.l,n=e.read_shift(4),a=e.read_shift(4),s=[],i=0,o=0,l=-1,c={};for(i=0;i!=a;++i){var f=e.read_shift(4),h=e.read_shift(4);s[i]=[f,h+r]}var u={};for(i=0;i!=a;++i){if(e.l!==s[i][1]){var d=!0;if(0>16)+"."+String(65535&u[p.n])),"CodePage"==p.n)switch(u[p.n]){case 0:u[p.n]=1252;case 874:case 932:case 936:case 949:case 950:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 1e4:case 1200:case 1201:case 1252:case 65e3:case-536:case 65001:case-535:le(o=u[p.n]);break;default:throw new Error("Unsupported CodePage: "+u[p.n])}}else if(1===s[i][0]){if(o=u.CodePage=Gr(e,er),le(o),-1!==l){var g=e.l;e.l=s[l][1],c=Vr(e,o),e.l=g}}else if(0===s[i][0]){if(0===o){l=i,e.l=s[i+1][1];continue}c=Vr(e,o)}else{var m,b=c[s[i][0]];switch(e[e.l]){case 65:e.l+=4,m=Xr(e);break;case 30:case 31:e.l+=4,m=Hr(e,e[e.l-4]);break;case 3:e.l+=4,m=e.read_shift(4,"i");break;case 19:e.l+=4,m=e.read_shift(4);break;case 5:e.l+=4,m=e.read_shift(8,"f");break;case 11:e.l+=4,m=$r(e,4);break;case 64:e.l+=4,m=z(Mr(e));break;default:throw new Error("unparsed value: "+e[e.l])}u[b]=m}}return e.l=r+n,u}function Yr(e,t){var r=e.content;it(r,0);var n,a,s,i,o=0;r.chk("feff","Byte Order: ");r.read_shift(2);var l=r.read_shift(4);if(r.chk(g.utils.consts.HEADER_CLSID,"CLSID: "),1!==(n=r.read_shift(4))&&2!==n)throw new Error("Unrecognized #Sets: "+n);if(a=r.read_shift(16),i=r.read_shift(4),1===n&&i!==r.l)throw new Error("Length mismatch: "+i+" !== "+r.l);2===n&&(s=r.read_shift(16),o=r.read_shift(4));var c,f=jr(r,t),h={SystemIdentifier:l};for(var u in f)h[u]=f[u];if(h.FMTID=a,1===n)return h;if(r.l!==o)throw new Error("Length mismatch 2: "+r.l+" !== "+o);try{c=jr(r,null)}catch(e){}for(u in c)h[u]=c[u];return h.FMTID=[a,s],h}function Kr(e,t){return e.read_shift(t),null}function $r(e,t){return 1===e.read_shift(t)}function Zr(e){return e.read_shift(2,"u")}function Qr(e,t){return function(e,t,r){for(var n=[],a=e.l+t;e.l"+l.t+"",l.r=l.t),h=t,l}function en(e,t,r){if(r){if(2<=r.biff&&r.biff<=5)return e.read_shift(t,"sbcs-cont");if(12<=r.biff)return e.read_shift(t,"dbcs-cont")}return 0===e.read_shift(1)?e.read_shift(t,"sbcs-cont"):e.read_shift(t,"dbcs-cont")}function tn(e,t,r){var n=e.read_shift(r&&2==r.biff?1:2);return 0===n?(e.l++,""):en(e,n,r)}function rn(e,t,r){if(5>1,"utf16le").replace(x,"");return n&&(e.l+=24),a}(e);case"0303000000000000c000000000000046":return function(e,t){e.read_shift(2);var r=e.read_shift(4),n=e.read_shift(r,"cstr");e.read_shift(2),e.read_shift(2);if(0===e.read_shift(4))return n.replace(/\\/g,"/");var a=e.read_shift(4);e.read_shift(2);return e.read_shift(a>>1,"utf16le").replace(x,"")}(e);default:throw new Error("Unsupported Moniker "+r)}},an=function(e,t){var r=e.read_shift(4);return e.read_shift(r,"utf16le").replace(x,"")};function sn(e,t){return[e.read_shift(1),e.read_shift(1),e.read_shift(1),e.read_shift(1)]}function on(e,t){var r=sn(e);return r[3]=0,r}function ln(e,t){return{r:e.read_shift(2),c:e.read_shift(2),ixfe:e.read_shift(2)}}var cn=Zr;function fn(e,t){return[e.read_shift(2),Gt(e)]}function hn(e,t){var r=e.read_shift(2),n=e.read_shift(2);return{s:{c:e.read_shift(2),r:r},e:{c:e.read_shift(2),r:n}}}function un(e,t){var r=e.read_shift(2),n=e.read_shift(2);return{s:{c:e.read_shift(1),r:r},e:{c:e.read_shift(1),r:n}}}var dn=un;function pn(e,t){e.l+=4;var r=e.read_shift(2),n=e.read_shift(2),a=e.read_shift(2);return e.l+=12,[n,r,a]}function gn(e,t){e.l+=2,e.l+=e.read_shift(2)}var mn={0:gn,4:gn,5:gn,6:gn,7:function(e,t){return e.l+=4,e.cf=e.read_shift(2),{}},8:gn,9:gn,10:gn,11:gn,12:gn,13:function(e,t){var r={};return e.l+=4,e.l+=16,r.fSharedNote=e.read_shift(2),e.l+=4,r},14:gn,15:gn,16:gn,17:gn,18:gn,19:gn,20:gn,21:pn};var bn=Zr;function vn(e,t){var r={BIFFVer:0,dt:0};switch(r.BIFFVer=e.read_shift(2),2<=(t-=2)&&(r.dt=e.read_shift(2),e.l-=2),r.BIFFVer){case 1536:case 1280:case 2:case 7:break;default:if(6>15),a&=32767),[{Unsynced:1&n,DyZero:(2&n)>>1,ExAsc:(4&n)>>2,ExDsc:(8&n)>>3},a]}var Sn=rn;function wn(e,t,r){var n=e.l+t,a=8!=r.biff&&r.biff?2:4,s=e.read_shift(a),i=e.read_shift(a),o=e.read_shift(2),l=e.read_shift(2);return e.l=n,{s:{r:s,c:o},e:{r:i,c:l}}}function An(e,t,r){var n=ln(e);2==r.biff&&++e.l;var a,s,i=(s=(a=e).read_shift(1),1===a.read_shift(1)?s:1===s);return n.val=i,n.t=!0===i||!1===i?"b":"e",n}var Bn=function(e,t,r){return 0===t?"":rn(e,0,r)};function _n(e,t,r){var n,a=e.read_shift(2),s={fBuiltIn:1&a,fWantAdvise:a>>>1&1,fWantPict:a>>>2&1,fOle:a>>>3&1,fOleLink:a>>>4&1,cf:a>>>5&1023,fIcon:a>>>15&1};return 14849===r.sbcch&&(n=function(e,t,r){e.l+=4,t-=4;var n=e.l+t,a=qr(e,0,r),s=e.read_shift(2);if(s!==(n-=e.l))throw new Error("Malformed AddinUdf: padding = "+n+" != "+s);return e.l+=s,a}(e,t-2,r)),s.body=n||e.read_shift(t-2),"string"==typeof n&&(s.Name=n),s}var Tn=["_xlnm.Consolidate_Area","_xlnm.Auto_Open","_xlnm.Auto_Close","_xlnm.Extract","_xlnm.Database","_xlnm.Criteria","_xlnm.Print_Area","_xlnm.Print_Titles","_xlnm.Recorder","_xlnm.Data_Form","_xlnm.Auto_Activate","_xlnm.Auto_Deactivate","_xlnm.Sheet_Title","_xlnm._FilterDatabase"];function kn(e,t,r){var n=e.l+t,a=e.read_shift(2),s=e.read_shift(1),i=e.read_shift(1),o=e.read_shift(r&&2==r.biff?1:2),l=0;(!r||5<=r.biff)&&(e.l+=2,l=e.read_shift(2),e.l+=4);var c=en(e,i,r);32&a&&(c=Tn[c.charCodeAt(0)]);var f=n-e.l;return r&&2==r.biff&&--f,{chKey:s,Name:c,itab:l,rgce:n==e.l||0==o?[]:function(e,t,r,n){var a,s=e.l+t,i=ch(e,n,r);s!==e.l&&(a=lh(e,s-e.l,i,r));return[i,a]}(e,f,r,o)}}function yn(e,t,r){if(r.biff<8)return function(e,t,r){3==e[e.l+1]&&e[e.l]++;var n=qr(e,0,r);return 3==n.charCodeAt(0)?n.slice(1):n}(e,0,r);for(var n,a,s=[],i=(e.l,e.read_shift(8o&&(s["!ref"]=Bt(f),l[i]=s,s=a.dense?[]:{},f={s:{r:0,c:0},e:{r:0,c:0}},o=e[3],i="Sheet"+(o+1),c.push(i)),s[wt(e[0])]=e[1],f.e.c>>-s)+(-32>>-(s+32)),r}function a(e,t){var r=o(e),n=e.read_shift(8,"f");return r[1].v=n,r}var h={0:{n:"BOF",f:Zr},1:{n:"EOF",f:ot},2:{n:"CALCMODE",f:ot},3:{n:"CALCORDER",f:ot},4:{n:"SPLIT",f:ot},5:{n:"SYNC",f:ot},6:{n:"RANGE",f:function(e,t){var r={s:{c:0,r:0},e:{c:0,r:0}};return r.s.c=e.read_shift(2),r.s.r=e.read_shift(2),r.e.c=e.read_shift(2),r.e.r=e.read_shift(2),65535==r.s.c&&(r.s.c=r.e.c=r.s.r=r.e.r=0),r}},7:{n:"WINDOW1",f:ot},8:{n:"COLW1",f:ot},9:{n:"WINTWO",f:ot},10:{n:"COLW2",f:ot},11:{n:"NAME",f:ot},12:{n:"BLANK",f:ot},13:{n:"INTEGER",f:function(e,t,r){var n=i(e,0,r);return n[1].v=e.read_shift(2,"i"),n}},14:{n:"NUMBER",f:function(e,t,r){var n=i(e,0,r);return n[1].v=e.read_shift(8,"f"),n}},15:{n:"LABEL",f:e},16:{n:"FORMULA",f:function(e,t,r){var n=e.l+t,a=i(e,0,r);if(a[1].v=e.read_shift(8,"f"),r.qpro)e.l=n;else{var s=e.read_shift(2);e.l+=s}return a}},24:{n:"TABLE",f:ot},25:{n:"ORANGE",f:ot},26:{n:"PRANGE",f:ot},27:{n:"SRANGE",f:ot},28:{n:"FRANGE",f:ot},29:{n:"KRANGE1",f:ot},32:{n:"HRANGE",f:ot},35:{n:"KRANGE2",f:ot},36:{n:"PROTEC",f:ot},37:{n:"FOOTER",f:ot},38:{n:"HEADER",f:ot},39:{n:"SETUP",f:ot},40:{n:"MARGINS",f:ot},41:{n:"LABELFMT",f:ot},42:{n:"TITLES",f:ot},43:{n:"SHEETJS",f:ot},45:{n:"GRAPH",f:ot},46:{n:"NGRAPH",f:ot},47:{n:"CALCCOUNT",f:ot},48:{n:"UNFORMATTED",f:ot},49:{n:"CURSORW12",f:ot},50:{n:"WINDOW",f:ot},51:{n:"STRING",f:e},55:{n:"PASSWORD",f:ot},56:{n:"LOCKED",f:ot},60:{n:"QUERY",f:ot},61:{n:"QUERYNAME",f:ot},62:{n:"PRINT",f:ot},63:{n:"PRINTNAME",f:ot},64:{n:"GRAPH2",f:ot},65:{n:"GRAPHNAME",f:ot},66:{n:"ZOOM",f:ot},67:{n:"SYMSPLIT",f:ot},68:{n:"NSROWS",f:ot},69:{n:"NSCOLS",f:ot},70:{n:"RULER",f:ot},71:{n:"NNAME",f:ot},72:{n:"ACOMM",f:ot},73:{n:"AMACRO",f:ot},74:{n:"PARSE",f:ot},255:{n:"",f:ot}},t={0:{n:"BOF",f:ot},1:{n:"EOF",f:ot},3:{n:"??",f:ot},4:{n:"??",f:ot},5:{n:"??",f:ot},6:{n:"??",f:ot},7:{n:"??",f:ot},9:{n:"??",f:ot},10:{n:"??",f:ot},11:{n:"??",f:ot},12:{n:"??",f:ot},14:{n:"??",f:ot},15:{n:"??",f:ot},16:{n:"??",f:ot},17:{n:"??",f:ot},18:{n:"??",f:ot},19:{n:"??",f:ot},21:{n:"??",f:ot},22:{n:"LABEL16",f:function(e,t){var r=o(e);return r[1].t="s",r[1].v=e.read_shift(t-4,"cstr"),r}},23:{n:"NUMBER17",f:n},24:{n:"NUMBER18",f:function(e,t){var r=o(e);r[1].v=e.read_shift(2);var n=r[1].v>>1;if(1&r[1].v)switch(7&n){case 1:n=500*(n>>3);break;case 2:n=(n>>3)/20;break;case 4:n=(n>>3)/2e3;break;case 6:n=(n>>3)/16;break;case 7:n=(n>>3)/64;break;default:throw"unknown NUMBER_18 encoding "+(7&n)}return r[1].v=n,r}},25:{n:"FORMULA19",f:function(e,t){var r=n(e);return e.l+=t-14,r}},26:{n:"??",f:ot},27:{n:"??",f:ot},28:{n:"??",f:ot},29:{n:"??",f:ot},30:{n:"??",f:ot},31:{n:"??",f:ot},33:{n:"??",f:ot},37:{n:"NUMBER25",f:function(e,t){var r=o(e),n=e.read_shift(4);return r[1].v=n>>6,r}},39:{n:"NUMBER27",f:a},40:{n:"FORMULA28",f:function(e,t){var r=a(e);return e.l+=t-10,r}},255:{n:"",f:ot}};return{to_workbook:function(e,t){switch(t.type){case"base64":return r(y(S.decode(e)),t);case"binary":return r(y(e),t);case"buffer":case"array":return r(e,t)}throw"Unsupported type "+t.type}}}(),Ec={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969},Cc=function(){var a=be("t"),s=be("rPr"),t=/<(?:\w+:)?r>/g,r=/<\/(?:\w+:)?r>/,i=/\r\n/g;function n(e){var t=[[],"",[]],r=e.match(a);if(!o(r))return"";t[1]=r[1];var n=e.match(s);return o(n)&&function(e,t,r){var n={},a=65001,s="",i=e.match(L),o=0;if(i)for(;o!=i.length;++o){var l=oe(i[o]);switch(l[0].replace(/\w*:/g,"")){case"":case"":n.shadow=1;break;case"":break;case"":case"":n.outline=1;break;case"":break;case"":case"":n.strike=1;break;case"":break;case"":case"":n.u=1;break;case"":break;case"":case"":n.b=1;break;case"":break;case"":case"":n.i=1;break;case"":break;case"'),n.b&&(t.push(""),r.push("")),n.i&&(t.push(""),r.push("")),n.strike&&(t.push(""),r.push("")),"superscript"==s?s="sup":"subscript"==s&&(s="sub"),""!=s&&(t.push("<"+s+">"),r.push("")),r.push(""),a}(n[1],t[0],t[2]),t[0].join("")+t[1].replace(i,"
")+t[2].join("")}return function(e){return e.replace(t,"").split(r).map(n).join("")}}(),Sc=/<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g,wc=/<(?:\w+:)?r>/,Ac=/<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g;function Bc(e,t){var r=!t||t.cellHTML,n={};return e?(e.match(/^\s*<(?:\w+:)?t[^>]*>/)?(n.t=te(he(e.substr(e.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0])),n.r=te(e),r&&(n.h=Q(n.t))):e.match(wc)&&(n.r=te(e),n.t=te(he((e.replace(Ac,"").match(Sc)||[]).join("").replace(L,""))),r&&(n.h=Cc(n.r))),n):null}var _c=/<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/,Tc=/<(?:\w+:)?(?:si|sstItem)>/g,kc=/<\/(?:\w+:)?(?:si|sstItem)>/;br.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var yc=/^\s|\s$|[\t\n\r]/;var xc=function(e,t){var r=!1;return null==t&&(r=!0,t=lt(15+4*e.t.length)),t.write_shift(1,0),Ot(e.t,t),r?t.slice(0,t.l):t};function Rc(e,t){var r,n,a=ft();ht(a,"BrtBeginSst",(r=e,n||(n=lt(8)),n.write_shift(4,r.Count),n.write_shift(4,r.Unique),n));for(var s=0;s>1,"utf16le").slice(0,-1),e.l=r,n}function Nc(e,t){var r={};e.l+=4,r.Salt=e.slice(e.l,e.l+16),e.l+=16,r.Verifier=e.slice(e.l,e.l+16),e.l+=16;var n=e.read_shift(4);return r.VerifierHash=e.slice(e.l,e.l+n),e.l+=n,r}function Lc(e,t){var r=Oc(e);switch(r.Minor){case 2:return function(e,t){if(36!=(63&e.read_shift(4)))throw new Error("EncryptionInfo mismatch");var r=e.read_shift(4),n=(e.l,Fc(e,r)),a=Nc(e,(e.length,e.l));return{t:"Std",h:n,v:a}}(e);case 3:return function(e,t){throw new Error("File is password-protected: ECMA-376 Extensible")}();case 4:return function(e,t){throw new Error("File is password-protected: ECMA-376 Agile")}()}throw new Error("ECMA-376 Encryped file unrecognized Version: "+r.Minor)}function Mc(e){var t,r,n=0,a=Ic(e),s=a.length+1;for((t=w(s))[0]=a.length,r=1;r!=s;++r)t[r]=a[r-1];for(r=s-1;0<=r;--r)n=((0==(16384&n)?0:1)|n<<1&32767)^t[r];return 52811^n}var Uc,Wc,zc,Hc,Vc=(Uc=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0],Wc=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163],zc=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628],Hc=function(e,t){return 255&((r=e^t)/2|128*r);var r},function(e){for(var t,r,n,a=Ic(e),s=function(e){for(var t=Wc[e.length-1],r=104,n=e.length-1;0<=n;--n)for(var a=e[n],s=0;7!=s;++s)64&a&&(t^=zc[r]),a*=2,--r;return t}(a),i=a.length,o=w(16),l=0;16!=l;++l)o[l]=0;for(1==(1&i)&&(t=s>>8,o[i]=Hc(Uc[0],t),--i,t=255&s,r=a[a.length-1],o[i]=Hc(r,t));0>8,o[--i]=Hc(a[i],t),t=255&s,o[--i]=Hc(a[i],t);for(n=(i=15)-a.length;0>8,o[i]=Hc(Uc[n],t),--n,t=255&s,o[--i]=Hc(a[i],t),--i,--n;return o}),Xc=function(e){var r=0,n=Vc(e);return function(e){var t=function(e,t,r,n,a){var s,i;for(a||(a=t),n||(n=Vc(e)),s=0;s!=t.length;++s)i=t[s],i=255&((i^=n[r])>>5|i<<3),a[s]=i,++r;return[a,r,n]}("",e,r,n);return r=t[1],t[0]}};function Gc(e,t,r){var n=r||{};return n.Info=e.read_shift(2),e.l-=2,1===n.Info?n.Data=function(e,t){var r={},n=r.EncryptionVersionInfo=Oc(e,4);if(1!=n.Major||1!=n.Minor)throw"unrecognized version code "+n.Major+" : "+n.Minor;return r.Salt=e.read_shift(16),r.EncryptedVerifier=e.read_shift(16),r.EncryptedVerifierHash=e.read_shift(16),r}(e):n.Data=function(e,t){var r={},n=r.EncryptionVersionInfo=Oc(e,4);if(2!=n.Minor)throw new Error("unrecognized minor version code: "+n.Minor);if(4]*)>[\S\s]*?<\/numFmts>/,uf=/]*)>[\S\s]*?<\/cellXfs>/,df=/]*)>[\S\s]*?<\/fills>/,pf=/]*)>[\S\s]*?<\/fonts>/,gf=/]*)>[\S\s]*?<\/borders>/,function(e,t,r){var n,a,s,i,o,l={};return e&&((n=(e=e.replace(//gm,"").replace(//gm,"")).match(hf))&&function(e,t,r){t.NumberFmt=[];for(var n=k(fe._table),a=0;a":case"":case"":break;case"":break;default:if(r.WTF)throw new Error("unrecognized "+i[0]+" in numFmts")}}}(n,l,r),(n=e.match(pf))&&function(e,n,a,s){n.Fonts=[];var i={};e[0].match(L).forEach(function(e){var t=oe(e);switch(t[0]){case"":case"":break;case"":break;case"":case"":n.Fonts.push(i),i={};break;case"":case"":break;case"":i.bold=1;break;case"":i.italic=1;break;case"":i.underline=1;break;case"":i.strike=1;break;case"":i.outline=1;break;case"":i.shadow=1;break;case"":i.condense=1;break;case"":i.extend=1;break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;default:if(s&&s.WTF)throw new Error("unrecognized "+t[0]+" in fonts")}})}(n,l,t,r),(n=e.match(df))&&function(e,r,t,n){r.Fills=[];var a={};e[0].match(L).forEach(function(e){var t=oe(e);switch(t[0]){case"":case"":break;case"":case"":r.Fills.push(a),a={};break;case"":break;case"":r.Fills.push(a),a={};break;case"":t.patternType&&(a.patternType=t.patternType);break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;default:if(n&&n.WTF)throw new Error("unrecognized "+t[0]+" in fills")}})}(n,l,0,r),(n=e.match(gf))&&function(e,r,t,n){r.Borders=[];var a={};e[0].match(L).forEach(function(e){var t=oe(e);switch(t[0]){case"":case"":break;case"":case"":a={},t.diagonalUp&&(a.diagonalUp=t.diagonalUp),t.diagonalDown&&(a.diagonalDown=t.diagonalDown),r.Borders.push(a);break;case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":break;case"":case"":break;default:if(n&&n.WTF)throw new Error("unrecognized "+t[0]+" in borders")}})}(n,l,0,r),(n=e.match(uf))&&(a=n,i=r,(s=l).CellXf=[],a[0].match(L).forEach(function(e){var t=oe(e),r=0;switch(t[0]){case"":case"":case"":break;case"":for(delete(o=t)[0],r=0;r":break;case"":var n={};t.vertical&&(n.vertical=t.vertical),t.horizontal&&(n.horizontal=t.horizontal),null!=t.textRotation&&(n.textRotation=t.textRotation),t.indent&&(n.indent=t.indent),t.wrapText&&(n.wrapText=t.wrapText),o.alignment=n;break;case"":break;case"":case"":break;case"":case""],[[5,8],[23,26],[41,44],[50,392]].forEach(function(e){for(var t=e[0];t<=e[1];++t)null!=n[t]&&(a[a.length]=_e("numFmt",null,{numFmtId:t,formatCode:K(n[t])}))}),r=1===a.length?"":(a[a.length]="",a[0]=_e("numFmts",null,{count:a.length-2}).replace("/>",">"),a.join("")))&&(o[o.length]=r),o[o.length]='',o[o.length]='',o[o.length]='',o[o.length]='',s=t.cellXfs,(i=[])[i.length]=_e("cellXfs",null),s.forEach(function(e){i[i.length]=_e("xf",null,e)}),i[i.length]="",(r=2===i.length?"":(i[0]=_e("cellXfs",null,{count:i.length-2}).replace("/>",">"),i.join("")))&&(o[o.length]=r),o[o.length]='',o[o.length]='',o[o.length]='',2",o[1]=o[1].replace("/>",">")),o.join("")}function Ef(e,t){t||(t=lt(153)),t.write_shift(2,20*e.sz),function(e,t){t||(t=lt(2));var r=(e.italic?2:0)|(e.strike?8:0)|(e.outline?16:0)|(e.shadow?32:0)|(e.condense?64:0)|(e.extend?128:0);t.write_shift(1,r),t.write_shift(1,0)}(e,t),t.write_shift(2,e.bold?700:400);var r=0;"superscript"==e.vertAlign?r=1:"subscript"==e.vertAlign&&(r=2),t.write_shift(2,r),t.write_shift(1,e.underline||0),t.write_shift(1,e.family||0),t.write_shift(1,e.charset||0),t.write_shift(1,0),Jt(e.color,t);var n=0;return"major"==e.scheme&&(n=1),"minor"==e.scheme&&(n=2),t.write_shift(1,n),Ot(e.name,t),t.length>t.l?t.slice(0,t.l):t}br.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";var Cf=e(["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"]);function Sf(e,t){t||(t=lt(84));var r=Cf[e.patternType];null==r&&(r=40),t.write_shift(4,r);var n=0;if(40!=r)for(Jt({auto:1},t),Jt({auto:1},t);n<12;++n)t.write_shift(4,0);else{for(;n<4;++n)t.write_shift(4,0);for(;n<12;++n)t.write_shift(4,0)}return t.length>t.l?t.slice(0,t.l):t}function wf(e,t,r){return r||(r=lt(16)),r.write_shift(2,t||0),r.write_shift(2,e.numFmtId||0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r}function Af(e,t){return t||(t=lt(10)),t.write_shift(1,0),t.write_shift(1,0),t.write_shift(4,0),t.write_shift(4,0),t}function Bf(e,t){var r;ht(e,"BrtBeginBorders",Rt(1)),ht(e,"BrtBorder",(r||(r=lt(51)),r.write_shift(1,0),Af(0,r),Af(0,r),Af(0,r),Af(0,r),Af(0,r),r.length>r.l?r.slice(0,r.l):r)),ht(e,"BrtEndBorders")}function _f(e,t){var r,n;ht(e,"BrtBeginStyles",Rt(1)),ht(e,"BrtStyle",(r={xfId:0,builtinId:0,name:"Normal"},n||(n=lt(52)),n.write_shift(4,r.xfId),n.write_shift(2,1),n.write_shift(1,+r.builtinId),n.write_shift(1,0),zt(r.name||"",n),n.length>n.l?n.slice(0,n.l):n)),ht(e,"BrtEndStyles")}function Tf(e,t){var r,n,a,s;ht(e,"BrtBeginTableStyles",(r=0,n="TableStyleMedium9",a="PivotStyleMedium4",(s=lt(2052)).write_shift(4,r),zt(n,s),zt(a,s),s.length>s.l?s.slice(0,s.l):s)),ht(e,"BrtEndTableStyles")}function kf(e,t){var r,n,a,s,i,o,l=ft();return ht(l,"BrtBeginStyleSheet"),function(s,i){if(i){var r=0;[[5,8],[23,26],[41,44],[50,392]].forEach(function(e){for(var t=e[0];t<=e[1];++t)null!=i[t]&&++r}),0!=r&&(ht(s,"BrtBeginFmts",Rt(r)),[[5,8],[23,26],[41,44],[50,392]].forEach(function(e){for(var t=e[0];t<=e[1];++t)null!=i[t]&&ht(s,"BrtFmt",(n=i[r=t],(a=void 0)||(a=lt(6+4*n.length)),a.write_shift(2,r),Ot(n,a),a.length>a.l?a.slice(0,a.l):a));var r,n,a}),ht(s,"BrtEndFmts"))}}(l,e.SSF),ht(r=l,"BrtBeginFonts",Rt(1)),ht(r,"BrtFont",Ef({sz:12,color:{theme:1},name:"Calibri",family:2,scheme:"minor"})),ht(r,"BrtEndFonts"),ht(n=l,"BrtBeginFills",Rt(2)),ht(n,"BrtFill",Sf({patternType:"none"})),ht(n,"BrtFill",Sf({patternType:"gray125"})),ht(n,"BrtEndFills"),Bf(l),ht(a=l,"BrtBeginCellStyleXFs",Rt(1)),ht(a,"BrtXF",wf({numFmtId:0,fontId:0,fillId:0,borderId:0},65535)),ht(a,"BrtEndCellStyleXFs"),s=l,i=t.cellXfs,ht(s,"BrtBeginCellXFs",Rt(i.length)),i.forEach(function(e){ht(s,"BrtXF",wf(e,0))}),ht(s,"BrtEndCellXFs"),_f(l),ht(o=l,"BrtBeginDXFs",Rt(0)),ht(o,"BrtEndDXFs"),Tf(l),ht(l,"BrtEndStyleSheet"),l.end()}function yf(e,r,n){r.themeElements.clrScheme=[];var a={};(e[0].match(L)||[]).forEach(function(e){var t=oe(e);switch(t[0]){case"":break;case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":"/"===t[0].charAt(1)?(r.themeElements.clrScheme.push(a),a={}):a.name=t[0].substring(3,t[0].length-1);break;default:if(n&&n.WTF)throw new Error("Unrecognized "+t[0]+" in clrScheme")}})}function xf(e,t,r){}function Rf(e,t,r){}br.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";var If=/]*)>[\s\S]*<\/a:clrScheme>/,Of=/]*)>[\s\S]*<\/a:fontScheme>/,Df=/]*)>[\s\S]*<\/a:fmtScheme>/;var Pf=/]*)>[\s\S]*<\/a:themeElements>/;function Ff(e,t){if(!e||0===e.length)return Ff(Nf());var r,n,a,s,i,o={};if(!(r=e.match(Pf)))throw new Error("themeElements not found in theme");return n=r[0],s=t,(a=o).themeElements={},[["clrScheme",If,yf],["fontScheme",Of,xf],["fmtScheme",Df,Rf]].forEach(function(e){if(!(i=n.match(e[1])))throw new Error(e[0]+" not found in themeElements");e[2](i,a,s)}),o}function Nf(e,t){if(t&&t.themeXLSX)return t.themeXLSX;var r=[Xe];return r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r.join("")}function Lf(e,t){var r={};switch(r.xclrType=e.read_shift(2),r.nTintShade=e.read_shift(2),r.xclrType){case 0:e.l+=4;break;case 1:r.xclrValue=ot(e,4);break;case 2:r.xclrValue=sn(e);break;case 3:r.xclrValue=e.read_shift(4);break;case 4:e.l+=4}return e.l+=8,r}function Mf(e,t){var r=e.read_shift(2),n=e.read_shift(2),a=[r];switch(r){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:a[1]=Lf(e);break;case 6:a[1]=ot(e,n);break;case 14:case 15:a[1]=e.read_shift(5===n?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+r+" "+n)}return a}br.IMG="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",br.DRAW="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing";var Uf=1024;function Wf(e,t){for(var r=[21600,21600],n=["m0,0l0",r[1],r[0],r[1],r[0],"0xe"].join(","),a=[_e("xml",null,{"xmlns:v":je.v,"xmlns:o":je.o,"xmlns:x":je.x,"xmlns:mv":je.mv}).replace(/\/>/,">"),_e("o:shapelayout",_e("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"}),_e("v:shapetype",[_e("v:stroke",null,{joinstyle:"miter"}),_e("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:r.join(","),path:n})];Uf<1e3*e;)Uf+=1e3;return t.map(function(e){return St(e[0])}).forEach(function(e,t){a=a.concat(["",_e("v:fill",_e("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}),{color2:"#BEFF82",angle:"-180",type:"gradient"}),_e("v:shadow",null,{on:"t",obscured:"t"}),_e("v:path",null,{"o:connecttype":"none"}),'
','',"","",Ae("x:Anchor",[e.c,0,e.r,0,e.c+3,100,e.r+5,100].join(",")),Ae("x:AutoFill","False"),Ae("x:Row",String(e.r)),Ae("x:Column",String(e.c)),"","",""])}),a.push(""),a.join("")}function zf(e,s,t){var i,o,l=Array.isArray(s);t.forEach(function(e){if(l?(o=St(e.ref),s[o.r]||(s[o.r]=[]),i=s[o.r][o.c]):i=s[e.ref],!i){i={},l?s[o.r][o.c]=i:s[e.ref]=i;var t=_t(s["!ref"]||"BDWGO1000001:A1"),r=St(e.ref);t.s.r>r.r&&(t.s.r=r.r),t.e.rr.c&&(t.s.c=r.c),t.e.c>14&1,r>>15&1]}function Qf(e,t,r){var n,a,s,i,o,l=2;if(r){if(2<=r.biff&&r.biff<=5)return a=Zf(n=e,2),s=Zf(n,2),i=n.read_shift(1),o=n.read_shift(1),{s:{r:a[0],c:i,cRel:a[1],rRel:a[2]},e:{r:s[0],c:o,cRel:s[1],rRel:s[2]}};12==r.biff&&(l=4)}var c=e.read_shift(l),f=e.read_shift(l),h=Zf(e,2),u=Zf(e,2);return{s:{r:c,c:h[0],cRel:h[1],rRel:h[2]},e:{r:f,c:u[0],cRel:u[1],rRel:u[2]}}}function qf(e,t,r){if(r&&2<=r.biff&&r.biff<=5)return a=Zf(n=e,2),s=n.read_shift(1),{r:a[0],c:s,cRel:a[1],rRel:a[2]};var n,a,s,i=e.read_shift(r&&12==r.biff?4:2),o=Zf(e,2);return{r:i,c:o[0],cRel:o[1],rRel:o[2]}}function Jf(e,t){return[e.read_shift(1),e.read_shift(1)]}function eh(e,t){var r=[e.read_shift(1)];if(12==t)switch(r[0]){case 2:r[0]=4;break;case 4:r[0]=16;break;case 0:r[0]=1;break;case 1:r[0]=2}switch(r[0]){case 4:r[1]=$r(e,1)?"TRUE":"FALSE",e.l+=7;break;case 16:r[1]=Qt[e[e.l]],e.l+=8;break;case 0:e.l+=8;break;case 1:r[1]=$t(e);break;case 2:r[1]=rn(e,0,{biff:0>5;return e.l+=2==r.biff?6:12==r.biff?14:7,[n]}},33:{n:"PtgFunc",f:function(e,t,r){e[e.l];var n=(96&e[e.l])>>5;e.l+=1;var a=e.read_shift(r&&r.biff<=3?1:2);return[Ch[a],Eh[a],n]}},34:{n:"PtgFuncVar",f:function(e,t,r){e.l++;var n,a=e.read_shift(1),s=r&&r.biff<=3?[0,e.read_shift(1)]:[(n=e)[n.l+1]>>7,32767&n.read_shift(2)];return[a,(0===s[0]?Eh:vh)[s[1]]]}},35:{n:"PtgName",f:function(e,t,r){var n=e.read_shift(1)>>>5&3,a=!r||8<=r.biff?4:2,s=e.read_shift(a);switch(r.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12}return[n,0,s]}},36:{n:"PtgRef",f:function(e,t,r){e[e.l];var n=(96&e[e.l])>>5;return e.l+=1,[n,qf(e,0,r)]}},37:{n:"PtgArea",f:function(e,t,r){return[(96&e[e.l++])>>5,Qf(e,2<=r.biff&&r.biff,r)]}},38:{n:"PtgMemArea",f:function(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=r&&2==r.biff?3:4,[n,e.read_shift(r&&2==r.biff?1:2)]}},39:{n:"PtgMemErr",f:ot},40:{n:"PtgMemNoMem",f:ot},41:{n:"PtgMemFunc",f:function(e,t,r){return[e.read_shift(1)>>>5&3,e.read_shift(r&&2==r.biff?1:2)]}},42:{n:"PtgRefErr",f:function(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=4,12==r.biff&&(e.l+=2),[n]}},43:{n:"PtgAreaErr",f:function(e,t,r){var n=(96&e[e.l++])>>5;return e.l+=r&&8>5;return e.l+=1,[n,function(e,t,r){var n,a,s,i,o,l=r&&r.biff?r.biff:8;if(2<=l&&l<=5)return a=(n=e).read_shift(2),s=n.read_shift(1),i=(32768&a)>>15,o=(16384&a)>>14,a&=16383,1==i&&8192<=a&&(a-=16384),1==o&&128<=s&&(s-=256),{r:a,c:s,cRel:o,rRel:i};var c=e.read_shift(12<=l?4:2),f=e.read_shift(2),h=(32768&f)>>15,u=(16384&f)>>14;if(f&=16383,1==u)for(;524287>5,(n=e,a=r&&8>>5&3,a=e.read_shift(2,"i");e.l+=8;var s=e.read_shift(2);return e.l+=12,[n,a,s]}(e):[e.read_shift(1)>>>5&3,e.read_shift(2),e.read_shift(4)]}},58:{n:"PtgRef3d",f:function(e,t,r){var n=(96&e[e.l])>>5;return e.l+=1,[n,e.read_shift(2),qf(e,0,r)]}},59:{n:"PtgArea3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,a=e.read_shift(2,"i");if(r)switch(r.biff){case 5:e.l+=12}return[n,a,Qf(e,0,r)]}},60:{n:"PtgRefErr3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,a=e.read_shift(2),s=4;if(r)switch(r.biff){case 5:throw new Error("PtgRefErr3d -- 5");case 12:s=6}return e.l+=s,[n,a]}},61:{n:"PtgAreaErr3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,a=e.read_shift(2),s=8;if(r)switch(r.biff){case 5:e.l+=12,s=6;break;case 12:s=12}return e.l+=s,[n,a]}},255:{}},ah={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};!function(){for(var e in ah)nh[e]=nh[ah[e]]}();var sh={},ih={1:{n:"PtgAttrSemi",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=r&&2==r.biff?3:4,[n]}},2:{n:"PtgAttrIf",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=2,[n,e.read_shift(r&&2==r.biff?1:2)]}},4:{n:"PtgAttrChoose",f:function(e,t,r){e.l+=2;for(var n=e.read_shift(r&&2==r.biff?1:2),a=[],s=0;s<=n;++s)a.push(e.read_shift(r&&2==r.biff?1:2));return a}},8:{n:"PtgAttrGoto",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=2,[n,e.read_shift(r&&2==r.biff?1:2)]}},16:{n:"PtgAttrSum",f:function(e,t,r){e.l+=r&&2==r.biff?3:4}},32:{n:"PtgAttrBaxcel",f:function(e,t){var r=1&e[e.l+1];return e.l+=4,[r,1]}},64:{n:"PtgAttrSpace",f:function(e,t){return e.read_shift(2),Jf(e)}},65:{n:"PtgAttrSpaceSemi",f:function(e,t){return e.read_shift(2),Jf(e)}},128:{n:"PtgAttrIfError",f:function(e,t){var r=255&e[e.l+1]?1:0;return e.l+=2,[r,e.read_shift(2)]}},255:{}};function oh(e,t,r){var n=e.l+t,a=ln(e);2==r.biff&&++e.l;var s=function(e){var t;if(65535!==$e(e,e.l+6))return[$t(e),"n"];switch(e[e.l]){case 0:return e.l+=8,["String","s"];case 1:return t=1===e[e.l+2],e.l+=8,[t,"b"];case 2:return t=e[e.l+2],e.l+=8,[t,"e"];case 3:return e.l+=8,["","s"]}return[]}(e),i=e.read_shift(1);if(2!=r.biff&&(e.read_shift(1),5<=r.biff))e.read_shift(4);var o=function(e,t,r){e.l;var n,a=2==r.biff?1:2,s=e.read_shift(a);if(65535==s)return[[],ot(e,t-2)];var i=ch(e,s,r);t!==s+a&&(n=lh(e,t-s-a,i,r));return[i,n]}(e,n-e.l,r);return{cell:a,val:s[0],formula:o,shared:i>>3&1,tt:s[1]}}function lh(e,t,r,n){if(n.biff<8)return ot(e,t);for(var a=e.l+t,s=[],i=0;i!==r.length;++i)switch(r[i][0]){case"PtgArray":r[i][1]=rh(e,0,n),s.push(r[i][1]);break;case"PtgMemArea":r[i][2]=th(e,r[i][1]),s.push(r[i][2]);break;case"PtgExp":n&&12==n.biff&&(r[i][1][1]=e.read_shift(4),s.push(r[i][1]))}return 0!==(t=a-e.l)&&s.push(ot(e,t)),s}function ch(e,t,r){for(var n,a,s=e.l+t,i=[];s!=e.l;)t=s-e.l,a=e[e.l],n=nh[a],24!==a&&25!==a||(n=(24===(a=e[e.l+1])?sh:ih)[a]),n&&n.f?i.push([n.n,n.f(e,t,r)]):ot(e,t);return i}function fh(e){for(var t=[],r=0;r=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function uh(e,t,r,n,a){var s,i,o,l,c={s:{c:0,r:0},e:{c:0,r:0}},f=[],h=0,u=0,d="";if(!e[0]||!e[0][0])return"";for(var p,g=-1,m="",b=0,v=e[0].length;bi[0].e.c||o.ri[0].e.r)){f.push(uh(i[1],c,R,n,a)),O=!0;break}O||f.push(E[1])}break;case"PtgArray":f.push("{"+fh(E[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":g=b;break;case"PtgTbl":case"PtgMemErr":break;case"PtgMissArg":f.push("");break;case"PtgAreaErr":case"PtgAreaErr3d":f.push("#REF!");break;case"PtgMemFunc":break;default:throw new Error("Unrecognized Formula Token: "+String(E))}if(0<=g&&-1==["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"].indexOf(e[0][b][0])){var D=!0;switch((E=e[0][g])[1][0]){case 4:D=!1;case 0:m=P(" ",E[1][1]);break;case 5:D=!1;case 1:m=P("\r",E[1][1]);break;default:if(m="",a.WTF)throw new Error("Unexpected PtgAttrSpaceType "+E[1][0])}f.push((D?m:"")+f.pop()+(D?"":m)),g=-1}}if(1/g,Rh=/<(?:\w+:)?sheetData>([\s\S]*)<\/(?:\w+:)?sheetData>/,Ih=/<(?:\w:)?hyperlink [^>]*>/gm,Oh=/"(\w*:\w*)"/,Dh=/<(?:\w:)?col[^>]*[\/]?>/g,Ph=/<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g,Fh=/<(?:\w:)?pageMargins[^>]*\/>/g;function Nh(e,t,r,n,a,s){if(!e)return e;null!=ce&&null==t.dense&&(t.dense=ce);var i=t.dense?[]:{},o={s:{r:2e6,c:2e6},e:{r:0,c:0}},l="",c="",f=e.match(Rh);f?(l=e.substr(0,f.index),c=e.substr(f.index+f[0].length)):l=c=e;var h,u,d,p=(l.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(0=o.s.c&&o.e.r>=o.s.r&&(i["!ref"]=Bt(o)),0o.e.r&&(_.e.r=o.e.r),_.e.r<_.s.r&&(_.s.r=_.e.r),_.e.c>o.e.c&&(_.e.c=o.e.c),_.e.c<_.s.c&&(_.s.c=_.e.c),i["!fullref"]=i["!ref"],i["!ref"]=Bt(_))}return 0]/,Uh=/<\/(?:\w+:)?row>/,Wh=/r=["']([^"']*)["']/,zh=/<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/,Hh=/ref=["']([^"']*)["']/,Vh=be("v"),Xh=be("f"),function(e,t,r,n,a,s){for(var i,o,l,c,f,h=0,u="",d=[],p=[],g=0,m=0,b=0,v="",E=0,C=0,S=0,w=0,A=Array.isArray(s.CellXf),B=[],_=[],T=Array.isArray(t),k=[],y={},x=!1,R=e.split(Uh),I=0,O=R.length;I!=O;++I){var D=(u=R[I].trim()).length;if(0!==D){for(h=0;hE-1&&(n.s.r=E-1),n.e.r":"")+u,null!=p&&2===p.length){for(g=0,v=p[1],m=0;m!=v.length&&!((b=v.charCodeAt(m)-64)<1||26]*\/>/))&&_[(c=oe(p[0])).si]&&(i.f=Kf(_[c.si][1],_[c.si][0].ref,o.r));var P=St(o.r);for(m=0;m=B[m][0].s.r&&P.r<=B[m][0].e.r&&P.c>=B[m][0].s.c&&P.c<=B[m][0].e.c&&(i.F=B[m][1])}if(null==o.t&&void 0===i.v)if(i.f||i.F)i.v=0,i.t="n";else{if(!r.sheetStubs)continue;i.t="z"}else i.t=o.t||"n";switch(n.s.c>g&&(n.s.c=g),n.e.c"],a=0;a!=t.length;++a)(r=t[a])&&(n[n.length]=_e("col",null,_h(a,r)));return n[n.length]="
",n.join("")}(0,l["!cols"])),s[a=s.length]="",l["!links"]=[],null!=l["!ref"]&&0<(o=function(e,t,r,n,a){var s,i,o=[],l=[],c=_t(e["!ref"]),f="",h=[],u=0,d=0,p=e["!rows"],g=Array.isArray(e);for(d=c.s.c;d<=c.e.c;++d)h[d]=Et(d);for(u=c.s.r;u<=c.e.r;++u){for(l=[],f=bt(u),d=c.s.c;d<=c.e.c;++d){i=h[d]+f;var m=g?(e[u]||[])[d]:e[i];void 0!==m&&null!=(s=Lh(m,i,e,t))&&l.push(s)}if(0a+1&&(s[s.length]="",s[a]=s[a].replace("/>",">")),null!=l["!protect"]&&(s[s.length]=(c=l["!protect"],f={sheet:1},["objects","scenarios","selectLockedCells","selectUnlockedCells"].forEach(function(e){null!=c[e]&&c[e]&&(f[e]="1")}),["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"].forEach(function(e){null==c[e]||c[e]||(f[e]="0")}),c.password&&(f.password=Mc(c.password).toString(16).toUpperCase()),_e("sheetProtection",null,f))),null!=l["!autofilter"]&&(s[s.length]=_e("autoFilter",null,{ref:l["!autofilter"].ref})),null!=l["!merges"]&&0',r=0;r!=e.length;++r)t+='';return t+""}(l["!merges"]));var u,d,p=-1,g=-1;0",l["!links"].forEach(function(e){e[1].Target&&(g=wr(n,-1,K(e[1].Target).replace(/#.*$/,""),br.HLINK),u={ref:e[0],"r:id":"rId"+g},-1<(p=e[1].Target.indexOf("#"))&&(u.location=K(e[1].Target.substr(p+1))),e[1].Tooltip&&(u.tooltip=K(e[1].Tooltip)),s[s.length]=_e("hyperlink",null,u))}),s[s.length]=""),delete l["!links"],null!=l["!margins"]&&(s[s.length]=(Th(d=l["!margins"]),_e("pageMargins",null,d)));s.length;return s[s.length]="",0",s[1]=s[1].replace("/>",">")),s.join("")}function Kh(e,t,r,n){var a=function(e,t,r){var n=lt(145),a=(r["!rows"]||[])[e]||{};n.write_shift(4,e),n.write_shift(4,0);var s=320;a.hpx?s=20*sf(a.hpx):a.hpt&&(s=20*a.hpt),n.write_shift(2,s),n.write_shift(1,0);var i=0;a.level&&(i|=a.level),a.hidden&&(i|=16),(a.hpx||a.hpt)&&(i|=32),n.write_shift(1,i),n.write_shift(1,0);var o=0,l=n.l;n.l+=4;for(var c={r:e,c:0},f=0;f<16;++f)if(!(t.s.c>f+1<<10||t.e.cn.l?n.slice(0,n.l):n}(n,r,t);(17m.l?m.slice(0,m.l):m))));case"n":return t.v==(0|t.v)&&-1e3[\s\S]*?<\/c:numCache>/gm)||[]).forEach(function(e){var r=function(e){var r=[];(e.match(/(.*?)<\/c:pt>/gm)||[]).forEach(function(e){var t=e.match(/(.*)<\/c:v><\/c:pt>/);t&&(r[+t[1]]=+t[2])});var t=he((e.match(/([\s\S]*?)<\/c:formatCode>/)||["","General"])[1]);return[r,t]}(e);f.s.r=f.s.c=0,f.e.c=o,c=Et(o),r[0].forEach(function(e,t){i[c+bt(t)]={t:"n",v:e,z:r[1]},l=t}),f.e.r":break;case"":case"":break;case"":break;case"":lu.forEach(function(e){if(null!=r[e[0]])switch(e[2]){case"bool":s.WBProps[e[0]]=ee(r[e[0]],e[0]);break;case"int":s.WBProps[e[0]]=parseInt(r[e[0]],10);break;default:s.WBProps[e[0]]=r[e[0]]}});break;case"":case"":break;case"":case"":break;case"":break;case"":case"":break;case"":break;case"":case"":case"":case"":break;case"":case"":i=!1;break;case"":l.Ref=n.slice(c,t),s.Names.push(l);break;case"":break;case"":delete r[0],s.CalcPr=r;break;case"":case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":break;case"":case"":case"":case"":case"":break;case"":i=!1;break;case"":i=!1;break;case"a.l?a.slice(0,a.l):a)),ht(e,"BrtEndBookViews")}}function wu(e,t){var r=ft();return ht(r,"BrtBeginBook"),ht(r,"BrtFileVersion",function(e,t){t||(t=lt(127));for(var r=0;4!=r;++r)t.write_shift(4,0);return Ot("SheetJS",t),Ot(n.version,t),Ot(n.version,t),Ot("7262",t),t.length=t.l,t.length>t.l?t.slice(0,t.l):t}()),ht(r,"BrtWbProp",function(e,t){t||(t=lt(72));var r=0;return e&&e.filterPrivacy&&(r|=8),t.write_shift(4,r),t.write_shift(4,0),Ut("ThisWorkbook",t),t.slice(0,t.l)}(e.Workbook&&e.Workbook.WBProps||null)),Su(r,e),function(e,t,r){ht(e,"BrtBeginBundleShs");for(var n=0;n!=t.SheetNames.length;++n){var a={Hidden:t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[n]&&t.Workbook.Sheets[n].Hidden||0,iTabID:n+1,strRelID:"rId"+(n+1),name:t.SheetNames[n]};ht(e,"BrtBundleSh",(s=a,(i=void 0)||(i=lt(127)),i.write_shift(4,s.Hidden),i.write_shift(4,s.iTabID),Xt(s.strRelID,i),Ot(s.name.substr(0,31),i),i.length>i.l?i.slice(0,i.l):i))}var s,i;ht(e,"BrtEndBundleShs")}(r,e),ht(r,"BrtEndBook"),r.end()}function Au(e,t,r){return".bin"===t.slice(-4)?function(e,n){var a={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""},s=!1;n||(n={}),n.biff=12;var i=[],o=[];return o.SheetNames=[],ct(e,function(e,t,r){switch(r){case 156:o.SheetNames.push(e.name),a.Sheets.push(e);break;case 153:a.WBProps=e;break;case 39:e.Ref=uh(e.Ptg,0,null,o,n),delete e.Ptg,i.push(e);break;case 1036:break;case 357:case 358:case 355:case 667:case 362:case 361:break;case 2071:case 534:case 677:case 158:case 157:case 610:case 2050:case 155:case 548:case 676:case 128:case 665:case 2128:case 2125:case 549:case 2053:case 596:case 2076:case 2075:case 2082:case 397:case 154:case 1117:case 553:case 2091:break;case 35:s=!0;break;case 36:s=!1;break;case 37:case 38:case 16:break;default:if(0<(t||"").indexOf("Begin"));else if(0<(t||"").indexOf("End"));else if(!s||n.WTF)throw new Error("Unexpected record "+r+" "+t)}},n),pu(a),a.Names=i,a}(e,r):Eu(e,r)}function Bu(e,t,r,n,a,s,i){return".bin"===t.slice(-4)?function(e,t,i,r,o,l){if(!e)return e;var c=t||{};i||(i={"!id":{}}),null!=ce&&null==c.dense&&(c.dense=ce);var f,h,u,d,p,g,m,b,v,E,C=c.dense?[]:{},S={s:{r:2e6,c:2e6},e:{r:0,c:0}},w=!1,A=!1,B=[];c.biff=12;var _=c["!row"]=0,T=!1,k=[],y={},x=[[]];x.sharedf=y,x.arrayf=k,x.SheetNames=r.SheetNames||r.Sheets.map(function(e){return e.name}),c.supbooks=x;for(var n=0;n=n[0].s.r&&h.r<=n[0].e.r&&g>=n[0].s.c&&g<=n[0].e.c&&(u.F=Bt(n[0]),T=!0)}!T&&3h.r&&(S.s.r=h.r),S.s.c>g&&(S.s.c=g),S.e.rh.r&&(S.s.r=h.r),S.s.c>g&&(S.s.c=g),S.e.r=e.s;)R[e.e--]={width:e.w/256,hidden:!!(1&e.flags)},O||(O=!0,rf(e.w/256)),nf(R[e.e+1]);break;case 161:C["!autofilter"]={ref:Bt(e)};break;case 476:C["!margins"]=e;break;case 485:case 175:case 644:case 625:case 562:case 396:case 1112:case 1146:case 471:case 1050:case 649:case 1105:case 49:case 589:case 607:case 564:case 1055:case 168:case 174:case 1180:case 499:case 64:case 1053:case 550:case 171:case 167:case 1177:case 169:case 1181:case 551:case 552:case 661:case 639:case 478:case 151:case 537:case 477:case 536:case 1103:case 680:case 1104:case 1024:case 152:case 663:case 535:case 678:case 504:case 1043:case 428:case 170:case 50:case 2070:case 1045:case 147:break;case 35:w=!0;break;case 36:w=!1;break;case 37:case 38:break;default:if(0<(t||"").indexOf("Begin"));else if(0<(t||"").indexOf("End"));else if(!w||c.WTF)throw new Error("Unexpected record "+r+" "+t)}},c),delete c.supbooks,delete c["!row"],!C["!ref"]&&(S.s.r<2e6||f&&(0S.e.r&&(a.e.r=S.e.r),a.e.rS.e.c&&(a.e.c=S.e.c),a.e.c/))return[];var c=[],f=[],t=e.match(/<(?:\w+:)?authors>([\s\S]*)<\/(?:\w+:)?authors>/);t&&t[1]&&t[1].split(/<\/\w*:?author>/).forEach(function(e){if(""!==e&&""!==e.trim()){var t=e.match(/<(?:\w+:)?author[^>]*>(.*)/);t&&c.push(t[1])}});var r=e.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/);return r&&r[1]&&r[1].split(/<\/\w*:?comment>/).forEach(function(e,t){if(""!==e&&""!==e.trim()){var r=e.match(/<(?:\w+:)?comment[^>]*>/);if(r){var n=oe(r[0]),a={author:n.authorId&&c[n.authorId]?c[n.authorId]:"sheetjsghost",ref:n.ref,guid:n.guid},s=St(n.ref);if(!(l.sheetRows&&l.sheetRows<=s.r)){var i=e.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/),o=!!i&&!!i[1]&&Bc(i[1])||{r:"",t:"",h:""};a.r=o.r,""==o.r&&(o.t=o.h=""),a.t=o.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),l.cellHTML&&(a.h=o.h),f.push(a)}}}}),f}(e,r);var n,a,s,i,o}function xu(e,t,r){return".bin"===t.slice(-4)?(n=[],ct(e,function(e,t,r){switch(r){case 63:n.push(e);break;default:if(0<(t||"").indexOf("Begin"));else if(!(0<(t||"").indexOf("End")))throw new Error("Unexpected record "+r+" "+t)}}),n):function(e,t){var r=[];if(!e)return r;var n=1;return(e.match(L)||[]).forEach(function(e){var t=oe(e);switch(t[0]){case"":case"":break;case"";for(var s=t.Workbook&&t.Workbook.Sheets||[],i=0;i!=t.SheetNames.length;++i){var o={name:K(t.SheetNames[i].substr(0,31))};if(o.sheetId=""+(i+1),o["r:id"]="rId"+(i+1),s[i])switch(s[i].Hidden){case 1:o.state="hidden";break;case 2:o.state="veryHidden"}r[r.length]=_e("sheet",null,o)}return r[r.length]="",n&&(r[r.length]="",t.Workbook&&t.Workbook.Names&&t.Workbook.Names.forEach(function(e){var t={name:e.Name};e.Comment&&(t.comment=e.Comment),null!=e.Sheet&&(t.localSheetId=""+e.Sheet),e.Ref&&(r[r.length]=_e("definedName",String(e.Ref),t))}),r[r.length]=""),2",r[1]=r[1].replace("/>",">")),r.join("")})(e,r)}function Iu(e,t,r){return(".bin"===t.slice(-4)?Rc:function(e,t){if(!t.bookSST)return"";var r=[Xe];r[r.length]=_e("sst",null,{xmlns:Ge.main[0],count:e.Count,uniqueCount:e.Unique});for(var n=0;n!=e.length;++n)if(null!=e[n]){var a=e[n],s="";a.r?s+=a.r:(s+=""),s+="",r[r.length]=s}return 2",r[1]=r[1].replace("/>",">")),r.join("")})(e,r)}function Ou(e,t,r){return(".bin"===t.slice(-4)?Xf:function(e,t){var r=[Xe,Hf],n=[];return r.push(""),e.map(function(e){return e[1]}).forEach(function(e){e.map(function(e){return K(e.a)}).forEach(function(e){-1"+e+""))})}),r.push(""),r.push(""),e.forEach(function(t){t[1].forEach(function(e){r.push(''),r.push(Ae("t",null==e.t?"":e.t)),r.push("")})}),r.push(""),2",r[1]=r[1].replace("/>",">")),r.join("")})(e,r)}var Du=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g,Pu=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/,Fu=function(e){return String.fromCharCode(e)};function Nu(e,t){var r=e.split(/\s+/),n=[];if(t||(n[0]=r[0]),1===r.length)return n;var a,s,i,o=e.match(Du);if(o)for(i=0;i!=o.length;++i)-1===(s=(a=o[i].match(Pu))[1].indexOf(":"))?n[a[1]]=a[2].substr(1,a[2].length-2):n["xmlns:"===a[1].substr(0,6)?"xmlns"+a[1].substr(6):a[1].substr(s+1)]=a[2].substr(1,a[2].length-2);return n}function Lu(e){var t={};if(1===e.split(/\s+/).length)return t;var r,n,a,s=e.match(Du);if(s)for(a=0;a!=s.length;++a)-1===(n=(r=s[a].match(Pu))[1].indexOf(":"))?t[r[1]]=r[2].substr(1,r[2].length-2):t["xmlns:"===r[1].substr(0,6)?"xmlns"+r[1].substr(6):r[1].substr(n+1)]=r[2].substr(1,r[2].length-2);return t}function Mu(e,t,r,n){var a=n;switch((r[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":a=ee(n);break;case"i2":case"int":a=parseInt(n,10);break;case"r4":case"float":a=parseFloat(n);break;case"date":case"dateTime.tz":a=z(n);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw new Error("bad custprop:"+r[0])}e[he(t[3])]=a}function Uu(e,t,r){if("z"!==e.t){if(!r||!1!==r.cellText)try{"e"===e.t?e.w=e.w||Qt[e.v]:"General"===t?"n"===e.t?(0|e.v)===e.v?e.w=fe._general_int(e.v):e.w=fe._general_num(e.v):e.w=fe._general(e.v):e.w=(n=t||"General",a=e.v,"General"===(s=se[n]||he(n))?fe._general(a):fe.format(s,a))}catch(e){if(r.WTF)throw e}var n,a,s;try{var i=se[t]||t||"General";if(r.cellNF&&(e.z=i),r.cellDates&&"n"==e.t&&fe.is_date(i)){var o=fe.parse_date_code(e.v);o&&(e.t="d",e.v=new Date(o.y,o.m-1,o.d,o.H,o.M,o.S,o.u))}}catch(e){if(r.WTF)throw e}}}function Wu(e,t,r){if(r.cellStyles&&t.Interior){var n=t.Interior;n.Pattern&&(n.patternType=lf[n.Pattern]||n.Pattern)}e[t.ID]=t}function zu(e,t,r,n,a,s,i,o,l,c){var f="General",h=n.StyleID,u={};c=c||{};var d=[],p=0;for(void 0===h&&o&&(h=o.StyleID),void 0===h&&i&&(h=i.StyleID);void 0!==s[h]&&(s[h].nf&&(f=s[h].nf),s[h].Interior&&d.push(s[h].Interior),s[h].Parent);)h=s[h].Parent;switch(r.Type){case"Boolean":n.t="b",n.v=ee(e);break;case"String":n.t="s",n.r=q(he(e)),n.v=-1=l[p][0].s.r&&a.r<=l[p][0].e.r&&a.c>=l[p][0].s.c&&a.c<=l[p][0].e.c&&(n.F=l[p][1]);c.cellStyles&&(d.forEach(function(e){!u.patternType&&e.patternType&&(u.patternType=e.patternType)}),n.s=u),n.ixfe=void 0!==n.StyleID?n.StyleID:"Default"}function Hu(e){if(d&&Buffer.isBuffer(e))return e.toString("utf8");if("string"==typeof e)return e;throw new Error("Bad input format: expected Buffer or string")}var Vu=/<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/gm;function Xu(e,t){var r=t||{};ae(fe);var n=ne(Hu(e));r&&"binary"==r.type&&"undefined"!=typeof cptable&&(n=cptable.utils.decode(65001,re(n)));var a,s=n.slice(0,1024).toLowerCase(),i=!1;if(-1==s.indexOf("'),S=0,w=0,A=0,B={s:{r:2e6,c:2e6},e:{r:0,c:0}},_={},T={},k="",y=0,x=[],R={},I={},O=0,D={},P=[],F={},N=[],L=!1,M=[],U=[],W={},z={Sheets:[],WBProps:{date1904:!1}},H={};for(Vu.lastIndex=0,n=n.replace(//gm,"");a=Vu.exec(n);)switch(a[3]){case"Data":if(l[l.length-1][1])break;"/"===a[1]?zu(n.slice(S,a.index),k,C,"Comment"==l[l.length-1][0]?F:v,{c:w,r:A},_,N[w],E,M,r):(k="",C=Nu(a[0]),S=a.index+a[0].length);break;case"Cell":if("/"===a[1]){if(0A)&&void 0!==v.v&&(r.dense?(m[A]||(m[A]=[]),m[A][w]=v):m[Et(w)+bt(A)]=v),v.HRef&&(v.l={Target:v.HRef,Tooltip:v.HRefScreenTip},delete v.HRef,delete v.HRefScreenTip),v.MergeAcross||v.MergeDown){var V=w+(0|parseInt(v.MergeAcross,10)),X=A+(0|parseInt(v.MergeDown,10));x.push({s:{c:w,r:A},e:{c:V,r:X}})}if(r.sheetStubs)if(v.MergeAcross||v.MergeDown){for(var G=w;G<=V;++G)for(var j=A;j<=X;++j)(wB.e.c&&(B.e.c=w),"/>"===a[0].slice(-2)&&++w,P=[];break;case"Row":"/"===a[1]||"/>"===a[0].slice(-2)?(AB.e.r&&(B.e.r=A),"/>"===a[0].slice(-2)&&(E=Nu(a[0])).Index&&(A=+E.Index-1),w=0,++A):((E=Nu(a[0])).Index&&(A=+E.Index-1),W={},("0"==E.AutoFitHeight||E.Height)&&(W.hpx=parseInt(E.Height,10),W.hpt=sf(W.hpx),U[A]=W),"1"==E.Hidden&&(W.hidden=!0,U[A]=W));break;case"Worksheet":if("/"===a[1]){if((o=l.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"));g.push(b),B.s.r<=B.e.r&&B.s.c<=B.e.c&&(m["!ref"]=Bt(B)),x.length&&(m["!merges"]=x),0"==a[0].slice(-2))break;Nu(a[0]),l.push([a[3],!1]),L=!(N=[])}break;case"Style":"/"===a[1]?Wu(_,T,r):T=Nu(a[0]);break;case"NumberFormat":T.nf=he(Nu(a[0]).Format||"General"),se[T.nf]&&(T.nf=se[T.nf]);for(var Y=0;392!=Y&&fe._table[Y]!=T.nf;++Y);if(392==Y)for(Y=57;392!=Y;++Y)if(null==fe._table[Y]){fe.load(T.nf,Y);break}break;case"Column":if("Table"!==l[l.length-1][0])break;if((c=Nu(a[0])).Hidden&&(c.hidden=!0,delete c.Hidden),c.Width&&(c.wpx=parseInt(c.Width,10)),!L&&10"===a[0].slice(-2))break;"/"===a[1]?k+=n.slice(y,a.index):y=a.index+a[0].length;break;case"Interior":if(!r.cellStyles)break;T.Interior=Nu(a[0]);break;case"Protection":break;case"Author":case"Title":case"Description":case"Created":case"Keywords":case"Subject":case"Category":case"Company":case"LastAuthor":case"LastSaved":case"LastPrinted":case"Version":case"Revision":case"TotalTime":case"HyperlinkBase":case"Manager":case"ContentStatus":case"Identifier":case"Language":if("/>"===a[0].slice(-2))break;"/"===a[1]?(h=R,u=a[3],d=n.slice(O,a.index),h[u=Lr[u]||u]=d):O=a.index+a[0].length;break;case"Paragraphs":break;case"Styles":case"Workbook":if("/"===a[1]){if((o=l.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else l.push([a[3],!1]);break;case"Comment":if("/"===a[1]){if((o=l.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"));(f=F).t=f.v||"",f.t=f.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),f.v=f.w=f.ixfe=void 0,P.push(F)}else l.push([a[3],!1]),F={a:(o=Nu(a[0])).Author};break;case"AutoFilter":if("/"===a[1]){if((o=l.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else if("/"!==a[0].charAt(a[0].length-2)){var q=Nu(a[0]);m["!autofilter"]={ref:Gf(q.Range).replace(/\$/g,"")},l.push([a[3],!0])}break;case"Name":break;case"ComponentOptions":case"DocumentProperties":case"CustomDocumentProperties":case"OfficeDocumentSettings":case"PivotTable":case"PivotCache":case"Names":case"MapInfo":case"PageBreaks":case"QueryTable":case"DataValidation":case"Sorting":case"Schema":case"data":case"ConditionalFormatting":case"SmartTagType":case"SmartTags":case"ExcelWorkbook":case"WorkbookOptions":case"WorksheetOptions":if("/"===a[1]){if((o=l.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else"/"!==a[0].charAt(a[0].length-2)&&l.push([a[3],!0]);break;default:if(0==l.length&&"document"==a[3])return ud(n,r);if(0==l.length&&"UOF"==a[3])return ud(n,r);var J=!0;switch(l[l.length-1][0]){case"OfficeDocumentSettings":switch(a[3]){case"AllowPNG":case"RemovePersonalInformation":case"DownloadComponents":case"LocationOfComponents":case"Colors":case"Color":case"Index":case"RGB":case"PixelsPerInch":case"TargetScreenSize":case"ReadOnlyRecommended":break;default:J=!1}break;case"ComponentOptions":switch(a[3]){case"Toolbar":case"HideOfficeLogo":case"SpreadsheetAutoFit":case"Label":case"Caption":case"MaxHeight":case"MaxWidth":case"NextSheetNumber":break;default:J=!1}break;case"ExcelWorkbook":switch(a[3]){case"Date1904":z.WBProps.date1904=!0;break;case"WindowHeight":case"WindowWidth":case"WindowTopX":case"WindowTopY":case"TabRatio":case"ProtectStructure":case"ProtectWindows":case"ActiveSheet":case"DisplayInkNotes":case"FirstVisibleSheet":case"SupBook":case"SheetName":case"SheetIndex":case"SheetIndexFirst":case"SheetIndexLast":case"Dll":case"AcceptLabelsInFormulas":case"DoNotSaveLinkValues":case"Iteration":case"MaxIterations":case"MaxChange":case"Path":case"Xct":case"Count":case"SelectedSheets":case"Calculation":case"Uncalced":case"StartupPrompt":case"Crn":case"ExternName":case"Formula":case"ColFirst":case"ColLast":case"WantAdvise":case"Boolean":case"Error":case"Text":case"OLE":case"NoAutoRecover":case"PublishObjects":case"DoNotCalculateBeforeSave":case"Number":case"RefModeR1C1":case"EmbedSaveSmartTags":break;default:J=!1}break;case"WorkbookOptions":switch(a[3]){case"OWCVersion":case"Height":case"Width":break;default:J=!1}break;case"WorksheetOptions":switch(a[3]){case"Visible":if("/>"===a[0].slice(-2));else if("/"===a[1])switch(n.slice(O,a.index)){case"SheetHidden":H.Hidden=1;break;case"SheetVeryHidden":H.Hidden=2}else O=a.index+a[0].length;break;case"Header":m["!margins"]||Th(m["!margins"]={},"xlml"),m["!margins"].header=oe(a[0]).Margin;break;case"Footer":m["!margins"]||Th(m["!margins"]={},"xlml"),m["!margins"].footer=oe(a[0]).Margin;break;case"PageMargins":var ee=oe(a[0]);m["!margins"]||Th(m["!margins"]={},"xlml"),ee.Top&&(m["!margins"].top=ee.Top),ee.Left&&(m["!margins"].left=ee.Left),ee.Right&&(m["!margins"].right=ee.Right),ee.Bottom&&(m["!margins"].bottom=ee.Bottom);break;case"Unsynced":case"Print":case"Panes":case"Scale":case"Pane":case"Number":case"Layout":case"PageSetup":case"Selected":case"ProtectObjects":case"EnableSelection":case"ProtectScenarios":case"ValidPrinterInfo":case"HorizontalResolution":case"VerticalResolution":case"NumberofCopies":case"ActiveRow":case"ActiveCol":case"ActivePane":case"TopRowVisible":case"TopRowBottomPane":case"LeftColumnVisible":case"LeftColumnRightPane":case"FitToPage":case"RangeSelection":case"PaperSizeIndex":case"PageLayoutZoom":case"PageBreakZoom":case"FilterOn":case"DoNotDisplayGridlines":case"SplitHorizontal":case"SplitVertical":case"FreezePanes":case"FrozenNoSplit":case"FitWidth":case"FitHeight":case"CommentsLayout":case"Zoom":case"LeftToRight":case"Gridlines":case"AllowSort":case"AllowFilter":case"AllowInsertRows":case"AllowDeleteRows":case"AllowInsertCols":case"AllowDeleteCols":case"AllowInsertHyperlinks":case"AllowFormatCells":case"AllowSizeCols":case"AllowSizeRows":case"NoSummaryRowsBelowDetail":case"TabColorIndex":case"DoNotDisplayHeadings":case"ShowPageLayoutZoom":case"NoSummaryColumnsRightDetail":case"BlackAndWhite":case"DoNotDisplayZeros":case"DisplayPageBreak":case"RowColHeadings":case"DoNotDisplayOutline":case"NoOrientation":case"AllowUsePivotTables":case"ZeroHeight":case"ViewableRange":case"Selection":case"ProtectContents":break;default:J=!1}break;case"PivotTable":case"PivotCache":switch(a[3]){case"ImmediateItemsOnDrop":case"ShowPageMultipleItemLabel":case"CompactRowIndent":case"Location":case"PivotField":case"Orientation":case"LayoutForm":case"LayoutSubtotalLocation":case"LayoutCompactRow":case"Position":case"PivotItem":case"DataType":case"DataField":case"SourceName":case"ParentField":case"PTLineItems":case"PTLineItem":case"CountOfSameItems":case"Item":case"ItemType":case"PTSource":case"CacheIndex":case"ConsolidationReference":case"FileName":case"Reference":case"NoColumnGrand":case"NoRowGrand":case"BlankLineAfterItems":case"Hidden":case"Subtotal":case"BaseField":case"MapChildItems":case"Function":case"RefreshOnFileOpen":case"PrintSetTitles":case"MergeLabels":case"DefaultVersion":case"RefreshName":case"RefreshDate":case"RefreshDateCopy":case"VersionLastRefresh":case"VersionLastUpdate":case"VersionUpdateableMin":case"VersionRefreshableMin":case"Calculation":break;default:J=!1}break;case"PageBreaks":switch(a[3]){case"ColBreaks":case"ColBreak":case"RowBreaks":case"RowBreak":case"ColStart":case"ColEnd":case"RowEnd":break;default:J=!1}break;case"AutoFilter":switch(a[3]){case"AutoFilterColumn":case"AutoFilterCondition":case"AutoFilterAnd":case"AutoFilterOr":break;default:J=!1}break;case"QueryTable":switch(a[3]){case"Id":case"AutoFormatFont":case"AutoFormatPattern":case"QuerySource":case"QueryType":case"EnableRedirections":case"RefreshedInXl9":case"URLString":case"HTMLTables":case"Connection":case"CommandText":case"RefreshInfo":case"NoTitles":case"NextId":case"ColumnInfo":case"OverwriteCells":case"DoNotPromptForFile":case"TextWizardSettings":case"Source":case"Number":case"Decimal":case"ThousandSeparator":case"TrailingMinusNumbers":case"FormatSettings":case"FieldType":case"Delimiters":case"Tab":case"Comma":case"AutoFormatName":case"VersionLastEdit":case"VersionLastRefresh":break;default:J=!1}break;case"Sorting":case"ConditionalFormatting":case"DataValidation":switch(a[3]){case"Range":case"Type":case"Min":case"Max":case"Sort":case"Descending":case"Order":case"CaseSensitive":case"Value":case"ErrorStyle":case"ErrorMessage":case"ErrorTitle":case"CellRangeList":case"InputMessage":case"InputTitle":case"ComboHide":case"InputHide":case"Condition":case"Qualifier":case"UseBlank":case"Value1":case"Value2":case"Format":break;default:J=!1}break;case"MapInfo":case"Schema":case"data":switch(a[3]){case"Map":case"Entry":case"Range":case"XPath":case"Field":case"XSDType":case"FilterOn":case"Aggregate":case"ElementType":case"AttributeType":break;case"schema":case"element":case"complexType":case"datatype":case"all":case"attribute":case"extends":case"row":break;default:J=!1}break;case"SmartTags":break;default:J=!1}if(J)break;if(!l[l.length-1][1])throw"Unrecognized tag: "+a[3]+"|"+l.join("|");if("CustomDocumentProperties"===l[l.length-1][0]){if("/>"===a[0].slice(-2))break;"/"===a[1]?Mu(I,a,D,n.slice(O,a.index)):O=(D=a).index+a[0].length;break}if(r.WTF)throw"Unrecognized tag: "+a[3]+"|"+l.join("|")}var te={};return r.bookSheets||r.bookProps||(te.Sheets=p),te.SheetNames=g,te.Workbook=z,te.SSF=fe.get_table(),te.Props=R,te.Custprops=I,te}function Gu(e,t){switch(Td(t=t||{}),t.type||"base64"){case"base64":return Xu(S.decode(e),t);case"binary":case"buffer":case"file":return Xu(e,t);case"array":return Xu(e.map(Fu).join(""),t)}}function ju(e,t){var r,n,a,s,i,o,l,c,f=[];return e.Props&&f.push((r=e.Props,n=t,a=[],k(Nr).map(function(e){for(var t=0;t'+c.join("")+"")),f.join("")}function Yu(e,t,r,n,a,s,i){if(!e||null==e.v&&null==e.f)return"";var o={};if(e.f&&(o["ss:Formula"]="="+K(Yf(e.f,i))),e.F&&e.F.substr(0,t.length)==t){var l=St(e.F.substr(t.length+1));o["ss:ArrayRange"]="RC:R"+(l.r==i.r?"":"["+(l.r-i.r)+"]")+"C"+(l.c==i.c?"":"["+(l.c-i.c)+"]")}if(e.l&&e.l.Target&&(o["ss:HRef"]=K(e.l.Target),e.l.Tooltip&&(o["x:HRefScreenTip"]=K(e.l.Tooltip))),r["!merges"])for(var c=r["!merges"],f=0;f!=c.length;++f)c[f].s.c==i.c&&c[f].s.r==i.r&&(c[f].e.c>c[f].s.c&&(o["ss:MergeAcross"]=c[f].e.c-c[f].s.c),c[f].e.r>c[f].s.r&&(o["ss:MergeDown"]=c[f].e.r-c[f].s.r));var h="",u="";switch(e.t){case"z":return"";case"n":h="Number",u=String(e.v);break;case"b":h="Boolean",u=e.v?"1":"0";break;case"e":h="Error",u=Qt[e.v];break;case"d":h="DateTime",u=new Date(e.v).toISOString();break;case"s":h="String",u=K(e.v||"")}var d=null!=e.v?u:"";if(n&&"binary"==n.type&&"undefined"!=typeof cptable&&"s"==e.t){d=cptable.utils.encode(65001,d);for(var p="",g=0;g'+d+"";return 0<(e.c||[]).length&&(m+=e.c.map(function(e){return _e("Comment",_e("ss:Data",J(e.t||""),{xmlns:"http://www.w3.org/TR/REC-html40"}),{"ss:Author":e.a})}).join("")),_e("Cell",m,o)}function Ku(e,t,r){var n=[],a=r.SheetNames[e],s=r.Sheets[a],i=s?function(e,t,r,n){if(!e["!ref"])return"";var a=_t(e["!ref"]),s=e["!merges"]||[],i=0,o=[];e["!cols"]&&e["!cols"].forEach(function(e,t){nf(e);var r=!!e.width,n=_h(t,e),a={"ss:Index":t+1};r&&(a["ss:Width"]=qc(n.width)),e.hidden&&(a["ss:Hidden"]="1"),o.push(_e("Column",null,a))});for(var l,c,f,h=Array.isArray(e),u=a.s.r;u<=a.e.r;++u){for(var d=[(l=u,c=(e["!rows"]||[])[u],f=void 0,f='")],p=a.s.c;p<=a.e.c;++p){var g=!1;for(i=0;i!=s.length;++i)if(!(s[i].s.c>p||s[i].s.r>u||s[i].e.c"),2"+i+""),n.push(function(t,e,r,n){if(!t)return"";var a=[];if(t["!margins"]&&(a.push(""),t["!margins"].header&&a.push(_e("Header",null,{"x:Margin":t["!margins"].header})),t["!margins"].footer&&a.push(_e("Footer",null,{"x:Margin":t["!margins"].footer})),a.push(_e("PageMargins",null,{"x:Bottom":t["!margins"].bottom||"0.75","x:Left":t["!margins"].left||"0.7","x:Right":t["!margins"].right||"0.7","x:Top":t["!margins"].top||"0.75"})),a.push("")),n&&n.Workbook&&n.Workbook.Sheets&&n.Workbook.Sheets[r])if(n.Workbook.Sheets[r].Hidden)a.push(_e("Visible",1==n.Workbook.Sheets[r].Hidden?"SheetHidden":"SheetVeryHidden",{}));else{for(var s=0;s")}return t["!protect"]&&(a.push(Ae("ProtectContents","True")),t["!protect"].objects&&a.push(Ae("ProtectObjects","True")),t["!protect"].scenarios&&a.push(Ae("ProtectScenarios","True")),null==t["!protect"].selectLockedCells||t["!protect"].selectLockedCells?null==t["!protect"].selectUnlockedCells||t["!protect"].selectUnlockedCells||a.push(Ae("EnableSelection","UnlockedCells")):a.push(Ae("EnableSelection","NoSelection")),[["formatColumns","AllowFormatCells"],["formatRows","AllowSizeCols"],["formatCells","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(e){t["!protect"][e[0]]&&a.push("<"+e[1]+"/>")})),0==a.length?"":_e("WorksheetOptions",a.join(""),{xmlns:je.x})}(s,0,e,r)),n.join("")}function $u(e,t,r,n){var a=r,s=[],i=t.slice(t.l,t.l+a);if(n&&n.enc&&n.enc.insitu_decrypt)switch(e.n){case"BOF":case"FilePass":case"FileLock":case"InterfaceHdr":case"RRDInfo":case"RRDHead":case"UsrExcl":break;default:if(0===i.length)break;n.enc.insitu_decrypt(i)}s.push(i),t.l+=a;for(var o=rd[$e(t,t.l)],l=0;null!=o&&"Continue"===o.n.slice(0,8);)a=$e(t,t.l+2),l=t.l+4,"ContinueFrt"==o.n?l+=4:"ContinueFrt"==o.n.slice(0,11)&&(l+=12),s.push(t.slice(l,t.l+4+a)),t.l+=4+a,o=rd[$e(t,t.l)];var c=p(s);it(c,0);var f=0;c.lens=[];for(var h=0;hd.e.r&&(d.e.r=e.r+1),e.c+1>d.e.c&&(d.e.c=e.c+1)),r.cellFormula&&t.f)for(var o=0;oe.c||C[o][0].s.r>e.r||C[o][0].e.c=r.sheetRows?S=!1:r.dense?(h[e.r]||(h[e.r]=[]),h[e.r][e.c]=t):h[v]=t}},y={enc:!1,sbcch:0,snames:[],sharedf:E,arrayf:C,rrtabid:[],lastuser:"",biff:8,codepage:0,winlocked:0,cellStyles:!!t&&!!t.cellStyles,WTF:!!t&&!!t.wtf};t.password&&(y.password=t.password);var x=[],R=[],I=[],O=[],D=!1,P=[];P.SheetNames=y.snames,P.sharedf=y.sharedf,P.arrayf=y.arrayf,P.names=[],P.XTI=[];var F,N="",L=0,M=0,U=[],W=[];for(y.codepage=1200,le(1200);e.l>8&31]),Zu(c,t,r.opts.Date1904),k({c:j.c,r:j.r},c,t);break;case"BoolErr":c={ixfe:j.ixfe,XF:w[j.ixfe],v:j.val,t:j.t},0>8&31]),Zu(c,t,r.opts.Date1904),k({c:j.c,r:j.r},c,t);break;case"RK":c={ixfe:j.ixfe,XF:w[j.ixfe],v:j.rknum,t:"n"},0>8&31]),Zu(c,t,r.opts.Date1904),k({c:j.c,r:j.r},c,t);break;case"MulRk":for(var $=j.c;$<=j.C;++$){var Z=j.rkrec[$-j.c][0];c={ixfe:Z,XF:w[Z],v:j.rkrec[$-j.c][1],t:"n"},0>8&31]),Zu(c,t,r.opts.Date1904),k({c:$,r:j.r},c,t)}break;case"Formula":if("String"==j.val){p=j;break}if((c=Qu(j.val,j.cell.ixfe,j.tt)).XF=w[c.ixfe],t.cellFormula){var Q=j.formula;if(Q&&Q[0]&&Q[0][0]&&"PtgExp"==Q[0][0][0]){var q=Q[0][0][1][0],J=Q[0][0][1][1],ee=wt({r:q,c:J});E[ee]?c.f=""+uh(j.formula,0,j.cell,P,y):c.F=((t.dense?(h[q]||[])[J]:h[ee])||{}).F}else c.f=""+uh(j.formula,0,j.cell,P,y)}0>8&31]),Zu(c,t,r.opts.Date1904),k(j.cell,c,t),p=j;break;case"String":if(!p)throw new Error("String record expects Formula");(c=Qu(p.val=j,p.cell.ixfe,"s")).XF=w[c.ixfe],t.cellFormula&&(c.f=""+uh(p.formula,0,p.cell,P,y)),0>8&31]),Zu(c,t,r.opts.Date1904),k(p.cell,c,t),p=null;break;case"Array":C.push(j);var te=wt(j[0].s);if(a=t.dense?(h[j[0].s.r]||[])[j[0].s.c]:h[te],t.cellFormula&&a){if(!p)break;if(!te||!a)break;a.f=""+uh(j[1],0,j[0],P,y),a.F=Bt(j[0])}break;case"ShrFmla":if(!S)break;if(!t.cellFormula)break;if(v){if(!p)break;E[wt(p.cell)]=j[0],((a=t.dense?(h[p.cell.r]||[])[p.cell.c]:h[wt(p.cell)])||{}).f=""+uh(j[0],0,l,P,y)}break;case"LabelSst":(c=Qu(g[j.isst].t,j.ixfe,"s")).XF=w[c.ixfe],0>8&31]),Zu(c,t,r.opts.Date1904),k({c:j.c,r:j.r},c,t);break;case"Blank":t.sheetStubs&&(c={ixfe:j.ixfe,XF:w[j.ixfe],t:"z"},0>8&31]),Zu(c,t,r.opts.Date1904),k({c:j.c,r:j.r},c,t));break;case"MulBlank":if(t.sheetStubs)for(var re=j.c;re<=j.C;++re){var ne=j.ixfe[re-j.c];c={ixfe:ne,XF:w[ne],t:"z"},0>8&31]),Zu(c,t,r.opts.Date1904),k({c:re,r:j.r},c,t)}break;case"RString":case"Label":case"BIFF2STR":(c=Qu(j.val,j.ixfe,"s")).XF=w[c.ixfe],0>8&31]),Zu(c,t,r.opts.Date1904),k({c:j.c,r:j.r},c,t);break;case"Dimensions":1===L&&(d=j);break;case"SST":g=j;break;case"Format":fe.load(j[1],j[0]);break;case"BIFF2FORMAT":U[M++]=j;for(var ae=0;ae=j.s;)I[j.e--]={width:j.w/256},D||(D=!0,rf(j.w/256)),nf(I[j.e+1]);break;case"Row":var ie={};null!=j.level&&((O[j.r]=ie).level=j.level),j.hidden&&((O[j.r]=ie).hidden=!0),j.hpt&&((O[j.r]=ie).hpt=j.hpt,ie.hpx=of(j.hpt));break;case"LeftMargin":case"RightMargin":case"TopMargin":case"BottomMargin":h["!margins"]||Th(h["!margins"]={}),h["!margins"][Y.slice(0,-6).toLowerCase()]=j;break;case"Setup":h["!margins"]||Th(h["!margins"]={}),h["!margins"].header=j.header,h["!margins"].footer=j.footer;break;case"Header":case"Footer":case"HCenter":case"VCenter":case"Pls":case"GCW":case"LHRecord":case"DBCell":case"EntExU2":case"SxView":case"Sxvd":case"SXVI":case"SXVDEx":case"SxIvd":case"SXString":case"Sync":case"Addin":case"SXDI":case"SXLI":case"SXEx":case"QsiSXTag":case"Selection":case"Feat":break;case"FeatHdr":case"FeatHdr11":break;case"Feature11":case"Feature12":case"List12":break;case"Country":f=j;break;case"RecalcId":case"DxGCol":break;case"Fbi":case"Fbi2":case"GelFrame":case"Font":case"XFCRC":case"Style":case"StyleExt":break;case"Palette":A=j;break;case"Theme":case"ScenarioProtect":case"ObjProtect":case"CondFmt12":case"Table":case"TableStyles":case"TableStyle":case"TableStyleElement":case"SXStreamID":case"SXVS":case"DConRef":case"SXAddl":case"DConBin":case"DConName":case"SXPI":case"SxFormat":case"SxSelect":case"SxRule":case"SxFilt":case"SxItm":case"SxDXF":case"ScenMan":case"DCon":case"CellWatch":case"PrintRowCol":case"PrintGrid":case"PrintSize":case"XCT":case"CRN":case"Scl":case"SheetExt":case"SheetExtOptional":case"ObNoMacros":case"ObProj":case"CodeName":case"GUIDTypeLib":case"WOpt":case"PhoneticInfo":case"OleObjectSize":break;case"DXF":case"DXFN":case"DXFN12":case"DXFN12List":case"DXFN12NoCB":break;case"Dv":case"DVal":break;case"BRAI":case"Series":case"SeriesText":case"DConn":case"DbOrParamQry":case"DBQueryExt":case"OleDbConn":case"ExtString":case"IFmtRecord":break;case"CondFmt":case"CF":case"CF12":case"CFEx":case"Excel9File":case"Units":break;case"InterfaceHdr":case"Mms":case"InterfaceEnd":case"DSF":case"BuiltInFnGroupCount":break;case"Window1":case"Window2":case"HideObj":case"GridSet":case"Guts":case"UserBView":case"UserSViewBegin":case"UserSViewEnd":case"Pane":break;default:switch(X.n){case"Dat":case"Begin":case"End":case"StartBlock":case"EndBlock":case"Frame":case"Area":case"Axis":case"AxisLine":case"Tick":break;case"AxesUsed":case"CrtLayout12":case"CrtLayout12A":case"CrtLink":case"CrtLine":case"CrtMlFrt":case"CrtMlFrtContinue":break;case"LineFormat":case"AreaFormat":case"Chart":case"Chart3d":case"Chart3DBarShape":case"ChartFormat":case"ChartFrtInfo":break;case"PlotArea":case"PlotGrowth":break;case"SeriesList":case"SerParent":case"SerAuxTrend":break;case"DataFormat":case"SerToCrt":case"FontX":break;case"CatSerRange":case"AxcExt":case"SerFmt":case"ShtProps":break;case"DefaultText":case"Text":case"CatLab":case"DataLabExtContents":break;case"Legend":case"LegendException":break;case"Pie":case"Scatter":break;case"PieFormat":case"MarkerFormat":break;case"StartObject":case"EndObject":break;case"AlRuns":case"ObjectLink":case"SIIndex":break;case"AttachedLabel":case"YMult":break;case"Line":case"Bar":case"Surf":case"AxisParent":case"Pos":case"ValueRange":case"SXViewEx9":case"SXViewLink":case"PivotChartBits":case"SBaseRef":case"TextPropsStream":case"LnExt":case"MkrExt":case"CrtCoopt":break;case"Qsi":case"Qsif":case"Qsir":case"QsiSXTag":case"TxtQry":case"FilterMode":break;case"AutoFilter":case"AutoFilterInfo":case"AutoFilter12":case"DropDownObjIds":case"Sort":case"SortData":case"ShapePropsStream":break;case"MsoDrawing":case"MsoDrawingGroup":case"MsoDrawingSelection":break;case"WebPub":case"AutoWebPub":break;case"HeaderFooter":case"HFPicture":case"PLV":case"HorizontalPageBreaks":case"VerticalPageBreaks":break;case"Backup":case"CompressPictures":case"Compat12":break;case"Continue":case"ContinueFrt12":break;case"FrtFontList":case"FrtWrapper":break;default:switch(X.n){case"TabIdConf":case"Radar":case"RadarArea":case"DropBar":case"Intl":case"CoordList":case"SerAuxErrBar":break;case"BIFF2FONTCLR":case"BIFF2FMTCNT":case"BIFF2FONTXTRA":break;case"BIFF2XF":case"BIFF3XF":case"BIFF4XF":break;case"BIFF4FMTCNT":case"BIFF2ROW":case"BIFF2WINDOW2":break;case"SCENARIO":case"DConBin":case"PicF":case"DataLabExt":case"Lel":case"BopPop":case"BopPopCustom":case"RealTimeData":case"Name":break;case"LHNGraph":case"FnGroupName":case"AddMenu":case"LPr":break;case"ListObj":case"ListField":case"RRSort":case"BigName":break;default:if(t.WTF)throw"Unrecognized Record "+X.n}}}}}else e.l+=V}var oe=Object.keys(u).sort(function(e,t){return Number(e)-Number(t)}).map(function(e){return u[e].name});oe.slice();return r.Directory=oe,r.SheetNames=oe,t.bookSheets||(r.Sheets=n),r.Sheets&&W.forEach(function(e,t){r.Sheets[r.SheetNames[t]]["!autofilter"]=e}),r.Preamble=b,r.Strings=g,r.SSF=fe.get_table(),y.enc&&(r.Encryption=y.enc),r.Metadata={},void 0!==f&&(r.Metadata.Country=f),0>>1,s=e.read_shift(1),i=e.read_shift(2,"i"),o=e.read_shift(1),l=e.read_shift(1),c=e.read_shift(1);switch(e.read_shift(1),a){case 0:r.auto=1;break;case 1:r.index=s;var f=hr[s];f&&(r.rgb=jc(f));break;case 2:r.rgb=jc([o,l,c]);break;case 3:r.theme=s}return 0!=i&&(r.tint=0>13&3],r.showPivotChartFilter=!!(32768&n),r.updateLinks=["userSet","never","always"][n>>8&3],r}},154:{n:"BrtWbFactoid",f:ot},155:{n:"BrtFileRecover",f:ot},156:{n:"BrtBundleSh",f:function(e,t){var r={};return r.Hidden=e.read_shift(4),r.iTabID=e.read_shift(4),r.strRelID=Vt(e,t-8),r.name=It(e),r}},157:{n:"BrtCalcProp",f:ot},158:{n:"BrtBookView",f:ot},159:{n:"BrtBeginSst",f:function(e,t){return[e.read_shift(4),e.read_shift(4)]}},160:{n:"BrtEndSst",f:ot},161:{n:"BrtBeginAFilter",f:Yt},162:{n:"BrtEndAFilter",f:ot},163:{n:"BrtBeginFilterColumn",f:ot},164:{n:"BrtEndFilterColumn",f:ot},165:{n:"BrtBeginFilters",f:ot},166:{n:"BrtEndFilters",f:ot},167:{n:"BrtFilter",f:ot},168:{n:"BrtColorFilter",f:ot},169:{n:"BrtIconFilter",f:ot},170:{n:"BrtTop10Filter",f:ot},171:{n:"BrtDynamicFilter",f:ot},172:{n:"BrtBeginCustomFilters",f:ot},173:{n:"BrtEndCustomFilters",f:ot},174:{n:"BrtCustomFilter",f:ot},175:{n:"BrtAFilterDateGroupItem",f:ot},176:{n:"BrtMergeCell",f:qh},177:{n:"BrtBeginMergeCells",f:ot},178:{n:"BrtEndMergeCells",f:ot},179:{n:"BrtBeginPivotCacheDef",f:ot},180:{n:"BrtEndPivotCacheDef",f:ot},181:{n:"BrtBeginPCDFields",f:ot},182:{n:"BrtEndPCDFields",f:ot},183:{n:"BrtBeginPCDField",f:ot},184:{n:"BrtEndPCDField",f:ot},185:{n:"BrtBeginPCDSource",f:ot},186:{n:"BrtEndPCDSource",f:ot},187:{n:"BrtBeginPCDSRange",f:ot},188:{n:"BrtEndPCDSRange",f:ot},189:{n:"BrtBeginPCDFAtbl",f:ot},190:{n:"BrtEndPCDFAtbl",f:ot},191:{n:"BrtBeginPCDIRun",f:ot},192:{n:"BrtEndPCDIRun",f:ot},193:{n:"BrtBeginPivotCacheRecords",f:ot},194:{n:"BrtEndPivotCacheRecords",f:ot},195:{n:"BrtBeginPCDHierarchies",f:ot},196:{n:"BrtEndPCDHierarchies",f:ot},197:{n:"BrtBeginPCDHierarchy",f:ot},198:{n:"BrtEndPCDHierarchy",f:ot},199:{n:"BrtBeginPCDHFieldsUsage",f:ot},200:{n:"BrtEndPCDHFieldsUsage",f:ot},201:{n:"BrtBeginExtConnection",f:ot},202:{n:"BrtEndExtConnection",f:ot},203:{n:"BrtBeginECDbProps",f:ot},204:{n:"BrtEndECDbProps",f:ot},205:{n:"BrtBeginECOlapProps",f:ot},206:{n:"BrtEndECOlapProps",f:ot},207:{n:"BrtBeginPCDSConsol",f:ot},208:{n:"BrtEndPCDSConsol",f:ot},209:{n:"BrtBeginPCDSCPages",f:ot},210:{n:"BrtEndPCDSCPages",f:ot},211:{n:"BrtBeginPCDSCPage",f:ot},212:{n:"BrtEndPCDSCPage",f:ot},213:{n:"BrtBeginPCDSCPItem",f:ot},214:{n:"BrtEndPCDSCPItem",f:ot},215:{n:"BrtBeginPCDSCSets",f:ot},216:{n:"BrtEndPCDSCSets",f:ot},217:{n:"BrtBeginPCDSCSet",f:ot},218:{n:"BrtEndPCDSCSet",f:ot},219:{n:"BrtBeginPCDFGroup",f:ot},220:{n:"BrtEndPCDFGroup",f:ot},221:{n:"BrtBeginPCDFGItems",f:ot},222:{n:"BrtEndPCDFGItems",f:ot},223:{n:"BrtBeginPCDFGRange",f:ot},224:{n:"BrtEndPCDFGRange",f:ot},225:{n:"BrtBeginPCDFGDiscrete",f:ot},226:{n:"BrtEndPCDFGDiscrete",f:ot},227:{n:"BrtBeginPCDSDTupleCache",f:ot},228:{n:"BrtEndPCDSDTupleCache",f:ot},229:{n:"BrtBeginPCDSDTCEntries",f:ot},230:{n:"BrtEndPCDSDTCEntries",f:ot},231:{n:"BrtBeginPCDSDTCEMembers",f:ot},232:{n:"BrtEndPCDSDTCEMembers",f:ot},233:{n:"BrtBeginPCDSDTCEMember",f:ot},234:{n:"BrtEndPCDSDTCEMember",f:ot},235:{n:"BrtBeginPCDSDTCQueries",f:ot},236:{n:"BrtEndPCDSDTCQueries",f:ot},237:{n:"BrtBeginPCDSDTCQuery",f:ot},238:{n:"BrtEndPCDSDTCQuery",f:ot},239:{n:"BrtBeginPCDSDTCSets",f:ot},240:{n:"BrtEndPCDSDTCSets",f:ot},241:{n:"BrtBeginPCDSDTCSet",f:ot},242:{n:"BrtEndPCDSDTCSet",f:ot},243:{n:"BrtBeginPCDCalcItems",f:ot},244:{n:"BrtEndPCDCalcItems",f:ot},245:{n:"BrtBeginPCDCalcItem",f:ot},246:{n:"BrtEndPCDCalcItem",f:ot},247:{n:"BrtBeginPRule",f:ot},248:{n:"BrtEndPRule",f:ot},249:{n:"BrtBeginPRFilters",f:ot},250:{n:"BrtEndPRFilters",f:ot},251:{n:"BrtBeginPRFilter",f:ot},252:{n:"BrtEndPRFilter",f:ot},253:{n:"BrtBeginPNames",f:ot},254:{n:"BrtEndPNames",f:ot},255:{n:"BrtBeginPName",f:ot},256:{n:"BrtEndPName",f:ot},257:{n:"BrtBeginPNPairs",f:ot},258:{n:"BrtEndPNPairs",f:ot},259:{n:"BrtBeginPNPair",f:ot},260:{n:"BrtEndPNPair",f:ot},261:{n:"BrtBeginECWebProps",f:ot},262:{n:"BrtEndECWebProps",f:ot},263:{n:"BrtBeginEcWpTables",f:ot},264:{n:"BrtEndECWPTables",f:ot},265:{n:"BrtBeginECParams",f:ot},266:{n:"BrtEndECParams",f:ot},267:{n:"BrtBeginECParam",f:ot},268:{n:"BrtEndECParam",f:ot},269:{n:"BrtBeginPCDKPIs",f:ot},270:{n:"BrtEndPCDKPIs",f:ot},271:{n:"BrtBeginPCDKPI",f:ot},272:{n:"BrtEndPCDKPI",f:ot},273:{n:"BrtBeginDims",f:ot},274:{n:"BrtEndDims",f:ot},275:{n:"BrtBeginDim",f:ot},276:{n:"BrtEndDim",f:ot},277:{n:"BrtIndexPartEnd",f:ot},278:{n:"BrtBeginStyleSheet",f:ot},279:{n:"BrtEndStyleSheet",f:ot},280:{n:"BrtBeginSXView",f:ot},281:{n:"BrtEndSXVI",f:ot},282:{n:"BrtBeginSXVI",f:ot},283:{n:"BrtBeginSXVIs",f:ot},284:{n:"BrtEndSXVIs",f:ot},285:{n:"BrtBeginSXVD",f:ot},286:{n:"BrtEndSXVD",f:ot},287:{n:"BrtBeginSXVDs",f:ot},288:{n:"BrtEndSXVDs",f:ot},289:{n:"BrtBeginSXPI",f:ot},290:{n:"BrtEndSXPI",f:ot},291:{n:"BrtBeginSXPIs",f:ot},292:{n:"BrtEndSXPIs",f:ot},293:{n:"BrtBeginSXDI",f:ot},294:{n:"BrtEndSXDI",f:ot},295:{n:"BrtBeginSXDIs",f:ot},296:{n:"BrtEndSXDIs",f:ot},297:{n:"BrtBeginSXLI",f:ot},298:{n:"BrtEndSXLI",f:ot},299:{n:"BrtBeginSXLIRws",f:ot},300:{n:"BrtEndSXLIRws",f:ot},301:{n:"BrtBeginSXLICols",f:ot},302:{n:"BrtEndSXLICols",f:ot},303:{n:"BrtBeginSXFormat",f:ot},304:{n:"BrtEndSXFormat",f:ot},305:{n:"BrtBeginSXFormats",f:ot},306:{n:"BrtEndSxFormats",f:ot},307:{n:"BrtBeginSxSelect",f:ot},308:{n:"BrtEndSxSelect",f:ot},309:{n:"BrtBeginISXVDRws",f:ot},310:{n:"BrtEndISXVDRws",f:ot},311:{n:"BrtBeginISXVDCols",f:ot},312:{n:"BrtEndISXVDCols",f:ot},313:{n:"BrtEndSXLocation",f:ot},314:{n:"BrtBeginSXLocation",f:ot},315:{n:"BrtEndSXView",f:ot},316:{n:"BrtBeginSXTHs",f:ot},317:{n:"BrtEndSXTHs",f:ot},318:{n:"BrtBeginSXTH",f:ot},319:{n:"BrtEndSXTH",f:ot},320:{n:"BrtBeginISXTHRws",f:ot},321:{n:"BrtEndISXTHRws",f:ot},322:{n:"BrtBeginISXTHCols",f:ot},323:{n:"BrtEndISXTHCols",f:ot},324:{n:"BrtBeginSXTDMPS",f:ot},325:{n:"BrtEndSXTDMPs",f:ot},326:{n:"BrtBeginSXTDMP",f:ot},327:{n:"BrtEndSXTDMP",f:ot},328:{n:"BrtBeginSXTHItems",f:ot},329:{n:"BrtEndSXTHItems",f:ot},330:{n:"BrtBeginSXTHItem",f:ot},331:{n:"BrtEndSXTHItem",f:ot},332:{n:"BrtBeginMetadata",f:ot},333:{n:"BrtEndMetadata",f:ot},334:{n:"BrtBeginEsmdtinfo",f:ot},335:{n:"BrtMdtinfo",f:ot},336:{n:"BrtEndEsmdtinfo",f:ot},337:{n:"BrtBeginEsmdb",f:ot},338:{n:"BrtEndEsmdb",f:ot},339:{n:"BrtBeginEsfmd",f:ot},340:{n:"BrtEndEsfmd",f:ot},341:{n:"BrtBeginSingleCells",f:ot},342:{n:"BrtEndSingleCells",f:ot},343:{n:"BrtBeginList",f:ot},344:{n:"BrtEndList",f:ot},345:{n:"BrtBeginListCols",f:ot},346:{n:"BrtEndListCols",f:ot},347:{n:"BrtBeginListCol",f:ot},348:{n:"BrtEndListCol",f:ot},349:{n:"BrtBeginListXmlCPr",f:ot},350:{n:"BrtEndListXmlCPr",f:ot},351:{n:"BrtListCCFmla",f:ot},352:{n:"BrtListTrFmla",f:ot},353:{n:"BrtBeginExternals",f:ot},354:{n:"BrtEndExternals",f:ot},355:{n:"BrtSupBookSrc",f:Vt},357:{n:"BrtSupSelf",f:ot},358:{n:"BrtSupSame",f:ot},359:{n:"BrtSupTabs",f:ot},360:{n:"BrtBeginSupBook",f:ot},361:{n:"BrtPlaceholderName",f:ot},362:{n:"BrtExternSheet",f:yn},363:{n:"BrtExternTableStart",f:ot},364:{n:"BrtExternTableEnd",f:ot},366:{n:"BrtExternRowHdr",f:ot},367:{n:"BrtExternCellBlank",f:ot},368:{n:"BrtExternCellReal",f:ot},369:{n:"BrtExternCellBool",f:ot},370:{n:"BrtExternCellError",f:ot},371:{n:"BrtExternCellString",f:ot},372:{n:"BrtBeginEsmdx",f:ot},373:{n:"BrtEndEsmdx",f:ot},374:{n:"BrtBeginMdxSet",f:ot},375:{n:"BrtEndMdxSet",f:ot},376:{n:"BrtBeginMdxMbrProp",f:ot},377:{n:"BrtEndMdxMbrProp",f:ot},378:{n:"BrtBeginMdxKPI",f:ot},379:{n:"BrtEndMdxKPI",f:ot},380:{n:"BrtBeginEsstr",f:ot},381:{n:"BrtEndEsstr",f:ot},382:{n:"BrtBeginPRFItem",f:ot},383:{n:"BrtEndPRFItem",f:ot},384:{n:"BrtBeginPivotCacheIDs",f:ot},385:{n:"BrtEndPivotCacheIDs",f:ot},386:{n:"BrtBeginPivotCacheID",f:ot},387:{n:"BrtEndPivotCacheID",f:ot},388:{n:"BrtBeginISXVIs",f:ot},389:{n:"BrtEndISXVIs",f:ot},390:{n:"BrtBeginColInfos",f:ot},391:{n:"BrtEndColInfos",f:ot},392:{n:"BrtBeginRwBrk",f:ot},393:{n:"BrtEndRwBrk",f:ot},394:{n:"BrtBeginColBrk",f:ot},395:{n:"BrtEndColBrk",f:ot},396:{n:"BrtBrk",f:ot},397:{n:"BrtUserBookView",f:ot},398:{n:"BrtInfo",f:ot},399:{n:"BrtCUsr",f:ot},400:{n:"BrtUsr",f:ot},401:{n:"BrtBeginUsers",f:ot},403:{n:"BrtEOF",f:ot},404:{n:"BrtUCR",f:ot},405:{n:"BrtRRInsDel",f:ot},406:{n:"BrtRREndInsDel",f:ot},407:{n:"BrtRRMove",f:ot},408:{n:"BrtRREndMove",f:ot},409:{n:"BrtRRChgCell",f:ot},410:{n:"BrtRREndChgCell",f:ot},411:{n:"BrtRRHeader",f:ot},412:{n:"BrtRRUserView",f:ot},413:{n:"BrtRRRenSheet",f:ot},414:{n:"BrtRRInsertSh",f:ot},415:{n:"BrtRRDefName",f:ot},416:{n:"BrtRRNote",f:ot},417:{n:"BrtRRConflict",f:ot},418:{n:"BrtRRTQSIF",f:ot},419:{n:"BrtRRFormat",f:ot},420:{n:"BrtRREndFormat",f:ot},421:{n:"BrtRRAutoFmt",f:ot},422:{n:"BrtBeginUserShViews",f:ot},423:{n:"BrtBeginUserShView",f:ot},424:{n:"BrtEndUserShView",f:ot},425:{n:"BrtEndUserShViews",f:ot},426:{n:"BrtArrFmla",f:function(e,t,r){var n=e.l+t,a=jt(e),s=e.read_shift(1),i=[a];if(i[2]=s,r.cellFormula){var o=ph(e,n-e.l,r);i[1]=o}else e.l=n;return i}},427:{n:"BrtShrFmla",f:function(e,t,r){var n=e.l+t,a=[Yt(e,16)];if(r.cellFormula){var s=bh(e,n-e.l,r);a[1]=s,e.l=n}else e.l=n;return a}},428:{n:"BrtTable",f:ot},429:{n:"BrtBeginExtConnections",f:ot},430:{n:"BrtEndExtConnections",f:ot},431:{n:"BrtBeginPCDCalcMems",f:ot},432:{n:"BrtEndPCDCalcMems",f:ot},433:{n:"BrtBeginPCDCalcMem",f:ot},434:{n:"BrtEndPCDCalcMem",f:ot},435:{n:"BrtBeginPCDHGLevels",f:ot},436:{n:"BrtEndPCDHGLevels",f:ot},437:{n:"BrtBeginPCDHGLevel",f:ot},438:{n:"BrtEndPCDHGLevel",f:ot},439:{n:"BrtBeginPCDHGLGroups",f:ot},440:{n:"BrtEndPCDHGLGroups",f:ot},441:{n:"BrtBeginPCDHGLGroup",f:ot},442:{n:"BrtEndPCDHGLGroup",f:ot},443:{n:"BrtBeginPCDHGLGMembers",f:ot},444:{n:"BrtEndPCDHGLGMembers",f:ot},445:{n:"BrtBeginPCDHGLGMember",f:ot},446:{n:"BrtEndPCDHGLGMember",f:ot},447:{n:"BrtBeginQSI",f:ot},448:{n:"BrtEndQSI",f:ot},449:{n:"BrtBeginQSIR",f:ot},450:{n:"BrtEndQSIR",f:ot},451:{n:"BrtBeginDeletedNames",f:ot},452:{n:"BrtEndDeletedNames",f:ot},453:{n:"BrtBeginDeletedName",f:ot},454:{n:"BrtEndDeletedName",f:ot},455:{n:"BrtBeginQSIFs",f:ot},456:{n:"BrtEndQSIFs",f:ot},457:{n:"BrtBeginQSIF",f:ot},458:{n:"BrtEndQSIF",f:ot},459:{n:"BrtBeginAutoSortScope",f:ot},460:{n:"BrtEndAutoSortScope",f:ot},461:{n:"BrtBeginConditionalFormatting",f:ot},462:{n:"BrtEndConditionalFormatting",f:ot},463:{n:"BrtBeginCFRule",f:ot},464:{n:"BrtEndCFRule",f:ot},465:{n:"BrtBeginIconSet",f:ot},466:{n:"BrtEndIconSet",f:ot},467:{n:"BrtBeginDatabar",f:ot},468:{n:"BrtEndDatabar",f:ot},469:{n:"BrtBeginColorScale",f:ot},470:{n:"BrtEndColorScale",f:ot},471:{n:"BrtCFVO",f:ot},472:{n:"BrtExternValueMeta",f:ot},473:{n:"BrtBeginColorPalette",f:ot},474:{n:"BrtEndColorPalette",f:ot},475:{n:"BrtIndexedColor",f:ot},476:{n:"BrtMargins",f:function(e,t,r){return{left:$t(e),right:$t(e),top:$t(e),bottom:$t(e),header:$t(e),footer:$t(e)}}},477:{n:"BrtPrintOptions",f:ot},478:{n:"BrtPageSetup",f:ot},479:{n:"BrtBeginHeaderFooter",f:ot},480:{n:"BrtEndHeaderFooter",f:ot},481:{n:"BrtBeginSXCrtFormat",f:ot},482:{n:"BrtEndSXCrtFormat",f:ot},483:{n:"BrtBeginSXCrtFormats",f:ot},484:{n:"BrtEndSXCrtFormats",f:ot},485:{n:"BrtWsFmtInfo",f:function(e,t){}},486:{n:"BrtBeginMgs",f:ot},487:{n:"BrtEndMGs",f:ot},488:{n:"BrtBeginMGMaps",f:ot},489:{n:"BrtEndMGMaps",f:ot},490:{n:"BrtBeginMG",f:ot},491:{n:"BrtEndMG",f:ot},492:{n:"BrtBeginMap",f:ot},493:{n:"BrtEndMap",f:ot},494:{n:"BrtHLink",f:function(e,t,r){var n=e.l+t,a=Yt(e,16),s=Wt(e),i=It(e),o=It(e),l=It(e);return e.l=n,{rfx:a,relId:s,loc:i,Tooltip:o,display:l}}},495:{n:"BrtBeginDCon",f:ot},496:{n:"BrtEndDCon",f:ot},497:{n:"BrtBeginDRefs",f:ot},498:{n:"BrtEndDRefs",f:ot},499:{n:"BrtDRef",f:ot},500:{n:"BrtBeginScenMan",f:ot},501:{n:"BrtEndScenMan",f:ot},502:{n:"BrtBeginSct",f:ot},503:{n:"BrtEndSct",f:ot},504:{n:"BrtSlc",f:ot},505:{n:"BrtBeginDXFs",f:ot},506:{n:"BrtEndDXFs",f:ot},507:{n:"BrtDXF",f:ot},508:{n:"BrtBeginTableStyles",f:ot},509:{n:"BrtEndTableStyles",f:ot},510:{n:"BrtBeginTableStyle",f:ot},511:{n:"BrtEndTableStyle",f:ot},512:{n:"BrtTableStyleElement",f:ot},513:{n:"BrtTableStyleClient",f:ot},514:{n:"BrtBeginVolDeps",f:ot},515:{n:"BrtEndVolDeps",f:ot},516:{n:"BrtBeginVolType",f:ot},517:{n:"BrtEndVolType",f:ot},518:{n:"BrtBeginVolMain",f:ot},519:{n:"BrtEndVolMain",f:ot},520:{n:"BrtBeginVolTopic",f:ot},521:{n:"BrtEndVolTopic",f:ot},522:{n:"BrtVolSubtopic",f:ot},523:{n:"BrtVolRef",f:ot},524:{n:"BrtVolNum",f:ot},525:{n:"BrtVolErr",f:ot},526:{n:"BrtVolStr",f:ot},527:{n:"BrtVolBool",f:ot},528:{n:"BrtBeginCalcChain$",f:ot},529:{n:"BrtEndCalcChain$",f:ot},530:{n:"BrtBeginSortState",f:ot},531:{n:"BrtEndSortState",f:ot},532:{n:"BrtBeginSortCond",f:ot},533:{n:"BrtEndSortCond",f:ot},534:{n:"BrtBookProtection",f:ot},535:{n:"BrtSheetProtection",f:ot},536:{n:"BrtRangeProtection",f:ot},537:{n:"BrtPhoneticInfo",f:ot},538:{n:"BrtBeginECTxtWiz",f:ot},539:{n:"BrtEndECTxtWiz",f:ot},540:{n:"BrtBeginECTWFldInfoLst",f:ot},541:{n:"BrtEndECTWFldInfoLst",f:ot},542:{n:"BrtBeginECTwFldInfo",f:ot},548:{n:"BrtFileSharing",f:ot},549:{n:"BrtOleSize",f:ot},550:{n:"BrtDrawing",f:Vt},551:{n:"BrtLegacyDrawing",f:ot},552:{n:"BrtLegacyDrawingHF",f:ot},553:{n:"BrtWebOpt",f:ot},554:{n:"BrtBeginWebPubItems",f:ot},555:{n:"BrtEndWebPubItems",f:ot},556:{n:"BrtBeginWebPubItem",f:ot},557:{n:"BrtEndWebPubItem",f:ot},558:{n:"BrtBeginSXCondFmt",f:ot},559:{n:"BrtEndSXCondFmt",f:ot},560:{n:"BrtBeginSXCondFmts",f:ot},561:{n:"BrtEndSXCondFmts",f:ot},562:{n:"BrtBkHim",f:ot},564:{n:"BrtColor",f:ot},565:{n:"BrtBeginIndexedColors",f:ot},566:{n:"BrtEndIndexedColors",f:ot},569:{n:"BrtBeginMRUColors",f:ot},570:{n:"BrtEndMRUColors",f:ot},572:{n:"BrtMRUColor",f:ot},573:{n:"BrtBeginDVals",f:ot},574:{n:"BrtEndDVals",f:ot},577:{n:"BrtSupNameStart",f:ot},578:{n:"BrtSupNameValueStart",f:ot},579:{n:"BrtSupNameValueEnd",f:ot},580:{n:"BrtSupNameNum",f:ot},581:{n:"BrtSupNameErr",f:ot},582:{n:"BrtSupNameSt",f:ot},583:{n:"BrtSupNameNil",f:ot},584:{n:"BrtSupNameBool",f:ot},585:{n:"BrtSupNameFmla",f:ot},586:{n:"BrtSupNameBits",f:ot},587:{n:"BrtSupNameEnd",f:ot},588:{n:"BrtEndSupBook",f:ot},589:{n:"BrtCellSmartTagProperty",f:ot},590:{n:"BrtBeginCellSmartTag",f:ot},591:{n:"BrtEndCellSmartTag",f:ot},592:{n:"BrtBeginCellSmartTags",f:ot},593:{n:"BrtEndCellSmartTags",f:ot},594:{n:"BrtBeginSmartTags",f:ot},595:{n:"BrtEndSmartTags",f:ot},596:{n:"BrtSmartTagType",f:ot},597:{n:"BrtBeginSmartTagTypes",f:ot},598:{n:"BrtEndSmartTagTypes",f:ot},599:{n:"BrtBeginSXFilters",f:ot},600:{n:"BrtEndSXFilters",f:ot},601:{n:"BrtBeginSXFILTER",f:ot},602:{n:"BrtEndSXFilter",f:ot},603:{n:"BrtBeginFills",f:ot},604:{n:"BrtEndFills",f:ot},605:{n:"BrtBeginCellWatches",f:ot},606:{n:"BrtEndCellWatches",f:ot},607:{n:"BrtCellWatch",f:ot},608:{n:"BrtBeginCRErrs",f:ot},609:{n:"BrtEndCRErrs",f:ot},610:{n:"BrtCrashRecErr",f:ot},611:{n:"BrtBeginFonts",f:ot},612:{n:"BrtEndFonts",f:ot},613:{n:"BrtBeginBorders",f:ot},614:{n:"BrtEndBorders",f:ot},615:{n:"BrtBeginFmts",f:ot},616:{n:"BrtEndFmts",f:ot},617:{n:"BrtBeginCellXFs",f:ot},618:{n:"BrtEndCellXFs",f:ot},619:{n:"BrtBeginStyles",f:ot},620:{n:"BrtEndStyles",f:ot},625:{n:"BrtBigName",f:ot},626:{n:"BrtBeginCellStyleXFs",f:ot},627:{n:"BrtEndCellStyleXFs",f:ot},628:{n:"BrtBeginComments",f:ot},629:{n:"BrtEndComments",f:ot},630:{n:"BrtBeginCommentAuthors",f:ot},631:{n:"BrtEndCommentAuthors",f:ot},632:{n:"BrtCommentAuthor",f:Vf},633:{n:"BrtBeginCommentList",f:ot},634:{n:"BrtEndCommentList",f:ot},635:{n:"BrtBeginComment",f:function(e,t){var r={};r.iauthor=e.read_shift(4);var n=Yt(e,16);return r.rfx=n.s,r.ref=wt(n.s),e.l+=16,r}},636:{n:"BrtEndComment",f:ot},637:{n:"BrtCommentText",f:Pt},638:{n:"BrtBeginOleObjects",f:ot},639:{n:"BrtOleObject",f:ot},640:{n:"BrtEndOleObjects",f:ot},641:{n:"BrtBeginSxrules",f:ot},642:{n:"BrtEndSxRules",f:ot},643:{n:"BrtBeginActiveXControls",f:ot},644:{n:"BrtActiveX",f:ot},645:{n:"BrtEndActiveXControls",f:ot},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:ot},648:{n:"BrtBeginCellIgnoreECs",f:ot},649:{n:"BrtCellIgnoreEC",f:ot},650:{n:"BrtEndCellIgnoreECs",f:ot},651:{n:"BrtCsProp",f:ot},652:{n:"BrtCsPageSetup",f:ot},653:{n:"BrtBeginUserCsViews",f:ot},654:{n:"BrtEndUserCsViews",f:ot},655:{n:"BrtBeginUserCsView",f:ot},656:{n:"BrtEndUserCsView",f:ot},657:{n:"BrtBeginPcdSFCIEntries",f:ot},658:{n:"BrtEndPCDSFCIEntries",f:ot},659:{n:"BrtPCDSFCIEntry",f:ot},660:{n:"BrtBeginListParts",f:ot},661:{n:"BrtListPart",f:ot},662:{n:"BrtEndListParts",f:ot},663:{n:"BrtSheetCalcProp",f:ot},664:{n:"BrtBeginFnGroup",f:ot},665:{n:"BrtFnGroup",f:ot},666:{n:"BrtEndFnGroup",f:ot},667:{n:"BrtSupAddin",f:ot},668:{n:"BrtSXTDMPOrder",f:ot},669:{n:"BrtCsProtection",f:ot},671:{n:"BrtBeginWsSortMap",f:ot},672:{n:"BrtEndWsSortMap",f:ot},673:{n:"BrtBeginRRSort",f:ot},674:{n:"BrtEndRRSort",f:ot},675:{n:"BrtRRSortItem",f:ot},676:{n:"BrtFileSharingIso",f:ot},677:{n:"BrtBookProtectionIso",f:ot},678:{n:"BrtSheetProtectionIso",f:ot},679:{n:"BrtCsProtectionIso",f:ot},680:{n:"BrtRangeProtectionIso",f:ot},1024:{n:"BrtRwDescent",f:ot},1025:{n:"BrtKnownFonts",f:ot},1026:{n:"BrtBeginSXTupleSet",f:ot},1027:{n:"BrtEndSXTupleSet",f:ot},1028:{n:"BrtBeginSXTupleSetHeader",f:ot},1029:{n:"BrtEndSXTupleSetHeader",f:ot},1030:{n:"BrtSXTupleSetHeaderItem",f:ot},1031:{n:"BrtBeginSXTupleSetData",f:ot},1032:{n:"BrtEndSXTupleSetData",f:ot},1033:{n:"BrtBeginSXTupleSetRow",f:ot},1034:{n:"BrtEndSXTupleSetRow",f:ot},1035:{n:"BrtSXTupleSetRowItem",f:ot},1036:{n:"BrtNameExt",f:ot},1037:{n:"BrtPCDH14",f:ot},1038:{n:"BrtBeginPCDCalcMem14",f:ot},1039:{n:"BrtEndPCDCalcMem14",f:ot},1040:{n:"BrtSXTH14",f:ot},1041:{n:"BrtBeginSparklineGroup",f:ot},1042:{n:"BrtEndSparklineGroup",f:ot},1043:{n:"BrtSparkline",f:ot},1044:{n:"BrtSXDI14",f:ot},1045:{n:"BrtWsFmtInfoEx14",f:ot},1046:{n:"BrtBeginConditionalFormatting14",f:ot},1047:{n:"BrtEndConditionalFormatting14",f:ot},1048:{n:"BrtBeginCFRule14",f:ot},1049:{n:"BrtEndCFRule14",f:ot},1050:{n:"BrtCFVO14",f:ot},1051:{n:"BrtBeginDatabar14",f:ot},1052:{n:"BrtBeginIconSet14",f:ot},1053:{n:"BrtDVal14",f:ot},1054:{n:"BrtBeginDVals14",f:ot},1055:{n:"BrtColor14",f:ot},1056:{n:"BrtBeginSparklines",f:ot},1057:{n:"BrtEndSparklines",f:ot},1058:{n:"BrtBeginSparklineGroups",f:ot},1059:{n:"BrtEndSparklineGroups",f:ot},1061:{n:"BrtSXVD14",f:ot},1062:{n:"BrtBeginSxview14",f:ot},1063:{n:"BrtEndSxview14",f:ot},1066:{n:"BrtBeginPCD14",f:ot},1067:{n:"BrtEndPCD14",f:ot},1068:{n:"BrtBeginExtConn14",f:ot},1069:{n:"BrtEndExtConn14",f:ot},1070:{n:"BrtBeginSlicerCacheIDs",f:ot},1071:{n:"BrtEndSlicerCacheIDs",f:ot},1072:{n:"BrtBeginSlicerCacheID",f:ot},1073:{n:"BrtEndSlicerCacheID",f:ot},1075:{n:"BrtBeginSlicerCache",f:ot},1076:{n:"BrtEndSlicerCache",f:ot},1077:{n:"BrtBeginSlicerCacheDef",f:ot},1078:{n:"BrtEndSlicerCacheDef",f:ot},1079:{n:"BrtBeginSlicersEx",f:ot},1080:{n:"BrtEndSlicersEx",f:ot},1081:{n:"BrtBeginSlicerEx",f:ot},1082:{n:"BrtEndSlicerEx",f:ot},1083:{n:"BrtBeginSlicer",f:ot},1084:{n:"BrtEndSlicer",f:ot},1085:{n:"BrtSlicerCachePivotTables",f:ot},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:ot},1087:{n:"BrtEndSlicerCacheOlapImpl",f:ot},1088:{n:"BrtBeginSlicerCacheLevelsData",f:ot},1089:{n:"BrtEndSlicerCacheLevelsData",f:ot},1090:{n:"BrtBeginSlicerCacheLevelData",f:ot},1091:{n:"BrtEndSlicerCacheLevelData",f:ot},1092:{n:"BrtBeginSlicerCacheSiRanges",f:ot},1093:{n:"BrtEndSlicerCacheSiRanges",f:ot},1094:{n:"BrtBeginSlicerCacheSiRange",f:ot},1095:{n:"BrtEndSlicerCacheSiRange",f:ot},1096:{n:"BrtSlicerCacheOlapItem",f:ot},1097:{n:"BrtBeginSlicerCacheSelections",f:ot},1098:{n:"BrtSlicerCacheSelection",f:ot},1099:{n:"BrtEndSlicerCacheSelections",f:ot},1100:{n:"BrtBeginSlicerCacheNative",f:ot},1101:{n:"BrtEndSlicerCacheNative",f:ot},1102:{n:"BrtSlicerCacheNativeItem",f:ot},1103:{n:"BrtRangeProtection14",f:ot},1104:{n:"BrtRangeProtectionIso14",f:ot},1105:{n:"BrtCellIgnoreEC14",f:ot},1111:{n:"BrtList14",f:ot},1112:{n:"BrtCFIcon",f:ot},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:ot},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:ot},1115:{n:"BrtBeginSlicers",f:ot},1116:{n:"BrtEndSlicers",f:ot},1117:{n:"BrtWbProp14",f:ot},1118:{n:"BrtBeginSXEdit",f:ot},1119:{n:"BrtEndSXEdit",f:ot},1120:{n:"BrtBeginSXEdits",f:ot},1121:{n:"BrtEndSXEdits",f:ot},1122:{n:"BrtBeginSXChange",f:ot},1123:{n:"BrtEndSXChange",f:ot},1124:{n:"BrtBeginSXChanges",f:ot},1125:{n:"BrtEndSXChanges",f:ot},1126:{n:"BrtSXTupleItems",f:ot},1128:{n:"BrtBeginSlicerStyle",f:ot},1129:{n:"BrtEndSlicerStyle",f:ot},1130:{n:"BrtSlicerStyleElement",f:ot},1131:{n:"BrtBeginStyleSheetExt14",f:ot},1132:{n:"BrtEndStyleSheetExt14",f:ot},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:ot},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:ot},1135:{n:"BrtBeginConditionalFormattings",f:ot},1136:{n:"BrtEndConditionalFormattings",f:ot},1137:{n:"BrtBeginPCDCalcMemExt",f:ot},1138:{n:"BrtEndPCDCalcMemExt",f:ot},1139:{n:"BrtBeginPCDCalcMemsExt",f:ot},1140:{n:"BrtEndPCDCalcMemsExt",f:ot},1141:{n:"BrtPCDField14",f:ot},1142:{n:"BrtBeginSlicerStyles",f:ot},1143:{n:"BrtEndSlicerStyles",f:ot},1144:{n:"BrtBeginSlicerStyleElements",f:ot},1145:{n:"BrtEndSlicerStyleElements",f:ot},1146:{n:"BrtCFRuleExt",f:ot},1147:{n:"BrtBeginSXCondFmt14",f:ot},1148:{n:"BrtEndSXCondFmt14",f:ot},1149:{n:"BrtBeginSXCondFmts14",f:ot},1150:{n:"BrtEndSXCondFmts14",f:ot},1152:{n:"BrtBeginSortCond14",f:ot},1153:{n:"BrtEndSortCond14",f:ot},1154:{n:"BrtEndDVals14",f:ot},1155:{n:"BrtEndIconSet14",f:ot},1156:{n:"BrtEndDatabar14",f:ot},1157:{n:"BrtBeginColorScale14",f:ot},1158:{n:"BrtEndColorScale14",f:ot},1159:{n:"BrtBeginSxrules14",f:ot},1160:{n:"BrtEndSxrules14",f:ot},1161:{n:"BrtBeginPRule14",f:ot},1162:{n:"BrtEndPRule14",f:ot},1163:{n:"BrtBeginPRFilters14",f:ot},1164:{n:"BrtEndPRFilters14",f:ot},1165:{n:"BrtBeginPRFilter14",f:ot},1166:{n:"BrtEndPRFilter14",f:ot},1167:{n:"BrtBeginPRFItem14",f:ot},1168:{n:"BrtEndPRFItem14",f:ot},1169:{n:"BrtBeginCellIgnoreECs14",f:ot},1170:{n:"BrtEndCellIgnoreECs14",f:ot},1171:{n:"BrtDxf14",f:ot},1172:{n:"BrtBeginDxF14s",f:ot},1173:{n:"BrtEndDxf14s",f:ot},1177:{n:"BrtFilter14",f:ot},1178:{n:"BrtBeginCustomFilters14",f:ot},1180:{n:"BrtCustomFilter14",f:ot},1181:{n:"BrtIconFilter14",f:ot},1182:{n:"BrtPivotCacheConnectionName",f:ot},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:ot},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:ot},2050:{n:"BrtDecoupledPivotCacheID",f:ot},2051:{n:"BrtBeginPivotTableRefs",f:ot},2052:{n:"BrtEndPivotTableRefs",f:ot},2053:{n:"BrtPivotTableRef",f:ot},2054:{n:"BrtSlicerCacheBookPivotTables",f:ot},2055:{n:"BrtBeginSxvcells",f:ot},2056:{n:"BrtEndSxvcells",f:ot},2057:{n:"BrtBeginSxRow",f:ot},2058:{n:"BrtEndSxRow",f:ot},2060:{n:"BrtPcdCalcMem15",f:ot},2067:{n:"BrtQsi15",f:ot},2068:{n:"BrtBeginWebExtensions",f:ot},2069:{n:"BrtEndWebExtensions",f:ot},2070:{n:"BrtWebExtension",f:ot},2071:{n:"BrtAbsPath15",f:ot},2072:{n:"BrtBeginPivotTableUISettings",f:ot},2073:{n:"BrtEndPivotTableUISettings",f:ot},2075:{n:"BrtTableSlicerCacheIDs",f:ot},2076:{n:"BrtTableSlicerCacheID",f:ot},2077:{n:"BrtBeginTableSlicerCache",f:ot},2078:{n:"BrtEndTableSlicerCache",f:ot},2079:{n:"BrtSxFilter15",f:ot},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:ot},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:ot},2082:{n:"BrtTimelineCachePivotCacheID",f:ot},2083:{n:"BrtBeginTimelineCacheIDs",f:ot},2084:{n:"BrtEndTimelineCacheIDs",f:ot},2085:{n:"BrtBeginTimelineCacheID",f:ot},2086:{n:"BrtEndTimelineCacheID",f:ot},2087:{n:"BrtBeginTimelinesEx",f:ot},2088:{n:"BrtEndTimelinesEx",f:ot},2089:{n:"BrtBeginTimelineEx",f:ot},2090:{n:"BrtEndTimelineEx",f:ot},2091:{n:"BrtWorkBookPr15",f:ot},2092:{n:"BrtPCDH15",f:ot},2093:{n:"BrtBeginTimelineStyle",f:ot},2094:{n:"BrtEndTimelineStyle",f:ot},2095:{n:"BrtTimelineStyleElement",f:ot},2096:{n:"BrtBeginTimelineStylesheetExt15",f:ot},2097:{n:"BrtEndTimelineStylesheetExt15",f:ot},2098:{n:"BrtBeginTimelineStyles",f:ot},2099:{n:"BrtEndTimelineStyles",f:ot},2100:{n:"BrtBeginTimelineStyleElements",f:ot},2101:{n:"BrtEndTimelineStyleElements",f:ot},2102:{n:"BrtDxf15",f:ot},2103:{n:"BrtBeginDxfs15",f:ot},2104:{n:"brtEndDxfs15",f:ot},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:ot},2106:{n:"BrtBeginItemUniqueNames",f:ot},2107:{n:"BrtEndItemUniqueNames",f:ot},2108:{n:"BrtItemUniqueName",f:ot},2109:{n:"BrtBeginExtConn15",f:ot},2110:{n:"BrtEndExtConn15",f:ot},2111:{n:"BrtBeginOledbPr15",f:ot},2112:{n:"BrtEndOledbPr15",f:ot},2113:{n:"BrtBeginDataFeedPr15",f:ot},2114:{n:"BrtEndDataFeedPr15",f:ot},2115:{n:"BrtTextPr15",f:ot},2116:{n:"BrtRangePr15",f:ot},2117:{n:"BrtDbCommand15",f:ot},2118:{n:"BrtBeginDbTables15",f:ot},2119:{n:"BrtEndDbTables15",f:ot},2120:{n:"BrtDbTable15",f:ot},2121:{n:"BrtBeginDataModel",f:ot},2122:{n:"BrtEndDataModel",f:ot},2123:{n:"BrtBeginModelTables",f:ot},2124:{n:"BrtEndModelTables",f:ot},2125:{n:"BrtModelTable",f:ot},2126:{n:"BrtBeginModelRelationships",f:ot},2127:{n:"BrtEndModelRelationships",f:ot},2128:{n:"BrtModelRelationship",f:ot},2129:{n:"BrtBeginECTxtWiz15",f:ot},2130:{n:"BrtEndECTxtWiz15",f:ot},2131:{n:"BrtBeginECTWFldInfoLst15",f:ot},2132:{n:"BrtEndECTWFldInfoLst15",f:ot},2133:{n:"BrtBeginECTWFldInfo15",f:ot},2134:{n:"BrtFieldListActiveItem",f:ot},2135:{n:"BrtPivotCacheIdVersion",f:ot},2136:{n:"BrtSXDI15",f:ot},65535:{n:"",f:ot}},td=function(e,t){for(var r=[],n=k(e),a=0;a!==n.length;++a)r[e[n[a]][t]]=n[a];return r}(ed,"n"),rd={3:{n:"BIFF2NUM",f:function(e,t,r){var n=ln(e);++e.l;var a=$t(e);return n.t="n",n.val=a,n}},4:{n:"BIFF2STR",f:function(e,t,r){var n=ln(e);++e.l;var a=rn(e,0,r);return n.t="str",n.val=a,n}},6:{n:"Formula",f:oh},9:{n:"BOF",f:vn},10:{n:"EOF",f:Jn},12:{n:"CalcCount",f:Wn},13:{n:"CalcMode",f:Vn},14:{n:"CalcPrecision",f:Xn},15:{n:"CalcRefMode",f:Gn},16:{n:"CalcDelta",f:zn},17:{n:"CalcIter",f:Hn},18:{n:"Protect",f:va},19:{n:"Password",f:ua},20:{n:"Header",f:ia},21:{n:"Footer",f:na},23:{n:"ExternSheet",f:yn},24:{n:"Lbl",f:kn},25:{n:"WinProtect",f:xa},26:{n:"VerticalPageBreaks",f:Ia},27:{n:"HorizontalPageBreaks",f:Oa},28:{n:"Note",f:function(e,t,r){return function(e,t,r){if(!(r.biff<8)){var n=e.read_shift(2),a=e.read_shift(2),s=e.read_shift(2),i=e.read_shift(2),o=rn(e,0,r);return r.biff<8&&e.read_shift(1),[{r:n,c:a},o,i,s]}}(e,0,r)}},29:{n:"Selection",f:Da},34:{n:"Date1904",f:$n},35:{n:"ExternName",f:_n},38:{n:"LeftMargin",f:ca},39:{n:"RightMargin",f:Ca},40:{n:"TopMargin",f:Ta},41:{n:"BottomMargin",f:Mn},42:{n:"PrintRowCol",f:pa},43:{n:"PrintGrid",f:da},47:{n:"FilePass",f:function(e,t,r){var n,a,s,i,o={Type:8<=r.biff?e.read_shift(2):0};return o.Type?Gc(e,0,o):(a=r,s=o,i={key:Zr(n=e),verificationBytes:Zr(n)},a.password&&(i.verifier=Mc(a.password)),s.valid=i.verificationBytes===i.verifier,s.valid&&(s.insitu_decrypt=Xc(a.password))),o}},49:{n:"Font",f:function(e,t,r){var n={dyHeight:e.read_shift(2),fl:e.read_shift(2)};switch(r&&r.biff||8){case 2:break;case 3:case 4:e.l+=2;break;default:e.l+=10}return n.name=qr(e,0,r),n}},51:{n:"PrintSize",f:ga},60:{n:"Continue",f:Pa},61:{n:"Window1",f:function(e,t){return{Pos:[e.read_shift(2),e.read_shift(2)],Dim:[e.read_shift(2),e.read_shift(2)],Flags:e.read_shift(2),CurTab:e.read_shift(2),FirstTab:e.read_shift(2),Selected:e.read_shift(2),TabRatio:e.read_shift(2)}}},64:{n:"Backup",f:Nn},65:{n:"Pane",f:Fa},66:{n:"CodePage",f:Yn},77:{n:"Pls",f:Na},80:{n:"DCon",f:La},81:{n:"DConRef",f:Ma},82:{n:"DConName",f:Ua},85:{n:"DefColWidth",f:Zn},89:{n:"XCT",f:Wa},90:{n:"CRN",f:za},91:{n:"FileSharing",f:Ha},92:{n:"WriteAccess",f:function(e,t,r){if(r.enc)return e.l+=t,"";var n=e.l,a=tn(e,0,r);return e.read_shift(t+n-e.l),a}},93:{n:"Obj",f:function(e,t,r){if(r&&r.biff<8)return function(e,t,r){e.read_shift(4);var n=e.read_shift(2),a=e.read_shift(2),s=e.read_shift(2);e.read_shift(2),e.read_shift(2),e.read_shift(2),e.read_shift(2),e.read_shift(2),e.read_shift(2),e.read_shift(2),e.read_shift(2),e.read_shift(2),e.l+=6,t-=36;var i=[];return i.push((In[n]||ot)(e,t,r)),{cmo:[a,n,s],ft:i}}(e,t,r);var n=pn(e);return{cmo:n,ft:function(t,e,r){for(var n=t.l+e,a=[];t.l>2&1,f.data=(n=e,f.fStyle,a=r,s={},i=n.read_shift(4),o=n.read_shift(4),l=n.read_shift(4),c=n.read_shift(2),s.patternType=cr[l>>26],a.cellStyles&&(s.alc=7&i,s.fWrap=i>>3&1,s.alcV=i>>4&7,s.fJustLast=i>>7&1,s.trot=i>>8&255,s.cIndent=i>>16&15,s.fShrinkToFit=i>>20&1,s.iReadOrder=i>>22&2,s.fAtrNum=i>>26&1,s.fAtrFnt=i>>27&1,s.fAtrAlc=i>>28&1,s.fAtrBdr=i>>29&1,s.fAtrPat=i>>30&1,s.fAtrProt=i>>31&1,s.dgLeft=15&o,s.dgRight=o>>4&15,s.dgTop=o>>8&15,s.dgBottom=o>>12&15,s.icvLeft=o>>16&127,s.icvRight=o>>23&127,s.grbitDiag=o>>30&3,s.icvTop=127&l,s.icvBottom=l>>7&127,s.icvDiag=l>>14&127,s.dgDiag=l>>21&15,s.icvFore=127&c,s.icvBack=c>>7&127,s.fsxButton=c>>14&1),s),f}},225:{n:"InterfaceHdr",f:function(e,t){return 0===t||e.read_shift(2),1200}},226:{n:"InterfaceEnd",f:la},227:{n:"SXVS",f:Os},229:{n:"MergeCells",f:function(e,t){for(var r=[],n=e.read_shift(2);n--;)r.push(hn(e));return r}},233:{n:"BkHim",f:Ds},235:{n:"MsoDrawingGroup",f:Ps},236:{n:"MsoDrawing",f:Fs},237:{n:"MsoDrawingSelection",f:Ns},239:{n:"PhoneticInfo",f:Ls},240:{n:"SxRule",f:Ms},241:{n:"SXEx",f:Us},242:{n:"SxFilt",f:Ws},244:{n:"SxDXF",f:zs},245:{n:"SxItm",f:Hs},246:{n:"SxName",f:Vs},247:{n:"SxSelect",f:Xs},248:{n:"SXPair",f:Gs},249:{n:"SxFmla",f:js},251:{n:"SxFormat",f:Ys},252:{n:"SST",f:function(e,t){for(var r=e.l+t,n=e.read_shift(4),a=e.read_shift(4),s=[],i=0;i!=a&&e.le.l;)o.push(tn(e));return[s,a,i,o]}},431:{n:"Prot4Rev",f:ma},432:{n:"CondFmt",f:ki},433:{n:"CF",f:yi},434:{n:"DVal",f:xi},437:{n:"DConBin",f:Ri},438:{n:"TxO",f:function(t,r,e){var n=t.l,a="";try{t.l+=4;var s=(e.lastobj||{cmo:[0,0]}).cmo[1];-1==[0,5,7,11,12,14].indexOf(s)?t.l+=6:function(e,t,r){var n=e.read_shift(1);e.l++;var a=e.read_shift(2);e.l+=2}(t);var i=t.read_shift(2),o=(t.read_shift(2),bn(t,2),t.read_shift(2));t.l+=o;for(var l=1;l=(c?i:2*i))break}if(a.length!==i&&a.length!==2*i)throw new Error("cchText: "+i+" != "+a.length);return t.l=n+r,{t:a}}catch(e){return t.l=n+r,{t:a}}}},439:{n:"RefreshAll",f:Ea},440:{n:"HLink",f:function(e,t){var r=hn(e);return e.l+=16,[r,function(e,t){var r=e.l+t,n=e.read_shift(4);if(2!==n)throw new Error("Unrecognized streamVersion: "+n);var a,s,i,o,l=e.read_shift(2);e.l+=2,16&l&&an(e,e.l),128&l&&(a=an(e,e.l)),257==(257&l)&&(s=an(e,e.l)),1==(257&l)&&(i=nn(e,e.l)),8&l&&(o=an(e,e.l)),32&l&&e.read_shift(16),64&l&&Mr(e),e.l=r;var c=a||s||i;return o&&(c+="#"+o),{Target:c}}(e,t-24)]}},441:{n:"Lel",f:Ii},442:{n:"CodeName",f:Oi},443:{n:"SXFDBType",f:Di},444:{n:"Prot4RevPass",f:ba},445:{n:"ObNoMacros",f:Pi},446:{n:"Dv",f:Fi},448:{n:"Excel9File",f:ea},449:{n:"RecalcId",f:function(e,t){return e.read_shift(2),e.read_shift(4)},r:2},450:{n:"EntExU2",f:qn},512:{n:"Dimensions",f:wn},513:{n:"Blank",f:Ln},515:{n:"Number",f:function(e,t){var r=ln(e),n=$t(e);return r.val=n,r}},516:{n:"Label",f:function(e,t,r){e.l;var n=ln(e);2==r.biff&&e.l++;var a=tn(e,e.l,r);return n.val=a,n}},517:{n:"BoolErr",f:An},518:{n:"Formula",f:oh},519:{n:"String",f:Ba},520:{n:"Row",f:function(e,t){var r={};r.r=e.read_shift(2),r.c=e.read_shift(2),r.cnt=e.read_shift(2)-r.c;var n=e.read_shift(2);e.l+=4;var a=e.read_shift(1);return e.l+=3,7&a&&(r.level=7&a),32&a&&(r.hidden=!0),64&a&&(r.hpt=n/20),r}},523:{n:"Index",f:Ni},545:{n:"Array",f:Rn},549:{n:"DefaultRowHeight",f:Cn},566:{n:"Table",f:Li},574:{n:"Window2",f:Fn},638:{n:"RK",f:function(e,t){var r=e.read_shift(2),n=e.read_shift(2),a=fn(e);return{r:r,c:n,ixfe:a[0],rknum:a[1]}}},659:{n:"Style",f:Dn},1030:{n:"Formula",f:oh},1048:{n:"BigName",f:Mi},1054:{n:"Format",f:function(e,t,r){return[e.read_shift(2),rn(e,0,r)]}},1084:{n:"ContinueBigName",f:Ui},1212:{n:"ShrFmla",f:function(e,t,r){un(e),e.l++;var n=e.read_shift(1);return[(a=e,s=t-=8,i=r,l=a.l+s,c=a.read_shift(2),f=ch(a,c,i),65535==c?[[],ot(a,s-2)]:(s!==c+2&&(o=lh(a,l-c-2,f,i)),[f,o])),n];var a,s,i,o,l,c,f}},2048:{n:"HLinkTooltip",f:function(e,t){e.l;e.read_shift(2);var r=hn(e),n=e.read_shift((t-10)/2,"dbcs-cont");return[r,n=n.replace(x,"")]}},2049:{n:"WebPub",f:Wi},2050:{n:"QsiSXTag",f:zi},2051:{n:"DBQueryExt",f:Hi},2052:{n:"ExtString",f:Vi},2053:{n:"TxtQry",f:Xi},2054:{n:"Qsir",f:Gi},2055:{n:"Qsif",f:ji},2056:{n:"RRDTQSIF",f:Yi},2057:{n:"BOF",f:vn},2058:{n:"OleDbConn",f:Ki},2059:{n:"WOpt",f:$i},2060:{n:"SXViewEx",f:Zi},2061:{n:"SXTH",f:Qi},2062:{n:"SXPIEx",f:qi},2063:{n:"SXVDTEx",f:Ji},2064:{n:"SXViewEx9",f:eo},2066:{n:"ContinueFrt",f:to},2067:{n:"RealTimeData",f:ro},2128:{n:"ChartFrtInfo",f:no},2129:{n:"FrtWrapper",f:ao},2130:{n:"StartBlock",f:so},2131:{n:"EndBlock",f:io},2132:{n:"StartObject",f:oo},2133:{n:"EndObject",f:lo},2134:{n:"CatLab",f:co},2135:{n:"YMult",f:fo},2136:{n:"SXViewLink",f:ho},2137:{n:"PivotChartBits",f:uo},2138:{n:"FrtFontList",f:po},2146:{n:"SheetExt",f:go},2147:{n:"BookExt",f:mo,r:12},2148:{n:"SXAddl",f:bo},2149:{n:"CrErr",f:vo},2150:{n:"HFPicture",f:Eo},2151:{n:"FeatHdr",f:ta},2152:{n:"Feat",f:Co},2154:{n:"DataLabExt",f:So},2155:{n:"DataLabExtContents",f:wo},2156:{n:"CellWatch",f:Ao},2161:{n:"FeatHdr11",f:Bo},2162:{n:"Feature11",f:_o},2164:{n:"DropDownObjIds",f:To},2165:{n:"ContinueFrt11",f:ko},2166:{n:"DConn",f:yo},2167:{n:"List12",f:xo},2168:{n:"Feature12",f:Ro},2169:{n:"CondFmt12",f:Io},2170:{n:"CF12",f:Oo},2171:{n:"CFEx",f:Do},2172:{n:"XFCRC",f:function(e,t){e.l+=2;var r={cxfs:0,crc:0};return r.cxfs=e.read_shift(2),r.crc=e.read_shift(4),r},r:12},2173:{n:"XFExt",f:function(e,t){e.l,e.l+=2;var r=e.read_shift(2);e.l+=2;for(var n=e.read_shift(2),a=[];0");var s=e.match(/<\/table/i),i=a.index,o=s&&s.index||e.length,l=e.slice(i,o).split(/(:?]*>)/i),c=-1,f=0,h=0,u=0,d={s:{r:1e7,c:1e7},e:{r:0,c:0}},p=[];for(i=0;i/i);for(o=0;o"));)E=E.slice(C+1);for(;-1");)E=E.slice(0,E.lastIndexOf("<"));var S=oe(v.slice(0,v.indexOf(">")));if(u=S.colspan?+S.colspan:1,(0<(h=+S.rowspan)||1c&&(d.s.r=c),d.e.rf&&(d.s.c=f),d.e.c",o=t.s.c;o<=t.e.c;++o){for(var l=0,c=0,f=0;fr||a[f].s.c>o||a[f].e.r"+s.join("")+""}function f(e,t,r){return[].join("")+""}var h='SheetJS Table Export',u="";return{to_workbook:function(e,t){return yt(r(e,t),t)},to_sheet:r,_row:c,BEGIN:h,END:u,_preamble:f,from_sheet:function(e,t,r){var n=t||{},a=null!=n.header?n.header:h,s=null!=n.footer?n.footer:u,i=[a],o=At(e["!ref"]);n.dense=Array.isArray(e),i.push(f());for(var l=o.s.r;l<=o.e.r;++l)i.push(c(e,o,l,n));return i.push("
"+s),i.join("")}}}();function ld(e,t){var r=t||{};null!=ce&&(r.dense=ce);for(var n=r.dense?[]:{},a=e.getElementsByTagName("tr"),s={s:{r:0,c:0},e:{r:a.length-1,c:0}},i=[],o=0,l=0,c=0,f=0,h=0,u=0;l/gm,"").replace(//gm,"");o=Vu.exec(d);)switch(o[3]=o[3].replace(/_.*$/,"")){case"table":case"工作表":"/"===o[1]?(T.e.c>=T.s.c&&T.e.r>=T.s.r&&(C["!ref"]=Bt(T)),y.length&&(C["!merges"]=y),s.name=te(s["名称"]||s.name),E.push(s.name),v[s.name]=C):"/"!==o[0].charAt(o[0].length-2)&&(s=oe(o[0],!1),B=_=-1,T.s.r=T.s.c=1e7,T.e.r=T.e.c=0,C=r.dense?[]:{},y=[]);break;case"table-row":case"行":if("/"===o[1])break;(i=oe(o[0],!1))["行号"]?B=i["行号"]-1:++B,_=-1;break;case"covered-table-cell":++_,r.sheetStubs&&(r.dense?(C[B]||(C[B]=[]),C[B][_]={t:"z"}):C[wt({r:B,c:_})]={t:"z"});break;case"table-cell":case"数据":if("/"===o[0].charAt(o[0].length-2))(S=oe(o[0],!1))["number-columns-repeated"]?_+=parseInt(S["number-columns-repeated"],10):++_;else if("/"!==o[1]){if(F=1,++_>T.e.c&&(T.e.c=_),B>T.e.r&&(T.e.r=B),_=R[L][0].s.r&&B<=R[L][0].e.r&&_>=R[L][0].s.c&&_<=R[L][0].e.c&&(l.F=R[L][1]);switch((S["number-columns-spanned"]||S["number-rows-spanned"])&&(x={s:{r:B,c:_},e:{r:B+(parseInt(S["number-rows-spanned"],10)||0)-1,c:_+(parseInt(S["number-columns-spanned"],10)||0)-1}},y.push(x)),S["number-columns-repeated"]&&(F=parseInt(S["number-columns-repeated"],10)),l.t){case"boolean":l.t="b",l.v=ee(S["boolean-value"]);break;case"float":case"percentage":case"currency":l.t="n",l.v=parseFloat(S.value);break;case"date":l.t="d",l.v=z(S["date-value"]),r.cellDates||(l.t="n",l.v=U(l.v)),l.z="m/d/yy";break;case"time":l.t="n",l.v=W(S["time-value"])/86400;break;case"number":l.t="n",l.v=parseFloat(S["数据数值"]);break;default:if("string"!==l.t&&"text"!==l.t&&l.t)throw new Error("Unsupported value type "+l.t);l.t="s",null!=S["string-value"]&&(w=he(S["string-value"]))}}else{if(N=!1,"s"===l.t&&(l.v=w||"",N=0==A),0"===o[0].slice(-2))break;if("/"===o[1])switch(p[p.length-1][0]){case"number-style":case"date-style":case"time-style":m+=d.slice(b,o.index)}else b=o.index+o[0].length;break;case"text-content":case"text-properties":break;case"body":case"电子表格":case"forms":case"table-column":case"table-header-rows":case"table-row-group":case"table-column-group":case"table-header-columns":case"null-date":case"graphic-properties":case"calculation-settings":case"named-expressions":case"named-range":case"label-range":case"label-ranges":case"named-expression":case"sort":case"sort-by":case"sort-groups":case"tab":case"line-break":case"span":break;case"p":case"文本串":"/"===o[1]?w=(0/g," ").replace(/<[^>]*>/g,""))):(oe(o[0],!1),A=o.index+o[0].length);break;case"database-range":if("/"===o[1])break;try{var M=(c=oe(o[0])["target-range-address"],f=void 0,[(f=c.split(":"))[0].split(".")[0],f[0].split(".")[1]+":"+f[1].split(".")[1]]);v[M[0]]["!autofilter"]={ref:M[1]}}catch(e){}break;case"s":case"date":case"object":break;case"title":case"标题":case"desc":case"table-source":case"scenario":case"iteration":case"content-validations":case"content-validation":case"help-message":case"error-message":case"database-ranges":case"filter":case"filter-and":case"filter-or":case"filter-condition":case"list-level-style-bullet":case"list-level-style-number":case"list-level-properties":break;case"sender-firstname":case"sender-lastname":case"sender-initials":case"sender-title":case"sender-position":case"sender-email":case"sender-phone-private":case"sender-fax":case"sender-company":case"sender-phone-work":case"sender-street":case"sender-city":case"sender-postal-code":case"sender-country":case"sender-state-or-province":case"author-name":case"author-initials":case"chapter":case"file-name":case"template-name":case"sheet-name":case"event-listener":break;case"initial-creator":case"creation-date":case"generator":case"document-statistic":case"user-defined":case"config-item":case"page-number":case"page-count":case"time":case"cell-range-source":case"detective":case"operation":case"highlighted-range":break;case"data-pilot-table":case"source-cell-range":case"source-service":case"data-pilot-field":case"data-pilot-level":case"data-pilot-subtotals":case"data-pilot-subtotal":case"data-pilot-members":case"data-pilot-member":case"data-pilot-display-info":case"data-pilot-sort-info":case"data-pilot-layout-info":case"data-pilot-field-reference":case"data-pilot-groups":case"data-pilot-group":case"data-pilot-group-member":case"rect":break;case"dde-connection-decls":case"dde-connection-decl":case"dde-link":case"dde-source":case"properties":case"property":case"a":case"table-protection":case"data-pilot-grand-total":case"office-document-common-attrs":break;default:if("dc:"===o[2])break;if("draw:"===o[2])break;if("style:"===o[2])break;if("form:"===o[2])break;if("calcext:"===o[2])break;if("loext:"===o[2])break;if("uof:"===o[2])break;if("表:"===o[2])break;if("字:"===o[2])break;if(r.WTF)throw new Error(o)}return{Sheets:v,SheetNames:E}});function hd(e,t){t=t||{};var r=!!I(e,"objectdata");if(r)(function(e,t){for(var r,n,a=Hu(e);r=Vu.exec(a);)switch(r[3]){case"manifest":break;case"file-entry":if("/"==(n=oe(r[0],!1)).path&&n.type!==Ar)throw new Error("This OpenDocument is not a spreadsheet");break;case"encryption-data":case"algorithm":case"start-key-generation":case"key-derivation":throw new Error("Unsupported ODS Encryption");default:if(t&&t.WTF)throw r}})(O(e,"META-INF/manifest.xml"),t);var n=D(e,"content.xml");if(!n)throw new Error("Missing content.xml in "+(r?"ODS":"UOF")+" file");return fd(r?n:te(n),t)}function ud(e,t){return fd(e,t)}var dd,pd,gd=function(e,t){return''},md=(dd=" \n",pd=function(e,t,r,n){var a=[];a.push(' \n');var s=0,i=0,o=At(e["!ref"]),l=e["!merges"]||[],c=0,f=Array.isArray(e);for(s=0;s\n");for(;s<=o.e.r;++s){for(a.push(" \n"),i=0;ii||l[c].s.r>s||l[c].e.c\n");else{var p=wt({r:s,c:i}),g=f?(e[s]||[])[i]:e[p];if(g&&g.f&&(u["table:formula"]=K(("of:="+g.f.replace(jf,"$1[.$2$3$4$5]").replace(/\]:\[/g,":")).replace(/;/g,"|").replace(/,/g,";")),g.F&&g.F.substr(0,p.length)==p)){var m=At(g.F);u["table:number-matrix-columns-spanned"]=m.e.c-m.s.c+1,u["table:number-matrix-rows-spanned"]=m.e.r-m.s.r+1}if(g){switch(g.t){case"b":d=g.v?"TRUE":"FALSE",u["office:value-type"]="boolean",u["office:boolean-value"]=g.v?"true":"false";break;case"n":d=g.w||String(g.v||0),u["office:value-type"]="float",u["office:value"]=g.v||0;break;case"s":case"str":d=K(g.v),u["office:value-type"]="string";break;case"d":d=g.w||z(g.v).toISOString(),u["office:value-type"]="date",u["office:date-value"]=z(g.v).toISOString(),u["table:style-name"]="ce1";break;default:a.push(dd);continue}a.push(" "+_e("table:table-cell",_e("text:p",d,{}),u)+"\n")}else a.push(dd)}}a.push(" \n")}return a.push(" \n"),a.join("")},function(e,t){var r,n=[Xe],a=Be({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),s=Be({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});"fods"==t.bookType?n.push("\n"):n.push("\n"),(r=n).push(" \n"),r.push(' \n'),r.push(' \n'),r.push(" /\n"),r.push(' \n'),r.push(" /\n"),r.push(" \n"),r.push(" \n"),r.push(' \n'),r.push(" \n"),n.push(" \n"),n.push(" \n");for(var i=0;i!=e.SheetNames.length;++i)n.push(pd(e.Sheets[e.SheetNames[i]],e,i));return n.push(" \n"),n.push(" \n"),"fods"==t.bookType?n.push(""):n.push(""),n.join("")});function bd(e,t){if("fods"==t.bookType)return md(e,t);var r=new B,n="",a=[],s=[];return n="mimetype",r.file(n,"application/vnd.oasis.opendocument.spreadsheet"),n="content.xml",r.file(n,md(e,t)),a.push([n,"text/xml"]),s.push([n,"ContentFile"]),n="styles.xml",r.file(n,gd(e,t)),a.push([n,"text/xml"]),s.push([n,"StylesFile"]),n="manifest.rdf",r.file(n,function(e,t){var r,n,a=[Xe];a.push('\n');for(var s=0;s!=e.length;++s)a.push(Br(e[s][0],e[s][1])),a.push((r="",n=e[s][0],[' \n',' \n'," \n"].join("")));return a.push(Br("","Document","pkg")),a.push(""),a.join("")}(s)),a.push([n,"application/rdf+xml"]),n="meta.xml",r.file(n,Tr(e,t)),a.push([n,"text/xml"]),s.push([n,"MetadataFile"]),n="META-INF/manifest.xml",r.file(n,function(e,t){var r=[Xe];r.push('\n'),r.push(' \n');for(var n=0;n\n');return r.push(""),r.join("")}(a)),r}function vd(a){return function(e,t){for(var r=0,n=0;n]*r:id="([^"]*)"/)||["",""])[1];return t["!id"][r].Target}(D(e,d,!0),Er(D(e,p,!0),d)),d),m=vr(g);u=ou(D(e,g,!0),0,0,Er(D(e,m,!0),g),0,u);break;case"macro":s[n]=(v=t,a[n],v.slice(-4),{"!type":"macro"});break;case"dialog":s[n]=(b=t,a[n],b.slice(-4),{"!type":"dialog"})}}catch(e){if(o.WTF)throw e}var b,v}var Rd=function(e){return"/"!=e.slice(-1)};function Id(e,t){if(ae(fe),Td(t=t||{}),T(),I(e,"META-INF/manifest.xml"))return hd(e,t);if(I(e,"objectdata.xml"))return hd(e,t);var r,n,a=k(e.files).filter(Rd).sort(),s=function(e,t){var r={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],TODO:[],xmlns:""};if(!e||!e.match)return r;var n={};if((e.match(L)||[]).forEach(function(e){var t=oe(e);switch(t[0].replace(M,"<")){case"]*>([\\s\\S]*?)"));t&&0":n=null;break;default:if(0===i.indexOf(""),c=l[0].substring(4),f=l[1];switch(c){case"lpstr":case"bstr":case"lpwstr":r[n]=he(f);break;case"bool":r[n]=ee(f);break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":r[n]=parseInt(f,10);break;case"r4":case"r8":case"decimal":r[n]=parseFloat(f);break;case"filetime":case"date":r[n]=z(f);break;case"cy":case"error":r[n]=he(f);break;default:if("/"==c.slice(-1))break;t.WTF}}else if("",n[1]=n[1].replace("/>",">")),n.join("")}(r.Props,e)),a.coreprops.push(g),wr(e.rels,2,g,br.CORE_PROPS),g="docProps/app.xml",r.Props&&r.Props.SheetNames||(r.Workbook&&r.Workbook.Sheets?r.Props.SheetNames=r.SheetNames.map(function(e,t){return[2!=(r.Workbook.Sheets[t]||{}).Hidden,e]}).filter(function(e){return e[0]}).map(function(e){return e[1]}):r.Props.SheetNames=r.SheetNames),r.Props.Worksheets=r.Props.SheetNames.length,p.file(g,(s=r.Props,i=[],o=_e,s||(s={}),s.Application="SheetJS",i[i.length]=Xe,i[i.length]=Or,Ir.forEach(function(e){if(void 0!==s[e[1]]){var t;switch(e[2]){case"string":t=String(s[e[1]]);break;case"bool":t=s[e[1]]?"true":"false"}void 0!==t&&(i[i.length]=o(e[0],t))}}),i[i.length]=o("HeadingPairs",o("vt:vector",o("vt:variant","Worksheets")+o("vt:variant",o("vt:i4",String(s.Worksheets))),{size:2,baseType:"variant"})),i[i.length]=o("TitlesOfParts",o("vt:vector",s.SheetNames.map(function(e){return""+K(e)+""}).join(""),{size:s.Worksheets,baseType:"lpstr"})),2",i[1]=i[1].replace("/>",">")),i.join(""))),a.extprops.push(g),wr(e.rels,3,g,br.EXT_PROPS),r.Custprops!==r.Props&&0",">")),a.join("")}(a,e)),p.file("_rels/.rels",Sr(e.rels)),p.file("xl/_rels/workbook."+t+".rels",Sr(e.wbrels)),delete e.revssf,delete e.ssf,p}function Pd(e,t){var r="";switch((t||{}).type||"base64"){case"buffer":return[e[0],e[1],e[2],e[3]];case"base64":r=S.decode(e.substr(0,24));break;case"binary":r=e;break;case"array":return[e[0],e[1],e[2],e[3]];default:throw new Error("Unrecognized type "+(t&&t.type||"undefined"))}return[r.charCodeAt(0),r.charCodeAt(1),r.charCodeAt(2),r.charCodeAt(3)]}function Fd(e,t){var r=0;e:for(;rt)return t;throw new Error("Cannot find sheet # "+t)}if("string"==typeof t){var r=e.SheetNames.indexOf(t);if(-1i.e.r)return l||(l=!0,r.push(""+s)),r.push(null);for(;o<=i.e.r;){r.push(od._row(e,i,o,n)),++o;break}},r},to_csv:function(e,t){var r=Yd(),n=null==t?{}:t;if(null==e||null==e["!ref"])return r.push(null),r;var a=_t(e["!ref"]),s=void 0!==n.FS?n.FS:",",i=s.charCodeAt(0),o=void 0!==n.RS?n.RS:"\n",l=o.charCodeAt(0),c=new RegExp(("|"==s?"\\|":s)+"+$"),f="",h=[];n.dense=Array.isArray(e);for(var u=a.s.c;u<=a.e.c;++u)h[u]=Et(u);var d=a.s.r;return r._read=function(){if(d>a.e.r)return r.push(null);for(;d<=a.e.r;)if(f=Xd(e,a,d,h,i,l,s,n),++d,null!=f){n.strip&&(f=f.replace(c,"")),r.push(f+o);break}},r}}),n.parse_xlscfb=Ju,n.parse_ods=hd,n.parse_fods=ud,n.write_ods=bd,n.parse_zip=Id,n.read=Nd,n.readFile=Ld,n.readFileSync=Ld,n.write=Ud,n.writeFile=zd,n.writeFileSync=zd,n.writeFileAsync=function(e,t,r,n){var a=r||{};a.type="file",a.file=e,Wd(a),a.type="buffer";var s=n;return s instanceof Function||(s=r),c.writeFile(e,Ud(t,a),s)},n.utils=Kd,n.SSF=fe}(e)}),Ht=zt.utils,Vt=zt.write,Xt=zt.read,Gt=function(e,t){this.sheetNames=e,this.sheets=t,this.SheetNames=e,this.Sheets=t};return{excel2json:function(e,h,u){void 0===u&&(u="");var t=new FileReader;if(e&&0!==e.length){var r=e[0];t.onerror=function(e){},t.onload=function(e){for(var t="",r=new Uint8Array(e.target.result),n=r.byteLength,a=0;a?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[620]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàąçêëèïîćÄĄĘęłôöĆûùŚÖܢ٥śƒŹŻóÓńŃźż¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[737]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[850]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[852]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[857]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[861]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[865]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[866]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[874]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[895]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ČüéďäĎŤčěĚĹÍľǪÄÁÉžŽôöÓůÚýÖÜŠĽÝŘťáíóúňŇŮÔšřŕŔ¼§«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[932]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚��������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[129]="���������������������������������������������������������������� 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×�÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓�����������∈∋⊆⊇⊂⊃∪∩��������∧∨¬⇒⇔∀∃�����������∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬�������ʼn♯♭♪†‡¶����◯���".split(""),e=0;e!=n[129].length;++e)65533!==n[129][e].charCodeAt(0)&&(r[n[129][e]]=33024+e,t[33024+e]=n[129][e]);for(n[130]="�������������������������������������������������������������������������������0123456789�������ABCDEFGHIJKLMNOPQRSTUVWXYZ�������abcdefghijklmnopqrstuvwxyz����ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん��������������".split(""),e=0;e!=n[130].length;++e)65533!==n[130][e].charCodeAt(0)&&(r[n[130][e]]=33280+e,t[33280+e]=n[130][e]);for(n[131]="����������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ�ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ��������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�����������������������������������������".split(""),e=0;e!=n[131].length;++e)65533!==n[131][e].charCodeAt(0)&&(r[n[131][e]]=33536+e,t[33536+e]=n[131][e]);for(n[132]="����������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмн�опрстуфхцчшщъыьэюя�������������─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂�����������������������������������������������������������������".split(""),e=0;e!=n[132].length;++e)65533!==n[132][e].charCodeAt(0)&&(r[n[132][e]]=33792+e,t[33792+e]=n[132][e]);for(n[135]="����������������������������������������������������������������①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡��������㍻�〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪���������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[135].length;++e)65533!==n[135][e].charCodeAt(0)&&(r[n[135][e]]=34560+e,t[34560+e]=n[135][e]);for(n[136]="���������������������������������������������������������������������������������������������������������������������������������������������������������������亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭���".split(""),e=0;e!=n[136].length;++e)65533!==n[136][e].charCodeAt(0)&&(r[n[136][e]]=34816+e,t[34816+e]=n[136][e]);for(n[137]="����������������������������������������������������������������院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円�園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改���".split(""),e=0;e!=n[137].length;++e)65533!==n[137][e].charCodeAt(0)&&(r[n[137][e]]=35072+e,t[35072+e]=n[137][e]);for(n[138]="����������������������������������������������������������������魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫�橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄���".split(""),e=0;e!=n[138].length;++e)65533!==n[138][e].charCodeAt(0)&&(r[n[138][e]]=35328+e,t[35328+e]=n[138][e]);for(n[139]="����������������������������������������������������������������機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救�朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈���".split(""),e=0;e!=n[139].length;++e)65533!==n[139][e].charCodeAt(0)&&(r[n[139][e]]=35584+e,t[35584+e]=n[139][e]);for(n[140]="����������������������������������������������������������������掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨�劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向���".split(""),e=0;e!=n[140].length;++e)65533!==n[140][e].charCodeAt(0)&&(r[n[140][e]]=35840+e,t[35840+e]=n[140][e]);for(n[141]="����������������������������������������������������������������后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降�項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷���".split(""),e=0;e!=n[141].length;++e)65533!==n[141][e].charCodeAt(0)&&(r[n[141][e]]=36096+e,t[36096+e]=n[141][e]);for(n[142]="����������������������������������������������������������������察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止�死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周���".split(""),e=0;e!=n[142].length;++e)65533!==n[142][e].charCodeAt(0)&&(r[n[142][e]]=36352+e,t[36352+e]=n[142][e]);for(n[143]="����������������������������������������������������������������宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳�準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾���".split(""),e=0;e!=n[143].length;++e)65533!==n[143][e].charCodeAt(0)&&(r[n[143][e]]=36608+e,t[36608+e]=n[143][e]);for(n[144]="����������������������������������������������������������������拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨�逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線���".split(""),e=0;e!=n[144].length;++e)65533!==n[144][e].charCodeAt(0)&&(r[n[144][e]]=36864+e,t[36864+e]=n[144][e]);for(n[145]="����������������������������������������������������������������繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻�操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只���".split(""),e=0;e!=n[145].length;++e)65533!==n[145][e].charCodeAt(0)&&(r[n[145][e]]=37120+e,t[37120+e]=n[145][e]);for(n[146]="����������������������������������������������������������������叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄�逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓���".split(""),e=0;e!=n[146].length;++e)65533!==n[146][e].charCodeAt(0)&&(r[n[146][e]]=37376+e,t[37376+e]=n[146][e]);for(n[147]="����������������������������������������������������������������邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬�凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入���".split(""),e=0;e!=n[147].length;++e)65533!==n[147][e].charCodeAt(0)&&(r[n[147][e]]=37632+e,t[37632+e]=n[147][e]);for(n[148]="����������������������������������������������������������������如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅�楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美���".split(""),e=0;e!=n[148].length;++e)65533!==n[148][e].charCodeAt(0)&&(r[n[148][e]]=37888+e,t[37888+e]=n[148][e]);for(n[149]="����������������������������������������������������������������鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷�斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋���".split(""),e=0;e!=n[149].length;++e)65533!==n[149][e].charCodeAt(0)&&(r[n[149][e]]=38144+e,t[38144+e]=n[149][e]);for(n[150]="����������������������������������������������������������������法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆�摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒���".split(""),e=0;e!=n[150].length;++e)65533!==n[150][e].charCodeAt(0)&&(r[n[150][e]]=38400+e,t[38400+e]=n[150][e]);for(n[151]="����������������������������������������������������������������諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲�沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯���".split(""),e=0;e!=n[151].length;++e)65533!==n[151][e].charCodeAt(0)&&(r[n[151][e]]=38656+e,t[38656+e]=n[151][e]);for(n[152]="����������������������������������������������������������������蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕��������������������������������������������弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲���".split(""),e=0;e!=n[152].length;++e)65533!==n[152][e].charCodeAt(0)&&(r[n[152][e]]=38912+e,t[38912+e]=n[152][e]);for(n[153]="����������������������������������������������������������������僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭�凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨���".split(""),e=0;e!=n[153].length;++e)65533!==n[153][e].charCodeAt(0)&&(r[n[153][e]]=39168+e,t[39168+e]=n[153][e]);for(n[154]="����������������������������������������������������������������咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸�噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩���".split(""),e=0;e!=n[154].length;++e)65533!==n[154][e].charCodeAt(0)&&(r[n[154][e]]=39424+e,t[39424+e]=n[154][e]);for(n[155]="����������������������������������������������������������������奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀�它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏���".split(""),e=0;e!=n[155].length;++e)65533!==n[155][e].charCodeAt(0)&&(r[n[155][e]]=39680+e,t[39680+e]=n[155][e]);for(n[156]="����������������������������������������������������������������廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠�怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛���".split(""),e=0;e!=n[156].length;++e)65533!==n[156][e].charCodeAt(0)&&(r[n[156][e]]=39936+e,t[39936+e]=n[156][e]);for(n[157]="����������������������������������������������������������������戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫�捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼���".split(""),e=0;e!=n[157].length;++e)65533!==n[157][e].charCodeAt(0)&&(r[n[157][e]]=40192+e,t[40192+e]=n[157][e]);for(n[158]="����������������������������������������������������������������曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎�梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣���".split(""),e=0;e!=n[158].length;++e)65533!==n[158][e].charCodeAt(0)&&(r[n[158][e]]=40448+e,t[40448+e]=n[158][e]);for(n[159]="����������������������������������������������������������������檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯�麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌���".split(""),e=0;e!=n[159].length;++e)65533!==n[159][e].charCodeAt(0)&&(r[n[159][e]]=40704+e,t[40704+e]=n[159][e]);for(n[224]="����������������������������������������������������������������漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝�烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱���".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="����������������������������������������������������������������瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿�痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬���".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="����������������������������������������������������������������磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰�窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆���".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="����������������������������������������������������������������紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷�縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋���".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="����������������������������������������������������������������隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤�艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈���".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="����������������������������������������������������������������蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬�蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞���".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="����������������������������������������������������������������襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧�諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊���".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="����������������������������������������������������������������蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜�轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮���".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="����������������������������������������������������������������錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙�閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰���".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="����������������������������������������������������������������顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃�騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈���".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="����������������������������������������������������������������鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯�黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙�������������������������������������������������������������������������������������������".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[237]="����������������������������������������������������������������纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏�塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱���".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="����������������������������������������������������������������犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙�蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"���".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[250]="����������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊�兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯���".split(""),e=0;e!=n[250].length;++e)65533!==n[250][e].charCodeAt(0)&&(r[n[250][e]]=64e3+e,t[64e3+e]=n[250][e]);for(n[251]="����������������������������������������������������������������涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神�祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙���".split(""),e=0;e!=n[251].length;++e)65533!==n[251][e].charCodeAt(0)&&(r[n[251][e]]=64256+e,t[64256+e]=n[251][e]);for(n[252]="����������������������������������������������������������������髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[252].length;++e)65533!==n[252][e].charCodeAt(0)&&(r[n[252][e]]=64512+e,t[64512+e]=n[252][e]);return{enc:r,dec:t}}(),a[936]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[129]="����������������������������������������������������������������丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪乫乬乭乮乯乲乴乵乶乷乸乹乺乻乼乽乿亀亁亂亃亄亅亇亊�亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂伃伄伅伆伇伈伋伌伒伓伔伕伖伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾伿佀佁佂佄佅佇佈佉佊佋佌佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢�".split(""),e=0;e!=n[129].length;++e)65533!==n[129][e].charCodeAt(0)&&(r[n[129][e]]=33024+e,t[33024+e]=n[129][e]);for(n[130]="����������������������������������������������������������������侤侫侭侰侱侲侳侴侶侷侸侹侺侻侼侽侾俀俁係俆俇俈俉俋俌俍俒俓俔俕俖俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿倀倁倂倃倄倅倆倇倈倉倊�個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯倰倱倲倳倴倵倶倷倸倹倻倽倿偀偁偂偄偅偆偉偊偋偍偐偑偒偓偔偖偗偘偙偛偝偞偟偠偡偢偣偤偦偧偨偩偪偫偭偮偯偰偱偲偳側偵偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟傠傡傢傤傦傪傫傭傮傯傰傱傳傴債傶傷傸傹傼�".split(""),e=0;e!=n[130].length;++e)65533!==n[130][e].charCodeAt(0)&&(r[n[130][e]]=33280+e,t[33280+e]=n[130][e]);for(n[131]="����������������������������������������������������������������傽傾傿僀僁僂僃僄僅僆僇僈僉僊僋僌働僎僐僑僒僓僔僕僗僘僙僛僜僝僞僟僠僡僢僣僤僥僨僩僪僫僯僰僱僲僴僶僷僸價僺僼僽僾僿儀儁儂儃億儅儈�儉儊儌儍儎儏儐儑儓儔儕儖儗儘儙儚儛儜儝儞償儠儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾兂兇兊兌兎兏児兒兓兗兘兙兛兝兞兟兠兡兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦冧冨冩冪冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒凓凔凕凖凗�".split(""),e=0;e!=n[131].length;++e)65533!==n[131][e].charCodeAt(0)&&(r[n[131][e]]=33536+e,t[33536+e]=n[131][e]);for(n[132]="����������������������������������������������������������������凘凙凚凜凞凟凢凣凥処凧凨凩凪凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄剅剆則剈剉剋剎剏剒剓剕剗剘�剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳剴創剶剷剸剹剺剻剼剾劀劃劄劅劆劇劉劊劋劌劍劎劏劑劒劔劕劖劗劘劙劚劜劤劥劦劧劮劯劰労劵劶劷劸効劺劻劼劽勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務勚勛勜勝勞勠勡勢勣勥勦勧勨勩勪勫勬勭勮勯勱勲勳勴勵勶勷勸勻勼勽匁匂匃匄匇匉匊匋匌匎�".split(""),e=0;e!=n[132].length;++e)65533!==n[132][e].charCodeAt(0)&&(r[n[132][e]]=33792+e,t[33792+e]=n[132][e]);for(n[133]="����������������������������������������������������������������匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯匰匱匲匳匴匵匶匷匸匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏�厐厑厒厓厔厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯厰厱厲厳厴厵厷厸厹厺厼厽厾叀參叄叅叆叇収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝呞呟呠呡呣呥呧呩呪呫呬呭呮呯呰呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡�".split(""),e=0;e!=n[133].length;++e)65533!==n[133][e].charCodeAt(0)&&(r[n[133][e]]=34048+e,t[34048+e]=n[133][e]);for(n[134]="����������������������������������������������������������������咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠員哢哣哤哫哬哯哰哱哴哵哶哷哸哹哻哾唀唂唃唄唅唈唊唋唌唍唎唒唓唕唖唗唘唙唚唜唝唞唟唡唥唦�唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋啌啍啎問啑啒啓啔啗啘啙啚啛啝啞啟啠啢啣啨啩啫啯啰啱啲啳啴啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠喡喢喣喤喥喦喨喩喪喫喬喭單喯喰喲喴営喸喺喼喿嗀嗁嗂嗃嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗嗘嗙嗚嗛嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸嗹嗺嗻嗼嗿嘂嘃嘄嘅�".split(""),e=0;e!=n[134].length;++e)65533!==n[134][e].charCodeAt(0)&&(r[n[134][e]]=34304+e,t[34304+e]=n[134][e]);for(n[135]="����������������������������������������������������������������嘆嘇嘊嘋嘍嘐嘑嘒嘓嘔嘕嘖嘗嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀噁噂噃噄噅噆噇噈噉噊噋噏噐噑噒噓噕噖噚噛噝噞噟噠噡�噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽噾噿嚀嚁嚂嚃嚄嚇嚈嚉嚊嚋嚌嚍嚐嚑嚒嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟嚠嚡嚢嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚰嚱嚲嚳嚴嚵嚶嚸嚹嚺嚻嚽嚾嚿囀囁囂囃囄囅囆囇囈囉囋囌囍囎囏囐囑囒囓囕囖囘囙囜団囥囦囧囨囩囪囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國圌圍圎圏圐圑�".split(""),e=0;e!=n[135].length;++e)65533!==n[135][e].charCodeAt(0)&&(r[n[135][e]]=34560+e,t[34560+e]=n[135][e]);for(n[136]="����������������������������������������������������������������園圓圔圕圖圗團圙圚圛圝圞圠圡圢圤圥圦圧圫圱圲圴圵圶圷圸圼圽圿坁坃坄坅坆坈坉坋坒坓坔坕坖坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀�垁垇垈垉垊垍垎垏垐垑垔垕垖垗垘垙垚垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹垺垻垼垽垾垿埀埁埄埅埆埇埈埉埊埌埍埐埑埓埖埗埛埜埞埡埢埣埥埦埧埨埩埪埫埬埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥堦堧堨堩堫堬堭堮堯報堲堳場堶堷堸堹堺堻堼堽�".split(""),e=0;e!=n[136].length;++e)65533!==n[136][e].charCodeAt(0)&&(r[n[136][e]]=34816+e,t[34816+e]=n[136][e]);for(n[137]="����������������������������������������������������������������堾堿塀塁塂塃塅塆塇塈塉塊塋塎塏塐塒塓塕塖塗塙塚塛塜塝塟塠塡塢塣塤塦塧塨塩塪塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塿墂墄墆墇墈墊墋墌�墍墎墏墐墑墔墕墖増墘墛墜墝墠墡墢墣墤墥墦墧墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墽墾墿壀壂壃壄壆壇壈壉壊壋壌壍壎壏壐壒壓壔壖壗壘壙壚壛壜壝壞壟壠壡壢壣壥壦壧壨壩壪壭壯壱売壴壵壷壸壺壻壼壽壾壿夀夁夃夅夆夈変夊夋夌夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻�".split(""),e=0;e!=n[137].length;++e)65533!==n[137][e].charCodeAt(0)&&(r[n[137][e]]=35072+e,t[35072+e]=n[137][e]);for(n[138]="����������������������������������������������������������������夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛奜奝奞奟奡奣奤奦奧奨奩奪奫奬奭奮奯奰奱奲奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦�妧妬妭妰妱妳妴妵妶妷妸妺妼妽妿姀姁姂姃姄姅姇姈姉姌姍姎姏姕姖姙姛姞姟姠姡姢姤姦姧姩姪姫姭姮姯姰姱姲姳姴姵姶姷姸姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪娫娬娭娮娯娰娳娵娷娸娹娺娻娽娾娿婁婂婃婄婅婇婈婋婌婍婎婏婐婑婒婓婔婖婗婘婙婛婜婝婞婟婠�".split(""),e=0;e!=n[138].length;++e)65533!==n[138][e].charCodeAt(0)&&(r[n[138][e]]=35328+e,t[35328+e]=n[138][e]);for(n[139]="����������������������������������������������������������������婡婣婤婥婦婨婩婫婬婭婮婯婰婱婲婳婸婹婻婼婽婾媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媓媔媕媖媗媘媙媜媝媞媟媠媡媢媣媤媥媦媧媨媩媫媬�媭媮媯媰媱媴媶媷媹媺媻媼媽媿嫀嫃嫄嫅嫆嫇嫈嫊嫋嫍嫎嫏嫐嫑嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬嫭嫮嫯嫰嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬁嬂嬃嬄嬅嬆嬇嬈嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬸嬹嬺嬻嬼嬽嬾嬿孁孂孃孄孅孆孇�".split(""),e=0;e!=n[139].length;++e)65533!==n[139][e].charCodeAt(0)&&(r[n[139][e]]=35584+e,t[35584+e]=n[139][e]);for(n[140]="����������������������������������������������������������������孈孉孊孋孌孍孎孏孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏�寑寔寕寖寗寘寙寚寛寜寠寢寣實寧審寪寫寬寭寯寱寲寳寴寵寶寷寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧屨屩屪屫屬屭屰屲屳屴屵屶屷屸屻屼屽屾岀岃岄岅岆岇岉岊岋岎岏岒岓岕岝岞岟岠岡岤岥岦岧岨�".split(""),e=0;e!=n[140].length;++e)65533!==n[140][e].charCodeAt(0)&&(r[n[140][e]]=35840+e,t[35840+e]=n[140][e]);for(n[141]="����������������������������������������������������������������岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅峆峇峈峉峊峌峍峎峏峐峑峓峔峕峖峗峘峚峛峜峝峞峟峠峢峣峧峩峫峬峮峯峱峲峳峴峵島峷峸峹峺峼峽峾峿崀�崁崄崅崈崉崊崋崌崍崏崐崑崒崓崕崗崘崙崚崜崝崟崠崡崢崣崥崨崪崫崬崯崰崱崲崳崵崶崷崸崹崺崻崼崿嵀嵁嵂嵃嵄嵅嵆嵈嵉嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵙嵚嵜嵞嵟嵠嵡嵢嵣嵤嵥嵦嵧嵨嵪嵭嵮嵰嵱嵲嵳嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶚嶛嶜嶞嶟嶠�".split(""),e=0;e!=n[141].length;++e)65533!==n[141][e].charCodeAt(0)&&(r[n[141][e]]=36096+e,t[36096+e]=n[141][e]);for(n[142]="����������������������������������������������������������������嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶸嶹嶺嶻嶼嶽嶾嶿巀巁巂巃巄巆巇巈巉巊巋巌巎巏巐巑巒巓巔巕巖巗巘巙巚巜巟巠巣巤巪巬巭�巰巵巶巸巹巺巻巼巿帀帄帇帉帊帋帍帎帒帓帗帞帟帠帡帢帣帤帥帨帩帪師帬帯帰帲帳帴帵帶帹帺帾帿幀幁幃幆幇幈幉幊幋幍幎幏幐幑幒幓幖幗幘幙幚幜幝幟幠幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨庩庪庫庬庮庯庰庱庲庴庺庻庼庽庿廀廁廂廃廄廅�".split(""),e=0;e!=n[142].length;++e)65533!==n[142][e].charCodeAt(0)&&(r[n[142][e]]=36352+e,t[36352+e]=n[142][e]);for(n[143]="����������������������������������������������������������������廆廇廈廋廌廍廎廏廐廔廕廗廘廙廚廜廝廞廟廠廡廢廣廤廥廦廧廩廫廬廭廮廯廰廱廲廳廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤�弨弫弬弮弰弲弳弴張弶強弸弻弽弾弿彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢徣徤徥徦徧復徫徬徯徰徱徲徳徴徶徸徹徺徻徾徿忀忁忂忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇�".split(""),e=0;e!=n[143].length;++e)65533!==n[143][e].charCodeAt(0)&&(r[n[143][e]]=36608+e,t[36608+e]=n[143][e]);for(n[144]="����������������������������������������������������������������怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰怱怲怳怴怶怷怸怹怺怽怾恀恄恅恆恇恈恉恊恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀�悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽悾悿惀惁惂惃惄惇惈惉惌惍惎惏惐惒惓惔惖惗惙惛惞惡惢惣惤惥惪惱惲惵惷惸惻惼惽惾惿愂愃愄愅愇愊愋愌愐愑愒愓愔愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾慀慁慂慃慄慅慆�".split(""),e=0;e!=n[144].length;++e)65533!==n[144][e].charCodeAt(0)&&(r[n[144][e]]=36864+e,t[36864+e]=n[144][e]);for(n[145]="����������������������������������������������������������������慇慉態慍慏慐慒慓慔慖慗慘慙慚慛慜慞慟慠慡慣慤慥慦慩慪慫慬慭慮慯慱慲慳慴慶慸慹慺慻慼慽慾慿憀憁憂憃憄憅憆憇憈憉憊憌憍憏憐憑憒憓憕�憖憗憘憙憚憛憜憞憟憠憡憢憣憤憥憦憪憫憭憮憯憰憱憲憳憴憵憶憸憹憺憻憼憽憿懀懁懃懄懅懆懇應懌懍懎懏懐懓懕懖懗懘懙懚懛懜懝懞懟懠懡懢懣懤懥懧懨懩懪懫懬懭懮懯懰懱懲懳懴懶懷懸懹懺懻懼懽懾戀戁戂戃戄戅戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸戹戺戻戼扂扄扅扆扊�".split(""),e=0;e!=n[145].length;++e)65533!==n[145][e].charCodeAt(0)&&(r[n[145][e]]=37120+e,t[37120+e]=n[145][e]);for(n[146]="����������������������������������������������������������������扏扐払扖扗扙扚扜扝扞扟扠扡扢扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋抌抍抎抏抐抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁�拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳挴挵挶挷挸挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖捗捘捙捚捛捜捝捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙掚掛掜掝掞掟採掤掦掫掯掱掲掵掶掹掻掽掿揀�".split(""),e=0;e!=n[146].length;++e)65533!==n[146][e].charCodeAt(0)&&(r[n[146][e]]=37376+e,t[37376+e]=n[146][e]);for(n[147]="����������������������������������������������������������������揁揂揃揅揇揈揊揋揌揑揓揔揕揗揘揙揚換揜揝揟揢揤揥揦揧揨揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆搇搈搉搊損搎搑搒搕搖搗搘搙搚搝搟搢搣搤�搥搧搨搩搫搮搯搰搱搲搳搵搶搷搸搹搻搼搾摀摂摃摉摋摌摍摎摏摐摑摓摕摖摗摙摚摛摜摝摟摠摡摢摣摤摥摦摨摪摫摬摮摯摰摱摲摳摴摵摶摷摻摼摽摾摿撀撁撃撆撈撉撊撋撌撍撎撏撐撓撔撗撘撚撛撜撝撟撠撡撢撣撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆擇擈擉擊擋擌擏擑擓擔擕擖擙據�".split(""),e=0;e!=n[147].length;++e)65533!==n[147][e].charCodeAt(0)&&(r[n[147][e]]=37632+e,t[37632+e]=n[147][e]);for(n[148]="����������������������������������������������������������������擛擜擝擟擠擡擣擥擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿攁攂攃攄攅攆攇攈攊攋攌攍攎攏攐攑攓攔攕攖攗攙攚攛攜攝攞攟攠攡�攢攣攤攦攧攨攩攪攬攭攰攱攲攳攷攺攼攽敀敁敂敃敄敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數敹敺敻敼敽敾敿斀斁斂斃斄斅斆斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱斲斳斴斵斶斷斸斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘旙旚旛旜旝旞旟旡旣旤旪旫�".split(""),e=0;e!=n[148].length;++e)65533!==n[148][e].charCodeAt(0)&&(r[n[148][e]]=37888+e,t[37888+e]=n[148][e]);for(n[149]="����������������������������������������������������������������旲旳旴旵旸旹旻旼旽旾旿昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷昸昹昺昻昽昿晀時晄晅晆晇晈晉晊晍晎晐晑晘�晙晛晜晝晞晠晢晣晥晧晩晪晫晬晭晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘暙暚暛暜暞暟暠暡暢暣暤暥暦暩暪暫暬暭暯暰暱暲暳暵暶暷暸暺暻暼暽暿曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曚曞曟曠曡曢曣曤曥曧曨曪曫曬曭曮曯曱曵曶書曺曻曽朁朂會�".split(""),e=0;e!=n[149].length;++e)65533!==n[149][e].charCodeAt(0)&&(r[n[149][e]]=38144+e,t[38144+e]=n[149][e]);for(n[150]="����������������������������������������������������������������朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠朡朢朣朤朥朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗杘杙杚杛杝杢杣杤杦杧杫杬杮東杴杶�杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹枺枻枼枽枾枿柀柂柅柆柇柈柉柊柋柌柍柎柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵柶柷柸柹柺査柼柾栁栂栃栄栆栍栐栒栔栕栘栙栚栛栜栞栟栠栢栣栤栥栦栧栨栫栬栭栮栯栰栱栴栵栶栺栻栿桇桋桍桏桒桖桗桘桙桚桛�".split(""),e=0;e!=n[150].length;++e)65533!==n[150][e].charCodeAt(0)&&(r[n[150][e]]=38400+e,t[38400+e]=n[150][e]);for(n[151]="����������������������������������������������������������������桜桝桞桟桪桬桭桮桯桰桱桲桳桵桸桹桺桻桼桽桾桿梀梂梄梇梈梉梊梋梌梍梎梐梑梒梔梕梖梘梙梚梛梜條梞梟梠梡梣梤梥梩梪梫梬梮梱梲梴梶梷梸�梹梺梻梼梽梾梿棁棃棄棅棆棇棈棊棌棎棏棐棑棓棔棖棗棙棛棜棝棞棟棡棢棤棥棦棧棨棩棪棫棬棭棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆椇椈椉椊椌椏椑椓椔椕椖椗椘椙椚椛検椝椞椡椢椣椥椦椧椨椩椪椫椬椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楕楖楘楙楛楜楟�".split(""),e=0;e!=n[151].length;++e)65533!==n[151][e].charCodeAt(0)&&(r[n[151][e]]=38656+e,t[38656+e]=n[151][e]);for(n[152]="����������������������������������������������������������������楡楢楤楥楧楨楩楪楬業楯楰楲楳楴極楶楺楻楽楾楿榁榃榅榊榋榌榎榏榐榑榒榓榖榗榙榚榝榞榟榠榡榢榣榤榥榦榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽�榾榿槀槂槃槄槅槆槇槈槉構槍槏槑槒槓槕槖槗様槙槚槜槝槞槡槢槣槤槥槦槧槨槩槪槫槬槮槯槰槱槳槴槵槶槷槸槹槺槻槼槾樀樁樂樃樄樅樆樇樈樉樋樌樍樎樏樐樑樒樓樔樕樖標樚樛樜樝樞樠樢樣樤樥樦樧権樫樬樭樮樰樲樳樴樶樷樸樹樺樻樼樿橀橁橂橃橅橆橈橉橊橋橌橍橎橏橑橒橓橔橕橖橗橚�".split(""),e=0;e!=n[152].length;++e)65533!==n[152][e].charCodeAt(0)&&(r[n[152][e]]=38912+e,t[38912+e]=n[152][e]);for(n[153]="����������������������������������������������������������������橜橝橞機橠橢橣橤橦橧橨橩橪橫橬橭橮橯橰橲橳橴橵橶橷橸橺橻橽橾橿檁檂檃檅檆檇檈檉檊檋檌檍檏檒檓檔檕檖檘檙檚檛檜檝檞檟檡檢檣檤檥檦�檧檨檪檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟欥欦欨欩欪欫欬欭欮�".split(""),e=0;e!=n[153].length;++e)65533!==n[153][e].charCodeAt(0)&&(r[n[153][e]]=39168+e,t[39168+e]=n[153][e]);for(n[154]="����������������������������������������������������������������欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍歎歏歐歑歒歓歔歕歖歗歘歚歛歜歝歞歟歠歡歨歩歫歬歭歮歯歰歱歲歳歴歵歶歷歸歺歽歾歿殀殅殈�殌殎殏殐殑殔殕殗殘殙殜殝殞殟殠殢殣殤殥殦殧殨殩殫殬殭殮殯殰殱殲殶殸殹殺殻殼殽殾毀毃毄毆毇毈毉毊毌毎毐毑毘毚毜毝毞毟毠毢毣毤毥毦毧毨毩毬毭毮毰毱毲毴毶毷毸毺毻毼毾毿氀氁氂氃氄氈氉氊氋氌氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋汌汍汎汏汑汒汓汖汘�".split(""),e=0;e!=n[154].length;++e)65533!==n[154][e].charCodeAt(0)&&(r[n[154][e]]=39424+e,t[39424+e]=n[154][e]);for(n[155]="����������������������������������������������������������������汙汚汢汣汥汦汧汫汬汭汮汯汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘�泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟洠洡洢洣洤洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽浾浿涀涁涃涄涆涇涊涋涍涏涐涒涖涗涘涙涚涜涢涥涬涭涰涱涳涴涶涷涹涺涻涼涽涾淁淂淃淈淉淊�".split(""),e=0;e!=n[155].length;++e)65533!==n[155][e].charCodeAt(0)&&(r[n[155][e]]=39680+e,t[39680+e]=n[155][e]);for(n[156]="����������������������������������������������������������������淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽淾淿渀渁渂渃渄渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵�渶渷渹渻渼渽渾渿湀湁湂湅湆湇湈湉湊湋湌湏湐湑湒湕湗湙湚湜湝湞湠湡湢湣湤湥湦湧湨湩湪湬湭湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽満溁溂溄溇溈溊溋溌溍溎溑溒溓溔溕準溗溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪滫滬滭滮滯�".split(""),e=0;e!=n[156].length;++e)65533!==n[156][e].charCodeAt(0)&&(r[n[156][e]]=39936+e,t[39936+e]=n[156][e]);for(n[157]="����������������������������������������������������������������滰滱滲滳滵滶滷滸滺滻滼滽滾滿漀漁漃漄漅漇漈漊漋漌漍漎漐漑漒漖漗漘漙漚漛漜漝漞漟漡漢漣漥漦漧漨漬漮漰漲漴漵漷漸漹漺漻漼漽漿潀潁潂�潃潄潅潈潉潊潌潎潏潐潑潒潓潔潕潖潗潙潚潛潝潟潠潡潣潤潥潧潨潩潪潫潬潯潰潱潳潵潶潷潹潻潽潾潿澀澁澂澃澅澆澇澊澋澏澐澑澒澓澔澕澖澗澘澙澚澛澝澞澟澠澢澣澤澥澦澨澩澪澫澬澭澮澯澰澱澲澴澵澷澸澺澻澼澽澾澿濁濃濄濅濆濇濈濊濋濌濍濎濏濐濓濔濕濖濗濘濙濚濛濜濝濟濢濣濤濥�".split(""),e=0;e!=n[157].length;++e)65533!==n[157][e].charCodeAt(0)&&(r[n[157][e]]=40192+e,t[40192+e]=n[157][e]);for(n[158]="����������������������������������������������������������������濦濧濨濩濪濫濬濭濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀒瀓瀔瀕瀖瀗瀘瀙瀜瀝瀞瀟瀠瀡瀢瀤瀥瀦瀧瀨瀩瀪�瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀶瀷瀸瀺瀻瀼瀽瀾瀿灀灁灂灃灄灅灆灇灈灉灊灋灍灎灐灑灒灓灔灕灖灗灘灙灚灛灜灝灟灠灡灢灣灤灥灦灧灨灩灪灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞炟炠炡炢炣炤炥炦炧炨炩炪炰炲炴炵炶為炾炿烄烅烆烇烉烋烌烍烎烏烐烑烒烓烔烕烖烗烚�".split(""),e=0;e!=n[158].length;++e)65533!==n[158][e].charCodeAt(0)&&(r[n[158][e]]=40448+e,t[40448+e]=n[158][e]);for(n[159]="����������������������������������������������������������������烜烝烞烠烡烢烣烥烪烮烰烱烲烳烴烵烶烸烺烻烼烾烿焀焁焂焃焄焅焆焇焈焋焌焍焎焏焑焒焔焗焛焜焝焞焟焠無焢焣焤焥焧焨焩焪焫焬焭焮焲焳焴�焵焷焸焹焺焻焼焽焾焿煀煁煂煃煄煆煇煈煉煋煍煏煐煑煒煓煔煕煖煗煘煙煚煛煝煟煠煡煢煣煥煩煪煫煬煭煯煰煱煴煵煶煷煹煻煼煾煿熀熁熂熃熅熆熇熈熉熋熌熍熎熐熑熒熓熕熖熗熚熛熜熝熞熡熢熣熤熥熦熧熩熪熫熭熮熯熰熱熲熴熶熷熸熺熻熼熽熾熿燀燁燂燄燅燆燇燈燉燊燋燌燍燏燐燑燒燓�".split(""),e=0;e!=n[159].length;++e)65533!==n[159][e].charCodeAt(0)&&(r[n[159][e]]=40704+e,t[40704+e]=n[159][e]);for(n[160]="����������������������������������������������������������������燖燗燘燙燚燛燜燝燞營燡燢燣燤燦燨燩燪燫燬燭燯燰燱燲燳燴燵燶燷燸燺燻燼燽燾燿爀爁爂爃爄爅爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚�爛爜爞爟爠爡爢爣爤爥爦爧爩爫爭爮爯爲爳爴爺爼爾牀牁牂牃牄牅牆牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅犆犇犈犉犌犎犐犑犓犔犕犖犗犘犙犚犛犜犝犞犠犡犢犣犤犥犦犧犨犩犪犫犮犱犲犳犵犺犻犼犽犾犿狀狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛�".split(""),e=0;e!=n[160].length;++e)65533!==n[160][e].charCodeAt(0)&&(r[n[160][e]]=40960+e,t[40960+e]=n[160][e]);for(n[161]="����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�".split(""),e=0;e!=n[161].length;++e)65533!==n[161][e].charCodeAt(0)&&(r[n[161][e]]=41216+e,t[41216+e]=n[161][e]);for(n[162]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���".split(""),e=0;e!=n[162].length;++e)65533!==n[162][e].charCodeAt(0)&&(r[n[162][e]]=41472+e,t[41472+e]=n[162][e]);for(n[163]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=n[163].length;++e)65533!==n[163][e].charCodeAt(0)&&(r[n[163][e]]=41728+e,t[41728+e]=n[163][e]);for(n[164]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=n[164].length;++e)65533!==n[164][e].charCodeAt(0)&&(r[n[164][e]]=41984+e,t[41984+e]=n[164][e]);for(n[165]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=n[165].length;++e)65533!==n[165][e].charCodeAt(0)&&(r[n[165][e]]=42240+e,t[42240+e]=n[165][e]);for(n[166]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������︵︶︹︺︿﹀︽︾﹁﹂﹃﹄��︻︼︷︸︱�︳︴����������".split(""),e=0;e!=n[166].length;++e)65533!==n[166][e].charCodeAt(0)&&(r[n[166][e]]=42496+e,t[42496+e]=n[166][e]);for(n[167]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=n[167].length;++e)65533!==n[167][e].charCodeAt(0)&&(r[n[167][e]]=42752+e,t[42752+e]=n[167][e]);for(n[168]="����������������������������������������������������������������ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇�█▉▊▋▌▍▎▏▓▔▕▼▽◢◣◤◥☉⊕〒〝〞�����������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ�ńň�ɡ����ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������".split(""),e=0;e!=n[168].length;++e)65533!==n[168][e].charCodeAt(0)&&(r[n[168][e]]=43008+e,t[43008+e]=n[168][e]);for(n[169]="����������������������������������������������������������������〡〢〣〤〥〦〧〨〩㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦�℡㈱�‐���ー゛゜ヽヾ〆ゝゞ﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡�﹢﹣﹤﹥﹦﹨﹩﹪﹫�������������〇�������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������".split(""),e=0;e!=n[169].length;++e)65533!==n[169][e].charCodeAt(0)&&(r[n[169][e]]=43264+e,t[43264+e]=n[169][e]);for(n[170]="����������������������������������������������������������������狜狝狟狢狣狤狥狦狧狪狫狵狶狹狽狾狿猀猂猄猅猆猇猈猉猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀獁獂獃獄獅獆獇獈�獉獊獋獌獎獏獑獓獔獕獖獘獙獚獛獜獝獞獟獡獢獣獤獥獦獧獨獩獪獫獮獰獱�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[170].length;++e)65533!==n[170][e].charCodeAt(0)&&(r[n[170][e]]=43520+e,t[43520+e]=n[170][e]);for(n[171]="����������������������������������������������������������������獲獳獴獵獶獷獸獹獺獻獼獽獿玀玁玂玃玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣玤玥玦玧玨玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃珄珅珆珇�珋珌珎珒珓珔珕珖珗珘珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳珴珵珶珷�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[171].length;++e)65533!==n[171][e].charCodeAt(0)&&(r[n[171][e]]=43776+e,t[43776+e]=n[171][e]);for(n[172]="����������������������������������������������������������������珸珹珺珻珼珽現珿琀琁琂琄琇琈琋琌琍琎琑琒琓琔琕琖琗琘琙琜琝琞琟琠琡琣琤琧琩琫琭琯琱琲琷琸琹琺琻琽琾琿瑀瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍�瑎瑏瑐瑑瑒瑓瑔瑖瑘瑝瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑮瑯瑱瑲瑳瑴瑵瑸瑹瑺�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[172].length;++e)65533!==n[172][e].charCodeAt(0)&&(r[n[172][e]]=44032+e,t[44032+e]=n[172][e]);for(n[173]="����������������������������������������������������������������瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑璒璓璔璕璖璗璘璙璚璛璝璟璠璡璢璣璤璥璦璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璻璼璽璾璿瓀瓁瓂瓃瓄瓅瓆瓇�瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓓瓔瓕瓖瓗瓘瓙瓚瓛瓝瓟瓡瓥瓧瓨瓩瓪瓫瓬瓭瓰瓱瓲�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[173].length;++e)65533!==n[173][e].charCodeAt(0)&&(r[n[173][e]]=44288+e,t[44288+e]=n[173][e]);for(n[174]="����������������������������������������������������������������瓳瓵瓸瓹瓺瓻瓼瓽瓾甀甁甂甃甅甆甇甈甉甊甋甌甎甐甒甔甕甖甗甛甝甞甠甡產産甤甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘�畝畞畟畠畡畢畣畤畧畨畩畫畬畭畮畯異畱畳畵當畷畺畻畼畽畾疀疁疂疄疅疇�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[174].length;++e)65533!==n[174][e].charCodeAt(0)&&(r[n[174][e]]=44544+e,t[44544+e]=n[174][e]);for(n[175]="����������������������������������������������������������������疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦疧疨疩疪疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇�瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[175].length;++e)65533!==n[175][e].charCodeAt(0)&&(r[n[175][e]]=44800+e,t[44800+e]=n[175][e]);for(n[176]="����������������������������������������������������������������癅癆癇癈癉癊癋癎癏癐癑癒癓癕癗癘癙癚癛癝癟癠癡癢癤癥癦癧癨癩癪癬癭癮癰癱癲癳癴癵癶癷癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛�皜皝皞皟皠皡皢皣皥皦皧皨皩皪皫皬皭皯皰皳皵皶皷皸皹皺皻皼皽皾盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�".split(""),e=0;e!=n[176].length;++e)65533!==n[176][e].charCodeAt(0)&&(r[n[176][e]]=45056+e,t[45056+e]=n[176][e]);for(n[177]="����������������������������������������������������������������盄盇盉盋盌盓盕盙盚盜盝盞盠盡盢監盤盦盧盨盩盪盫盬盭盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎眏眐眑眒眓眔眕眖眗眘眛眜眝眞眡眣眤眥眧眪眫�眬眮眰眱眲眳眴眹眻眽眾眿睂睄睅睆睈睉睊睋睌睍睎睏睒睓睔睕睖睗睘睙睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�".split(""),e=0;e!=n[177].length;++e)65533!==n[177][e].charCodeAt(0)&&(r[n[177][e]]=45312+e,t[45312+e]=n[177][e]);for(n[178]="����������������������������������������������������������������睝睞睟睠睤睧睩睪睭睮睯睰睱睲睳睴睵睶睷睸睺睻睼瞁瞂瞃瞆瞇瞈瞉瞊瞋瞏瞐瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶瞷瞸瞹瞺�瞼瞾矀矁矂矃矄矅矆矇矈矉矊矋矌矎矏矐矑矒矓矔矕矖矘矙矚矝矞矟矠矡矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�".split(""),e=0;e!=n[178].length;++e)65533!==n[178][e].charCodeAt(0)&&(r[n[178][e]]=45568+e,t[45568+e]=n[178][e]);for(n[179]="����������������������������������������������������������������矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃砄砅砆砇砈砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚�硛硜硞硟硠硡硢硣硤硥硦硧硨硩硯硰硱硲硳硴硵硶硸硹硺硻硽硾硿碀碁碂碃场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�".split(""),e=0;e!=n[179].length;++e)65533!==n[179][e].charCodeAt(0)&&(r[n[179][e]]=45824+e,t[45824+e]=n[179][e]);for(n[180]="����������������������������������������������������������������碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨碩碪碫碬碭碮碯碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚磛磜磝磞磟磠磡磢磣�磤磥磦磧磩磪磫磭磮磯磰磱磳磵磶磸磹磻磼磽磾磿礀礂礃礄礆礇礈礉礊礋礌础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�".split(""),e=0;e!=n[180].length;++e)65533!==n[180][e].charCodeAt(0)&&(r[n[180][e]]=46080+e,t[46080+e]=n[180][e]);for(n[181]="����������������������������������������������������������������礍礎礏礐礑礒礔礕礖礗礘礙礚礛礜礝礟礠礡礢礣礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礵礶礷礸礹礽礿祂祃祄祅祇祊祋祌祍祎祏祐祑祒祔祕祘祙祡祣�祤祦祩祪祫祬祮祰祱祲祳祴祵祶祹祻祼祽祾祿禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�".split(""),e=0;e!=n[181].length;++e)65533!==n[181][e].charCodeAt(0)&&(r[n[181][e]]=46336+e,t[46336+e]=n[181][e]);for(n[182]="����������������������������������������������������������������禓禔禕禖禗禘禙禛禜禝禞禟禠禡禢禣禤禥禦禨禩禪禫禬禭禮禯禰禱禲禴禵禶禷禸禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙秚秛秜秝秞秠秡秢秥秨秪�秬秮秱秲秳秴秵秶秷秹秺秼秾秿稁稄稅稇稈稉稊稌稏稐稑稒稓稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�".split(""),e=0;e!=n[182].length;++e)65533!==n[182][e].charCodeAt(0)&&(r[n[182][e]]=46592+e,t[46592+e]=n[182][e]);for(n[183]="����������������������������������������������������������������稝稟稡稢稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稴稵稶稸稺稾穀穁穂穃穄穅穇穈穉穊穋穌積穎穏穐穒穓穔穕穖穘穙穚穛穜穝穞穟穠穡穢穣穤穥穦穧穨�穩穪穫穬穭穮穯穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�".split(""),e=0;e!=n[183].length;++e)65533!==n[183][e].charCodeAt(0)&&(r[n[183][e]]=46848+e,t[46848+e]=n[183][e]);for(n[184]="����������������������������������������������������������������窣窤窧窩窪窫窮窯窰窱窲窴窵窶窷窸窹窺窻窼窽窾竀竁竂竃竄竅竆竇竈竉竊竌竍竎竏竐竑竒竓竔竕竗竘竚竛竜竝竡竢竤竧竨竩竪竫竬竮竰竱竲竳�竴竵競竷竸竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�".split(""),e=0;e!=n[184].length;++e)65533!==n[184][e].charCodeAt(0)&&(r[n[184][e]]=47104+e,t[47104+e]=n[184][e]);for(n[185]="����������������������������������������������������������������笯笰笲笴笵笶笷笹笻笽笿筀筁筂筃筄筆筈筊筍筎筓筕筗筙筜筞筟筡筣筤筥筦筧筨筩筪筫筬筭筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆箇箈箉箊箋箌箎箏�箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹箺箻箼箽箾箿節篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�".split(""),e=0;e!=n[185].length;++e)65533!==n[185][e].charCodeAt(0)&&(r[n[185][e]]=47360+e,t[47360+e]=n[185][e]);for(n[186]="����������������������������������������������������������������篅篈築篊篋篍篎篏篐篒篔篕篖篗篘篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲篳篴篵篶篸篹篺篻篽篿簀簁簂簃簄簅簆簈簉簊簍簎簐簑簒簓簔簕簗簘簙�簚簛簜簝簞簠簡簢簣簤簥簨簩簫簬簭簮簯簰簱簲簳簴簵簶簷簹簺簻簼簽簾籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�".split(""),e=0;e!=n[186].length;++e)65533!==n[186][e].charCodeAt(0)&&(r[n[186][e]]=47616+e,t[47616+e]=n[186][e]);for(n[187]="����������������������������������������������������������������籃籄籅籆籇籈籉籊籋籌籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲籵籶籷籸籹籺籾籿粀粁粂粃粄粅粆粇�粈粊粋粌粍粎粏粐粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴粵粶粷粸粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�".split(""),e=0;e!=n[187].length;++e)65533!==n[187][e].charCodeAt(0)&&(r[n[187][e]]=47872+e,t[47872+e]=n[187][e]);for(n[188]="����������������������������������������������������������������粿糀糂糃糄糆糉糋糎糏糐糑糒糓糔糘糚糛糝糞糡糢糣糤糥糦糧糩糪糫糬糭糮糰糱糲糳糴糵糶糷糹糺糼糽糾糿紀紁紂紃約紅紆紇紈紉紋紌納紎紏紐�紑紒紓純紕紖紗紘紙級紛紜紝紞紟紡紣紤紥紦紨紩紪紬紭紮細紱紲紳紴紵紶肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�".split(""),e=0;e!=n[188].length;++e)65533!==n[188][e].charCodeAt(0)&&(r[n[188][e]]=48128+e,t[48128+e]=n[188][e]);for(n[189]="����������������������������������������������������������������紷紸紹紺紻紼紽紾紿絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟絠絡絢絣絤絥給絧絨絩絪絫絬絭絯絰統絲絳絴絵絶�絸絹絺絻絼絽絾絿綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�".split(""),e=0;e!=n[189].length;++e)65533!==n[189][e].charCodeAt(0)&&(r[n[189][e]]=48384+e,t[48384+e]=n[189][e]);for(n[190]="����������������������������������������������������������������継続綛綜綝綞綟綠綡綢綣綤綥綧綨綩綪綫綬維綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙�線緛緜緝緞緟締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�".split(""),e=0;e!=n[190].length;++e)65533!==n[190][e].charCodeAt(0)&&(r[n[190][e]]=48640+e,t[48640+e]=n[190][e]);for(n[191]="����������������������������������������������������������������緻緼緽緾緿縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹�縺縼總績縿繀繂繃繄繅繆繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�".split(""),e=0;e!=n[191].length;++e)65533!==n[191][e].charCodeAt(0)&&(r[n[191][e]]=48896+e,t[48896+e]=n[191][e]);for(n[192]="����������������������������������������������������������������繞繟繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿纀纁纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纜纝纞�纮纴纻纼绖绤绬绹缊缐缞缷缹缻缼缽缾缿罀罁罃罆罇罈罉罊罋罌罍罎罏罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�".split(""),e=0;e!=n[192].length;++e)65533!==n[192][e].charCodeAt(0)&&(r[n[192][e]]=49152+e,t[49152+e]=n[192][e]);for(n[193]="����������������������������������������������������������������罖罙罛罜罝罞罠罣罤罥罦罧罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂羃羄羅羆羇羈羉羋羍羏羐羑羒羓羕羖羗羘羙羛羜羠羢羣羥羦羨義羪羫羬羭羮羱�羳羴羵羶羷羺羻羾翀翂翃翄翆翇翈翉翋翍翏翐翑習翓翖翗翙翚翛翜翝翞翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�".split(""),e=0;e!=n[193].length;++e)65533!==n[193][e].charCodeAt(0)&&(r[n[193][e]]=49408+e,t[49408+e]=n[193][e]);for(n[194]="����������������������������������������������������������������翤翧翨翪翫翬翭翯翲翴翵翶翷翸翹翺翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫耬耭耮耯耰耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗�聙聛聜聝聞聟聠聡聢聣聤聥聦聧聨聫聬聭聮聯聰聲聳聴聵聶職聸聹聺聻聼聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�".split(""),e=0;e!=n[194].length;++e)65533!==n[194][e].charCodeAt(0)&&(r[n[194][e]]=49664+e,t[49664+e]=n[194][e]);for(n[195]="����������������������������������������������������������������聾肁肂肅肈肊肍肎肏肐肑肒肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇胈胉胊胋胏胐胑胒胓胔胕胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋�脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�".split(""),e=0;e!=n[195].length;++e)65533!==n[195][e].charCodeAt(0)&&(r[n[195][e]]=49920+e,t[49920+e]=n[195][e]);for(n[196]="����������������������������������������������������������������腀腁腂腃腄腅腇腉腍腎腏腒腖腗腘腛腜腝腞腟腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃膄膅膆膇膉膋膌膍膎膐膒膓膔膕膖膗膙膚膞膟膠膡膢膤膥�膧膩膫膬膭膮膯膰膱膲膴膵膶膷膸膹膼膽膾膿臄臅臇臈臉臋臍臎臏臐臑臒臓摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�".split(""),e=0;e!=n[196].length;++e)65533!==n[196][e].charCodeAt(0)&&(r[n[196][e]]=50176+e,t[50176+e]=n[196][e]);for(n[197]="����������������������������������������������������������������臔臕臖臗臘臙臚臛臜臝臞臟臠臡臢臤臥臦臨臩臫臮臯臰臱臲臵臶臷臸臹臺臽臿舃與興舉舊舋舎舏舑舓舕舖舗舘舙舚舝舠舤舥舦舧舩舮舲舺舼舽舿�艀艁艂艃艅艆艈艊艌艍艎艐艑艒艓艔艕艖艗艙艛艜艝艞艠艡艢艣艤艥艦艧艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�".split(""),e=0;e!=n[197].length;++e)65533!==n[197][e].charCodeAt(0)&&(r[n[197][e]]=50432+e,t[50432+e]=n[197][e]);for(n[198]="����������������������������������������������������������������艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸�苺苼苽苾苿茀茊茋茍茐茒茓茖茘茙茝茞茟茠茡茢茣茤茥茦茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�".split(""),e=0;e!=n[198].length;++e)65533!==n[198][e].charCodeAt(0)&&(r[n[198][e]]=50688+e,t[50688+e]=n[198][e]);for(n[199]="����������������������������������������������������������������茾茿荁荂荄荅荈荊荋荌荍荎荓荕荖荗荘荙荝荢荰荱荲荳荴荵荶荹荺荾荿莀莁莂莃莄莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡莢莣莤莥莦莧莬莭莮�莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�".split(""),e=0;e!=n[199].length;++e)65533!==n[199][e].charCodeAt(0)&&(r[n[199][e]]=50944+e,t[50944+e]=n[199][e]);for(n[200]="����������������������������������������������������������������菮華菳菴菵菶菷菺菻菼菾菿萀萂萅萇萈萉萊萐萒萓萔萕萖萗萙萚萛萞萟萠萡萢萣萩萪萫萬萭萮萯萰萲萳萴萵萶萷萹萺萻萾萿葀葁葂葃葄葅葇葈葉�葊葋葌葍葎葏葐葒葓葔葕葖葘葝葞葟葠葢葤葥葦葧葨葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�".split(""),e=0;e!=n[200].length;++e)65533!==n[200][e].charCodeAt(0)&&(r[n[200][e]]=51200+e,t[51200+e]=n[200][e]);for(n[201]="����������������������������������������������������������������葽葾葿蒀蒁蒃蒄蒅蒆蒊蒍蒏蒐蒑蒒蒓蒔蒕蒖蒘蒚蒛蒝蒞蒟蒠蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗�蓘蓙蓚蓛蓜蓞蓡蓢蓤蓧蓨蓩蓪蓫蓭蓮蓯蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�".split(""),e=0;e!=n[201].length;++e)65533!==n[201][e].charCodeAt(0)&&(r[n[201][e]]=51456+e,t[51456+e]=n[201][e]);for(n[202]="����������������������������������������������������������������蔃蔄蔅蔆蔇蔈蔉蔊蔋蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢蔣蔤蔥蔦蔧蔨蔩蔪蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔾蔿蕀蕁蕂蕄蕅蕆蕇蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕�蕗蕘蕚蕛蕜蕝蕟蕠蕡蕢蕣蕥蕦蕧蕩蕪蕫蕬蕭蕮蕯蕰蕱蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�".split(""),e=0;e!=n[202].length;++e)65533!==n[202][e].charCodeAt(0)&&(r[n[202][e]]=51712+e,t[51712+e]=n[202][e]);for(n[203]="����������������������������������������������������������������薂薃薆薈薉薊薋薌薍薎薐薑薒薓薔薕薖薗薘薙薚薝薞薟薠薡薢薣薥薦薧薩薫薬薭薱薲薳薴薵薶薸薺薻薼薽薾薿藀藂藃藄藅藆藇藈藊藋藌藍藎藑藒�藔藖藗藘藙藚藛藝藞藟藠藡藢藣藥藦藧藨藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�".split(""),e=0;e!=n[203].length;++e)65533!==n[203][e].charCodeAt(0)&&(r[n[203][e]]=51968+e,t[51968+e]=n[203][e]);for(n[204]="����������������������������������������������������������������藹藺藼藽藾蘀蘁蘂蘃蘄蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘒蘓蘔蘕蘗蘘蘙蘚蘛蘜蘝蘞蘟蘠蘡蘢蘣蘤蘥蘦蘨蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘹蘺蘻蘽蘾蘿虀�虁虂虃虄虅虆虇虈虉虊虋虌虒虓處虖虗虘虙虛虜虝號虠虡虣虤虥虦虧虨虩虪獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�".split(""),e=0;e!=n[204].length;++e)65533!==n[204][e].charCodeAt(0)&&(r[n[204][e]]=52224+e,t[52224+e]=n[204][e]);for(n[205]="����������������������������������������������������������������虭虯虰虲虳虴虵虶虷虸蚃蚄蚅蚆蚇蚈蚉蚎蚏蚐蚑蚒蚔蚖蚗蚘蚙蚚蚛蚞蚟蚠蚡蚢蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻蚼蚽蚾蚿蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜�蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�".split(""),e=0;e!=n[205].length;++e)65533!==n[205][e].charCodeAt(0)&&(r[n[205][e]]=52480+e,t[52480+e]=n[205][e]);for(n[206]="����������������������������������������������������������������蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀蝁蝂蝃蝄蝅蝆蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚蝛蝜蝝蝞蝟蝡蝢蝦蝧蝨蝩蝪蝫蝬蝭蝯蝱蝲蝳蝵�蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎螏螐螑螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�".split(""),e=0;e!=n[206].length;++e)65533!==n[206][e].charCodeAt(0)&&(r[n[206][e]]=52736+e,t[52736+e]=n[206][e]);for(n[207]="����������������������������������������������������������������螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁蟂蟃蟄蟅蟇蟈蟉蟌蟍蟎蟏蟐蟔蟕蟖蟗蟘蟙蟚蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸�蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋蠌蠍蠎蠏蠐蠑蠒蠔蠗蠘蠙蠚蠜蠝蠞蠟蠠蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�".split(""),e=0;e!=n[207].length;++e)65533!==n[207][e].charCodeAt(0)&&(r[n[207][e]]=52992+e,t[52992+e]=n[207][e]);for(n[208]="����������������������������������������������������������������蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠳蠴蠵蠶蠷蠸蠺蠻蠽蠾蠿衁衂衃衆衇衈衉衊衋衎衏衐衑衒術衕衖衘衚衛衜衝衞衟衠衦衧衪衭衯衱衳衴衵衶衸衹衺�衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�".split(""),e=0;e!=n[208].length;++e)65533!==n[208][e].charCodeAt(0)&&(r[n[208][e]]=53248+e,t[53248+e]=n[208][e]);for(n[209]="����������������������������������������������������������������袬袮袯袰袲袳袴袵袶袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚裛補裝裞裠裡裦裧裩裪裫裬裭裮裯裲裵裶裷裺裻製裿褀褁褃褄褅褆複褈�褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟褠褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�".split(""),e=0;e!=n[209].length;++e)65533!==n[209][e].charCodeAt(0)&&(r[n[209][e]]=53504+e,t[53504+e]=n[209][e]);for(n[210]="����������������������������������������������������������������褸褹褺褻褼褽褾褿襀襂襃襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襠襡襢襣襤襥襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襼�襽襾覀覂覄覅覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�".split(""),e=0;e!=n[210].length;++e)65533!==n[210][e].charCodeAt(0)&&(r[n[210][e]]=53760+e,t[53760+e]=n[210][e]);for(n[211]="����������������������������������������������������������������覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿觀觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴觵觶觷觸觹觺�觻觼觽觾觿訁訂訃訄訅訆計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�".split(""),e=0;e!=n[211].length;++e)65533!==n[211][e].charCodeAt(0)&&(r[n[211][e]]=54016+e,t[54016+e]=n[211][e]);for(n[212]="����������������������������������������������������������������訞訟訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訿詀詁詂詃詄詅詆詇詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞�詟詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詺詻詼詽詾詿誀浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�".split(""),e=0;e!=n[212].length;++e)65533!==n[212][e].charCodeAt(0)&&(r[n[212][e]]=54272+e,t[54272+e]=n[212][e]);for(n[213]="����������������������������������������������������������������誁誂誃誄誅誆誇誈誋誌認誎誏誐誑誒誔誕誖誗誘誙誚誛誜誝語誟誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調諀諁諂�諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟諠諡諢諣铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�".split(""),e=0;e!=n[213].length;++e)65533!==n[213][e].charCodeAt(0)&&(r[n[213][e]]=54528+e,t[54528+e]=n[213][e]);for(n[214]="����������������������������������������������������������������諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿謀謁謂謃謄謅謆謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟謠謡謢謣�謤謥謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿譀譁譂譃譄譅帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�".split(""),e=0;e!=n[214].length;++e)65533!==n[214][e].charCodeAt(0)&&(r[n[214][e]]=54784+e,t[54784+e]=n[214][e]);for(n[215]="����������������������������������������������������������������譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟譠譡譢譣譤譥譧譨譩譪譫譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿讀讁讂讃讄讅讆�讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������".split(""),e=0;e!=n[215].length;++e)65533!==n[215][e].charCodeAt(0)&&(r[n[215][e]]=55040+e,t[55040+e]=n[215][e]);for(n[216]="����������������������������������������������������������������谸谹谺谻谼谽谾谿豀豂豃豄豅豈豊豋豍豎豏豐豑豒豓豔豖豗豘豙豛豜豝豞豟豠豣豤豥豦豧豨豩豬豭豮豯豰豱豲豴豵豶豷豻豼豽豾豿貀貁貃貄貆貇�貈貋貍貎貏貐貑貒貓貕貖貗貙貚貛貜貝貞貟負財貢貣貤貥貦貧貨販貪貫責貭亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�".split(""),e=0;e!=n[216].length;++e)65533!==n[216][e].charCodeAt(0)&&(r[n[216][e]]=55296+e,t[55296+e]=n[216][e]);for(n[217]="����������������������������������������������������������������貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟賠賡賢賣賤賥賦賧賨賩質賫賬�賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿贀贁贂贃贄贅贆贇贈贉贊贋贌贍佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�".split(""),e=0;e!=n[217].length;++e)65533!==n[217][e].charCodeAt(0)&&(r[n[217][e]]=55552+e,t[55552+e]=n[217][e]);for(n[218]="����������������������������������������������������������������贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸赹赺赻赼赽赾赿趀趂趃趆趇趈趉趌趍趎趏趐趒趓趕趖趗趘趙趚趛趜趝趞趠趡�趢趤趥趦趧趨趩趪趫趬趭趮趯趰趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�".split(""),e=0;e!=n[218].length;++e)65533!==n[218][e].charCodeAt(0)&&(r[n[218][e]]=55808+e,t[55808+e]=n[218][e]);for(n[219]="����������������������������������������������������������������跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾跿踀踁踂踃踄踆踇踈踋踍踎踐踑踒踓踕踖踗踘踙踚踛踜踠踡踤踥踦踧踨踫踭踰踲踳踴踶踷踸踻踼踾�踿蹃蹅蹆蹌蹍蹎蹏蹐蹓蹔蹕蹖蹗蹘蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�".split(""),e=0;e!=n[219].length;++e)65533!==n[219][e].charCodeAt(0)&&(r[n[219][e]]=56064+e,t[56064+e]=n[219][e]);for(n[220]="����������������������������������������������������������������蹳蹵蹷蹸蹹蹺蹻蹽蹾躀躂躃躄躆躈躉躊躋躌躍躎躑躒躓躕躖躗躘躙躚躛躝躟躠躡躢躣躤躥躦躧躨躩躪躭躮躰躱躳躴躵躶躷躸躹躻躼躽躾躿軀軁軂�軃軄軅軆軇軈軉車軋軌軍軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟軠軡転軣軤堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�".split(""),e=0;e!=n[220].length;++e)65533!==n[220][e].charCodeAt(0)&&(r[n[220][e]]=56320+e,t[56320+e]=n[220][e]);for(n[221]="����������������������������������������������������������������軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟輠輡輢輣�輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿轀轁轂轃轄荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�".split(""),e=0;e!=n[221].length;++e)65533!==n[221][e].charCodeAt(0)&&(r[n[221][e]]=56576+e,t[56576+e]=n[221][e]);for(n[222]="����������������������������������������������������������������轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟轠轡轢轣轤轥轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆�迉迊迋迌迍迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�".split(""),e=0;e!=n[222].length;++e)65533!==n[222][e].charCodeAt(0)&&(r[n[222][e]]=56832+e,t[56832+e]=n[222][e]);for(n[223]="����������������������������������������������������������������這逜連逤逥逧逨逩逪逫逬逰週進逳逴逷逹逺逽逿遀遃遅遆遈遉遊運遌過達違遖遙遚遜遝遞遟遠遡遤遦遧適遪遫遬遯遰遱遲遳遶遷選遹遺遻遼遾邁�還邅邆邇邉邊邌邍邎邏邐邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�".split(""),e=0;e!=n[223].length;++e)65533!==n[223][e].charCodeAt(0)&&(r[n[223][e]]=57088+e,t[57088+e]=n[223][e]);for(n[224]="����������������������������������������������������������������郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄚鄛鄜�鄝鄟鄠鄡鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄰鄲鄳鄴鄵鄶鄷鄸鄺鄻鄼鄽鄾鄿酀酁酂酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="����������������������������������������������������������������酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀醁醂醃醄醆醈醊醎醏醓醔醕醖醗醘醙醜醝醞醟醠醡醤醥醦醧醨醩醫醬醰醱醲醳醶醷醸醹醻�醼醽醾醿釀釁釂釃釄釅釆釈釋釐釒釓釔釕釖釗釘釙釚釛針釞釟釠釡釢釣釤釥帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="����������������������������������������������������������������釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟鈠鈡鈢鈣鈤�鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿鉀鉁鉂鉃鉄鉅狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="����������������������������������������������������������������鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿銀銁銂銃銄銅�銆銇銈銉銊銋銌銍銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟銠銡銢銣銤銥銦銧恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="����������������������������������������������������������������銨銩銪銫銬銭銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿鋀鋁鋂鋃鋄鋅鋆鋇鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟鋠鋡鋢鋣鋤鋥鋦鋧鋨�鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿錀錁錂錃錄錅錆錇錈錉洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="����������������������������������������������������������������錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錿鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉�鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="����������������������������������������������������������������鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫�鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="����������������������������������������������������������������鏎鏏鏐鏑鏒鏓鏔鏕鏗鏘鏙鏚鏛鏜鏝鏞鏟鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍�鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="����������������������������������������������������������������鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐿鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑬鑭鑮鑯�鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿钀钁钂钃钄钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="����������������������������������������������������������������锧锳锽镃镈镋镕镚镠镮镴镵長镸镹镺镻镼镽镾門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟閠閡関閣閤閥閦閧閨閩閪�閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿闀闁闂闃闄闅闆闇闈闉闊闋椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="����������������������������������������������������������������闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟闠闡闢闣闤闥闦闧闬闿阇阓阘阛阞阠阣阤阥阦阧阨阩阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗�陘陙陚陜陝陞陠陣陥陦陫陭陮陯陰陱陳陸陹険陻陼陽陾陿隀隁隂隃隄隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[235]="����������������������������������������������������������������隌階隑隒隓隕隖隚際隝隞隟隠隡隢隣隤隥隦隨隩險隫隬隭隮隯隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖雗雘雙雚雛雜雝雞雟雡離難雤雥雦雧雫�雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗霘霙霚霛霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�".split(""),e=0;e!=n[235].length;++e)65533!==n[235][e].charCodeAt(0)&&(r[n[235][e]]=60160+e,t[60160+e]=n[235][e]);for(n[236]="����������������������������������������������������������������霡霢霣霤霥霦霧霨霩霫霬霮霯霱霳霴霵霶霷霺霻霼霽霿靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑靔靕靗靘靚靜靝靟靣靤靦靧靨靪靫靬靭靮靯靰靱�靲靵靷靸靹靺靻靽靾靿鞀鞁鞂鞃鞄鞆鞇鞈鞉鞊鞌鞎鞏鞐鞓鞕鞖鞗鞙鞚鞛鞜鞝臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�".split(""),e=0;e!=n[236].length;++e)65533!==n[236][e].charCodeAt(0)&&(r[n[236][e]]=60416+e,t[60416+e]=n[236][e]);for(n[237]="����������������������������������������������������������������鞞鞟鞡鞢鞤鞥鞦鞧鞨鞩鞪鞬鞮鞰鞱鞳鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟韠韡韢韣�韤韥韨韮韯韰韱韲韴韷韸韹韺韻韼韽韾響頀頁頂頃頄項順頇須頉頊頋頌頍頎怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="����������������������������������������������������������������頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿顀顁顂顃顄顅顆顇顈顉顊顋題額�顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[239]="����������������������������������������������������������������顯顰顱顲顳顴颋颎颒颕颙颣風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿飀飁飂飃飄飅飆飇飈飉飊飋飌飍飏飐飔飖飗飛飜飝飠飡飢飣飤�飥飦飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿餀餁餂餃餄餅餆餇铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�".split(""),e=0;e!=n[239].length;++e)65533!==n[239][e].charCodeAt(0)&&(r[n[239][e]]=61184+e,t[61184+e]=n[239][e]);for(n[240]="����������������������������������������������������������������餈餉養餋餌餎餏餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟餠餡餢餣餤餥餦餧館餩餪餫餬餭餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿饀饁饂饃饄饅饆饇饈饉�饊饋饌饍饎饏饐饑饒饓饖饗饘饙饚饛饜饝饞饟饠饡饢饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�".split(""),e=0;e!=n[240].length;++e)65533!==n[240][e].charCodeAt(0)&&(r[n[240][e]]=61440+e,t[61440+e]=n[240][e]);for(n[241]="����������������������������������������������������������������馌馎馚馛馜馝馞馟馠馡馢馣馤馦馧馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘�駙駚駛駜駝駞駟駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�".split(""),e=0;e!=n[241].length;++e)65533!==n[241][e].charCodeAt(0)&&(r[n[241][e]]=61696+e,t[61696+e]=n[241][e]);for(n[242]="����������������������������������������������������������������駺駻駼駽駾駿騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸�騹騺騻騼騽騾騿驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�".split(""),e=0;e!=n[242].length;++e)65533!==n[242][e].charCodeAt(0)&&(r[n[242][e]]=61952+e,t[61952+e]=n[242][e]);for(n[243]="����������������������������������������������������������������驚驛驜驝驞驟驠驡驢驣驤驥驦驧驨驩驪驫驲骃骉骍骎骔骕骙骦骩骪骫骬骭骮骯骲骳骴骵骹骻骽骾骿髃髄髆髇髈髉髊髍髎髏髐髒體髕髖髗髙髚髛髜�髝髞髠髢髣髤髥髧髨髩髪髬髮髰髱髲髳髴髵髶髷髸髺髼髽髾髿鬀鬁鬂鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�".split(""),e=0;e!=n[243].length;++e)65533!==n[243][e].charCodeAt(0)&&(r[n[243][e]]=62208+e,t[62208+e]=n[243][e]);for(n[244]="����������������������������������������������������������������鬇鬉鬊鬋鬌鬍鬎鬐鬑鬒鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬠鬡鬢鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬰鬱鬳鬴鬵鬶鬷鬸鬹鬺鬽鬾鬿魀魆魊魋魌魎魐魒魓魕魖魗魘魙魚�魛魜魝魞魟魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�".split(""),e=0;e!=n[244].length;++e)65533!==n[244][e].charCodeAt(0)&&(r[n[244][e]]=62464+e,t[62464+e]=n[244][e]);for(n[245]="����������������������������������������������������������������魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺�鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�".split(""),e=0;e!=n[245].length;++e)65533!==n[245][e].charCodeAt(0)&&(r[n[245][e]]=62720+e,t[62720+e]=n[245][e]);for(n[246]="����������������������������������������������������������������鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚�鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�".split(""),e=0;e!=n[246].length;++e)65533!==n[246][e].charCodeAt(0)&&(r[n[246][e]]=62976+e,t[62976+e]=n[246][e]);for(n[247]="����������������������������������������������������������������鰼鰽鰾鰿鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺�鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾鲿鳀鳁鳂鳈鳉鳑鳒鳚鳛鳠鳡鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�".split(""),e=0;e!=n[247].length;++e)65533!==n[247][e].charCodeAt(0)&&(r[n[247][e]]=63232+e,t[63232+e]=n[247][e]);for(n[248]="����������������������������������������������������������������鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡�鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[248].length;++e)65533!==n[248][e].charCodeAt(0)&&(r[n[248][e]]=63488+e,t[63488+e]=n[248][e]);for(n[249]="����������������������������������������������������������������鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁�鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[249].length;++e)65533!==n[249][e].charCodeAt(0)&&(r[n[249][e]]=63744+e,t[63744+e]=n[249][e]);for(n[250]="����������������������������������������������������������������鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡�鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[250].length;++e)65533!==n[250][e].charCodeAt(0)&&(r[n[250][e]]=64e3+e,t[64e3+e]=n[250][e]);for(n[251]="����������������������������������������������������������������鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽麀�麁麃麄麅麆麉麊麌麍麎麏麐麑麔麕麖麗麘麙麚麛麜麞麠麡麢麣麤麥麧麨麩麪�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[251].length;++e)65533!==n[251][e].charCodeAt(0)&&(r[n[251][e]]=64256+e,t[64256+e]=n[251][e]);for(n[252]="����������������������������������������������������������������麫麬麭麮麯麰麱麲麳麵麶麷麹麺麼麿黀黁黂黃黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰黱黲黳黴黵黶黷黸黺黽黿鼀鼁鼂鼃鼄鼅�鼆鼇鼈鼉鼊鼌鼏鼑鼒鼔鼕鼖鼘鼚鼛鼜鼝鼞鼟鼡鼣鼤鼥鼦鼧鼨鼩鼪鼫鼭鼮鼰鼱�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[252].length;++e)65533!==n[252][e].charCodeAt(0)&&(r[n[252][e]]=64512+e,t[64512+e]=n[252][e]);for(n[253]="����������������������������������������������������������������鼲鼳鼴鼵鼶鼸鼺鼼鼿齀齁齂齃齅齆齇齈齉齊齋齌齍齎齏齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸�齹齺齻齼齽齾龁龂龍龎龏龐龑龒龓龔龕龖龗龘龜龝龞龡龢龣龤龥郎凉秊裏隣�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[253].length;++e)65533!==n[253][e].charCodeAt(0)&&(r[n[253][e]]=64768+e,t[64768+e]=n[253][e]);for(n[254]="����������������������������������������������������������������兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[254].length;++e)65533!==n[254][e].charCodeAt(0)&&(r[n[254][e]]=65024+e,t[65024+e]=n[254][e]);return{enc:r,dec:t}}(),a[949]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[129]="�����������������������������������������������������������������갂갃갅갆갋갌갍갎갏갘갞갟갡갢갣갥갦갧갨갩갪갫갮갲갳갴������갵갶갷갺갻갽갾갿걁걂걃걄걅걆걇걈걉걊걌걎걏걐걑걒걓걕������걖걗걙걚걛걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯걲걳걵걶걹걻걼걽걾걿겂겇겈겍겎겏겑겒겓겕겖겗겘겙겚겛겞겢겣겤겥겦겧겫겭겮겱겲겳겴겵겶겷겺겾겿곀곂곃곅곆곇곉곊곋곍곎곏곐곑곒곓곔곖곘곙곚곛곜곝곞곟곢곣곥곦곩곫곭곮곲곴곷곸곹곺곻곾곿괁괂괃괅괇괈괉괊괋괎괐괒괓�".split(""),e=0;e!=n[129].length;++e)65533!==n[129][e].charCodeAt(0)&&(r[n[129][e]]=33024+e,t[33024+e]=n[129][e]);for(n[130]="�����������������������������������������������������������������괔괕괖괗괙괚괛괝괞괟괡괢괣괤괥괦괧괨괪괫괮괯괰괱괲괳������괶괷괹괺괻괽괾괿굀굁굂굃굆굈굊굋굌굍굎굏굑굒굓굕굖굗������굙굚굛굜굝굞굟굠굢굤굥굦굧굨굩굪굫굮굯굱굲굷굸굹굺굾궀궃궄궅궆궇궊궋궍궎궏궑궒궓궔궕궖궗궘궙궚궛궞궟궠궡궢궣궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궸궹궺궻궼궽궾궿귂귃귅귆귇귉귊귋귌귍귎귏귒귔귕귖귗귘귙귚귛귝귞귟귡귢귣귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷�".split(""),e=0;e!=n[130].length;++e)65533!==n[130][e].charCodeAt(0)&&(r[n[130][e]]=33280+e,t[33280+e]=n[130][e]);for(n[131]="�����������������������������������������������������������������귺귻귽귾긂긃긄긅긆긇긊긌긎긏긐긑긒긓긕긖긗긘긙긚긛긜������긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯긲긳긵긶긹긻긼������긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗깘깙깚깛깞깢깣깤깦깧깪깫깭깮깯깱깲깳깴깵깶깷깺깾깿꺀꺁꺂꺃꺆꺇꺈꺉꺊꺋꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺿껁껂껃껅껆껇껈껉껊껋껎껒껓껔껕껖껗껚껛껝껞껟껠껡껢껣껤껥�".split(""),e=0;e!=n[131].length;++e)65533!==n[131][e].charCodeAt(0)&&(r[n[131][e]]=33536+e,t[33536+e]=n[131][e]);for(n[132]="�����������������������������������������������������������������껦껧껩껪껬껮껯껰껱껲껳껵껶껷껹껺껻껽껾껿꼀꼁꼂꼃꼄꼅������꼆꼉꼊꼋꼌꼎꼏꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣������꼤꼥꼦꼧꼨꼩꼪꼫꼮꼯꼱꼳꼵꼶꼷꼸꼹꼺꼻꼾꽀꽄꽅꽆꽇꽊꽋꽌꽍꽎꽏꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽞꽟꽠꽡꽢꽣꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽺꽻꽼꽽꽾꽿꾁꾂꾃꾅꾆꾇꾉꾊꾋꾌꾍꾎꾏꾒꾓꾔꾖꾗꾘꾙꾚꾛꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾺꾻꾽꾾�".split(""),e=0;e!=n[132].length;++e)65533!==n[132][e].charCodeAt(0)&&(r[n[132][e]]=33792+e,t[33792+e]=n[132][e]);for(n[133]="�����������������������������������������������������������������꾿꿁꿂꿃꿄꿅꿆꿊꿌꿏꿐꿑꿒꿓꿕꿖꿗꿘꿙꿚꿛꿝꿞꿟꿠꿡������꿢꿣꿤꿥꿦꿧꿪꿫꿬꿭꿮꿯꿲꿳꿵꿶꿷꿹꿺꿻꿼꿽꿾꿿뀂뀃������뀅뀆뀇뀈뀉뀊뀋뀍뀎뀏뀑뀒뀓뀕뀖뀗뀘뀙뀚뀛뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끾끿낁낂낃낅낆낇낈낉낊낋낎낐낒낓낔낕낖낗낛낝낞낣낤�".split(""),e=0;e!=n[133].length;++e)65533!==n[133][e].charCodeAt(0)&&(r[n[133][e]]=34048+e,t[34048+e]=n[133][e]);for(n[134]="�����������������������������������������������������������������낥낦낧낪낰낲낶낷낹낺낻낽낾낿냀냁냂냃냆냊냋냌냍냎냏냒������냓냕냖냗냙냚냛냜냝냞냟냡냢냣냤냦냧냨냩냪냫냬냭냮냯냰������냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇넊넍넎넏넑넔넕넖넗넚넞넟넠넡넢넦넧넩넪넫넭넮넯넰넱넲넳넶넺넻넼넽넾넿녂녃녅녆녇녉녊녋녌녍녎녏녒녓녖녗녙녚녛녝녞녟녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷녺녻녽녾녿놁놃놄놅놆놇놊놌놎놏놐놑놕놖놗놙놚놛놝�".split(""),e=0;e!=n[134].length;++e)65533!==n[134][e].charCodeAt(0)&&(r[n[134][e]]=34304+e,t[34304+e]=n[134][e]);for(n[135]="�����������������������������������������������������������������놞놟놠놡놢놣놤놥놦놧놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸������놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇍뇎뇏뇑뇒뇓뇕������뇖뇗뇘뇙뇚뇛뇞뇠뇡뇢뇣뇤뇥뇦뇧뇪뇫뇭뇮뇯뇱뇲뇳뇴뇵뇶뇷뇸뇺뇼뇾뇿눀눁눂눃눆눇눉눊눍눎눏눐눑눒눓눖눘눚눛눜눝눞눟눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눵눶눷눸눹눺눻눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉙뉚뉛뉝뉞뉟뉡뉢뉣뉤뉥뉦뉧뉪뉫뉬뉭뉮�".split(""),e=0;e!=n[135].length;++e)65533!==n[135][e].charCodeAt(0)&&(r[n[135][e]]=34560+e,t[34560+e]=n[135][e]);for(n[136]="�����������������������������������������������������������������뉯뉰뉱뉲뉳뉶뉷뉸뉹뉺뉻뉽뉾뉿늀늁늂늃늆늇늈늊늋늌늍늎������늏늒늓늕늖늗늛늜늝늞늟늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷������늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇닊닋닍닎닏닑닓닔닕닖닗닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉댊댋댌댍댎댏댒댖댗댘댙댚댛댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓덗덙덚덝덠덡덢덣�".split(""),e=0;e!=n[136].length;++e)65533!==n[136][e].charCodeAt(0)&&(r[n[136][e]]=34816+e,t[34816+e]=n[136][e]);for(n[137]="�����������������������������������������������������������������덦덨덪덬덭덯덲덳덵덶덷덹덺덻덼덽덾덿뎂뎆뎇뎈뎉뎊뎋뎍������뎎뎏뎑뎒뎓뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎢뎣뎤뎥뎦뎧뎩뎪뎫뎭������뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됑됒됓됔됕됖됗됙됚됛됝됞됟됡됢됣됤됥됦됧됪됬됭됮됯됰됱됲됳됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄�".split(""),e=0;e!=n[137].length;++e)65533!==n[137][e].charCodeAt(0)&&(r[n[137][e]]=35072+e,t[35072+e]=n[137][e]);for(n[138]="�����������������������������������������������������������������둅둆둇둈둉둊둋둌둍둎둏둒둓둕둖둗둙둚둛둜둝둞둟둢둤둦������둧둨둩둪둫둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒁뒂������뒃뒄뒅뒆뒇뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒞뒟뒠뒡뒢뒣뒥뒦뒧뒩뒪뒫뒭뒮뒯뒰뒱뒲뒳뒴뒶뒸뒺뒻뒼뒽뒾뒿듁듂듃듅듆듇듉듊듋듌듍듎듏듑듒듓듔듖듗듘듙듚듛듞듟듡듢듥듧듨듩듪듫듮듰듲듳듴듵듶듷듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓딖딗딙딚딝�".split(""),e=0;e!=n[138].length;++e)65533!==n[138][e].charCodeAt(0)&&(r[n[138][e]]=35328+e,t[35328+e]=n[138][e]);for(n[139]="�����������������������������������������������������������������딞딟딠딡딢딣딦딫딬딭딮딯딲딳딵딶딷딹딺딻딼딽딾딿땂땆������땇땈땉땊땎땏땑땒땓땕땖땗땘땙땚땛땞땢땣땤땥땦땧땨땩땪������땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떢떣떥떦떧떩떬떭떮떯떲떶떷떸떹떺떾떿뗁뗂뗃뗅뗆뗇뗈뗉뗊뗋뗎뗒뗓뗔뗕뗖뗗뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿�".split(""),e=0;e!=n[139].length;++e)65533!==n[139][e].charCodeAt(0)&&(r[n[139][e]]=35584+e,t[35584+e]=n[139][e]);for(n[140]="�����������������������������������������������������������������똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏똒똓똕똖똗똙똚똛똜똝������똞똟똠똡똢똣똤똦똧똨똩똪똫똭똮똯똰똱똲똳똵똶똷똸똹똺������똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙥뙦뙧뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚞뚟뚡뚢뚣뚥뚦뚧뚨뚩뚪뚭뚮뚯뚰뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂�".split(""),e=0;e!=n[140].length;++e)65533!==n[140][e].charCodeAt(0)&&(r[n[140][e]]=35840+e,t[35840+e]=n[140][e]);for(n[141]="�����������������������������������������������������������������뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛕뛖뛗뛘뛙뛚뛛뛜뛝������뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛱뛲뛳뛵뛶뛷뛹뛺������뛻뛼뛽뛾뛿뜂뜃뜄뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜪뜫뜭뜮뜱뜲뜳뜴뜵뜶뜷뜺뜼뜽뜾뜿띀띁띂띃띅띆띇띉띊띋띍띎띏띐띑띒띓띖띗띘띙띚띛띜띝띞띟띡띢띣띥띦띧띩띪띫띬띭띮띯띲띴띶띷띸띹띺띻띾띿랁랂랃랅랆랇랈랉랊랋랎랓랔랕랚랛랝랞�".split(""),e=0;e!=n[141].length;++e)65533!==n[141][e].charCodeAt(0)&&(r[n[141][e]]=36096+e,t[36096+e]=n[141][e]);for(n[142]="�����������������������������������������������������������������랟랡랢랣랤랥랦랧랪랮랯랰랱랲랳랶랷랹랺랻랼랽랾랿럀럁������럂럃럄럅럆럈럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝������럞럟럠럡럢럣럤럥럦럧럨럩럪럫럮럯럱럲럳럵럶럷럸럹럺럻럾렂렃렄렅렆렊렋렍렎렏렑렒렓렔렕렖렗렚렜렞렟렠렡렢렣렦렧렩렪렫렭렮렯렰렱렲렳렶렺렻렼렽렾렿롁롂롃롅롆롇롈롉롊롋롌롍롎롏롐롒롔롕롖롗롘롙롚롛롞롟롡롢롣롥롦롧롨롩롪롫롮롰롲롳롴롵롶롷롹롺롻롽롾롿뢀뢁뢂뢃뢄�".split(""),e=0;e!=n[142].length;++e)65533!==n[142][e].charCodeAt(0)&&(r[n[142][e]]=36352+e,t[36352+e]=n[142][e]);for(n[143]="�����������������������������������������������������������������뢅뢆뢇뢈뢉뢊뢋뢌뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟������뢠뢡뢢뢣뢤뢥뢦뢧뢩뢪뢫뢬뢭뢮뢯뢱뢲뢳뢵뢶뢷뢹뢺뢻뢼뢽������뢾뢿룂룄룆룇룈룉룊룋룍룎룏룑룒룓룕룖룗룘룙룚룛룜룞룠룢룣룤룥룦룧룪룫룭룮룯룱룲룳룴룵룶룷룺룼룾룿뤀뤁뤂뤃뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤙뤚뤛뤜뤝뤞뤟뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤾뤿륁륂륃륅륆륇륈륉륊륋륍륎륐륒륓륔륕륖륗�".split(""),e=0;e!=n[143].length;++e)65533!==n[143][e].charCodeAt(0)&&(r[n[143][e]]=36608+e,t[36608+e]=n[143][e]);for(n[144]="�����������������������������������������������������������������륚륛륝륞륟륡륢륣륤륥륦륧륪륬륮륯륰륱륲륳륶륷륹륺륻륽������륾륿릀릁릂릃릆릈릋릌릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞������릟릠릡릢릣릤릥릦릧릨릩릪릫릮릯릱릲릳릵릶릷릸릹릺릻릾맀맂맃맄맅맆맇맊맋맍맓맔맕맖맗맚맜맟맠맢맦맧맩맪맫맭맮맯맰맱맲맳맶맻맼맽맾맿먂먃먄먅먆먇먉먊먋먌먍먎먏먐먑먒먓먔먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷먺먻먽먾먿멁멃멄멅멆�".split(""),e=0;e!=n[144].length;++e)65533!==n[144][e].charCodeAt(0)&&(r[n[144][e]]=36864+e,t[36864+e]=n[144][e]);for(n[145]="�����������������������������������������������������������������멇멊멌멏멐멑멒멖멗멙멚멛멝멞멟멠멡멢멣멦멪멫멬멭멮멯������멲멳멵멶멷멹멺멻멼멽멾멿몀몁몂몆몈몉몊몋몍몎몏몐몑몒������몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧몪몭몮몯몱몳몴몵몶몷몺몼몾몿뫀뫁뫂뫃뫅뫆뫇뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫽뫾뫿묁묂묃묅묆묇묈묉묊묋묌묎묐묒묓묔묕묖묗묙묚묛묝묞묟묡묢묣묤묥묦묧�".split(""),e=0;e!=n[145].length;++e)65533!==n[145][e].charCodeAt(0)&&(r[n[145][e]]=37120+e,t[37120+e]=n[145][e]);for(n[146]="�����������������������������������������������������������������묨묪묬묭묮묯묰묱묲묳묷묹묺묿뭀뭁뭂뭃뭆뭈뭊뭋뭌뭎뭑뭒������뭓뭕뭖뭗뭙뭚뭛뭜뭝뭞뭟뭠뭢뭤뭥뭦뭧뭨뭩뭪뭫뭭뭮뭯뭰뭱������뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮉뮊뮋뮍뮎뮏뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮥뮦뮧뮩뮪뮫뮭뮮뮯뮰뮱뮲뮳뮵뮶뮸뮹뮺뮻뮼뮽뮾뮿믁믂믃믅믆믇믉믊믋믌믍믎믏믑믒믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷믺믻믽믾밁�".split(""),e=0;e!=n[146].length;++e)65533!==n[146][e].charCodeAt(0)&&(r[n[146][e]]=37376+e,t[37376+e]=n[146][e]);for(n[147]="�����������������������������������������������������������������밃밄밅밆밇밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵������밶밷밹밺밻밼밽밾밿뱂뱆뱇뱈뱊뱋뱎뱏뱑뱒뱓뱔뱕뱖뱗뱘뱙������뱚뱛뱜뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃벆벇벉벊벍벏벐벑벒벓벖벘벛벜벝벞벟벢벣벥벦벩벪벫벬벭벮벯벲벶벷벸벹벺벻벾벿볁볂볃볅볆볇볈볉볊볋볌볎볒볓볔볖볗볙볚볛볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳볷볹볺볻볽�".split(""),e=0;e!=n[147].length;++e)65533!==n[147][e].charCodeAt(0)&&(r[n[147][e]]=37632+e,t[37632+e]=n[147][e]);for(n[148]="�����������������������������������������������������������������볾볿봀봁봂봃봆봈봊봋봌봍봎봏봑봒봓봕봖봗봘봙봚봛봜봝������봞봟봠봡봢봣봥봦봧봨봩봪봫봭봮봯봰봱봲봳봴봵봶봷봸봹������봺봻봼봽봾봿뵁뵂뵃뵄뵅뵆뵇뵊뵋뵍뵎뵏뵑뵒뵓뵔뵕뵖뵗뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵥뵦뵧뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿붂붃붅붆붋붌붍붎붏붒붔붖붗붘붛붝붞붟붠붡붢붣붥붦붧붨붩붪붫붬붭붮붯붱붲붳붴붵붶붷붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑�".split(""),e=0;e!=n[148].length;++e)65533!==n[148][e].charCodeAt(0)&&(r[n[148][e]]=37888+e,t[37888+e]=n[148][e]);for(n[149]="�����������������������������������������������������������������뷒뷓뷖뷗뷙뷚뷛뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷪뷫뷬뷭뷮뷯뷱������뷲뷳뷵뷶뷷뷹뷺뷻뷼뷽뷾뷿븁븂븄븆븇븈븉븊븋븎븏븑븒븓������븕븖븗븘븙븚븛븞븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃빆빇빉빊빋빍빏빐빑빒빓빖빘빜빝빞빟빢빣빥빦빧빩빫빬빭빮빯빲빶빷빸빹빺빾빿뺁뺂뺃뺅뺆뺇뺈뺉뺊뺋뺎뺒뺓뺔뺕뺖뺗뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷�".split(""),e=0;e!=n[149].length;++e)65533!==n[149][e].charCodeAt(0)&&(r[n[149][e]]=38144+e,t[38144+e]=n[149][e]);for(n[150]="�����������������������������������������������������������������뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻒뻓������뻕뻖뻙뻚뻛뻜뻝뻞뻟뻡뻢뻦뻧뻨뻩뻪뻫뻭뻮뻯뻰뻱뻲뻳뻴뻵������뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼂뼃뼄뼅뼆뼇뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼚뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽂뽃뽅뽆뽇뽉뽊뽋뽌뽍뽎뽏뽒뽓뽔뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂�".split(""),e=0;e!=n[150].length;++e)65533!==n[150][e].charCodeAt(0)&&(r[n[150][e]]=38400+e,t[38400+e]=n[150][e]);for(n[151]="�����������������������������������������������������������������뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾕뾖뾗뾘뾙뾚뾛뾜뾝������뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾱뾲뾳뾴뾵뾶뾷뾸������뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿆뿇뿈뿉뿊뿋뿎뿏뿑뿒뿓뿕뿖뿗뿘뿙뿚뿛뿝뿞뿠뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀽쀾쀿�".split(""),e=0;e!=n[151].length;++e)65533!==n[151][e].charCodeAt(0)&&(r[n[151][e]]=38656+e,t[38656+e]=n[151][e]);for(n[152]="�����������������������������������������������������������������쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁒쁓쁔쁕쁖쁗쁙쁚쁛������쁝쁞쁟쁡쁢쁣쁤쁥쁦쁧쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹������쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삒삓삕삖삗삙삚삛삜삝삞삟삢삤삦삧삨삩삪삫삮삱삲삷삸삹삺삻삾샂샃샄샆샇샊샋샍샎샏샑샒샓샔샕샖샗샚샞샟샠샡샢샣샦샧샩샪샫샭샮샯샰샱샲샳샶샸샺샻샼샽샾샿섁섂섃섅섆섇섉섊섋섌섍섎섏섑섒섓섔섖섗섘섙섚섛섡섢섥섨섩섪섫섮�".split(""),e=0;e!=n[152].length;++e)65533!==n[152][e].charCodeAt(0)&&(r[n[152][e]]=38912+e,t[38912+e]=n[152][e]);for(n[153]="�����������������������������������������������������������������섲섳섴섵섷섺섻섽섾섿셁셂셃셄셅셆셇셊셎셏셐셑셒셓셖셗������셙셚셛셝셞셟셠셡셢셣셦셪셫셬셭셮셯셱셲셳셵셶셷셹셺셻������셼셽셾셿솀솁솂솃솄솆솇솈솉솊솋솏솑솒솓솕솗솘솙솚솛솞솠솢솣솤솦솧솪솫솭솮솯솱솲솳솴솵솶솷솸솹솺솻솼솾솿쇀쇁쇂쇃쇅쇆쇇쇉쇊쇋쇍쇎쇏쇐쇑쇒쇓쇕쇖쇙쇚쇛쇜쇝쇞쇟쇡쇢쇣쇥쇦쇧쇩쇪쇫쇬쇭쇮쇯쇲쇴쇵쇶쇷쇸쇹쇺쇻쇾쇿숁숂숃숅숆숇숈숉숊숋숎숐숒숓숔숕숖숗숚숛숝숞숡숢숣�".split(""),e=0;e!=n[153].length;++e)65533!==n[153][e].charCodeAt(0)&&(r[n[153][e]]=39168+e,t[39168+e]=n[153][e]);for(n[154]="�����������������������������������������������������������������숤숥숦숧숪숬숮숰숳숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅������쉆쉇쉉쉊쉋쉌쉍쉎쉏쉒쉓쉕쉖쉗쉙쉚쉛쉜쉝쉞쉟쉡쉢쉣쉤쉦������쉧쉨쉩쉪쉫쉮쉯쉱쉲쉳쉵쉶쉷쉸쉹쉺쉻쉾슀슂슃슄슅슆슇슊슋슌슍슎슏슑슒슓슔슕슖슗슙슚슜슞슟슠슡슢슣슦슧슩슪슫슮슯슰슱슲슳슶슸슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛싞싟싡싢싥싦싧싨싩싪싮싰싲싳싴싵싷싺싽싾싿쌁쌂쌃쌄쌅쌆쌇쌊쌋쌎쌏�".split(""),e=0;e!=n[154].length;++e)65533!==n[154][e].charCodeAt(0)&&(r[n[154][e]]=39424+e,t[39424+e]=n[154][e]);for(n[155]="�����������������������������������������������������������������쌐쌑쌒쌖쌗쌙쌚쌛쌝쌞쌟쌠쌡쌢쌣쌦쌧쌪쌫쌬쌭쌮쌯쌰쌱쌲������쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썆썇썈썉썊썋썌썍������썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧썪썫썭썮썯썱썳썴썵썶썷썺썻썾썿쎀쎁쎂쎃쎅쎆쎇쎉쎊쎋쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏚�".split(""),e=0;e!=n[155].length;++e)65533!==n[155][e].charCodeAt(0)&&(r[n[155][e]]=39680+e,t[39680+e]=n[155][e]);for(n[156]="�����������������������������������������������������������������쏛쏝쏞쏡쏣쏤쏥쏦쏧쏪쏫쏬쏮쏯쏰쏱쏲쏳쏶쏷쏹쏺쏻쏼쏽쏾������쏿쐀쐁쐂쐃쐄쐅쐆쐇쐉쐊쐋쐌쐍쐎쐏쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚������쐛쐜쐝쐞쐟쐠쐡쐢쐣쐥쐦쐧쐨쐩쐪쐫쐭쐮쐯쐱쐲쐳쐵쐶쐷쐸쐹쐺쐻쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑦쑧쑩쑪쑫쑭쑮쑯쑰쑱쑲쑳쑶쑷쑸쑺쑻쑼쑽쑾쑿쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒕쒖쒗쒘쒙쒚쒛쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩�".split(""),e=0;e!=n[156].length;++e)65533!==n[156][e].charCodeAt(0)&&(r[n[156][e]]=39936+e,t[39936+e]=n[156][e]);for(n[157]="�����������������������������������������������������������������쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒹쒺쒻쒽쒾쒿쓀쓁쓂쓃쓄쓅������쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟������쓠쓡쓢쓣쓤쓥쓦쓧쓨쓪쓫쓬쓭쓮쓯쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂씃씄씅씆씇씈씉씊씋씍씎씏씑씒씓씕씖씗씘씙씚씛씝씞씟씠씡씢씣씤씥씦씧씪씫씭씮씯씱씲씳씴씵씶씷씺씼씾씿앀앁앂앃앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩앪앫앬앭앮앯앲앶앷앸앹앺앻앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔�".split(""),e=0;e!=n[157].length;++e)65533!==n[157][e].charCodeAt(0)&&(r[n[157][e]]=40192+e,t[40192+e]=n[157][e]);for(n[158]="�����������������������������������������������������������������얖얙얚얛얝얞얟얡얢얣얤얥얦얧얨얪얫얬얭얮얯얰얱얲얳얶������얷얺얿엀엁엂엃엋엍엏엒엓엕엖엗엙엚엛엜엝엞엟엢엤엦엧������엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑옒옓옔옕옖옗옚옝옞옟옠옡옢옣옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉왊왋왌왍왎왏왒왖왗왘왙왚왛왞왟왡왢왣왤왥왦왧왨왩왪왫왭왮왰왲왳왴왵왶왷왺왻왽왾왿욁욂욃욄욅욆욇욊욌욎욏욐욑욒욓욖욗욙욚욛욝욞욟욠욡욢욣욦�".split(""),e=0;e!=n[158].length;++e)65533!==n[158][e].charCodeAt(0)&&(r[n[158][e]]=40448+e,t[40448+e]=n[158][e]);for(n[159]="�����������������������������������������������������������������욨욪욫욬욭욮욯욲욳욵욶욷욻욼욽욾욿웂웄웆웇웈웉웊웋웎������웏웑웒웓웕웖웗웘웙웚웛웞웟웢웣웤웥웦웧웪웫웭웮웯웱웲������웳웴웵웶웷웺웻웼웾웿윀윁윂윃윆윇윉윊윋윍윎윏윐윑윒윓윖윘윚윛윜윝윞윟윢윣윥윦윧윩윪윫윬윭윮윯윲윴윶윸윹윺윻윾윿읁읂읃읅읆읇읈읉읋읎읐읙읚읛읝읞읟읡읢읣읤읥읦읧읩읪읬읭읮읯읰읱읲읳읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛잜잝잞잟잢잧잨잩잪잫잮잯잱잲잳잵잶잷�".split(""),e=0;e!=n[159].length;++e)65533!==n[159][e].charCodeAt(0)&&(r[n[159][e]]=40704+e,t[40704+e]=n[159][e]);for(n[160]="�����������������������������������������������������������������잸잹잺잻잾쟂쟃쟄쟅쟆쟇쟊쟋쟍쟏쟑쟒쟓쟔쟕쟖쟗쟙쟚쟛쟜������쟞쟟쟠쟡쟢쟣쟥쟦쟧쟩쟪쟫쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺������쟻쟼쟽쟾쟿젂젃젅젆젇젉젋젌젍젎젏젒젔젗젘젙젚젛젞젟젡젢젣젥젦젧젨젩젪젫젮젰젲젳젴젵젶젷젹젺젻젽젾젿졁졂졃졄졅졆졇졊졋졎졏졐졑졒졓졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯졲졳졵졶졷졹졻졼졽졾졿좂좄좈좉좊좎좏좐좑좒좓좕좖좗좘좙좚좛좜좞좠좢좣좤�".split(""),e=0;e!=n[160].length;++e)65533!==n[160][e].charCodeAt(0)&&(r[n[160][e]]=40960+e,t[40960+e]=n[160][e]);for(n[161]="�����������������������������������������������������������������좥좦좧좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좾좿죀죁������죂죃죅죆죇죉죊죋죍죎죏죐죑죒죓죖죘죚죛죜죝죞죟죢죣죥������죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죶죷죸죹죺죻죾죿줁줂줃줇줈줉줊줋줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈〉《》「」『』【】±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬�".split(""),e=0;e!=n[161].length;++e)65533!==n[161][e].charCodeAt(0)&&(r[n[161][e]]=41216+e,t[41216+e]=n[161][e]);for(n[162]="�����������������������������������������������������������������줐줒줓줔줕줖줗줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫������줭줮줯줰줱줲줳줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇������쥈쥉쥊쥋쥌쥍쥎쥏쥒쥓쥕쥖쥗쥙쥚쥛쥜쥝쥞쥟쥢쥤쥥쥦쥧쥨쥩쥪쥫쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®������������������������".split(""),e=0;e!=n[162].length;++e)65533!==n[162][e].charCodeAt(0)&&(r[n[162][e]]=41472+e,t[41472+e]=n[162][e]);for(n[163]="�����������������������������������������������������������������쥱쥲쥳쥵쥶쥷쥸쥹쥺쥻쥽쥾쥿즀즁즂즃즄즅즆즇즊즋즍즎즏������즑즒즓즔즕즖즗즚즜즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮������즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿짂짃짅짆짉짋짌짍짎짏짒짔짗짘짛!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[₩]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=n[163].length;++e)65533!==n[163][e].charCodeAt(0)&&(r[n[163][e]]=41728+e,t[41728+e]=n[163][e]);for(n[164]="�����������������������������������������������������������������짞짟짡짣짥짦짨짩짪짫짮짲짳짴짵짶짷짺짻짽짾짿쨁쨂쨃쨄������쨅쨆쨇쨊쨎쨏쨐쨑쨒쨓쨕쨖쨗쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥������쨦쨧쨨쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ�".split(""),e=0;e!=n[164].length;++e)65533!==n[164][e].charCodeAt(0)&&(r[n[164][e]]=41984+e,t[41984+e]=n[164][e]);for(n[165]="�����������������������������������������������������������������쩇쩈쩉쩊쩋쩎쩏쩑쩒쩓쩕쩖쩗쩘쩙쩚쩛쩞쩢쩣쩤쩥쩦쩧쩩쩪������쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩾쩿쪀쪁쪂쪃쪅쪆������쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ�����ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������".split(""),e=0;e!=n[165].length;++e)65533!==n[165][e].charCodeAt(0)&&(r[n[165][e]]=42240+e,t[42240+e]=n[165][e]);for(n[166]="�����������������������������������������������������������������쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪾쪿쫁쫂쫃쫅������쫆쫇쫈쫉쫊쫋쫎쫐쫒쫔쫕쫖쫗쫚쫛쫜쫝쫞쫟쫡쫢쫣쫤쫥쫦쫧������쫨쫩쫪쫫쫭쫮쫯쫰쫱쫲쫳쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃╄╅╆╇╈╉╊���������������������������".split(""),e=0;e!=n[166].length;++e)65533!==n[166][e].charCodeAt(0)&&(r[n[166][e]]=42496+e,t[42496+e]=n[166][e]);for(n[167]="�����������������������������������������������������������������쬋쬌쬍쬎쬏쬑쬒쬓쬕쬖쬗쬙쬚쬛쬜쬝쬞쬟쬢쬣쬤쬥쬦쬧쬨쬩������쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭂쭃쭄������쭅쭆쭇쭊쭋쭍쭎쭏쭑쭒쭓쭔쭕쭖쭗쭚쭛쭜쭞쭟쭠쭡쭢쭣쭥쭦쭧쭨쭩쭪쭫쭬㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆����������������".split(""),e=0;e!=n[167].length;++e)65533!==n[167][e].charCodeAt(0)&&(r[n[167][e]]=42752+e,t[42752+e]=n[167][e]);for(n[168]="�����������������������������������������������������������������쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈������쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮝쮞쮟쮠쮡쮢쮣������쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄ÆÐªĦ�IJ�ĿŁØŒºÞŦŊ�㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮½⅓⅔¼¾⅛⅜⅝⅞�".split(""),e=0;e!=n[168].length;++e)65533!==n[168][e].charCodeAt(0)&&(r[n[168][e]]=43008+e,t[43008+e]=n[168][e]);for(n[169]="�����������������������������������������������������������������쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟������쯠쯡쯢쯣쯥쯦쯨쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼������쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찎찏찑찒찓찕찖찗찘찙찚찛찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂¹²³⁴ⁿ₁₂₃₄�".split(""),e=0;e!=n[169].length;++e)65533!==n[169][e].charCodeAt(0)&&(r[n[169][e]]=43264+e,t[43264+e]=n[169][e]);for(n[170]="�����������������������������������������������������������������찥찦찪찫찭찯찱찲찳찴찵찶찷찺찿챀챁챂챃챆챇챉챊챋챍챎������챏챐챑챒챓챖챚챛챜챝챞챟챡챢챣챥챧챩챪챫챬챭챮챯챱챲������챳챴챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=n[170].length;++e)65533!==n[170][e].charCodeAt(0)&&(r[n[170][e]]=43520+e,t[43520+e]=n[170][e]);for(n[171]="�����������������������������������������������������������������첔첕첖첗첚첛첝첞첟첡첢첣첤첥첦첧첪첮첯첰첱첲첳첶첷첹������첺첻첽첾첿쳀쳁쳂쳃쳆쳈쳊쳋쳌쳍쳎쳏쳑쳒쳓쳕쳖쳗쳘쳙쳚������쳛쳜쳝쳞쳟쳠쳡쳢쳣쳥쳦쳧쳨쳩쳪쳫쳭쳮쳯쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=n[171].length;++e)65533!==n[171][e].charCodeAt(0)&&(r[n[171][e]]=43776+e,t[43776+e]=n[171][e]);for(n[172]="�����������������������������������������������������������������쳾쳿촀촂촃촄촅촆촇촊촋촍촎촏촑촒촓촔촕촖촗촚촜촞촟촠������촡촢촣촥촦촧촩촪촫촭촮촯촰촱촲촳촴촵촶촷촸촺촻촼촽촾������촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛쵝쵞쵟АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=n[172].length;++e)65533!==n[172][e].charCodeAt(0)&&(r[n[172][e]]=44032+e,t[44032+e]=n[172][e]);for(n[173]="�����������������������������������������������������������������쵡쵢쵣쵥쵦쵧쵨쵩쵪쵫쵮쵰쵲쵳쵴쵵쵶쵷쵹쵺쵻쵼쵽쵾쵿춀������춁춂춃춄춅춆춇춉춊춋춌춍춎춏춐춑춒춓춖춗춙춚춛춝춞춟������춠춡춢춣춦춨춪춫춬춭춮춯춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췅�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[173].length;++e)65533!==n[173][e].charCodeAt(0)&&(r[n[173][e]]=44288+e,t[44288+e]=n[173][e]);for(n[174]="�����������������������������������������������������������������췆췇췈췉췊췋췍췎췏췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡������췢췣췤췥췦췧췩췪췫췭췮췯췱췲췳췴췵췶췷췺췼췾췿츀츁츂������츃츅츆츇츉츊츋츍츎츏츐츑츒츓츕츖츗츘츚츛츜츝츞츟츢츣츥츦츧츩츪츫�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[174].length;++e)65533!==n[174][e].charCodeAt(0)&&(r[n[174][e]]=44544+e,t[44544+e]=n[174][e]);for(n[175]="�����������������������������������������������������������������츬츭츮츯츲츴츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉������칊칋칌칍칎칏칐칑칒칓칔칕칖칗칚칛칝칞칢칣칤칥칦칧칪칬������칮칯칰칱칲칳칶칷칹칺칻칽칾칿캀캁캂캃캆캈캊캋캌캍캎캏캒캓캕캖캗캙�����������������������������������������������������������������������������������������������".split(""),e=0;e!=n[175].length;++e)65533!==n[175][e].charCodeAt(0)&&(r[n[175][e]]=44800+e,t[44800+e]=n[175][e]);for(n[176]="�����������������������������������������������������������������캚캛캜캝캞캟캢캦캧캨캩캪캫캮캯캰캱캲캳캴캵캶캷캸캹캺������캻캼캽캾캿컀컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕������컖컗컘컙컚컛컜컝컞컟컠컡컢컣컦컧컩컪컭컮컯컰컱컲컳컶컺컻컼컽컾컿가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆�".split(""),e=0;e!=n[176].length;++e)65533!==n[176][e].charCodeAt(0)&&(r[n[176][e]]=45056+e,t[45056+e]=n[176][e]);for(n[177]="�����������������������������������������������������������������켂켃켅켆켇켉켊켋켌켍켎켏켒켔켖켗켘켙켚켛켝켞켟켡켢켣������켥켦켧켨켩켪켫켮켲켳켴켵켶켷켹켺켻켼켽켾켿콀콁콂콃콄������콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓콖콗콙콚콛콝콞콟콠콡콢콣콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸�".split(""),e=0;e!=n[177].length;++e)65533!==n[177][e].charCodeAt(0)&&(r[n[177][e]]=45312+e,t[45312+e]=n[177][e]);for(n[178]="�����������������������������������������������������������������콭콮콯콲콳콵콶콷콹콺콻콼콽콾콿쾁쾂쾃쾄쾆쾇쾈쾉쾊쾋쾍������쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾢쾣쾤쾥쾦쾧쾩������쾪쾫쾬쾭쾮쾯쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿅쿆쿇쿈쿉쿊쿋깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙�".split(""),e=0;e!=n[178].length;++e)65533!==n[178][e].charCodeAt(0)&&(r[n[178][e]]=45568+e,t[45568+e]=n[178][e]);for(n[179]="�����������������������������������������������������������������쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿢쿣쿥쿦쿧쿩������쿪쿫쿬쿭쿮쿯쿲쿴쿶쿷쿸쿹쿺쿻쿽쿾쿿퀁퀂퀃퀅퀆퀇퀈퀉퀊������퀋퀌퀍퀎퀏퀐퀒퀓퀔퀕퀖퀗퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝�".split(""),e=0;e!=n[179].length;++e)65533!==n[179][e].charCodeAt(0)&&(r[n[179][e]]=45824+e,t[45824+e]=n[179][e]);for(n[180]="�����������������������������������������������������������������퀮퀯퀰퀱퀲퀳퀶퀷퀹퀺퀻퀽퀾퀿큀큁큂큃큆큈큊큋큌큍큎큏������큑큒큓큕큖큗큙큚큛큜큝큞큟큡큢큣큤큥큦큧큨큩큪큫큮큯������큱큲큳큵큶큷큸큹큺큻큾큿킀킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥�".split(""),e=0;e!=n[180].length;++e)65533!==n[180][e].charCodeAt(0)&&(r[n[180][e]]=46080+e,t[46080+e]=n[180][e]);for(n[181]="�����������������������������������������������������������������킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣킦킧킩킪킫킭킮킯킰킱킲������킳킶킸킺킻킼킽킾킿탂탃탅탆탇탊탋탌탍탎탏탒탖탗탘탙탚������탛탞탟탡탢탣탥탦탧탨탩탪탫탮탲탳탴탵탶탷탹탺탻탼탽탾탿턀턁턂턃턄덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸�".split(""),e=0;e!=n[181].length;++e)65533!==n[181][e].charCodeAt(0)&&(r[n[181][e]]=46336+e,t[46336+e]=n[181][e]);for(n[182]="�����������������������������������������������������������������턅턆턇턈턉턊턋턌턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟������턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯턲턳턵턶턷턹턻턼턽턾������턿텂텆텇텈텉텊텋텎텏텑텒텓텕텖텗텘텙텚텛텞텠텢텣텤텥텦텧텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗�".split(""),e=0;e!=n[182].length;++e)65533!==n[182][e].charCodeAt(0)&&(r[n[182][e]]=46592+e,t[46592+e]=n[182][e]);for(n[183]="�����������������������������������������������������������������텮텯텰텱텲텳텴텵텶텷텸텹텺텻텽텾텿톀톁톂톃톅톆톇톉톊������톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟톢톣톥톦톧������톩톪톫톬톭톮톯톲톴톶톷톸톹톻톽톾톿퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩�".split(""),e=0;e!=n[183].length;++e)65533!==n[183][e].charCodeAt(0)&&(r[n[183][e]]=46848+e,t[46848+e]=n[183][e]);for(n[184]="�����������������������������������������������������������������퇐퇑퇒퇓퇔퇕퇖퇗퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪������퇫퇬퇭퇮퇯퇰퇱퇲퇳퇵퇶퇷퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆������툈툊툋툌툍툎툏툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼�".split(""),e=0;e!=n[184].length;++e)65533!==n[184][e].charCodeAt(0)&&(r[n[184][e]]=47104+e,t[47104+e]=n[184][e]);for(n[185]="�����������������������������������������������������������������툪툫툮툯툱툲툳툵툶툷툸툹툺툻툾퉀퉂퉃퉄퉅퉆퉇퉉퉊퉋퉌������퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉝퉞퉟퉠퉡퉢퉣퉥퉦퉧퉨������퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗�".split(""),e=0;e!=n[185].length;++e)65533!==n[185][e].charCodeAt(0)&&(r[n[185][e]]=47360+e,t[47360+e]=n[185][e]);for(n[186]="�����������������������������������������������������������������튍튎튏튒튓튔튖튗튘튙튚튛튝튞튟튡튢튣튥튦튧튨튩튪튫튭������튮튯튰튲튳튴튵튶튷튺튻튽튾틁틃틄틅틆틇틊틌틍틎틏틐틑������틒틓틕틖틗틙틚틛틝틞틟틠틡틢틣틦틧틨틩틪틫틬틭틮틯틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤�".split(""),e=0;e!=n[186].length;++e)65533!==n[186][e].charCodeAt(0)&&(r[n[186][e]]=47616+e,t[47616+e]=n[186][e]);for(n[187]="�����������������������������������������������������������������틻틼틽틾틿팂팄팆팇팈팉팊팋팏팑팒팓팕팗팘팙팚팛팞팢팣������팤팦팧팪팫팭팮팯팱팲팳팴팵팶팷팺팾팿퍀퍁퍂퍃퍆퍇퍈퍉������퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤�".split(""),e=0;e!=n[187].length;++e)65533!==n[187][e].charCodeAt(0)&&(r[n[187][e]]=47872+e,t[47872+e]=n[187][e]);for(n[188]="�����������������������������������������������������������������퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍾퍿펁펂펃펅펆펇������펈펉펊펋펎펒펓펔펕펖펗펚펛펝펞펟펡펢펣펤펥펦펧펪펬펮������펯펰펱펲펳펵펶펷펹펺펻펽펾펿폀폁폂폃폆폇폊폋폌폍폎폏폑폒폓폔폕폖샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭�".split(""),e=0;e!=n[188].length;++e)65533!==n[188][e].charCodeAt(0)&&(r[n[188][e]]=48128+e,t[48128+e]=n[188][e]);for(n[189]="�����������������������������������������������������������������폗폙폚폛폜폝폞폟폠폢폤폥폦폧폨폩폪폫폮폯폱폲폳폵폶폷������폸폹폺폻폾퐀퐂퐃퐄퐅퐆퐇퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖������퐗퐘퐙퐚퐛퐜퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰�".split(""),e=0;e!=n[189].length;++e)65533!==n[189][e].charCodeAt(0)&&(r[n[189][e]]=48384+e,t[48384+e]=n[189][e]);for(n[190]="�����������������������������������������������������������������퐸퐹퐺퐻퐼퐽퐾퐿푁푂푃푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓������푔푕푖푗푘푙푚푛푝푞푟푡푢푣푥푦푧푨푩푪푫푬푮푰푱푲������푳푴푵푶푷푺푻푽푾풁풃풄풅풆풇풊풌풎풏풐풑풒풓풕풖풗풘풙풚풛풜풝쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎�".split(""),e=0;e!=n[190].length;++e)65533!==n[190][e].charCodeAt(0)&&(r[n[190][e]]=48640+e,t[48640+e]=n[190][e]);for(n[191]="�����������������������������������������������������������������풞풟풠풡풢풣풤풥풦풧풨풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸������풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓍퓎퓏퓑퓒퓓퓕������퓖퓗퓘퓙퓚퓛퓝퓞퓠퓡퓢퓣퓤퓥퓦퓧퓩퓪퓫퓭퓮퓯퓱퓲퓳퓴퓵퓶퓷퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨�".split(""),e=0;e!=n[191].length;++e)65533!==n[191][e].charCodeAt(0)&&(r[n[191][e]]=48896+e,t[48896+e]=n[191][e]);for(n[192]="�����������������������������������������������������������������퓾퓿픀픁픂픃픅픆픇픉픊픋픍픎픏픐픑픒픓픖픘픙픚픛픜픝������픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷������픸픹픺픻픾픿핁핂핃핅핆핇핈핉핊핋핎핐핒핓핔핕핖핗핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊�".split(""),e=0;e!=n[192].length;++e)65533!==n[192][e].charCodeAt(0)&&(r[n[192][e]]=49152+e,t[49152+e]=n[192][e]);for(n[193]="�����������������������������������������������������������������핤핦핧핪핬핮핯핰핱핲핳핶핷핹핺핻핽핾핿햀햁햂햃햆햊햋������햌햍햎햏햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤햦햧������햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓�".split(""),e=0;e!=n[193].length;++e)65533!==n[193][e].charCodeAt(0)&&(r[n[193][e]]=49408+e,t[49408+e]=n[193][e]);for(n[194]="�����������������������������������������������������������������헊헋헍헎헏헑헓헔헕헖헗헚헜헞헟헠헡헢헣헦헧헩헪헫헭헮������헯헰헱헲헳헶헸헺헻헼헽헾헿혂혃혅혆혇혉혊혋혌혍혎혏혒������혖혗혘혙혚혛혝혞혟혡혢혣혥혦혧혨혩혪혫혬혮혯혰혱혲혳혴혵혶혷혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻�".split(""),e=0;e!=n[194].length;++e)65533!==n[194][e].charCodeAt(0)&&(r[n[194][e]]=49664+e,t[49664+e]=n[194][e]);for(n[195]="�����������������������������������������������������������������혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝홞홟홠홡������홢홣홤홥홦홨홪홫홬홭홮홯홲홳홵홶홷홸홹홺홻홼홽홾홿횀������횁횂횄횆횇횈횉횊횋횎횏횑횒횓횕횖횗횘횙횚횛횜횞횠횢횣횤횥횦횧횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층�".split(""),e=0;e!=n[195].length;++e)65533!==n[195][e].charCodeAt(0)&&(r[n[195][e]]=49920+e,t[49920+e]=n[195][e]);for(n[196]="�����������������������������������������������������������������횫횭횮횯횱횲횳횴횵횶횷횸횺횼횽횾횿훀훁훂훃훆훇훉훊훋������훍훎훏훐훒훓훕훖훘훚훛훜훝훞훟훡훢훣훥훦훧훩훪훫훬훭������훮훯훱훲훳훴훶훷훸훹훺훻훾훿휁휂휃휅휆휇휈휉휊휋휌휍휎휏휐휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼�".split(""),e=0;e!=n[196].length;++e)65533!==n[196][e].charCodeAt(0)&&(r[n[196][e]]=50176+e,t[50176+e]=n[196][e]);for(n[197]="�����������������������������������������������������������������휕휖휗휚휛휝휞휟휡휢휣휤휥휦휧휪휬휮휯휰휱휲휳휶휷휹������휺휻휽휾휿흀흁흂흃흅흆흈흊흋흌흍흎흏흒흓흕흚흛흜흝흞������흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵흶흷흸흹흺흻흾흿힀힂힃힄힅힆힇힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜�".split(""),e=0;e!=n[197].length;++e)65533!==n[197][e].charCodeAt(0)&&(r[n[197][e]]=50432+e,t[50432+e]=n[197][e]);for(n[198]="�����������������������������������������������������������������힍힎힏힑힒힓힔힕힖힗힚힜힞힟힠힡힢힣������������������������������������������������������������������������������퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁�".split(""),e=0;e!=n[198].length;++e)65533!==n[198][e].charCodeAt(0)&&(r[n[198][e]]=50688+e,t[50688+e]=n[198][e]);for(n[199]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠�".split(""),e=0;e!=n[199].length;++e)65533!==n[199][e].charCodeAt(0)&&(r[n[199][e]]=50944+e,t[50944+e]=n[199][e]);for(n[200]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝�".split(""),e=0;e!=n[200].length;++e)65533!==n[200][e].charCodeAt(0)&&(r[n[200][e]]=51200+e,t[51200+e]=n[200][e]);for(n[202]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕�".split(""),e=0;e!=n[202].length;++e)65533!==n[202][e].charCodeAt(0)&&(r[n[202][e]]=51712+e,t[51712+e]=n[202][e]);for(n[203]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢�".split(""),e=0;e!=n[203].length;++e)65533!==n[203][e].charCodeAt(0)&&(r[n[203][e]]=51968+e,t[51968+e]=n[203][e]);for(n[204]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械�".split(""),e=0;e!=n[204].length;++e)65533!==n[204][e].charCodeAt(0)&&(r[n[204][e]]=52224+e,t[52224+e]=n[204][e]);for(n[205]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜�".split(""),e=0;e!=n[205].length;++e)65533!==n[205][e].charCodeAt(0)&&(r[n[205][e]]=52480+e,t[52480+e]=n[205][e]);for(n[206]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾�".split(""),e=0;e!=n[206].length;++e)65533!==n[206][e].charCodeAt(0)&&(r[n[206][e]]=52736+e,t[52736+e]=n[206][e]);for(n[207]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴�".split(""),e=0;e!=n[207].length;++e)65533!==n[207][e].charCodeAt(0)&&(r[n[207][e]]=52992+e,t[52992+e]=n[207][e]);for(n[208]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣�".split(""),e=0;e!=n[208].length;++e)65533!==n[208][e].charCodeAt(0)&&(r[n[208][e]]=53248+e,t[53248+e]=n[208][e]);for(n[209]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那樂洛烙珞落諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉�".split(""),e=0;e!=n[209].length;++e)65533!==n[209][e].charCodeAt(0)&&(r[n[209][e]]=53504+e,t[53504+e]=n[209][e]);for(n[210]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������納臘蠟衲囊娘廊朗浪狼郎乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺碌祿綠菉錄鹿論壟弄濃籠聾膿農惱牢磊腦賂雷尿壘屢樓淚漏累縷陋嫩訥杻紐勒肋凜凌稜綾能菱陵尼泥匿溺多茶�".split(""),e=0;e!=n[210].length;++e)65533!==n[210][e].charCodeAt(0)&&(r[n[210][e]]=53760+e,t[53760+e]=n[210][e]);for(n[211]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃�".split(""),e=0;e!=n[211].length;++e)65533!==n[211][e].charCodeAt(0)&&(r[n[211][e]]=54016+e,t[54016+e]=n[211][e]);for(n[212]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅�".split(""),e=0;e!=n[212].length;++e)65533!==n[212][e].charCodeAt(0)&&(r[n[212][e]]=54272+e,t[54272+e]=n[212][e]);for(n[213]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣�".split(""),e=0;e!=n[213].length;++e)65533!==n[213][e].charCodeAt(0)&&(r[n[213][e]]=54528+e,t[54528+e]=n[213][e]);for(n[214]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼�".split(""),e=0;e!=n[214].length;++e)65533!==n[214][e].charCodeAt(0)&&(r[n[214][e]]=54784+e,t[54784+e]=n[214][e]);for(n[215]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬�".split(""),e=0;e!=n[215].length;++e)65533!==n[215][e].charCodeAt(0)&&(r[n[215][e]]=55040+e,t[55040+e]=n[215][e]);for(n[216]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅�".split(""),e=0;e!=n[216].length;++e)65533!==n[216][e].charCodeAt(0)&&(r[n[216][e]]=55296+e,t[55296+e]=n[216][e]);for(n[217]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文�".split(""),e=0;e!=n[217].length;++e)65533!==n[217][e].charCodeAt(0)&&(r[n[217][e]]=55552+e,t[55552+e]=n[217][e]);for(n[218]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑�".split(""),e=0;e!=n[218].length;++e)65533!==n[218][e].charCodeAt(0)&&(r[n[218][e]]=55808+e,t[55808+e]=n[218][e]);for(n[219]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖�".split(""),e=0;e!=n[219].length;++e)65533!==n[219][e].charCodeAt(0)&&(r[n[219][e]]=56064+e,t[56064+e]=n[219][e]);for(n[220]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦�".split(""),e=0;e!=n[220].length;++e)65533!==n[220][e].charCodeAt(0)&&(r[n[220][e]]=56320+e,t[56320+e]=n[220][e]);for(n[221]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥�".split(""),e=0;e!=n[221].length;++e)65533!==n[221][e].charCodeAt(0)&&(r[n[221][e]]=56576+e,t[56576+e]=n[221][e]);for(n[222]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索�".split(""),e=0;e!=n[222].length;++e)65533!==n[222][e].charCodeAt(0)&&(r[n[222][e]]=56832+e,t[56832+e]=n[222][e]);for(n[223]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署�".split(""),e=0;e!=n[223].length;++e)65533!==n[223][e].charCodeAt(0)&&(r[n[223][e]]=57088+e,t[57088+e]=n[223][e]);for(n[224]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬�".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁�".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧�".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁�".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額�".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬�".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒�".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳�".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療�".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓�".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜�".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[235]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼�".split(""),e=0;e!=n[235].length;++e)65533!==n[235][e].charCodeAt(0)&&(r[n[235][e]]=60160+e,t[60160+e]=n[235][e]);for(n[236]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄�".split(""),e=0;e!=n[236].length;++e)65533!==n[236][e].charCodeAt(0)&&(r[n[236][e]]=60416+e,t[60416+e]=n[236][e]);for(n[237]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長�".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱�".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[239]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖�".split(""),e=0;e!=n[239].length;++e)65533!==n[239][e].charCodeAt(0)&&(r[n[239][e]]=61184+e,t[61184+e]=n[239][e]);for(n[240]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫�".split(""),e=0;e!=n[240].length;++e)65533!==n[240][e].charCodeAt(0)&&(r[n[240][e]]=61440+e,t[61440+e]=n[240][e]);for(n[241]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只�".split(""),e=0;e!=n[241].length;++e)65533!==n[241][e].charCodeAt(0)&&(r[n[241][e]]=61696+e,t[61696+e]=n[241][e]);for(n[242]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯�".split(""),e=0;e!=n[242].length;++e)65533!==n[242][e].charCodeAt(0)&&(r[n[242][e]]=61952+e,t[61952+e]=n[242][e]);for(n[243]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策�".split(""),e=0;e!=n[243].length;++e)65533!==n[243][e].charCodeAt(0)&&(r[n[243][e]]=62208+e,t[62208+e]=n[243][e]);for(n[244]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢�".split(""),e=0;e!=n[244].length;++e)65533!==n[244][e].charCodeAt(0)&&(r[n[244][e]]=62464+e,t[62464+e]=n[244][e]);for(n[245]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃�".split(""),e=0;e!=n[245].length;++e)65533!==n[245][e].charCodeAt(0)&&(r[n[245][e]]=62720+e,t[62720+e]=n[245][e]);for(n[246]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託�".split(""),e=0;e!=n[246].length;++e)65533!==n[246][e].charCodeAt(0)&&(r[n[246][e]]=62976+e,t[62976+e]=n[246][e]);for(n[247]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑�".split(""),e=0;e!=n[247].length;++e)65533!==n[247][e].charCodeAt(0)&&(r[n[247][e]]=63232+e,t[63232+e]=n[247][e]);for(n[248]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃�".split(""),e=0;e!=n[248].length;++e)65533!==n[248][e].charCodeAt(0)&&(r[n[248][e]]=63488+e,t[63488+e]=n[248][e]);for(n[249]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航�".split(""),e=0;e!=n[249].length;++e)65533!==n[249][e].charCodeAt(0)&&(r[n[249][e]]=63744+e,t[63744+e]=n[249][e]);for(n[250]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型�".split(""),e=0;e!=n[250].length;++e)65533!==n[250][e].charCodeAt(0)&&(r[n[250][e]]=64e3+e,t[64e3+e]=n[250][e]);for(n[251]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵�".split(""),e=0;e!=n[251].length;++e)65533!==n[251][e].charCodeAt(0)&&(r[n[251][e]]=64256+e,t[64256+e]=n[251][e]);for(n[252]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆�".split(""),e=0;e!=n[252].length;++e)65533!==n[252][e].charCodeAt(0)&&(r[n[252][e]]=64512+e,t[64512+e]=n[252][e]);for(n[253]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰�".split(""),e=0;e!=n[253].length;++e)65533!==n[253][e].charCodeAt(0)&&(r[n[253][e]]=64768+e,t[64768+e]=n[253][e]);return{enc:r,dec:t}}(),a[950]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[161]="���������������������������������������������������������������� ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚����������������������������������﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢﹣﹤﹥﹦~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/�".split(""),e=0;e!=n[161].length;++e)65533!==n[161][e].charCodeAt(0)&&(r[n[161][e]]=41216+e,t[41216+e]=n[161][e]);for(n[162]="����������������������������������������������������������������\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭����������������������������������╮╰╯═╞╪╡◢◣◥◤╱╲╳0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ〡〢〣〤〥〦〧〨〩十卄卅ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv�".split(""),e=0;e!=n[162].length;++e)65533!==n[162][e].charCodeAt(0)&&(r[n[162][e]]=41472+e,t[41472+e]=n[162][e]);for(n[163]="����������������������������������������������������������������wxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ����������������������������������ㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ���������������������������������€������������������������������".split(""),e=0;e!=n[163].length;++e)65533!==n[163][e].charCodeAt(0)&&(r[n[163][e]]=41728+e,t[41728+e]=n[163][e]);for(n[164]="����������������������������������������������������������������一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才����������������������������������丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙�".split(""),e=0;e!=n[164].length;++e)65533!==n[164][e].charCodeAt(0)&&(r[n[164][e]]=41984+e,t[41984+e]=n[164][e]);for(n[165]="����������������������������������������������������������������世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外����������������������������������央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全�".split(""),e=0;e!=n[165].length;++e)65533!==n[165][e].charCodeAt(0)&&(r[n[165][e]]=42240+e,t[42240+e]=n[165][e]);for(n[166]="����������������������������������������������������������������共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年����������������������������������式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣�".split(""),e=0;e!=n[166].length;++e)65533!==n[166][e].charCodeAt(0)&&(r[n[166][e]]=42496+e,t[42496+e]=n[166][e]);for(n[167]="����������������������������������������������������������������作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍����������������������������������均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠�".split(""),e=0;e!=n[167].length;++e)65533!==n[167][e].charCodeAt(0)&&(r[n[167][e]]=42752+e,t[42752+e]=n[167][e]);for(n[168]="����������������������������������������������������������������杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒����������������������������������芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵�".split(""),e=0;e!=n[168].length;++e)65533!==n[168][e].charCodeAt(0)&&(r[n[168][e]]=43008+e,t[43008+e]=n[168][e]);for(n[169]="����������������������������������������������������������������咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居����������������������������������屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊�".split(""),e=0;e!=n[169].length;++e)65533!==n[169][e].charCodeAt(0)&&(r[n[169][e]]=43264+e,t[43264+e]=n[169][e]);for(n[170]="����������������������������������������������������������������昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠����������������������������������炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附�".split(""),e=0;e!=n[170].length;++e)65533!==n[170][e].charCodeAt(0)&&(r[n[170][e]]=43520+e,t[43520+e]=n[170][e]);for(n[171]="����������������������������������������������������������������陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品����������������������������������哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷�".split(""),e=0;e!=n[171].length;++e)65533!==n[171][e].charCodeAt(0)&&(r[n[171][e]]=43776+e,t[43776+e]=n[171][e]);for(n[172]="����������������������������������������������������������������拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗����������������������������������活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄�".split(""),e=0;e!=n[172].length;++e)65533!==n[172][e].charCodeAt(0)&&(r[n[172][e]]=44032+e,t[44032+e]=n[172][e]);for(n[173]="����������������������������������������������������������������耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥����������������������������������迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪�".split(""),e=0;e!=n[173].length;++e)65533!==n[173][e].charCodeAt(0)&&(r[n[173][e]]=44288+e,t[44288+e]=n[173][e]);for(n[174]="����������������������������������������������������������������哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙����������������������������������恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓�".split(""),e=0;e!=n[174].length;++e)65533!==n[174][e].charCodeAt(0)&&(r[n[174][e]]=44544+e,t[44544+e]=n[174][e]);for(n[175]="����������������������������������������������������������������浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷����������������������������������砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃�".split(""),e=0;e!=n[175].length;++e)65533!==n[175][e].charCodeAt(0)&&(r[n[175][e]]=44800+e,t[44800+e]=n[175][e]);for(n[176]="����������������������������������������������������������������虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡����������������������������������陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀�".split(""),e=0;e!=n[176].length;++e)65533!==n[176][e].charCodeAt(0)&&(r[n[176][e]]=45056+e,t[45056+e]=n[176][e]);for(n[177]="����������������������������������������������������������������娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽����������������������������������情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺�".split(""),e=0;e!=n[177].length;++e)65533!==n[177][e].charCodeAt(0)&&(r[n[177][e]]=45312+e,t[45312+e]=n[177][e]);for(n[178]="����������������������������������������������������������������毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶����������������������������������瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼�".split(""),e=0;e!=n[178].length;++e)65533!==n[178][e].charCodeAt(0)&&(r[n[178][e]]=45568+e,t[45568+e]=n[178][e]);for(n[179]="����������������������������������������������������������������莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途����������������������������������部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠�".split(""),e=0;e!=n[179].length;++e)65533!==n[179][e].charCodeAt(0)&&(r[n[179][e]]=45824+e,t[45824+e]=n[179][e]);for(n[180]="����������������������������������������������������������������婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍����������������������������������插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋�".split(""),e=0;e!=n[180].length;++e)65533!==n[180][e].charCodeAt(0)&&(r[n[180][e]]=46080+e,t[46080+e]=n[180][e]);for(n[181]="����������������������������������������������������������������溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘����������������������������������窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁�".split(""),e=0;e!=n[181].length;++e)65533!==n[181][e].charCodeAt(0)&&(r[n[181][e]]=46336+e,t[46336+e]=n[181][e]);for(n[182]="����������������������������������������������������������������詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑����������������������������������間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼�".split(""),e=0;e!=n[182].length;++e)65533!==n[182][e].charCodeAt(0)&&(r[n[182][e]]=46592+e,t[46592+e]=n[182][e]);for(n[183]="����������������������������������������������������������������媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業����������������������������������楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督�".split(""),e=0;e!=n[183].length;++e)65533!==n[183][e].charCodeAt(0)&&(r[n[183][e]]=46848+e,t[46848+e]=n[183][e]);for(n[184]="����������������������������������������������������������������睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫����������������������������������腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊�".split(""),e=0;e!=n[184].length;++e)65533!==n[184][e].charCodeAt(0)&&(r[n[184][e]]=47104+e,t[47104+e]=n[184][e]);for(n[185]="����������������������������������������������������������������辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴����������������������������������飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇�".split(""),e=0;e!=n[185].length;++e)65533!==n[185][e].charCodeAt(0)&&(r[n[185][e]]=47360+e,t[47360+e]=n[185][e]);for(n[186]="����������������������������������������������������������������愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢����������������������������������滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬�".split(""),e=0;e!=n[186].length;++e)65533!==n[186][e].charCodeAt(0)&&(r[n[186][e]]=47616+e,t[47616+e]=n[186][e]);for(n[187]="����������������������������������������������������������������罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤����������������������������������說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜�".split(""),e=0;e!=n[187].length;++e)65533!==n[187][e].charCodeAt(0)&&(r[n[187][e]]=47872+e,t[47872+e]=n[187][e]);for(n[188]="����������������������������������������������������������������劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂����������������������������������慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃�".split(""),e=0;e!=n[188].length;++e)65533!==n[188][e].charCodeAt(0)&&(r[n[188][e]]=48128+e,t[48128+e]=n[188][e]);for(n[189]="����������������������������������������������������������������瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯����������������������������������翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞�".split(""),e=0;e!=n[189].length;++e)65533!==n[189][e].charCodeAt(0)&&(r[n[189][e]]=48384+e,t[48384+e]=n[189][e]);for(n[190]="����������������������������������������������������������������輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉����������������������������������鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡�".split(""),e=0;e!=n[190].length;++e)65533!==n[190][e].charCodeAt(0)&&(r[n[190][e]]=48640+e,t[48640+e]=n[190][e]);for(n[191]="����������������������������������������������������������������濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊����������������������������������縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚�".split(""),e=0;e!=n[191].length;++e)65533!==n[191][e].charCodeAt(0)&&(r[n[191][e]]=48896+e,t[48896+e]=n[191][e]);for(n[192]="����������������������������������������������������������������錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇����������������������������������嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬�".split(""),e=0;e!=n[192].length;++e)65533!==n[192][e].charCodeAt(0)&&(r[n[192][e]]=49152+e,t[49152+e]=n[192][e]);for(n[193]="����������������������������������������������������������������瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪����������������������������������薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁�".split(""),e=0;e!=n[193].length;++e)65533!==n[193][e].charCodeAt(0)&&(r[n[193][e]]=49408+e,t[49408+e]=n[193][e]);for(n[194]="����������������������������������������������������������������駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘����������������������������������癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦�".split(""),e=0;e!=n[194].length;++e)65533!==n[194][e].charCodeAt(0)&&(r[n[194][e]]=49664+e,t[49664+e]=n[194][e]);for(n[195]="����������������������������������������������������������������鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸����������������������������������獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類�".split(""),e=0;e!=n[195].length;++e)65533!==n[195][e].charCodeAt(0)&&(r[n[195][e]]=49920+e,t[49920+e]=n[195][e]);for(n[196]="����������������������������������������������������������������願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼����������������������������������纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴�".split(""),e=0;e!=n[196].length;++e)65533!==n[196][e].charCodeAt(0)&&(r[n[196][e]]=50176+e,t[50176+e]=n[196][e]);for(n[197]="����������������������������������������������������������������護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬����������������������������������禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒�".split(""),e=0;e!=n[197].length;++e)65533!==n[197][e].charCodeAt(0)&&(r[n[197][e]]=50432+e,t[50432+e]=n[197][e]);for(n[198]="����������������������������������������������������������������讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲���������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=n[198].length;++e)65533!==n[198][e].charCodeAt(0)&&(r[n[198][e]]=50688+e,t[50688+e]=n[198][e]);for(n[201]="����������������������������������������������������������������乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕����������������������������������氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋�".split(""),e=0;e!=n[201].length;++e)65533!==n[201][e].charCodeAt(0)&&(r[n[201][e]]=51456+e,t[51456+e]=n[201][e]);for(n[202]="����������������������������������������������������������������汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘����������������������������������吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇�".split(""),e=0;e!=n[202].length;++e)65533!==n[202][e].charCodeAt(0)&&(r[n[202][e]]=51712+e,t[51712+e]=n[202][e]);for(n[203]="����������������������������������������������������������������杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓����������������������������������芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢�".split(""),e=0;e!=n[203].length;++e)65533!==n[203][e].charCodeAt(0)&&(r[n[203][e]]=51968+e,t[51968+e]=n[203][e]);for(n[204]="����������������������������������������������������������������坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋����������������������������������怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲�".split(""),e=0;e!=n[204].length;++e)65533!==n[204][e].charCodeAt(0)&&(r[n[204][e]]=52224+e,t[52224+e]=n[204][e]);for(n[205]="����������������������������������������������������������������泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺����������������������������������矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏�".split(""),e=0;e!=n[205].length;++e)65533!==n[205][e].charCodeAt(0)&&(r[n[205][e]]=52480+e,t[52480+e]=n[205][e]);for(n[206]="����������������������������������������������������������������哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛����������������������������������峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺�".split(""),e=0;e!=n[206].length;++e)65533!==n[206][e].charCodeAt(0)&&(r[n[206][e]]=52736+e,t[52736+e]=n[206][e]);for(n[207]="����������������������������������������������������������������柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂����������������������������������洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀�".split(""),e=0;e!=n[207].length;++e)65533!==n[207][e].charCodeAt(0)&&(r[n[207][e]]=52992+e,t[52992+e]=n[207][e]);for(n[208]="����������������������������������������������������������������穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪����������������������������������苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱�".split(""),e=0;e!=n[208].length;++e)65533!==n[208][e].charCodeAt(0)&&(r[n[208][e]]=53248+e,t[53248+e]=n[208][e]);for(n[209]="����������������������������������������������������������������唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧����������������������������������恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤�".split(""),e=0;e!=n[209].length;++e)65533!==n[209][e].charCodeAt(0)&&(r[n[209][e]]=53504+e,t[53504+e]=n[209][e]);for(n[210]="����������������������������������������������������������������毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸����������������������������������牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐�".split(""),e=0;e!=n[210].length;++e)65533!==n[210][e].charCodeAt(0)&&(r[n[210][e]]=53760+e,t[53760+e]=n[210][e]);for(n[211]="����������������������������������������������������������������笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢����������������������������������荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐�".split(""),e=0;e!=n[211].length;++e)65533!==n[211][e].charCodeAt(0)&&(r[n[211][e]]=54016+e,t[54016+e]=n[211][e]);for(n[212]="����������������������������������������������������������������酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅����������������������������������唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏�".split(""),e=0;e!=n[212].length;++e)65533!==n[212][e].charCodeAt(0)&&(r[n[212][e]]=54272+e,t[54272+e]=n[212][e]);for(n[213]="����������������������������������������������������������������崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟����������������������������������捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉�".split(""),e=0;e!=n[213].length;++e)65533!==n[213][e].charCodeAt(0)&&(r[n[213][e]]=54528+e,t[54528+e]=n[213][e]);for(n[214]="����������������������������������������������������������������淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏����������������������������������痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟�".split(""),e=0;e!=n[214].length;++e)65533!==n[214][e].charCodeAt(0)&&(r[n[214][e]]=54784+e,t[54784+e]=n[214][e]);for(n[215]="����������������������������������������������������������������耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷����������������������������������蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪�".split(""),e=0;e!=n[215].length;++e)65533!==n[215][e].charCodeAt(0)&&(r[n[215][e]]=55040+e,t[55040+e]=n[215][e]);for(n[216]="����������������������������������������������������������������釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷����������������������������������堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔�".split(""),e=0;e!=n[216].length;++e)65533!==n[216][e].charCodeAt(0)&&(r[n[216][e]]=55296+e,t[55296+e]=n[216][e]);for(n[217]="����������������������������������������������������������������惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒����������������������������������晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞�".split(""),e=0;e!=n[217].length;++e)65533!==n[217][e].charCodeAt(0)&&(r[n[217][e]]=55552+e,t[55552+e]=n[217][e]);for(n[218]="����������������������������������������������������������������湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖����������������������������������琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥�".split(""),e=0;e!=n[218].length;++e)65533!==n[218][e].charCodeAt(0)&&(r[n[218][e]]=55808+e,t[55808+e]=n[218][e]);for(n[219]="����������������������������������������������������������������罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳����������������������������������菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺�".split(""),e=0;e!=n[219].length;++e)65533!==n[219][e].charCodeAt(0)&&(r[n[219][e]]=56064+e,t[56064+e]=n[219][e]);for(n[220]="����������������������������������������������������������������軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈����������������������������������隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆�".split(""),e=0;e!=n[220].length;++e)65533!==n[220][e].charCodeAt(0)&&(r[n[220][e]]=56320+e,t[56320+e]=n[220][e]);for(n[221]="����������������������������������������������������������������媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤����������������������������������搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼�".split(""),e=0;e!=n[221].length;++e)65533!==n[221][e].charCodeAt(0)&&(r[n[221][e]]=56576+e,t[56576+e]=n[221][e]);for(n[222]="����������������������������������������������������������������毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓����������������������������������煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓�".split(""),e=0;e!=n[222].length;++e)65533!==n[222][e].charCodeAt(0)&&(r[n[222][e]]=56832+e,t[56832+e]=n[222][e]);for(n[223]="����������������������������������������������������������������稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯����������������������������������腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤�".split(""),e=0;e!=n[223].length;++e)65533!==n[223][e].charCodeAt(0)&&(r[n[223][e]]=57088+e,t[57088+e]=n[223][e]);for(n[224]="����������������������������������������������������������������觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿����������������������������������遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠�".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="����������������������������������������������������������������凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠����������������������������������寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉�".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="����������������������������������������������������������������榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊����������������������������������漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓�".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="����������������������������������������������������������������禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞����������������������������������耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻�".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="����������������������������������������������������������������裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍����������������������������������銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘�".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="����������������������������������������������������������������噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉����������������������������������憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒�".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="����������������������������������������������������������������澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙����������������������������������獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟�".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="����������������������������������������������������������������膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢����������������������������������蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧�".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="����������������������������������������������������������������踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓����������������������������������銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮�".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="����������������������������������������������������������������噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺����������������������������������憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸�".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="����������������������������������������������������������������澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙����������������������������������瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘�".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[235]="����������������������������������������������������������������蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠����������������������������������諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌�".split(""),e=0;e!=n[235].length;++e)65533!==n[235][e].charCodeAt(0)&&(r[n[235][e]]=60160+e,t[60160+e]=n[235][e]);for(n[236]="����������������������������������������������������������������錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕����������������������������������魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎�".split(""),e=0;e!=n[236].length;++e)65533!==n[236][e].charCodeAt(0)&&(r[n[236][e]]=60416+e,t[60416+e]=n[236][e]);for(n[237]="����������������������������������������������������������������檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶����������������������������������瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞�".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="����������������������������������������������������������������蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞����������������������������������謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜�".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[239]="����������������������������������������������������������������鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰����������������������������������鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶�".split(""),e=0;e!=n[239].length;++e)65533!==n[239][e].charCodeAt(0)&&(r[n[239][e]]=61184+e,t[61184+e]=n[239][e]);for(n[240]="����������������������������������������������������������������璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒����������������������������������臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧�".split(""),e=0;e!=n[240].length;++e)65533!==n[240][e].charCodeAt(0)&&(r[n[240][e]]=61440+e,t[61440+e]=n[240][e]);for(n[241]="����������������������������������������������������������������蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪����������������������������������鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰�".split(""),e=0;e!=n[241].length;++e)65533!==n[241][e].charCodeAt(0)&&(r[n[241][e]]=61696+e,t[61696+e]=n[241][e]);for(n[242]="����������������������������������������������������������������徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛����������������������������������礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕�".split(""),e=0;e!=n[242].length;++e)65533!==n[242][e].charCodeAt(0)&&(r[n[242][e]]=61952+e,t[61952+e]=n[242][e]);for(n[243]="����������������������������������������������������������������譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦����������������������������������鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲�".split(""),e=0;e!=n[243].length;++e)65533!==n[243][e].charCodeAt(0)&&(r[n[243][e]]=62208+e,t[62208+e]=n[243][e]);for(n[244]="����������������������������������������������������������������嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩����������������������������������禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿�".split(""),e=0;e!=n[244].length;++e)65533!==n[244][e].charCodeAt(0)&&(r[n[244][e]]=62464+e,t[62464+e]=n[244][e]);for(n[245]="����������������������������������������������������������������鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛����������������������������������鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥�".split(""),e=0;e!=n[245].length;++e)65533!==n[245][e].charCodeAt(0)&&(r[n[245][e]]=62720+e,t[62720+e]=n[245][e]);for(n[246]="����������������������������������������������������������������蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺����������������������������������騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚�".split(""),e=0;e!=n[246].length;++e)65533!==n[246][e].charCodeAt(0)&&(r[n[246][e]]=62976+e,t[62976+e]=n[246][e]);for(n[247]="����������������������������������������������������������������糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊����������������������������������驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾�".split(""),e=0;e!=n[247].length;++e)65533!==n[247][e].charCodeAt(0)&&(r[n[247][e]]=63232+e,t[63232+e]=n[247][e]);for(n[248]="����������������������������������������������������������������讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏����������������������������������齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚�".split(""),e=0;e!=n[248].length;++e)65533!==n[248][e].charCodeAt(0)&&(r[n[248][e]]=63488+e,t[63488+e]=n[248][e]);for(n[249]="����������������������������������������������������������������纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊����������������������������������龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓�".split(""),e=0;e!=n[249].length;++e)65533!==n[249][e].charCodeAt(0)&&(r[n[249][e]]=63744+e,t[63744+e]=n[249][e]);return{enc:r,dec:t}}(),a[1250]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1251]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1252]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1253]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1254]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1255]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹ�ֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1256]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1257]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1258]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[1e4]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10006]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10007]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10008]=function(){var e,t=[],r={},n=[];for(n[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€���������������������������������������������������������������������������������������".split(""),e=0;e!=n[0].length;++e)65533!==n[0][e].charCodeAt(0)&&(r[n[0][e]]=0+e,t[0+e]=n[0][e]);for(n[161]="����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。・ˉˇ¨〃々―~�…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�".split(""),e=0;e!=n[161].length;++e)65533!==n[161][e].charCodeAt(0)&&(r[n[161][e]]=41216+e,t[41216+e]=n[161][e]);for(n[162]="���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���".split(""),e=0;e!=n[162].length;++e)65533!==n[162][e].charCodeAt(0)&&(r[n[162][e]]=41472+e,t[41472+e]=n[162][e]);for(n[163]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=n[163].length;++e)65533!==n[163][e].charCodeAt(0)&&(r[n[163][e]]=41728+e,t[41728+e]=n[163][e]);for(n[164]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=n[164].length;++e)65533!==n[164][e].charCodeAt(0)&&(r[n[164][e]]=41984+e,t[41984+e]=n[164][e]);for(n[165]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=n[165].length;++e)65533!==n[165][e].charCodeAt(0)&&(r[n[165][e]]=42240+e,t[42240+e]=n[165][e]);for(n[166]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω���������������������������������������".split(""),e=0;e!=n[166].length;++e)65533!==n[166][e].charCodeAt(0)&&(r[n[166][e]]=42496+e,t[42496+e]=n[166][e]);for(n[167]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=n[167].length;++e)65533!==n[167][e].charCodeAt(0)&&(r[n[167][e]]=42752+e,t[42752+e]=n[167][e]);for(n[168]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüê����������ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������".split(""),e=0;e!=n[168].length;++e)65533!==n[168][e].charCodeAt(0)&&(r[n[168][e]]=43008+e,t[43008+e]=n[168][e]);for(n[169]="��������������������������������������������������������������������������������������������������������������������������������������������������������������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������".split(""),e=0;e!=n[169].length;++e)65533!==n[169][e].charCodeAt(0)&&(r[n[169][e]]=43264+e,t[43264+e]=n[169][e]);for(n[176]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�".split(""),e=0;e!=n[176].length;++e)65533!==n[176][e].charCodeAt(0)&&(r[n[176][e]]=45056+e,t[45056+e]=n[176][e]);for(n[177]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�".split(""),e=0;e!=n[177].length;++e)65533!==n[177][e].charCodeAt(0)&&(r[n[177][e]]=45312+e,t[45312+e]=n[177][e]);for(n[178]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�".split(""),e=0;e!=n[178].length;++e)65533!==n[178][e].charCodeAt(0)&&(r[n[178][e]]=45568+e,t[45568+e]=n[178][e]);for(n[179]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�".split(""),e=0;e!=n[179].length;++e)65533!==n[179][e].charCodeAt(0)&&(r[n[179][e]]=45824+e,t[45824+e]=n[179][e]);for(n[180]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�".split(""),e=0;e!=n[180].length;++e)65533!==n[180][e].charCodeAt(0)&&(r[n[180][e]]=46080+e,t[46080+e]=n[180][e]);for(n[181]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�".split(""),e=0;e!=n[181].length;++e)65533!==n[181][e].charCodeAt(0)&&(r[n[181][e]]=46336+e,t[46336+e]=n[181][e]);for(n[182]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�".split(""),e=0;e!=n[182].length;++e)65533!==n[182][e].charCodeAt(0)&&(r[n[182][e]]=46592+e,t[46592+e]=n[182][e]);for(n[183]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�".split(""),e=0;e!=n[183].length;++e)65533!==n[183][e].charCodeAt(0)&&(r[n[183][e]]=46848+e,t[46848+e]=n[183][e]);for(n[184]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�".split(""),e=0;e!=n[184].length;++e)65533!==n[184][e].charCodeAt(0)&&(r[n[184][e]]=47104+e,t[47104+e]=n[184][e]);for(n[185]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�".split(""),e=0;e!=n[185].length;++e)65533!==n[185][e].charCodeAt(0)&&(r[n[185][e]]=47360+e,t[47360+e]=n[185][e]);for(n[186]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�".split(""),e=0;e!=n[186].length;++e)65533!==n[186][e].charCodeAt(0)&&(r[n[186][e]]=47616+e,t[47616+e]=n[186][e]);for(n[187]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�".split(""),e=0;e!=n[187].length;++e)65533!==n[187][e].charCodeAt(0)&&(r[n[187][e]]=47872+e,t[47872+e]=n[187][e]);for(n[188]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�".split(""),e=0;e!=n[188].length;++e)65533!==n[188][e].charCodeAt(0)&&(r[n[188][e]]=48128+e,t[48128+e]=n[188][e]);for(n[189]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�".split(""),e=0;e!=n[189].length;++e)65533!==n[189][e].charCodeAt(0)&&(r[n[189][e]]=48384+e,t[48384+e]=n[189][e]);for(n[190]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�".split(""),e=0;e!=n[190].length;++e)65533!==n[190][e].charCodeAt(0)&&(r[n[190][e]]=48640+e,t[48640+e]=n[190][e]);for(n[191]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�".split(""),e=0;e!=n[191].length;++e)65533!==n[191][e].charCodeAt(0)&&(r[n[191][e]]=48896+e,t[48896+e]=n[191][e]);for(n[192]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�".split(""),e=0;e!=n[192].length;++e)65533!==n[192][e].charCodeAt(0)&&(r[n[192][e]]=49152+e,t[49152+e]=n[192][e]);for(n[193]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�".split(""),e=0;e!=n[193].length;++e)65533!==n[193][e].charCodeAt(0)&&(r[n[193][e]]=49408+e,t[49408+e]=n[193][e]);for(n[194]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�".split(""),e=0;e!=n[194].length;++e)65533!==n[194][e].charCodeAt(0)&&(r[n[194][e]]=49664+e,t[49664+e]=n[194][e]);for(n[195]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�".split(""),e=0;e!=n[195].length;++e)65533!==n[195][e].charCodeAt(0)&&(r[n[195][e]]=49920+e,t[49920+e]=n[195][e]);for(n[196]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�".split(""),e=0;e!=n[196].length;++e)65533!==n[196][e].charCodeAt(0)&&(r[n[196][e]]=50176+e,t[50176+e]=n[196][e]);for(n[197]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�".split(""),e=0;e!=n[197].length;++e)65533!==n[197][e].charCodeAt(0)&&(r[n[197][e]]=50432+e,t[50432+e]=n[197][e]);for(n[198]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�".split(""),e=0;e!=n[198].length;++e)65533!==n[198][e].charCodeAt(0)&&(r[n[198][e]]=50688+e,t[50688+e]=n[198][e]);for(n[199]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�".split(""),e=0;e!=n[199].length;++e)65533!==n[199][e].charCodeAt(0)&&(r[n[199][e]]=50944+e,t[50944+e]=n[199][e]);for(n[200]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�".split(""),e=0;e!=n[200].length;++e)65533!==n[200][e].charCodeAt(0)&&(r[n[200][e]]=51200+e,t[51200+e]=n[200][e]);for(n[201]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�".split(""),e=0;e!=n[201].length;++e)65533!==n[201][e].charCodeAt(0)&&(r[n[201][e]]=51456+e,t[51456+e]=n[201][e]);for(n[202]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�".split(""),e=0;e!=n[202].length;++e)65533!==n[202][e].charCodeAt(0)&&(r[n[202][e]]=51712+e,t[51712+e]=n[202][e]);for(n[203]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�".split(""),e=0;e!=n[203].length;++e)65533!==n[203][e].charCodeAt(0)&&(r[n[203][e]]=51968+e,t[51968+e]=n[203][e]);for(n[204]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�".split(""),e=0;e!=n[204].length;++e)65533!==n[204][e].charCodeAt(0)&&(r[n[204][e]]=52224+e,t[52224+e]=n[204][e]);for(n[205]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�".split(""),e=0;e!=n[205].length;++e)65533!==n[205][e].charCodeAt(0)&&(r[n[205][e]]=52480+e,t[52480+e]=n[205][e]);for(n[206]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�".split(""),e=0;e!=n[206].length;++e)65533!==n[206][e].charCodeAt(0)&&(r[n[206][e]]=52736+e,t[52736+e]=n[206][e]);for(n[207]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�".split(""),e=0;e!=n[207].length;++e)65533!==n[207][e].charCodeAt(0)&&(r[n[207][e]]=52992+e,t[52992+e]=n[207][e]);for(n[208]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�".split(""),e=0;e!=n[208].length;++e)65533!==n[208][e].charCodeAt(0)&&(r[n[208][e]]=53248+e,t[53248+e]=n[208][e]);for(n[209]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�".split(""),e=0;e!=n[209].length;++e)65533!==n[209][e].charCodeAt(0)&&(r[n[209][e]]=53504+e,t[53504+e]=n[209][e]);for(n[210]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�".split(""),e=0;e!=n[210].length;++e)65533!==n[210][e].charCodeAt(0)&&(r[n[210][e]]=53760+e,t[53760+e]=n[210][e]);for(n[211]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�".split(""),e=0;e!=n[211].length;++e)65533!==n[211][e].charCodeAt(0)&&(r[n[211][e]]=54016+e,t[54016+e]=n[211][e]);for(n[212]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�".split(""),e=0;e!=n[212].length;++e)65533!==n[212][e].charCodeAt(0)&&(r[n[212][e]]=54272+e,t[54272+e]=n[212][e]);for(n[213]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�".split(""),e=0;e!=n[213].length;++e)65533!==n[213][e].charCodeAt(0)&&(r[n[213][e]]=54528+e,t[54528+e]=n[213][e]);for(n[214]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�".split(""),e=0;e!=n[214].length;++e)65533!==n[214][e].charCodeAt(0)&&(r[n[214][e]]=54784+e,t[54784+e]=n[214][e]);for(n[215]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������".split(""),e=0;e!=n[215].length;++e)65533!==n[215][e].charCodeAt(0)&&(r[n[215][e]]=55040+e,t[55040+e]=n[215][e]);for(n[216]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�".split(""),e=0;e!=n[216].length;++e)65533!==n[216][e].charCodeAt(0)&&(r[n[216][e]]=55296+e,t[55296+e]=n[216][e]);for(n[217]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�".split(""),e=0;e!=n[217].length;++e)65533!==n[217][e].charCodeAt(0)&&(r[n[217][e]]=55552+e,t[55552+e]=n[217][e]);for(n[218]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�".split(""),e=0;e!=n[218].length;++e)65533!==n[218][e].charCodeAt(0)&&(r[n[218][e]]=55808+e,t[55808+e]=n[218][e]);for(n[219]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�".split(""),e=0;e!=n[219].length;++e)65533!==n[219][e].charCodeAt(0)&&(r[n[219][e]]=56064+e,t[56064+e]=n[219][e]);for(n[220]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�".split(""),e=0;e!=n[220].length;++e)65533!==n[220][e].charCodeAt(0)&&(r[n[220][e]]=56320+e,t[56320+e]=n[220][e]);for(n[221]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�".split(""),e=0;e!=n[221].length;++e)65533!==n[221][e].charCodeAt(0)&&(r[n[221][e]]=56576+e,t[56576+e]=n[221][e]);for(n[222]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�".split(""),e=0;e!=n[222].length;++e)65533!==n[222][e].charCodeAt(0)&&(r[n[222][e]]=56832+e,t[56832+e]=n[222][e]);for(n[223]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�".split(""),e=0;e!=n[223].length;++e)65533!==n[223][e].charCodeAt(0)&&(r[n[223][e]]=57088+e,t[57088+e]=n[223][e]);for(n[224]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�".split(""),e=0;e!=n[224].length;++e)65533!==n[224][e].charCodeAt(0)&&(r[n[224][e]]=57344+e,t[57344+e]=n[224][e]);for(n[225]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�".split(""),e=0;e!=n[225].length;++e)65533!==n[225][e].charCodeAt(0)&&(r[n[225][e]]=57600+e,t[57600+e]=n[225][e]);for(n[226]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�".split(""),e=0;e!=n[226].length;++e)65533!==n[226][e].charCodeAt(0)&&(r[n[226][e]]=57856+e,t[57856+e]=n[226][e]);for(n[227]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�".split(""),e=0;e!=n[227].length;++e)65533!==n[227][e].charCodeAt(0)&&(r[n[227][e]]=58112+e,t[58112+e]=n[227][e]);for(n[228]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�".split(""),e=0;e!=n[228].length;++e)65533!==n[228][e].charCodeAt(0)&&(r[n[228][e]]=58368+e,t[58368+e]=n[228][e]);for(n[229]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�".split(""),e=0;e!=n[229].length;++e)65533!==n[229][e].charCodeAt(0)&&(r[n[229][e]]=58624+e,t[58624+e]=n[229][e]);for(n[230]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�".split(""),e=0;e!=n[230].length;++e)65533!==n[230][e].charCodeAt(0)&&(r[n[230][e]]=58880+e,t[58880+e]=n[230][e]);for(n[231]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�".split(""),e=0;e!=n[231].length;++e)65533!==n[231][e].charCodeAt(0)&&(r[n[231][e]]=59136+e,t[59136+e]=n[231][e]);for(n[232]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�".split(""),e=0;e!=n[232].length;++e)65533!==n[232][e].charCodeAt(0)&&(r[n[232][e]]=59392+e,t[59392+e]=n[232][e]);for(n[233]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�".split(""),e=0;e!=n[233].length;++e)65533!==n[233][e].charCodeAt(0)&&(r[n[233][e]]=59648+e,t[59648+e]=n[233][e]);for(n[234]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�".split(""),e=0;e!=n[234].length;++e)65533!==n[234][e].charCodeAt(0)&&(r[n[234][e]]=59904+e,t[59904+e]=n[234][e]);for(n[235]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�".split(""),e=0;e!=n[235].length;++e)65533!==n[235][e].charCodeAt(0)&&(r[n[235][e]]=60160+e,t[60160+e]=n[235][e]);for(n[236]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�".split(""),e=0;e!=n[236].length;++e)65533!==n[236][e].charCodeAt(0)&&(r[n[236][e]]=60416+e,t[60416+e]=n[236][e]);for(n[237]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�".split(""),e=0;e!=n[237].length;++e)65533!==n[237][e].charCodeAt(0)&&(r[n[237][e]]=60672+e,t[60672+e]=n[237][e]);for(n[238]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�".split(""),e=0;e!=n[238].length;++e)65533!==n[238][e].charCodeAt(0)&&(r[n[238][e]]=60928+e,t[60928+e]=n[238][e]);for(n[239]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�".split(""),e=0;e!=n[239].length;++e)65533!==n[239][e].charCodeAt(0)&&(r[n[239][e]]=61184+e,t[61184+e]=n[239][e]);for(n[240]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�".split(""),e=0;e!=n[240].length;++e)65533!==n[240][e].charCodeAt(0)&&(r[n[240][e]]=61440+e,t[61440+e]=n[240][e]);for(n[241]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�".split(""),e=0;e!=n[241].length;++e)65533!==n[241][e].charCodeAt(0)&&(r[n[241][e]]=61696+e,t[61696+e]=n[241][e]);for(n[242]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�".split(""),e=0;e!=n[242].length;++e)65533!==n[242][e].charCodeAt(0)&&(r[n[242][e]]=61952+e,t[61952+e]=n[242][e]);for(n[243]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�".split(""),e=0;e!=n[243].length;++e)65533!==n[243][e].charCodeAt(0)&&(r[n[243][e]]=62208+e,t[62208+e]=n[243][e]);for(n[244]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�".split(""),e=0;e!=n[244].length;++e)65533!==n[244][e].charCodeAt(0)&&(r[n[244][e]]=62464+e,t[62464+e]=n[244][e]);for(n[245]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�".split(""),e=0;e!=n[245].length;++e)65533!==n[245][e].charCodeAt(0)&&(r[n[245][e]]=62720+e,t[62720+e]=n[245][e]);for(n[246]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�".split(""),e=0;e!=n[246].length;++e)65533!==n[246][e].charCodeAt(0)&&(r[n[246][e]]=62976+e,t[62976+e]=n[246][e]);for(n[247]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�".split(""),e=0;e!=n[247].length;++e)65533!==n[247][e].charCodeAt(0)&&(r[n[247][e]]=63232+e,t[63232+e]=n[247][e]);return{enc:r,dec:t}}(),a[10029]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10079]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[10081]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),a[28591]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ",t=[],r={},n=0;n!=e.length;++n)65533!==e.charCodeAt(n)&&(r[e.charAt(n)]=n),t[n]=e.charAt(n);return{enc:r,dec:t}}(),n.exports&&"undefined"==typeof DO_NOT_EXPORT_CODEPAGE&&(n.exports=a),function(e,t){if(void 0===a){if(void 0===Of)throw new Error("cptable not found");var r=a;n.exports&&"undefined"==typeof DO_NOT_EXPORT_CODEPAGE?n.exports=t(r):e.cptable=t(r)}else a=t(a)}(If,function(y){var B={1200:"utf16le",1201:"utf16be",12e3:"utf32le",12001:"utf32be",16969:"utf64le",20127:"ascii",65e3:"utf7",65001:"utf8"},r=[874,1250,1251,1252,1253,1254,1255,1256,1e4],n=[932,936,949,950],a=[65001],i={},s={},k={},m={},b=function(e){return String.fromCharCode(e)},T=function(e){return e.charCodeAt(0)},x="undefined"!=typeof Buffer,v=function(){};if(x){var t=!Buffer.from;if(!t)try{Buffer.from("foo","utf8")}catch(e){t=!0}v=t?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer),Buffer.allocUnsafe||(Buffer.allocUnsafe=function(e){return new Buffer(e)});var c=1024,f=Buffer.allocUnsafe(c),o=function(e){var l=function(e){for(var t=Buffer.allocUnsafe(65536),r=0;r<65536;++r)t[r]=0;for(var n=Object.keys(e),a=n.length,i=0,s=n[i];i>10&1023)],r[i++]=l[56320+(1023&o)]));r=r.slice(0,i)}else for(r=Buffer.allocUnsafe(n),a=0;a>8}return function(e){var t=e.length,r=0,n=0;if(c<2*t&&(c=2*t,f=Buffer.allocUnsafe(c)),Buffer.isBuffer(e))for(r=0;r>8}return function(e,t){var r=e.length,n=Buffer.allocUnsafe(2*r),a=0,i=0,s=0,o=0,l=0;if("string"==typeof e){for(a=o=0;a>10&1023)),n[o++]=c[i+1]||c[i],0>8);return function(e){var t=e.length,r=Buffer.allocUnsafe(2*t),n=0,a=0,i=0;if(Buffer.isBuffer(e))for(n=0;n>8):(a=55296+((n-=65536)>>10&1023),n=56320+(1023&n),f[o++]=255&a,f[o++]=a>>>8,f[o++]=255&n,f[o++]=n>>>8&255);return f.slice(0,o).toString("ucs2")},s[65001]=function(e,t){if(x&&Buffer.isBuffer(e))return t&&"buf"!==t?"arr"!==t?e.toString("binary"):[].slice.call(e):e;var r=e.length,n=0,a=0,i=0,s="string"==typeof e;c<4*r&&(c=4*r,f=Buffer.allocUnsafe(c));for(var o=0;o>6),f[i++]=128+(63&n)):55296<=n&&n<=57343?(n-=55296,++o,a=(s?e.charCodeAt(o):e[o].charCodeAt(0))-56320+(n<<10),f[i++]=240+(a>>>18&7),f[i++]=144+(a>>>12&63),f[i++]=128+(a>>>6&63),f[i++]=128+(63&a)):(f[i++]=224+(n>>12),f[i++]=128+(n>>6&63),f[i++]=128+(63&n));return t&&"buf"!==t?"arr"!==t?f.slice(0,i).toString("binary"):[].slice.call(f,0,i):f.slice(0,i)}}var e=function(){if(x){if(k[r[0]])return;var e=0,t=0;for(e=0;e>10&1023),l=56320+(1023&l),s[h++]=String.fromCharCode(u)),s[h++]=String.fromCharCode(l);break;case"ascii":if(x&&Buffer.isBuffer(r))return r.toString(p);for(c=0;c>10&1023)),s[h++]=String.fromCharCode(56320+(1023&l))):s[h++]=String.fromCharCode(l);break;case"utf32be":for(4<=i&&255==r[3]&&254==r[2]&&0===r[1]&&0===r[0]&&(c=4),f=4;c>10&1023)),s[h++]=String.fromCharCode(56320+(1023&l))):s[h++]=String.fromCharCode(l);break;case"utf7":for(4<=i&&43==r[0]&&47==r[1]&&118==r[2]&&(5<=i&&56==r[3]&&45==r[4]?c=5:56!=r[3]&&57!=r[3]&&43!=r[3]&&47!=r[3]||(c=4));c>4,m.push(v),-1!==(S=R.indexOf(String.fromCharCode(r[c+A++]))))&&(w=(15&C)<<4|S>>2,m.push(w),-1!==(_=R.indexOf(String.fromCharCode(r[c+A++]))));)E=(3&S)<<6|_,_<64&&m.push(E);for(b=e(1201,m),A=0;A>8,s[++c]=255&o):s[c]=255&o;else{if(!(u=B[t]))throw new Error("Unrecognized CP: "+t);switch(u){case"utf8":if(x&&d){c=(s=v(r,u)).length;break}for(l=0;l>6),s[++c]=128+(63&o)):55296<=o&&o<=57343?(o-=55296,f=(d?r.charCodeAt(++l):r[++l].charCodeAt(0))-56320+(o<<10),s[c]=240+(f>>>18&7),s[++c]=144+(f>>>12&63),s[++c]=128+(f>>>6&63),s[++c]=128+(63&f)):(s[c]=224+(o>>12),s[++c]=128+(o>>6&63),s[++c]=128+(63&o));break;case"ascii":if(x&&"string"==typeof r){c=(s=v(r,u)).length;break}for(l=0;l>8;break;case"utf16be":for(l=0;l>8,s[c++]=255&o;break;case"utf32le":for(l=0;l>=8,s[c++]=255&o,o>>=8,s[c++]=255&o,o>>=8,s[c++]=255&o;break;case"utf32be":for(l=0;l>=8,s[c+2]=255&o,o>>=8,s[c+1]=255&o,o>>=8,s[c]=255&o,c+=4;break;case"utf7":for(l=0;l>2),s[c++]=R.charCodeAt(((3&g[0])<<4)+((g[1]||0)>>4)),s[c++]=R.charCodeAt(((15&g[1])<<2)+((g[2]||0)>>6)),s[c++]=45}else s[c++]=43,s[c++]=45}break;default:throw new Error("Unsupported magic: "+t+" "+B[t])}}return s=s.slice(0,c),x?n&&"buf"!==n?"arr"!==n?s.toString("binary"):[].slice.call(s):s:"str"==n?s.map(b).join(""):s},hascp:function(e){return!(!y[e]&&!B[e])},magic:B,cache:g},y})}),r={},n=Object.freeze({default:r}),Ff=e(function(e,t){var r,n;r=function(){return function n(a,i,s){function o(r,e){if(!i[r]){if(!a[r]){if(!e&&Of)return Of(r,!0);if(l)return l(r,!0);throw new Error("Cannot find module '"+r+"'")}var t=i[r]={exports:{}};a[r][0].call(t.exports,function(e){var t=a[r][1][e];return o(t||e)},t,t.exports,n,a,i,s)}return i[r].exports}for(var l=Of,e=0;e>2,s=(3&r)<<4|(n=e.charCodeAt(f++))>>4,o=(15&n)<<2|(a=e.charCodeAt(f++))>>6,l=63&a,isNaN(n)?o=l=64:isNaN(a)&&(l=64),c=c+h.charAt(i)+h.charAt(s)+h.charAt(o)+h.charAt(l);return c},r.decode=function(e,t){var r,n,a,i,s,o,l="",c=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");c>4,n=(15&i)<<4|(s=h.indexOf(e.charAt(c++)))>>2,a=(3&s)<<6|(o=h.indexOf(e.charAt(c++))),l+=String.fromCharCode(r),64!=s&&(l+=String.fromCharCode(n)),64!=o&&(l+=String.fromCharCode(a));return l}},{}],2:[function(e,t,r){function n(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}n.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},t.exports=n},{}],3:[function(e,t,r){r.STORE={magic:"\0\0",compress:function(e){return e},uncompress:function(e){return e},compressInputType:null,uncompressInputType:null},r.DEFLATE=e("./flate")},{"./flate":8}],4:[function(e,t,r){var s=e("./utils"),o=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];t.exports=function(e,t){if(void 0===e||!e.length)return 0;var r="string"!==s.getTypeOf(e);void 0===t&&(t=0);var n=0;t^=-1;for(var a=0,i=e.length;a>>8^o[255&(t^n)];return-1^t}},{"./utils":21}],5:[function(e,t,r){var n=e("./utils");function a(e){this.data=null,this.length=0,this.index=0}a.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1)}},t.exports=a},{"./utils":21}],6:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!1,r.date=null,r.compression=null,r.comment=null},{}],7:[function(e,t,r){var n=e("./utils");r.string2binary=function(e){return n.string2binary(e)},r.string2Uint8Array=function(e){return n.transformTo("uint8array",e)},r.uint8Array2String=function(e){return n.transformTo("string",e)},r.string2Blob=function(e){var t=n.transformTo("arraybuffer",e);return n.arrayBuffer2Blob(t)},r.arrayBuffer2Blob=function(e){return n.arrayBuffer2Blob(e)},r.transformTo=function(e,t){return n.transformTo(e,t)},r.getTypeOf=function(e){return n.getTypeOf(e)},r.checkSupport=function(e){return n.checkSupport(e)},r.MAX_VALUE_16BITS=n.MAX_VALUE_16BITS,r.MAX_VALUE_32BITS=n.MAX_VALUE_32BITS,r.pretty=function(e){return n.pretty(e)},r.findCompression=function(e){return n.findCompression(e)},r.isRegExp=function(e){return n.isRegExp(e)}},{"./utils":21}],8:[function(e,t,r){var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,a=e("pako");r.uncompressInputType=n?"uint8array":"array",r.compressInputType=n?"uint8array":"array",r.magic="\b\0",r.compress=function(e){return a.deflateRaw(e)},r.uncompress=function(e){return a.inflateRaw(e)}},{pako:24}],9:[function(e,t,r){var n=e("./base64");function a(e,t){if(!(this instanceof a))return new a(e,t);this.files={},this.comment=null,this.root="",e&&this.load(e,t),this.clone=function(){var e=new a;for(var t in this)"function"!=typeof this[t]&&(e[t]=this[t]);return e}}(a.prototype=e("./object")).load=e("./load"),a.support=e("./support"),a.defaults=e("./defaults"),a.utils=e("./deprecatedPublicUtils"),a.base64={encode:function(e){return n.encode(e)},decode:function(e){return n.decode(e)}},a.compressions=e("./compressions"),t.exports=a},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(e,t,r){var s=e("./base64"),o=e("./zipEntries");t.exports=function(e,t){var r,n,a,i;for((t=t||{}).base64&&(e=s.decode(e)),r=(n=new o(e,t)).files,a=0;a>>=8;return n},y=function(){var e,t,r={};for(e=0;ee.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+c[e[r]]>t?r:t},s=function(e){var t,r,n,a,i=e.length,s=new Array(2*i);for(t=r=0;t>10&1023,s[r++]=56320|1023&n)}return s.length!==r&&(s.subarray?s=s.subarray(0,r):s.length=r),o.applyFromCharCode(s)};r.utf8encode=function(e){return l.nodebuffer?n(e,"utf-8"):function(e){var t,r,n,a,i,s=e.length,o=0;for(a=0;a>>6:(r<65536?t[i++]=224|r>>>12:(t[i++]=240|r>>>18,t[i++]=128|r>>>12&63),t[i++]=128|r>>>6&63),t[i++]=128|63&r);return t}(e)},r.utf8decode=function(e){if(l.nodebuffer)return o.transformTo("nodebuffer",e).toString("utf-8");for(var t=[],r=0,n=(e=o.transformTo(l.uint8array?"uint8array":"array",e)).length;r>>6:(r<65536?t[i++]=224|r>>>12:(t[i++]=240|r>>>18,t[i++]=128|r>>>12&63),t[i++]=128|r>>>6&63),t[i++]=128|63&r);return t},r.buf2binstring=function(e){return f(e,e.length)},r.binstring2buf=function(e){for(var t=new l.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&a)}return f(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+c[e[r]]>t?r:t}},{"./common":27}],29:[function(e,t,r){t.exports=function(e,t,r,n){for(var a=65535&e|0,i=e>>>16&65535|0,s=0;0!==r;){for(r-=s=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var a=o,i=n+r;e^=-1;for(var s=n;s>>8^a[255&(e^t[s])];return-1^e}},{}],32:[function(e,t,r){var u=e("../utils/common"),l=e("./trees"),d=e("./adler32"),p=e("./crc32"),n=e("./messages"),c=0,f=4,h=0,g=-2,m=-1,b=4,a=2,v=8,w=9,i=286,s=30,o=19,E=2*i+1,C=15,S=3,_=258,A=_+S+1,y=42,B=113,k=1,T=2,x=3,R=4;function I(e,t){return e.msg=n[t],t}function O(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(u.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function P(e,t){l._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function N(e,t){e.pending_buf[e.pending++]=t}function L(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function M(e,t){var r,n,a=e.max_chain_length,i=e.strstart,s=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-A?e.strstart-(e.w_size-A):0,c=e.window,f=e.w_mask,h=e.prev,u=e.strstart+_,d=c[i+s-1],p=c[i+s];e.prev_length>=e.good_match&&(a>>=2),o>e.lookahead&&(o=e.lookahead);do{if(c[(r=t)+s]===p&&c[r+s-1]===d&&c[r]===c[i]&&c[++r]===c[i+1]){i+=2,r++;do{}while(c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&il&&0!=--a);return s<=e.lookahead?s:e.lookahead}function U(e){var t,r,n,a,i,s,o,l,c,f,h=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=h+(h-A)){for(u.arraySet(e.window,e.window,h,h,0),e.match_start-=h,e.strstart-=h,e.block_start-=h,t=r=e.hash_size;n=e.head[--t],e.head[t]=h<=n?n-h:0,--r;);for(t=r=h;n=e.prev[--t],e.prev[t]=h<=n?n-h:0,--r;);a+=h}if(0===e.strm.avail_in)break;if(s=e.strm,o=e.window,l=e.strstart+e.lookahead,c=a,f=void 0,f=s.avail_in,c=S)for(i=e.strstart-e.insert,e.ins_h=e.window[i],e.ins_h=(e.ins_h<=S&&(e.ins_h=(e.ins_h<=S)if(n=l._tr_tally(e,e.strstart-e.match_start,e.match_length-S),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=S){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=S&&(e.ins_h=(e.ins_h<=S&&e.match_length<=e.prev_length){for(a=e.strstart+e.lookahead-S,n=l._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-S),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=a&&(e.ins_h=(e.ins_h<>1,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=i,o.method=r,j(e)}W=[new V(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(U(e),0===e.lookahead&&t===c)return k;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,P(e,!1),0===e.strm.avail_out))return k;if(e.strstart-e.block_start>=e.w_size-A&&(P(e,!1),0===e.strm.avail_out))return k}return e.insert=0,t===f?(P(e,!0),0===e.strm.avail_out?x:R):(e.strstart>e.block_start&&(P(e,!1),e.strm.avail_out),k)}),new V(4,4,8,4,z),new V(4,5,16,8,z),new V(4,6,32,32,z),new V(4,4,16,16,H),new V(8,16,32,32,H),new V(8,16,128,128,H),new V(8,32,128,256,H),new V(32,128,258,1024,H),new V(32,258,258,4096,H)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=j,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?g:(e.state.gzhead=t,h):g},r.deflate=function(e,t){var r,n,a,i;if(!e||!e.state||5>8&255),N(n,n.gzhead.time>>16&255),N(n,n.gzhead.time>>24&255),N(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),N(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(N(n,255&n.gzhead.extra.length),N(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(N(n,0),N(n,0),N(n,0),N(n,0),N(n,0),N(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),N(n,3),n.status=B);else{var s=v+(n.w_bits-8<<4)<<8;s|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(s|=32),s+=31-s%31,n.status=B,L(n,s),0!==n.strstart&&(L(n,e.adler>>>16),L(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(a=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>a&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),F(e),a=n.pending,n.pending!==n.pending_buf_size));)N(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>a&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){a=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>a&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),F(e),a=n.pending,n.pending===n.pending_buf_size)){i=1;break}i=n.gzindexa&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),0===i&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){a=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>a&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),F(e),a=n.pending,n.pending===n.pending_buf_size)){i=1;break}i=n.gzindexa&&(e.adler=p(e.adler,n.pending_buf,n.pending-a,a)),0===i&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(N(n,255&e.adler),N(n,e.adler>>8&255),e.adler=0,n.status=B)):n.status=B),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,h}else if(0===e.avail_in&&O(t)<=O(r)&&t!==f)return I(e,-5);if(666===n.status&&0!==e.avail_in)return I(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==c&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(U(e),0===e.lookahead)){if(t===c)return k;break}if(e.match_length=0,r=l._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(P(e,!1),0===e.strm.avail_out))return k}return e.insert=0,t===f?(P(e,!0),0===e.strm.avail_out?x:R):e.last_lit&&(P(e,!1),0===e.strm.avail_out)?k:T}(n,t):3===n.strategy?function(e,t){for(var r,n,a,i,s=e.window;;){if(e.lookahead<=_){if(U(e),e.lookahead<=_&&t===c)return k;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=S&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=S?(r=l._tr_tally(e,1,e.match_length-S),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=l._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(P(e,!1),0===e.strm.avail_out))return k}return e.insert=0,t===f?(P(e,!0),0===e.strm.avail_out?x:R):e.last_lit&&(P(e,!1),0===e.strm.avail_out)?k:T}(n,t):W[n.level].func(n,t);if(o!==x&&o!==R||(n.status=666),o===k||o===x)return 0===e.avail_out&&(n.last_flush=-1),h;if(o===T&&(1===t?l._tr_align(n):5!==t&&(l._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,h}return t!==f?h:n.wrap<=0?1:(2===n.wrap?(N(n,255&e.adler),N(n,e.adler>>8&255),N(n,e.adler>>16&255),N(n,e.adler>>24&255),N(n,255&e.total_in),N(n,e.total_in>>8&255),N(n,e.total_in>>16&255),N(n,e.total_in>>24&255)):(L(n,e.adler>>>16),L(n,65535&e.adler)),F(e),0>>=E=w>>>24,p-=E,0===(E=w>>>16&255))B[i++]=65535&w;else{if(!(16&E)){if(0==(64&E)){w=g[(65535&w)+(d&(1<>>=E,p-=E),p<15&&(d+=y[n++]<>>=E=w>>>24,p-=E,!(16&(E=w>>>16&255))){if(0==(64&E)){w=m[(65535&w)+(d&(1<>>=E,p-=E,(E=i-s)>3,d&=(1<<(p-=C<<3))-1,e.next_in=n,e.next_out=i,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function i(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new P.Buf16(320),this.work=new P.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function s(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=X,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new P.Buf32(n),t.distcode=t.distdyn=new P.Buf32(a),t.sane=1,t.back=-1,W):V}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,s(e)):V}function l(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15>>8&255,r.check=L(r.check,D,2,0),f=c=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&c)<<8)+(c>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&c)){e.msg="unknown compression method",r.mode=30;break}if(f-=4,S=8+(15&(c>>>=4)),0===r.wbits)r.wbits=S;else if(S>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(D[0]=255&c,D[1]=c>>>8&255,r.check=L(r.check,D,2,0)),f=c=0,r.mode=3;case 3:for(;f<32;){if(0===o)break e;o--,c+=n[i++]<>>8&255,D[2]=c>>>16&255,D[3]=c>>>24&255,r.check=L(r.check,D,4,0)),f=c=0,r.mode=4;case 4:for(;f<16;){if(0===o)break e;o--,c+=n[i++]<>8),512&r.flags&&(D[0]=255&c,D[1]=c>>>8&255,r.check=L(r.check,D,2,0)),f=c=0,r.mode=5;case 5:if(1024&r.flags){for(;f<16;){if(0===o)break e;o--,c+=n[i++]<>>8&255,r.check=L(r.check,D,2,0)),f=c=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(S=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),P.arraySet(r.head.extra,n,i,d,S)),512&r.flags&&(r.check=L(r.check,n,d,i)),o-=d,i+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;S=n[i+d++],r.head&&S&&r.length<65536&&(r.head.name+=String.fromCharCode(S)),S&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;f<32;){if(0===o)break e;o--,c+=n[i++]<>>=7&f,f-=7&f,r.mode=27;break}for(;f<3;){if(0===o)break e;o--,c+=n[i++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;c>>>=2,f-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}c>>>=2,f-=2;break;case 14:for(c>>>=7&f,f-=7&f;f<32;){if(0===o)break e;o--,c+=n[i++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&c,f=c=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,f-=5,r.ndist=1+(31&c),c>>>=5,f-=5,r.ncode=4+(15&c),c>>>=4,f-=4,286>>=3,f-=3}for(;r.have<19;)r.lens[F[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,A={bits:r.lenbits},_=U(0,r.lens,0,19,r.lencode,0,r.work,A),r.lenbits=A.bits,_){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,v=65535&O,!((m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[i++]<>>=m,f-=m,r.lens[r.have++]=v;else{if(16===v){for(y=m+2;f>>=m,f-=m,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}S=r.lens[r.have-1],d=3+(3&c),c>>>=2,f-=2}else if(17===v){for(y=m+3;f>>=m)),c>>>=3,f-=3}else{for(y=m+7;f>>=m)),c>>>=7,f-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;d--;)r.lens[r.have++]=S}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,A={bits:r.lenbits},_=U(z,r.lens,0,r.nlen,r.lencode,0,r.work,A),r.lenbits=A.bits,_){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,A={bits:r.distbits},_=U(H,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,A),r.distbits=A.bits,_){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=l){e.next_out=s,e.avail_out=l,e.next_in=i,e.avail_in=o,r.hold=c,r.bits=f,M(e,u),s=e.next_out,a=e.output,l=e.avail_out,i=e.next_in,n=e.input,o=e.avail_in,c=r.hold,f=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;b=(O=r.lencode[c&(1<>>16&255,v=65535&O,!((m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[i++]<>w)])>>>16&255,v=65535&O,!(w+(m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[i++]<>>=w,f-=w,r.back+=w}if(c>>>=m,f-=m,r.back+=m,r.length=v,0===b){r.mode=26;break}if(32&b){r.back=-1,r.mode=12;break}if(64&b){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&b,r.mode=22;case 22:if(r.extra){for(y=r.extra;f>>=r.extra,f-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;b=(O=r.distcode[c&(1<>>16&255,v=65535&O,!((m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[i++]<>w)])>>>16&255,v=65535&O,!(w+(m=O>>>24)<=f);){if(0===o)break e;o--,c+=n[i++]<>>=w,f-=w,r.back+=w}if(c>>>=m,f-=m,r.back+=m,64&b){e.msg="invalid distance code",r.mode=30;break}r.offset=v,r.extra=15&b,r.mode=24;case 24:if(r.extra){for(y=r.extra;f>>=r.extra,f-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===l)break e;if(d=u-l,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),g=r.window}else g=a,p=s-r.offset,d=r.length;for(l=I.wsize?(P.arraySet(I.window,k,T-I.wsize,I.wsize,0),I.wnext=0,I.whave=I.wsize):(x<(R=I.wsize-I.wnext)&&(R=x),P.arraySet(I.window,k,T-x,R,I.wnext),(x-=R)?(P.arraySet(I.window,k,T-x,x,0),I.wnext=x,I.whave=I.wsize):(I.wnext+=R,I.wnext===I.wsize&&(I.wnext=0),I.whaved?(g=O[D+s[w]],T[x+s[w]]):(g=96,0),l=1<>A)+(c-=l)]=p<<24|g<<16|m|0,0!==c;);for(l=1<>=1;if(0!==l?(k&=l-1,k+=l):k=0,w++,0==--R[v]){if(v===C)break;v=t[r+s[w]]}if(S>>7)]}function L(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function M(e,t,r){e.bi_valid>a-r?(e.bi_buf|=t<>a-e.bi_valid,e.bi_valid+=r-a):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function H(e,t,r){var n,a,i=new Array(b+1),s=0;for(n=1;n<=b;n++)i[n]=s=s+r[n-1]<<1;for(a=0;a<=t;a++){var o=e[2*a+1];0!==o&&(e[2*a]=z(i[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,i,r);for(a=l;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,i,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,i[2*a]=i[2*r]+i[2*n],e.depth[a]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,i[2*r+1]=i[2*n+1]=a,e.heap[1]=a++,G(e,i,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,a,i,s,o,l=t.dyn_tree,c=t.max_code,f=t.stat_desc.static_tree,h=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(i=0;i<=b;i++)e.bl_count[i]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return c;for(t=32;t>>3,(i=e.static_len+3+7>>>3)<=a&&(a=i)):a=i=r+5,r+4<=a&&-1!==t?q(e,t,r,n):4===e.strategy||i===a?(M(e,2+(n?1:0),3),j(e,B,k)):(M(e,4+(n?1:0),3),function(e,t,r,n){var a;for(M(e,t-257,5),M(e,r-1,5),M(e,n-4,4),a=0;a>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(x[r]+h+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){var t;M(e,2,3),U(e,v,B),16===(t=e).bi_valid?(L(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}},{"../utils/common":27}],39:[function(e,t,r){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}]},{},[9])(9)},"undefined"==typeof DO_NOT_EXPORT_JSZIP?e.exports=r():("undefined"!=typeof globalThis?n=globalThis:"undefined"!=typeof window?n=window:void 0!==If?n=If:"undefined"!=typeof $&&$.global?n=$.global:"undefined"!=typeof self&&(n=self),n.JSZipSync=r())});function l(){}function f(){f.init.call(this)}function c(e){return void 0===e._maxListeners?f.defaultMaxListeners:e._maxListeners}function a(e,t,r,n){var a,i,s;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function');if((i=e._events)?(i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),s=i[t]):(i=e._events=new l,e._eventsCount=0),s){if("function"==typeof s?s=i[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),!s.warned&&(a=c(e))&&0a){s.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=e,o.type=t,o.count=s.length,console.warn}}else s=i[t]=r,++e._eventsCount;return e}function i(e,t,r){var n=!1;function a(){e.removeListener(t,a),n||(n=!0,r.apply(e,arguments))}return a.listener=r,a}function s(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function h(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}function o(){throw new Error("setTimeout has not been defined")}function d(){throw new Error("clearTimeout has not been defined")}l.prototype=Object.create(null),(f.EventEmitter=f).usingDomains=!1,f.prototype.domain=void 0,f.prototype._events=void 0,f.prototype._maxListeners=void 0,f.defaultMaxListeners=10,f.init=function(){this.domain=null,f.usingDomains&&(!t.active||this instanceof t.Domain||(this.domain=t.active)),this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new l,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},f.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},f.prototype.getMaxListeners=function(){return c(this)},f.prototype.emit=function(e){var t,r,n,a,i,s,o,l="error"===e;if(s=this._events)l=l&&null==s.error;else if(!l)return!1;if(o=this.domain,l){if(t=arguments[1],o)return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=o,t.domainThrown=!1,o.emit("error",t),!1;if(t instanceof Error)throw t;var c=new Error('Uncaught, unspecified "error" event. ('+t+")");throw c.context=t,c}if(!(r=s[e]))return!1;var f="function"==typeof r;switch(n=arguments.length){case 1:!function(e,t,r){if(t)e.call(r);else for(var n=e.length,a=h(e,n),i=0;i>18&63]+ie[a>>12&63]+ie[a>>6&63]+ie[63&a]);return i.join("")}function he(e){var t;le||ce();for(var r=e.length,n=r%3,a="",i=[],s=0,o=r-n;s>2],a+=ie[t<<4&63],a+="=="):2===n&&(t=(e[r-2]<<8)+e[r-1],a+=ie[t>>10],a+=ie[t>>4&63],a+=ie[t<<2&63],a+="="),i.push(a),i.join("")}function ue(e,t,r,n,a){var i,s,o=8*a-n-1,l=(1<>1,f=-7,h=r?a-1:0,u=r?-1:1,d=e[t+h];for(h+=u,i=d&(1<<-f)-1,d>>=-f,f+=o;0>=-f,f+=n;0>1,u=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:i-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,s=f):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),2<=(t+=1<=s+h?u/l:u*Math.pow(2,1-h))*l&&(s++,l/=2),f<=s+h?(o=0,s=f):1<=s+h?(o=(t*l-1)*Math.pow(2,a),s+=h):(o=t*Math.pow(2,h-1)*Math.pow(2,a),s=0));8<=a;e[r+d]=255&o,d+=p,o/=256,a-=8);for(s=s<=me())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+me().toString(16)+" bytes");return 0|e}function Ae(e){return!(null==e||!e._isBuffer)}function ye(e,t){if(Ae(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return Ye(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Ke(e).length;default:if(n)return Ye(e).length;t=(""+t).toLowerCase(),n=!0}}function Be(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function ke(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):2147483647=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=ve.from(t,n)),Ae(t))return 0===t.length?-1:Te(e,t,r,n,a);if("number"==typeof t)return t&=255,ve.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):Te(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function Te(e,t,r,n,a){var i,s=1,o=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o/=s=2,l/=2,r/=2}function c(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(a){var f=-1;for(i=r;i>>10&1023|55296),f=56320|1023&f),n.push(f),a+=h}return function(e){var t=e.length;if(t<=De)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return Ne(this,t,r);case"utf8":case"utf-8":return Oe(this,t,r);case"ascii":return Fe(this,t,r);case"latin1":case"binary":return Pe(this,t,r);case"base64":return Ie(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Le(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},ve.prototype.equals=function(e){if(!Ae(e))throw new TypeError("Argument must be a Buffer");return this===e||0===ve.compare(this,e)},ve.prototype.inspect=function(){var e="";return 0"},ve.prototype.compare=function(e,t,r,n,a){if(!Ae(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(a<=n&&r<=t)return 0;if(a<=n)return-1;if(r<=t)return 1;if(this===e)return 0;for(var i=(a>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),o=Math.min(i,s),l=this.slice(n,a),c=e.slice(t,r),f=0;fthis.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i,s,o,l,c,f,h,u,d,p=!1;;)switch(n){case"hex":return xe(this,e,t,r);case"utf8":case"utf-8":return u=t,d=r,$e(Ye(e,(h=this).length-u),h,u,d);case"ascii":return Re(this,e,t,r);case"latin1":case"binary":return Re(this,e,t,r);case"base64":return l=this,c=t,f=r,$e(Ke(e),l,c,f);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return s=t,o=r,$e(function(e,t){for(var r,n,a,i=[],s=0;s>8,a=r%256,i.push(a),i.push(n);return i}(e,(i=this).length-s),i,s,o);default:if(p)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),p=!0}},ve.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var De=4096;function Fe(e,t,r){var n="";r=Math.min(e.length,r);for(var a=t;ae.length)throw new RangeError("Index out of range")}function ze(e,t,r,n){t<0&&(t=65535+t+1);for(var a=0,i=Math.min(e.length-r,2);a>>8*(n?a:1-a)}function He(e,t,r,n){t<0&&(t=4294967295+t+1);for(var a=0,i=Math.min(e.length-r,4);a>>8*(n?a:3-a)&255}function We(e,t,r,n,a,i){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Ve(e,t,r,n,a){return a||We(e,0,r,4),de(e,t,r,n,23,4),r+4}function Xe(e,t,r,n,a){return a||We(e,0,r,8),de(e,t,r,n,52,8),r+8}ve.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):n>>8):ze(this,e,t,!0),t+2},ve.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||Ue(this,e,t,2,65535,0),ve.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):ze(this,e,t,!1),t+2},ve.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||Ue(this,e,t,4,4294967295,0),ve.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):He(this,e,t,!0),t+4},ve.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||Ue(this,e,t,4,4294967295,0),ve.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):He(this,e,t,!1),t+4},ve.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var a=Math.pow(2,8*r-1);Ue(this,e,t,r,a-1,-a)}var i=0,s=1,o=0;for(this[t]=255&e;++i>0)-o&255;return t+r},ve.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var a=Math.pow(2,8*r-1);Ue(this,e,t,r,a-1,-a)}var i=r-1,s=1,o=0;for(this[t+i]=255&e;0<=--i&&(s*=256);)e<0&&0===o&&0!==this[t+i+1]&&(o=1),this[t+i]=(e/s>>0)-o&255;return t+r},ve.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||Ue(this,e,t,1,127,-128),ve.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},ve.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||Ue(this,e,t,2,32767,-32768),ve.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):ze(this,e,t,!0),t+2},ve.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||Ue(this,e,t,2,32767,-32768),ve.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):ze(this,e,t,!1),t+2},ve.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||Ue(this,e,t,4,2147483647,-2147483648),ve.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):He(this,e,t,!0),t+4},ve.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||Ue(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),ve.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):He(this,e,t,!1),t+4},ve.prototype.writeFloatLE=function(e,t,r){return Ve(this,e,t,!0,r)},ve.prototype.writeFloatBE=function(e,t,r){return Ve(this,e,t,!1,r)},ve.prototype.writeDoubleLE=function(e,t,r){return Xe(this,e,t,!0,r)},ve.prototype.writeDoubleBE=function(e,t,r){return Xe(this,e,t,!1,r)},ve.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),0=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(i=t;i>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function Ke(e){return function(e){var t,r,n,a,i,s;le||ce();var o=e.length;if(0>16&255,s[l++]=a>>8&255,s[l++]=255&a;return 2===i?(a=se[e.charCodeAt(t)]<<2|se[e.charCodeAt(t+1)]>>4,s[l++]=255&a):1===i&&(a=se[e.charCodeAt(t)]<<10|se[e.charCodeAt(t+1)]<<4|se[e.charCodeAt(t+2)]>>2,s[l++]=a>>8&255,s[l++]=255&a),s}(function(e){var t;if((e=(t=e,t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")).replace(Ge,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function $e(e,t,r,n){for(var a=0;a=t.length||a>=e.length);++a)t[a+r]=e[a];return a}function Ze(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function qe(){this.head=null,this.tail=null,this.length=0}qe.prototype.push=function(e){var t={data:e,next:null};0>>0),r=this.head,n=0;r;)r.data.copy(t,n),n+=r.data.length,r=r.next;return t};var Je=ve.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function Qe(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),function(e){if(e&&!Je(e))throw new Error("Unknown encoding: "+e)}(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=tt;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=rt;break;default:return void(this.write=et)}this.charBuffer=new ve(6),this.charReceived=0,this.charLength=0}function et(e){return e.toString(this.encoding)}function tt(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function rt(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}Qe.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived>5==6){this.charLength=2;break}if(t<=2&&r>>4==14){this.charLength=3;break}if(t<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=t},Qe.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,n=this.charBuffer,a=this.encoding;t+=n.slice(0,r).toString(a)}return t},it.ReadableState=at;var nt=function(e){q(U)&&(U=N.env.NODE_DEBUG||""),e=e.toUpperCase(),z[e]||(new RegExp("\\b"+e+"\\b","i").test(U)?z[e]=function(){(function(e){if(!Z(e)){for(var t=[],r=0;rt.highWaterMark&&(t.highWaterMark=(ot<=(r=e)?r=ot:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0));var r}function ct(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(nt("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?_(ft,e):ft(e))}function ft(e){nt("emit readable"),e.emit("readable"),pt(e)}function ht(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;ei.length?i.length:e;if(s===i.length?a+=i:a+=i.slice(0,e),0===(e-=s)){s===i.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r).data=i.slice(s);break}++n}return t.length-=n,a}(e,t):function(e,t){var r=Buffer.allocUnsafe(e),n=t.head,a=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var i=n.data,s=e>i.length?i.length:e;if(i.copy(r,r.length-e,0,s),0===(e-=s)){s===i.length?(++a,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n).data=i.slice(s);break}++a}return t.length-=a,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function mt(e){var t=e._readableState;if(0=t.highWaterMark||t.ended))return nt("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?mt(this):ct(this),null;if(0===(e=lt(e,t))&&t.ended)return 0===t.length&&mt(this),null;var n,a=t.needReadable;return nt("need readable",a),(0===t.length||t.length-e>1;++r)t[r]=String.fromCharCode(e.charCodeAt(2*r)+(e.charCodeAt(2*r+1)<<8));return t.join("")}(e.slice(2)):254==t&&255==r?function(e){for(var t=[],r=0;r>1;++r)t[r]=String.fromCharCode(e.charCodeAt(2*r+1)+(e.charCodeAt(2*r)<<8));return t.join("")}(e.slice(2)):65279==t?e.slice(1):e},d=function(e){return String.fromCharCode(e)},a=function(e){return String.fromCharCode(e)};"undefined"!=typeof cptable&&(he=function(e){h(u=e)},ie=function(e){return 255===e.charCodeAt(0)&&254===e.charCodeAt(1)?cptable.utils.decode(1200,ae(e.slice(2))):e},d=function(e){return 1200===u?String.fromCharCode(e):cptable.utils.decode(u,[255&e,e>>8])[0]},a=function(e){return cptable.utils.decode(A,[e])[0]});var p,ue=null,Q=(p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",{encode:function(e){for(var t="",r=0,n=0,a=0,i=0,s=0,o=0,l=0,c=0;c>2,s=(3&r)<<4|(n=e.charCodeAt(c++))>>4,o=(15&n)<<2|(a=e.charCodeAt(c++))>>6,l=63&a,isNaN(n)?o=l=64:isNaN(a)&&(l=64),t+=p.charAt(i)+p.charAt(s)+p.charAt(o)+p.charAt(l);return t},decode:function(e){var t="",r=0,n=0,a=0,i=0,s=0,o=0;e=e.replace(/[^\w\+\/\=]/g,"");for(var l=0;l>4,t+=String.fromCharCode(r),n=(15&i)<<4|(s=p.indexOf(e.charAt(l++)))>>2,64!==s&&(t+=String.fromCharCode(n)),a=(3&s)<<6|(o=p.indexOf(e.charAt(l++))),64!==o&&(t+=String.fromCharCode(a));return t}}),ee="undefined"!=typeof Buffer&&"undefined"!=typeof process&&void 0!==process.versions&&!!process.versions.node,i=function(){};if("undefined"!=typeof Buffer){var r=!Buffer.from;if(!r)try{Buffer.from("foo","utf8")}catch(e){r=!0}i=r?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer),Buffer.alloc||(Buffer.alloc=function(e){return new Buffer(e)}),Buffer.allocUnsafe||(Buffer.allocUnsafe=function(e){return new Buffer(e)})}function te(e){return ee?Buffer.alloc(e):new Array(e)}function re(e){return ee?Buffer.allocUnsafe(e):new Array(e)}var ne=function(e){return ee?i(e,"binary"):e.split("").map(function(e){return 255&e.charCodeAt(0)})};function s(e){if("undefined"==typeof ArrayBuffer)return ne(e);for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),n=0;n!=e.length;++n)r[n]=255&e.charCodeAt(n);return t}function k(e){if(Array.isArray(e))return e.map(function(e){return String.fromCharCode(e)}).join("");for(var t=[],r=0;r=7+t&&103==(32|e.charCodeAt(t))&&101==(32|e.charCodeAt(t+1))&&110==(32|e.charCodeAt(t+2))&&101==(32|e.charCodeAt(t+3))&&114==(32|e.charCodeAt(t+4))&&97==(32|e.charCodeAt(t+5))&&108==(32|e.charCodeAt(t+6))}var f=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],h=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function t(e){e[0]="General",e[1]="0",e[2]="0.00",e[3]="#,##0",e[4]="#,##0.00",e[9]="0%",e[10]="0.00%",e[11]="0.00E+00",e[12]="# ?/?",e[13]="# ??/??",e[14]="m/d/yy",e[15]="d-mmm-yy",e[16]="d-mmm",e[17]="mmm-yy",e[18]="h:mm AM/PM",e[19]="h:mm:ss AM/PM",e[20]="h:mm",e[21]="h:mm:ss",e[22]="m/d/yy h:mm",e[37]="#,##0 ;(#,##0)",e[38]="#,##0 ;[Red](#,##0)",e[39]="#,##0.00;(#,##0.00)",e[40]="#,##0.00;[Red](#,##0.00)",e[45]="mm:ss",e[46]="[h]:mm:ss",e[47]="mmss.0",e[48]="##0.0E+0",e[49]="@",e[56]='"上午/下午 "hh"時"mm"分"ss"秒 "'}var i={};t(i);var s=[],r=0;for(r=5;r<=8;++r)s[r]=32+r;for(r=23;r<=26;++r)s[r]=0;for(r=27;r<=31;++r)s[r]=14;for(r=50;r<=58;++r)s[r]=14;for(r=59;r<=62;++r)s[r]=r-58;for(r=67;r<=68;++r)s[r]=r-58;for(r=72;r<=75;++r)s[r]=r-58;for(r=67;r<=68;++r)s[r]=r-57;for(r=76;r<=78;++r)s[r]=r-56;for(r=79;r<=81;++r)s[r]=r-34;var o=[];function G(e,t,r){for(var n=e<0?-1:1,a=e*n,i=0,s=1,o=0,l=1,c=0,f=0,h=Math.floor(a);c(r<0?12:11)||"0"===n||"-0"===n?r.toPrecision(6):n,c(-1==(o=t.toUpperCase()).indexOf("E")?o:o.replace(f,"$1E").replace(h,"$10$2"))}}();function x(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(0|e)===e?e.toString(10):d(e);case"undefined":return"";case"object":if(null==e)return"";if(e instanceof Date)return w(14,u(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function R(e,t,r,n){var a,i="",s=0,o=0,l=r.y,c=0;switch(e){case 98:l=r.y+543;case 121:switch(t.length){case 1:case 2:a=l%100,c=2;break;default:a=l%1e4,c=4}break;case 109:switch(t.length){case 1:case 2:a=r.m,c=t.length;break;case 3:return h[r.m-1][1];case 5:return h[r.m-1][0];default:return h[r.m-1][2]}break;case 100:switch(t.length){case 1:case 2:a=r.d,c=t.length;break;case 3:return f[r.q][0];default:return f[r.q][1]}break;case 104:switch(t.length){case 1:case 2:a=1+(r.H+11)%12,c=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:a=r.H,c=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:a=r.M,c=t.length;break;default:throw"bad minute format: "+t}break;case 115:if("s"!=t&&"ss"!=t&&".0"!=t&&".00"!=t&&".000"!=t)throw"bad second format: "+t;return 0!==r.u||"s"!=t&&"ss"!=t?(60*(o=2<=n?3===n?1e3:100:1===n?10:1)<=(s=Math.round(o*(r.S+r.u)))&&(s=0),"s"===t?0===s?"0":""+s/o:(i=H(s,2+n),"ss"===t?i.substr(0,2):"."+i.substr(2,t.length-1))):H(r.S,t.length);case 90:switch(t){case"[h]":case"[hh]":a=24*r.D+r.H;break;case"[m]":case"[mm]":a=60*(24*r.D+r.H)+r.M;break;case"[s]":case"[ss]":a=60*(60*(24*r.D+r.H)+r.M)+Math.round(r.S+r.u);break;default:throw"bad abstime format: "+t}c=3===t.length?1:2;break;case 101:a=l,c=1}return 0t.length?c:P(t.substr(0,t.length-c.length))+c;if(f=t.match(I))return d=f,p=_,g=A,m=parseInt(d[4],10),b=Math.round(p*m),v=Math.floor(b/m),g+(0===v?"":""+v)+" "+(0==(w=b-v*(E=m))?z(" ",d[1].length+1+d[4].length):W(w,d[1].length)+d[2]+"/"+d[3]+H(E,d[4].length));if(t.match(/^#+0+$/))return A+X(_,t.length-t.indexOf("0"));if(f=t.match(O))return c=N(r,f[1].length).replace(/^([^\.]+)$/,"$1."+P(f[1])).replace(/\.$/,"."+P(f[1])).replace(/\.(\d*)$/,function(e,t){return"."+t+z("0",P(f[1]).length-t.length)}),-1!==t.indexOf("0.")?c:c.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),f=t.match(/^(0*)\.(#*)$/))return A+N(_,f[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,f[1].length?"0.":".");if(f=t.match(/^#{1,3},##0(\.?)$/))return A+j(X(_,0));if(f=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+M(e,t,-r):j(""+(Math.floor(r)+(C=r,(S=f[1].length)<(""+Math.round((C-Math.floor(C))*Math.pow(10,S))).length?1:0)))+"."+H(L(r,f[1].length),f[1].length);if(f=t.match(/^#,#*,#0/))return M(e,t.replace(/^#,#*,/,""),r);if(f=t.match(/^([0#]+)(\\?-([0#]+))+$/))return c=U(M(e,t.replace(/[\\-]/g,""),r)),h=0,U(U(t.replace(/\\/g,"")).replace(/[0#]/g,function(e){return ht.length?c:P(t.substr(0,t.length-c.length))+c;if(f=t.match(I))return m+(0===(p=g)?"":""+p)+z(" ",(d=f)[1].length+2+d[4].length);if(t.match(/^#+0+$/))return m+H(g,t.length-t.indexOf("0"));if(f=t.match(O))return c=(c=(""+r).replace(/^([^\.]+)$/,"$1."+P(f[1])).replace(/\.$/,"."+P(f[1]))).replace(/\.(\d*)$/,function(e,t){return"."+t+z("0",P(f[1]).length-t.length)}),-1!==t.indexOf("0.")?c:c.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),f=t.match(/^(0*)\.(#*)$/))return m+(""+g).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,f[1].length?"0.":".");if(f=t.match(/^#{1,3},##0(\.?)$/))return m+j(""+g);if(f=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+C(e,t,-r):j(""+r)+"."+z("0",f[1].length);if(f=t.match(/^#,#*,#0/))return C(e,t.replace(/^#,#*,/,""),r);if(f=t.match(/^([0#]+)(\\?-([0#]+))+$/))return c=U(C(e,t.replace(/[\\-]/g,""),r)),h=0,U(U(t.replace(/\\/g,"")).replace(/[0#]/g,function(e){return h=€acfijklopqrtuvwxzP".indexOf(f))throw new Error("unrecognized character "+f+" in "+e);o[o.length]={t:"t",v:f},++c}var m,b=0,v=0;for(c=o.length-1,h="t";0<=c;--c)switch(o[c].t){case"h":case"H":o[c].t=u,h="h",b<1&&(b=1);break;case"s":(m=o[c].v.match(/\.0+$/))&&(v=Math.max(v,m[0].length-1)),b<3&&(b=3);case"d":case"y":case"M":case"e":h=o[c].t;break;case"m":"s"===h&&(o[c].t="M",b<2&&(b=2));break;case"X":break;case"Z":b<1&&o[c].v.match(/[Hh]/)&&(b=1),b<2&&o[c].v.match(/[Mm]/)&&(b=2),b<3&&o[c].v.match(/[Ss]/)&&(b=3)}switch(b){case 0:break;case 1:.5<=a.u&&(a.u=0,++a.S),60<=a.S&&(a.S=0,++a.M),60<=a.M&&(a.M=0,++a.H);break;case 2:.5<=a.u&&(a.u=0,++a.S),60<=a.S&&(a.S=0,++a.M)}var w,E="";for(c=0;c=o[c].v.length-1?(w-=o[c].v.length,o[c].v=S.substr(w+1,o[c].v.length)):w<0?o[c].v="":(o[c].v=S.substr(0,w+1),w=-1),o[c].t="t",y=c);0<=w&&y]/,b=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function v(e,t){if(null==t)return!1;var r=parseFloat(t[2]);switch(t[1]){case"=":if(e==r)return!0;break;case">":if(r":if(e!=r)return!0;break;case">=":if(r<=e)return!0;break;case"<=":if(e<=r)return!0}return!1}function w(e,t,r){null==r&&(r={});var n="";switch(typeof e){case"string":n="m/d/yy"==e&&r.dateNF?r.dateNF:e;break;case"number":null==(n=14==e&&r.dateNF?r.dateNF:(null!=r.table?r.table:i)[e])&&(n=r.table&&r.table[s[e]]||i[s[e]]),null==n&&(n=o[e]||"General")}if(k(n,0))return x(t,r);t instanceof Date&&(t=u(t,r.date1904));var a=function(e,t){var r=p(e),n=r.length,a=r[n-1].indexOf("@");if(n<4&&-1>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1,t[r]=e;return"undefined"!=typeof Int32Array?new Int32Array(t):t}();function i(e,t){for(var r=-1^t,n=e.length-7,a=0;a>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])];for(;a>>8^o[255&(r^e[a++])];return-1^r}e.table=o,e.bstr=function(e,t){for(var r=-1^t,n=e.length-1,a=0;a>>8^o[255&(r^e.charCodeAt(a++))])>>>8^o[255&(r^e.charCodeAt(a++))];return a===n&&(r=r>>>8^o[255&(r^e.charCodeAt(a))]),-1^r},e.buf=function(e,t){if(1e4>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])])>>>8^o[255&(r^e[a++])];for(;a>>8^o[255&(r^e[a++])];return-1^r},e.str=function(e,t){for(var r,n,a=-1^t,i=0,s=e.length;i>>8^o[255&(a^r)]:r<2048?(a=a>>>8^o[255&(a^(192|r>>6&31))])>>>8^o[255&(a^(128|63&r))]:55296<=r&&r<57344?(r=64+(1023&r),n=1023&e.charCodeAt(i++),(a=(a=(a=a>>>8^o[255&(a^(240|r>>8&7))])>>>8^o[255&(a^(128|r>>2&63))])>>>8^o[255&(a^(128|n>>6&15|(3&r)<<4))])>>>8^o[255&(a^(128|63&n))]):(a=(a=a>>>8^o[255&(a^(224|r>>12&15))])>>>8^o[255&(a^(128|r>>6&63))])>>>8^o[255&(a^(128|63&r))];return-1^a}}(fe={});var v,ge=function(){var a,e={};function u(e){if("/"==e.charAt(e.length-1))return-1===e.slice(0,-1).indexOf("/")?e:u(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(0,t+1)}function d(e){if("/"==e.charAt(e.length-1))return d(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(t+1)}function C(e,t){"string"==typeof t&&(t=new Date(t));var r=t.getHours();r=(r=r<<6|t.getMinutes())<<5|t.getSeconds()>>>1,e.write_shift(2,r);var n=t.getFullYear()-1980;n=(n=n<<4|t.getMonth()+1)<<5|t.getDate(),e.write_shift(2,n)}function w(e){Mt(e,0);for(var t={},r=0;e.l<=e.length-4;){var n=e.read_shift(2),a=e.read_shift(2),i=e.l+a,s={};switch(n){case 21589:1&(r=e.read_shift(1))&&(s.mtime=e.read_shift(4)),5>>2)-1;if(!o)return;for(var c=0;c=l.length?-1:o,o=a+1;o=l.length?-1:o,f.type=1}else u(e.FullPaths[a+1]||"")==u(h)&&(f.R=a+1),f.type=2}}}function o(e,t){var r=t||{};if(p(e),"zip"==r.fileType)return function(e,t){var r,n=t||{},a=[],i=[],s=zt(1),o=n.compression?8:0,l=0,c=0,f=0,h=0,u=0,d=e.FullPaths[0],p=d,g=e.FileIndex[0],m=[],b=0;for(c=1;c>6:r+=i+511>>9)}}for(var s=e.FullPaths.length+3>>2,o=t+127>>7,l=(t+7>>3)+r+s+o,c=l+127>>7,f=c<=109?0:Math.ceil((c-109)/127);c>7;)f=++c<=109?0:Math.ceil((c-109)/127);var h=[1,f,c,o,s,r,t,0];return e.FileIndex[0].size=t<<6,h[7]=(e.FileIndex[0].start=h[0]+h[1]+h[2]+h[3]+h[4]+h[5])+(h[6]+7>>3),h}(e),a=zt(n[7]<<9),i=0,s=0;for(i=0;i<8;++i)a.write_shift(1,m[i]);for(i=0;i<8;++i)a.write_shift(2,0);for(a.write_shift(2,62),a.write_shift(2,3),a.write_shift(2,65534),a.write_shift(2,9),a.write_shift(2,6),i=0;i<3;++i)a.write_shift(2,0);for(a.write_shift(4,0),a.write_shift(4,n[2]),a.write_shift(4,n[0]+n[1]+n[2]+n[3]-1),a.write_shift(4,0),a.write_shift(4,4096),a.write_shift(4,n[3]?n[0]+n[1]+n[2]-1:B),a.write_shift(4,n[3]),a.write_shift(-4,n[1]?n[0]-1:B),a.write_shift(4,n[1]),i=0;i<109;++i)a.write_shift(-4,i>9)));for(o(n[6]+7>>3);511&a.l;)a.write_shift(-4,v.ENDOFCHAIN);for(s=i=0,l=0;l>6)));for(;511&a.l;)a.write_shift(-4,v.ENDOFCHAIN);for(i=0;i>16|r>>8|r);function O(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=5?0:e[n+1]<<8))>>>r&7}function D(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=3?0:e[n+1]<<8))>>>r&31}function F(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=1?0:e[n+1]<<8))>>>r&127}function P(e,t,r){var n=7&t,a=t>>>3,i=(1<>>n;return r<8-n?s&i:(s|=e[a+1]<<8-n,r<16-n?s&i:(s|=e[a+2]<<16-n,r<24-n?s&i:(s|=e[a+3]<<24-n)&i))}function N(e,t){var r=e.length,n=t<2*r?2*r:t+5,a=0;if(t<=r)return e;if(ee){var i=re(n);if(e.copy)e.copy(i);else for(;a>>8-u:(d=d<<8|I[h>>8&255],u<=16?d>>>16-u:(d=d<<8|I[h>>16&255])>>>24-u))>>n-p,s=(1<>>3]|(a<=4?0:r[i+1]<<8))>>>a&15));t+=4;for(var c=0,f=R?new Uint8Array(19):L(19),h=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],u=1,d=R?new Uint8Array(8):L(8),p=R?new Uint8Array(8):L(8),g=f.length,m=0;m>8-v;for(var w=(1<<7-v)-1;0<=w;--w)X[b|w<>>=3){case 16:for(c=3+(S=7&(C=t),((E=e)[_=C>>>3]|(S<=6?0:E[_+1]<<8))>>>S&3),t+=2,b=A[A.length-1];0>>0,o=0,l=0;0==(1&n);)if(n=O(e,r),r+=3,n>>>1!=0)for(l=n>>>1==1?(o=9,5):(r=Y(e,r),o=G,j),!t&&s>>1==1?z[c]:W[c];if(r+=15&f,0==((f>>>=4)>>>8&255))a[i++]=f;else{if(256==f)break;var h=(f-=257)<8?0:f-4>>2;5>>1==1?H[c]:V[c]);var d=(f>>>=4)<4?0:f-2>>1,p=x[f];for(0>>3]|e[1+(r>>>3)]<<8;if(r+=32,!t&&s>>3,(r>>>3)+g),i+=g,r+=8*g;else for(;0>>3],r+=8}return[t?a:a.slice(0,i),r+7>>>3]}(e.slice(e.l||0),t);return e.l+=r[1],r[0]}function $(e,t){if(!e)throw new Error(t)}function Z(e,t){var r=e;Mt(r,0);var n={FileIndex:[],FullPaths:[]};g(n,{root:t.root});for(var a=r.length-4;(80!=r[a]||75!=r[a+1]||5!=r[a+2]||6!=r[a+3])&&0<=a;)--a;r.l=a+4,r.l+=4;var i=r.read_shift(2);r.l+=6;var s=r.read_shift(4);for(r.l=s,a=0;a>>=5);r>>>=4,n.setMilliseconds(0),n.setFullYear(r+1980),n.setMonth(i-1),n.setDate(a);var s=31&t,o=63&(t>>>=5);return t>>>=6,n.setHours(t),n.setMinutes(o),n.setSeconds(s<<1),n}(e);if(8257&i)throw new Error("Unsupported ZIP encryption");for(var l=e.read_shift(4),c=e.read_shift(4),f=e.read_shift(4),h=e.read_shift(2),u=e.read_shift(2),d="",p=0;p\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g,we=/<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s*[\/\?]?>/gm;Y.match(we)||(we=/<[^>]*>/g);var Ee=/<\w*:/,Ce=/<(\/?)\w+:/;function Se(e,t,r){for(var n={},a=0,i=0;a!==e.length&&32!==(i=e.charCodeAt(a))&&10!==i&&13!==i;++a);if(t||(n[0]=e.slice(0,a)),a===e.length)return n;var s=e.match(K),o=0,l="",c=0,f="",h="",u=1;if(s)for(c=0;c!=s.length;++c){for(h=s[c],i=0;i!=h.length&&61!==h.charCodeAt(i);++i);for(f=h.slice(0,i).trim();32==h.charCodeAt(i+1);)++i;for(u=34==(a=h.charCodeAt(i+1))||39==a?1:0,l=h.slice(i+1+u,h.length-u),o=0;o!=f.length&&58!==f.charCodeAt(o);++o);if(o===f.length)0","<":"<","&":"&"},ke=w(Be),Te=(Ae=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/gi,ye=/_x([\da-fA-F]{4})_/gi,function e(t){var r=t+"",n=r.indexOf("");return e(r.slice(0,n))+r.slice(n+9,a)+e(r.slice(a+3))}),xe=/[&<>'"]/g,Re=/[\u0000-\u0008\u000b-\u001f]/g;function Ie(e){return(e+"").replace(xe,function(e){return ke[e]}).replace(Re,function(e){return"_x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+"_"})}function Oe(e){return Ie(e).replace(/ /g,"_x0020_")}var De=/[\u0000-\u001f]/g;function Fe(e){return(e+"").replace(xe,function(e){return ke[e]}).replace(/\n/g,"
").replace(De,function(e){return"&#x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+";"})}var Pe=function(){var t=/&#(\d+);/g;function r(e,t){return String.fromCharCode(parseInt(t,10))}return function(e){return e.replace(t,r)}}(),Ne=function(e){return e.replace(/(\r\n|[\r\n])/g," ")};function Le(e){switch(e){case 1:case!0:case"1":case"true":case"TRUE":return!0;default:return!1}}var Me=function(e){for(var t="",r=0,n=0,a=0,i=0,s=0,o=0;r>>10&1023)),t+=String.fromCharCode(56320+(1023&o)))));return t},Ue=function(e){for(var t=[],r=0,n=0,a=0;r>6))),t.push(String.fromCharCode(128+(63&n)));break;case 55296<=n&&n<57344:n-=55296,a=e.charCodeAt(r++)-56320+(n<<10),t.push(String.fromCharCode(240+(a>>18&7))),t.push(String.fromCharCode(144+(a>>12&63))),t.push(String.fromCharCode(128+(a>>6&63))),t.push(String.fromCharCode(128+(63&a)));break;default:t.push(String.fromCharCode(224+(n>>12))),t.push(String.fromCharCode(128+(n>>6&63))),t.push(String.fromCharCode(128+(63&n)))}return t.join("")};if(ee){var ze=function(e){var t,r,n,a=Buffer.alloc(2*e.length),i=1,s=0,o=0;for(r=0;r>>10&1023),t=56320+(1023&t)),0!==o&&(a[s++]=255&o,a[s++]=o>>>8,o=0),a[s++]=t%256,a[s++]=t>>>8;return a.slice(0,s).toString("ucs2")},He="foo bar baz☃🍣";Me(He)==ze(He)&&(Me=ze);var We=function(e){return i(e,"binary").toString("utf8")};Me(He)==We(He)&&(Me=We),Ue=function(e){return i(e,"utf8").toString("binary")}}var Ve,Xe,Ge,je=(Ve={},function(e,t){var r=e+"|"+(t||"");return Ve[r]?Ve[r]:Ve[r]=new RegExp("<(?:\\w+:)?"+e+'(?: xml:space="preserve")?(?:[^>]*)>([\\s\\S]*?)",t||"")}),Ye=(Xe=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map(function(e){return[new RegExp("&"+e[0]+";","ig"),e[1]]}),function(e){for(var t=e.replace(/^[\t\n\r ]+/,"").replace(/[\t\n\r ]+$/,"").replace(/>\s+/g,">").replace(/\s+/g,"\n").replace(/<[^>]*>/g,""),r=0;r([\\s\\S]*?)","g")}),$e=/<\/?(?:vt:)?variant>/g,Ze=/<(?:vt:)([^>]*)>([\s\S]*)"+t+""}function et(t){return me(t).map(function(e){return" "+e+'="'+t[e]+'"'}).join("")}function tt(e,t,r){return"<"+e+(null!=r?et(r):"")+(null!=t?(t.match(Je)?' xml:space="preserve"':"")+">"+t+""}function rt(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}var nt,at,it={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema",main:["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"]},st={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"},ot=function(e){for(var t=[],r=0;r>>7),n=((127&e[t+7])<<4)+(e[t+6]>>>4&15),a=15&e[t+6],i=5;0<=i;--i)a=256*a+e[t+i];return 2047==n?0==a?r*(1/0):NaN:(0==n?n=-1022:(n-=1023,a+=Math.pow(2,52)),r*Math.pow(2,n-52)*a)}(e,t)};var yt=function(e){return Array.isArray(e)};ee&&(ct=function(e,t,r){return Buffer.isBuffer(e)?e.toString("utf16le",t,r).replace(oe,""):ft(e,t,r)},ht=function(e,t,r){return Buffer.isBuffer(e)?e.toString("hex",t,t+r):ut(e,t,r)},gt=function(e,t){if(!Buffer.isBuffer(e))return mt(e,t);var r=e.readUInt32LE(t);return 0>>8&255,e[r+2]=t>>>16&255,e[r+3]=t>>>24&255},Ft=function(e,t,r){e[r]=255&t,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255},Pt=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255};function Nt(e,t,r){var n=0,a=0;if("dbcs"===r){for(a=0;a!=t.length;++a)Pt(this,t.charCodeAt(a),this.l+2*a);n=2*t.length}else if("sbcs"===r){if("undefined"!=typeof cptable&&874==A)for(a=0;a!=t.length;++a){var i=cptable.utils.encode(A,t.charAt(a));this[this.l+a]=i[0]}else for(t=t.replace(/[^\x00-\x7F]/g,"_"),a=0;a!=t.length;++a)this[this.l+a]=255&t.charCodeAt(a);n=t.length}else{if("hex"===r){for(;a>8}for(;this.l>>=8,this[this.l+1]=255&t;break;case 3:n=3,this[this.l]=255&t,t>>>=8,this[this.l+1]=255&t,t>>>=8,this[this.l+2]=255&t;break;case 4:n=4,Dt(this,t,this.l);break;case 8:if(n=8,"f"===r){!function(e,t,r){var n=(t<0||1/t==-1/0?1:0)<<7,a=0,i=0,s=n?-t:t;isFinite(s)?0==s?a=i=0:(a=Math.floor(Math.log(s)/Math.LN2),i=s*Math.pow(2,52-a),a<=-1023&&(!isFinite(i)||i>4|n}(this,t,this.l);break}case 16:break;case-4:n=4,Ft(this,t,this.l)}}return this.l+=n,this}function Lt(e,t){var r=ht(this,this.l,e.length>>1);if(r!==e)throw new Error(t+"Expected "+e+" saw "+r);this.l+=e.length>>1}function Mt(e,t){e.l=t,e.read_shift=Ot,e.chk=Lt,e.write_shift=Nt}function Ut(e,t){e.l+=t}function zt(e){var t=te(e);return Mt(t,0),t}function Ht(e,t,r){if(e){var n,a,i;Mt(e,e.l||0);for(var s=e.length,o=0,l=0;e.ln.l&&((n=n.slice(0,n.l)).l=n.length),0>7));for(var o=0;4!=o;++o){if(!(128<=n)){s.write_shift(1,n);break}s.write_shift(1,128+(127&n)),n>>=7}0p&&(c.s.r=p),c.s.c>g&&(c.s.c=g),c.e.r>2;return r?a/100:a}function Br(e,t){null==t&&(t=zt(4));var r=0,n=0,a=100*e;if(e==(0|e)&&-(1<<29)<=e&&e<1<<29?n=1:a==(0|a)&&-(1<<29)<=a&&a<1<<29&&(r=n=1),!n)throw new Error("unsupported RkNumber "+e);t.write_shift(-4,((r?a:e)<<2)+(r+2))}function kr(e){var t={s:{},e:{}};return t.s.r=e.read_shift(4),t.e.r=e.read_shift(4),t.s.c=e.read_shift(4),t.e.c=e.read_shift(4),t}var Tr=kr,xr=function(e,t){return t||(t=zt(16)),t.write_shift(4,e.s.r),t.write_shift(4,e.e.r),t.write_shift(4,e.s.c),t.write_shift(4,e.e.c),t};function Rr(e){if(e.length-e.l<8)throw"XLS Xnum Buffer underflow";return e.read_shift(8,"f")}function Ir(e,t){return(t||zt(8)).write_shift(8,e,"f")}function Or(e,t){if(t||(t=zt(8)),!e||e.auto)return t.write_shift(4,0),t.write_shift(4,0),t;null!=e.index?(t.write_shift(1,2),t.write_shift(1,e.index)):null!=e.theme?(t.write_shift(1,6),t.write_shift(1,e.theme)):(t.write_shift(1,5),t.write_shift(1,0));var r=e.tint||0;if(0>16&255,e>>8&255,255&e]})),Yr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},Kr=y(Yr),$r={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-office.chartex+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"},Zr=(me(Fr={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xlam:"application/vnd.ms-excel.addin.macroEnabled.main+xml",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}}).forEach(function(t){["xlsm","xlam"].forEach(function(e){Fr[t][e]||(Fr[t][e]=Fr[t].xlsx)})}),me(Fr).forEach(function(t){me(Fr[t]).forEach(function(e){$r[Fr[t][e]]=t})}),Fr),qr=function(e){for(var t=[],r=me(e),n=0;n!==r.length;++n)null==t[e[r[n]]]&&(t[e[r[n]]]=[]),t[e[r[n]]].push(r[n]);return t}($r);it.CT="http://schemas.openxmlformats.org/package/2006/content-types";var Jr=tt("Types",null,{xmlns:it.CT,"xmlns:xsd":it.xsd,"xmlns:xsi":it.xsi}),Qr=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["data","application/vnd.openxmlformats-officedocument.model+data"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels",qr.rels[0]]].map(function(e){return tt("Default",null,{Extension:e[0],ContentType:e[1]})}),en={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",XLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",CXML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",CXMLP:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function tn(e){var t=e.lastIndexOf("/");return e.slice(0,t+1)+"_rels/"+e.slice(t+1)+".rels"}function rn(e,a){var i={"!id":{}};if(!e)return i;"/"!==a.charAt(0)&&(a="/"+a);var s={};return(e.match(we)||[]).forEach(function(e){var t=Se(e);if("",r[1]=r[1].replace("/>",">")),r.join("")}var sn=[en.HLINK,en.XPATH,en.XMISS];function on(e,t,r,n,a,i){if(a||(a={}),e["!id"]||(e["!id"]={}),t<0)for(t=1;e["!id"]["rId"+t];++t);if(a.Id="rId"+t,a.Type=n,a.Target=r,i?a.TargetMode=i:-1\n',' \n'," \n"].join("")}var fn,hn=(fn='SheetJS '+n.version+"",function(){return fn}),un=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];it.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties",en.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var dn=function(){for(var e=new Array(un.length),t=0;t]*>([\\s\\S]*?)")}return e}();function pn(e){var t={};e=Me(e);for(var r=0;r]+>[^<]*/g,Cn=tt("Properties",null,{xmlns:it.CUST_PROPS,"xmlns:vt":it.vt});function Sn(t){var r=[Y,Cn];if(!t)return r.join("");var n=1;return me(t).forEach(function(e){++n,r[r.length]=tt("property",function(e,t){switch(typeof e){case"string":var r=tt("vt:lpwstr",Ie(e));return t&&(r=r.replace(/"/g,"_x0022_")),r;case"number":return tt((0|e)==e?"vt:i4":"vt:r8",Ie(String(e)));case"boolean":return tt("vt:bool",e?"true":"false")}if(e instanceof Date)return tt("vt:filetime",rt(e));throw new Error("Unable to serialize "+e)}(t[e],!0),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:n,name:Ie(e)})}),2",r[1]=r[1].replace("/>",">")),r.join("")}var _n={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"},An=w(_n);function yn(e){var t=e.read_shift(4),r=e.read_shift(4);return new Date(1e3*(r/1e7*Math.pow(2,32)+t/1e7-11644473600)).toISOString().replace(/\.000/,"")}function Bn(e,t,r){var n=e.l,a=e.read_shift(0,"lpstr-cp");if(r)for(;e.l-n&3;)++e.l;return a}function kn(e,t,r){var n=e.read_shift(0,"lpwstr");return r&&(e.l+=4-(n.length+1&3)&3),n}function Tn(e,t,r){return 31===t?kn(e):Bn(e,0,r)}function xn(e,t,r){return Tn(e,t,!1===r?0:4)}function Rn(e,t){for(var r=e.read_shift(4),n={},a=0;a!=r;++a){var i=e.read_shift(4),s=e.read_shift(4);n[i]=e.read_shift(s,1200===t?"utf16le":"utf8").replace(oe,"").replace(le,"!"),1200===t&&s%2&&(e.l+=2)}return 3&e.l&&(e.l=e.l>>3<<2),n}function In(e){var t=e.read_shift(4),r=e.slice(e.l,e.l+t);return e.l+=t,0<(3&t)&&(e.l+=4-(3&t)&3),r}function On(e,t,r){var n,a,i,s=e.read_shift(2),o=r||{};if(e.l+=2,t!==Lr&&s!==t&&-1===Ur.indexOf(t)&&(4126!=(65534&t)||4126!=(65534&s)))throw new Error("Expected type "+t+" saw "+s);switch(t===Lr?s:t){case 2:return n=e.read_shift(2,"i"),o.raw||(e.l+=2),n;case 3:return n=e.read_shift(4,"i");case 11:return 0!==e.read_shift(4);case 19:return n=e.read_shift(4);case 30:return Bn(e,0,4).replace(oe,"");case 31:return kn(e);case 64:return yn(e);case 65:return In(e);case 71:return(i={}).Size=(a=e).read_shift(4),a.l+=i.Size+3-(i.Size-1)%4,i;case 80:return xn(e,s,!o.raw).replace(oe,"");case 81:return function(e,t){if(!t)throw new Error("VtUnalignedString must have positive length");return Tn(e,t,0)}(e,s).replace(oe,"");case 4108:return function(e){for(var t,r,n,a=e.read_shift(4),i=[],s=0;s
>16)+"."+("0000"+String(65535&u[p.n])).slice(-4)),"CodePage"==p.n)switch(u[p.n]){case 0:u[p.n]=1252;case 874:case 932:case 936:case 949:case 950:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 1e4:case 1200:case 1201:case 1252:case 65e3:case-536:case 65001:case-535:he(o=u[p.n]>>>0&65535);break;default:throw new Error("Unsupported CodePage: "+u[p.n])}}else if(1===i[s][0]){if(o=u.CodePage=On(e,Pr),he(o),-1!==l){var g=e.l;e.l=i[l][1],c=Rn(e,o),e.l=g}}else if(0===i[s][0]){if(0===o){l=s,e.l=i[s+1][1];continue}c=Rn(e,o)}else{var m,b=c[i[s][0]];switch(e[e.l]){case 65:e.l+=4,m=In(e);break;case 30:case 31:e.l+=4,m=xn(e,e[e.l-4]).replace(/\u0000+$/,"");break;case 3:e.l+=4,m=e.read_shift(4,"i");break;case 19:e.l+=4,m=e.read_shift(4);break;case 5:e.l+=4,m=e.read_shift(8,"f");break;case 11:e.l+=4,m=Hn(e,4);break;case 64:e.l+=4,m=be(yn(e));break;default:throw new Error("unparsed value: "+e[e.l])}u[b]=m}}return e.l=r+n,u}var Pn=["CodePage","Thumbnail","_PID_LINKBASE","_PID_HLINKS","SystemIdentifier","FMTID"].concat(["Worksheets","SheetNames","NamedRanges","DefinedNames","Chartsheets","ChartNames"]);function Nn(e){switch(typeof e){case"boolean":return 11;case"number":return(0|e)==e?3:5;case"string":return 31;case"object":if(e instanceof Date)return 64}return-1}function Ln(e,t,r){var n=zt(8),a=[],i=[],s=8,o=0,l=zt(8),c=zt(8);if(l.write_shift(4,2),l.write_shift(4,1200),c.write_shift(4,1),i.push(l),a.push(c),s+=8+l.length,!t){(c=zt(8)).write_shift(4,0),a.unshift(c);var f=[zt(4)];for(f[0].write_shift(4,e.length),o=0;o"+c.t+"",c.r=c.t),u=t,c}function $n(e){var t=e.t||"",r=zt(3);r.write_shift(2,t.length),r.write_shift(1,1);var n=zt(2*t.length);return n.write_shift(2*t.length,t,"utf16le"),se([r,n])}function Zn(e,t,r){if(r){if(2<=r.biff&&r.biff<=5)return e.read_shift(t,"cpstr");if(12<=r.biff)return e.read_shift(t,"dbcs-cont")}return 0===e.read_shift(1)?e.read_shift(t,"sbcs-cont"):e.read_shift(t,"dbcs-cont")}function qn(e,t,r){var n=e.read_shift(r&&2==r.biff?1:2);return 0===n?(e.l++,""):Zn(e,n,r)}function Jn(e,t,r){if(5>1,"utf16le").replace(oe,"");return n&&(e.l+=24),a}(e);case"0303000000000000c000000000000046":return function(e){for(var t=e.read_shift(2),r="";0>1,"utf16le").replace(oe,"")}(e);default:throw new Error("Unsupported Moniker "+r)}}function ta(e){var t=e.read_shift(4);return 0>15),a&=32767),[{Unsynced:1&n,DyZero:(2&n)>>1,ExAsc:(4&n)>>2,ExDsc:(8&n)>>3},a]}function wa(e,t,r,n){var a=r&&5==r.biff;n||(n=zt(a?3+t.length:5+2*t.length)),n.write_shift(2,e),n.write_shift(a?1:2,t.length),a||n.write_shift(1,1),n.write_shift((a?1:2)*t.length,t,a?"sbcs":"utf16le");var i=n.length>n.l?n.slice(0,n.l):n;return null==i.l&&(i.l=i.length),i}var Ea=Jn;function Ca(e,t,r){var n=e.l+t,a=8!=r.biff&&r.biff?2:4,i=e.read_shift(a),s=e.read_shift(a),o=e.read_shift(2),l=e.read_shift(2);return e.l=n,{s:{r:i,c:o},e:{r:s,c:l}}}function Sa(e,t,r,n){var a=r&&5==r.biff;n||(n=zt(a?16:20)),n.write_shift(2,0),e.style?(n.write_shift(2,e.numFmtId||0),n.write_shift(2,65524)):(n.write_shift(2,e.numFmtId||0),n.write_shift(2,t<<4));var i=0;return 0>>1&1,fWantPict:a>>>2&1,fOle:a>>>3&1,fOleLink:a>>>4&1,cf:a>>>5&1023,fIcon:a>>>15&1};return 14849===r.sbcch&&(n=function(e,t,r){e.l+=4,t-=4;var n=e.l+t,a=Yn(e,0,r),i=e.read_shift(2);if(i!==(n-=e.l))throw new Error("Malformed AddinUdf: padding = "+n+" != "+i);return e.l+=i,a}(e,t-2,r)),i.body=n||e.read_shift(t-2),"string"==typeof n&&(i.Name=n),i}var Ba=["_xlnm.Consolidate_Area","_xlnm.Auto_Open","_xlnm.Auto_Close","_xlnm.Extract","_xlnm.Database","_xlnm.Criteria","_xlnm.Print_Area","_xlnm.Print_Titles","_xlnm.Recorder","_xlnm.Data_Form","_xlnm.Auto_Activate","_xlnm.Auto_Deactivate","_xlnm.Sheet_Title","_xlnm._FilterDatabase"];function ka(e,t,r){var n=e.l+t,a=e.read_shift(2),i=e.read_shift(1),s=e.read_shift(1),o=e.read_shift(r&&2==r.biff?1:2),l=0;(!r||5<=r.biff)&&(5!=r.biff&&(e.l+=2),l=e.read_shift(2),5==r.biff&&(e.l+=2),e.l+=4);var c=Zn(e,s,r);32&a&&(c=Ba[c.charCodeAt(0)]);var f,h,u,d,p,g,m,b=n-e.l;return r&&2==r.biff&&--b,{chKey:i,Name:c,itab:l,rgce:n!=e.l&&0!==o&&0>8&7),c}Ra[8]=function(e,t){var r=e.l+t;e.l+=10;var n=e.read_shift(2);e.l+=4,e.l+=2,e.l+=2,e.l+=2,e.l+=4;var a=e.read_shift(1);return e.l+=a,e.l=r,{fmt:n}};var Fa=ia,Pa=Gn,Na=qn,La=function(){var E={1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127,8:865,9:437,10:850,11:437,13:437,14:850,15:437,16:850,17:437,18:850,19:932,20:850,21:437,22:850,23:865,24:437,25:437,26:850,27:437,28:863,29:850,31:852,34:852,35:852,36:860,37:850,38:866,55:850,64:852,77:936,78:949,79:950,80:874,87:1252,88:1252,89:1252,108:863,134:737,135:852,136:857,204:1257,255:16969},S=w({1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127});function r(e,t){var r=t||{};return r.dateNF||(r.dateNF="yyyymmdd"),or(function(e,t){var r=[],n=te(1);switch(t.type){case"base64":n=ne(Q.decode(e));break;case"binary":n=ne(e);break;case"buffer":case"array":n=e}Mt(n,0);var a=n.read_shift(1),i=!!(136&a),s=!1,o=!1;switch(a){case 2:case 3:break;case 48:case 49:i=s=!0;break;case 131:case 139:break;case 140:o=!0;break;case 245:break;default:throw new Error("DBF Unsupported Version: "+a.toString(16))}var l=0,c=521;2==a&&(l=n.read_shift(2)),n.l+=3,2!=a&&(l=n.read_shift(4)),1048576":190,"?":191,"{":223},x=new RegExp("N("+me(n).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1")+"|\\|)","gm"),R=function(e,t){var r=n[t];return"number"==typeof r?a(r):r},I=function(e,t,r){var n=t.charCodeAt(0)-32<<4|r.charCodeAt(0)-48;return 59==n?e:a(n)};function s(e,t){var r,n=e.split(/[\n\r]+/),a=-1,i=-1,s=0,o=0,l=[],c=[],f=null,h={},u=[],d=[],p=[],g=0;for(0<=+t.codepage&&he(+t.codepage);s!==n.length;++s){g=0;var m,b=n[s].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g,I).replace(x,R),v=b.replace(/;;/g,"\0").split(";").map(function(e){return e.replace(/\u0000/g,";")}),w=v[0];if(0l&&(i["!ref"]=tr(h),c[s]=i,f.push(s),i=a.dense?[]:{},h={s:{r:0,c:0},e:{r:0,c:0}},l=e[3],s=o||"Sheet"+(l+1),o="");var n=a.dense?(i[e[0].r]||[])[e[0].c]:i[Qt(e[0])];if(n){n.t=e[1].t,n.v=e[1].v,null!=e[1].z&&(n.z=e[1].z),null!=e[1].f&&(n.f=e[1].f);break}a.dense?(i[e[0].r]||(i[e[0].r]=[]),i[e[0].r][e[0].c]=e[1]):i[Qt(e[0])]=e[1]}},a);else{if(26!=e[2]&&14!=e[2])throw new Error("Unrecognized LOTUS BOF "+e[2]);a.Enum=C,14==e[2]&&(a.qpro=!0,e.l=0),g(e,function(e,t,r){switch(r){case 204:s=e;break;case 22:e[1].v=e[1].v.slice(1);case 23:case 24:case 25:case 37:case 39:case 40:if(e[3]>l&&(i["!ref"]=tr(h),c[s]=i,f.push(s),i=a.dense?[]:{},h={s:{r:0,c:0},e:{r:0,c:0}},l=e[3],s="Sheet"+(l+1)),0=u)break;a.dense?(i[e[0].r]||(i[e[0].r]=[]),i[e[0].r][e[0].c]=e[1]):i[Qt(e[0])]=e[1],h.e.c","<=",">=","<",">","","","","","&","","","","","","",""];function o(e){var t=[{c:0,r:0},{t:"n",v:0},0];return t[0].r=e.read_shift(2),t[3]=e[e.l++],t[0].c=e[e.l++],t}function b(e,t,r,n){var a=zt(6+n.length);a.write_shift(2,e),a.write_shift(1,r),a.write_shift(1,t),a.write_shift(1,39);for(var i=0;i>>0))&&(++o,l=(n/=2)>>>0),n-=l,l|=2147483648,l>>>=0,i=(n*=Math.pow(2,32))>>>0,a.write_shift(4,i),a.write_shift(4,l),o+=16383+(s?32768:0),a.write_shift(2,o),a}function a(e,t){var r=o(e),n=e.read_shift(8,"f");return r[1].v=n,r}function t(e,t){return 0==e[e.l+t-1]?e.read_shift(t,"cstr"):""}function w(e,t){var r=zt(5+e.length);r.write_shift(2,14e3),r.write_shift(2,t);for(var n=0;nr.length)return;var u=r.slice(-n);r.length-=n,r.push(p[l][0]+"("+u.join(",")+")")}}}1==r.length&&(t[1].f=""+r[0])}(e.slice(e.l,e.l+i),a),e.l+=i}return a}},24:{n:"TABLE"},25:{n:"ORANGE"},26:{n:"PRANGE"},27:{n:"SRANGE"},28:{n:"FRANGE"},29:{n:"KRANGE1"},32:{n:"HRANGE"},35:{n:"KRANGE2"},36:{n:"PROTEC"},37:{n:"FOOTER"},38:{n:"HEADER"},39:{n:"SETUP"},40:{n:"MARGINS"},41:{n:"LABELFMT"},42:{n:"TITLES"},43:{n:"SHEETJS"},45:{n:"GRAPH"},46:{n:"NGRAPH"},47:{n:"CALCCOUNT"},48:{n:"UNFORMATTED"},49:{n:"CURSORW12"},50:{n:"WINDOW"},51:{n:"STRING",f:e},55:{n:"PASSWORD"},56:{n:"LOCKED"},60:{n:"QUERY"},61:{n:"QUERYNAME"},62:{n:"PRINT"},63:{n:"PRINTNAME"},64:{n:"GRAPH2"},65:{n:"GRAPHNAME"},66:{n:"ZOOM"},67:{n:"SYMSPLIT"},68:{n:"NSROWS"},69:{n:"NSCOLS"},70:{n:"RULER"},71:{n:"NNAME"},72:{n:"ACOMM"},73:{n:"AMACRO"},74:{n:"PARSE"},102:{n:"PRANGES??"},103:{n:"RRANGES??"},104:{n:"FNAME??"},105:{n:"MRANGES??"},204:{n:"SHEETNAMECS",f:t},222:{n:"SHEETNAMELP",f:function(e,t){var r=e[e.l++];t-1>1;if(1&r[1].v)switch(7&n){case 0:n=5e3*(n>>3);break;case 1:n=500*(n>>3);break;case 2:n=(n>>3)/20;break;case 3:n=(n>>3)/200;break;case 4:n=(n>>3)/2e3;break;case 5:n=(n>>3)/2e4;break;case 6:n=(n>>3)/16;break;case 7:n=(n>>3)/64}return r[1].v=n,r}},25:{n:"FORMULA19",f:function(e,t){var r=n(e);return e.l+=t-14,r}},26:{n:"FORMULA1A"},27:{n:"XFORMAT",f:function(e,t){for(var r={},n=e.l+t;e.l>6,r}},38:{n:"??"},39:{n:"NUMBER27",f:a},40:{n:"FORMULA28",f:function(e,t){var r=a(e);return e.l+=t-10,r}},142:{n:"??"},147:{n:"??"},150:{n:"??"},151:{n:"??"},152:{n:"??"},153:{n:"??"},154:{n:"??"},155:{n:"??"},156:{n:"??"},163:{n:"??"},174:{n:"??"},175:{n:"??"},176:{n:"??"},177:{n:"??"},184:{n:"??"},185:{n:"??"},186:{n:"??"},187:{n:"??"},188:{n:"??"},195:{n:"??"},201:{n:"??"},204:{n:"SHEETNAMECS",f:t},205:{n:"??"},206:{n:"??"},207:{n:"??"},208:{n:"??"},256:{n:"??"},259:{n:"??"},260:{n:"??"},261:{n:"??"},262:{n:"??"},263:{n:"??"},265:{n:"??"},266:{n:"??"},267:{n:"??"},268:{n:"??"},270:{n:"??"},271:{n:"??"},384:{n:"??"},389:{n:"??"},390:{n:"??"},393:{n:"??"},396:{n:"??"},512:{n:"??"},514:{n:"??"},513:{n:"??"},516:{n:"??"},517:{n:"??"},640:{n:"??"},641:{n:"??"},642:{n:"??"},643:{n:"??"},644:{n:"??"},645:{n:"??"},646:{n:"??"},647:{n:"??"},648:{n:"??"},658:{n:"??"},659:{n:"??"},660:{n:"??"},661:{n:"??"},662:{n:"??"},665:{n:"??"},666:{n:"??"},768:{n:"??"},772:{n:"??"},1537:{n:"SHEETINFOQP",f:function(e,t,r){if(r.qpro&&!(t<21)){var n=e.read_shift(1);return e.l+=17,e.read_shift(1),e.l+=2,[n,e.read_shift(t-21,"cstr")]}}},1600:{n:"??"},1602:{n:"??"},1793:{n:"??"},1794:{n:"??"},1795:{n:"??"},1796:{n:"??"},1920:{n:"??"},2048:{n:"??"},2049:{n:"??"},2052:{n:"??"},2688:{n:"??"},10998:{n:"??"},12849:{n:"??"},28233:{n:"??"},28484:{n:"??"},65535:{n:""}};return{sheet_to_wk1:function(e,t){var r=t||{};if(0<=+r.codepage&&he(+r.codepage),"string"==r.type)throw new Error("Cannot write WK1 to JS string");var n,a,i,s,o,l,c,f,h,u,d,p,g=Wt(),m=rr(e["!ref"]),b=Array.isArray(e),v=[];bc(g,0,(n=1030,(a=zt(2)).write_shift(2,n),a)),bc(g,6,(i=m,(s=zt(8)).write_shift(2,i.s.c),s.write_shift(2,i.s.r),s.write_shift(2,i.e.c),s.write_shift(2,i.e.r),s));for(var w=Math.min(m.e.r,8191),E=m.s.r;E<=w;++E)for(var C=$t(E),S=m.s.c;S<=m.e.c;++S){E===m.s.r&&(v[S]=qt(S));var _=v[S]+C,A=b?(e[E]||[])[S]:e[_];A&&"z"!=A.t&&("n"==A.t?(0|A.v)==A.v&&-32768<=A.v&&A.v<=32767?bc(g,13,(h=E,u=S,d=A.v,p=void 0,(p=zt(7)).write_shift(1,255),p.write_shift(2,u),p.write_shift(2,h),p.write_shift(2,d,"i"),p)):bc(g,14,(o=E,l=S,c=A.v,f=void 0,(f=zt(13)).write_shift(1,255),f.write_shift(2,l),f.write_shift(2,o),f.write_shift(8,c,"f"),f)):bc(g,15,y(E,S,ar(A).slice(0,239))))}return bc(g,1),g.end()},book_to_wk3:function(e,t){var r=t||{};if(0<=+r.codepage&&he(+r.codepage),"string"==r.type)throw new Error("Cannot write WK3 to JS string");var n=Wt();bc(n,0,function(e){var t=zt(26);t.write_shift(2,4096),t.write_shift(2,4),t.write_shift(4,0);for(var r=0,n=0,a=0,i=0;i":case"":t.shadow=1;break;case"":break;case"":case"":t.outline=1;break;case"":break;case"":case"":t.strike=1;break;case"":break;case"":case"":t.u=1;break;case"":break;case"":case"":t.b=1;break;case"":break;case"":case"":t.i=1;break;case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":case"":case"":case"":break;case"":case"":break;case"":a=!1;break;default:if(47!==i[0].charCodeAt(1)&&!a)throw new Error("Unrecognized rich format "+i[0])}}return t}(n[1])),r}var r=/<(?:\w+:)?r>/g,n=/<\/(?:\w+:)?r>/;return function(e){return e.replace(r,"").split(n).map(t).filter(function(e){return e.v})}}(),Xa=function(){var r=/(\r\n|\n)/g;function t(e){var t=[[],e.v,[]];return e.v?(e.s&&function(e,t,r){var n=[];e.u&&n.push("text-decoration: underline;"),e.uval&&n.push("text-underline-style:"+e.uval+";"),e.sz&&n.push("font-size:"+e.sz+"pt;"),e.outline&&n.push("text-effect: outline;"),e.shadow&&n.push("text-shadow: auto;"),t.push(''),e.b&&(t.push(""),r.push("")),e.i&&(t.push(""),r.push("")),e.strike&&(t.push(""),r.push(""));var a=e.valign||"";"superscript"==a||"super"==a?a="sup":"subscript"==a&&(a="sub"),""!=a&&(t.push("<"+a+">"),r.push("")),r.push("")}(e.s,t[0],t[2]),t[0].join("")+t[1].replace(r,"
")+t[2].join("")):""}return function(e){return e.map(t).join("")}}(),Ga=/<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g,ja=/<(?:\w+:)?r>/,Ya=/<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g;function Ka(e,t){var r=!t||t.cellHTML,n={};return e?(e.match(/^\s*<(?:\w+:)?t[^>]*>/)?(n.t=Te(Me(e.slice(e.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]||"")),n.r=Me(e),r&&(n.h=Fe(n.t))):e.match(ja)&&(n.r=Me(e),n.t=Te(Me((e.replace(Ya,"").match(Ga)||[]).join("").replace(we,""))),r&&(n.h=Xa(Va(n.r)))),n):{t:""}}var $a=/<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/,Za=/<(?:\w+:)?(?:si|sstItem)>/g,qa=/<\/(?:\w+:)?(?:si|sstItem)>/;en.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var Ja=/^\s|\s$|[\t\n\r]/,Qa=function(e,t){var r=!1;return null==t&&(r=!0,t=zt(15+4*e.t.length)),t.write_shift(1,0),fr(e.t,t),r?t.slice(0,t.l):t};function ei(e){var t,r,n=Wt();Vt(n,"BrtBeginSst",(t=e,r||(r=zt(8)),r.write_shift(4,t.Count),r.write_shift(4,t.Unique),r));for(var a=0;a>1,"utf16le"),e.l=r,n}function si(e,t){var r={},n=e.l+t;return e.l+=4,r.Salt=e.slice(e.l,e.l+16),e.l+=16,r.Verifier=e.slice(e.l,e.l+16),e.l+=16,e.read_shift(4),r.VerifierHash=e.slice(e.l,n),e.l=n,r}function oi(e){var t=ri(e);switch(t.Minor){case 2:return[t.Minor,function(e){if(36!=(63&e.read_shift(4)))throw new Error("EncryptionInfo mismatch");var t=e.read_shift(4),r=ii(e,t),n=si(e,e.length-e.l);return{t:"Std",h:r,v:n}}(e)];case 3:return[t.Minor,function(){throw new Error("File is password-protected: ECMA-376 Extensible")}()];case 4:return[t.Minor,function(e){var r=["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];e.l+=4;var t=e.read_shift(e.length-e.l,"utf8"),n={};return t.replace(we,function(e){var t=Se(e);switch(_e(t[0])){case"":break;case"":case"":break;case"":break;case">8,o[s]=ui(ci[0],t),--s,t=255&i,r=a[a.length-1],o[s]=ui(r,t));0>8,o[--s]=ui(a[s],t),t=255&i,o[--s]=ui(a[s],t);for(n=(s=15)-a.length;0>8,o[s]=ui(ci[n],t),--n,t=255&i,o[--s]=ui(a[s],t),--s,--n;return o}),pi=function(e){var r=0,n=di(e);return function(e){var t=function(e,t,r,n,a){var i,s;for(a||(a=t),n||(n=di(e)),i=0;i!=t.length;++i)s=t[i],s=255&((s^=n[r])>>5|s<<3),a[i]=s,++r;return[a,r,n]}("",e,r,n);return r=t[1],t[0]}};function gi(e,t,r){var n=r||{};return n.Info=e.read_shift(2),e.l-=2,1===n.Info?n.Data=function(e){var t={},r=t.EncryptionVersionInfo=ri(e,4);if(1!=r.Major||1!=r.Minor)throw"unrecognized version code "+r.Major+" : "+r.Minor;return t.Salt=e.read_shift(16),t.EncryptedVerifier=e.read_shift(16),t.EncryptedVerifierHash=e.read_shift(16),t}(e):n.Data=function(e,t){var r={},n=r.EncryptionVersionInfo=ri(e,4);if(t-=4,2!=n.Minor)throw new Error("unrecognized minor version code: "+n.Minor);if(4c.e.c&&(c.e.c=i)}),l["!ref"]=tr(c),l}return{to_workbook:function(e,t){return ir(r(e,t),t)},to_sheet:r,from_sheet:function(e){for(var t,r=["{\\rtf1\\ansi"],n=rr(e["!ref"]),a=Array.isArray(e),i=n.s.r;i<=n.e.r;++i){r.push("\\trowd\\trautofit1");for(var s=n.s.c;s<=n.e.c;++s)r.push("\\cellx"+(s+1));for(r.push("\\pard\\intbl"),s=n.s.c;s<=n.e.c;++s){var o=Qt({r:i,c:s});(t=a?(e[i]||[])[s]:e[o])&&(null!=t.v||t.f&&!t.F)&&(r.push(" "+(t.w||(ar(t),t.w))),r.push("\\cell"))}r.push("\\pard\\intbl\\row")}return r.join("")+"}"}}}();function bi(e){for(var t=0,r=1;3!=t;++t)r=256*r+(255]*)>[\S\s]*?<\/(?:\w+:)?numFmts>/,Di=/<(?:\w+:)?cellXfs([^>]*)>[\S\s]*?<\/(?:\w+:)?cellXfs>/,Fi=/<(?:\w+:)?fills([^>]*)>[\S\s]*?<\/(?:\w+:)?fills>/,Pi=/<(?:\w+:)?fonts([^>]*)>[\S\s]*?<\/(?:\w+:)?fonts>/,Ni=/<(?:\w+:)?borders([^>]*)>[\S\s]*?<\/(?:\w+:)?borders>/,function(e,t,r){var n,a,i,s,o,l,c={};return e&&((n=(e=e.replace(//gm,"").replace(//gm,"")).match(Oi))&&function(e,t,r){t.NumberFmt=[];for(var n=me(de._table),a=0;a":case"":case"":break;case"":break;default:if(r.WTF)throw new Error("unrecognized "+s[0]+" in numFmts")}}}(n,c,r),(n=e.match(Pi))&&function(e,n,a,i){n.Fonts=[];var s={},o=!1;(e[0].match(we)||[]).forEach(function(e){var t=Se(e);switch(_e(t[0])){case"":case"":break;case"":break;case"
":case"":n.Fonts.push(s),s={};break;case"":case"":break;case"":s.bold=1;break;case"":s.italic=1;break;case"":s.underline=1;break;case"":s.strike=1;break;case"":s.outline=1;break;case"":s.shadow=1;break;case"":s.condense=1;break;case"":s.extend=1;break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":o=!1;break;case"":case"":break;case"":o=!1;break;default:if(i&&i.WTF&&!o)throw new Error("unrecognized "+t[0]+" in fonts")}})}(n,c,t,r),(n=e.match(Fi))&&function(e,r,t,n){r.Fills=[];var a={},i=!1;(e[0].match(we)||[]).forEach(function(e){var t=Se(e);switch(_e(t[0])){case"":case"":break;case"":case"":a={},r.Fills.push(a);break;case"":case"":break;case"":r.Fills.push(a),a={};break;case"":t.patternType&&(a.patternType=t.patternType);break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":i=!1;break;default:if(n&&n.WTF&&!i)throw new Error("unrecognized "+t[0]+" in fills")}})}(n,c,0,r),(n=e.match(Ni))&&function(e,r,t,n){r.Borders=[];var a={},i=!1;(e[0].match(we)||[]).forEach(function(e){var t=Se(e);switch(_e(t[0])){case"":case"":break;case"":case"":a={},t.diagonalUp&&(a.diagonalUp=Le(t.diagonalUp)),t.diagonalDown&&(a.diagonalDown=Le(t.diagonalDown)),r.Borders.push(a);break;case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":break;case"":case"":break;case"":case"":break;case"":i=!1;break;default:if(n&&n.WTF&&!i)throw new Error("unrecognized "+t[0]+" in borders")}})}(n,c,0,r),(n=e.match(Di))&&(a=n,s=r,(i=c).CellXf=[],l=!1,(a[0].match(we)||[]).forEach(function(e){var t=Se(e),r=0;switch(_e(t[0])){case"":case"":case"":break;case"":for(delete(o=t)[0],r=0;r":break;case"":var n={};t.vertical&&(n.vertical=t.vertical),t.horizontal&&(n.horizontal=t.horizontal),null!=t.textRotation&&(n.textRotation=t.textRotation),t.indent&&(n.indent=t.indent),t.wrapText&&(n.wrapText=Le(t.wrapText)),o.alignment=n;break;case"":case"":case"":break;case"":l=!1;break;case"":case"":break;case"":l=!1;break;default:if(s&&s.WTF&&!l)throw new Error("unrecognized "+t[0]+" in cellXfs")}}))),c}),Hi=tt("styleSheet",null,{xmlns:it.main[0],"xmlns:vt":it.vt});function Wi(e,t){var r,n,a,i,s,o=[Y,Hi];return e.SSF&&null!=(n=e.SSF,a=[""],[[5,8],[23,26],[41,44],[50,392]].forEach(function(e){for(var t=e[0];t<=e[1];++t)null!=n[t]&&(a[a.length]=tt("numFmt",null,{numFmtId:t,formatCode:Ie(n[t])}))}),r=1===a.length?"":(a[a.length]="",a[0]=tt("numFmts",null,{count:a.length-2}).replace("/>",">"),a.join("")))&&(o[o.length]=r),o[o.length]='',o[o.length]='',o[o.length]='',o[o.length]='',i=t.cellXfs,(s=[])[s.length]=tt("cellXfs",null),i.forEach(function(e){s[s.length]=tt("xf",null,e)}),s[s.length]="",(r=2===s.length?"":(s[0]=tt("cellXfs",null,{count:s.length-2}).replace("/>",">"),s.join("")))&&(o[o.length]=r),o[o.length]='',o[o.length]='',o[o.length]='',2",o[1]=o[1].replace("/>",">")),o.join("")}function Vi(e,t,r){r||(r=zt(6+4*t.length)),r.write_shift(2,e),fr(t,r);var n=r.length>r.l?r.slice(0,r.l):r;return null==r.l&&(r.l=r.length),n}function Xi(e,t){t||(t=zt(153)),t.write_shift(2,20*e.sz),function(e,t){t||(t=zt(2));var r=(e.italic?2:0)|(e.strike?8:0)|(e.outline?16:0)|(e.shadow?32:0)|(e.condense?64:0)|(e.extend?128:0);t.write_shift(1,r),t.write_shift(1,0)}(e,t),t.write_shift(2,e.bold?700:400);var r=0;"superscript"==e.vertAlign?r=1:"subscript"==e.vertAlign&&(r=2),t.write_shift(2,r),t.write_shift(1,e.underline||0),t.write_shift(1,e.family||0),t.write_shift(1,e.charset||0),t.write_shift(1,0),Or(e.color,t);var n=0;return"major"==e.scheme&&(n=1),"minor"==e.scheme&&(n=2),t.write_shift(1,n),fr(e.name,t),t.length>t.l?t.slice(0,t.l):t}en.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";var Gi=w(["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"]),ji=Ut;function Yi(e,t){t||(t=zt(84));var r=Gi[e.patternType];null==r&&(r=40),t.write_shift(4,r);var n=0;if(40!=r)for(Or({auto:1},t),Or({auto:1},t);n<12;++n)t.write_shift(4,0);else{for(;n<4;++n)t.write_shift(4,0);for(;n<12;++n)t.write_shift(4,0)}return t.length>t.l?t.slice(0,t.l):t}function Ki(e,t,r){return r||(r=zt(16)),r.write_shift(2,t||0),r.write_shift(2,e.numFmtId||0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r}function $i(e,t){return t||(t=zt(10)),t.write_shift(1,0),t.write_shift(1,0),t.write_shift(4,0),t.write_shift(4,0),t}var Zi=Ut;function qi(e){var t;Vt(e,"BrtBeginBorders",lr(1)),Vt(e,"BrtBorder",(t||(t=zt(51)),t.write_shift(1,0),$i(0,t),$i(0,t),$i(0,t),$i(0,t),$i(0,t),t.length>t.l?t.slice(0,t.l):t)),Vt(e,"BrtEndBorders")}function Ji(e){var t,r;Vt(e,"BrtBeginStyles",lr(1)),Vt(e,"BrtStyle",(t={xfId:0,builtinId:0,name:"Normal"},r||(r=zt(52)),r.write_shift(4,t.xfId),r.write_shift(2,1),r.write_shift(1,+t.builtinId),r.write_shift(1,0),Cr(t.name||"",r),r.length>r.l?r.slice(0,r.l):r)),Vt(e,"BrtEndStyles")}function Qi(e){var t,r,n,a;Vt(e,"BrtBeginTableStyles",(t=0,r="TableStyleMedium9",n="PivotStyleMedium4",(a=zt(2052)).write_shift(4,t),Cr(r,a),Cr(n,a),a.length>a.l?a.slice(0,a.l):a)),Vt(e,"BrtEndTableStyles")}function es(e,t){var r,n,a,i,s,o,l=Wt();return Vt(l,"BrtBeginStyleSheet"),function(r,n){if(n){var a=0;[[5,8],[23,26],[41,44],[50,392]].forEach(function(e){for(var t=e[0];t<=e[1];++t)null!=n[t]&&++a}),0!=a&&(Vt(r,"BrtBeginFmts",lr(a)),[[5,8],[23,26],[41,44],[50,392]].forEach(function(e){for(var t=e[0];t<=e[1];++t)null!=n[t]&&Vt(r,"BrtFmt",Vi(t,n[t]))}),Vt(r,"BrtEndFmts"))}}(l,e.SSF),Vt(r=l,"BrtBeginFonts",lr(1)),Vt(r,"BrtFont",Xi({sz:12,color:{theme:1},name:"Calibri",family:2,scheme:"minor"})),Vt(r,"BrtEndFonts"),Vt(n=l,"BrtBeginFills",lr(2)),Vt(n,"BrtFill",Yi({patternType:"none"})),Vt(n,"BrtFill",Yi({patternType:"gray125"})),Vt(n,"BrtEndFills"),qi(l),Vt(a=l,"BrtBeginCellStyleXFs",lr(1)),Vt(a,"BrtXF",Ki({numFmtId:0,fontId:0,fillId:0,borderId:0},65535)),Vt(a,"BrtEndCellStyleXFs"),i=l,s=t.cellXfs,Vt(i,"BrtBeginCellXFs",lr(s.length)),s.forEach(function(e){Vt(i,"BrtXF",Ki(e,0))}),Vt(i,"BrtEndCellXFs"),Ji(l),Vt(o=l,"BrtBeginDXFs",lr(0)),Vt(o,"BrtEndDXFs"),Qi(l),Vt(l,"BrtEndStyleSheet"),l.end()}en.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";var ts=["","","","","","","","","","","",""];function rs(e,r,n){r.themeElements.clrScheme=[];var a={};(e[0].match(we)||[]).forEach(function(e){var t=Se(e);switch(t[0]){case"":break;case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":"/"===t[0].charAt(1)?(r.themeElements.clrScheme[ts.indexOf(t[0])]=a,a={}):a.name=t[0].slice(3,t[0].length-1);break;default:if(n&&n.WTF)throw new Error("Unrecognized "+t[0]+" in clrScheme")}})}function ns(){}function as(){}var is=/]*)>[\s\S]*<\/a:clrScheme>/,ss=/]*)>[\s\S]*<\/a:fontScheme>/,os=/]*)>[\s\S]*<\/a:fmtScheme>/,ls=/]*)>[\s\S]*<\/a:themeElements>/;function cs(e,t){if(!e||0===e.length)return cs(fs());var r,n,a,i,s,o={};if(!(r=e.match(ls)))throw new Error("themeElements not found in theme");return n=r[0],i=t,(a=o).themeElements={},[["clrScheme",is,rs],["fontScheme",ss,ns],["fmtScheme",os,as]].forEach(function(e){if(!(s=n.match(e[1])))throw new Error(e[0]+" not found in themeElements");e[2](s,a,i)}),o.raw=e,o}function fs(e,t){if(t&&t.themeXLSX)return t.themeXLSX;if(e&&"string"==typeof e.raw)return e.raw;var r=[Y];return r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r.join("")}function hs(e){var t={};switch(t.xclrType=e.read_shift(2),t.nTintShade=e.read_shift(2),t.xclrType){case 0:e.l+=4;break;case 1:t.xclrValue=Ut(e,4);break;case 2:t.xclrValue=na(e);break;case 3:t.xclrValue=e.read_shift(4);break;case 4:e.l+=4}return e.l+=8,t}function us(e){var t=e.read_shift(2),r=e.read_shift(2)-4,n=[t];switch(t){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:n[1]=hs(e);break;case 6:n[1]=Ut(e,r);break;case 14:case 15:n[1]=e.read_shift(1===r?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+t+" "+r)}return n}en.IMG="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",en.DRAW="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing";var ds=1024;function ps(e,t){for(var r=[21600,21600],n=["m0,0l0",r[1],r[0],r[1],r[0],"0xe"].join(","),a=[tt("xml",null,{"xmlns:v":st.v,"xmlns:o":st.o,"xmlns:x":st.x,"xmlns:mv":st.mv}).replace(/\/>/,">"),tt("o:shapelayout",tt("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"}),tt("v:shapetype",[tt("v:stroke",null,{joinstyle:"miter"}),tt("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:r.join(","),path:n})];ds<1e3*e;)ds+=1e3;return t.forEach(function(e){var t=Jt(e[0]),r={color2:"#BEFF82",type:"gradient"};"gradient"==r.type&&(r.angle="-180");var n=tt("v:fill","gradient"==r.type?tt("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}):null,r);++ds,a=a.concat(["",n,tt("v:shadow",null,{on:"t",obscured:"t"}),tt("v:path",null,{"o:connecttype":"none"}),'
','',"","",Qe("x:Anchor",[t.c+1,0,t.r+1,0,t.c+3,20,t.r+5,20].join(",")),Qe("x:AutoFill","False"),Qe("x:Row",String(t.r)),Qe("x:Column",String(t.c)),e[1].hidden?"":"","",""])}),a.push(""),a.join("")}en.CMNT="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";var gs=tt("comments",null,{xmlns:it.main[0]}),ms=cr;function bs(e){var i=Wt(),s=[];return Vt(i,"BrtBeginComments"),Vt(i,"BrtBeginCommentAuthors"),e.forEach(function(e){e[1].forEach(function(e){-1>14&1,r>>15&1]}function ks(e,t,r){var n=2;if(r){if(2<=r.biff&&r.biff<=5)return Ts(e);12==r.biff&&(n=4)}var a=e.read_shift(n),i=e.read_shift(n),s=Bs(e,2),o=Bs(e,2);return{s:{r:a,c:s[0],cRel:s[1],rRel:s[2]},e:{r:i,c:o[0],cRel:o[1],rRel:o[2]}}}function Ts(e){var t=Bs(e,2),r=Bs(e,2),n=e.read_shift(1),a=e.read_shift(1);return{s:{r:t[0],c:n,cRel:t[1],rRel:t[2]},e:{r:r[0],c:a,cRel:r[1],rRel:r[2]}}}function xs(e,t,r){if(r&&2<=r.biff&&r.biff<=5)return a=Bs(n=e,2),i=n.read_shift(1),{r:a[0],c:i,cRel:a[1],rRel:a[2]};var n,a,i,s=e.read_shift(r&&12==r.biff?4:2),o=Bs(e,2);return{r:s,c:o[0],cRel:o[1],rRel:o[2]}}function Rs(e){return[e.read_shift(1),e.read_shift(1)]}function Is(e,t){var r=[e.read_shift(1)];if(12==t)switch(r[0]){case 2:r[0]=4;break;case 4:r[0]=16;break;case 0:r[0]=1;break;case 1:r[0]=2}switch(r[0]){case 4:r[1]=Hn(e,1)?"TRUE":"FALSE",12!=t&&(e.l+=7);break;case 37:case 16:r[1]=Yr[e[e.l]],e.l+=12==t?4:8;break;case 0:e.l+=8;break;case 1:r[1]=Rr(e);break;case 2:r[1]=Jn(e,0,{biff:0>15,rRel:i>>15})];var n,a,i}function Ps(e){return e.l+=6,[]}var Ns=Fs,Ls=Ps,Ms=Ps,Us=Fs;function zs(e){return e.l+=2,[Vn(e),1&e.read_shift(2)]}var Hs=Fs,Ws=zs,Vs=Ps,Xs=Fs,Gs=Fs,js=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"],Ys={1:{n:"PtgExp",f:function(e,t,r){return e.l++,r&&12==r.biff?[e.read_shift(4,"i"),0]:[e.read_shift(2),e.read_shift(r&&2==r.biff?1:2)]}},2:{n:"PtgTbl",f:Ut},3:{n:"PtgAdd",f:ys},4:{n:"PtgSub",f:ys},5:{n:"PtgMul",f:ys},6:{n:"PtgDiv",f:ys},7:{n:"PtgPower",f:ys},8:{n:"PtgConcat",f:ys},9:{n:"PtgLt",f:ys},10:{n:"PtgLe",f:ys},11:{n:"PtgEq",f:ys},12:{n:"PtgGe",f:ys},13:{n:"PtgGt",f:ys},14:{n:"PtgNe",f:ys},15:{n:"PtgIsect",f:ys},16:{n:"PtgUnion",f:ys},17:{n:"PtgRange",f:ys},18:{n:"PtgUplus",f:ys},19:{n:"PtgUminus",f:ys},20:{n:"PtgPercent",f:ys},21:{n:"PtgParen",f:ys},22:{n:"PtgMissArg",f:ys},23:{n:"PtgStr",f:function(e,t,r){return e.l++,Yn(e,0,r)}},26:{n:"PtgSheet",f:function(e,t,r){return e.l+=5,e.l+=2,e.l+=2==r.biff?1:4,["PTGSHEET"]}},27:{n:"PtgEndSheet",f:function(e,t,r){return e.l+=2==r.biff?4:5,["PTGENDSHEET"]}},28:{n:"PtgErr",f:function(e){return e.l++,Yr[e.read_shift(1)]}},29:{n:"PtgBool",f:function(e){return e.l++,0!==e.read_shift(1)}},30:{n:"PtgInt",f:function(e){return e.l++,e.read_shift(2)}},31:{n:"PtgNum",f:function(e){return e.l++,Rr(e)}},32:{n:"PtgArray",f:function(e,t,r){var n=(96&e[e.l++])>>5;return e.l+=2==r.biff?6:12==r.biff?14:7,[n]}},33:{n:"PtgFunc",f:function(e,t,r){var n=(96&e[e.l])>>5;e.l+=1;var a=e.read_shift(r&&r.biff<=3?1:2);return[go[a],po[a],n]}},34:{n:"PtgFuncVar",f:function(e,t,r){var n,a=e[e.l++],i=e.read_shift(1),s=r&&r.biff<=3?[88==a?-1:0,e.read_shift(1)]:[(n=e)[n.l+1]>>7,32767&n.read_shift(2)];return[i,(0===s[0]?po:uo)[s[1]]]}},35:{n:"PtgName",f:function(e,t,r){var n=e.read_shift(1)>>>5&3,a=!r||8<=r.biff?4:2,i=e.read_shift(a);switch(r.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12}return[n,0,i]}},36:{n:"PtgRef",f:function(e,t,r){var n=(96&e[e.l])>>5;return e.l+=1,[n,xs(e,0,r)]}},37:{n:"PtgArea",f:function(e,t,r){return[(96&e[e.l++])>>5,ks(e,2<=r.biff&&r.biff,r)]}},38:{n:"PtgMemArea",f:function(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=r&&2==r.biff?3:4,[n,e.read_shift(r&&2==r.biff?1:2)]}},39:{n:"PtgMemErr",f:Ut},40:{n:"PtgMemNoMem",f:Ut},41:{n:"PtgMemFunc",f:function(e,t,r){return[e.read_shift(1)>>>5&3,e.read_shift(r&&2==r.biff?1:2)]}},42:{n:"PtgRefErr",f:function(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=4,r.biff<8&&e.l--,12==r.biff&&(e.l+=2),[n]}},43:{n:"PtgAreaErr",f:function(e,t,r){var n=(96&e[e.l++])>>5;return e.l+=r&&8>5;return e.l+=1,[n,function(e,t,r){var n,a,i,s,o,l=r&&r.biff?r.biff:8;if(2<=l&&l<=5)return a=(n=e).read_shift(2),i=n.read_shift(1),s=(32768&a)>>15,o=(16384&a)>>14,a&=16383,1==s&&8192<=a&&(a-=16384),1==o&&128<=i&&(i-=256),{r:a,c:i,cRel:o,rRel:s};var c=e.read_shift(12<=l?4:2),f=e.read_shift(2),h=(16384&f)>>14,u=(32768&f)>>15;if(f&=16383,1==u)for(;524287>5,function(e,t,r){if(r.biff<8)return Ts(e);var n=e.read_shift(12==r.biff?4:2),a=e.read_shift(12==r.biff?4:2),i=Bs(e,2),s=Bs(e,2);return{s:{r:n,c:i[0],cRel:i[1],rRel:i[2]},e:{r:a,c:s[0],cRel:s[1],rRel:s[2]}}}(e,0,r)]}},46:{n:"PtgMemAreaN",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},47:{n:"PtgMemNoMemN",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},57:{n:"PtgNameX",f:function(e,t,r){return 5==r.biff?function(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2,"i");e.l+=8;var n=e.read_shift(2);return e.l+=12,[t,r,n]}(e):[e.read_shift(1)>>>5&3,e.read_shift(2),e.read_shift(4)]}},58:{n:"PtgRef3d",f:function(e,t,r){var n=(96&e[e.l])>>5;e.l+=1;var a=e.read_shift(2);return r&&5==r.biff&&(e.l+=12),[n,a,xs(e,0,r)]}},59:{n:"PtgArea3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,a=e.read_shift(2,"i");if(r)switch(r.biff){case 5:e.l+=12}return[n,a,ks(e,0,r)]}},60:{n:"PtgRefErr3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,a=e.read_shift(2),i=4;if(r)switch(r.biff){case 5:i=15;break;case 12:i=6}return e.l+=i,[n,a]}},61:{n:"PtgAreaErr3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,a=e.read_shift(2),i=8;if(r)switch(r.biff){case 5:e.l+=12,i=6;break;case 12:i=12}return e.l+=i,[n,a]}},255:{}},Ks={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};!function(){for(var e in Ks)Ys[e]=Ys[Ks[e]]}();var $s={1:{n:"PtgElfLel",f:zs},2:{n:"PtgElfRw",f:Xs},3:{n:"PtgElfCol",f:Ns},6:{n:"PtgElfRwV",f:Gs},7:{n:"PtgElfColV",f:Us},10:{n:"PtgElfRadical",f:Hs},11:{n:"PtgElfRadicalS",f:Vs},13:{n:"PtgElfColS",f:Ls},15:{n:"PtgElfColSV",f:Ms},16:{n:"PtgElfRadicalLel",f:Ws},25:{n:"PtgList",f:function(e){e.l+=2;var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(4),a=e.read_shift(2),i=e.read_shift(2);return{ixti:t,coltype:3&r,rt:js[r>>2&31],idx:n,c:a,C:i}}},29:{n:"PtgSxName",f:function(e){return e.l+=2,[e.read_shift(4)]}},255:{}},Zs={0:{n:"PtgAttrNoop",f:function(e){return e.l+=4,[0,0]}},1:{n:"PtgAttrSemi",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=r&&2==r.biff?3:4,[n]}},2:{n:"PtgAttrIf",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=2,[n,e.read_shift(r&&2==r.biff?1:2)]}},4:{n:"PtgAttrChoose",f:function(e,t,r){e.l+=2;for(var n=e.read_shift(r&&2==r.biff?1:2),a=[],i=0;i<=n;++i)a.push(e.read_shift(r&&2==r.biff?1:2));return a}},8:{n:"PtgAttrGoto",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=2,[n,e.read_shift(r&&2==r.biff?1:2)]}},16:{n:"PtgAttrSum",f:function(e,t,r){e.l+=r&&2==r.biff?3:4}},32:{n:"PtgAttrBaxcel",f:function(e){var t=1&e[e.l+1];return e.l+=4,[t,1]}},64:{n:"PtgAttrSpace",f:function(e){return e.read_shift(2),Rs(e)}},65:{n:"PtgAttrSpaceSemi",f:function(e){return e.read_shift(2),Rs(e)}},128:{n:"PtgAttrIfError",f:function(e){var t=255&e[e.l+1]?1:0;return e.l+=2,[t,e.read_shift(2)]}},255:{}};function qs(e,t,r,n){if(n.biff<8)return Ut(e,t);for(var a=e.l+t,i=[],s=0;s!==r.length;++s)switch(r[s][0]){case"PtgArray":r[s][1]=Ds(e,0,n),i.push(r[s][1]);break;case"PtgMemArea":r[s][2]=Os(e,r[s][1],n),i.push(r[s][2]);break;case"PtgExp":n&&12==n.biff&&(r[s][1][1]=e.read_shift(4),i.push(r[s][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+r[s][0]}return 0!=(t=a-e.l)&&i.push(Ut(e,t)),i}function Js(e,t,r){for(var n,a,i=e.l+t,s=[];i!=e.l;)t=i-e.l,a=e[e.l],n=Ys[a],24!==a&&25!==a||(n=(24===a?$s:Zs)[e[e.l+1]]),n&&n.f?s.push([n.n,n.f(e,t,r)]):Ut(e,t);return s}function Qs(e){for(var t=[],r=0;r=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"},to=new RegExp(/[^\w\u4E00-\u9FFF\u3040-\u30FF]/);function ro(e,t,r){if(!e)return"SH33TJSERR0";if(8s[0].e.c||o.rs[0].e.r)){h.push(ao(s[1],0,I,n,a)),D=!0;break}D||h.push(w[1])}break;case"PtgArray":h.push("{"+Qs(w[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":g=b;break;case"PtgTbl":case"PtgMemErr":break;case"PtgMissArg":h.push("");break;case"PtgAreaErr":case"PtgAreaErr3d":h.push("#REF!");break;case"PtgList":h.push("Table"+w[1].idx+"[#"+w[1].rt+"]");break;case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":case"PtgMemFunc":case"PtgMemNoMem":break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");case"PtgSxName":default:throw new Error("Unrecognized Formula Token: "+String(w))}if(3!=a.biff&&0<=g&&-1==["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"].indexOf(e[0][b][0])){var F=!0;switch((w=e[0][g])[1][0]){case 4:F=!1;case 0:m=P(" ",w[1][1]);break;case 5:F=!1;case 1:m=P("\r",w[1][1]);break;default:if(m="",a.WTF)throw new Error("Unexpected PtgAttrSpaceType "+w[1][0])}h.push((F?m:"")+h.pop()+(F?"":m)),g=-1}}if(1>3&1,tt:i[1]}}function so(e,t,r,n,a){var i=sa(t,r,a),s=function(e){if(null!=e)return Ir("number"==typeof e?e:0);var t=zt(8);return t.write_shift(1,3),t.write_shift(1,0),t.write_shift(2,0),t.write_shift(2,0),t.write_shift(2,65535),t}(e.v),o=zt(6);o.write_shift(2,33),o.write_shift(4,0);for(var l=zt(e.bf.length),c=0;c/g,xo=/<(?:\w+:)?sheetData[^>]*>([\s\S]*)<\/(?:\w+:)?sheetData>/,Ro=/<(?:\w:)?hyperlink [^>]*>/gm,Io=/"(\w*:\w*)"/,Oo=/<(?:\w:)?col\b[^>]*[\/]?>/g,Do=/<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g,Fo=/<(?:\w:)?pageMargins[^>]*\/>/g,Po=/<(?:\w:)?sheetPr\b(?:[^>a-z][^>]*)?\/>/,No=/<(?:\w:)?sheetPr[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetPr)>/,Lo=/<(?:\w:)?sheetViews[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetViews)>/;function Mo(e,t,r,n,a,i,s){if(!e)return e;n||(n={"!id":{}}),null!=ue&&null==t.dense&&(t.dense=ue);var o=t.dense?[]:{},l={s:{r:2e6,c:2e6},e:{r:0,c:0}},c="",f="",h=e.match(xo);h?(c=e.slice(0,h.index),f=e.slice(h.index+h[0].length)):c=f=e;var u,d,p,g=c.match(Po);g?Uo(g[0],0,a,r):(g=c.match(No))&&(u=g[0],g[1],o,d=a,p=r,Uo(u.slice(0,u.indexOf(">")),0,d,p));var m,b,v,w=(c.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(0=l.s.c&&l.e.r>=l.s.r&&(o["!ref"]=tr(l)),0l.e.r&&(D.e.r=l.e.r),D.e.rl.e.c&&(D.e.c=l.e.c),D.e.ca-z][^>]*)?\/?>/;function Vo(e,t,r,n){if(void 0===e.v&&"string"!=typeof e.f||"z"===e.t)return"";var a="",i=e.t,s=e.v;if("z"!==e.t)switch(e.t){case"b":a=e.v?"1":"0";break;case"n":a=""+e.v;break;case"e":a=Yr[e.v];break;case"d":a=n&&n.cellDates?be(e.v,-1).toISOString():((e=ve(e)).t="n",""+(e.v=Z(be(e.v)))),void 0===e.z&&(e.z=de._table[14]);break;default:a=e.v}var o=Qe("v",Ie(a)),l={r:t},c=yo(n.cellXfs,e,n);switch(0!==c&&(l.s=c),e.t){case"n":break;case"d":l.t="d";break;case"b":l.t="b";break;case"e":l.t="e";break;case"z":break;default:if(null==e.v){delete e.t;break}if(32767]/,Go=/<\/(?:\w+:)?row>/,jo=/r=["']([^"']*)["']/,Yo=/<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/,Ko=/ref=["']([^"']*)["']/,$o=je("v"),Zo=je("f"),function(e,t,r,n,a,i){for(var s,o,l,c,f,h,u,d,p,g,m=0,b="",v=[],w=[],E=0,C=0,S=0,_="",A=0,y=0,B=0,k=0,T=Array.isArray(i.CellXf),x=[],R=[],I=Array.isArray(t),O=[],D={},F=!1,P=!!r.sheetStubs,N=e.split(Go),L=0,M=N.length;L!=M;++L){var U=(b=N[L].trim()).length;if(0!==U){var z=0;e:for(m=0;m":if("/"!=b[m-1]){++m;break e}if(r&&r.cellStyles){if(A=null!=(o=Se(b.slice(z,m),!0)).r?parseInt(o.r,10):A+1,y=-1,r.sheetRows&&r.sheetRowsA-1&&(n.s.r=A-1),n.e.r":"")+b,null!=w&&2===w.length){for(E=0,_=w[1],C=0;C!=_.length&&!((S=_.charCodeAt(C)-64)<1||26]*\/>/))&&R[(c=Se(w[0])).si]&&(s.f=(h=R[c.si][1],u=R[c.si][2],d=o.r,p=er(u).s,g=Jt(d),_s(h,{r:g.r-p.r,c:g.c-p.c})));var V=Jt(o.r);for(C=0;C=x[C][0].s.r&&V.r<=x[C][0].e.r&&V.c>=x[C][0].s.c&&V.c<=x[C][0].e.c&&(s.F=x[C][1])}if(null==o.t&&void 0===s.v)if(s.f||s.F)s.v=0,s.t="n";else{if(!P)continue;s.t="z"}else s.t=o.t||"n";switch(n.s.c>y&&(n.s.c=y),n.e.c"],a=0;a!=t.length;++a)(r=t[a])&&(n[n.length]=tt("col",null,_o(a,r)));return n[n.length]="
",n.join("")}(0,l["!cols"])),i[a=i.length]="",l["!links"]=[],null!=l["!ref"]&&0<(o=function(e,t,r,n){var a,i,s=[],o=[],l=rr(e["!ref"]),c="",f="",h=[],u=0,d=0,p=e["!rows"],g=Array.isArray(e),m={r:f},b=-1;for(d=l.s.c;d<=l.e.c;++d)h[d]=qt(d);for(u=l.s.r;u<=l.e.r;++u){for(o=[],f=$t(u),d=l.s.c;d<=l.e.c;++d){a=h[d]+f;var v=g?(e[u]||[])[d]:e[a];void 0!==v&&null!=(c=Vo(v,a,e,t))&&o.push(c)}(0a+1&&(i[i.length]="",i[a]=i[a].replace("/>",">")),l["!protect"]&&(i[i.length]=(d=l["!protect"],p={sheet:1},zo.forEach(function(e){null!=d[e]&&d[e]&&(p[e]="1")}),Ho.forEach(function(e){null==d[e]||d[e]||(p[e]="0")}),d.password&&(p.password=li(d.password).toString(16).toUpperCase()),tt("sheetProtection",null,p))),null!=l["!autofilter"]&&(i[i.length]=function(e,t,r,n){var a="string"==typeof e.ref?e.ref:tr(e.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var i=r.Workbook.Names,s=er(a);s.s.r==s.e.r&&(s.e.r=er(t["!ref"]).e.r,a=tr(s));for(var o=0;o',r=0;r!=e.length;++r)t+='';return t+""}(l["!merges"]));var m,b,v=-1,w=-1;return 0",l["!links"].forEach(function(e){e[1].Target&&(m={ref:e[0]},"#"!=e[1].Target.charAt(0)&&(w=on(n,-1,Ie(e[1].Target).replace(/#.*$/,""),en.HLINK),m["r:id"]="rId"+w),-1<(v=e[1].Target.indexOf("#"))&&(m.location=Ie(e[1].Target.slice(v+1))),e[1].Tooltip&&(m.tooltip=Ie(e[1].Tooltip)),i[i.length]=tt("hyperlink",null,m))}),i[i.length]=""),delete l["!links"],null!=l["!margins"]&&(i[i.length]=(Ao(b=l["!margins"]),tt("pageMargins",null,b))),t&&!t.ignoreEC&&null!=t.ignoreEC||(i[i.length]=Qe("ignoredErrors",tt("ignoredError",null,{numberStoredAsText:1,sqref:c}))),0",i[1]=i[1].replace("/>",">")),i.join("")}function el(e,t,r,n){var a=function(e,t,r){var n=zt(145),a=(r["!rows"]||[])[e]||{};n.write_shift(4,e),n.write_shift(4,0);var i=320;a.hpx?i=20*Ri(a.hpx):a.hpt&&(i=20*a.hpt),n.write_shift(2,i),n.write_shift(1,0);var s=0;a.level&&(s|=a.level),a.hidden&&(s|=16),(a.hpx||a.hpt)&&(s|=32),n.write_shift(1,s),n.write_shift(1,0);var o=0,l=n.l;n.l+=4;for(var c={r:e,c:0},f=0;f<16;++f)if(!(t.s.c>f+1<<10||t.e.cn.l?n.slice(0,n.l):n}(n,r,t);(17L.l?L.slice(0,L.l):L)):Vt(e,"BrtCellSt",(O=t,D=j,null==F&&(F=zt(12+4*O.v.length)),gr(D,F),fr(O.v,F),F.length>F.l?F.slice(0,F.l):F))),!0;case"n":return t.v==(0|t.v)&&-1e3[\s\S]*?<\/c:numCache>/gm)||[]).forEach(function(e){var r=function(e){var t,r=[],n=e.match(/^/);(e.match(/(.*?)<\/c:pt>/gm)||[]).forEach(function(e){var t=e.match(/(.*)<\/c:v><\/c:pt>/);t&&(r[+t[1]]=n?+t[2]:t[2])});var a=Te((e.match(/([\s\S]*?)<\/c:formatCode>/)||["","General"])[1]);return(e.match(/(.*?)<\/c:f>/gm)||[]).forEach(function(e){t=e.replace(/<.*?>/g,"")}),[r,a,t]}(e);f.s.r=f.s.c=0,f.e.c=o,c=qt(o),r[0].forEach(function(e,t){s[c+$t(t)]={t:"n",v:e,z:r[1]},l=t}),f.e.rn.l?n.slice(0,n.l):n)),Vt(e,"BrtEndBookViews"))}}function Rl(e,t){var r=Wt();return Vt(r,"BrtBeginBook"),Vt(r,"BrtFileVersion",function(e,t){t||(t=zt(127));for(var r=0;4!=r;++r)t.write_shift(4,0);return fr("SheetJS",t),fr(n.version,t),fr(n.version,t),fr("7262",t),t.length>t.l?t.slice(0,t.l):t}()),Vt(r,"BrtWbProp",function(e,t){t||(t=zt(72));var r=0;return e&&e.filterPrivacy&&(r|=8),t.write_shift(4,r),t.write_shift(4,0),wr(e&&e.CodeName||"ThisWorkbook",t),t.slice(0,t.l)}(e.Workbook&&e.Workbook.WBProps||null)),xl(r,e),function(e,t){Vt(e,"BrtBeginBundleShs");for(var r=0;r!=t.SheetNames.length;++r){var n={Hidden:t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[r]&&t.Workbook.Sheets[r].Hidden||0,iTabID:r+1,strRelID:"rId"+(r+1),name:t.SheetNames[r]};Vt(e,"BrtBundleSh",(a=n,(i=void 0)||(i=zt(127)),i.write_shift(4,a.Hidden),i.write_shift(4,a.iTabID),Ar(a.strRelID,i),fr(a.name.slice(0,31),i),i.length>i.l?i.slice(0,i.l):i))}var a,i;Vt(e,"BrtEndBundleShs")}(r,e),Vt(r,"BrtEndBook"),r.end()}function Il(e,t,r){return".bin"===t.slice(-4)?function(e,n){var a={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""},i=[],s=!1;n||(n={}),n.biff=12;var o=[],l=[[]];return l.SheetNames=[],l.XTI=[],dc[16]={n:"BrtFRTArchID$",f:Tl},Ht(e,function(e,t,r){switch(r){case 156:l.SheetNames.push(e.name),a.Sheets.push(e);break;case 153:a.WBProps=e;break;case 39:null!=e.Sheet&&(n.SID=e.Sheet),e.Ref=ao(e.Ptg,0,null,l,n),delete n.SID,delete e.Ptg,o.push(e);break;case 1036:break;case 357:case 358:case 355:case 667:l[0].length?l.push([r,e]):l[0]=[r,e],l[l.length-1].XTI=[];break;case 362:0===l.length&&(l[0]=[],l[0].XTI=[]),l[l.length-1].XTI=l[l.length-1].XTI.concat(e),l.XTI=l.XTI.concat(e);break;case 361:break;case 2071:case 158:case 143:case 664:case 353:break;case 3072:case 3073:case 534:case 677:case 157:case 610:case 2050:case 155:case 548:case 676:case 128:case 665:case 2128:case 2125:case 549:case 2053:case 596:case 2076:case 2075:case 2082:case 397:case 154:case 1117:case 553:case 2091:break;case 35:i.push(t),s=!0;break;case 36:i.pop(),s=!1;break;case 37:i.push(t),s=!0;break;case 38:i.pop(),s=!1;break;case 16:break;default:if(0<(t||"").indexOf("Begin"));else if(0<(t||"").indexOf("End"));else if(!s||n.WTF&&"BrtACBegin"!=i[i.length-1]&&"BrtFRTBegin"!=i[i.length-1])throw new Error("Unexpected record "+r+" "+t)}},n),Sl(a),a.Names=o,a.supbooks=l,a}(e,r):function(n,a){if(!n)throw new Error("Could not find file");var i={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},Names:[],xmlns:""},s=!1,o="xmlns",l={},c=0;if(n.replace(we,function(e,t){var r=Se(e);switch(_e(r[0])){case"":break;case"":case"":case"":break;case"":ml.forEach(function(e){if(null!=r[e[0]])switch(e[2]){case"bool":i.WBProps[e[0]]=Le(r[e[0]]);break;case"int":i.WBProps[e[0]]=parseInt(r[e[0]],10);break;default:i.WBProps[e[0]]=r[e[0]]}}),r.codeName&&(i.WBProps.CodeName=Me(r.codeName));break;case"":case"":break;case"":case"":break;case"":delete r[0],i.WBView.push(r);break;case"":break;case"":case"":break;case"":break;case"":case"":case"":case"":break;case"":case"":s=!1;break;case"":l.Ref=Te(Me(n.slice(c,t))),i.Names.push(l);break;case"":break;case"":delete r[0],i.CalcPr=r;break;case"":case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":break;case"":case"":case"":case"":case"":break;case"":s=!1;break;case"":s=!0;break;case"":s=!1;break;case"=n[0].s.r&&d.r<=n[0].e.r&&b>=n[0].s.c&&b<=n[0].e.c&&(p.F=tr(n[0]),x=!0)}!x&&3d.r&&(_.s.r=d.r),_.s.c>b&&(_.s.c=b),_.e.rd.r&&(_.s.r=d.r),_.s.c>b&&(_.s.c=b),_.e.r=e.s;)D[e.e--]={width:e.w/256,hidden:!!(1&e.flags),level:e.level},P||(P=!0,ki(e.w/256)),Ti(D[e.e+1]);break;case 161:S["!autofilter"]={ref:tr(e)};break;case 476:S["!margins"]=e;break;case 147:l.Sheets[s]||(l.Sheets[s]={}),e.name&&(l.Sheets[s].CodeName=e.name),(e.above||e.left)&&(S["!outline"]={above:e.above,left:e.left});break;case 137:l.Views||(l.Views=[{}]),l.Views[0]||(l.Views[0]={}),e.RTL&&(l.Views[0].RTL=!0);break;case 485:break;case 64:case 1053:case 151:break;case 152:case 175:case 644:case 625:case 562:case 396:case 1112:case 1146:case 471:case 1050:case 649:case 1105:case 49:case 589:case 607:case 564:case 1055:case 168:case 174:case 1180:case 499:case 507:case 550:case 171:case 167:case 1177:case 169:case 1181:case 551:case 552:case 661:case 639:case 478:case 537:case 477:case 536:case 1103:case 680:case 1104:case 1024:case 663:case 535:case 678:case 504:case 1043:case 428:case 170:case 3072:case 50:case 2070:case 1045:break;case 35:y=!0;break;case 36:y=!1;break;case 37:A.push(t),y=!0;break;case 38:A.pop(),y=!1;break;default:if(0<(t||"").indexOf("Begin"));else if(0<(t||"").indexOf("End"));else if(!y||h.WTF)throw new Error("Unexpected record "+r+" "+t)}},h),delete h.supbooks,delete h["!row"],!S["!ref"]&&(_.s.r<2e6||u&&(0_.e.r&&(n.e.r=_.e.r),n.e.r_.e.c&&(n.e.c=_.e.c),n.e.c/))return[];var l=[],c=[],t=e.match(/<(?:\w+:)?authors>([\s\S]*)<\/(?:\w+:)?authors>/);t&&t[1]&&t[1].split(/<\/\w*:?author>/).forEach(function(e){if(""!==e&&""!==e.trim()){var t=e.match(/<(?:\w+:)?author[^>]*>(.*)/);t&&l.push(t[1])}});var r=e.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/);return r&&r[1]&&r[1].split(/<\/\w*:?comment>/).forEach(function(e){if(""!==e&&""!==e.trim()){var t=e.match(/<(?:\w+:)?comment[^>]*>/);if(t){var r=Se(t[0]),n={author:r.authorId&&l[r.authorId]||"sheetjsghost",ref:r.ref,guid:r.guid},a=Jt(r.ref);if(!(o.sheetRows&&o.sheetRows<=a.r)){var i=e.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/),s=!!i&&!!i[1]&&Ka(i[1])||{r:"",t:"",h:""};n.r=s.r,""==s.r&&(s.t=s.h=""),n.t=(s.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n"),o.cellHTML&&(n.h=s.h),c.push(n)}}}}),c}(e,r);var n,a,i,s,o}function Ll(e,t,r){return".bin"===t.slice(-4)?(n=[],Ht(e,function(e,t,r){switch(r){case 63:n.push(e);break;default:if(0<(t||"").indexOf("Begin"));else if(!(0<(t||"").indexOf("End")))throw new Error("Unexpected record "+r+" "+t)}}),n):function(e){var r=[];if(!e)return r;var n=1;return(e.match(we)||[]).forEach(function(e){var t=Se(e);switch(t[0]){case"":case"":break;case"",i=0;i!=t.SheetNames.length&&a[i]&&a[i].Hidden;++i);i==t.SheetNames.length&&(i=0),r[r.length]='',r[r.length]=""}for(r[r.length]="",i=0;i!=t.SheetNames.length;++i){var s={name:Ie(t.SheetNames[i].slice(0,31))};if(s.sheetId=""+(i+1),s["r:id"]="rId"+(i+1),a[i])switch(a[i].Hidden){case 1:s.state="hidden";break;case 2:s.state="veryHidden"}r[r.length]=tt("sheet",null,s)}return r[r.length]="",e&&(r[r.length]="",t.Workbook&&t.Workbook.Names&&t.Workbook.Names.forEach(function(e){var t={name:e.Name};e.Comment&&(t.comment=e.Comment),null!=e.Sheet&&(t.localSheetId=""+e.Sheet),e.Hidden&&(t.hidden="1"),e.Ref&&(r[r.length]=tt("definedName",Ie(e.Ref),t))}),r[r.length]=""),2",r[1]=r[1].replace("/>",">")),r.join("")})(e,r)}function zl(e,t,r){return(".bin"===t.slice(-4)?ei:function(e,t){if(!t.bookSST)return"";var r=[Y];r[r.length]=tt("sst",null,{xmlns:it.main[0],count:e.Count,uniqueCount:e.Unique});for(var n=0;n!=e.length;++n)if(null!=e[n]){var a=e[n],i="";a.r?i+=a.r:(i+=""),i+="",r[r.length]=i}return 2",r[1]=r[1].replace("/>",">")),r.join("")})(e,r)}function Hl(e,t,r){return(".bin"===t.slice(-4)?bs:function(e){var r=[Y,gs],n=[];return r.push(""),e.forEach(function(e){e[1].forEach(function(e){var t=Ie(e.a);-1"+t+""))})}),r.push(""),r.push(""),e.forEach(function(t){t[1].forEach(function(e){r.push(''),r.push(Qe("t",null==e.t?"":Ie(e.t))),r.push("")})}),r.push(""),2",r[1]=r[1].replace("/>",">")),r.join("")})(e,r)}var Wl=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g,Vl=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;function Xl(e,t){var r=e.split(/\s+/),n=[];if(t||(n[0]=r[0]),1===r.length)return n;var a,i,s,o=e.match(Wl);if(o)for(s=0;s!=o.length;++s)-1===(i=(a=o[s].match(Vl))[1].indexOf(":"))?n[a[1]]=a[2].slice(1,a[2].length-1):n["xmlns:"===a[1].slice(0,6)?"xmlns"+a[1].slice(6):a[1].slice(i+1)]=a[2].slice(1,a[2].length-1);return n}function Gl(e){var t={};if(1===e.split(/\s+/).length)return t;var r,n,a,i=e.match(Wl);if(i)for(a=0;a!=i.length;++a)-1===(n=(r=i[a].match(Vl))[1].indexOf(":"))?t[r[1]]=r[2].slice(1,r[2].length-1):t["xmlns:"===r[1].slice(0,6)?"xmlns"+r[1].slice(6):r[1].slice(n+1)]=r[2].slice(1,r[2].length-1);return t}function jl(e,t,r,n){var a=n;switch((r[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":a=Le(n);break;case"i2":case"int":a=parseInt(n,10);break;case"r4":case"float":a=parseFloat(n);break;case"date":case"dateTime.tz":a=be(n);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw new Error("bad custprop:"+r[0])}e[Te(t)]=a}function Yl(e,t,r){if("z"!==e.t){if(!r||!1!==r.cellText)try{"e"===e.t?e.w=e.w||Yr[e.v]:"General"===t?"n"===e.t?(0|e.v)===e.v?e.w=de._general_int(e.v):e.w=de._general_num(e.v):e.w=de._general(e.v):e.w=(n=t||"General",a=e.v,"General"===(i=pe[n]||Te(n))?de._general(a):de.format(i,a))}catch(e){if(r.WTF)throw e}var n,a,i;try{var s=pe[t]||t||"General";if(r.cellNF&&(e.z=s),r.cellDates&&"n"==e.t&&de.is_date(s)){var o=de.parse_date_code(e.v);o&&(e.t="d",e.v=new Date(o.y,o.m-1,o.d,o.H,o.M,o.S,o.u))}}catch(e){if(r.WTF)throw e}}}function Kl(e,t,r){if(r.cellStyles&&t.Interior){var n=t.Interior;n.Pattern&&(n.patternType=Li[n.Pattern]||n.Pattern)}e[t.ID]=t}function $l(e,t,r,n,a,i,s,o,l,c){var f="General",h=n.StyleID,u={};c=c||{};var d=[],p=0;for(void 0===h&&o&&(h=o.StyleID),void 0===h&&s&&(h=s.StyleID);void 0!==i[h]&&(i[h].nf&&(f=i[h].nf),i[h].Interior&&d.push(i[h].Interior),i[h].Parent);)h=i[h].Parent;switch(r.Type){case"Boolean":n.t="b",n.v=Le(e);break;case"String":n.t="s",n.r=Pe(Te(e)),n.v=-1/g,""):n.r;break;case"DateTime":"Z"!=e.slice(-1)&&(e+="Z"),n.v=(be(e)-new Date(Date.UTC(1899,11,30)))/864e5,n.v!=n.v?n.v=Te(e):n.v<60&&(n.v=n.v-1),f&&"General"!=f||(f="yyyy-mm-dd");case"Number":void 0===n.v&&(n.v=+e),n.t||(n.t="n");break;case"Error":n.t="e",n.v=Kr[e],!1!==c.cellText&&(n.w=e);break;default:""==e&&""==t?n.t="z":(n.t="s",n.v=Pe(t||e))}if(Yl(n,f,c),!1!==c.cellFormula)if(n.Formula){var g=Te(n.Formula);61==g.charCodeAt(0)&&(g=g.slice(1)),n.f=Es(g,a),delete n.Formula,"RC"==n.ArrayRange?n.F=Es("RC:RC",a):n.ArrayRange&&(n.F=Es(n.ArrayRange,a),l.push([rr(n.F),n.F]))}else for(p=0;p=l[p][0].s.r&&a.r<=l[p][0].e.r&&a.c>=l[p][0].s.c&&a.c<=l[p][0].e.c&&(n.F=l[p][1]);c.cellStyles&&(d.forEach(function(e){!u.patternType&&e.patternType&&(u.patternType=e.patternType)}),n.s=u),void 0!==n.StyleID&&(n.ixfe=n.StyleID)}function Zl(e){if(ee&&Buffer.isBuffer(e))return e.toString("utf8");if("string"==typeof e)return e;if("undefined"!=typeof Uint8Array&&e instanceof Uint8Array)return Me(k(b(e)));throw new Error("Bad input format: expected Buffer or string")}var ql=/<(\/?)([^\s?>:\/]+)(?:[\s?:\/][^>]*)?>/gm;function Jl(e,t){var r=t||{};ce(de);var n=ie(Zl(e));"binary"!=r.type&&"array"!=r.type&&"base64"!=r.type||(n="undefined"!=typeof cptable?cptable.utils.decode(65001,ae(n)):Me(n));var a,i=n.slice(0,1024).toLowerCase(),s=!1;if((1023&(i=i.replace(/".*?"/g,"")).indexOf(">"))>Math.min(1023&i.indexOf(","),1023&i.indexOf(";"))){var o=ve(r);return o.type="string",Ha.to_workbook(n,o)}if(-1==i.indexOf("'),v=0,w=0,E=0,C={s:{r:2e6,c:2e6},e:{r:0,c:0}},S={},_={},A="",y=0,B=[],k={},T={},x=0,R=[],I=[],O={},D=[],F=!1,P=[],N=[],L={},M=0,U=0,z={Sheets:[],WBProps:{date1904:!1}},H={};ql.lastIndex=0,n=n.replace(//gm,"");for(var W,V,X,G,j="";a=ql.exec(n);)switch(a[3]=(j=a[3]).toLowerCase()){case"data":if("data"==j){if("/"===a[1]){if((l=c.pop())[0]!==a[3])throw new Error("Bad state: "+l.join("|"))}else"/"!==a[0].charAt(a[0].length-2)&&c.push([a[3],!0]);break}if(c[c.length-1][1])break;"/"===a[1]?$l(n.slice(v,a.index),A,b,"comment"==c[c.length-1][0]?O:g,{c:w,r:E},S,D[w],m,P,r):(A="",b=Xl(a[0]),v=a.index+a[0].length);break;case"cell":if("/"===a[1])if(0E)&&void 0!==g.v&&(r.dense?(d[E]||(d[E]=[]),d[E][w]=g):d[qt(w)+$t(E)]=g),g.HRef&&(g.l={Target:Te(g.HRef)},g.HRefScreenTip&&(g.l.Tooltip=g.HRefScreenTip),delete g.HRef,delete g.HRefScreenTip),(g.MergeAcross||g.MergeDown)&&(M=w+(0|parseInt(g.MergeAcross,10)),U=E+(0|parseInt(g.MergeDown,10)),B.push({s:{c:w,r:E},e:{c:M,r:U}})),r.sheetStubs)if(g.MergeAcross||g.MergeDown){for(var Y=w;Y<=M;++Y)for(var K=E;K<=U;++K)(wC.e.c&&(C.e.c=w),"/>"===a[0].slice(-2)&&++w,I=[];break;case"row":"/"===a[1]||"/>"===a[0].slice(-2)?(EC.e.r&&(C.e.r=E),"/>"===a[0].slice(-2)&&(m=Xl(a[0])).Index&&(E=+m.Index-1),w=0,++E):((m=Xl(a[0])).Index&&(E=+m.Index-1),L={},("0"==m.AutoFitHeight||m.Height)&&(L.hpx=parseInt(m.Height,10),L.hpt=Ri(L.hpx),N[E]=L),"1"==m.Hidden&&(L.hidden=!0,N[E]=L));break;case"worksheet":if("/"===a[1]){if((l=c.pop())[0]!==a[3])throw new Error("Bad state: "+l.join("|"));u.push(p),C.s.r<=C.e.r&&C.s.c<=C.e.c&&(d["!ref"]=tr(C),r.sheetRows&&r.sheetRows<=C.e.r&&(d["!fullref"]=d["!ref"],C.e.r=r.sheetRows-1,d["!ref"]=tr(C))),B.length&&(d["!merges"]=B),0"==a[0].slice(-2))break;Xl(a[0]),c.push([a[3],!1]),F=!(D=[])}break;case"style":"/"===a[1]?Kl(S,_,r):_=Xl(a[0]);break;case"numberformat":_.nf=Te(Xl(a[0]).Format||"General"),pe[_.nf]&&(_.nf=pe[_.nf]);for(var $=0;392!=$&&de._table[$]!=_.nf;++$);if(392==$)for($=57;392!=$;++$)if(null==de._table[$]){de.load(_.nf,$);break}break;case"column":if("table"!==c[c.length-1][0])break;if((f=Xl(a[0])).Hidden&&(f.hidden=!0,delete f.Hidden),f.Width&&(f.wpx=parseInt(f.Width,10)),!F&&10"===a[0].slice(-2))break;"/"===a[1]?A+=n.slice(y,a.index):y=a.index+a[0].length;break;case"interior":if(!r.cellStyles)break;_.Interior=Xl(a[0]);break;case"protection":break;case"author":case"title":case"description":case"created":case"keywords":case"subject":case"category":case"company":case"lastauthor":case"lastsaved":case"lastprinted":case"version":case"revision":case"totaltime":case"hyperlinkbase":case"manager":case"contentstatus":case"identifier":case"language":case"appname":if("/>"===a[0].slice(-2))break;"/"===a[1]?(V=k,X=j,G=n.slice(x,a.index),V[X=An[X]||X]=G):x=a.index+a[0].length;break;case"paragraphs":break;case"styles":case"workbook":if("/"===a[1]){if((l=c.pop())[0]!==a[3])throw new Error("Bad state: "+l.join("|"))}else c.push([a[3],!1]);break;case"comment":if("/"===a[1]){if((l=c.pop())[0]!==a[3])throw new Error("Bad state: "+l.join("|"));(W=O).t=W.v||"",W.t=W.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),W.v=W.w=W.ixfe=void 0,I.push(O)}else c.push([a[3],!1]),O={a:(l=Xl(a[0])).Author};break;case"autofilter":if("/"===a[1]){if((l=c.pop())[0]!==a[3])throw new Error("Bad state: "+l.join("|"))}else if("/"!==a[0].charAt(a[0].length-2)){var ee=Xl(a[0]);d["!autofilter"]={ref:Es(ee.Range).replace(/\$/g,"")},c.push([a[3],!0])}break;case"name":break;case"datavalidation":if("/"===a[1]){if((l=c.pop())[0]!==a[3])throw new Error("Bad state: "+l.join("|"))}else"/"!==a[0].charAt(a[0].length-2)&&c.push([a[3],!0]);break;case"pixelsperinch":break;case"componentoptions":case"documentproperties":case"customdocumentproperties":case"officedocumentsettings":case"pivottable":case"pivotcache":case"names":case"mapinfo":case"pagebreaks":case"querytable":case"sorting":case"schema":case"conditionalformatting":case"smarttagtype":case"smarttags":case"excelworkbook":case"workbookoptions":case"worksheetoptions":if("/"===a[1]){if((l=c.pop())[0]!==a[3])throw new Error("Bad state: "+l.join("|"))}else"/"!==a[0].charAt(a[0].length-2)&&c.push([a[3],!0]);break;case"null":break;default:if(0==c.length&&"document"==a[3])return Fc(n,r);if(0==c.length&&"uof"==a[3])return Fc(n,r);var te=!0;switch(c[c.length-1][0]){case"officedocumentsettings":switch(a[3]){case"allowpng":case"removepersonalinformation":case"downloadcomponents":case"locationofcomponents":case"colors":case"color":case"index":case"rgb":case"targetscreensize":case"readonlyrecommended":break;default:te=!1}break;case"componentoptions":switch(a[3]){case"toolbar":case"hideofficelogo":case"spreadsheetautofit":case"label":case"caption":case"maxheight":case"maxwidth":case"nextsheetnumber":break;default:te=!1}break;case"excelworkbook":switch(a[3]){case"date1904":z.WBProps.date1904=!0;break;case"windowheight":case"windowwidth":case"windowtopx":case"windowtopy":case"tabratio":case"protectstructure":case"protectwindow":case"protectwindows":case"activesheet":case"displayinknotes":case"firstvisiblesheet":case"supbook":case"sheetname":case"sheetindex":case"sheetindexfirst":case"sheetindexlast":case"dll":case"acceptlabelsinformulas":case"donotsavelinkvalues":case"iteration":case"maxiterations":case"maxchange":case"path":case"xct":case"count":case"selectedsheets":case"calculation":case"uncalced":case"startupprompt":case"crn":case"externname":case"formula":case"colfirst":case"collast":case"wantadvise":case"boolean":case"error":case"text":case"ole":case"noautorecover":case"publishobjects":case"donotcalculatebeforesave":case"number":case"refmoder1c1":case"embedsavesmarttags":break;default:te=!1}break;case"workbookoptions":switch(a[3]){case"owcversion":case"height":case"width":break;default:te=!1}break;case"worksheetoptions":switch(a[3]){case"visible":if("/>"===a[0].slice(-2));else if("/"===a[1])switch(n.slice(x,a.index)){case"SheetHidden":H.Hidden=1;break;case"SheetVeryHidden":H.Hidden=2}else x=a.index+a[0].length;break;case"header":d["!margins"]||Ao(d["!margins"]={},"xlml"),d["!margins"].header=Se(a[0]).Margin;break;case"footer":d["!margins"]||Ao(d["!margins"]={},"xlml"),d["!margins"].footer=Se(a[0]).Margin;break;case"pagemargins":var re=Se(a[0]);d["!margins"]||Ao(d["!margins"]={},"xlml"),re.Top&&(d["!margins"].top=re.Top),re.Left&&(d["!margins"].left=re.Left),re.Right&&(d["!margins"].right=re.Right),re.Bottom&&(d["!margins"].bottom=re.Bottom);break;case"displayrighttoleft":z.Views||(z.Views=[]),z.Views[0]||(z.Views[0]={}),z.Views[0].RTL=!0;break;case"freezepanes":case"frozennosplit":break;case"splithorizontal":case"splitvertical":case"donotdisplaygridlines":case"activerow":case"activecol":case"toprowbottompane":case"leftcolumnrightpane":case"unsynced":case"print":case"printerrors":case"panes":case"scale":case"pane":case"number":case"layout":case"pagesetup":case"selected":case"protectobjects":case"enableselection":case"protectscenarios":case"validprinterinfo":case"horizontalresolution":case"verticalresolution":case"numberofcopies":case"activepane":case"toprowvisible":case"leftcolumnvisible":case"fittopage":case"rangeselection":case"papersizeindex":case"pagelayoutzoom":case"pagebreakzoom":case"filteron":case"fitwidth":case"fitheight":case"commentslayout":case"zoom":case"lefttoright":case"gridlines":case"allowsort":case"allowfilter":case"allowinsertrows":case"allowdeleterows":case"allowinsertcols":case"allowdeletecols":case"allowinserthyperlinks":case"allowformatcells":case"allowsizecols":case"allowsizerows":break;case"nosummaryrowsbelowdetail":d["!outline"]||(d["!outline"]={}),d["!outline"].above=!0;break;case"tabcolorindex":case"donotdisplayheadings":case"showpagelayoutzoom":break;case"nosummarycolumnsrightdetail":d["!outline"]||(d["!outline"]={}),d["!outline"].left=!0;break;case"blackandwhite":case"donotdisplayzeros":case"displaypagebreak":case"rowcolheadings":case"donotdisplayoutline":case"noorientation":case"allowusepivottables":case"zeroheight":case"viewablerange":case"selection":case"protectcontents":break;default:te=!1}break;case"pivottable":case"pivotcache":switch(a[3]){case"immediateitemsondrop":case"showpagemultipleitemlabel":case"compactrowindent":case"location":case"pivotfield":case"orientation":case"layoutform":case"layoutsubtotallocation":case"layoutcompactrow":case"position":case"pivotitem":case"datatype":case"datafield":case"sourcename":case"parentfield":case"ptlineitems":case"ptlineitem":case"countofsameitems":case"item":case"itemtype":case"ptsource":case"cacheindex":case"consolidationreference":case"filename":case"reference":case"nocolumngrand":case"norowgrand":case"blanklineafteritems":case"hidden":case"subtotal":case"basefield":case"mapchilditems":case"function":case"refreshonfileopen":case"printsettitles":case"mergelabels":case"defaultversion":case"refreshname":case"refreshdate":case"refreshdatecopy":case"versionlastrefresh":case"versionlastupdate":case"versionupdateablemin":case"versionrefreshablemin":case"calculation":break;default:te=!1}break;case"pagebreaks":switch(a[3]){case"colbreaks":case"colbreak":case"rowbreaks":case"rowbreak":case"colstart":case"colend":case"rowend":break;default:te=!1}break;case"autofilter":switch(a[3]){case"autofiltercolumn":case"autofiltercondition":case"autofilterand":case"autofilteror":break;default:te=!1}break;case"querytable":switch(a[3]){case"id":case"autoformatfont":case"autoformatpattern":case"querysource":case"querytype":case"enableredirections":case"refreshedinxl9":case"urlstring":case"htmltables":case"connection":case"commandtext":case"refreshinfo":case"notitles":case"nextid":case"columninfo":case"overwritecells":case"donotpromptforfile":case"textwizardsettings":case"source":case"number":case"decimal":case"thousandseparator":case"trailingminusnumbers":case"formatsettings":case"fieldtype":case"delimiters":case"tab":case"comma":case"autoformatname":case"versionlastedit":case"versionlastrefresh":break;default:te=!1}break;case"datavalidation":switch(a[3]){case"range":case"type":case"min":case"max":case"sort":case"descending":case"order":case"casesensitive":case"value":case"errorstyle":case"errormessage":case"errortitle":case"inputmessage":case"inputtitle":case"combohide":case"inputhide":case"condition":case"qualifier":case"useblank":case"value1":case"value2":case"format":case"cellrangelist":break;default:te=!1}break;case"sorting":case"conditionalformatting":switch(a[3]){case"range":case"type":case"min":case"max":case"sort":case"descending":case"order":case"casesensitive":case"value":case"errorstyle":case"errormessage":case"errortitle":case"cellrangelist":case"inputmessage":case"inputtitle":case"combohide":case"inputhide":case"condition":case"qualifier":case"useblank":case"value1":case"value2":case"format":break;default:te=!1}break;case"mapinfo":case"schema":case"data":switch(a[3]){case"map":case"entry":case"range":case"xpath":case"field":case"xsdtype":case"filteron":case"aggregate":case"elementtype":case"attributetype":break;case"schema":case"element":case"complextype":case"datatype":case"all":case"attribute":case"extends":case"row":break;default:te=!1}break;case"smarttags":break;default:te=!1}if(te)break;if(a[3].match(/!\[CDATA/))break;if(!c[c.length-1][1])throw"Unrecognized tag: "+a[3]+"|"+c.join("|");if("customdocumentproperties"===c[c.length-1][0]){if("/>"===a[0].slice(-2))break;"/"===a[1]?jl(T,j,R,n.slice(x,a.index)):x=(R=a).index+a[0].length;break}if(r.WTF)throw"Unrecognized tag: "+a[3]+"|"+c.join("|")}var ne={};return r.bookSheets||r.bookProps||(ne.Sheets=h),ne.SheetNames=u,ne.Workbook=z,ne.SSF=de.get_table(),ne.Props=k,ne.Custprops=T,ne}function Ql(e,t){switch(Xc(t=t||{}),t.type||"base64"){case"base64":return Jl(Q.decode(e),t);case"binary":case"buffer":case"file":return Jl(e,t);case"array":return Jl(k(e),t)}}function ec(e,t){var r,n,a,i,s,o,l,c,f=[];return e.Props&&f.push((r=e.Props,n=t,a=[],me(_n).map(function(e){for(var t=0;t'+c.join("")+"")),f.join("")}function tc(e){return tt("NamedRange",null,{"ss:Name":e.Name,"ss:RefersTo":"="+Ss(e.Ref,{r:0,c:0})})}function rc(e,t,r,n,a,i,s){if(!e||null==e.v&&null==e.f)return"";var o={};if(e.f&&(o["ss:Formula"]="="+Ie(Ss(e.f,s))),e.F&&e.F.slice(0,t.length)==t){var l=Jt(e.F.slice(t.length+1));o["ss:ArrayRange"]="RC:R"+(l.r==s.r?"":"["+(l.r-s.r)+"]")+"C"+(l.c==s.c?"":"["+(l.c-s.c)+"]")}if(e.l&&e.l.Target&&(o["ss:HRef"]=Ie(e.l.Target),e.l.Tooltip&&(o["x:HRefScreenTip"]=Ie(e.l.Tooltip))),r["!merges"])for(var c=r["!merges"],f=0;f!=c.length;++f)c[f].s.c==s.c&&c[f].s.r==s.r&&(c[f].e.c>c[f].s.c&&(o["ss:MergeAcross"]=c[f].e.c-c[f].s.c),c[f].e.r>c[f].s.r&&(o["ss:MergeDown"]=c[f].e.r-c[f].s.r));var h="",u="";switch(e.t){case"z":if(!n.sheetStubs)return"";break;case"n":h="Number",u=String(e.v);break;case"b":h="Boolean",u=e.v?"1":"0";break;case"e":h="Error",u=Yr[e.v];break;case"d":h="DateTime",u=new Date(e.v).toISOString(),null==e.z&&(e.z=e.z||de._table[14]);break;case"s":h="String",u=((e.v||"")+"").replace(xe,function(e){return ke[e]}).replace(De,function(e){return"&#x"+e.charCodeAt(0).toString(16).toUpperCase()+";"})}var d=yo(n.cellXfs,e,n);o["ss:StyleID"]="s"+(21+d),o["ss:Index"]=s.c+1;var p=null!=e.v?u:"",g="z"==e.t?"":''+p+"";return 0<(e.c||[]).length&&(g+=e.c.map(function(e){return tt("Comment",tt("ss:Data",Ne(e.t||""),{xmlns:"http://www.w3.org/TR/REC-html40"}),{"ss:Author":e.a})}).join("")),tt("Cell",g,o)}function nc(e,t,r){var n=[],a=r.SheetNames[e],i=r.Sheets[a],s=i?function(e,t,r,n){if(!e)return"";if(!((n||{}).Workbook||{}).Names)return"";for(var a=n.Workbook.Names,i=[],s=0;s"+s+""),0<(s=i?function(e,t,r,n){if(!e["!ref"])return"";var a=rr(e["!ref"]),i=e["!merges"]||[],s=0,o=[];e["!cols"]&&e["!cols"].forEach(function(e,t){Ti(e);var r=!!e.width,n=_o(t,e),a={"ss:Index":t+1};r&&(a["ss:Width"]=_i(n.width)),e.hidden&&(a["ss:Hidden"]="1"),o.push(tt("Column",null,a))});for(var l,c,f,h=Array.isArray(e),u=a.s.r;u<=a.e.r;++u){for(var d=[(l=u,c=(e["!rows"]||[])[u],f=void 0,f='")],p=a.s.c;p<=a.e.c;++p){var g=!1;for(s=0;s!=i.length;++s)if(!(i[s].s.c>p||i[s].s.r>u||i[s].e.c"),2"+s+""),n.push(function(t,e,r,n){if(!t)return"";var a=[];if(t["!margins"]&&(a.push(""),t["!margins"].header&&a.push(tt("Header",null,{"x:Margin":t["!margins"].header})),t["!margins"].footer&&a.push(tt("Footer",null,{"x:Margin":t["!margins"].footer})),a.push(tt("PageMargins",null,{"x:Bottom":t["!margins"].bottom||"0.75","x:Left":t["!margins"].left||"0.7","x:Right":t["!margins"].right||"0.7","x:Top":t["!margins"].top||"0.75"})),a.push("")),n&&n.Workbook&&n.Workbook.Sheets&&n.Workbook.Sheets[r])if(n.Workbook.Sheets[r].Hidden)a.push(tt("Visible",1==n.Workbook.Sheets[r].Hidden?"SheetHidden":"SheetVeryHidden",{}));else{for(var i=0;i")}return((((n||{}).Workbook||{}).Views||[])[0]||{}).RTL&&a.push(""),t["!protect"]&&(a.push(Qe("ProtectContents","True")),t["!protect"].objects&&a.push(Qe("ProtectObjects","True")),t["!protect"].scenarios&&a.push(Qe("ProtectScenarios","True")),null==t["!protect"].selectLockedCells||t["!protect"].selectLockedCells?null==t["!protect"].selectUnlockedCells||t["!protect"].selectUnlockedCells||a.push(Qe("EnableSelection","UnlockedCells")):a.push(Qe("EnableSelection","NoSelection")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(e){t["!protect"][e[0]]&&a.push("<"+e[1]+"/>")})),0==a.length?"":tt("WorksheetOptions",a.join(""),{xmlns:st.x})}(i,0,e,r)),n.join("")}function ac(e,t){t||(t={}),e.SSF||(e.SSF=de.get_table()),e.SSF&&(ce(de),de.load_table(e.SSF),t.revssf=y(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF,t.cellXfs=[],yo(t.cellXfs,{},{revssf:{General:0}}));var a,r=[];r.push(ec(e,t)),r.push(""),r.push(""),r.push("");for(var n=0;n'],t.cellXfs.forEach(function(e,t){var r=[];r.push(tt("NumberFormat",null,{"ss:Format":Ie(de._table[e.numFmtId])}));var n={"ss:ID":"s"+(21+t)};a.push(tt("Style",r.join(""),n))}),tt("Styles",a.join(""))),r[3]=function(e){if(!((e||{}).Workbook||{}).Names)return"";for(var t=e.Workbook.Names,r=[],n=0;n=r.sheetRows)){var n,a,i,s;if(r.cellStyles&&t.XF&&t.XF.data&&(a=r,(s=(n=t).XF.data)&&s.patternType&&a&&a.cellStyles&&(n.s={},n.s.patternType=s.patternType,(i=bi(B(s.icvFore)))&&(n.s.fgColor={rgb:i}),(i=bi(B(s.icvBack)))&&(n.s.bgColor={rgb:i}))),delete t.ixfe,delete t.XF,w=Qt(l=e),p&&p.s&&p.e||(p={s:{r:0,c:0},e:{r:0,c:0}}),e.rp.e.r&&(p.e.r=e.r+1),e.c+1>p.e.c&&(p.e.c=e.c+1),r.cellFormula&&t.f)for(var o=0;oe.c||C[o][0].s.r>e.r||C[o][0].e.c>8)!==V)throw new Error("rt mismatch: "+j+"!="+V);12==G.r&&(e.l+=10,X-=10)}var Y={};Y="EOF"===G.n?G.f(e,X,T):sc(G,e,X,T);var K=G.n;if(0==L&&"BOF"!=K)continue;switch(K){case"Date1904":r.opts.Date1904=A.WBProps.date1904=Y;break;case"WriteProtect":r.opts.WriteProtect=!0;break;case"FilePass":if(T.enc||(e.l=0),T.enc=Y,!t.password)throw new Error("File is password-protected");if(null==Y.valid)throw new Error("Encryption scheme unsupported");if(!Y.valid)throw new Error("Password is incorrect");break;case"WriteAccess":T.lastuser=Y;break;case"FileSharing":break;case"CodePage":var $=Number(Y);switch($){case 21010:$=1200;break;case 32768:$=1e4;break;case 32769:$=1252}he(T.codepage=$),H=!0;break;case"RRTabId":T.rrtabid=Y;break;case"WinProtect":T.winlocked=Y;break;case"Template":case"BookBool":case"UsesELFs":case"MTRSettings":break;case"RefreshAll":case"CalcCount":case"CalcDelta":case"CalcIter":case"CalcMode":case"CalcPrecision":case"CalcSaveRecalc":r.opts[K]=Y;break;case"CalcRefMode":T.CalcRefMode=Y;break;case"Uncalced":break;case"ForceFullCalculation":r.opts.FullCalc=Y;break;case"WsBool":Y.fDialog&&(u["!type"]="dialog"),Y.fBelow||((u["!outline"]||(u["!outline"]={})).above=!0),Y.fRight||((u["!outline"]||(u["!outline"]={})).left=!0);break;case"XF":S.push(Y);break;case"ExtSST":case"BookExt":case"RichTextStream":case"BkHim":break;case"SupBook":F.push([Y]),F[F.length-1].XTI=[];break;case"ExternName":F[F.length-1].push(Y);break;case"Index":break;case"Lbl":P={Name:Y.Name,Ref:ao(Y.rgce,0,null,F,T)},0>8&63]),oc(c,t,r.opts.Date1904),k({c:Y.c,r:Y.r},c,t);break;case"BoolErr":c={ixfe:Y.ixfe,XF:S[Y.ixfe],v:Y.val,t:Y.t},0>8&63]),oc(c,t,r.opts.Date1904),k({c:Y.c,r:Y.r},c,t);break;case"RK":c={ixfe:Y.ixfe,XF:S[Y.ixfe],v:Y.rknum,t:"n"},0>8&63]),oc(c,t,r.opts.Date1904),k({c:Y.c,r:Y.r},c,t);break;case"MulRk":for(var J=Y.c;J<=Y.C;++J){var Q=Y.rkrec[J-Y.c][0];c={ixfe:Q,XF:S[Q],v:Y.rkrec[J-Y.c][1],t:"n"},0>8&63]),oc(c,t,r.opts.Date1904),k({c:J,r:Y.r},c,t)}break;case"Formula":if("String"==Y.val){g=Y;break}if((c=lc(Y.val,Y.cell.ixfe,Y.tt)).XF=S[c.ixfe],t.cellFormula){var ee=Y.formula;if(ee&&ee[0]&&ee[0][0]&&"PtgExp"==ee[0][0][0]){var te=ee[0][0][1][0],re=ee[0][0][1][1],ne=Qt({r:te,c:re});E[ne]?c.f=""+ao(Y.formula,0,Y.cell,F,T):c.F=((t.dense?(u[te]||[])[re]:u[ne])||{}).F}else c.f=""+ao(Y.formula,0,Y.cell,F,T)}0>8&63]),oc(c,t,r.opts.Date1904),k(Y.cell,c,t),g=Y;break;case"String":if(!g)throw new Error("String record expects Formula");(c=lc(g.val=Y,g.cell.ixfe,"s")).XF=S[c.ixfe],t.cellFormula&&(c.f=""+ao(g.formula,0,g.cell,F,T)),0>8&63]),oc(c,t,r.opts.Date1904),k(g.cell,c,t),g=null;break;case"Array":C.push(Y);var ae=Qt(Y[0].s);if(a=t.dense?(u[Y[0].s.r]||[])[Y[0].s.c]:u[ae],t.cellFormula&&a){if(!g)break;if(!ae||!a)break;a.f=""+ao(Y[1],0,Y[0],F,T),a.F=tr(Y[0])}break;case"ShrFmla":if(!t.cellFormula)break;if(w){if(!g)break;E[Qt(g.cell)]=Y[0],((a=t.dense?(u[g.cell.r]||[])[g.cell.c]:u[Qt(g.cell)])||{}).f=""+ao(Y[0],0,l,F,T)}break;case"LabelSst":c=lc(m[Y.isst].t,Y.ixfe,"s"),m[Y.isst].h&&(c.h=m[Y.isst].h),c.XF=S[c.ixfe],0>8&63]),oc(c,t,r.opts.Date1904),k({c:Y.c,r:Y.r},c,t);break;case"Blank":t.sheetStubs&&(c={ixfe:Y.ixfe,XF:S[Y.ixfe],t:"z"},0>8&63]),oc(c,t,r.opts.Date1904),k({c:Y.c,r:Y.r},c,t));break;case"MulBlank":if(t.sheetStubs)for(var ie=Y.c;ie<=Y.C;++ie){var se=Y.ixfe[ie-Y.c];c={ixfe:se,XF:S[se],t:"z"},0>8&63]),oc(c,t,r.opts.Date1904),k({c:ie,r:Y.r},c,t)}break;case"RString":case"Label":case"BIFF2STR":(c=lc(Y.val,Y.ixfe,"s")).XF=S[c.ixfe],0>8&63]),oc(c,t,r.opts.Date1904),k({c:Y.c,r:Y.r},c,t);break;case"Dimensions":1===L&&(p=Y);break;case"SST":m=Y;break;case"Format":if(4==T.biff){U[M++]=Y[1];for(var oe=0;oe=Y.s;)I[Y.e--]={width:Y.w/256,level:Y.level||0,hidden:!!(1&Y.flags)},D||(D=!0,ki(Y.w/256)),Ti(I[Y.e+1]);break;case"Row":var fe={};null!=Y.level&&((O[Y.r]=fe).level=Y.level),Y.hidden&&((O[Y.r]=fe).hidden=!0),Y.hpt&&((O[Y.r]=fe).hpt=Y.hpt,fe.hpx=Ii(Y.hpt));break;case"LeftMargin":case"RightMargin":case"TopMargin":case"BottomMargin":u["!margins"]||Ao(u["!margins"]={}),u["!margins"][K.slice(0,-6).toLowerCase()]=Y;break;case"Selection":break;case"Setup":u["!margins"]||Ao(u["!margins"]={}),u["!margins"].header=Y.header,u["!margins"].footer=Y.footer;break;case"Window2":Y.RTL&&(A.Views[0].RTL=!0);break;case"Header":case"Footer":case"HCenter":case"VCenter":case"Pls":case"GCW":case"LHRecord":case"DBCell":case"EntExU2":case"SxView":case"Sxvd":case"SXVI":case"SXVDEx":case"SxIvd":case"SXString":case"Sync":case"Addin":case"SXDI":case"SXLI":case"SXEx":case"QsiSXTag":case"Feat":break;case"FeatHdr":case"FeatHdr11":break;case"Feature11":case"Feature12":case"List12":break;case"Country":f=Y;break;case"RecalcId":case"DxGCol":break;case"Fbi":case"Fbi2":case"GelFrame":case"Font":case"XFCRC":case"Style":case"StyleExt":break;case"Palette":_=Y;break;case"Theme":h=Y;break;case"ScenarioProtect":case"ObjProtect":case"CondFmt12":case"Table":case"TableStyles":case"TableStyle":case"TableStyleElement":case"SXStreamID":case"SXVS":case"DConRef":case"SXAddl":case"DConBin":case"DConName":case"SXPI":case"SxFormat":case"SxSelect":case"SxRule":case"SxFilt":case"SxItm":case"SxDXF":case"ScenMan":case"DCon":case"CellWatch":case"PrintRowCol":case"PrintGrid":case"PrintSize":case"XCT":case"CRN":case"Scl":case"SheetExt":case"SheetExtOptional":case"ObNoMacros":case"ObProj":break;case"CodeName":b?y.CodeName=Y||y.name:A.WBProps.CodeName=Y||"ThisWorkbook";break;case"GUIDTypeLib":case"WOpt":case"PhoneticInfo":case"OleObjectSize":break;case"DXF":case"DXFN":case"DXFN12":case"DXFN12List":case"DXFN12NoCB":break;case"Dv":case"DVal":break;case"BRAI":case"Series":case"SeriesText":case"DConn":case"DbOrParamQry":case"DBQueryExt":case"OleDbConn":case"ExtString":case"IFmtRecord":break;case"CondFmt":case"CF":case"CF12":case"CFEx":case"Excel9File":case"Units":break;case"InterfaceHdr":case"Mms":case"InterfaceEnd":case"DSF":case"BuiltInFnGroupCount":break;case"Window1":case"HideObj":case"GridSet":case"Guts":case"UserBView":case"UserSViewBegin":case"UserSViewEnd":case"Pane":break;default:switch(G.n){case"Dat":case"Begin":case"End":case"StartBlock":case"EndBlock":case"Frame":case"Area":case"Axis":case"AxisLine":case"Tick":break;case"AxesUsed":case"CrtLayout12":case"CrtLayout12A":case"CrtLink":case"CrtLine":case"CrtMlFrt":case"CrtMlFrtContinue":break;case"LineFormat":case"AreaFormat":case"Chart":case"Chart3d":case"Chart3DBarShape":case"ChartFormat":case"ChartFrtInfo":break;case"PlotArea":case"PlotGrowth":break;case"SeriesList":case"SerParent":case"SerAuxTrend":break;case"DataFormat":case"SerToCrt":case"FontX":break;case"CatSerRange":case"AxcExt":case"SerFmt":case"ShtProps":break;case"DefaultText":case"Text":case"CatLab":case"DataLabExtContents":break;case"Legend":case"LegendException":break;case"Pie":case"Scatter":break;case"PieFormat":case"MarkerFormat":break;case"StartObject":case"EndObject":break;case"AlRuns":case"ObjectLink":case"SIIndex":break;case"AttachedLabel":case"YMult":break;case"Line":case"Bar":case"Surf":case"AxisParent":case"Pos":case"ValueRange":case"SXViewEx9":case"SXViewLink":case"PivotChartBits":case"SBaseRef":case"TextPropsStream":case"LnExt":case"MkrExt":case"CrtCoopt":break;case"Qsi":case"Qsif":case"Qsir":case"QsiSXTag":case"TxtQry":case"FilterMode":break;case"AutoFilter":case"AutoFilterInfo":case"AutoFilter12":case"DropDownObjIds":case"Sort":case"SortData":case"ShapePropsStream":break;case"MsoDrawing":case"MsoDrawingGroup":case"MsoDrawingSelection":break;case"WebPub":case"AutoWebPub":break;case"HeaderFooter":case"HFPicture":case"PLV":case"HorizontalPageBreaks":case"VerticalPageBreaks":break;case"Backup":case"CompressPictures":case"Compat12":break;case"Continue":case"ContinueFrt12":break;case"FrtFontList":case"FrtWrapper":break;default:switch(G.n){case"TabIdConf":case"Radar":case"RadarArea":case"DropBar":case"Intl":case"CoordList":case"SerAuxErrBar":break;case"BIFF2FONTCLR":case"BIFF2FMTCNT":case"BIFF2FONTXTRA":break;case"BIFF2XF":case"BIFF3XF":case"BIFF4XF":case"BIFF2XFINDEX":break;case"BIFF4FMTCNT":case"BIFF2ROW":case"BIFF2WINDOW2":break;case"SCENARIO":case"DConBin":case"PicF":case"DataLabExt":case"Lel":case"BopPop":case"BopPopCustom":case"RealTimeData":case"Name":break;case"LHNGraph":case"FnGroupName":case"AddMenu":case"LPr":break;case"ListObj":case"ListField":case"RRSort":case"BigName":break;case"ToolbarHdr":case"ToolbarEnd":case"DDEObjName":case"FRTArchId$":break;default:if(t.WTF)throw"Unrecognized Record "+G.n}}}}}else e.l+=X}return r.SheetNames=me(d).sort(function(e,t){return Number(e)-Number(t)}).map(function(e){return d[e].name}),t.bookSheets||(r.Sheets=n),!r.SheetNames.length&&v["!ref"]?(r.SheetNames.push("Sheet1"),r.Sheets&&(r.Sheets.Sheet1=v)):r.Preamble=v,r.Sheets&&z.forEach(function(e,t){r.Sheets[r.SheetNames[t]]["!autofilter"]=e}),r.Strings=m,r.SSF=de.get_table(),T.enc&&(r.Encryption=T.enc),h&&(r.Themes=h),r.Metadata={},void 0!==f&&(r.Metadata.Country=f),0>>1,n=e.read_shift(1),a=e.read_shift(2,"i"),i=e.read_shift(1),s=e.read_shift(1),o=e.read_shift(1);switch(e.l++,r){case 0:t.auto=1;break;case 1:t.index=n;var l=jr[n];l&&(t.rgb=bi(l));break;case 2:t.rgb=bi([i,s,o]);break;case 3:t.theme=n}return 0!=a&&(t.tint=0>13&3],r.showPivotChartFilter=!!(32768&n),r.updateLinks=["userSet","never","always"][n>>8&3],r}},154:{n:"BrtWbFactoid"},155:{n:"BrtFileRecover"},156:{n:"BrtBundleSh",f:function(e,t){var r={};return r.Hidden=e.read_shift(4),r.iTabID=e.read_shift(4),r.strRelID=_r(e,t-8),r.name=cr(e),r}},157:{n:"BrtCalcProp"},158:{n:"BrtBookView"},159:{n:"BrtBeginSst",f:function(e){return[e.read_shift(4),e.read_shift(4)]}},160:{n:"BrtEndSst"},161:{n:"BrtBeginAFilter",f:Tr},162:{n:"BrtEndAFilter"},163:{n:"BrtBeginFilterColumn"},164:{n:"BrtEndFilterColumn"},165:{n:"BrtBeginFilters"},166:{n:"BrtEndFilters"},167:{n:"BrtFilter"},168:{n:"BrtColorFilter"},169:{n:"BrtIconFilter"},170:{n:"BrtTop10Filter"},171:{n:"BrtDynamicFilter"},172:{n:"BrtBeginCustomFilters"},173:{n:"BrtEndCustomFilters"},174:{n:"BrtCustomFilter"},175:{n:"BrtAFilterDateGroupItem"},176:{n:"BrtMergeCell",f:al},177:{n:"BrtBeginMergeCells"},178:{n:"BrtEndMergeCells"},179:{n:"BrtBeginPivotCacheDef"},180:{n:"BrtEndPivotCacheDef"},181:{n:"BrtBeginPCDFields"},182:{n:"BrtEndPCDFields"},183:{n:"BrtBeginPCDField"},184:{n:"BrtEndPCDField"},185:{n:"BrtBeginPCDSource"},186:{n:"BrtEndPCDSource"},187:{n:"BrtBeginPCDSRange"},188:{n:"BrtEndPCDSRange"},189:{n:"BrtBeginPCDFAtbl"},190:{n:"BrtEndPCDFAtbl"},191:{n:"BrtBeginPCDIRun"},192:{n:"BrtEndPCDIRun"},193:{n:"BrtBeginPivotCacheRecords"},194:{n:"BrtEndPivotCacheRecords"},195:{n:"BrtBeginPCDHierarchies"},196:{n:"BrtEndPCDHierarchies"},197:{n:"BrtBeginPCDHierarchy"},198:{n:"BrtEndPCDHierarchy"},199:{n:"BrtBeginPCDHFieldsUsage"},200:{n:"BrtEndPCDHFieldsUsage"},201:{n:"BrtBeginExtConnection"},202:{n:"BrtEndExtConnection"},203:{n:"BrtBeginECDbProps"},204:{n:"BrtEndECDbProps"},205:{n:"BrtBeginECOlapProps"},206:{n:"BrtEndECOlapProps"},207:{n:"BrtBeginPCDSConsol"},208:{n:"BrtEndPCDSConsol"},209:{n:"BrtBeginPCDSCPages"},210:{n:"BrtEndPCDSCPages"},211:{n:"BrtBeginPCDSCPage"},212:{n:"BrtEndPCDSCPage"},213:{n:"BrtBeginPCDSCPItem"},214:{n:"BrtEndPCDSCPItem"},215:{n:"BrtBeginPCDSCSets"},216:{n:"BrtEndPCDSCSets"},217:{n:"BrtBeginPCDSCSet"},218:{n:"BrtEndPCDSCSet"},219:{n:"BrtBeginPCDFGroup"},220:{n:"BrtEndPCDFGroup"},221:{n:"BrtBeginPCDFGItems"},222:{n:"BrtEndPCDFGItems"},223:{n:"BrtBeginPCDFGRange"},224:{n:"BrtEndPCDFGRange"},225:{n:"BrtBeginPCDFGDiscrete"},226:{n:"BrtEndPCDFGDiscrete"},227:{n:"BrtBeginPCDSDTupleCache"},228:{n:"BrtEndPCDSDTupleCache"},229:{n:"BrtBeginPCDSDTCEntries"},230:{n:"BrtEndPCDSDTCEntries"},231:{n:"BrtBeginPCDSDTCEMembers"},232:{n:"BrtEndPCDSDTCEMembers"},233:{n:"BrtBeginPCDSDTCEMember"},234:{n:"BrtEndPCDSDTCEMember"},235:{n:"BrtBeginPCDSDTCQueries"},236:{n:"BrtEndPCDSDTCQueries"},237:{n:"BrtBeginPCDSDTCQuery"},238:{n:"BrtEndPCDSDTCQuery"},239:{n:"BrtBeginPCDSDTCSets"},240:{n:"BrtEndPCDSDTCSets"},241:{n:"BrtBeginPCDSDTCSet"},242:{n:"BrtEndPCDSDTCSet"},243:{n:"BrtBeginPCDCalcItems"},244:{n:"BrtEndPCDCalcItems"},245:{n:"BrtBeginPCDCalcItem"},246:{n:"BrtEndPCDCalcItem"},247:{n:"BrtBeginPRule"},248:{n:"BrtEndPRule"},249:{n:"BrtBeginPRFilters"},250:{n:"BrtEndPRFilters"},251:{n:"BrtBeginPRFilter"},252:{n:"BrtEndPRFilter"},253:{n:"BrtBeginPNames"},254:{n:"BrtEndPNames"},255:{n:"BrtBeginPName"},256:{n:"BrtEndPName"},257:{n:"BrtBeginPNPairs"},258:{n:"BrtEndPNPairs"},259:{n:"BrtBeginPNPair"},260:{n:"BrtEndPNPair"},261:{n:"BrtBeginECWebProps"},262:{n:"BrtEndECWebProps"},263:{n:"BrtBeginEcWpTables"},264:{n:"BrtEndECWPTables"},265:{n:"BrtBeginECParams"},266:{n:"BrtEndECParams"},267:{n:"BrtBeginECParam"},268:{n:"BrtEndECParam"},269:{n:"BrtBeginPCDKPIs"},270:{n:"BrtEndPCDKPIs"},271:{n:"BrtBeginPCDKPI"},272:{n:"BrtEndPCDKPI"},273:{n:"BrtBeginDims"},274:{n:"BrtEndDims"},275:{n:"BrtBeginDim"},276:{n:"BrtEndDim"},277:{n:"BrtIndexPartEnd"},278:{n:"BrtBeginStyleSheet"},279:{n:"BrtEndStyleSheet"},280:{n:"BrtBeginSXView"},281:{n:"BrtEndSXVI"},282:{n:"BrtBeginSXVI"},283:{n:"BrtBeginSXVIs"},284:{n:"BrtEndSXVIs"},285:{n:"BrtBeginSXVD"},286:{n:"BrtEndSXVD"},287:{n:"BrtBeginSXVDs"},288:{n:"BrtEndSXVDs"},289:{n:"BrtBeginSXPI"},290:{n:"BrtEndSXPI"},291:{n:"BrtBeginSXPIs"},292:{n:"BrtEndSXPIs"},293:{n:"BrtBeginSXDI"},294:{n:"BrtEndSXDI"},295:{n:"BrtBeginSXDIs"},296:{n:"BrtEndSXDIs"},297:{n:"BrtBeginSXLI"},298:{n:"BrtEndSXLI"},299:{n:"BrtBeginSXLIRws"},300:{n:"BrtEndSXLIRws"},301:{n:"BrtBeginSXLICols"},302:{n:"BrtEndSXLICols"},303:{n:"BrtBeginSXFormat"},304:{n:"BrtEndSXFormat"},305:{n:"BrtBeginSXFormats"},306:{n:"BrtEndSxFormats"},307:{n:"BrtBeginSxSelect"},308:{n:"BrtEndSxSelect"},309:{n:"BrtBeginISXVDRws"},310:{n:"BrtEndISXVDRws"},311:{n:"BrtBeginISXVDCols"},312:{n:"BrtEndISXVDCols"},313:{n:"BrtEndSXLocation"},314:{n:"BrtBeginSXLocation"},315:{n:"BrtEndSXView"},316:{n:"BrtBeginSXTHs"},317:{n:"BrtEndSXTHs"},318:{n:"BrtBeginSXTH"},319:{n:"BrtEndSXTH"},320:{n:"BrtBeginISXTHRws"},321:{n:"BrtEndISXTHRws"},322:{n:"BrtBeginISXTHCols"},323:{n:"BrtEndISXTHCols"},324:{n:"BrtBeginSXTDMPS"},325:{n:"BrtEndSXTDMPs"},326:{n:"BrtBeginSXTDMP"},327:{n:"BrtEndSXTDMP"},328:{n:"BrtBeginSXTHItems"},329:{n:"BrtEndSXTHItems"},330:{n:"BrtBeginSXTHItem"},331:{n:"BrtEndSXTHItem"},332:{n:"BrtBeginMetadata"},333:{n:"BrtEndMetadata"},334:{n:"BrtBeginEsmdtinfo"},335:{n:"BrtMdtinfo"},336:{n:"BrtEndEsmdtinfo"},337:{n:"BrtBeginEsmdb"},338:{n:"BrtEndEsmdb"},339:{n:"BrtBeginEsfmd"},340:{n:"BrtEndEsfmd"},341:{n:"BrtBeginSingleCells"},342:{n:"BrtEndSingleCells"},343:{n:"BrtBeginList"},344:{n:"BrtEndList"},345:{n:"BrtBeginListCols"},346:{n:"BrtEndListCols"},347:{n:"BrtBeginListCol"},348:{n:"BrtEndListCol"},349:{n:"BrtBeginListXmlCPr"},350:{n:"BrtEndListXmlCPr"},351:{n:"BrtListCCFmla"},352:{n:"BrtListTrFmla"},353:{n:"BrtBeginExternals"},354:{n:"BrtEndExternals"},355:{n:"BrtSupBookSrc",f:_r},357:{n:"BrtSupSelf"},358:{n:"BrtSupSame"},359:{n:"BrtSupTabs"},360:{n:"BrtBeginSupBook"},361:{n:"BrtPlaceholderName"},362:{n:"BrtExternSheet",f:Ta},363:{n:"BrtExternTableStart"},364:{n:"BrtExternTableEnd"},366:{n:"BrtExternRowHdr"},367:{n:"BrtExternCellBlank"},368:{n:"BrtExternCellReal"},369:{n:"BrtExternCellBool"},370:{n:"BrtExternCellError"},371:{n:"BrtExternCellString"},372:{n:"BrtBeginEsmdx"},373:{n:"BrtEndEsmdx"},374:{n:"BrtBeginMdxSet"},375:{n:"BrtEndMdxSet"},376:{n:"BrtBeginMdxMbrProp"},377:{n:"BrtEndMdxMbrProp"},378:{n:"BrtBeginMdxKPI"},379:{n:"BrtEndMdxKPI"},380:{n:"BrtBeginEsstr"},381:{n:"BrtEndEsstr"},382:{n:"BrtBeginPRFItem"},383:{n:"BrtEndPRFItem"},384:{n:"BrtBeginPivotCacheIDs"},385:{n:"BrtEndPivotCacheIDs"},386:{n:"BrtBeginPivotCacheID"},387:{n:"BrtEndPivotCacheID"},388:{n:"BrtBeginISXVIs"},389:{n:"BrtEndISXVIs"},390:{n:"BrtBeginColInfos"},391:{n:"BrtEndColInfos"},392:{n:"BrtBeginRwBrk"},393:{n:"BrtEndRwBrk"},394:{n:"BrtBeginColBrk"},395:{n:"BrtEndColBrk"},396:{n:"BrtBrk"},397:{n:"BrtUserBookView"},398:{n:"BrtInfo"},399:{n:"BrtCUsr"},400:{n:"BrtUsr"},401:{n:"BrtBeginUsers"},403:{n:"BrtEOF"},404:{n:"BrtUCR"},405:{n:"BrtRRInsDel"},406:{n:"BrtRREndInsDel"},407:{n:"BrtRRMove"},408:{n:"BrtRREndMove"},409:{n:"BrtRRChgCell"},410:{n:"BrtRREndChgCell"},411:{n:"BrtRRHeader"},412:{n:"BrtRRUserView"},413:{n:"BrtRRRenSheet"},414:{n:"BrtRRInsertSh"},415:{n:"BrtRRDefName"},416:{n:"BrtRRNote"},417:{n:"BrtRRConflict"},418:{n:"BrtRRTQSIF"},419:{n:"BrtRRFormat"},420:{n:"BrtRREndFormat"},421:{n:"BrtRRAutoFmt"},422:{n:"BrtBeginUserShViews"},423:{n:"BrtBeginUserShView"},424:{n:"BrtEndUserShView"},425:{n:"BrtEndUserShViews"},426:{n:"BrtArrFmla",f:function(e,t,r){var n=e.l+t,a=kr(e),i=e.read_shift(1),s=[a];if(s[2]=i,r.cellFormula){var o=lo(e,n-e.l,r);s[1]=o}else e.l=n;return s}},427:{n:"BrtShrFmla",f:function(e,t,r){var n=e.l+t,a=[Tr(e,16)];if(r.cellFormula){var i=ho(e,n-e.l,r);a[1]=i,e.l=n}else e.l=n;return a}},428:{n:"BrtTable"},429:{n:"BrtBeginExtConnections"},430:{n:"BrtEndExtConnections"},431:{n:"BrtBeginPCDCalcMems"},432:{n:"BrtEndPCDCalcMems"},433:{n:"BrtBeginPCDCalcMem"},434:{n:"BrtEndPCDCalcMem"},435:{n:"BrtBeginPCDHGLevels"},436:{n:"BrtEndPCDHGLevels"},437:{n:"BrtBeginPCDHGLevel"},438:{n:"BrtEndPCDHGLevel"},439:{n:"BrtBeginPCDHGLGroups"},440:{n:"BrtEndPCDHGLGroups"},441:{n:"BrtBeginPCDHGLGroup"},442:{n:"BrtEndPCDHGLGroup"},443:{n:"BrtBeginPCDHGLGMembers"},444:{n:"BrtEndPCDHGLGMembers"},445:{n:"BrtBeginPCDHGLGMember"},446:{n:"BrtEndPCDHGLGMember"},447:{n:"BrtBeginQSI"},448:{n:"BrtEndQSI"},449:{n:"BrtBeginQSIR"},450:{n:"BrtEndQSIR"},451:{n:"BrtBeginDeletedNames"},452:{n:"BrtEndDeletedNames"},453:{n:"BrtBeginDeletedName"},454:{n:"BrtEndDeletedName"},455:{n:"BrtBeginQSIFs"},456:{n:"BrtEndQSIFs"},457:{n:"BrtBeginQSIF"},458:{n:"BrtEndQSIF"},459:{n:"BrtBeginAutoSortScope"},460:{n:"BrtEndAutoSortScope"},461:{n:"BrtBeginConditionalFormatting"},462:{n:"BrtEndConditionalFormatting"},463:{n:"BrtBeginCFRule"},464:{n:"BrtEndCFRule"},465:{n:"BrtBeginIconSet"},466:{n:"BrtEndIconSet"},467:{n:"BrtBeginDatabar"},468:{n:"BrtEndDatabar"},469:{n:"BrtBeginColorScale"},470:{n:"BrtEndColorScale"},471:{n:"BrtCFVO"},472:{n:"BrtExternValueMeta"},473:{n:"BrtBeginColorPalette"},474:{n:"BrtEndColorPalette"},475:{n:"BrtIndexedColor"},476:{n:"BrtMargins",f:function(t){var r={};return sl.forEach(function(e){r[e]=Rr(t)}),r}},477:{n:"BrtPrintOptions"},478:{n:"BrtPageSetup"},479:{n:"BrtBeginHeaderFooter"},480:{n:"BrtEndHeaderFooter"},481:{n:"BrtBeginSXCrtFormat"},482:{n:"BrtEndSXCrtFormat"},483:{n:"BrtBeginSXCrtFormats"},484:{n:"BrtEndSXCrtFormats"},485:{n:"BrtWsFmtInfo",f:function(){}},486:{n:"BrtBeginMgs"},487:{n:"BrtEndMGs"},488:{n:"BrtBeginMGMaps"},489:{n:"BrtEndMGMaps"},490:{n:"BrtBeginMG"},491:{n:"BrtEndMG"},492:{n:"BrtBeginMap"},493:{n:"BrtEndMap"},494:{n:"BrtHLink",f:function(e,t){var r=e.l+t,n=Tr(e,16),a=Er(e),i=cr(e),s=cr(e),o=cr(e);e.l=r;var l={rfx:n,relId:a,loc:i,display:o};return s&&(l.Tooltip=s),l}},495:{n:"BrtBeginDCon"},496:{n:"BrtEndDCon"},497:{n:"BrtBeginDRefs"},498:{n:"BrtEndDRefs"},499:{n:"BrtDRef"},500:{n:"BrtBeginScenMan"},501:{n:"BrtEndScenMan"},502:{n:"BrtBeginSct"},503:{n:"BrtEndSct"},504:{n:"BrtSlc"},505:{n:"BrtBeginDXFs"},506:{n:"BrtEndDXFs"},507:{n:"BrtDXF"},508:{n:"BrtBeginTableStyles"},509:{n:"BrtEndTableStyles"},510:{n:"BrtBeginTableStyle"},511:{n:"BrtEndTableStyle"},512:{n:"BrtTableStyleElement"},513:{n:"BrtTableStyleClient"},514:{n:"BrtBeginVolDeps"},515:{n:"BrtEndVolDeps"},516:{n:"BrtBeginVolType"},517:{n:"BrtEndVolType"},518:{n:"BrtBeginVolMain"},519:{n:"BrtEndVolMain"},520:{n:"BrtBeginVolTopic"},521:{n:"BrtEndVolTopic"},522:{n:"BrtVolSubtopic"},523:{n:"BrtVolRef"},524:{n:"BrtVolNum"},525:{n:"BrtVolErr"},526:{n:"BrtVolStr"},527:{n:"BrtVolBool"},528:{n:"BrtBeginCalcChain$"},529:{n:"BrtEndCalcChain$"},530:{n:"BrtBeginSortState"},531:{n:"BrtEndSortState"},532:{n:"BrtBeginSortCond"},533:{n:"BrtEndSortCond"},534:{n:"BrtBookProtection"},535:{n:"BrtSheetProtection"},536:{n:"BrtRangeProtection"},537:{n:"BrtPhoneticInfo"},538:{n:"BrtBeginECTxtWiz"},539:{n:"BrtEndECTxtWiz"},540:{n:"BrtBeginECTWFldInfoLst"},541:{n:"BrtEndECTWFldInfoLst"},542:{n:"BrtBeginECTwFldInfo"},548:{n:"BrtFileSharing"},549:{n:"BrtOleSize"},550:{n:"BrtDrawing",f:_r},551:{n:"BrtLegacyDrawing"},552:{n:"BrtLegacyDrawingHF"},553:{n:"BrtWebOpt"},554:{n:"BrtBeginWebPubItems"},555:{n:"BrtEndWebPubItems"},556:{n:"BrtBeginWebPubItem"},557:{n:"BrtEndWebPubItem"},558:{n:"BrtBeginSXCondFmt"},559:{n:"BrtEndSXCondFmt"},560:{n:"BrtBeginSXCondFmts"},561:{n:"BrtEndSXCondFmts"},562:{n:"BrtBkHim"},564:{n:"BrtColor"},565:{n:"BrtBeginIndexedColors"},566:{n:"BrtEndIndexedColors"},569:{n:"BrtBeginMRUColors"},570:{n:"BrtEndMRUColors"},572:{n:"BrtMRUColor"},573:{n:"BrtBeginDVals"},574:{n:"BrtEndDVals"},577:{n:"BrtSupNameStart"},578:{n:"BrtSupNameValueStart"},579:{n:"BrtSupNameValueEnd"},580:{n:"BrtSupNameNum"},581:{n:"BrtSupNameErr"},582:{n:"BrtSupNameSt"},583:{n:"BrtSupNameNil"},584:{n:"BrtSupNameBool"},585:{n:"BrtSupNameFmla"},586:{n:"BrtSupNameBits"},587:{n:"BrtSupNameEnd"},588:{n:"BrtEndSupBook"},589:{n:"BrtCellSmartTagProperty"},590:{n:"BrtBeginCellSmartTag"},591:{n:"BrtEndCellSmartTag"},592:{n:"BrtBeginCellSmartTags"},593:{n:"BrtEndCellSmartTags"},594:{n:"BrtBeginSmartTags"},595:{n:"BrtEndSmartTags"},596:{n:"BrtSmartTagType"},597:{n:"BrtBeginSmartTagTypes"},598:{n:"BrtEndSmartTagTypes"},599:{n:"BrtBeginSXFilters"},600:{n:"BrtEndSXFilters"},601:{n:"BrtBeginSXFILTER"},602:{n:"BrtEndSXFilter"},603:{n:"BrtBeginFills"},604:{n:"BrtEndFills"},605:{n:"BrtBeginCellWatches"},606:{n:"BrtEndCellWatches"},607:{n:"BrtCellWatch"},608:{n:"BrtBeginCRErrs"},609:{n:"BrtEndCRErrs"},610:{n:"BrtCrashRecErr"},611:{n:"BrtBeginFonts"},612:{n:"BrtEndFonts"},613:{n:"BrtBeginBorders"},614:{n:"BrtEndBorders"},615:{n:"BrtBeginFmts"},616:{n:"BrtEndFmts"},617:{n:"BrtBeginCellXFs"},618:{n:"BrtEndCellXFs"},619:{n:"BrtBeginStyles"},620:{n:"BrtEndStyles"},625:{n:"BrtBigName"},626:{n:"BrtBeginCellStyleXFs"},627:{n:"BrtEndCellStyleXFs"},628:{n:"BrtBeginComments"},629:{n:"BrtEndComments"},630:{n:"BrtBeginCommentAuthors"},631:{n:"BrtEndCommentAuthors"},632:{n:"BrtCommentAuthor",f:ms},633:{n:"BrtBeginCommentList"},634:{n:"BrtEndCommentList"},635:{n:"BrtBeginComment",f:function(e){var t={};t.iauthor=e.read_shift(4);var r=Tr(e,16);return t.rfx=r.s,t.ref=Qt(r.s),e.l+=16,t}},636:{n:"BrtEndComment"},637:{n:"BrtCommentText",f:ur},638:{n:"BrtBeginOleObjects"},639:{n:"BrtOleObject"},640:{n:"BrtEndOleObjects"},641:{n:"BrtBeginSxrules"},642:{n:"BrtEndSxRules"},643:{n:"BrtBeginActiveXControls"},644:{n:"BrtActiveX"},645:{n:"BrtEndActiveXControls"},646:{n:"BrtBeginPCDSDTCEMembersSortBy"},648:{n:"BrtBeginCellIgnoreECs"},649:{n:"BrtCellIgnoreEC"},650:{n:"BrtEndCellIgnoreECs"},651:{n:"BrtCsProp",f:function(e,t){return e.l+=10,{name:cr(e)}}},652:{n:"BrtCsPageSetup"},653:{n:"BrtBeginUserCsViews"},654:{n:"BrtEndUserCsViews"},655:{n:"BrtBeginUserCsView"},656:{n:"BrtEndUserCsView"},657:{n:"BrtBeginPcdSFCIEntries"},658:{n:"BrtEndPCDSFCIEntries"},659:{n:"BrtPCDSFCIEntry"},660:{n:"BrtBeginListParts"},661:{n:"BrtListPart"},662:{n:"BrtEndListParts"},663:{n:"BrtSheetCalcProp"},664:{n:"BrtBeginFnGroup"},665:{n:"BrtFnGroup"},666:{n:"BrtEndFnGroup"},667:{n:"BrtSupAddin"},668:{n:"BrtSXTDMPOrder"},669:{n:"BrtCsProtection"},671:{n:"BrtBeginWsSortMap"},672:{n:"BrtEndWsSortMap"},673:{n:"BrtBeginRRSort"},674:{n:"BrtEndRRSort"},675:{n:"BrtRRSortItem"},676:{n:"BrtFileSharingIso"},677:{n:"BrtBookProtectionIso"},678:{n:"BrtSheetProtectionIso"},679:{n:"BrtCsProtectionIso"},680:{n:"BrtRangeProtectionIso"},681:{n:"BrtDValList"},1024:{n:"BrtRwDescent"},1025:{n:"BrtKnownFonts"},1026:{n:"BrtBeginSXTupleSet"},1027:{n:"BrtEndSXTupleSet"},1028:{n:"BrtBeginSXTupleSetHeader"},1029:{n:"BrtEndSXTupleSetHeader"},1030:{n:"BrtSXTupleSetHeaderItem"},1031:{n:"BrtBeginSXTupleSetData"},1032:{n:"BrtEndSXTupleSetData"},1033:{n:"BrtBeginSXTupleSetRow"},1034:{n:"BrtEndSXTupleSetRow"},1035:{n:"BrtSXTupleSetRowItem"},1036:{n:"BrtNameExt"},1037:{n:"BrtPCDH14"},1038:{n:"BrtBeginPCDCalcMem14"},1039:{n:"BrtEndPCDCalcMem14"},1040:{n:"BrtSXTH14"},1041:{n:"BrtBeginSparklineGroup"},1042:{n:"BrtEndSparklineGroup"},1043:{n:"BrtSparkline"},1044:{n:"BrtSXDI14"},1045:{n:"BrtWsFmtInfoEx14"},1046:{n:"BrtBeginConditionalFormatting14"},1047:{n:"BrtEndConditionalFormatting14"},1048:{n:"BrtBeginCFRule14"},1049:{n:"BrtEndCFRule14"},1050:{n:"BrtCFVO14"},1051:{n:"BrtBeginDatabar14"},1052:{n:"BrtBeginIconSet14"},1053:{n:"BrtDVal14",f:function(){}},1054:{n:"BrtBeginDVals14"},1055:{n:"BrtColor14"},1056:{n:"BrtBeginSparklines"},1057:{n:"BrtEndSparklines"},1058:{n:"BrtBeginSparklineGroups"},1059:{n:"BrtEndSparklineGroups"},1061:{n:"BrtSXVD14"},1062:{n:"BrtBeginSXView14"},1063:{n:"BrtEndSXView14"},1064:{n:"BrtBeginSXView16"},1065:{n:"BrtEndSXView16"},1066:{n:"BrtBeginPCD14"},1067:{n:"BrtEndPCD14"},1068:{n:"BrtBeginExtConn14"},1069:{n:"BrtEndExtConn14"},1070:{n:"BrtBeginSlicerCacheIDs"},1071:{n:"BrtEndSlicerCacheIDs"},1072:{n:"BrtBeginSlicerCacheID"},1073:{n:"BrtEndSlicerCacheID"},1075:{n:"BrtBeginSlicerCache"},1076:{n:"BrtEndSlicerCache"},1077:{n:"BrtBeginSlicerCacheDef"},1078:{n:"BrtEndSlicerCacheDef"},1079:{n:"BrtBeginSlicersEx"},1080:{n:"BrtEndSlicersEx"},1081:{n:"BrtBeginSlicerEx"},1082:{n:"BrtEndSlicerEx"},1083:{n:"BrtBeginSlicer"},1084:{n:"BrtEndSlicer"},1085:{n:"BrtSlicerCachePivotTables"},1086:{n:"BrtBeginSlicerCacheOlapImpl"},1087:{n:"BrtEndSlicerCacheOlapImpl"},1088:{n:"BrtBeginSlicerCacheLevelsData"},1089:{n:"BrtEndSlicerCacheLevelsData"},1090:{n:"BrtBeginSlicerCacheLevelData"},1091:{n:"BrtEndSlicerCacheLevelData"},1092:{n:"BrtBeginSlicerCacheSiRanges"},1093:{n:"BrtEndSlicerCacheSiRanges"},1094:{n:"BrtBeginSlicerCacheSiRange"},1095:{n:"BrtEndSlicerCacheSiRange"},1096:{n:"BrtSlicerCacheOlapItem"},1097:{n:"BrtBeginSlicerCacheSelections"},1098:{n:"BrtSlicerCacheSelection"},1099:{n:"BrtEndSlicerCacheSelections"},1100:{n:"BrtBeginSlicerCacheNative"},1101:{n:"BrtEndSlicerCacheNative"},1102:{n:"BrtSlicerCacheNativeItem"},1103:{n:"BrtRangeProtection14"},1104:{n:"BrtRangeProtectionIso14"},1105:{n:"BrtCellIgnoreEC14"},1111:{n:"BrtList14"},1112:{n:"BrtCFIcon"},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs"},1114:{n:"BrtEndSlicerCachesPivotCacheIDs"},1115:{n:"BrtBeginSlicers"},1116:{n:"BrtEndSlicers"},1117:{n:"BrtWbProp14"},1118:{n:"BrtBeginSXEdit"},1119:{n:"BrtEndSXEdit"},1120:{n:"BrtBeginSXEdits"},1121:{n:"BrtEndSXEdits"},1122:{n:"BrtBeginSXChange"},1123:{n:"BrtEndSXChange"},1124:{n:"BrtBeginSXChanges"},1125:{n:"BrtEndSXChanges"},1126:{n:"BrtSXTupleItems"},1128:{n:"BrtBeginSlicerStyle"},1129:{n:"BrtEndSlicerStyle"},1130:{n:"BrtSlicerStyleElement"},1131:{n:"BrtBeginStyleSheetExt14"},1132:{n:"BrtEndStyleSheetExt14"},1133:{n:"BrtBeginSlicerCachesPivotCacheID"},1134:{n:"BrtEndSlicerCachesPivotCacheID"},1135:{n:"BrtBeginConditionalFormattings"},1136:{n:"BrtEndConditionalFormattings"},1137:{n:"BrtBeginPCDCalcMemExt"},1138:{n:"BrtEndPCDCalcMemExt"},1139:{n:"BrtBeginPCDCalcMemsExt"},1140:{n:"BrtEndPCDCalcMemsExt"},1141:{n:"BrtPCDField14"},1142:{n:"BrtBeginSlicerStyles"},1143:{n:"BrtEndSlicerStyles"},1144:{n:"BrtBeginSlicerStyleElements"},1145:{n:"BrtEndSlicerStyleElements"},1146:{n:"BrtCFRuleExt"},1147:{n:"BrtBeginSXCondFmt14"},1148:{n:"BrtEndSXCondFmt14"},1149:{n:"BrtBeginSXCondFmts14"},1150:{n:"BrtEndSXCondFmts14"},1152:{n:"BrtBeginSortCond14"},1153:{n:"BrtEndSortCond14"},1154:{n:"BrtEndDVals14"},1155:{n:"BrtEndIconSet14"},1156:{n:"BrtEndDatabar14"},1157:{n:"BrtBeginColorScale14"},1158:{n:"BrtEndColorScale14"},1159:{n:"BrtBeginSxrules14"},1160:{n:"BrtEndSxrules14"},1161:{n:"BrtBeginPRule14"},1162:{n:"BrtEndPRule14"},1163:{n:"BrtBeginPRFilters14"},1164:{n:"BrtEndPRFilters14"},1165:{n:"BrtBeginPRFilter14"},1166:{n:"BrtEndPRFilter14"},1167:{n:"BrtBeginPRFItem14"},1168:{n:"BrtEndPRFItem14"},1169:{n:"BrtBeginCellIgnoreECs14"},1170:{n:"BrtEndCellIgnoreECs14"},1171:{n:"BrtDxf14"},1172:{n:"BrtBeginDxF14s"},1173:{n:"BrtEndDxf14s"},1177:{n:"BrtFilter14"},1178:{n:"BrtBeginCustomFilters14"},1180:{n:"BrtCustomFilter14"},1181:{n:"BrtIconFilter14"},1182:{n:"BrtPivotCacheConnectionName"},2048:{n:"BrtBeginDecoupledPivotCacheIDs"},2049:{n:"BrtEndDecoupledPivotCacheIDs"},2050:{n:"BrtDecoupledPivotCacheID"},2051:{n:"BrtBeginPivotTableRefs"},2052:{n:"BrtEndPivotTableRefs"},2053:{n:"BrtPivotTableRef"},2054:{n:"BrtSlicerCacheBookPivotTables"},2055:{n:"BrtBeginSxvcells"},2056:{n:"BrtEndSxvcells"},2057:{n:"BrtBeginSxRow"},2058:{n:"BrtEndSxRow"},2060:{n:"BrtPcdCalcMem15"},2067:{n:"BrtQsi15"},2068:{n:"BrtBeginWebExtensions"},2069:{n:"BrtEndWebExtensions"},2070:{n:"BrtWebExtension"},2071:{n:"BrtAbsPath15"},2072:{n:"BrtBeginPivotTableUISettings"},2073:{n:"BrtEndPivotTableUISettings"},2075:{n:"BrtTableSlicerCacheIDs"},2076:{n:"BrtTableSlicerCacheID"},2077:{n:"BrtBeginTableSlicerCache"},2078:{n:"BrtEndTableSlicerCache"},2079:{n:"BrtSxFilter15"},2080:{n:"BrtBeginTimelineCachePivotCacheIDs"},2081:{n:"BrtEndTimelineCachePivotCacheIDs"},2082:{n:"BrtTimelineCachePivotCacheID"},2083:{n:"BrtBeginTimelineCacheIDs"},2084:{n:"BrtEndTimelineCacheIDs"},2085:{n:"BrtBeginTimelineCacheID"},2086:{n:"BrtEndTimelineCacheID"},2087:{n:"BrtBeginTimelinesEx"},2088:{n:"BrtEndTimelinesEx"},2089:{n:"BrtBeginTimelineEx"},2090:{n:"BrtEndTimelineEx"},2091:{n:"BrtWorkBookPr15"},2092:{n:"BrtPCDH15"},2093:{n:"BrtBeginTimelineStyle"},2094:{n:"BrtEndTimelineStyle"},2095:{n:"BrtTimelineStyleElement"},2096:{n:"BrtBeginTimelineStylesheetExt15"},2097:{n:"BrtEndTimelineStylesheetExt15"},2098:{n:"BrtBeginTimelineStyles"},2099:{n:"BrtEndTimelineStyles"},2100:{n:"BrtBeginTimelineStyleElements"},2101:{n:"BrtEndTimelineStyleElements"},2102:{n:"BrtDxf15"},2103:{n:"BrtBeginDxfs15"},2104:{n:"brtEndDxfs15"},2105:{n:"BrtSlicerCacheHideItemsWithNoData"},2106:{n:"BrtBeginItemUniqueNames"},2107:{n:"BrtEndItemUniqueNames"},2108:{n:"BrtItemUniqueName"},2109:{n:"BrtBeginExtConn15"},2110:{n:"BrtEndExtConn15"},2111:{n:"BrtBeginOledbPr15"},2112:{n:"BrtEndOledbPr15"},2113:{n:"BrtBeginDataFeedPr15"},2114:{n:"BrtEndDataFeedPr15"},2115:{n:"BrtTextPr15"},2116:{n:"BrtRangePr15"},2117:{n:"BrtDbCommand15"},2118:{n:"BrtBeginDbTables15"},2119:{n:"BrtEndDbTables15"},2120:{n:"BrtDbTable15"},2121:{n:"BrtBeginDataModel"},2122:{n:"BrtEndDataModel"},2123:{n:"BrtBeginModelTables"},2124:{n:"BrtEndModelTables"},2125:{n:"BrtModelTable"},2126:{n:"BrtBeginModelRelationships"},2127:{n:"BrtEndModelRelationships"},2128:{n:"BrtModelRelationship"},2129:{n:"BrtBeginECTxtWiz15"},2130:{n:"BrtEndECTxtWiz15"},2131:{n:"BrtBeginECTWFldInfoLst15"},2132:{n:"BrtEndECTWFldInfoLst15"},2133:{n:"BrtBeginECTWFldInfo15"},2134:{n:"BrtFieldListActiveItem"},2135:{n:"BrtPivotCacheIdVersion"},2136:{n:"BrtSXDI15"},2137:{n:"BrtBeginModelTimeGroupings"},2138:{n:"BrtEndModelTimeGroupings"},2139:{n:"BrtBeginModelTimeGrouping"},2140:{n:"BrtEndModelTimeGrouping"},2141:{n:"BrtModelTimeGroupingCalcCol"},3072:{n:"BrtUid"},3073:{n:"BrtRevisionPtr"},5095:{n:"BrtBeginCalcFeatures"},5096:{n:"BrtEndCalcFeatures"},5097:{n:"BrtCalcFeature"},65535:{n:""}},pc=g(dc,"n");pc.BrtFRTArchID$=16;var gc={6:{n:"Formula",f:io},10:{n:"EOF",f:zn},12:{n:"CalcCount",f:Vn},13:{n:"CalcMode",f:Vn},14:{n:"CalcPrecision",f:Hn},15:{n:"CalcRefMode",f:Hn},16:{n:"CalcDelta",f:Rr},17:{n:"CalcIter",f:Hn},18:{n:"Protect",f:Hn},19:{n:"Password",f:Vn},20:{n:"Header",f:Aa},21:{n:"Footer",f:Aa},23:{n:"ExternSheet",f:Ta},24:{n:"Lbl",f:ka},25:{n:"WinProtect",f:Hn},26:{n:"VerticalPageBreaks"},27:{n:"HorizontalPageBreaks"},28:{n:"Note",f:function(e,t,r){return function(e,t,r){if(!(r.biff<8)){var n=e.read_shift(2),a=e.read_shift(2),i=e.read_shift(2),s=e.read_shift(2),o=Jn(e,0,r);return r.biff<8&&e.read_shift(1),[{r:n,c:a},o,s,i]}}(e,0,r)}},29:{n:"Selection"},34:{n:"Date1904",f:Hn},35:{n:"ExternName",f:ya},38:{n:"LeftMargin",f:Rr},39:{n:"RightMargin",f:Rr},40:{n:"TopMargin",f:Rr},41:{n:"BottomMargin",f:Rr},42:{n:"PrintRowCol",f:Hn},43:{n:"PrintGrid",f:Hn},47:{n:"FilePass",f:function(e,t,r){var n,a,i,s,o={Type:8<=r.biff?e.read_shift(2):0};return o.Type?gi(e,t-2,o):(n=e,r.biff,a=r,i=o,s={key:Vn(n),verificationBytes:Vn(n)},a.password&&(s.verifier=li(a.password)),i.valid=s.verificationBytes===s.verifier,i.valid&&(i.insitu=pi(a.password))),o}},49:{n:"Font",f:function(e,t,r){var n={dyHeight:e.read_shift(2),fl:e.read_shift(2)};switch(r&&r.biff||8){case 2:break;case 3:case 4:e.l+=2;break;default:e.l+=10}return n.name=Yn(e,0,r),n}},51:{n:"PrintSize",f:Vn},60:{n:"Continue"},61:{n:"Window1",f:function(e){return{Pos:[e.read_shift(2),e.read_shift(2)],Dim:[e.read_shift(2),e.read_shift(2)],Flags:e.read_shift(2),CurTab:e.read_shift(2),FirstTab:e.read_shift(2),Selected:e.read_shift(2),TabRatio:e.read_shift(2)}}},64:{n:"Backup",f:Hn},65:{n:"Pane",f:function(){}},66:{n:"CodePage",f:Vn},77:{n:"Pls"},80:{n:"DCon"},81:{n:"DConRef"},82:{n:"DConName"},85:{n:"DefColWidth",f:Vn},89:{n:"XCT"},90:{n:"CRN"},91:{n:"FileSharing"},92:{n:"WriteAccess",f:function(e,t,r){if(r.enc)return e.l+=t,"";var n=e.l,a=Jn(e,0,r);return e.read_shift(t+n-e.l),a}},93:{n:"Obj",f:function(e,t,r){if(r&&r.biff<8)return function(e,t,r){e.l+=4;var n=e.read_shift(2),a=e.read_shift(2),i=e.read_shift(2);e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=6,t-=36;var s=[];return s.push((Ra[n]||Ut)(e,t,r)),{cmo:[a,n,i],ft:s}}(e,t,r);var n=ua(e);return{cmo:n,ft:function(t,e){for(var r=t.l+e,n=[];t.l>2&1,f.data=(n=e,f.fStyle,a=r,i={},s=n.read_shift(4),o=n.read_shift(4),l=n.read_shift(4),c=n.read_shift(2),i.patternType=Gr[l>>26],a.cellStyles&&(i.alc=7&s,i.fWrap=s>>3&1,i.alcV=s>>4&7,i.fJustLast=s>>7&1,i.trot=s>>8&255,i.cIndent=s>>16&15,i.fShrinkToFit=s>>20&1,i.iReadOrder=s>>22&2,i.fAtrNum=s>>26&1,i.fAtrFnt=s>>27&1,i.fAtrAlc=s>>28&1,i.fAtrBdr=s>>29&1,i.fAtrPat=s>>30&1,i.fAtrProt=s>>31&1,i.dgLeft=15&o,i.dgRight=o>>4&15,i.dgTop=o>>8&15,i.dgBottom=o>>12&15,i.icvLeft=o>>16&127,i.icvRight=o>>23&127,i.grbitDiag=o>>30&3,i.icvTop=127&l,i.icvBottom=l>>7&127,i.icvDiag=l>>14&127,i.dgDiag=l>>21&15,i.icvFore=127&c,i.icvBack=c>>7&127,i.fsxButton=c>>14&1),i),f}},225:{n:"InterfaceHdr",f:function(e,t){return 0===t||e.read_shift(2),1200}},226:{n:"InterfaceEnd",f:zn},227:{n:"SXVS"},229:{n:"MergeCells",f:function(e,t){for(var r=[],n=e.read_shift(2);n--;)r.push(la(e));return r}},233:{n:"BkHim"},235:{n:"MsoDrawingGroup"},236:{n:"MsoDrawing"},237:{n:"MsoDrawingSelection"},239:{n:"PhoneticInfo"},240:{n:"SxRule"},241:{n:"SXEx"},242:{n:"SxFilt"},244:{n:"SxDXF"},245:{n:"SxItm"},246:{n:"SxName"},247:{n:"SxSelect"},248:{n:"SXPair"},249:{n:"SxFmla"},251:{n:"SxFormat"},252:{n:"SST",f:function(e,t){for(var r=e.l+t,n=e.read_shift(4),a=e.read_shift(4),i=[],s=0;s!=a&&e.le.l;)o.push(qn(e));return[i,a,s,o]}},431:{n:"Prot4Rev",f:Hn},432:{n:"CondFmt"},433:{n:"CF"},434:{n:"DVal"},437:{n:"DConBin"},438:{n:"TxO",f:function(t,r,e){var n=t.l,a="";try{t.l+=4;var i=(e.lastobj||{cmo:[0,0]}).cmo[1];-1==[0,5,7,11,12,14].indexOf(i)?t.l+=6:function(e){e.read_shift(1);e.l++;e.read_shift(2);e.l+=2}(t);var s=t.read_shift(2);t.read_shift(2),Vn(t);var o=t.read_shift(2);t.l+=o;for(var l=1;l=(c?s:2*s))break}if(a.length!==s&&a.length!==2*s)throw new Error("cchText: "+s+" != "+a.length);return t.l=n+r,{t:a}}catch(e){return t.l=n+r,{t:a}}}},439:{n:"RefreshAll",f:Hn},440:{n:"HLink",f:function(e,t){var r=la(e);return e.l+=16,[r,function(e,t){var r=e.l+t,n=e.read_shift(4);if(2!==n)throw new Error("Unrecognized streamVersion: "+n);var a=e.read_shift(2);e.l+=2;var i,s,o,l,c,f,h="";16&a&&(i=ta(e,e.l)),128&a&&(s=ta(e,e.l)),257==(257&a)&&(o=ta(e,e.l)),1==(257&a)&&(l=ea(e,e.l)),8&a&&(h=ta(e,e.l)),32&a&&(c=e.read_shift(16)),64&a&&(f=yn(e)),e.l=r;var u=s||o||l||"";u&&h&&(u+="#"+h),u||(u="#"+h),2&a&&"/"==u.charAt(0)&&"/"!=u.charAt(1)&&(u="file://"+u);var d={Target:u};return c&&(d.guid=c),f&&(d.time=f),i&&(d.Tooltip=i),d}(e,t-24)]}},441:{n:"Lel"},442:{n:"CodeName",f:qn},443:{n:"SXFDBType"},444:{n:"Prot4RevPass",f:Vn},445:{n:"ObNoMacros"},446:{n:"Dv"},448:{n:"Excel9File",f:zn},449:{n:"RecalcId",f:function(e){return e.read_shift(2),e.read_shift(4)},r:2},450:{n:"EntExU2",f:zn},512:{n:"Dimensions",f:Ca},513:{n:"Blank",f:Fa},515:{n:"Number",f:function(e,t,r){r.biffguess&&2==r.biff&&(r.biff=5);var n=ia(e),a=Rr(e);return n.val=a,n}},516:{n:"Label",f:function(e,t,r){r.biffguess&&2==r.biff&&(r.biff=5),e.l;var n=ia(e);2==r.biff&&e.l++;var a=qn(e,e.l,r);return n.val=a,n}},517:{n:"BoolErr",f:_a},519:{n:"String",f:Na},520:{n:"Row",f:function(e){var t={};t.r=e.read_shift(2),t.c=e.read_shift(2),t.cnt=e.read_shift(2)-t.c;var r=e.read_shift(2);e.l+=4;var n=e.read_shift(1);return e.l+=3,7&n&&(t.level=7&n),32&n&&(t.hidden=!0),64&n&&(t.hpt=r/20),t}},523:{n:"Index"},545:{n:"Array",f:xa},549:{n:"DefaultRowHeight",f:va},566:{n:"Table"},574:{n:"Window2",f:function(e,t,r){return r&&2<=r.biff&&r.biff<5?{}:{RTL:64&e.read_shift(2)}}},638:{n:"RK",f:function(e){var t=e.read_shift(2),r=e.read_shift(2),n=oa(e);return{r:t,c:r,ixfe:n[0],rknum:n[1]}}},659:{n:"Style"},1048:{n:"BigName"},1054:{n:"Format",f:function(e,t,r){return[e.read_shift(2),Jn(e,0,r)]}},1084:{n:"ContinueBigName"},1212:{n:"ShrFmla",f:function(e,t,r){var n=fa(e);e.l++;var a,i,s,o,l,c,f,h=e.read_shift(1);return[(a=e,i=t-=8,s=r,l=a.l+i,c=a.read_shift(2),f=Js(a,c,s),65535==c?[[],Ut(a,i-2)]:(i!==c+2&&(o=qs(a,l-c-2,f,s)),[f,o])),h,n]}},2048:{n:"HLinkTooltip",f:function(e,t){e.read_shift(2);var r=la(e),n=e.read_shift((t-10)/2,"dbcs-cont");return[r,n=n.replace(oe,"")]}},2049:{n:"WebPub"},2050:{n:"QsiSXTag"},2051:{n:"DBQueryExt"},2052:{n:"ExtString"},2053:{n:"TxtQry"},2054:{n:"Qsir"},2055:{n:"Qsif"},2056:{n:"RRDTQSIF"},2057:{n:"BOF",f:ga},2058:{n:"OleDbConn"},2059:{n:"WOpt"},2060:{n:"SXViewEx"},2061:{n:"SXTH"},2062:{n:"SXPIEx"},2063:{n:"SXVDTEx"},2064:{n:"SXViewEx9"},2066:{n:"ContinueFrt"},2067:{n:"RealTimeData"},2128:{n:"ChartFrtInfo"},2129:{n:"FrtWrapper"},2130:{n:"StartBlock"},2131:{n:"EndBlock"},2132:{n:"StartObject"},2133:{n:"EndObject"},2134:{n:"CatLab"},2135:{n:"YMult"},2136:{n:"SXViewLink"},2137:{n:"PivotChartBits"},2138:{n:"FrtFontList"},2146:{n:"SheetExt"},2147:{n:"BookExt",r:12},2148:{n:"SXAddl"},2149:{n:"CrErr"},2150:{n:"HFPicture"},2151:{n:"FeatHdr",f:zn},2152:{n:"Feat"},2154:{n:"DataLabExt"},2155:{n:"DataLabExtContents"},2156:{n:"CellWatch"},2161:{n:"FeatHdr11"},2162:{n:"Feature11"},2164:{n:"DropDownObjIds"},2165:{n:"ContinueFrt11"},2166:{n:"DConn"},2167:{n:"List12"},2168:{n:"Feature12"},2169:{n:"CondFmt12"},2170:{n:"CF12"},2171:{n:"CFEx"},2172:{n:"XFCRC",f:function(e){e.l+=2;var t={cxfs:0,crc:0};return t.cxfs=e.read_shift(2),t.crc=e.read_shift(4),t},r:12},2173:{n:"XFExt",f:function(e,t){e.l,e.l+=2;var r=e.read_shift(2);e.l+=2;for(var n=e.read_shift(2),a=[];0=E){if(t.WTF)throw new Error("Range "+(u["!ref"]||"A1")+" exceeds format limit A1:IV16384");w.e.c=Math.min(w.e.c,255),w.e.r=Math.min(w.e.c,E-1)}bc(f,2057,ma(0,16,t)),bc(f,"CalcMode",Xn(1)),bc(f,"CalcCount",Xn(100)),bc(f,"CalcRefMode",Wn(!0)),bc(f,"CalcIter",Wn(!1)),bc(f,"CalcDelta",Ir(.001)),bc(f,"CalcSaveRecalc",Wn(!0)),bc(f,"PrintRowCol",Wn(!1)),bc(f,"PrintGrid",Wn(!1)),bc(f,"GridSet",Xn(1)),bc(f,"Guts",(a=[0,0],(i=zt(8)).write_shift(4,0),i.write_shift(2,a[0]?a[0]+1:0),i.write_shift(2,a[1]?a[1]+1:0),i)),bc(f,"HCenter",Wn(!1)),bc(f,"VCenter",Wn(!1)),m&&Sc(f,u["!cols"]),bc(f,512,(s=w,l=8!=(o=t).biff&&o.biff?2:4,(c=zt(2*l+6)).write_shift(l,s.s.r),c.write_shift(l,s.e.r+1),c.write_shift(2,s.s.c),c.write_shift(2,s.e.c+1),c.write_shift(2,0),c)),m&&(u["!links"]=[]);for(var C=w.s.r;C<=w.e.r;++C){b=$t(C);for(var S=w.s.c;S<=w.e.c;++S){C===w.s.r&&(v[S]=qt(S)),n=v[S]+b;var _=g?(u[C]||[])[S]:u[n];_&&(_c(f,_,C,S,t),m&&_.l&&u["!links"].push([n,_.l]))}}var A,y,B,k,T,x,R=p.CodeName||p.name||h;return m&&bc(f,"Window2",(A=(d.Views||[])[0],y=zt(18),B=1718,A&&A.RTL&&(B|=64),y.write_shift(2,B),y.write_shift(4,0),y.write_shift(4,64),y.write_shift(4,0),y.write_shift(4,0),y)),m&&(u["!merges"]||[]).length&&bc(f,"MergeCells",function(e){var t=zt(2+8*e.length);t.write_shift(2,e.length);for(var r=0;r/g,"")).match(/");var i=e.match(/<\/table/i),s=a.index,o=i&&i.index||e.length,l=function(e,t,r){if(I||"string"==typeof t)return e.split(t);for(var n=e.split(t),a=[n[0]],i=1;i]*>)/i,""),c=-1,f=0,h=0,u=0,d={s:{r:1e7,c:1e7},e:{r:0,c:0}},p=[];for(s=0;s/i);for(o=0;o"));)w=w.slice(E+1);for(var C=0;C")));u=_.colspan?+_.colspan:1,(1<(h=+_.rowspan)||1c&&(d.s.r=c),d.e.rf&&(d.s.c=f),d.e.cr||a[c].s.c>s||a[c].e.r'+u+"":h&&(d["data-t"]=h&&h.t||"z",null!=h.v&&(d["data-v"]=h.v),null!=h.z&&(d["data-z"]=h.z),h.l&&"#"!=(h.l.Target||"#").charAt(0)&&(u=''+u+"")),d.id=(n.id||"sjs")+"-"+f,i.push(tt("td",u,d))}}return""+i.join("")+""}function c(e,t,r){return[].join("")+""}var f='SheetJS Table Export',h="";return{to_workbook:function(e,r){var t=e.match(/[\s\S]*?<\/table>/gi);if(!t||0==t.length)throw new Error("Invalid HTML: could not find
");if(1==t.length)return ir(a(t[0],r),r);var n=xf.book_new();return t.forEach(function(e,t){xf.book_append_sheet(n,a(e,r),"Sheet"+(t+1))}),n},to_sheet:a,_row:l,BEGIN:f,END:h,_preamble:c,from_sheet:function(e,t){var r=t||{},n=null!=r.header?r.header:f,a=null!=r.footer?r.footer:h,i=[n],s=er(e["!ref"]);r.dense=Array.isArray(e),i.push(c(0,0,r));for(var o=s.s.r;o<=s.e.r;++o)i.push(l(e,s,o,r));return i.push("
"+a),i.join("")}}}();function Tc(e,t,r){var n=r||{};null!=ue&&(n.dense=ue);var a=0,i=0;if(null!=n.origin)if("number"==typeof n.origin)a=n.origin;else{var s="string"==typeof n.origin?Jt(n.origin):n.origin;a=s.r,i=s.c}var o=t.getElementsByTagName("tr"),l=Math.min(n.sheetRows||1e7,o.length),c={s:{r:0,c:0},e:{r:a,c:i}};if(e["!ref"]){var f=er(e["!ref"]);c.s.r=Math.min(c.s.r,f.s.r),c.s.c=Math.min(c.s.c,f.s.c),c.e.r=Math.max(c.e.r,f.e.r),c.e.c=Math.max(c.e.c,f.e.c),-1==a&&(c.e.r=a=f.e.r+1)}var h=[],u=0,d=e["!rows"]||(e["!rows"]=[]),p=0,g=0,m=0,b=0,v=0,w=0;for(e["!cols"]||(e["!cols"]=[]);p/gm,"").replace(//gm,"");o=ql.exec(h);)switch(o[3]=o[3].replace(/_.*$/,"")){case"table":case"工作表":"/"===o[1]?(y.e.c>=y.s.c&&y.e.r>=y.s.r?v["!ref"]=tr(y):v["!ref"]="A1:A1",0y.e.c&&(y.e.c=A),Ay.e.r&&(y.e.r=X),L=[],M={},l={t:(w=Se(o[0],!1))["数据类型"]||w["value-type"],v:null},r.cellFormula)if(w.formula&&(w.formula=Te(w.formula)),w["number-matrix-columns-spanned"]&&w["number-matrix-rows-spanned"]&&(x={s:{r:_,c:A},e:{r:_+(parseInt(w["number-matrix-rows-spanned"],10)||0)-1,c:A+(parseInt(w["number-matrix-columns-spanned"],10)||0)-1}},l.F=tr(x),D.push([x,l.F])),w.formula)l.f=bo(w.formula);else for(V=0;V=D[V][0].s.r&&_<=D[V][0].e.r&&A>=D[V][0].s.c&&A<=D[V][0].e.c&&(l.F=D[V][1]);switch((w["number-columns-spanned"]||w["number-rows-spanned"])&&(x={s:{r:_,c:A},e:{r:_+(parseInt(w["number-rows-spanned"],10)||0)-1,c:A+(parseInt(w["number-columns-spanned"],10)||0)-1}},T.push(x)),w["number-columns-repeated"]&&(O=parseInt(w["number-columns-repeated"],10)),l.t){case"boolean":l.t="b",l.v=Le(w["boolean-value"]);break;case"float":case"percentage":case"currency":l.t="n",l.v=parseFloat(w.value);break;case"date":l.t="d",l.v=be(w["date-value"]),r.cellDates||(l.t="n",l.v=Z(l.v)),l.z="m/d/yy";break;case"time":l.t="n",l.v=J(w["time-value"])/86400,r.cellDates&&(l.t="d",l.v=q(l.v)),l.z="HH:MM:SS";break;case"number":l.t="n",l.v=parseFloat(w["数据数值"]);break;default:if("string"!==l.t&&"text"!==l.t&&l.t)throw new Error("Unsupported value type "+l.t);l.t="s",null!=w["string-value"]&&(E=Te(w["string-value"]),S=[])}}else{if(H=!1,"s"===l.t&&(l.v=E||"",S.length&&(l.R=S),H=0==C),P.Target&&(l.l=P),0"===o[0].slice(-2))break;if("/"===o[1])switch(u[u.length-1][0]){case"number-style":case"date-style":case"time-style":p+=h.slice(g,o.index)}else g=o.index+o[0].length;break;case"named-range":N=vo((a=Se(o[0],!1))["cell-range-address"]);var j={Name:a.name,Ref:N[0]+"!"+N[1]};W&&(j.Sheet=b.length),F.Names.push(j);break;case"text-content":case"text-properties":case"embedded-text":break;case"body":case"电子表格":case"forms":case"table-column":case"table-header-rows":case"table-rows":case"table-column-group":case"table-header-columns":case"table-columns":case"null-date":case"graphic-properties":case"calculation-settings":case"named-expressions":case"label-range":case"label-ranges":case"named-expression":case"sort":case"sort-by":case"sort-groups":case"tab":case"line-break":case"span":break;case"p":case"文本串":if(-1<["master-styles"].indexOf(u[u.length-1][0]))break;if("/"!==o[1]||w&&w["string-value"])Se(o[0],!1),C=o.index+o[0].length;else{var Y=(c=h.slice(C,o.index),f=void 0,f=c.replace(/[\t\r\n]/g," ").trim().replace(/ +/g," ").replace(//g," ").replace(//g,function(e,t){return Array(parseInt(t,10)+1).join(" ")}).replace(/]*\/>/g,"\t").replace(//g,"\n"),[Te(f.replace(/<[^>]*>/g,""))]);E=(0",'',"",'',"",'',"",""].join(""),Nc=""+Pc+"",function(){return Y+Nc}),zc=(Lc=" \n",Mc=function(e,t,r){var n=[];n.push(' \n');var a=0,i=0,s=er(e["!ref"]||"A1"),o=e["!merges"]||[],l=0,c=Array.isArray(e);if(e["!cols"])for(i=0;i<=s.e.c;++i)n.push(" \n");var f="",h=e["!rows"]||[];for(a=0;a\n");for(;a<=s.e.r;++a){for(f=h[a]?' table:style-name="ro'+h[a].ods+'"':"",n.push(" \n"),i=0;ii||o[l].s.r>a||o[l].e.c\n");else{var g=Qt({r:a,c:i}),m=c?(e[a]||[])[i]:e[g];if(m&&m.f&&(d["table:formula"]=Ie(("of:="+m.f.replace(Cs,"$1[.$2$3$4$5]").replace(/\]:\[/g,":")).replace(/;/g,"|").replace(/,/g,";")),m.F&&m.F.slice(0,g.length)==g)){var b=er(m.F);d["table:number-matrix-columns-spanned"]=b.e.c-b.s.c+1,d["table:number-matrix-rows-spanned"]=b.e.r-b.s.r+1}if(m){switch(m.t){case"b":p=m.v?"TRUE":"FALSE",d["office:value-type"]="boolean",d["office:boolean-value"]=m.v?"true":"false";break;case"n":p=m.w||String(m.v||0),d["office:value-type"]="float",d["office:value"]=m.v||0;break;case"s":case"str":p=null==m.v?"":m.v,d["office:value-type"]="string";break;case"d":p=m.w||be(m.v).toISOString(),d["office:value-type"]="date",d["office:date-value"]=be(m.v).toISOString(),d["table:style-name"]="ce1";break;default:n.push(Lc);continue}var v=Ie(p).replace(/ +/g,function(e){return''}).replace(/\t/g,"").replace(/\n/g,"").replace(/^ /,"").replace(/ $/,"");if(m.l&&m.l.Target){var w=m.l.Target;"#"==(w="#"==w.charAt(0)?"#"+w.slice(1).replace(/\./,"!"):w).charAt(0)||w.match(/^\w+:/)||(w="../"+w),v=tt("text:a",v,{"xlink:href":w.replace(/&/g,"&")})}n.push(" "+tt("table:table-cell",tt("text:p",v,{}),d)+"\n")}else n.push(Lc)}}n.push(" \n")}return n.push(" \n"),n.join("")},function(e,t){var r=[Y],n=et({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),a=et({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});"fods"==t.bookType?(r.push("\n"),r.push(hn().replace(/office:document-meta/g,"office:meta"))):r.push("\n"),function(a,t){a.push(" \n"),a.push(' \n'),a.push(' \n'),a.push(" /\n"),a.push(' \n'),a.push(" /\n"),a.push(" \n"),a.push(" \n");var i=0;t.SheetNames.map(function(e){return t.Sheets[e]}).forEach(function(e){if(e&&e["!cols"])for(var t=0;t\n'),a.push(' \n'),a.push(" \n"),++i}});var n=0;t.SheetNames.map(function(e){return t.Sheets[e]}).forEach(function(e){if(e&&e["!rows"])for(var t=0;t\n'),a.push(' \n'),a.push(" \n"),++n}}),a.push(' \n'),a.push(' \n'),a.push(" \n"),a.push(' \n'),a.push(" \n")}(r,e),r.push(" \n"),r.push(" \n");for(var i=0;i!=e.SheetNames.length;++i)r.push(Mc(e.Sheets[e.SheetNames[i]],e,i));return r.push(" \n"),r.push(" \n"),"fods"==t.bookType?r.push(""):r.push(""),r.join("")});function Hc(e,t){if("fods"==t.bookType)return zc(e,t);var r=X(),n="",a=[],i=[];return V(r,n="mimetype","application/vnd.oasis.opendocument.spreadsheet"),V(r,n="content.xml",zc(e,t)),a.push([n,"text/xml"]),i.push([n,"ContentFile"]),V(r,n="styles.xml",Uc(e,t)),a.push([n,"text/xml"]),i.push([n,"StylesFile"]),V(r,n="meta.xml",Y+hn()),a.push([n,"text/xml"]),i.push([n,"MetadataFile"]),V(r,n="manifest.rdf",function(e){var t,r,n=[Y];n.push('\n');for(var a=0;a!=e.length;++a)n.push(cn(e[a][0],e[a][1])),n.push((t="",r=e[a][0],[' \n',' \n'," \n"].join("")));return n.push(cn("","Document","pkg")),n.push(""),n.join("")}(i)),a.push([n,"application/rdf+xml"]),V(r,n="META-INF/manifest.xml",function(e){var t=[Y];t.push('\n'),t.push(' \n');for(var r=0;r\n');return t.push(""),t.join("")}(a)),r}var Wc=function(){var r,l=Object.defineProperty,c=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,h=Object.prototype.hasOwnProperty,e=(r="undefined"!=typeof WeakMap?new WeakMap:0,function(e,t){return r&&r.get(e)||(t=function(e,t,r,n){if(t&&"object"==typeof t||"function"==typeof t)for(var a,i=f(t),s=0,o=i.length;s>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135)>>>24};function m(e,t){var r=t?t[0]:0,n=127&e[r];e:if(128<=e[r++]){if(n|=(127&e[r])<<7,e[r++]<128)break e;if(n|=(127&e[r])<<14,e[r++]<128)break e;if(n|=(127&e[r])<<21,e[r++]<128)break e;if(n+=(127&e[r])*Math.pow(2,28),++r,e[r++]<128)break e;if(n+=(127&e[r])*Math.pow(2,35),++r,e[r++]<128)break e;if(n+=(127&e[r])*Math.pow(2,42),++r,e[r++]<128)break e}return t&&(t[0]=r),n}function b(e){var t=0,r=127&e[t];e:if(128<=e[t++]){if(r|=(127&e[t])<<7,e[t++]<128)break e;if(r|=(127&e[t])<<14,e[t++]<128)break e;if(r|=(127&e[t])<<21,e[t++]<128)break e;r|=(127&e[t])<<28}return r}function v(e){for(var t=[],r=[0];r[0]>2&7),s=(224&t[r[0]++])<<3,s|=t[r[0]++]):(o=1+(t[r[0]++]>>2),2==i?(s=t[r[0]]|t[r[0]+1]<<8,r[0]+=2):(s=(t[r[0]]|t[r[0]+1]<<8|t[r[0]+2]<<16|t[r[0]+3]<<24)>>>0,r[0]+=4)),a=[p(a)],0==s)throw new Error("Invalid offset 0");if(s>a[0].length)throw new Error("Invalid offset beyond length");if(s<=o)for(a.push(a[0].slice(-s)),o-=s;o>=a[a.length-1].length;)a.push(a[a.length-1]),o-=a[a.length-1].length;a.push(a[0].slice(-s,-s+o))}else{var l=t[r[0]++]>>2;if(l<60)++l;else{var c=l-59;l=t[r[0]],1>>=0,l++,r[0]+=c}a.push(t.slice(r[0],r[0]+l)),r[0]+=l}}var f=p(a);if(f.length!=n)throw new Error("Unexpected length: ".concat(f.length," != ").concat(n));return f}function E(e,t,r){var n=e[0];switch(n){case 3:case 4:return function(e,t,r,n){var a,i=d(e),s=e[4==n?1:2],o=i.getUint32(4,!0),l=12+4*g(3470&o),c=-1,f=-1,h=NaN,u=new Date(2001,0,1);switch(512&o&&(c=i.getUint32(l,!0),l+=4),l+=4*g(12288&o),16&o&&(f=i.getUint32(l,!0),l+=4),32&o&&(h=i.getFloat64(l,!0),l+=8),64&o&&(u.setTime(u.getTime()+1e3*i.getFloat64(l,!0)),l+=8),s){case 0:break;case 2:a={t:"n",v:h};break;case 3:a={t:"s",v:t[f]};break;case 5:a={t:"d",v:u};break;case 6:a={t:"b",v:0>>0){if(t)throw new Error("Document has multiple roots");t=e}})}),!t)throw new Error("Cannot find Document root");return function(s,e){var o=a();if(w(v(e.data)[1],A).forEach(function(e){s[e].forEach(function(e){var t,r,n,a;if(2==b(e.meta[1][0].data)){var i=(t=s,n=v(e.data),a={name:(null==(r=n[1])?void 0:r[0])?u(n[1][0].data):"",sheets:[]},w(n[2],A).forEach(function(e){t[e].forEach(function(e){6e3==b(e.meta[1][0].data)&&a.sheets.push(function(e,t){var r=v(t.data),n={"!ref":"A1"},a=e[A(r[2][0].data)],i=b(a[0].meta[1][0].data);if(6001!=i)throw new Error("6000 unexpected reference to ".concat(i));return function(i,e,s){var t,r=v(e.data),n={s:{r:0,c:0},e:{r:0,c:0}};if(n.e.r=(b(r[6][0].data)>>>0)-1,n.e.r<0)throw new Error("Invalid row varint ".concat(r[6][0].data));if(n.e.c=(b(r[7][0].data)>>>0)-1,n.e.c<0)throw new Error("Invalid col varint ".concat(r[7][0].data));s["!ref"]=S(n);var a=v(r[4][0].data),o=y(i,i[A(a[4][0].data)][0]),l=(null==(t=a[17])?void 0:t[0])?y(i,i[A(a[17][0].data)][0]):[],c=v(a[3][0].data),f=[];c[1].forEach(function(e){var t,r=v(e.data),n=i[A(r[2][0].data)][0],a=b(n.meta[1][0].data);if(6002!=a)throw new Error("6001 unexpected reference to ".concat(a));f.push({id:b(r[1][0].data),ref:(t=n,w(v(t.data)[5],B).reduce(function(r,n){return r[n.R]||(r[n.R]=[]),n.cells.forEach(function(e,t){if(r[n.R][t])throw new Error("Duplicate cell r=".concat(n.R," c=").concat(t));r[n.R][t]=e}),r},[]))})}),f.forEach(function(e){e.ref.forEach(function(e,a){e.forEach(function(e,t){var r=C({r:a,c:t}),n=E(e,o,l);n&&(s[r]=n)})})})}(e,a[0],n),n}(t,e))})}),a);i.sheets.forEach(function(e){_(o,e,i.name)})}})}),0==o.SheetNames.length)throw new Error("Empty NUMBERS file");return o}(n,t)};function A(e){return m(v(e)[1][0].data)}function y(o,e){var t=v(e.data),l=b(t[1][0].data),r=t[3],c=[];return(r||[]).forEach(function(e){var t=v(e.data),r=b(t[1][0].data)>>>0;switch(l){case 1:c[r]=u(t[3][0].data);break;case 8:var n=v(o[A(t[9][0].data)][0].data),a=o[A(n[1][0].data)][0],i=b(a.meta[1][0].data);if(2001!=i)throw new Error("2000 unexpected reference to ".concat(i));var s=v(a.data);c[r]=s[3].map(function(e){return u(e.data)}).join("")}}),c}function B(e){for(var t=v(e),r=b(t[1][0].data)>>>0,n=t[3][0].data,a=d(t[4][0].data),i=[],s=0;sn.length||(i[s]=n.subarray(o,a.getUint16(2*s+2,!0)))}return{R:r,cells:i}}return e(t)}();function Vc(n){return function(e){for(var t=0;t!=n.length;++t){var r=n[t];void 0===e[r[0]]&&(e[r[0]]=r[1]),"n"===r[2]&&(e[r[0]]=Number(e[r[0]]))}}}var Xc=function(e){Vc([["cellNF",!1],["cellHTML",!0],["cellFormula",!0],["cellStyles",!1],["cellText",!0],["cellDates",!1],["sheetStubs",!1],["sheetRows",0,"n"],["bookDeps",!1],["bookSheets",!1],["bookProps",!1],["bookFiles",!1],["bookVBA",!1],["password",""],["WTF",!1]])(e)},Gc=Vc([["cellDates",!1],["bookSST",!1],["bookType","xlsx"],["compression",!1],["WTF",!1]]);function jc(r,e){if(!r)return 0;try{r=e.map(function(e){return e.id||(e.id=e.strRelID),[e.name,r["!id"][e.id].Target,(t=r["!id"][e.id].Type,-1]*r:id="([^"]*)"/)||["",""])[1];return t["!id"][r].Target}(H(n,p,!0),rn(H(n,g,!0),p)),p),b=tn(m);u=gl(H(n,m,!0),0,0,rn(H(n,b,!0),m),0,u);break;case"macro":E=a,c[l],E.slice(-4),u={"!type":"macro"};break;case"dialog":w=a,c[l],w.slice(-4),u={"!type":"dialog"};break;default:throw new Error("Unrecognized sheet type "+i)}r[l]=u;var v=[];c&&c[l]&&me(c[l]).forEach(function(e){if(c[l][e].Type==en.CMNT){var t=j(c[l][e].Target,a);if(!(v=Nl(z(n,t,!0),t,f))||!v.length)return;i=u,r=v,o=Array.isArray(i),r.forEach(function(e){var t=Jt(e.ref);if(!(s=o?(i[t.r]||(i[t.r]=[]),i[t.r][t.c]):i[e.ref])){s={t:"z"},o?i[t.r][t.c]=s:i[e.ref]=s;var r=rr(i["!ref"]||"BDWGO1000001:A1");r.s.r>t.r&&(r.s.r=t.r),r.e.rt.c&&(r.s.c=t.c),r.e.c]*>([\\s\\S]*?)"));r&&0":n=null;break;default:if(0===s.indexOf(""),c=l[0].slice(4),f=l[1];switch(c){case"lpstr":case"bstr":case"lpwstr":r[n]=Te(f);break;case"bool":r[n]=Le(f);break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":r[n]=parseInt(f,10);break;case"r4":case"r8":case"decimal":r[n]=parseFloat(f);break;case"filetime":case"date":r[n]=be(f);break;case"cy":case"error":r[n]=Te(f);break;default:if("/"==c.slice(-1))break;t.WTF}}else if("",n[1]=n[1].replace("/>",">")),n.join("")}(e.Props,t)),a.coreprops.push(g),on(t.rels,2,g,en.CORE_PROPS),g="docProps/app.xml",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var b=[],v=0;vWorksheets")+o("vt:variant",o("vt:i4",String(i.Worksheets))),{size:2,baseType:"variant"})),s[s.length]=o("TitlesOfParts",o("vt:vector",i.SheetNames.map(function(e){return""+Ie(e)+""}).join(""),{size:i.Worksheets,baseType:"lpstr"})),2",s[1]=s[1].replace("/>",">")),s.join(""))),a.extprops.push(g),on(t.rels,3,g,en.EXT_PROPS),e.Custprops!==e.Props&&0",">")),a.join("")}(a,t)),V(p,"_rels/.rels",an(t.rels)),V(p,"xl/_rels/workbook."+r+".rels",an(t.wbrels)),delete t.revssf,delete t.ssf,p}function Jc(e,t){var r="";switch((t||{}).type||"base64"){case"buffer":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];case"base64":r=Q.decode(e.slice(0,12));break;case"binary":r=e;break;case"array":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];default:throw new Error("Unrecognized type "+(t&&t.type||"undefined"))}return[r.charCodeAt(0),r.charCodeAt(1),r.charCodeAt(2),r.charCodeAt(3),r.charCodeAt(4),r.charCodeAt(5),r.charCodeAt(6),r.charCodeAt(7)]}function Qc(e,t){var r=0;e:for(;rt)return t;throw new Error("Cannot find sheet # "+t)}if("string"!=typeof t)throw new Error("Cannot find sheet |"+t+"|");var r=e.SheetNames.indexOf(t);if(-1c.e.r)return r.push(null);for(;m<=c.e.r;){var e=Cf(t,c,m,d,a,s,g,f);if(++m,!1===e.isempty||(1===a?!1!==f.blankrows:f.blankrows)){r.push(e.row);break}}},r},to_html:function(e,t){var r=w(),n=t||{},a=null!=n.header?n.header:kc.BEGIN,i=null!=n.footer?n.footer:kc.END;r.push(a);var s=er(e["!ref"]);n.dense=Array.isArray(e),r.push(kc._preamble(e,s,n));var o=s.s.r,l=!1;return r._read=function(){if(o>s.e.r)return l||(l=!0,r.push(""+i)),r.push(null);for(;o<=s.e.r;){r.push(kc._row(e,s,o,n)),++o;break}},r},to_csv:function(e,t){var r=w(),n=null==t?{}:t;if(null==e||null==e["!ref"])return r.push(null),r;var a=rr(e["!ref"]),i=void 0!==n.FS?n.FS:",",s=i.charCodeAt(0),o=void 0!==n.RS?n.RS:"\n",l=o.charCodeAt(0),c=new RegExp(("|"==i?"\\|":i)+"+$"),f="",h=[];n.dense=Array.isArray(e);for(var u=n.skipHidden&&e["!cols"]||[],d=n.skipHidden&&e["!rows"]||[],p=a.s.c;p<=a.e.c;++p)(u[p]||{}).hidden||(h[p]=qt(p));var g=a.s.r,m=!1;return r._read=function(){if(!m)return m=!0,r.push("\ufeff");for(;g<=a.e.r;)if(!(d[++g-1]||{}).hidden&&null!=(f=Af(e,a,g-1,h,s,l,i,n))){n.strip&&(f=f.replace(c,"")),r.push(f+o);break}return g>a.e.r?r.push(null):void 0},r}})}}(),n.parse_xlscfb=hc,n.parse_zip=$c,n.read=tf,n.readFile=rf,n.readFileSync=rf,n.write=vf,n.writeFile=Ef,n.writeFileSync=Ef,n.writeFileAsync=function(e,t,r,n){var a=r||{};a.type="file",a.file=e,wf(a),a.type="buffer";var i=n;return i instanceof Function||(i=r),v.writeFile(e,vf(t,a),i)},n.utils=xf,n.SSF=de,void 0!==ge&&(n.CFB=ge)}(e),"undefined"!=typeof window&&!window.XLSX)try{window.XLSX={}}catch(e){}});(Ht=Vt)&&Ht.__esModule&&Object.prototype.hasOwnProperty.call(Ht,"default")&&Ht.default;var Xt=Vt.utils,Gt=Vt.write,jt=Vt.read,Yt=function(e,t){this.sheetNames=e,this.sheets=t,this.SheetNames=e,this.Sheets=t};return{excel2json:function(e,h,u){void 0===u&&(u="");var t=new FileReader;if(e&&0!==e.length){var r=e[0];t.onerror=function(e){},t.onload=function(e){for(var t="",r=new Uint8Array(e.target.result),n=r.byteLength,a=0;a= 6.0.0", "npm": ">= 4.0.0" } -} +} \ No newline at end of file