1(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;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 require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ 2var AV = (window.AV); 3var tables = require('./tables'); 4 5var ADTSDemuxer = AV.Demuxer.extend(function() { 6 AV.Demuxer.register(this); 7 8 this.probe = function(stream) { 9 var offset = stream.offset; 10 11 // attempt to find ADTS syncword 12 while (stream.available(2)) { 13 if ((stream.readUInt16() & 0xfff6) === 0xfff0) { 14 stream.seek(offset); 15 return true; 16 } 17 } 18 19 stream.seek(offset); 20 return false; 21 }; 22 23 this.prototype.init = function() { 24 this.bitstream = new AV.Bitstream(this.stream); 25 }; 26 27 // Reads an ADTS header 28 // See http://wiki.multimedia.cx/index.php?title=ADTS 29 this.readHeader = function(stream) { 30 if (stream.read(12) !== 0xfff) 31 throw new Error('Invalid ADTS header.'); 32 33 var ret = {}; 34 stream.advance(3); // mpeg version and layer 35 var protectionAbsent = !!stream.read(1); 36 37 ret.profile = stream.read(2) + 1; 38 ret.samplingIndex = stream.read(4); 39 40 stream.advance(1); // private 41 ret.chanConfig = stream.read(3); 42 stream.advance(4); // original/copy, home, copywrite, and copywrite start 43 44 ret.frameLength = stream.read(13); 45 stream.advance(11); // fullness 46 47 ret.numFrames = stream.read(2) + 1; 48 49 if (!protectionAbsent) 50 stream.advance(16); 51 52 return ret; 53 }; 54 55 this.prototype.readChunk = function() { 56 if (!this.sentHeader) { 57 var offset = this.stream.offset; 58 var header = ADTSDemuxer.readHeader(this.bitstream); 59 60 this.emit('format', { 61 formatID: 'aac ', 62 sampleRate: tables.SAMPLE_RATES[header.samplingIndex], 63 channelsPerFrame: header.chanConfig, 64 bitsPerChannel: 16 65 }); 66 67 // generate a magic cookie from the ADTS header 68 var cookie = new Uint8Array(2); 69 cookie[0] = (header.profile << 3) | ((header.samplingIndex >> 1) & 7); 70 cookie[1] = ((header.samplingIndex & 1) << 7) | (header.chanConfig << 3); 71 this.emit('cookie', new AV.Buffer(cookie)); 72 73 this.stream.seek(offset); 74 this.sentHeader = true; 75 } 76 77 while (this.stream.available(1)) { 78 var buffer = this.stream.readSingleBuffer(this.stream.remainingBytes()); 79 this.emit('data', buffer); 80 } 81 }; 82}); 83},{"./tables":11}],2:[function(require,module,exports){ 84/* 85 * AAC.js - Advanced Audio Coding decoder in JavaScript 86 * Created by Devon Govett 87 * Copyright (c) 2012, Official.fm Labs 88 * 89 * AAC.js is free software; you can redistribute it and/or modify it 90 * under the terms of the GNU Lesser General Public License as 91 * published by the Free Software Foundation; either version 3 of the 92 * License, or (at your option) any later version. 93 * 94 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 95 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 96 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 97 * Public License for more details. 98 * 99 * You should have received a copy of the GNU Lesser General Public 100 * License along with this library. 101 * If not, see <http://www.gnu.org/licenses/>. 102 */ 103 104var ICStream = require('./ics'); 105var Huffman = require('./huffman'); 106 107// Channel Coupling Element 108function CCEElement(config) { 109 this.ics = new ICStream(config); 110 this.channelPair = new Array(8); 111 this.idSelect = new Int32Array(8); 112 this.chSelect = new Int32Array(8); 113 this.gain = new Array(16); 114} 115 116CCEElement.BEFORE_TNS = 0; 117CCEElement.AFTER_TNS = 1; 118CCEElement.AFTER_IMDCT = 2; 119 120const CCE_SCALE = new Float32Array([ 121 1.09050773266525765921, 122 1.18920711500272106672, 123 1.4142135623730950488016887, 124 2.0 125]); 126 127CCEElement.prototype = { 128 decode: function(stream, config) { 129 var channelPair = this.channelPair, 130 idSelect = this.idSelect, 131 chSelect = this.chSelect; 132 133 this.couplingPoint = 2 * stream.read(1); 134 this.coupledCount = stream.read(3); 135 136 var gainCount = 0; 137 for (var i = 0; i <= this.coupledCount; i++) { 138 gainCount++; 139 channelPair[i] = stream.read(1); 140 idSelect[i] = stream.read(4); 141 142 if (channelPair[i]) { 143 chSelect[i] = stream.read(2); 144 if (chSelect[i] === 3) 145 gainCount++; 146 147 } else { 148 chSelect[i] = 2; 149 } 150 } 151 152 this.couplingPoint += stream.read(1); 153 this.couplingPoint |= (this.couplingPoint >>> 1); 154 155 var sign = stream.read(1), 156 scale = CCE_SCALE[stream.read(2)]; 157 158 this.ics.decode(stream, config, false); 159 160 var groupCount = this.ics.info.groupCount, 161 maxSFB = this.ics.info.maxSFB, 162 bandTypes = this.ics.bandTypes; 163 164 for (var i = 0; i < gainCount; i++) { 165 var idx = 0, 166 cge = 1, 167 gain = 0, 168 gainCache = 1; 169 170 if (i > 0) { 171 cge = this.couplingPoint === CCEElement.AFTER_IMDCT ? 1 : stream.read(1); 172 gain = cge ? Huffman.decodeScaleFactor(stream) - 60 : 0; 173 gainCache = Math.pow(scale, -gain); 174 } 175 176 var gain_i = this.gain[i] = new Float32Array(120); 177 178 if (this.couplingPoint === CCEElement.AFTER_IMDCT) { 179 gain_i[0] = gainCache; 180 } else { 181 for (var g = 0; g < groupCount; g++) { 182 for (var sfb = 0; sfb < maxSFB; sfb++) { 183 if (bandTypes[idx] !== ICStream.ZERO_BT) { 184 if (cge === 0) { 185 var t = Huffman.decodeScaleFactor(stream) - 60; 186 if (t !== 0) { 187 var s = 1; 188 t = gain += t; 189 if (sign) { 190 s -= 2 * (t * 0x1); 191 t >>>= 1; 192 } 193 gainCache = Math.pow(scale, -t) * s; 194 } 195 } 196 gain_i[idx++] = gainCache; 197 } 198 } 199 } 200 } 201 } 202 }, 203 204 applyIndependentCoupling: function(index, data) { 205 var gain = this.gain[index][0], 206 iqData = this.ics.data; 207 208 for (var i = 0; i < data.length; i++) { 209 data[i] += gain * iqData[i]; 210 } 211 }, 212 213 applyDependentCoupling: function(index, data) { 214 var info = this.ics.info, 215 swbOffsets = info.swbOffsets, 216 groupCount = info.groupCount, 217 maxSFB = info.maxSFB, 218 bandTypes = this.ics.bandTypes, 219 iqData = this.ics.data; 220 221 var idx = 0, 222 offset = 0, 223 gains = this.gain[index]; 224 225 for (var g = 0; g < groupCount; g++) { 226 var len = info.groupLength[g]; 227 228 for (var sfb = 0; sfb < maxSFB; sfb++, idx++) { 229 if (bandTypes[idx] !== ICStream.ZERO_BT) { 230 var gain = gains[idx]; 231 for (var group = 0; group < len; group++) { 232 for (var k = swbOffsets[sfb]; k < swbOffsets[swb + 1]; k++) { 233 data[offset + group * 128 + k] += gain * iqData[offset + group * 128 + k]; 234 } 235 } 236 } 237 } 238 239 offset += len * 128; 240 } 241 } 242}; 243 244module.exports = CCEElement; 245 246},{"./huffman":7,"./ics":8}],3:[function(require,module,exports){ 247/* 248 * AAC.js - Advanced Audio Coding decoder in JavaScript 249 * Created by Devon Govett 250 * Copyright (c) 2012, Official.fm Labs 251 * 252 * AAC.js is free software; you can redistribute it and/or modify it 253 * under the terms of the GNU Lesser General Public License as 254 * published by the Free Software Foundation; either version 3 of the 255 * License, or (at your option) any later version. 256 * 257 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 258 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 259 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 260 * Public License for more details. 261 * 262 * You should have received a copy of the GNU Lesser General Public 263 * License along with this library. 264 * If not, see <http://www.gnu.org/licenses/>. 265 */ 266 267var ICStream = require('./ics'); 268 269// Channel Pair Element 270function CPEElement(config) { 271 this.ms_used = []; 272 this.left = new ICStream(config); 273 this.right = new ICStream(config); 274} 275 276const MAX_MS_MASK = 128; 277 278const MASK_TYPE_ALL_0 = 0, 279 MASK_TYPE_USED = 1, 280 MASK_TYPE_ALL_1 = 2, 281 MASK_TYPE_RESERVED = 3; 282 283CPEElement.prototype.decode = function(stream, config) { 284 var left = this.left, 285 right = this.right, 286 ms_used = this.ms_used; 287 288 if (this.commonWindow = !!stream.read(1)) { 289 left.info.decode(stream, config, true); 290 right.info = left.info; 291 292 var mask = stream.read(2); 293 this.maskPresent = !!mask; 294 295 switch (mask) { 296 case MASK_TYPE_USED: 297 var len = left.info.groupCount * left.info.maxSFB; 298 for (var i = 0; i < len; i++) { 299 ms_used[i] = !!stream.read(1); 300 } 301 break; 302 303 case MASK_TYPE_ALL_0: 304 case MASK_TYPE_ALL_1: 305 var val = !!mask; 306 for (var i = 0; i < MAX_MS_MASK; i++) { 307 ms_used[i] = val; 308 } 309 break; 310 311 default: 312 throw new Error("Reserved ms mask type: " + mask); 313 } 314 } else { 315 for (var i = 0; i < MAX_MS_MASK; i++) 316 ms_used[i] = false; 317 } 318 319 left.decode(stream, config, this.commonWindow); 320 right.decode(stream, config, this.commonWindow); 321}; 322 323module.exports = CPEElement; 324 325},{"./ics":8}],4:[function(require,module,exports){ 326/* 327 * AAC.js - Advanced Audio Coding decoder in JavaScript 328 * Created by Devon Govett 329 * Copyright (c) 2012, Official.fm Labs 330 * 331 * AAC.js is free software; you can redistribute it and/or modify it 332 * under the terms of the GNU Lesser General Public License as 333 * published by the Free Software Foundation; either version 3 of the 334 * License, or (at your option) any later version. 335 * 336 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 337 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 338 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 339 * Public License for more details. 340 * 341 * You should have received a copy of the GNU Lesser General Public 342 * License along with this library. 343 * If not, see <http://www.gnu.org/licenses/>. 344 */ 345 346var AV = (window.AV); 347var ADTSDemuxer = require('./adts_demuxer'); 348var ICStream = require('./ics'); 349var CPEElement = require('./cpe'); 350var CCEElement = require('./cce'); 351var FilterBank = require('./filter_bank'); 352var tables = require('./tables'); 353 354var AACDecoder = AV.Decoder.extend(function() { 355 AV.Decoder.register('mp4a', this); 356 AV.Decoder.register('aac ', this); 357 358 // AAC profiles 359 const AOT_AAC_MAIN = 1, // no 360 AOT_AAC_LC = 2, // yes 361 AOT_AAC_LTP = 4, // no 362 AOT_ESCAPE = 31; 363 364 // Channel configurations 365 const CHANNEL_CONFIG_NONE = 0, 366 CHANNEL_CONFIG_MONO = 1, 367 CHANNEL_CONFIG_STEREO = 2, 368 CHANNEL_CONFIG_STEREO_PLUS_CENTER = 3, 369 CHANNEL_CONFIG_STEREO_PLUS_CENTER_PLUS_REAR_MONO = 4, 370 CHANNEL_CONFIG_FIVE = 5, 371 CHANNEL_CONFIG_FIVE_PLUS_ONE = 6, 372 CHANNEL_CONFIG_SEVEN_PLUS_ONE = 8; 373 374 this.prototype.init = function() { 375 this.format.floatingPoint = true; 376 } 377 378 this.prototype.setCookie = function(buffer) { 379 var data = AV.Stream.fromBuffer(buffer), 380 stream = new AV.Bitstream(data); 381 382 this.config = {}; 383 384 this.config.profile = stream.read(5); 385 if (this.config.profile === AOT_ESCAPE) 386 this.config.profile = 32 + stream.read(6); 387 388 this.config.sampleIndex = stream.read(4); 389 if (this.config.sampleIndex === 0x0f) { 390 this.config.sampleRate = stream.read(24); 391 for (var i = 0; i < tables.SAMPLE_RATES.length; i++) { 392 if (tables.SAMPLE_RATES[i] === this.config.sampleRate) { 393 this.config.sampleIndex = i; 394 break; 395 } 396 } 397 } else { 398 this.config.sampleRate = tables.SAMPLE_RATES[this.config.sampleIndex]; 399 } 400 401 this.config.chanConfig = stream.read(4); 402 this.format.channelsPerFrame = this.config.chanConfig; // sometimes m4a files encode this wrong 403 404 switch (this.config.profile) { 405 case AOT_AAC_MAIN: 406 case AOT_AAC_LC: 407 case AOT_AAC_LTP: 408 if (stream.read(1)) // frameLengthFlag 409 throw new Error('frameLengthFlag not supported'); 410 411 this.config.frameLength = 1024; 412 413 if (stream.read(1)) // dependsOnCoreCoder 414 stream.advance(14); // coreCoderDelay 415 416 if (stream.read(1)) { // extensionFlag 417 if (this.config.profile > 16) { // error resiliant profile 418 this.config.sectionDataResilience = stream.read(1); 419 this.config.scalefactorResilience = stream.read(1); 420 this.config.spectralDataResilience = stream.read(1); 421 } 422 423 stream.advance(1); 424 } 425 426 if (this.config.chanConfig === CHANNEL_CONFIG_NONE) { 427 stream.advance(4) // element_instance_tag 428 throw new Error('PCE unimplemented'); 429 } 430 431 break; 432 433 default: 434 throw new Error('AAC profile ' + this.config.profile + ' not supported.'); 435 } 436 437 this.filter_bank = new FilterBank(false, this.config.chanConfig); 438 this.ics = new ICStream(this.config); 439 this.cpe = new CPEElement(this.config); 440 this.cce = new CCEElement(this.config); 441 }; 442 443 const SCE_ELEMENT = 0, 444 CPE_ELEMENT = 1, 445 CCE_ELEMENT = 2, 446 LFE_ELEMENT = 3, 447 DSE_ELEMENT = 4, 448 PCE_ELEMENT = 5, 449 FIL_ELEMENT = 6, 450 END_ELEMENT = 7; 451 452 // The main decoding function. 453 this.prototype.readChunk = function() { 454 var stream = this.bitstream; 455 456 // check if there is an ADTS header, and read it if so 457 if (stream.peek(12) === 0xfff) 458 ADTSDemuxer.readHeader(stream); 459 460 this.cces = []; 461 var elements = [], 462 config = this.config, 463 frameLength = config.frameLength, 464 elementType = null; 465 466 while ((elementType = stream.read(3)) !== END_ELEMENT) { 467 var id = stream.read(4); 468 469 switch (elementType) { 470 // single channel and low frequency elements 471 case SCE_ELEMENT: 472 case LFE_ELEMENT: 473 var ics = this.ics; 474 ics.id = id; 475 elements.push(ics); 476 ics.decode(stream, config, false); 477 break; 478 479 // channel pair element 480 case CPE_ELEMENT: 481 var cpe = this.cpe; 482 cpe.id = id; 483 elements.push(cpe); 484 cpe.decode(stream, config); 485 break; 486 487 // channel coupling element 488 case CCE_ELEMENT: 489 var cce = this.cce; 490 this.cces.push(cce); 491 cce.decode(stream, config); 492 break; 493 494 // data-stream element 495 case DSE_ELEMENT: 496 var align = stream.read(1), 497 count = stream.read(8); 498 499 if (count === 255) 500 count += stream.read(8); 501 502 if (align) 503 stream.align(); 504 505 // skip for now... 506 stream.advance(count * 8); 507 break; 508 509 // program configuration element 510 case PCE_ELEMENT: 511 throw new Error("TODO: PCE_ELEMENT") 512 break; 513 514 // filler element 515 case FIL_ELEMENT: 516 if (id === 15) 517 id += stream.read(8) - 1; 518 519 // skip for now... 520 stream.advance(id * 8); 521 break; 522 523 default: 524 throw new Error('Unknown element') 525 } 526 } 527 528 stream.align(); 529 this.process(elements); 530 531 // Interleave channels 532 var data = this.data, 533 channels = data.length, 534 output = new Float32Array(frameLength * channels), 535 j = 0; 536 537 for (var k = 0; k < frameLength; k++) { 538 for (var i = 0; i < channels; i++) { 539 output[j++] = data[i][k] / 32768; 540 } 541 } 542 543 return output; 544 }; 545 546 this.prototype.process = function(elements) { 547 var channels = this.config.chanConfig; 548 549 // if (channels === 1 && psPresent) 550 // TODO: sbrPresent (2) 551 var mult = 1; 552 553 var len = mult * this.config.frameLength; 554 var data = this.data = []; 555 556 // Initialize channels 557 for (var i = 0; i < channels; i++) { 558 data[i] = new Float32Array(len); 559 } 560 561 var channel = 0; 562 for (var i = 0; i < elements.length && channel < channels; i++) { 563 var e = elements[i]; 564 565 if (e instanceof ICStream) { // SCE or LFE element 566 channel += this.processSingle(e, channel); 567 } else if (e instanceof CPEElement) { 568 this.processPair(e, channel); 569 channel += 2; 570 } else if (e instanceof CCEElement) { 571 channel++; 572 } else { 573 throw new Error("Unknown element found.") 574 } 575 } 576 }; 577 578 this.prototype.processSingle = function(element, channel) { 579 var profile = this.config.profile, 580 info = element.info, 581 data = element.data; 582 583 if (profile === AOT_AAC_MAIN) 584 throw new Error("Main prediction unimplemented"); 585 586 if (profile === AOT_AAC_LTP) 587 throw new Error("LTP prediction unimplemented"); 588 589 this.applyChannelCoupling(element, CCEElement.BEFORE_TNS, data, null); 590 591 if (element.tnsPresent) 592 element.tns.process(element, data, false); 593 594 this.applyChannelCoupling(element, CCEElement.AFTER_TNS, data, null); 595 596 // filterbank 597 this.filter_bank.process(info, data, this.data[channel], channel); 598 599 if (profile === AOT_AAC_LTP) 600 throw new Error("LTP prediction unimplemented"); 601 602 this.applyChannelCoupling(element, CCEElement.AFTER_IMDCT, this.data[channel], null); 603 604 if (element.gainPresent) 605 throw new Error("Gain control not implemented"); 606 607 if (this.sbrPresent) 608 throw new Error("SBR not implemented"); 609 610 return 1; 611 }; 612 613 this.prototype.processPair = function(element, channel) { 614 var profile = this.config.profile, 615 left = element.left, 616 right = element.right, 617 l_info = left.info, 618 r_info = right.info, 619 l_data = left.data, 620 r_data = right.data; 621 622 // Mid-side stereo 623 if (element.commonWindow && element.maskPresent) 624 this.processMS(element, l_data, r_data); 625 626 if (profile === AOT_AAC_MAIN) 627 throw new Error("Main prediction unimplemented"); 628 629 // Intensity stereo 630 this.processIS(element, l_data, r_data); 631 632 if (profile === AOT_AAC_LTP) 633 throw new Error("LTP prediction unimplemented"); 634 635 this.applyChannelCoupling(element, CCEElement.BEFORE_TNS, l_data, r_data); 636 637 if (left.tnsPresent) 638 left.tns.process(left, l_data, false); 639 640 if (right.tnsPresent) 641 right.tns.process(right, r_data, false); 642 643 this.applyChannelCoupling(element, CCEElement.AFTER_TNS, l_data, r_data); 644 645 // filterbank 646 this.filter_bank.process(l_info, l_data, this.data[channel], channel); 647 this.filter_bank.process(r_info, r_data, this.data[channel + 1], channel + 1); 648 649 if (profile === AOT_AAC_LTP) 650 throw new Error("LTP prediction unimplemented"); 651 652 this.applyChannelCoupling(element, CCEElement.AFTER_IMDCT, this.data[channel], this.data[channel + 1]); 653 654 if (left.gainPresent) 655 throw new Error("Gain control not implemented"); 656 657 if (right.gainPresent) 658 throw new Error("Gain control not implemented"); 659 660 if (this.sbrPresent) 661 throw new Error("SBR not implemented"); 662 }; 663 664 // Intensity stereo 665 this.prototype.processIS = function(element, left, right) { 666 var ics = element.right, 667 info = ics.info, 668 offsets = info.swbOffsets, 669 windowGroups = info.groupCount, 670 maxSFB = info.maxSFB, 671 bandTypes = ics.bandTypes, 672 sectEnd = ics.sectEnd, 673 scaleFactors = ics.scaleFactors; 674 675 var idx = 0, groupOff = 0; 676 for (var g = 0; g < windowGroups; g++) { 677 for (var i = 0; i < maxSFB;) { 678 var end = sectEnd[idx]; 679 680 if (bandTypes[idx] === ICStream.INTENSITY_BT || bandTypes[idx] === ICStream.INTENSITY_BT2) { 681 for (; i < end; i++, idx++) { 682 var c = bandTypes[idx] === ICStream.INTENSITY_BT ? 1 : -1; 683 if (element.maskPresent) 684 c *= element.ms_used[idx] ? -1 : 1; 685 686 var scale = c * scaleFactors[idx]; 687 for (var w = 0; w < info.groupLength[g]; w++) { 688 var off = groupOff + w * 128 + offsets[i], 689 len = offsets[i + 1] - offsets[i]; 690 691 for (var j = 0; j < len; j++) { 692 right[off + j] = left[off + j] * scale; 693 } 694 } 695 } 696 } else { 697 idx += end - i; 698 i = end; 699 } 700 } 701 702 groupOff += info.groupLength[g] * 128; 703 } 704 }; 705 706 // Mid-side stereo 707 this.prototype.processMS = function(element, left, right) { 708 var ics = element.left, 709 info = ics.info, 710 offsets = info.swbOffsets, 711 windowGroups = info.groupCount, 712 maxSFB = info.maxSFB, 713 sfbCBl = ics.bandTypes, 714 sfbCBr = element.right.bandTypes; 715 716 var groupOff = 0, idx = 0; 717 for (var g = 0; g < windowGroups; g++) { 718 for (var i = 0; i < maxSFB; i++, idx++) { 719 if (element.ms_used[idx] && sfbCBl[idx] < ICStream.NOISE_BT && sfbCBr[idx] < ICStream.NOISE_BT) { 720 for (var w = 0; w < info.groupLength[g]; w++) { 721 var off = groupOff + w * 128 + offsets[i]; 722 for (var j = 0; j < offsets[i + 1] - offsets[i]; j++) { 723 var t = left[off + j] - right[off + j]; 724 left[off + j] += right[off + j]; 725 right[off + j] = t; 726 } 727 } 728 } 729 } 730 groupOff += info.groupLength[g] * 128; 731 } 732 }; 733 734 this.prototype.applyChannelCoupling = function(element, couplingPoint, data1, data2) { 735 var cces = this.cces, 736 isChannelPair = element instanceof CPEElement, 737 applyCoupling = couplingPoint === CCEElement.AFTER_IMDCT ? 'applyIndependentCoupling' : 'applyDependentCoupling'; 738 739 for (var i = 0; i < cces.length; i++) { 740 var cce = cces[i], 741 index = 0; 742 743 if (cce.couplingPoint === couplingPoint) { 744 for (var c = 0; c < cce.coupledCount; c++) { 745 var chSelect = cce.chSelect[c]; 746 if (cce.channelPair[c] === isChannelPair && cce.idSelect[c] === element.id) { 747 if (chSelect !== 1) { 748 cce[applyCoupling](index, data1); 749 if (chSelect) index++; 750 } 751 752 if (chSelect !== 2) 753 cce[applyCoupling](index++, data2); 754 755 } else { 756 index += 1 + (chSelect === 3 ? 1 : 0); 757 } 758 } 759 } 760 } 761 }; 762 763}); 764 765module.exports = AACDecoder; 766 767},{"./adts_demuxer":1,"./cce":2,"./cpe":3,"./filter_bank":6,"./ics":8,"./tables":11}],5:[function(require,module,exports){ 768/* 769 * AAC.js - Advanced Audio Coding decoder in JavaScript 770 * Created by Devon Govett 771 * Copyright (c) 2012, Official.fm Labs 772 * 773 * AAC.js is free software; you can redistribute it and/or modify it 774 * under the terms of the GNU Lesser General Public License as 775 * published by the Free Software Foundation; either version 3 of the 776 * License, or (at your option) any later version. 777 * 778 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 779 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 780 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 781 * Public License for more details. 782 * 783 * You should have received a copy of the GNU Lesser General Public 784 * License along with this library. 785 * If not, see <http://www.gnu.org/licenses/>. 786 */ 787 788function FFT(length) { 789 this.length = length; 790 791 switch (length) { 792 case 64: 793 this.roots = generateFFTTableShort(64); 794 break; 795 796 case 512: 797 this.roots = generateFFTTableLong(512); 798 break; 799 800 case 60: 801 this.roots = generateFFTTableShort(60); 802 break; 803 804 case 480: 805 this.roots = generateFFTTableLong(480); 806 break; 807 808 default: 809 throw new Error("unexpected FFT length: " + length); 810 } 811 812 // processing buffers 813 this.rev = new Array(length); 814 for (var i = 0; i < length; i++) { 815 this.rev[i] = new Float32Array(2); 816 } 817 818 this.a = new Float32Array(2); 819 this.b = new Float32Array(2); 820 this.c = new Float32Array(2); 821 this.d = new Float32Array(2); 822 this.e1 = new Float32Array(2); 823 this.e2 = new Float32Array(2); 824} 825 826function generateFFTTableShort(len) { 827 var t = 2 * Math.PI / len, 828 cosT = Math.cos(t), 829 sinT = Math.sin(t), 830 f = new Array(len); 831 832 for (var i = 0; i < len; i++) { 833 f[i] = new Float32Array(2); 834 } 835 836 f[0][0] = 1; 837 f[0][1] = 0; 838 var lastImag = 0; 839 840 for (var i = 1; i < len; i++) { 841 f[i][0] = f[i - 1][0] * cosT + lastImag * sinT; 842 lastImag = lastImag * cosT - f[i - 1][0] * sinT; 843 f[i][1] = -lastImag; 844 } 845 846 return f; 847} 848 849function generateFFTTableLong(len) { 850 var t = 2 * Math.PI / len, 851 cosT = Math.cos(t), 852 sinT = Math.sin(t), 853 f = new Array(len); 854 855 for (var i = 0; i < len; i++) { 856 f[i] = new Float32Array(3); 857 } 858 859 f[0][0] = 1; 860 f[0][1] = 0; 861 f[0][2] = 0; 862 863 for (var i = 1; i < len; i++) { 864 f[i][0] = f[i - 1][0] * cosT + f[i - 1][2] * sinT; 865 f[i][2] = f[i - 1][2] * cosT - f[i - 1][0] * sinT; 866 f[i][1] = -f[i][2]; 867 } 868 869 return f; 870} 871 872FFT.prototype.process = function(input, forward) { 873 var length = this.length, 874 imOffset = (forward ? 2 : 1), 875 scale = (forward ? length : 1), 876 rev = this.rev, 877 roots = this.roots; 878 879 // bit-reversal 880 var ii = 0; 881 for (var i = 0; i < length; i++) { 882 rev[i][0] = input[ii][0]; 883 rev[i][1] = input[ii][1]; 884 885 var k = length >>> 1; 886 while (ii >= k && k > 0) { 887 ii -= k; 888 k >>= 1; 889 } 890 891 ii += k; 892 } 893 894 var a = this.a, 895 b = this.b, 896 c = this.c, 897 d = this.d, 898 e1 = this.e1, 899 e2 = this.e2; 900 901 for (var i = 0; i < length; i++) { 902 input[i][0] = rev[i][0]; 903 input[i][1] = rev[i][1]; 904 } 905 906 // bottom base-4 round 907 for (var i = 0; i < length; i += 4) { 908 a[0] = input[i][0] + input[i + 1][0]; 909 a[1] = input[i][1] + input[i + 1][1]; 910 b[0] = input[i + 2][0] + input[i + 3][0]; 911 b[1] = input[i + 2][1] + input[i + 3][1]; 912 c[0] = input[i][0] - input[i + 1][0]; 913 c[1] = input[i][1] - input[i + 1][1]; 914 d[0] = input[i + 2][0] - input[i + 3][0]; 915 d[1] = input[i + 2][1] - input[i + 3][1]; 916 input[i][0] = a[0] + b[0]; 917 input[i][1] = a[1] + b[1]; 918 input[i + 2][0] = a[0] - b[0]; 919 input[i + 2][1] = a[1] - b[1]; 920 921 e1[0] = c[0] - d[1]; 922 e1[1] = c[1] + d[0]; 923 e2[0] = c[0] + d[1]; 924 e2[1] = c[1] - d[0]; 925 926 if (forward) { 927 input[i + 1][0] = e2[0]; 928 input[i + 1][1] = e2[1]; 929 input[i + 3][0] = e1[0]; 930 input[i + 3][1] = e1[1]; 931 } else { 932 input[i + 1][0] = e1[0]; 933 input[i + 1][1] = e1[1]; 934 input[i + 3][0] = e2[0]; 935 input[i + 3][1] = e2[1]; 936 } 937 } 938 939 // iterations from bottom to top 940 for (var i = 4; i < length; i <<= 1) { 941 var shift = i << 1, 942 m = length / shift; 943 944 for(var j = 0; j < length; j += shift) { 945 for(var k = 0; k < i; k++) { 946 var km = k * m, 947 rootRe = roots[km][0], 948 rootIm = roots[km][imOffset], 949 zRe = input[i + j + k][0] * rootRe - input[i + j + k][1] * rootIm, 950 zIm = input[i + j + k][0] * rootIm + input[i + j + k][1] * rootRe; 951 952 input[i + j + k][0] = (input[j + k][0] - zRe) * scale; 953 input[i + j + k][1] = (input[j + k][1] - zIm) * scale; 954 input[j + k][0] = (input[j + k][0] + zRe) * scale; 955 input[j + k][1] = (input[j + k][1] + zIm) * scale; 956 } 957 } 958 } 959}; 960 961module.exports = FFT; 962 963},{}],6:[function(require,module,exports){ 964/* 965 * AAC.js - Advanced Audio Coding decoder in JavaScript 966 * Created by Devon Govett 967 * Copyright (c) 2012, Official.fm Labs 968 * 969 * AAC.js is free software; you can redistribute it and/or modify it 970 * under the terms of the GNU Lesser General Public License as 971 * published by the Free Software Foundation; either version 3 of the 972 * License, or (at your option) any later version. 973 * 974 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 975 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 976 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 977 * Public License for more details. 978 * 979 * You should have received a copy of the GNU Lesser General Public 980 * License along with this library. 981 * If not, see <http://www.gnu.org/licenses/>. 982 */ 983 984var ICStream = require('./ics'); 985var MDCT = require('./mdct'); 986 987function FilterBank(smallFrames, channels) { 988 if (smallFrames) { 989 throw new Error("WHA?? No small frames allowed."); 990 } 991 992 this.length = 1024; 993 this.shortLength = 128; 994 995 this.mid = (this.length - this.shortLength) / 2; 996 this.trans = this.shortLength / 2; 997 998 this.mdctShort = new MDCT(this.shortLength * 2); 999 this.mdctLong = new MDCT(this.length * 2); 1000 1001 this.overlaps = new Array(channels); 1002 for (var i = 0; i < channels; i++) { 1003 this.overlaps[i] = new Float32Array(this.length); 1004 } 1005 1006 this.buf = new Float32Array(2 * this.length); 1007} 1008 1009function generateSineWindow(len) { 1010 var d = new Float32Array(len); 1011 for (var i = 0; i < len; i++) { 1012 d[i] = Math.sin((i + 0.5) * (Math.PI / (2.0 * len))) 1013 } 1014 return d; 1015} 1016 1017function generateKBDWindow(alpha, len) { 1018 var PIN = Math.PI / len, 1019 out = new Float32Array(len), 1020 sum = 0, 1021 f = new Float32Array(len), 1022 alpha2 = (alpha * PIN) * (alpha * PIN); 1023 1024 for (var n = 0; n < len; n++) { 1025 var tmp = n * (len - n) * alpha2, 1026 bessel = 1; 1027 1028 for (var j = 50; j > 0; j--) { 1029 bessel = bessel * tmp / (j * j) + 1; 1030 } 1031 1032 sum += bessel; 1033 f[n] = sum; 1034 } 1035 1036 sum++; 1037 for (var n = 0; n < len; n++) { 1038 out[n] = Math.sqrt(f[n] / sum); 1039 } 1040 1041 return out; 1042} 1043 1044const SINE_1024 = generateSineWindow(1024), 1045 SINE_128 = generateSineWindow(128), 1046 KBD_1024 = generateKBDWindow(4, 1024), 1047 KBD_128 = generateKBDWindow(6, 128), 1048 LONG_WINDOWS = [SINE_1024, KBD_1024], 1049 SHORT_WINDOWS = [SINE_128, KBD_128]; 1050 1051FilterBank.prototype.process = function(info, input, output, channel) { 1052 var overlap = this.overlaps[channel], 1053 windowShape = info.windowShape[1], 1054 windowShapePrev = info.windowShape[0], 1055 longWindows = LONG_WINDOWS[windowShape], 1056 shortWindows = SHORT_WINDOWS[windowShape], 1057 longWindowsPrev = LONG_WINDOWS[windowShapePrev], 1058 shortWindowsPrev = SHORT_WINDOWS[windowShapePrev], 1059 length = this.length, 1060 shortLen = this.shortLength, 1061 mid = this.mid, 1062 trans = this.trans, 1063 buf = this.buf, 1064 mdctLong = this.mdctLong, 1065 mdctShort = this.mdctShort; 1066 1067 switch (info.windowSequence) { 1068 case ICStream.ONLY_LONG_SEQUENCE: 1069 mdctLong.process(input, 0, buf, 0); 1070 1071 // add second half output of previous frame to windowed output of current frame 1072 for (var i = 0; i < length; i++) { 1073 output[i] = overlap[i] + (buf[i] * longWindowsPrev[i]); 1074 } 1075 1076 // window the second half and save as overlap for next frame 1077 for (var i = 0; i < length; i++) { 1078 overlap[i] = buf[length + i] * longWindows[length - 1 - i]; 1079 } 1080 1081 break; 1082 1083 case ICStream.LONG_START_SEQUENCE: 1084 mdctLong.process(input, 0, buf, 0); 1085 1086 // add second half output of previous frame to windowed output of current frame 1087 for (var i = 0; i < length; i++) { 1088 output[i] = overlap[i] + (buf[i] * longWindowsPrev[i]); 1089 } 1090 1091 // window the second half and save as overlap for next frame 1092 for (var i = 0; i < mid; i++) { 1093 overlap[i] = buf[length + i]; 1094 } 1095 1096 for (var i = 0; i < shortLen; i++) { 1097 overlap[mid + i] = buf[length + mid + i] * shortWindows[shortLen - i - 1]; 1098 } 1099 1100 for (var i = 0; i < mid; i++) { 1101 overlap[mid + shortLen + i] = 0; 1102 } 1103 1104 break; 1105 1106 case ICStream.EIGHT_SHORT_SEQUENCE: 1107 for (var i = 0; i < 8; i++) { 1108 mdctShort.process(input, i * shortLen, buf, 2 * i * shortLen); 1109 } 1110 1111 // add second half output of previous frame to windowed output of current frame 1112 for (var i = 0; i < mid; i++) { 1113 output[i] = overlap[i]; 1114 } 1115 1116 for (var i = 0; i < shortLen; i++) { 1117 output[mid + i] = overlap[mid + i] + buf[i] * shortWindowsPrev[i]; 1118 output[mid + 1 * shortLen + i] = overlap[mid + shortLen * 1 + i] + (buf[shortLen * 1 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 2 + i] * shortWindows[i]); 1119 output[mid + 2 * shortLen + i] = overlap[mid + shortLen * 2 + i] + (buf[shortLen * 3 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 4 + i] * shortWindows[i]); 1120 output[mid + 3 * shortLen + i] = overlap[mid + shortLen * 3 + i] + (buf[shortLen * 5 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 6 + i] * shortWindows[i]); 1121 1122 if (i < trans) 1123 output[mid + 4 * shortLen + i] = overlap[mid + shortLen * 4 + i] + (buf[shortLen * 7 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 8 + i] * shortWindows[i]); 1124 } 1125 1126 // window the second half and save as overlap for next frame 1127 for (var i = 0; i < shortLen; i++) { 1128 if(i >= trans) 1129 overlap[mid + 4 * shortLen + i - length] = (buf[shortLen * 7 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 8 + i] * shortWindows[i]); 1130 1131 overlap[mid + 5 * shortLen + i - length] = (buf[shortLen * 9 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 10 + i] * shortWindows[i]); 1132 overlap[mid + 6 * shortLen + i - length] = (buf[shortLen * 11 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 12 + i]*shortWindows[i]); 1133 overlap[mid + 7 * shortLen + i - length] = (buf[shortLen * 13 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 14 + i]*shortWindows[i]); 1134 overlap[mid + 8 * shortLen + i - length] = (buf[shortLen * 15 + i] * shortWindows[shortLen - 1 - i]); 1135 } 1136 1137 for (var i = 0; i < mid; i++) { 1138 overlap[mid + shortLen + i] = 0; 1139 } 1140 1141 break; 1142 1143 case ICStream.LONG_STOP_SEQUENCE: 1144 mdctLong.process(input, 0, buf, 0); 1145 1146 // add second half output of previous frame to windowed output of current frame 1147 // construct first half window using padding with 1's and 0's 1148 for (var i = 0; i < mid; i++) { 1149 output[i] = overlap[i]; 1150 } 1151 1152 for (var i = 0; i < shortLen; i++) { 1153 output[mid + i] = overlap[mid + i] + (buf[mid + i] * shortWindowsPrev[i]); 1154 } 1155 1156 for (var i = 0; i < mid; i++) { 1157 output[mid + shortLen + i] = overlap[mid + shortLen + i] + buf[mid + shortLen + i]; 1158 } 1159 1160 // window the second half and save as overlap for next frame 1161 for (var i = 0; i < length; i++) { 1162 overlap[i] = buf[length + i] * longWindows[length - 1 - i]; 1163 } 1164 1165 break; 1166 } 1167}; 1168 1169module.exports = FilterBank; 1170 1171},{"./ics":8,"./mdct":9}],7:[function(require,module,exports){ 1172/* 1173 * AAC.js - Advanced Audio Coding decoder in JavaScript 1174 * Created by Devon Govett 1175 * Copyright (c) 2012, Official.fm Labs 1176 * 1177 * AAC.js is free software; you can redistribute it and/or modify it 1178 * under the terms of the GNU Lesser General Public License as 1179 * published by the Free Software Foundation; either version 3 of the 1180 * License, or (at your option) any later version. 1181 * 1182 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 1183 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 1184 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 1185 * Public License for more details. 1186 * 1187 * You should have received a copy of the GNU Lesser General Public 1188 * License along with this library. 1189 * If not, see <http://www.gnu.org/licenses/>. 1190 */ 1191 1192// [bit length, codeword, values...] 1193const HCB1 = [ 1194 [1, 0, 0, 0, 0, 0], 1195 [5, 16, 1, 0, 0, 0], 1196 [5, 17, -1, 0, 0, 0], 1197 [5, 18, 0, 0, 0, -1], 1198 [5, 19, 0, 1, 0, 0], 1199 [5, 20, 0, 0, 0, 1], 1200 [5, 21, 0, 0, -1, 0], 1201 [5, 22, 0, 0, 1, 0], 1202 [5, 23, 0, -1, 0, 0], 1203 [7, 96, 1, -1, 0, 0], 1204 [7, 97, -1, 1, 0, 0], 1205 [7, 98, 0, 0, -1, 1], 1206 [7, 99, 0, 1, -1, 0], 1207 [7, 100, 0, -1, 1, 0], 1208 [7, 101, 0, 0, 1, -1], 1209 [7, 102, 1, 1, 0, 0], 1210 [7, 103, 0, 0, -1, -1], 1211 [7, 104, -1, -1, 0, 0], 1212 [7, 105, 0, -1, -1, 0], 1213 [7, 106, 1, 0, -1, 0], 1214 [7, 107, 0, 1, 0, -1], 1215 [7, 108, -1, 0, 1, 0], 1216 [7, 109, 0, 0, 1, 1], 1217 [7, 110, 1, 0, 1, 0], 1218 [7, 111, 0, -1, 0, 1], 1219 [7, 112, 0, 1, 1, 0], 1220 [7, 113, 0, 1, 0, 1], 1221 [7, 114, -1, 0, -1, 0], 1222 [7, 115, 1, 0, 0, 1], 1223 [7, 116, -1, 0, 0, -1], 1224 [7, 117, 1, 0, 0, -1], 1225 [7, 118, -1, 0, 0, 1], 1226 [7, 119, 0, -1, 0, -1], 1227 [9, 480, 1, 1, -1, 0], 1228 [9, 481, -1, 1, -1, 0], 1229 [9, 482, 1, -1, 1, 0], 1230 [9, 483, 0, 1, 1, -1], 1231 [9, 484, 0, 1, -1, 1], 1232 [9, 485, 0, -1, 1, 1], 1233 [9, 486, 0, -1, 1, -1], 1234 [9, 487, 1, -1, -1, 0], 1235 [9, 488, 1, 0, -1, 1], 1236 [9, 489, 0, 1, -1, -1], 1237 [9, 490, -1, 1, 1, 0], 1238 [9, 491, -1, 0, 1, -1], 1239 [9, 492, -1, -1, 1, 0], 1240 [9, 493, 0, -1, -1, 1], 1241 [9, 494, 1, -1, 0, 1], 1242 [9, 495, 1, -1, 0, -1], 1243 [9, 496, -1, 1, 0, -1], 1244 [9, 497, -1, -1, -1, 0], 1245 [9, 498, 0, -1, -1, -1], 1246 [9, 499, 0, 1, 1, 1], 1247 [9, 500, 1, 0, 1, -1], 1248 [9, 501, 1, 1, 0, 1], 1249 [9, 502, -1, 1, 0, 1], 1250 [9, 503, 1, 1, 1, 0], 1251 [10, 1008, -1, -1, 0, 1], 1252 [10, 1009, -1, 0, -1, -1], 1253 [10, 1010, 1, 1, 0, -1], 1254 [10, 1011, 1, 0, -1, -1], 1255 [10, 1012, -1, 0, -1, 1], 1256 [10, 1013, -1, -1, 0, -1], 1257 [10, 1014, -1, 0, 1, 1], 1258 [10, 1015, 1, 0, 1, 1], 1259 [11, 2032, 1, -1, 1, -1], 1260 [11, 2033, -1, 1, -1, 1], 1261 [11, 2034, -1, 1, 1, -1], 1262 [11, 2035, 1, -1, -1, 1], 1263 [11, 2036, 1, 1, 1, 1], 1264 [11, 2037, -1, -1, 1, 1], 1265 [11, 2038, 1, 1, -1, -1], 1266 [11, 2039, -1, -1, 1, -1], 1267 [11, 2040, -1, -1, -1, -1], 1268 [11, 2041, 1, 1, -1, 1], 1269 [11, 2042, 1, -1, 1, 1], 1270 [11, 2043, -1, 1, 1, 1], 1271 [11, 2044, -1, 1, -1, -1], 1272 [11, 2045, -1, -1, -1, 1], 1273 [11, 2046, 1, -1, -1, -1], 1274 [11, 2047, 1, 1, 1, -1] 1275]; 1276 1277const HCB2 = [ 1278 [3, 0, 0, 0, 0, 0], 1279 [4, 2, 1, 0, 0, 0], 1280 [5, 6, -1, 0, 0, 0], 1281 [5, 7, 0, 0, 0, 1], 1282 [5, 8, 0, 0, -1, 0], 1283 [5, 9, 0, 0, 0, -1], 1284 [5, 10, 0, -1, 0, 0], 1285 [5, 11, 0, 0, 1, 0], 1286 [5, 12, 0, 1, 0, 0], 1287 [6, 26, 0, -1, 1, 0], 1288 [6, 27, -1, 1, 0, 0], 1289 [6, 28, 0, 1, -1, 0], 1290 [6, 29, 0, 0, 1, -1], 1291 [6, 30, 0, 1, 0, -1], 1292 [6, 31, 0, 0, -1, 1], 1293 [6, 32, -1, 0, 0, -1], 1294 [6, 33, 1, -1, 0, 0], 1295 [6, 34, 1, 0, -1, 0], 1296 [6, 35, -1, -1, 0, 0], 1297 [6, 36, 0, 0, -1, -1], 1298 [6, 37, 1, 0, 1, 0], 1299 [6, 38, 1, 0, 0, 1], 1300 [6, 39, 0, -1, 0, 1], 1301 [6, 40, -1, 0, 1, 0], 1302 [6, 41, 0, 1, 0, 1], 1303 [6, 42, 0, -1, -1, 0], 1304 [6, 43, -1, 0, 0, 1], 1305 [6, 44, 0, -1, 0, -1], 1306 [6, 45, -1, 0, -1, 0], 1307 [6, 46, 1, 1, 0, 0], 1308 [6, 47, 0, 1, 1, 0], 1309 [6, 48, 0, 0, 1, 1], 1310 [6, 49, 1, 0, 0, -1], 1311 [7, 100, 0, 1, -1, 1], 1312 [7, 101, 1, 0, -1, 1], 1313 [7, 102, -1, 1, -1, 0], 1314 [7, 103, 0, -1, 1, -1], 1315 [7, 104, 1, -1, 1, 0], 1316 [7, 105, 1, 1, 0, -1], 1317 [7, 106, 1, 0, 1, 1], 1318 [7, 107, -1, 1, 1, 0], 1319 [7, 108, 0, -1, -1, 1], 1320 [7, 109, 1, 1, 1, 0], 1321 [7, 110, -1, 0, 1, -1], 1322 [7, 111, -1, -1, -1, 0], 1323 [7, 112, -1, 0, -1, 1], 1324 [7, 113, 1, -1, -1, 0], 1325 [7, 114, 1, 1, -1, 0], 1326 [8, 230, 1, -1, 0, 1], 1327 [8, 231, -1, 1, 0, -1], 1328 [8, 232, -1, -1, 1, 0], 1329 [8, 233, -1, 0, 1, 1], 1330 [8, 234, -1, -1, 0, 1], 1331 [8, 235, -1, -1, 0, -1], 1332 [8, 236, 0, -1, -1, -1], 1333 [8, 237, 1, 0, 1, -1], 1334 [8, 238, 1, 0, -1, -1], 1335 [8, 239, 0, 1, -1, -1], 1336 [8, 240, 0, 1, 1, 1], 1337 [8, 241, -1, 1, 0, 1], 1338 [8, 242, -1, 0, -1, -1], 1339 [8, 243, 0, 1, 1, -1], 1340 [8, 244, 1, -1, 0, -1], 1341 [8, 245, 0, -1, 1, 1], 1342 [8, 246, 1, 1, 0, 1], 1343 [8, 247, 1, -1, 1, -1], 1344 [8, 248, -1, 1, -1, 1], 1345 [9, 498, 1, -1, -1, 1], 1346 [9, 499, -1, -1, -1, -1], 1347 [9, 500, -1, 1, 1, -1], 1348 [9, 501, -1, 1, 1, 1], 1349 [9, 502, 1, 1, 1, 1], 1350 [9, 503, -1, -1, 1, -1], 1351 [9, 504, 1, -1, 1, 1], 1352 [9, 505, -1, 1, -1, -1], 1353 [9, 506, -1, -1, 1, 1], 1354 [9, 507, 1, 1, -1, -1], 1355 [9, 508, 1, -1, -1, -1], 1356 [9, 509, -1, -1, -1, 1], 1357 [9, 510, 1, 1, -1, 1], 1358 [9, 511, 1, 1, 1, -1] 1359]; 1360 1361const HCB3 = [ 1362 [1, 0, 0, 0, 0, 0], 1363 [4, 8, 1, 0, 0, 0], 1364 [4, 9, 0, 0, 0, 1], 1365 [4, 10, 0, 1, 0, 0], 1366 [4, 11, 0, 0, 1, 0], 1367 [5, 24, 1, 1, 0, 0], 1368 [5, 25, 0, 0, 1, 1], 1369 [6, 52, 0, 1, 1, 0], 1370 [6, 53, 0, 1, 0, 1], 1371 [6, 54, 1, 0, 1, 0], 1372 [6, 55, 0, 1, 1, 1], 1373 [6, 56, 1, 0, 0, 1], 1374 [6, 57, 1, 1, 1, 0], 1375 [7, 116, 1, 1, 1, 1], 1376 [7, 117, 1, 0, 1, 1], 1377 [7, 118, 1, 1, 0, 1], 1378 [8, 238, 2, 0, 0, 0], 1379 [8, 239, 0, 0, 0, 2], 1380 [8, 240, 0, 0, 1, 2], 1381 [8, 241, 2, 1, 0, 0], 1382 [8, 242, 1, 2, 1, 0], 1383 [9, 486, 0, 0, 2, 1], 1384 [9, 487, 0, 1, 2, 1], 1385 [9, 488, 1, 2, 0, 0], 1386 [9, 489, 0, 1, 1, 2], 1387 [9, 490, 2, 1, 1, 0], 1388 [9, 491, 0, 0, 2, 0], 1389 [9, 492, 0, 2, 1, 0], 1390 [9, 493, 0, 1, 2, 0], 1391 [9, 494, 0, 2, 0, 0], 1392 [9, 495, 0, 1, 0, 2], 1393 [9, 496, 2, 0, 1, 0], 1394 [9, 497, 1, 2, 1, 1], 1395 [9, 498, 0, 2, 1, 1], 1396 [9, 499, 1, 1, 2, 0], 1397 [9, 500, 1, 1, 2, 1], 1398 [10, 1002, 1, 2, 0, 1], 1399 [10, 1003, 1, 0, 2, 0], 1400 [10, 1004, 1, 0, 2, 1], 1401 [10, 1005, 0, 2, 0, 1], 1402 [10, 1006, 2, 1, 1, 1], 1403 [10, 1007, 1, 1, 1, 2], 1404 [10, 1008, 2, 1, 0, 1], 1405 [10, 1009, 1, 0, 1, 2], 1406 [10, 1010, 0, 0, 2, 2], 1407 [10, 1011, 0, 1, 2, 2], 1408 [10, 1012, 2, 2, 1, 0], 1409 [10, 1013, 1, 2, 2, 0], 1410 [10, 1014, 1, 0, 0, 2], 1411 [10, 1015, 2, 0, 0, 1], 1412 [10, 1016, 0, 2, 2, 1], 1413 [11, 2034, 2, 2, 0, 0], 1414 [11, 2035, 1, 2, 2, 1], 1415 [11, 2036, 1, 1, 0, 2], 1416 [11, 2037, 2, 0, 1, 1], 1417 [11, 2038, 1, 1, 2, 2], 1418 [11, 2039, 2, 2, 1, 1], 1419 [11, 2040, 0, 2, 2, 0], 1420 [11, 2041, 0, 2, 1, 2], 1421 [12, 4084, 1, 0, 2, 2], 1422 [12, 4085, 2, 2, 0, 1], 1423 [12, 4086, 2, 1, 2, 0], 1424 [12, 4087, 2, 2, 2, 0], 1425 [12, 4088, 0, 2, 2, 2], 1426 [12, 4089, 2, 2, 2, 1], 1427 [12, 4090, 2, 1, 2, 1], 1428 [12, 4091, 1, 2, 1, 2], 1429 [12, 4092, 1, 2, 2, 2], 1430 [13, 8186, 0, 2, 0, 2], 1431 [13, 8187, 2, 0, 2, 0], 1432 [13, 8188, 1, 2, 0, 2], 1433 [14, 16378, 2, 0, 2, 1], 1434 [14, 16379, 2, 1, 1, 2], 1435 [14, 16380, 2, 1, 0, 2], 1436 [15, 32762, 2, 2, 2, 2], 1437 [15, 32763, 2, 2, 1, 2], 1438 [15, 32764, 2, 1, 2, 2], 1439 [15, 32765, 2, 0, 1, 2], 1440 [15, 32766, 2, 0, 0, 2], 1441 [16, 65534, 2, 2, 0, 2], 1442 [16, 65535, 2, 0, 2, 2] 1443]; 1444 1445const HCB4 = [ 1446 [4, 0, 1, 1, 1, 1], 1447 [4, 1, 0, 1, 1, 1], 1448 [4, 2, 1, 1, 0, 1], 1449 [4, 3, 1, 1, 1, 0], 1450 [4, 4, 1, 0, 1, 1], 1451 [4, 5, 1, 0, 0, 0], 1452 [4, 6, 1, 1, 0, 0], 1453 [4, 7, 0, 0, 0, 0], 1454 [4, 8, 0, 0, 1, 1], 1455 [4, 9, 1, 0, 1, 0], 1456 [5, 20, 1, 0, 0, 1], 1457 [5, 21, 0, 1, 1, 0], 1458 [5, 22, 0, 0, 0, 1], 1459 [5, 23, 0, 1, 0, 1], 1460 [5, 24, 0, 0, 1, 0], 1461 [5, 25, 0, 1, 0, 0], 1462 [7, 104, 2, 1, 1, 1], 1463 [7, 105, 1, 1, 2, 1], 1464 [7, 106, 1, 2, 1, 1], 1465 [7, 107, 1, 1, 1, 2], 1466 [7, 108, 2, 1, 1, 0], 1467 [7, 109, 2, 1, 0, 1], 1468 [7, 110, 1, 2, 1, 0], 1469 [7, 111, 2, 0, 1, 1], 1470 [7, 112, 0, 1, 2, 1], 1471 [8, 226, 0, 1, 1, 2], 1472 [8, 227, 1, 1, 2, 0], 1473 [8, 228, 0, 2, 1, 1], 1474 [8, 229, 1, 0, 1, 2], 1475 [8, 230, 1, 2, 0, 1], 1476 [8, 231, 1, 1, 0, 2], 1477 [8, 232, 1, 0, 2, 1], 1478 [8, 233, 2, 1, 0, 0], 1479 [8, 234, 2, 0, 1, 0], 1480 [8, 235, 1, 2, 0, 0], 1481 [8, 236, 2, 0, 0, 1], 1482 [8, 237, 0, 1, 0, 2], 1483 [8, 238, 0, 2, 1, 0], 1484 [8, 239, 0, 0, 1, 2], 1485 [8, 240, 0, 1, 2, 0], 1486 [8, 241, 0, 2, 0, 1], 1487 [8, 242, 1, 0, 0, 2], 1488 [8, 243, 0, 0, 2, 1], 1489 [8, 244, 1, 0, 2, 0], 1490 [8, 245, 2, 0, 0, 0], 1491 [8, 246, 0, 0, 0, 2], 1492 [9, 494, 0, 2, 0, 0], 1493 [9, 495, 0, 0, 2, 0], 1494 [9, 496, 1, 2, 2, 1], 1495 [9, 497, 2, 2, 1, 1], 1496 [9, 498, 2, 1, 2, 1], 1497 [9, 499, 1, 1, 2, 2], 1498 [9, 500, 1, 2, 1, 2], 1499 [9, 501, 2, 1, 1, 2], 1500 [10, 1004, 1, 2, 2, 0], 1501 [10, 1005, 2, 2, 1, 0], 1502 [10, 1006, 2, 1, 2, 0], 1503 [10, 1007, 0, 2, 2, 1], 1504 [10, 1008, 0, 1, 2, 2], 1505 [10, 1009, 2, 2, 0, 1], 1506 [10, 1010, 0, 2, 1, 2], 1507 [10, 1011, 2, 0, 2, 1], 1508 [10, 1012, 1, 0, 2, 2], 1509 [10, 1013, 2, 2, 2, 1], 1510 [10, 1014, 1, 2, 0, 2], 1511 [10, 1015, 2, 0, 1, 2], 1512 [10, 1016, 2, 1, 0, 2], 1513 [10, 1017, 1, 2, 2, 2], 1514 [11, 2036, 2, 1, 2, 2], 1515 [11, 2037, 2, 2, 1, 2], 1516 [11, 2038, 0, 2, 2, 0], 1517 [11, 2039, 2, 2, 0, 0], 1518 [11, 2040, 0, 0, 2, 2], 1519 [11, 2041, 2, 0, 2, 0], 1520 [11, 2042, 0, 2, 0, 2], 1521 [11, 2043, 2, 0, 0, 2], 1522 [11, 2044, 2, 2, 2, 2], 1523 [11, 2045, 0, 2, 2, 2], 1524 [11, 2046, 2, 2, 2, 0], 1525 [12, 4094, 2, 2, 0, 2], 1526 [12, 4095, 2, 0, 2, 2] 1527]; 1528 1529const HCB5 = [ 1530 [1, 0, 0, 0], 1531 [4, 8, -1, 0], 1532 [4, 9, 1, 0], 1533 [4, 10, 0, 1], 1534 [4, 11, 0, -1], 1535 [5, 24, 1, -1], 1536 [5, 25, -1, 1], 1537 [5, 26, -1, -1], 1538 [5, 27, 1, 1], 1539 [7, 112, -2, 0], 1540 [7, 113, 0, 2], 1541 [7, 114, 2, 0], 1542 [7, 115, 0, -2], 1543 [8, 232, -2, -1], 1544 [8, 233, 2, 1], 1545 [8, 234, -1, -2], 1546 [8, 235, 1, 2], 1547 [8, 236, -2, 1], 1548 [8, 237, 2, -1], 1549 [8, 238, -1, 2], 1550 [8, 239, 1, -2], 1551 [8, 240, -3, 0], 1552 [8, 241, 3, 0], 1553 [8, 242, 0, -3], 1554 [8, 243, 0, 3], 1555 [9, 488, -3, -1], 1556 [9, 489, 1, 3], 1557 [9, 490, 3, 1], 1558 [9, 491, -1, -3], 1559 [9, 492, -3, 1], 1560 [9, 493, 3, -1], 1561 [9, 494, 1, -3], 1562 [9, 495, -1, 3], 1563 [9, 496, -2, 2], 1564 [9, 497, 2, 2], 1565 [9, 498, -2, -2], 1566 [9, 499, 2, -2], 1567 [10, 1000, -3, -2], 1568 [10, 1001, 3, -2], 1569 [10, 1002, -2, 3], 1570 [10, 1003, 2, -3], 1571 [10, 1004, 3, 2], 1572 [10, 1005, 2, 3], 1573 [10, 1006, -3, 2], 1574 [10, 1007, -2, -3], 1575 [10, 1008, 0, -4], 1576 [10, 1009, -4, 0], 1577 [10, 1010, 4, 1], 1578 [10, 1011, 4, 0], 1579 [11, 2024, -4, -1], 1580 [11, 2025, 0, 4], 1581 [11, 2026, 4, -1], 1582 [11, 2027, -1, -4], 1583 [11, 2028, 1, 4], 1584 [11, 2029, -1, 4], 1585 [11, 2030, -4, 1], 1586 [11, 2031, 1, -4], 1587 [11, 2032, 3, -3], 1588 [11, 2033, -3, -3], 1589 [11, 2034, -3, 3], 1590 [11, 2035, -2, 4], 1591 [11, 2036, -4, -2], 1592 [11, 2037, 4, 2], 1593 [11, 2038, 2, -4], 1594 [11, 2039, 2, 4], 1595 [11, 2040, 3, 3], 1596 [11, 2041, -4, 2], 1597 [12, 4084, -2, -4], 1598 [12, 4085, 4, -2], 1599 [12, 4086, 3, -4], 1600 [12, 4087, -4, -3], 1601 [12, 4088, -4, 3], 1602 [12, 4089, 3, 4], 1603 [12, 4090, -3, 4], 1604 [12, 4091, 4, 3], 1605 [12, 4092, 4, -3], 1606 [12, 4093, -3, -4], 1607 [13, 8188, 4, -4], 1608 [13, 8189, -4, 4], 1609 [13, 8190, 4, 4], 1610 [13, 8191, -4, -4] 1611]; 1612 1613const HCB6 = [ 1614 [4, 0, 0, 0], 1615 [4, 1, 1, 0], 1616 [4, 2, 0, -1], 1617 [4, 3, 0, 1], 1618 [4, 4, -1, 0], 1619 [4, 5, 1, 1], 1620 [4, 6, -1, 1], 1621 [4, 7, 1, -1], 1622 [4, 8, -1, -1], 1623 [6, 36, 2, -1], 1624 [6, 37, 2, 1], 1625 [6, 38, -2, 1], 1626 [6, 39, -2, -1], 1627 [6, 40, -2, 0], 1628 [6, 41, -1, 2], 1629 [6, 42, 2, 0], 1630 [6, 43, 1, -2], 1631 [6, 44, 1, 2], 1632 [6, 45, 0, -2], 1633 [6, 46, -1, -2], 1634 [6, 47, 0, 2], 1635 [6, 48, 2, -2], 1636 [6, 49, -2, 2], 1637 [6, 50, -2, -2], 1638 [6, 51, 2, 2], 1639 [7, 104, -3, 1], 1640 [7, 105, 3, 1], 1641 [7, 106, 3, -1], 1642 [7, 107, -1, 3], 1643 [7, 108, -3, -1], 1644 [7, 109, 1, 3], 1645 [7, 110, 1, -3], 1646 [7, 111, -1, -3], 1647 [7, 112, 3, 0], 1648 [7, 113, -3, 0], 1649 [7, 114, 0, -3], 1650 [7, 115, 0, 3], 1651 [7, 116, 3, 2], 1652 [8, 234, -3, -2], 1653 [8, 235, -2, 3], 1654 [8, 236, 2, 3], 1655 [8, 237, 3, -2], 1656 [8, 238, 2, -3], 1657 [8, 239, -2, -3], 1658 [8, 240, -3, 2], 1659 [8, 241, 3, 3], 1660 [9, 484, 3, -3], 1661 [9, 485, -3, -3], 1662 [9, 486, -3, 3], 1663 [9, 487, 1, -4], 1664 [9, 488, -1, -4], 1665 [9, 489, 4, 1], 1666 [9, 490, -4, 1], 1667 [9, 491, -4, -1], 1668 [9, 492, 1, 4], 1669 [9, 493, 4, -1], 1670 [9, 494, -1, 4], 1671 [9, 495, 0, -4], 1672 [9, 496, -4, 2], 1673 [9, 497, -4, -2], 1674 [9, 498, 2, 4], 1675 [9, 499, -2, -4], 1676 [9, 500, -4, 0], 1677 [9, 501, 4, 2], 1678 [9, 502, 4, -2], 1679 [9, 503, -2, 4], 1680 [9, 504, 4, 0], 1681 [9, 505, 2, -4], 1682 [9, 506, 0, 4], 1683 [10, 1014, -3, -4], 1684 [10, 1015, -3, 4], 1685 [10, 1016, 3, -4], 1686 [10, 1017, 4, -3], 1687 [10, 1018, 3, 4], 1688 [10, 1019, 4, 3], 1689 [10, 1020, -4, 3], 1690 [10, 1021, -4, -3], 1691 [11, 2044, 4, 4], 1692 [11, 2045, -4, 4], 1693 [11, 2046, -4, -4], 1694 [11, 2047, 4, -4] 1695]; 1696 1697const HCB7 = [ 1698 [1, 0, 0, 0], 1699 [3, 4, 1, 0], 1700 [3, 5, 0, 1], 1701 [4, 12, 1, 1], 1702 [6, 52, 2, 1], 1703 [6, 53, 1, 2], 1704 [6, 54, 2, 0], 1705 [6, 55, 0, 2], 1706 [7, 112, 3, 1], 1707 [7, 113, 1, 3], 1708 [7, 114, 2, 2], 1709 [7, 115, 3, 0], 1710 [7, 116, 0, 3], 1711 [8, 234, 2, 3], 1712 [8, 235, 3, 2], 1713 [8, 236, 1, 4], 1714 [8, 237, 4, 1], 1715 [8, 238, 1, 5], 1716 [8, 239, 5, 1], 1717 [8, 240, 3, 3], 1718 [8, 241, 2, 4], 1719 [8, 242, 0, 4], 1720 [8, 243, 4, 0], 1721 [9, 488, 4, 2], 1722 [9, 489, 2, 5], 1723 [9, 490, 5, 2], 1724 [9, 491, 0, 5], 1725 [9, 492, 6, 1], 1726 [9, 493, 5, 0], 1727 [9, 494, 1, 6], 1728 [9, 495, 4, 3], 1729 [9, 496, 3, 5], 1730 [9, 497, 3, 4], 1731 [9, 498, 5, 3], 1732 [9, 499, 2, 6], 1733 [9, 500, 6, 2], 1734 [9, 501, 1, 7], 1735 [10, 1004, 3, 6], 1736 [10, 1005, 0, 6], 1737 [10, 1006, 6, 0], 1738 [10, 1007, 4, 4], 1739 [10, 1008, 7, 1], 1740 [10, 1009, 4, 5], 1741 [10, 1010, 7, 2], 1742 [10, 1011, 5, 4], 1743 [10, 1012, 6, 3], 1744 [10, 1013, 2, 7], 1745 [10, 1014, 7, 3], 1746 [10, 1015, 6, 4], 1747 [10, 1016, 5, 5], 1748 [10, 1017, 4, 6], 1749 [10, 1018, 3, 7], 1750 [11, 2038, 7, 0], 1751 [11, 2039, 0, 7], 1752 [11, 2040, 6, 5], 1753 [11, 2041, 5, 6], 1754 [11, 2042, 7, 4], 1755 [11, 2043, 4, 7], 1756 [11, 2044, 5, 7], 1757 [11, 2045, 7, 5], 1758 [12, 4092, 7, 6], 1759 [12, 4093, 6, 6], 1760 [12, 4094, 6, 7], 1761 [12, 4095, 7, 7] 1762]; 1763 1764const HCB8 = [ 1765 [3, 0, 1, 1], 1766 [4, 2, 2, 1], 1767 [4, 3, 1, 0], 1768 [4, 4, 1, 2], 1769 [4, 5, 0, 1], 1770 [4, 6, 2, 2], 1771 [5, 14, 0, 0], 1772 [5, 15, 2, 0], 1773 [5, 16, 0, 2], 1774 [5, 17, 3, 1], 1775 [5, 18, 1, 3], 1776 [5, 19, 3, 2], 1777 [5, 20, 2, 3], 1778 [6, 42, 3, 3], 1779 [6, 43, 4, 1], 1780 [6, 44, 1, 4], 1781 [6, 45, 4, 2], 1782 [6, 46, 2, 4], 1783 [6, 47, 3, 0], 1784 [6, 48, 0, 3], 1785 [6, 49, 4, 3], 1786 [6, 50, 3, 4], 1787 [6, 51, 5, 2], 1788 [7, 104, 5, 1], 1789 [7, 105, 2, 5], 1790 [7, 106, 1, 5], 1791 [7, 107, 5, 3], 1792 [7, 108, 3, 5], 1793 [7, 109, 4, 4], 1794 [7, 110, 5, 4], 1795 [7, 111, 0, 4], 1796 [7, 112, 4, 5], 1797 [7, 113, 4, 0], 1798 [7, 114, 2, 6], 1799 [7, 115, 6, 2], 1800 [7, 116, 6, 1], 1801 [7, 117, 1, 6], 1802 [8, 236, 3, 6], 1803 [8, 237, 6, 3], 1804 [8, 238, 5, 5], 1805 [8, 239, 5, 0], 1806 [8, 240, 6, 4], 1807 [8, 241, 0, 5], 1808 [8, 242, 4, 6], 1809 [8, 243, 7, 1], 1810 [8, 244, 7, 2], 1811 [8, 245, 2, 7], 1812 [8, 246, 6, 5], 1813 [8, 247, 7, 3], 1814 [8, 248, 1, 7], 1815 [8, 249, 5, 6], 1816 [8, 250, 3, 7], 1817 [9, 502, 6, 6], 1818 [9, 503, 7, 4], 1819 [9, 504, 6, 0], 1820 [9, 505, 4, 7], 1821 [9, 506, 0, 6], 1822 [9, 507, 7, 5], 1823 [9, 508, 7, 6], 1824 [9, 509, 6, 7], 1825 [10, 1020, 5, 7], 1826 [10, 1021, 7, 0], 1827 [10, 1022, 0, 7], 1828 [10, 1023, 7, 7] 1829]; 1830 1831const HCB9 = [ 1832 [1, 0, 0, 0], 1833 [3, 4, 1, 0], 1834 [3, 5, 0, 1], 1835 [4, 12, 1, 1], 1836 [6, 52, 2, 1], 1837 [6, 53, 1, 2], 1838 [6, 54, 2, 0], 1839 [6, 55, 0, 2], 1840 [7, 112, 3, 1], 1841 [7, 113, 2, 2], 1842 [7, 114, 1, 3], 1843 [8, 230, 3, 0], 1844 [8, 231, 0, 3], 1845 [8, 232, 2, 3], 1846 [8, 233, 3, 2], 1847 [8, 234, 1, 4], 1848 [8, 235, 4, 1], 1849 [8, 236, 2, 4], 1850 [8, 237, 1, 5], 1851 [9, 476, 4, 2], 1852 [9, 477, 3, 3], 1853 [9, 478, 0, 4], 1854 [9, 479, 4, 0], 1855 [9, 480, 5, 1], 1856 [9, 481, 2, 5], 1857 [9, 482, 1, 6], 1858 [9, 483, 3, 4], 1859 [9, 484, 5, 2], 1860 [9, 485, 6, 1], 1861 [9, 486, 4, 3], 1862 [10, 974, 0, 5], 1863 [10, 975, 2, 6], 1864 [10, 976, 5, 0], 1865 [10, 977, 1, 7], 1866 [10, 978, 3, 5], 1867 [10, 979, 1, 8], 1868 [10, 980, 8, 1], 1869 [10, 981, 4, 4], 1870 [10, 982, 5, 3], 1871 [10, 983, 6, 2], 1872 [10, 984, 7, 1], 1873 [10, 985, 0, 6], 1874 [10, 986, 8, 2], 1875 [10, 987, 2, 8], 1876 [10, 988, 3, 6], 1877 [10, 989, 2, 7], 1878 [10, 990, 4, 5], 1879 [10, 991, 9, 1], 1880 [10, 992, 1, 9], 1881 [10, 993, 7, 2], 1882 [11, 1988, 6, 0], 1883 [11, 1989, 5, 4], 1884 [11, 1990, 6, 3], 1885 [11, 1991, 8, 3], 1886 [11, 1992, 0, 7], 1887 [11, 1993, 9, 2], 1888 [11, 1994, 3, 8], 1889 [11, 1995, 4, 6], 1890 [11, 1996, 3, 7], 1891 [11, 1997, 0, 8], 1892 [11, 1998, 10, 1], 1893 [11, 1999, 6, 4], 1894 [11, 2000, 2, 9], 1895 [11, 2001, 5, 5], 1896 [11, 2002, 8, 0], 1897 [11, 2003, 7, 0], 1898 [11, 2004, 7, 3], 1899 [11, 2005, 10, 2], 1900 [11, 2006, 9, 3], 1901 [11, 2007, 8, 4], 1902 [11, 2008, 1, 10], 1903 [11, 2009, 7, 4], 1904 [11, 2010, 6, 5], 1905 [11, 2011, 5, 6], 1906 [11, 2012, 4, 8], 1907 [11, 2013, 4, 7], 1908 [11, 2014, 3, 9], 1909 [11, 2015, 11, 1], 1910 [11, 2016, 5, 8], 1911 [11, 2017, 9, 0], 1912 [11, 2018, 8, 5], 1913 [12, 4038, 10, 3], 1914 [12, 4039, 2, 10], 1915 [12, 4040, 0, 9], 1916 [12, 4041, 11, 2], 1917 [12, 4042, 9, 4], 1918 [12, 4043, 6, 6], 1919 [12, 4044, 12, 1], 1920 [12, 4045, 4, 9], 1921 [12, 4046, 8, 6], 1922 [12, 4047, 1, 11], 1923 [12, 4048, 9, 5], 1924 [12, 4049, 10, 4], 1925 [12, 4050, 5, 7], 1926 [12, 4051, 7, 5], 1927 [12, 4052, 2, 11], 1928 [12, 4053, 1, 12], 1929 [12, 4054, 12, 2], 1930 [12, 4055, 11, 3], 1931 [12, 4056, 3, 10], 1932 [12, 4057, 5, 9], 1933 [12, 4058, 6, 7], 1934 [12, 4059, 8, 7], 1935 [12, 4060, 11, 4], 1936 [12, 4061, 0, 10], 1937 [12, 4062, 7, 6], 1938 [12, 4063, 12, 3], 1939 [12, 4064, 10, 0], 1940 [12, 4065, 10, 5], 1941 [12, 4066, 4, 10], 1942 [12, 4067, 6, 8], 1943 [12, 4068, 2, 12], 1944 [12, 4069, 9, 6], 1945 [12, 4070, 9, 7], 1946 [12, 4071, 4, 11], 1947 [12, 4072, 11, 0], 1948 [12, 4073, 6, 9], 1949 [12, 4074, 3, 11], 1950 [12, 4075, 5, 10], 1951 [13, 8152, 8, 8], 1952 [13, 8153, 7, 8], 1953 [13, 8154, 12, 5], 1954 [13, 8155, 3, 12], 1955 [13, 8156, 11, 5], 1956 [13, 8157, 7, 7], 1957 [13, 8158, 12, 4], 1958 [13, 8159, 11, 6], 1959 [13, 8160, 10, 6], 1960 [13, 8161, 4, 12], 1961 [13, 8162, 7, 9], 1962 [13, 8163, 5, 11], 1963 [13, 8164, 0, 11], 1964 [13, 8165, 12, 6], 1965 [13, 8166, 6, 10], 1966 [13, 8167, 12, 0], 1967 [13, 8168, 10, 7], 1968 [13, 8169, 5, 12], 1969 [13, 8170, 7, 10], 1970 [13, 8171, 9, 8], 1971 [13, 8172, 0, 12], 1972 [13, 8173, 11, 7], 1973 [13, 8174, 8, 9], 1974 [13, 8175, 9, 9], 1975 [13, 8176, 10, 8], 1976 [13, 8177, 7, 11], 1977 [13, 8178, 12, 7], 1978 [13, 8179, 6, 11], 1979 [13, 8180, 8, 11], 1980 [13, 8181, 11, 8], 1981 [13, 8182, 7, 12], 1982 [13, 8183, 6, 12], 1983 [14, 16368, 8, 10], 1984 [14, 16369, 10, 9], 1985 [14, 16370, 8, 12], 1986 [14, 16371, 9, 10], 1987 [14, 16372, 9, 11], 1988 [14, 16373, 9, 12], 1989 [14, 16374, 10, 11], 1990 [14, 16375, 12, 9], 1991 [14, 16376, 10, 10], 1992 [14, 16377, 11, 9], 1993 [14, 16378, 12, 8], 1994 [14, 16379, 11, 10], 1995 [14, 16380, 12, 10], 1996 [14, 16381, 12, 11], 1997 [15, 32764, 10, 12], 1998 [15, 32765, 11, 11], 1999 [15, 32766, 11, 12], 2000 [15, 32767, 12, 12] 2001]; 2002 2003const HCB10 = [ 2004 [4, 0, 1, 1], 2005 [4, 1, 1, 2], 2006 [4, 2, 2, 1], 2007 [5, 6, 2, 2], 2008 [5, 7, 1, 0], 2009 [5, 8, 0, 1], 2010 [5, 9, 1, 3], 2011 [5, 10, 3, 2], 2012 [5, 11, 3, 1], 2013 [5, 12, 2, 3], 2014 [5, 13, 3, 3], 2015 [6, 28, 2, 0], 2016 [6, 29, 0, 2], 2017 [6, 30, 2, 4], 2018 [6, 31, 4, 2], 2019 [6, 32, 1, 4], 2020 [6, 33, 4, 1], 2021 [6, 34, 0, 0], 2022 [6, 35, 4, 3], 2023 [6, 36, 3, 4], 2024 [6, 37, 3, 0], 2025 [6, 38, 0, 3], 2026 [6, 39, 4, 4], 2027 [6, 40, 2, 5], 2028 [6, 41, 5, 2], 2029 [7, 84, 1, 5], 2030 [7, 85, 5, 1], 2031 [7, 86, 5, 3], 2032 [7, 87, 3, 5], 2033 [7, 88, 5, 4], 2034 [7, 89, 4, 5], 2035 [7, 90, 6, 2], 2036 [7, 91, 2, 6], 2037 [7, 92, 6, 3], 2038 [7, 93, 4, 0], 2039 [7, 94, 6, 1], 2040 [7, 95, 0, 4], 2041 [7, 96, 1, 6], 2042 [7, 97, 3, 6], 2043 [7, 98, 5, 5], 2044 [7, 99, 6, 4], 2045 [7, 100, 4, 6], 2046 [8, 202, 6, 5], 2047 [8, 203, 7, 2], 2048 [8, 204, 3, 7], 2049 [8, 205, 2, 7], 2050 [8, 206, 5, 6], 2051 [8, 207, 8, 2], 2052 [8, 208, 7, 3], 2053 [8, 209, 5, 0], 2054 [8, 210, 7, 1], 2055 [8, 211, 0, 5], 2056 [8, 212, 8, 1], 2057 [8, 213, 1, 7], 2058 [8, 214, 8, 3], 2059 [8, 215, 7, 4], 2060 [8, 216, 4, 7], 2061 [8, 217, 2, 8], 2062 [8, 218, 6, 6], 2063 [8, 219, 7, 5], 2064 [8, 220, 1, 8], 2065 [8, 221, 3, 8], 2066 [8, 222, 8, 4], 2067 [8, 223, 4, 8], 2068 [8, 224, 5, 7], 2069 [8, 225, 8, 5], 2070 [8, 226, 5, 8], 2071 [9, 454, 7, 6], 2072 [9, 455, 6, 7], 2073 [9, 456, 9, 2], 2074 [9, 457, 6, 0], 2075 [9, 458, 6, 8], 2076 [9, 459, 9, 3], 2077 [9, 460, 3, 9], 2078 [9, 461, 9, 1], 2079 [9, 462, 2, 9], 2080 [9, 463, 0, 6], 2081 [9, 464, 8, 6], 2082 [9, 465, 9, 4], 2083 [9, 466, 4, 9], 2084 [9, 467, 10, 2], 2085 [9, 468, 1, 9], 2086 [9, 469, 7, 7], 2087 [9, 470, 8, 7], 2088 [9, 471, 9, 5], 2089 [9, 472, 7, 8], 2090 [9, 473, 10, 3], 2091 [9, 474, 5, 9], 2092 [9, 475, 10, 4], 2093 [9, 476, 2, 10], 2094 [9, 477, 10, 1], 2095 [9, 478, 3, 10], 2096 [9, 479, 9, 6], 2097 [9, 480, 6, 9], 2098 [9, 481, 8, 0], 2099 [9, 482, 4, 10], 2100 [9, 483, 7, 0], 2101 [9, 484, 11, 2], 2102 [10, 970, 7, 9], 2103 [10, 971, 11, 3], 2104 [10, 972, 10, 6], 2105 [10, 973, 1, 10], 2106 [10, 974, 11, 1], 2107 [10, 975, 9, 7], 2108 [10, 976, 0, 7], 2109 [10, 977, 8, 8], 2110 [10, 978, 10, 5], 2111 [10, 979, 3, 11], 2112 [10, 980, 5, 10], 2113 [10, 981, 8, 9], 2114 [10, 982, 11, 5], 2115 [10, 983, 0, 8], 2116 [10, 984, 11, 4], 2117 [10, 985, 2, 11], 2118 [10, 986, 7, 10], 2119 [10, 987, 6, 10], 2120 [10, 988, 10, 7], 2121 [10, 989, 4, 11], 2122 [10, 990, 1, 11], 2123 [10, 991, 12, 2], 2124 [10, 992, 9, 8], 2125 [10, 993, 12, 3], 2126 [10, 994, 11, 6], 2127 [10, 995, 5, 11], 2128 [10, 996, 12, 4], 2129 [10, 997, 11, 7], 2130 [10, 998, 12, 5], 2131 [10, 999, 3, 12], 2132 [10, 1000, 6, 11], 2133 [10, 1001, 9, 0], 2134 [10, 1002, 10, 8], 2135 [10, 1003, 10, 0], 2136 [10, 1004, 12, 1], 2137 [10, 1005, 0, 9], 2138 [10, 1006, 4, 12], 2139 [10, 1007, 9, 9], 2140 [10, 1008, 12, 6], 2141 [10, 1009, 2, 12], 2142 [10, 1010, 8, 10], 2143 [11, 2022, 9, 10], 2144 [11, 2023, 1, 12], 2145 [11, 2024, 11, 8], 2146 [11, 2025, 12, 7], 2147 [11, 2026, 7, 11], 2148 [11, 2027, 5, 12], 2149 [11, 2028, 6, 12], 2150 [11, 2029, 10, 9], 2151 [11, 2030, 8, 11], 2152 [11, 2031, 12, 8], 2153 [11, 2032, 0, 10], 2154 [11, 2033, 7, 12], 2155 [11, 2034, 11, 0], 2156 [11, 2035, 10, 10], 2157 [11, 2036, 11, 9], 2158 [11, 2037, 11, 10], 2159 [11, 2038, 0, 11], 2160 [11, 2039, 11, 11], 2161 [11, 2040, 9, 11], 2162 [11, 2041, 10, 11], 2163 [11, 2042, 12, 0], 2164 [11, 2043, 8, 12], 2165 [12, 4088, 12, 9], 2166 [12, 4089, 10, 12], 2167 [12, 4090, 9, 12], 2168 [12, 4091, 11, 12], 2169 [12, 4092, 12, 11], 2170 [12, 4093, 0, 12], 2171 [12, 4094, 12, 10], 2172 [12, 4095, 12, 12] 2173]; 2174 2175const HCB11 = [ 2176 [4, 0, 0, 0], 2177 [4, 1, 1, 1], 2178 [5, 4, 16, 16], 2179 [5, 5, 1, 0], 2180 [5, 6, 0, 1], 2181 [5, 7, 2, 1], 2182 [5, 8, 1, 2], 2183 [5, 9, 2, 2], 2184 [6, 20, 1, 3], 2185 [6, 21, 3, 1], 2186 [6, 22, 3, 2], 2187 [6, 23, 2, 0], 2188 [6, 24, 2, 3], 2189 [6, 25, 0, 2], 2190 [6, 26, 3, 3], 2191 [7, 54, 4, 1], 2192 [7, 55, 1, 4], 2193 [7, 56, 4, 2], 2194 [7, 57, 2, 4], 2195 [7, 58, 4, 3], 2196 [7, 59, 3, 4], 2197 [7, 60, 3, 0], 2198 [7, 61, 0, 3], 2199 [7, 62, 5, 1], 2200 [7, 63, 5, 2], 2201 [7, 64, 2, 5], 2202 [7, 65, 4, 4], 2203 [7, 66, 1, 5], 2204 [7, 67, 5, 3], 2205 [7, 68, 3, 5], 2206 [7, 69, 5, 4], 2207 [8, 140, 4, 5], 2208 [8, 141, 6, 2], 2209 [8, 142, 2, 6], 2210 [8, 143, 6, 1], 2211 [8, 144, 6, 3], 2212 [8, 145, 3, 6], 2213 [8, 146, 1, 6], 2214 [8, 147, 4, 16], 2215 [8, 148, 3, 16], 2216 [8, 149, 16, 5], 2217 [8, 150, 16, 3], 2218 [8, 151, 16, 4], 2219 [8, 152, 6, 4], 2220 [8, 153, 16, 6], 2221 [8, 154, 4, 0], 2222 [8, 155, 4, 6], 2223 [8, 156, 0, 4], 2224 [8, 157, 2, 16], 2225 [8, 158, 5, 5], 2226 [8, 159, 5, 16], 2227 [8, 160, 16, 7], 2228 [8, 161, 16, 2], 2229 [8, 162, 16, 8], 2230 [8, 163, 2, 7], 2231 [8, 164, 7, 2], 2232 [8, 165, 3, 7], 2233 [8, 166, 6, 5], 2234 [8, 167, 5, 6], 2235 [8, 168, 6, 16], 2236 [8, 169, 16, 10], 2237 [8, 170, 7, 3], 2238 [8, 171, 7, 1], 2239 [8, 172, 16, 9], 2240 [8, 173, 7, 16], 2241 [8, 174, 1, 16], 2242 [8, 175, 1, 7], 2243 [8, 176, 4, 7], 2244 [8, 177, 16, 11], 2245 [8, 178, 7, 4], 2246 [8, 179, 16, 12], 2247 [8, 180, 8, 16], 2248 [8, 181, 16, 1], 2249 [8, 182, 6, 6], 2250 [8, 183, 9, 16], 2251 [8, 184, 2, 8], 2252 [8, 185, 5, 7], 2253 [8, 186, 10, 16], 2254 [8, 187, 16, 13], 2255 [8, 188, 8, 3], 2256 [8, 189, 8, 2], 2257 [8, 190, 3, 8], 2258 [8, 191, 5, 0], 2259 [8, 192, 16, 14], 2260 [8, 193, 11, 16], 2261 [8, 194, 7, 5], 2262 [8, 195, 4, 8], 2263 [8, 196, 6, 7], 2264 [8, 197, 7, 6], 2265 [8, 198, 0, 5], 2266 [9, 398, 8, 4], 2267 [9, 399, 16, 15], 2268 [9, 400, 12, 16], 2269 [9, 401, 1, 8], 2270 [9, 402, 8, 1], 2271 [9, 403, 14, 16], 2272 [9, 404, 5, 8], 2273 [9, 405, 13, 16], 2274 [9, 406, 3, 9], 2275 [9, 407, 8, 5], 2276 [9, 408, 7, 7], 2277 [9, 409, 2, 9], 2278 [9, 410, 8, 6], 2279 [9, 411, 9, 2], 2280 [9, 412, 9, 3], 2281 [9, 413, 15, 16], 2282 [9, 414, 4, 9], 2283 [9, 415, 6, 8], 2284 [9, 416, 6, 0], 2285 [9, 417, 9, 4], 2286 [9, 418, 5, 9], 2287 [9, 419, 8, 7], 2288 [9, 420, 7, 8], 2289 [9, 421, 1, 9], 2290 [9, 422, 10, 3], 2291 [9, 423, 0, 6], 2292 [9, 424, 10, 2], 2293 [9, 425, 9, 1], 2294 [9, 426, 9, 5], 2295 [9, 427, 4, 10], 2296 [9, 428, 2, 10], 2297 [9, 429, 9, 6], 2298 [9, 430, 3, 10], 2299 [9, 431, 6, 9], 2300 [9, 432, 10, 4], 2301 [9, 433, 8, 8], 2302 [9, 434, 10, 5], 2303 [9, 435, 9, 7], 2304 [9, 436, 11, 3], 2305 [9, 437, 1, 10], 2306 [9, 438, 7, 0], 2307 [9, 439, 10, 6], 2308 [9, 440, 7, 9], 2309 [9, 441, 3, 11], 2310 [9, 442, 5, 10], 2311 [9, 443, 10, 1], 2312 [9, 444, 4, 11], 2313 [9, 445, 11, 2], 2314 [9, 446, 13, 2], 2315 [9, 447, 6, 10], 2316 [9, 448, 13, 3], 2317 [9, 449, 2, 11], 2318 [9, 450, 16, 0], 2319 [9, 451, 5, 11], 2320 [9, 452, 11, 5], 2321 [10, 906, 11, 4], 2322 [10, 907, 9, 8], 2323 [10, 908, 7, 10], 2324 [10, 909, 8, 9], 2325 [10, 910, 0, 16], 2326 [10, 911, 4, 13], 2327 [10, 912, 0, 7], 2328 [10, 913, 3, 13], 2329 [10, 914, 11, 6], 2330 [10, 915, 13, 1], 2331 [10, 916, 13, 4], 2332 [10, 917, 12, 3], 2333 [10, 918, 2, 13], 2334 [10, 919, 13, 5], 2335 [10, 920, 8, 10], 2336 [10, 921, 6, 11], 2337 [10, 922, 10, 8], 2338 [10, 923, 10, 7], 2339 [10, 924, 14, 2], 2340 [10, 925, 12, 4], 2341 [10, 926, 1, 11], 2342 [10, 927, 4, 12], 2343 [10, 928, 11, 1], 2344 [10, 929, 3, 12], 2345 [10, 930, 1, 13], 2346 [10, 931, 12, 2], 2347 [10, 932, 7, 11], 2348 [10, 933, 3, 14], 2349 [10, 934, 5, 12], 2350 [10, 935, 5, 13], 2351 [10, 936, 14, 4], 2352 [10, 937, 4, 14], 2353 [10, 938, 11, 7], 2354 [10, 939, 14, 3], 2355 [10, 940, 12, 5], 2356 [10, 941, 13, 6], 2357 [10, 942, 12, 6], 2358 [10, 943, 8, 0], 2359 [10, 944, 11, 8], 2360 [10, 945, 2, 12], 2361 [10, 946, 9, 9], 2362 [10, 947, 14, 5], 2363 [10, 948, 6, 13], 2364 [10, 949, 10, 10], 2365 [10, 950, 15, 2], 2366 [10, 951, 8, 11], 2367 [10, 952, 9, 10], 2368 [10, 953, 14, 6], 2369 [10, 954, 10, 9], 2370 [10, 955, 5, 14], 2371 [10, 956, 11, 9], 2372 [10, 957, 14, 1], 2373 [10, 958, 2, 14], 2374 [10, 959, 6, 12], 2375 [10, 960, 1, 12], 2376 [10, 961, 13, 8], 2377 [10, 962, 0, 8], 2378 [10, 963, 13, 7], 2379 [10, 964, 7, 12], 2380 [10, 965, 12, 7], 2381 [10, 966, 7, 13], 2382 [10, 967, 15, 3], 2383 [10, 968, 12, 1], 2384 [10, 969, 6, 14], 2385 [10, 970, 2, 15], 2386 [10, 971, 15, 5], 2387 [10, 972, 15, 4], 2388 [10, 973, 1, 14], 2389 [10, 974, 9, 11], 2390 [10, 975, 4, 15], 2391 [10, 976, 14, 7], 2392 [10, 977, 8, 13], 2393 [10, 978, 13, 9], 2394 [10, 979, 8, 12], 2395 [10, 980, 5, 15], 2396 [10, 981, 3, 15], 2397 [10, 982, 10, 11], 2398 [10, 983, 11, 10], 2399 [10, 984, 12, 8], 2400 [10, 985, 15, 6], 2401 [10, 986, 15, 7], 2402 [10, 987, 8, 14], 2403 [10, 988, 15, 1], 2404 [10, 989, 7, 14], 2405 [10, 990, 9, 0], 2406 [10, 991, 0, 9], 2407 [10, 992, 9, 13], 2408 [10, 993, 9, 12], 2409 [10, 994, 12, 9], 2410 [10, 995, 14, 8], 2411 [10, 996, 10, 13], 2412 [10, 997, 14, 9], 2413 [10, 998, 12, 10], 2414 [10, 999, 6, 15], 2415 [10, 1000, 7, 15], 2416 [11, 2002, 9, 14], 2417 [11, 2003, 15, 8], 2418 [11, 2004, 11, 11], 2419 [11, 2005, 11, 14], 2420 [11, 2006, 1, 15], 2421 [11, 2007, 10, 12], 2422 [11, 2008, 10, 14], 2423 [11, 2009, 13, 11], 2424 [11, 2010, 13, 10], 2425 [11, 2011, 11, 13], 2426 [11, 2012, 11, 12], 2427 [11, 2013, 8, 15], 2428 [11, 2014, 14, 11], 2429 [11, 2015, 13, 12], 2430 [11, 2016, 12, 13], 2431 [11, 2017, 15, 9], 2432 [11, 2018, 14, 10], 2433 [11, 2019, 10, 0], 2434 [11, 2020, 12, 11], 2435 [11, 2021, 9, 15], 2436 [11, 2022, 0, 10], 2437 [11, 2023, 12, 12], 2438 [11, 2024, 11, 0], 2439 [11, 2025, 12, 14], 2440 [11, 2026, 10, 15], 2441 [11, 2027, 13, 13], 2442 [11, 2028, 0, 13], 2443 [11, 2029, 14, 12], 2444 [11, 2030, 15, 10], 2445 [11, 2031, 15, 11], 2446 [11, 2032, 11, 15], 2447 [11, 2033, 14, 13], 2448 [11, 2034, 13, 0], 2449 [11, 2035, 0, 11], 2450 [11, 2036, 13, 14], 2451 [11, 2037, 15, 12], 2452 [11, 2038, 15, 13], 2453 [11, 2039, 12, 15], 2454 [11, 2040, 14, 0], 2455 [11, 2041, 14, 14], 2456 [11, 2042, 13, 15], 2457 [11, 2043, 12, 0], 2458 [11, 2044, 14, 15], 2459 [12, 4090, 0, 14], 2460 [12, 4091, 0, 12], 2461 [12, 4092, 15, 14], 2462 [12, 4093, 15, 0], 2463 [12, 4094, 0, 15], 2464 [12, 4095, 15, 15] 2465]; 2466 2467const HCB_SF = [ 2468 [1, 0, 60], 2469 [3, 4, 59], 2470 [4, 10, 61], 2471 [4, 11, 58], 2472 [4, 12, 62], 2473 [5, 26, 57], 2474 [5, 27, 63], 2475 [6, 56, 56], 2476 [6, 57, 64], 2477 [6, 58, 55], 2478 [6, 59, 65], 2479 [7, 120, 66], 2480 [7, 121, 54], 2481 [7, 122, 67], 2482 [8, 246, 53], 2483 [8, 247, 68], 2484 [8, 248, 52], 2485 [8, 249, 69], 2486 [8, 250, 51], 2487 [9, 502, 70], 2488 [9, 503, 50], 2489 [9, 504, 49], 2490 [9, 505, 71], 2491 [10, 1012, 72], 2492 [10, 1013, 48], 2493 [10, 1014, 73], 2494 [10, 1015, 47], 2495 [10, 1016, 74], 2496 [10, 1017, 46], 2497 [11, 2036, 76], 2498 [11, 2037, 75], 2499 [11, 2038, 77], 2500 [11, 2039, 78], 2501 [11, 2040, 45], 2502 [11, 2041, 43], 2503 [12, 4084, 44], 2504 [12, 4085, 79], 2505 [12, 4086, 42], 2506 [12, 4087, 41], 2507 [12, 4088, 80], 2508 [12, 4089, 40], 2509 [13, 8180, 81], 2510 [13, 8181, 39], 2511 [13, 8182, 82], 2512 [13, 8183, 38], 2513 [13, 8184, 83], 2514 [14, 16370, 37], 2515 [14, 16371, 35], 2516 [14, 16372, 85], 2517 [14, 16373, 33], 2518 [14, 16374, 36], 2519 [14, 16375, 34], 2520 [14, 16376, 84], 2521 [14, 16377, 32], 2522 [15, 32756, 87], 2523 [15, 32757, 89], 2524 [15, 32758, 30], 2525 [15, 32759, 31], 2526 [16, 65520, 86], 2527 [16, 65521, 29], 2528 [16, 65522, 26], 2529 [16, 65523, 27], 2530 [16, 65524, 28], 2531 [16, 65525, 24], 2532 [16, 65526, 88], 2533 [17, 131054, 25], 2534 [17, 131055, 22], 2535 [17, 131056, 23], 2536 [18, 262114, 90], 2537 [18, 262115, 21], 2538 [18, 262116, 19], 2539 [18, 262117, 3], 2540 [18, 262118, 1], 2541 [18, 262119, 2], 2542 [18, 262120, 0], 2543 [19, 524242, 98], 2544 [19, 524243, 99], 2545 [19, 524244, 100], 2546 [19, 524245, 101], 2547 [19, 524246, 102], 2548 [19, 524247, 117], 2549 [19, 524248, 97], 2550 [19, 524249, 91], 2551 [19, 524250, 92], 2552 [19, 524251, 93], 2553 [19, 524252, 94], 2554 [19, 524253, 95], 2555 [19, 524254, 96], 2556 [19, 524255, 104], 2557 [19, 524256, 111], 2558 [19, 524257, 112], 2559 [19, 524258, 113], 2560 [19, 524259, 114], 2561 [19, 524260, 115], 2562 [19, 524261, 116], 2563 [19, 524262, 110], 2564 [19, 524263, 105], 2565 [19, 524264, 106], 2566 [19, 524265, 107], 2567 [19, 524266, 108], 2568 [19, 524267, 109], 2569 [19, 524268, 118], 2570 [19, 524269, 6], 2571 [19, 524270, 8], 2572 [19, 524271, 9], 2573 [19, 524272, 10], 2574 [19, 524273, 5], 2575 [19, 524274, 103], 2576 [19, 524275, 120], 2577 [19, 524276, 119], 2578 [19, 524277, 4], 2579 [19, 524278, 7], 2580 [19, 524279, 15], 2581 [19, 524280, 16], 2582 [19, 524281, 18], 2583 [19, 524282, 20], 2584 [19, 524283, 17], 2585 [19, 524284, 11], 2586 [19, 524285, 12], 2587 [19, 524286, 14], 2588 [19, 524287, 13] 2589]; 2590 2591const CODEBOOKS = [HCB1, HCB2, HCB3, HCB4, HCB5, HCB6, HCB7, HCB8, HCB9, HCB10, HCB11]; 2592const UNSIGNED = [false, false, true, true, false, false, true, true, true, true, true], 2593 QUAD_LEN = 4, 2594 PAIR_LEN = 2; 2595 2596var Huffman = { 2597 findOffset: function(stream, table) { 2598 var off = 0, 2599 len = table[off][0], 2600 cw = stream.read(len); 2601 2602 while (cw !== table[off][1]) { 2603 var j = table[++off][0] - len; 2604 len = table[off][0]; 2605 cw <<= j; 2606 cw |= stream.read(j); 2607 } 2608 2609 return off; 2610 }, 2611 2612 signValues: function(stream, data, off, len) { 2613 for (var i = off; i < off + len; i++) { 2614 if (data[i] && stream.read(1)) 2615 data[i] = -data[i]; 2616 } 2617 }, 2618 2619 getEscape: function(stream, s) { 2620 var i = 4; 2621 while (stream.read(1)) 2622 i++; 2623 2624 var j = stream.read(i) | (1 << i); 2625 return s < 0 ? -j : j; 2626 }, 2627 2628 decodeScaleFactor: function(stream) { 2629 var offset = this.findOffset(stream, HCB_SF); 2630 return HCB_SF[offset][2]; 2631 }, 2632 2633 decodeSpectralData: function(stream, cb, data, off) { 2634 var HCB = CODEBOOKS[cb - 1], 2635 offset = this.findOffset(stream, HCB); 2636 2637 data[off] = HCB[offset][2]; 2638 data[off + 1] = HCB[offset][3]; 2639 2640 if (cb < 5) { 2641 data[off + 2] = HCB[offset][4]; 2642 data[off + 3] = HCB[offset][5]; 2643 } 2644 2645 // sign and escape 2646 if (cb < 11) { 2647 if (UNSIGNED[cb - 1]) 2648 this.signValues(stream, data, off, cb < 5 ? QUAD_LEN : PAIR_LEN); 2649 2650 } else if (cb === 11 || cb > 15) { 2651 this.signValues(stream, data, off, cb < 5 ? QUAD_LEN : PAIR_LEN); 2652 2653 if (Math.abs(data[off]) === 16) 2654 data[off] = this.getEscape(stream, data[off]); 2655 2656 if (Math.abs(data[off + 1]) === 16) 2657 data[off + 1] = this.getEscape(stream, data[off + 1]); 2658 } else { 2659 throw new Error("Huffman: unknown spectral codebook: " + cb); 2660 } 2661 } 2662}; 2663 2664module.exports = Huffman; 2665 2666},{}],8:[function(require,module,exports){ 2667/* 2668 * AAC.js - Advanced Audio Coding decoder in JavaScript 2669 * Created by Devon Govett 2670 * Copyright (c) 2012, Official.fm Labs 2671 * 2672 * AAC.js is free software; you can redistribute it and/or modify it 2673 * under the terms of the GNU Lesser General Public License as 2674 * published by the Free Software Foundation; either version 3 of the 2675 * License, or (at your option) any later version. 2676 * 2677 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 2678 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 2679 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 2680 * Public License for more details. 2681 * 2682 * You should have received a copy of the GNU Lesser General Public 2683 * License along with this library. 2684 * If not, see <http://www.gnu.org/licenses/>. 2685 */ 2686 2687var tables = require('./tables'); 2688var Huffman = require('./huffman'); 2689var TNS = require('./tns'); 2690 2691// Individual Channel Stream 2692function ICStream(config) { 2693 this.info = new ICSInfo(); 2694 this.bandTypes = new Int32Array(MAX_SECTIONS); 2695 this.sectEnd = new Int32Array(MAX_SECTIONS); 2696 this.data = new Float32Array(config.frameLength); 2697 this.scaleFactors = new Float32Array(MAX_SECTIONS); 2698 this.randomState = 0x1F2E3D4C; 2699 this.tns = new TNS(config); 2700 this.specBuf = new Int32Array(4); 2701} 2702 2703ICStream.ZERO_BT = 0; // Scalefactors and spectral data are all zero. 2704ICStream.FIRST_PAIR_BT = 5; // This and later band types encode two values (rather than four) with one code word. 2705ICStream.ESC_BT = 11; // Spectral data are coded with an escape sequence. 2706ICStream.NOISE_BT = 13; // Spectral data are scaled white noise not coded in the bitstream. 2707ICStream.INTENSITY_BT2 = 14; // Scalefactor data are intensity stereo positions. 2708ICStream.INTENSITY_BT = 15; // Scalefactor data are intensity stereo positions. 2709 2710ICStream.ONLY_LONG_SEQUENCE = 0; 2711ICStream.LONG_START_SEQUENCE = 1; 2712ICStream.EIGHT_SHORT_SEQUENCE = 2; 2713ICStream.LONG_STOP_SEQUENCE = 3; 2714 2715const MAX_SECTIONS = 120, 2716 MAX_WINDOW_GROUP_COUNT = 8; 2717 2718const SF_DELTA = 60, 2719 SF_OFFSET = 200; 2720 2721ICStream.prototype = { 2722 decode: function(stream, config, commonWindow) { 2723 this.globalGain = stream.read(8); 2724 2725 if (!commonWindow) 2726 this.info.decode(stream, config, commonWindow); 2727 2728 this.decodeBandTypes(stream, config); 2729 this.decodeScaleFactors(stream); 2730 2731 if (this.pulsePresent = stream.read(1)) { 2732 if (this.info.windowSequence === ICStream.EIGHT_SHORT_SEQUENCE) 2733 throw new Error("Pulse tool not allowed in eight short sequence."); 2734 2735 this.decodePulseData(stream); 2736 } 2737 2738 if (this.tnsPresent = stream.read(1)) { 2739 this.tns.decode(stream, this.info); 2740 } 2741 2742 if (this.gainPresent = stream.read(1)) { 2743 throw new Error("TODO: decode gain control/SSR"); 2744 } 2745 2746 this.decodeSpectralData(stream); 2747 }, 2748 2749 decodeBandTypes: function(stream, config) { 2750 var bits = this.info.windowSequence === ICStream.EIGHT_SHORT_SEQUENCE ? 3 : 5, 2751 groupCount = this.info.groupCount, 2752 maxSFB = this.info.maxSFB, 2753 bandTypes = this.bandTypes, 2754 sectEnd = this.sectEnd, 2755 idx = 0, 2756 escape = (1 << bits) - 1; 2757 2758 for (var g = 0; g < groupCount; g++) { 2759 var k = 0; 2760 while (k < maxSFB) { 2761 var end = k, 2762 bandType = stream.read(4); 2763 2764 if (bandType === 12) 2765 throw new Error("Invalid band type: 12"); 2766 2767 var incr; 2768 while ((incr = stream.read(bits)) === escape) 2769 end += incr; 2770 2771 end += incr; 2772 2773 if (end > maxSFB) 2774 throw new Error("Too many bands (" + end + " > " + maxSFB + ")"); 2775 2776 for (; k < end; k++) { 2777 bandTypes[idx] = bandType; 2778 sectEnd[idx++] = end; 2779 } 2780 } 2781 } 2782 }, 2783 2784 decodeScaleFactors: function(stream) { 2785 var groupCount = this.info.groupCount, 2786 maxSFB = this.info.maxSFB, 2787 offset = [this.globalGain, this.globalGain - 90, 0], // spectrum, noise, intensity 2788 idx = 0, 2789 noiseFlag = true, 2790 scaleFactors = this.scaleFactors, 2791 sectEnd = this.sectEnd, 2792 bandTypes = this.bandTypes; 2793 2794 for (var g = 0; g < groupCount; g++) { 2795 for (var i = 0; i < maxSFB;) { 2796 var runEnd = sectEnd[idx]; 2797 2798 switch (bandTypes[idx]) { 2799 case ICStream.ZERO_BT: 2800 for (; i < runEnd; i++, idx++) { 2801 scaleFactors[idx] = 0; 2802 } 2803 break; 2804 2805 case ICStream.INTENSITY_BT: 2806 case ICStream.INTENSITY_BT2: 2807 for(; i < runEnd; i++, idx++) { 2808 offset[2] += Huffman.decodeScaleFactor(stream) - SF_DELTA; 2809 var tmp = Math.min(Math.max(offset[2], -155), 100); 2810 scaleFactors[idx] = tables.SCALEFACTOR_TABLE[-tmp + SF_OFFSET]; 2811 } 2812 break; 2813 2814 case ICStream.NOISE_BT: 2815 for(; i < runEnd; i++, idx++) { 2816 if (noiseFlag) { 2817 offset[1] += stream.read(9) - 256; 2818 noiseFlag = false; 2819 } else { 2820 offset[1] += Huffman.decodeScaleFactor(stream) - SF_DELTA; 2821 } 2822 var tmp = Math.min(Math.max(offset[1], -100), 155); 2823 scaleFactors[idx] = -tables.SCALEFACTOR_TABLE[tmp + SF_OFFSET]; 2824 } 2825 break; 2826 2827 default: 2828 for(; i < runEnd; i++, idx++) { 2829 offset[0] += Huffman.decodeScaleFactor(stream) - SF_DELTA; 2830 if(offset[0] > 255) 2831 throw new Error("Scalefactor out of range: " + offset[0]); 2832 2833 scaleFactors[idx] = tables.SCALEFACTOR_TABLE[offset[0] - 100 + SF_OFFSET]; 2834 } 2835 break; 2836 } 2837 } 2838 } 2839 }, 2840 2841 decodePulseData: function(stream) { 2842 var pulseCount = stream.read(2) + 1, 2843 pulseSWB = stream.read(6); 2844 2845 if (pulseSWB >= this.info.swbCount) 2846 throw new Error("Pulse SWB out of range: " + pulseSWB); 2847 2848 if (!this.pulseOffset || this.pulseOffset.length !== pulseCount) { 2849 // only reallocate if needed 2850 this.pulseOffset = new Int32Array(pulseCount); 2851 this.pulseAmp = new Int32Array(pulseCount); 2852 } 2853 2854 this.pulseOffset[0] = this.info.swbOffsets[pulseSWB] + stream.read(5); 2855 this.pulseAmp[0] = stream.read(4); 2856 2857 if (this.pulseOffset[0] > 1023) 2858 throw new Error("Pulse offset out of range: " + this.pulseOffset[0]); 2859 2860 for (var i = 1; i < pulseCount; i++) { 2861 this.pulseOffset[i] = stream.read(5) + this.pulseOffset[i - 1]; 2862 if (this.pulseOffset[i] > 1023) 2863 throw new Error("Pulse offset out of range: " + this.pulseOffset[i]); 2864 2865 this.pulseAmp[i] = stream.read(4); 2866 } 2867 }, 2868 2869 decodeSpectralData: function(stream) { 2870 var data = this.data, 2871 info = this.info, 2872 maxSFB = info.maxSFB, 2873 windowGroups = info.groupCount, 2874 offsets = info.swbOffsets, 2875 bandTypes = this.bandTypes, 2876 scaleFactors = this.scaleFactors, 2877 buf = this.specBuf; 2878 2879 var groupOff = 0, idx = 0; 2880 for (var g = 0; g < windowGroups; g++) { 2881 var groupLen = info.groupLength[g]; 2882 2883 for (var sfb = 0; sfb < maxSFB; sfb++, idx++) { 2884 var hcb = bandTypes[idx], 2885 off = groupOff + offsets[sfb], 2886 width = offsets[sfb + 1] - offsets[sfb]; 2887 2888 if (hcb === ICStream.ZERO_BT || hcb === ICStream.INTENSITY_BT || hcb === ICStream.INTENSITY_BT2) { 2889 for (var group = 0; group < groupLen; group++, off += 128) { 2890 for (var i = off; i < off + width; i++) { 2891 data[i] = 0; 2892 } 2893 } 2894 } else if (hcb === ICStream.NOISE_BT) { 2895 // fill with random values 2896 for (var group = 0; group < groupLen; group++, off += 128) { 2897 var energy = 0; 2898 2899 for (var k = 0; k < width; k++) { 2900 this.randomState *= 1664525 + 1013904223; 2901 data[off + k] = this.randomState; 2902 energy += data[off + k] * data[off + k]; 2903 } 2904 2905 var scale = scaleFactors[idx] / Math.sqrt(energy); 2906 for (var k = 0; k < width; k++) { 2907 data[off + k] *= scale; 2908 } 2909 } 2910 } else { 2911 for (var group = 0; group < groupLen; group++, off += 128) { 2912 var num = (hcb >= ICStream.FIRST_PAIR_BT) ? 2 : 4; 2913 for (var k = 0; k < width; k += num) { 2914 Huffman.decodeSpectralData(stream, hcb, buf, 0); 2915 2916 // inverse quantization & scaling 2917 for (var j = 0; j < num; j++) { 2918 data[off + k + j] = (buf[j] > 0) ? tables.IQ_TABLE[buf[j]] : -tables.IQ_TABLE[-buf[j]]; 2919 data[off + k + j] *= scaleFactors[idx]; 2920 } 2921 } 2922 } 2923 } 2924 } 2925 groupOff += groupLen << 7; 2926 } 2927 2928 // add pulse data, if present 2929 if (this.pulsePresent) { 2930 throw new Error('TODO: add pulse data'); 2931 } 2932 } 2933} 2934 2935// Individual Channel Stream Info 2936function ICSInfo() { 2937 this.windowShape = new Int32Array(2); 2938 this.windowSequence = ICStream.ONLY_LONG_SEQUENCE; 2939 this.groupLength = new Int32Array(MAX_WINDOW_GROUP_COUNT); 2940 this.ltpData1Present = false; 2941 this.ltpData2Present = false; 2942} 2943 2944ICSInfo.prototype = { 2945 decode: function(stream, config, commonWindow) { 2946 stream.advance(1); // reserved 2947 2948 this.windowSequence = stream.read(2); 2949 this.windowShape[0] = this.windowShape[1]; 2950 this.windowShape[1] = stream.read(1); 2951 2952 this.groupCount = 1; 2953 this.groupLength[0] = 1; 2954 2955 if (this.windowSequence === ICStream.EIGHT_SHORT_SEQUENCE) { 2956 this.maxSFB = stream.read(4); 2957 for (var i = 0; i < 7; i++) { 2958 if (stream.read(1)) { 2959 this.groupLength[this.groupCount - 1]++; 2960 } else { 2961 this.groupCount++; 2962 this.groupLength[this.groupCount - 1] = 1; 2963 } 2964 } 2965 2966 this.windowCount = 8; 2967 this.swbOffsets = tables.SWB_OFFSET_128[config.sampleIndex]; 2968 this.swbCount = tables.SWB_SHORT_WINDOW_COUNT[config.sampleIndex]; 2969 this.predictorPresent = false; 2970 } else { 2971 this.maxSFB = stream.read(6); 2972 this.windowCount = 1; 2973 this.swbOffsets = tables.SWB_OFFSET_1024[config.sampleIndex]; 2974 this.swbCount = tables.SWB_LONG_WINDOW_COUNT[config.sampleIndex]; 2975 this.predictorPresent = !!stream.read(1); 2976 2977 if (this.predictorPresent) 2978 this.decodePrediction(stream, config, commonWindow); 2979 } 2980 }, 2981 2982 decodePrediction: function(stream, config, commonWindow) { 2983 throw new Error('Prediction not implemented.'); 2984 2985 switch (config.profile) { 2986 case AOT_AAC_MAIN: 2987 throw new Error('Prediction not implemented.'); 2988 break; 2989 2990 case AOT_AAC_LTP: 2991 throw new Error('LTP prediction not implemented.'); 2992 break; 2993 2994 default: 2995 throw new Error('Unsupported profile for prediction ' + config.profile); 2996 } 2997 } 2998}; 2999 3000module.exports = ICStream; 3001 3002},{"./huffman":7,"./tables":11,"./tns":12}],9:[function(require,module,exports){ 3003/* 3004 * AAC.js - Advanced Audio Coding decoder in JavaScript 3005 * Created by Devon Govett 3006 * Copyright (c) 2012, Official.fm Labs 3007 * 3008 * AAC.js is free software; you can redistribute it and/or modify it 3009 * under the terms of the GNU Lesser General Public License as 3010 * published by the Free Software Foundation; either version 3 of the 3011 * License, or (at your option) any later version. 3012 * 3013 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 3014 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 3015 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 3016 * Public License for more details. 3017 * 3018 * You should have received a copy of the GNU Lesser General Public 3019 * License along with this library. 3020 * If not, see <http://www.gnu.org/licenses/>. 3021 */ 3022 3023var tables = require('./mdct_tables'); 3024var FFT = require('./fft'); 3025 3026// Modified Discrete Cosine Transform 3027function MDCT(length) { 3028 this.N = length; 3029 this.N2 = length >>> 1; 3030 this.N4 = length >>> 2; 3031 this.N8 = length >>> 3; 3032 3033 switch (length) { 3034 case 2048: 3035 this.sincos = tables.MDCT_TABLE_2048; 3036 break; 3037 3038 case 256: 3039 this.sincos = tables.MDCT_TABLE_256; 3040 break; 3041 3042 case 1920: 3043 this.sincos = tables.MDCT_TABLE_1920; 3044 break; 3045 3046 case 240: 3047 this.sincos = tables.MDCT_TABLE_240; 3048 break; 3049 3050 default: 3051 throw new Error("unsupported MDCT length: " + length); 3052 } 3053 3054 this.fft = new FFT(this.N4); 3055 3056 this.buf = new Array(this.N4); 3057 for (var i = 0; i < this.N4; i++) { 3058 this.buf[i] = new Float32Array(2); 3059 } 3060 3061 this.tmp = new Float32Array(2); 3062} 3063 3064MDCT.prototype.process = function(input, inOffset, output, outOffset) { 3065 // local access 3066 var N2 = this.N2, 3067 N4 = this.N4, 3068 N8 = this.N8, 3069 buf = this.buf, 3070 tmp = this.tmp, 3071 sincos = this.sincos, 3072 fft = this.fft; 3073 3074 // pre-IFFT complex multiplication 3075 for (var k = 0; k < N4; k++) { 3076 buf[k][1] = (input[inOffset + 2 * k] * sincos[k][0]) + (input[inOffset + N2 - 1 - 2 * k] * sincos[k][1]); 3077 buf[k][0] = (input[inOffset + N2 - 1 - 2 * k] * sincos[k][0]) - (input[inOffset + 2 * k] * sincos[k][1]); 3078 } 3079 3080 // complex IFFT, non-scaling 3081 fft.process(buf, false); 3082 3083 // post-IFFT complex multiplication 3084 for (var k = 0; k < N4; k++) { 3085 tmp[0] = buf[k][0]; 3086 tmp[1] = buf[k][1]; 3087 buf[k][1] = (tmp[1] * sincos[k][0]) + (tmp[0] * sincos[k][1]); 3088 buf[k][0] = (tmp[0] * sincos[k][0]) - (tmp[1] * sincos[k][1]); 3089 } 3090 3091 // reordering 3092 for (var k = 0; k < N8; k += 2) { 3093 output[outOffset + 2 * k] = buf[N8 + k][1]; 3094 output[outOffset + 2 + 2 * k] = buf[N8 + 1 + k][1]; 3095 3096 output[outOffset + 1 + 2 * k] = -buf[N8 - 1 - k][0]; 3097 output[outOffset + 3 + 2 * k] = -buf[N8 - 2 - k][0]; 3098 3099 output[outOffset + N4 + 2 * k] = buf[k][0]; 3100 output[outOffset + N4 + 2 + 2 * k] = buf[1 + k][0]; 3101 3102 output[outOffset + N4 + 1 + 2 * k] = -buf[N4 - 1 - k][1]; 3103 output[outOffset + N4 + 3 + 2 * k] = -buf[N4 - 2 - k][1]; 3104 3105 output[outOffset + N2 + 2 * k] = buf[N8 + k][0]; 3106 output[outOffset + N2 + 2 + 2 * k] = buf[N8 + 1 + k][0]; 3107 3108 output[outOffset + N2 + 1 + 2 * k] = -buf[N8 - 1 - k][1]; 3109 output[outOffset + N2 + 3 + 2 * k] = -buf[N8 - 2 - k][1]; 3110 3111 output[outOffset + N2 + N4 + 2 * k] = -buf[k][1]; 3112 output[outOffset + N2 + N4 + 2 + 2 * k] = -buf[1 + k][1]; 3113 3114 output[outOffset + N2 + N4 + 1 + 2 * k] = buf[N4 - 1 - k][0]; 3115 output[outOffset + N2 + N4 + 3 + 2 * k] = buf[N4 - 2 - k][0]; 3116 } 3117}; 3118 3119module.exports = MDCT; 3120 3121},{"./fft":5,"./mdct_tables":10}],10:[function(require,module,exports){ 3122/* 3123 * AAC.js - Advanced Audio Coding decoder in JavaScript 3124 * Created by Devon Govett 3125 * Copyright (c) 2012, Official.fm Labs 3126 * 3127 * AAC.js is free software; you can redistribute it and/or modify it 3128 * under the terms of the GNU Lesser General Public License as 3129 * published by the Free Software Foundation; either version 3 of the 3130 * License, or (at your option) any later version. 3131 * 3132 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 3133 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 3134 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 3135 * Public License for more details. 3136 * 3137 * You should have received a copy of the GNU Lesser General Public 3138 * License along with this library. 3139 * If not, see <http://www.gnu.org/licenses/>. 3140 */ 3141 3142exports.MDCT_TABLE_2048 = [ 3143 [0.031249997702054, 0.000011984224612], 3144 [0.031249813866531, 0.000107857810004], 3145 [0.031249335895858, 0.000203730380198], 3146 [0.031248563794535, 0.000299601032804], 3147 [0.031247497569829, 0.000395468865451], 3148 [0.031246137231775, 0.000491332975794], 3149 [0.031244482793177, 0.000587192461525], 3150 [0.031242534269608, 0.000683046420376], 3151 [0.031240291679407, 0.000778893950134], 3152 [0.031237755043684, 0.000874734148645], 3153 [0.031234924386313, 0.000970566113826], 3154 [0.031231799733938, 0.001066388943669], 3155 [0.031228381115970, 0.001162201736253], 3156 [0.031224668564585, 0.001258003589751], 3157 [0.031220662114728, 0.001353793602441], 3158 [0.031216361804108, 0.001449570872710], 3159 [0.031211767673203, 0.001545334499065], 3160 [0.031206879765253, 0.001641083580144], 3161 [0.031201698126266, 0.001736817214719], 3162 [0.031196222805014, 0.001832534501709], 3163 [0.031190453853031, 0.001928234540186], 3164 [0.031184391324617, 0.002023916429386], 3165 [0.031178035276836, 0.002119579268713], 3166 [0.031171385769513, 0.002215222157753], 3167 [0.031164442865236, 0.002310844196278], 3168 [0.031157206629353, 0.002406444484258], 3169 [0.031149677129975, 0.002502022121865], 3170 [0.031141854437973, 0.002597576209488], 3171 [0.031133738626977, 0.002693105847734], 3172 [0.031125329773375, 0.002788610137442], 3173 [0.031116627956316, 0.002884088179689], 3174 [0.031107633257703, 0.002979539075801], 3175 [0.031098345762200, 0.003074961927355], 3176 [0.031088765557222, 0.003170355836197], 3177 [0.031078892732942, 0.003265719904442], 3178 [0.031068727382288, 0.003361053234488], 3179 [0.031058269600939, 0.003456354929021], 3180 [0.031047519487329, 0.003551624091024], 3181 [0.031036477142640, 0.003646859823790], 3182 [0.031025142670809, 0.003742061230921], 3183 [0.031013516178519, 0.003837227416347], 3184 [0.031001597775203, 0.003932357484328], 3185 [0.030989387573042, 0.004027450539462], 3186 [0.030976885686963, 0.004122505686697], 3187 [0.030964092234638, 0.004217522031340], 3188 [0.030951007336485, 0.004312498679058], 3189 [0.030937631115663, 0.004407434735897], 3190 [0.030923963698074, 0.004502329308281], 3191 [0.030910005212362, 0.004597181503027], 3192 [0.030895755789908, 0.004691990427350], 3193 [0.030881215564835, 0.004786755188872], 3194 [0.030866384674000, 0.004881474895632], 3195 [0.030851263256996, 0.004976148656090], 3196 [0.030835851456154, 0.005070775579142], 3197 [0.030820149416533, 0.005165354774124], 3198 [0.030804157285929, 0.005259885350819], 3199 [0.030787875214864, 0.005354366419469], 3200 [0.030771303356593, 0.005448797090784], 3201 [0.030754441867095, 0.005543176475946], 3202 [0.030737290905077, 0.005637503686619], 3203 [0.030719850631972, 0.005731777834961], 3204 [0.030702121211932, 0.005825998033626], 3205 [0.030684102811835, 0.005920163395780], 3206 [0.030665795601276, 0.006014273035101], 3207 [0.030647199752570, 0.006108326065793], 3208 [0.030628315440748, 0.006202321602594], 3209 [0.030609142843557, 0.006296258760782], 3210 [0.030589682141455, 0.006390136656185], 3211 [0.030569933517616, 0.006483954405188], 3212 [0.030549897157919, 0.006577711124743], 3213 [0.030529573250956, 0.006671405932375], 3214 [0.030508961988022, 0.006765037946194], 3215 [0.030488063563118, 0.006858606284900], 3216 [0.030466878172949, 0.006952110067791], 3217 [0.030445406016919, 0.007045548414774], 3218 [0.030423647297133, 0.007138920446372], 3219 [0.030401602218392, 0.007232225283733], 3220 [0.030379270988192, 0.007325462048634], 3221 [0.030356653816724, 0.007418629863497], 3222 [0.030333750916869, 0.007511727851390], 3223 [0.030310562504198, 0.007604755136040], 3224 [0.030287088796968, 0.007697710841838], 3225 [0.030263330016124, 0.007790594093851], 3226 [0.030239286385293, 0.007883404017824], 3227 [0.030214958130781, 0.007976139740197], 3228 [0.030190345481576, 0.008068800388104], 3229 [0.030165448669342, 0.008161385089390], 3230 [0.030140267928416, 0.008253892972610], 3231 [0.030114803495809, 0.008346323167047], 3232 [0.030089055611203, 0.008438674802711], 3233 [0.030063024516947, 0.008530947010354], 3234 [0.030036710458054, 0.008623138921475], 3235 [0.030010113682202, 0.008715249668328], 3236 [0.029983234439732, 0.008807278383932], 3237 [0.029956072983640, 0.008899224202078], 3238 [0.029928629569580, 0.008991086257336], 3239 [0.029900904455860, 0.009082863685067], 3240 [0.029872897903441, 0.009174555621425], 3241 [0.029844610175929, 0.009266161203371], 3242 [0.029816041539579, 0.009357679568679], 3243 [0.029787192263292, 0.009449109855944], 3244 [0.029758062618606, 0.009540451204587], 3245 [0.029728652879702, 0.009631702754871], 3246 [0.029698963323395, 0.009722863647900], 3247 [0.029668994229134, 0.009813933025633], 3248 [0.029638745879000, 0.009904910030891], 3249 [0.029608218557702, 0.009995793807363], 3250 [0.029577412552575, 0.010086583499618], 3251 [0.029546328153577, 0.010177278253107], 3252 [0.029514965653285, 0.010267877214177], 3253 [0.029483325346896, 0.010358379530076], 3254 [0.029451407532220, 0.010448784348962], 3255 [0.029419212509679, 0.010539090819911], 3256 [0.029386740582307, 0.010629298092923], 3257 [0.029353992055740, 0.010719405318933], 3258 [0.029320967238220, 0.010809411649818], 3259 [0.029287666440590, 0.010899316238403], 3260 [0.029254089976290, 0.010989118238474], 3261 [0.029220238161353, 0.011078816804778], 3262 [0.029186111314406, 0.011168411093039], 3263 [0.029151709756664, 0.011257900259961], 3264 [0.029117033811927, 0.011347283463239], 3265 [0.029082083806579, 0.011436559861563], 3266 [0.029046860069582, 0.011525728614630], 3267 [0.029011362932476, 0.011614788883150], 3268 [0.028975592729373, 0.011703739828853], 3269 [0.028939549796957, 0.011792580614500], 3270 [0.028903234474475, 0.011881310403886], 3271 [0.028866647103744, 0.011969928361855], 3272 [0.028829788029135, 0.012058433654299], 3273 [0.028792657597583, 0.012146825448172], 3274 [0.028755256158571, 0.012235102911499], 3275 [0.028717584064137, 0.012323265213377], 3276 [0.028679641668864, 0.012411311523990], 3277 [0.028641429329882, 0.012499241014612], 3278 [0.028602947406859, 0.012587052857618], 3279 [0.028564196262001, 0.012674746226488], 3280 [0.028525176260050, 0.012762320295819], 3281 [0.028485887768276, 0.012849774241331], 3282 [0.028446331156478, 0.012937107239875], 3283 [0.028406506796976, 0.013024318469437], 3284 [0.028366415064615, 0.013111407109155], 3285 [0.028326056336751, 0.013198372339315], 3286 [0.028285430993258, 0.013285213341368], 3287 [0.028244539416515, 0.013371929297933], 3288 [0.028203381991411, 0.013458519392807], 3289 [0.028161959105334, 0.013544982810971], 3290 [0.028120271148172, 0.013631318738598], 3291 [0.028078318512309, 0.013717526363062], 3292 [0.028036101592619, 0.013803604872943], 3293 [0.027993620786463, 0.013889553458039], 3294 [0.027950876493687, 0.013975371309367], 3295 [0.027907869116616, 0.014061057619178], 3296 [0.027864599060052, 0.014146611580959], 3297 [0.027821066731270, 0.014232032389445], 3298 [0.027777272540012, 0.014317319240622], 3299 [0.027733216898487, 0.014402471331737], 3300 [0.027688900221361, 0.014487487861307], 3301 [0.027644322925762, 0.014572368029123], 3302 [0.027599485431266, 0.014657111036262], 3303 [0.027554388159903, 0.014741716085090], 3304 [0.027509031536144, 0.014826182379271], 3305 [0.027463415986904, 0.014910509123778], 3306 [0.027417541941533, 0.014994695524894], 3307 [0.027371409831816, 0.015078740790225], 3308 [0.027325020091965, 0.015162644128704], 3309 [0.027278373158618, 0.015246404750603], 3310 [0.027231469470833, 0.015330021867534], 3311 [0.027184309470088, 0.015413494692460], 3312 [0.027136893600268, 0.015496822439704], 3313 [0.027089222307671, 0.015580004324954], 3314 [0.027041296040997, 0.015663039565269], 3315 [0.026993115251345, 0.015745927379091], 3316 [0.026944680392213, 0.015828666986247], 3317 [0.026895991919487, 0.015911257607961], 3318 [0.026847050291442, 0.015993698466859], 3319 [0.026797855968734, 0.016075988786976], 3320 [0.026748409414401, 0.016158127793763], 3321 [0.026698711093851, 0.016240114714099], 3322 [0.026648761474864, 0.016321948776289], 3323 [0.026598561027585, 0.016403629210082], 3324 [0.026548110224519, 0.016485155246669], 3325 [0.026497409540530, 0.016566526118696], 3326 [0.026446459452830, 0.016647741060271], 3327 [0.026395260440982, 0.016728799306966], 3328 [0.026343812986890, 0.016809700095831], 3329 [0.026292117574797, 0.016890442665397], 3330 [0.026240174691280, 0.016971026255683], 3331 [0.026187984825246, 0.017051450108208], 3332 [0.026135548467924, 0.017131713465990], 3333 [0.026082866112867, 0.017211815573560], 3334 [0.026029938255941, 0.017291755676967], 3335 [0.025976765395322, 0.017371533023784], 3336 [0.025923348031494, 0.017451146863116], 3337 [0.025869686667242, 0.017530596445607], 3338 [0.025815781807646, 0.017609881023449], 3339 [0.025761633960080, 0.017688999850383], 3340 [0.025707243634204, 0.017767952181715], 3341 [0.025652611341960, 0.017846737274313], 3342 [0.025597737597568, 0.017925354386623], 3343 [0.025542622917522, 0.018003802778671], 3344 [0.025487267820581, 0.018082081712071], 3345 [0.025431672827768, 0.018160190450031], 3346 [0.025375838462365, 0.018238128257362], 3347 [0.025319765249906, 0.018315894400484], 3348 [0.025263453718173, 0.018393488147432], 3349 [0.025206904397193, 0.018470908767865], 3350 [0.025150117819228, 0.018548155533070], 3351 [0.025093094518776, 0.018625227715971], 3352 [0.025035835032562, 0.018702124591135], 3353 [0.024978339899534, 0.018778845434780], 3354 [0.024920609660858, 0.018855389524780], 3355 [0.024862644859912, 0.018931756140672], 3356 [0.024804446042284, 0.019007944563666], 3357 [0.024746013755764, 0.019083954076646], 3358 [0.024687348550337, 0.019159783964183], 3359 [0.024628450978184, 0.019235433512536], 3360 [0.024569321593670, 0.019310902009663], 3361 [0.024509960953345, 0.019386188745225], 3362 [0.024450369615932, 0.019461293010596], 3363 [0.024390548142329, 0.019536214098866], 3364 [0.024330497095598, 0.019610951304848], 3365 [0.024270217040961, 0.019685503925087], 3366 [0.024209708545799, 0.019759871257867], 3367 [0.024148972179639, 0.019834052603212], 3368 [0.024088008514157, 0.019908047262901], 3369 [0.024026818123164, 0.019981854540467], 3370 [0.023965401582609, 0.020055473741208], 3371 [0.023903759470567, 0.020128904172192], 3372 [0.023841892367236, 0.020202145142264], 3373 [0.023779800854935, 0.020275195962052], 3374 [0.023717485518092, 0.020348055943974], 3375 [0.023654946943242, 0.020420724402244], 3376 [0.023592185719023, 0.020493200652878], 3377 [0.023529202436167, 0.020565484013703], 3378 [0.023465997687496, 0.020637573804361], 3379 [0.023402572067918, 0.020709469346314], 3380 [0.023338926174419, 0.020781169962854], 3381 [0.023275060606058, 0.020852674979108], 3382 [0.023210975963963, 0.020923983722044], 3383 [0.023146672851322, 0.020995095520475], 3384 [0.023082151873380, 0.021066009705072], 3385 [0.023017413637435, 0.021136725608363], 3386 [0.022952458752826, 0.021207242564742], 3387 [0.022887287830934, 0.021277559910478], 3388 [0.022821901485173, 0.021347676983716], 3389 [0.022756300330983, 0.021417593124488], 3390 [0.022690484985827, 0.021487307674717], 3391 [0.022624456069185, 0.021556819978223], 3392 [0.022558214202547, 0.021626129380729], 3393 [0.022491760009405, 0.021695235229869], 3394 [0.022425094115252, 0.021764136875192], 3395 [0.022358217147572, 0.021832833668171], 3396 [0.022291129735838, 0.021901324962204], 3397 [0.022223832511501, 0.021969610112625], 3398 [0.022156326107988, 0.022037688476709], 3399 [0.022088611160696, 0.022105559413676], 3400 [0.022020688306983, 0.022173222284699], 3401 [0.021952558186166, 0.022240676452909], 3402 [0.021884221439510, 0.022307921283403], 3403 [0.021815678710228, 0.022374956143245], 3404 [0.021746930643469, 0.022441780401478], 3405 [0.021677977886316, 0.022508393429127], 3406 [0.021608821087780, 0.022574794599206], 3407 [0.021539460898790, 0.022640983286719], 3408 [0.021469897972190, 0.022706958868676], 3409 [0.021400132962735, 0.022772720724087], 3410 [0.021330166527077, 0.022838268233979], 3411 [0.021259999323769, 0.022903600781391], 3412 [0.021189632013250, 0.022968717751391], 3413 [0.021119065257845, 0.023033618531071], 3414 [0.021048299721754, 0.023098302509561], 3415 [0.020977336071050, 0.023162769078031], 3416 [0.020906174973670, 0.023227017629698], 3417 [0.020834817099409, 0.023291047559828], 3418 [0.020763263119915, 0.023354858265748], 3419 [0.020691513708680, 0.023418449146848], 3420 [0.020619569541038, 0.023481819604585], 3421 [0.020547431294155, 0.023544969042494], 3422 [0.020475099647023, 0.023607896866186], 3423 [0.020402575280455, 0.023670602483363], 3424 [0.020329858877078, 0.023733085303813], 3425 [0.020256951121327, 0.023795344739427], 3426 [0.020183852699437, 0.023857380204193], 3427 [0.020110564299439, 0.023919191114211], 3428 [0.020037086611150, 0.023980776887692], 3429 [0.019963420326171, 0.024042136944968], 3430 [0.019889566137877, 0.024103270708495], 3431 [0.019815524741412, 0.024164177602859], 3432 [0.019741296833681, 0.024224857054779], 3433 [0.019666883113346, 0.024285308493120], 3434 [0.019592284280817, 0.024345531348888], 3435 [0.019517501038246, 0.024405525055242], 3436 [0.019442534089523, 0.024465289047500], 3437 [0.019367384140264, 0.024524822763141], 3438 [0.019292051897809, 0.024584125641809], 3439 [0.019216538071215, 0.024643197125323], 3440 [0.019140843371246, 0.024702036657681], 3441 [0.019064968510369, 0.024760643685063], 3442 [0.018988914202748, 0.024819017655836], 3443 [0.018912681164234, 0.024877158020562], 3444 [0.018836270112363, 0.024935064232003], 3445 [0.018759681766343, 0.024992735745123], 3446 [0.018682916847054, 0.025050172017095], 3447 [0.018605976077037, 0.025107372507308], 3448 [0.018528860180486, 0.025164336677369], 3449 [0.018451569883247, 0.025221063991110], 3450 [0.018374105912805, 0.025277553914591], 3451 [0.018296468998280, 0.025333805916107], 3452 [0.018218659870421, 0.025389819466194], 3453 [0.018140679261596, 0.025445594037630], 3454 [0.018062527905790, 0.025501129105445], 3455 [0.017984206538592, 0.025556424146920], 3456 [0.017905715897192, 0.025611478641598], 3457 [0.017827056720375, 0.025666292071285], 3458 [0.017748229748511, 0.025720863920056], 3459 [0.017669235723550, 0.025775193674260], 3460 [0.017590075389012, 0.025829280822525], 3461 [0.017510749489986, 0.025883124855762], 3462 [0.017431258773116, 0.025936725267170], 3463 [0.017351603986600, 0.025990081552242], 3464 [0.017271785880180, 0.026043193208768], 3465 [0.017191805205132, 0.026096059736841], 3466 [0.017111662714267, 0.026148680638861], 3467 [0.017031359161915, 0.026201055419541], 3468 [0.016950895303924, 0.026253183585908], 3469 [0.016870271897651, 0.026305064647313], 3470 [0.016789489701954, 0.026356698115431], 3471 [0.016708549477186, 0.026408083504269], 3472 [0.016627451985187, 0.026459220330167], 3473 [0.016546197989277, 0.026510108111806], 3474 [0.016464788254250, 0.026560746370212], 3475 [0.016383223546365, 0.026611134628757], 3476 [0.016301504633341, 0.026661272413168], 3477 [0.016219632284346, 0.026711159251530], 3478 [0.016137607269996, 0.026760794674288], 3479 [0.016055430362340, 0.026810178214254], 3480 [0.015973102334858, 0.026859309406613], 3481 [0.015890623962454, 0.026908187788922], 3482 [0.015807996021446, 0.026956812901119], 3483 [0.015725219289558, 0.027005184285527], 3484 [0.015642294545918, 0.027053301486856], 3485 [0.015559222571044, 0.027101164052208], 3486 [0.015476004146842, 0.027148771531083], 3487 [0.015392640056594, 0.027196123475380], 3488 [0.015309131084956, 0.027243219439406], 3489 [0.015225478017946, 0.027290058979875], 3490 [0.015141681642938, 0.027336641655915], 3491 [0.015057742748656, 0.027382967029073], 3492 [0.014973662125164, 0.027429034663317], 3493 [0.014889440563862, 0.027474844125040], 3494 [0.014805078857474, 0.027520394983066], 3495 [0.014720577800046, 0.027565686808654], 3496 [0.014635938186934, 0.027610719175499], 3497 [0.014551160814797, 0.027655491659740], 3498 [0.014466246481592, 0.027700003839960], 3499 [0.014381195986567, 0.027744255297195], 3500 [0.014296010130247, 0.027788245614933], 3501 [0.014210689714436, 0.027831974379120], 3502 [0.014125235542201, 0.027875441178165], 3503 [0.014039648417870, 0.027918645602941], 3504 [0.013953929147020, 0.027961587246792], 3505 [0.013868078536476, 0.028004265705534], 3506 [0.013782097394294, 0.028046680577462], 3507 [0.013695986529763, 0.028088831463351], 3508 [0.013609746753390, 0.028130717966461], 3509 [0.013523378876898, 0.028172339692540], 3510 [0.013436883713214, 0.028213696249828], 3511 [0.013350262076462, 0.028254787249062], 3512 [0.013263514781960, 0.028295612303478], 3513 [0.013176642646205, 0.028336171028814], 3514 [0.013089646486871, 0.028376463043317], 3515 [0.013002527122799, 0.028416487967743], 3516 [0.012915285373990, 0.028456245425361], 3517 [0.012827922061597, 0.028495735041960], 3518 [0.012740438007915, 0.028534956445849], 3519 [0.012652834036379, 0.028573909267859], 3520 [0.012565110971550, 0.028612593141354], 3521 [0.012477269639111, 0.028651007702224], 3522 [0.012389310865858, 0.028689152588899], 3523 [0.012301235479693, 0.028727027442343], 3524 [0.012213044309615, 0.028764631906065], 3525 [0.012124738185712, 0.028801965626115], 3526 [0.012036317939156, 0.028839028251097], 3527 [0.011947784402191, 0.028875819432161], 3528 [0.011859138408130, 0.028912338823015], 3529 [0.011770380791341, 0.028948586079925], 3530 [0.011681512387245, 0.028984560861718], 3531 [0.011592534032306, 0.029020262829785], 3532 [0.011503446564022, 0.029055691648087], 3533 [0.011414250820918, 0.029090846983152], 3534 [0.011324947642537, 0.029125728504087], 3535 [0.011235537869437, 0.029160335882573], 3536 [0.011146022343175, 0.029194668792871], 3537 [0.011056401906305, 0.029228726911828], 3538 [0.010966677402371, 0.029262509918876], 3539 [0.010876849675891, 0.029296017496036], 3540 [0.010786919572361, 0.029329249327922], 3541 [0.010696887938235, 0.029362205101743], 3542 [0.010606755620926, 0.029394884507308], 3543 [0.010516523468793, 0.029427287237024], 3544 [0.010426192331137, 0.029459412985906], 3545 [0.010335763058187, 0.029491261451573], 3546 [0.010245236501099, 0.029522832334255], 3547 [0.010154613511943, 0.029554125336796], 3548 [0.010063894943698, 0.029585140164654], 3549 [0.009973081650240, 0.029615876525905], 3550 [0.009882174486340, 0.029646334131247], 3551 [0.009791174307650, 0.029676512694001], 3552 [0.009700081970699, 0.029706411930116], 3553 [0.009608898332881, 0.029736031558168], 3554 [0.009517624252453, 0.029765371299366], 3555 [0.009426260588521, 0.029794430877553], 3556 [0.009334808201034, 0.029823210019210], 3557 [0.009243267950778, 0.029851708453456], 3558 [0.009151640699363, 0.029879925912053], 3559 [0.009059927309220, 0.029907862129408], 3560 [0.008968128643591, 0.029935516842573], 3561 [0.008876245566520, 0.029962889791254], 3562 [0.008784278942845, 0.029989980717805], 3563 [0.008692229638191, 0.030016789367235], 3564 [0.008600098518961, 0.030043315487212], 3565 [0.008507886452329, 0.030069558828062], 3566 [0.008415594306230, 0.030095519142772], 3567 [0.008323222949351, 0.030121196186994], 3568 [0.008230773251129, 0.030146589719046], 3569 [0.008138246081733, 0.030171699499915], 3570 [0.008045642312067, 0.030196525293257], 3571 [0.007952962813750, 0.030221066865402], 3572 [0.007860208459119, 0.030245323985357], 3573 [0.007767380121212, 0.030269296424803], 3574 [0.007674478673766, 0.030292983958103], 3575 [0.007581504991203, 0.030316386362302], 3576 [0.007488459948628, 0.030339503417126], 3577 [0.007395344421816, 0.030362334904989], 3578 [0.007302159287206, 0.030384880610993], 3579 [0.007208905421891, 0.030407140322928], 3580 [0.007115583703613, 0.030429113831278], 3581 [0.007022195010752, 0.030450800929220], 3582 [0.006928740222316, 0.030472201412626], 3583 [0.006835220217939, 0.030493315080068], 3584 [0.006741635877866, 0.030514141732814], 3585 [0.006647988082948, 0.030534681174838], 3586 [0.006554277714635, 0.030554933212813], 3587 [0.006460505654964, 0.030574897656119], 3588 [0.006366672786553, 0.030594574316845], 3589 [0.006272779992593, 0.030613963009786], 3590 [0.006178828156839, 0.030633063552447], 3591 [0.006084818163601, 0.030651875765048], 3592 [0.005990750897737, 0.030670399470520], 3593 [0.005896627244644, 0.030688634494512], 3594 [0.005802448090250, 0.030706580665388], 3595 [0.005708214321004, 0.030724237814232], 3596 [0.005613926823871, 0.030741605774849], 3597 [0.005519586486321, 0.030758684383764], 3598 [0.005425194196321, 0.030775473480228], 3599 [0.005330750842327, 0.030791972906214], 3600 [0.005236257313276, 0.030808182506425], 3601 [0.005141714498576, 0.030824102128288], 3602 [0.005047123288102, 0.030839731621963], 3603 [0.004952484572181, 0.030855070840339], 3604 [0.004857799241589, 0.030870119639036], 3605 [0.004763068187541, 0.030884877876411], 3606 [0.004668292301681, 0.030899345413553], 3607 [0.004573472476075, 0.030913522114288], 3608 [0.004478609603205, 0.030927407845180], 3609 [0.004383704575956, 0.030941002475530], 3610 [0.004288758287610, 0.030954305877381], 3611 [0.004193771631837, 0.030967317925516], 3612 [0.004098745502689, 0.030980038497461], 3613 [0.004003680794587, 0.030992467473486], 3614 [0.003908578402316, 0.031004604736602], 3615 [0.003813439221017, 0.031016450172571], 3616 [0.003718264146176, 0.031028003669899], 3617 [0.003623054073616, 0.031039265119839], 3618 [0.003527809899492, 0.031050234416394], 3619 [0.003432532520278, 0.031060911456318], 3620 [0.003337222832760, 0.031071296139114], 3621 [0.003241881734029, 0.031081388367037], 3622 [0.003146510121474, 0.031091188045095], 3623 [0.003051108892766, 0.031100695081051], 3624 [0.002955678945860, 0.031109909385419], 3625 [0.002860221178978, 0.031118830871473], 3626 [0.002764736490604, 0.031127459455239], 3627 [0.002669225779478, 0.031135795055501], 3628 [0.002573689944583, 0.031143837593803], 3629 [0.002478129885137, 0.031151586994444], 3630 [0.002382546500589, 0.031159043184484], 3631 [0.002286940690606, 0.031166206093743], 3632 [0.002191313355067, 0.031173075654800], 3633 [0.002095665394051, 0.031179651802998], 3634 [0.001999997707835, 0.031185934476438], 3635 [0.001904311196878, 0.031191923615985], 3636 [0.001808606761820, 0.031197619165268], 3637 [0.001712885303465, 0.031203021070678], 3638 [0.001617147722782, 0.031208129281370], 3639 [0.001521394920889, 0.031212943749264], 3640 [0.001425627799047, 0.031217464429043], 3641 [0.001329847258653, 0.031221691278159], 3642 [0.001234054201231, 0.031225624256825], 3643 [0.001138249528420, 0.031229263328024], 3644 [0.001042434141971, 0.031232608457502], 3645 [0.000946608943736, 0.031235659613775], 3646 [0.000850774835656, 0.031238416768124], 3647 [0.000754932719759, 0.031240879894597], 3648 [0.000659083498149, 0.031243048970010], 3649 [0.000563228072993, 0.031244923973948], 3650 [0.000467367346520, 0.031246504888762], 3651 [0.000371502221008, 0.031247791699571], 3652 [0.000275633598775, 0.031248784394264], 3653 [0.000179762382174, 0.031249482963498], 3654 [0.000083889473581, 0.031249887400697] 3655]; 3656 3657exports.MDCT_TABLE_256 = [ 3658 [0.088387931675923, 0.000271171628935], 3659 [0.088354655998507, 0.002440238387037], 3660 [0.088268158780110, 0.004607835236780], 3661 [0.088128492123423, 0.006772656498875], 3662 [0.087935740158418, 0.008933398165942], 3663 [0.087690018991670, 0.011088758687994], 3664 [0.087391476636423, 0.013237439756448], 3665 [0.087040292923427, 0.015378147086172], 3666 [0.086636679392621, 0.017509591195118], 3667 [0.086180879165703, 0.019630488181053], 3668 [0.085673166799686, 0.021739560494940], 3669 [0.085113848121515, 0.023835537710479], 3670 [0.084503260043847, 0.025917157289369], 3671 [0.083841770362110, 0.027983165341813], 3672 [0.083129777532952, 0.030032317381813], 3673 [0.082367710434230, 0.032063379076803], 3674 [0.081556028106671, 0.034075126991164], 3675 [0.080695219477356, 0.036066349323177], 3676 [0.079785803065216, 0.038035846634965], 3677 [0.078828326668693, 0.039982432574992], 3678 [0.077823367035766, 0.041904934592675], 3679 [0.076771529516540, 0.043802194644686], 3680 [0.075673447698606, 0.045673069892513], 3681 [0.074529783025390, 0.047516433390863], 3682 [0.073341224397728, 0.049331174766491], 3683 [0.072108487758894, 0.051116200887052], 3684 [0.070832315663343, 0.052870436519557], 3685 [0.069513476829429, 0.054592824978055], 3686 [0.068152765676348, 0.056282328760143], 3687 [0.066751001845620, 0.057937930171918], 3688 [0.065309029707361, 0.059558631940996], 3689 [0.063827717851668, 0.061143457817234], 3690 [0.062307958565413, 0.062691453160784], 3691 [0.060750667294763, 0.064201685517134], 3692 [0.059156782093749, 0.065673245178784], 3693 [0.057527263059216, 0.067105245733220], 3694 [0.055863091752499, 0.068496824596852], 3695 [0.054165270608165, 0.069847143534609], 3696 [0.052434822330188, 0.071155389164853], 3697 [0.050672789275903, 0.072420773449336], 3698 [0.048880232828135, 0.073642534167879], 3699 [0.047058232755862, 0.074819935377512], 3700 [0.045207886563797, 0.075952267855771], 3701 [0.043330308831298, 0.077038849527912], 3702 [0.041426630540984, 0.078079025877766], 3703 [0.039497998397473, 0.079072170341994], 3704 [0.037545574136653, 0.080017684687506], 3705 [0.035570533825892, 0.080914999371817], 3706 [0.033574067155622, 0.081763573886112], 3707 [0.031557376722714, 0.082562897080836], 3708 [0.029521677306074, 0.083312487473584], 3709 [0.027468195134911, 0.084011893539132], 3710 [0.025398167150101, 0.084660693981419], 3711 [0.023312840259098, 0.085258497987320], 3712 [0.021213470584847, 0.085804945462053], 3713 [0.019101322709138, 0.086299707246093], 3714 [0.016977668910873, 0.086742485313442], 3715 [0.014843788399692, 0.087133012951149], 3716 [0.012700966545425, 0.087471054919968], 3717 [0.010550494103830, 0.087756407596056], 3718 [0.008393666439096, 0.087988899093631], 3719 [0.006231782743558, 0.088168389368510], 3720 [0.004066145255116, 0.088294770302461], 3721 [0.001898058472816, 0.088367965768336] 3722]; 3723 3724exports.MDCT_TABLE_1920 = [ 3725 [0.032274858518097, 0.000013202404176], 3726 [0.032274642494505, 0.000118821372483], 3727 [0.032274080835421, 0.000224439068308], 3728 [0.032273173546860, 0.000330054360572], 3729 [0.032271920638538, 0.000435666118218], 3730 [0.032270322123873, 0.000541273210231], 3731 [0.032268378019984, 0.000646874505642], 3732 [0.032266088347691, 0.000752468873546], 3733 [0.032263453131514, 0.000858055183114], 3734 [0.032260472399674, 0.000963632303600], 3735 [0.032257146184092, 0.001069199104358], 3736 [0.032253474520390, 0.001174754454853], 3737 [0.032249457447888, 0.001280297224671], 3738 [0.032245095009606, 0.001385826283535], 3739 [0.032240387252262, 0.001491340501313], 3740 [0.032235334226272, 0.001596838748031], 3741 [0.032229935985750, 0.001702319893890], 3742 [0.032224192588507, 0.001807782809271], 3743 [0.032218104096050, 0.001913226364749], 3744 [0.032211670573582, 0.002018649431111], 3745 [0.032204892090000, 0.002124050879359], 3746 [0.032197768717898, 0.002229429580728], 3747 [0.032190300533560, 0.002334784406698], 3748 [0.032182487616965, 0.002440114229003], 3749 [0.032174330051782, 0.002545417919644], 3750 [0.032165827925374, 0.002650694350905], 3751 [0.032156981328790, 0.002755942395358], 3752 [0.032147790356771, 0.002861160925883], 3753 [0.032138255107744, 0.002966348815672], 3754 [0.032128375683825, 0.003071504938250], 3755 [0.032118152190814, 0.003176628167476], 3756 [0.032107584738196, 0.003281717377568], 3757 [0.032096673439141, 0.003386771443102], 3758 [0.032085418410500, 0.003491789239036], 3759 [0.032073819772804, 0.003596769640711], 3760 [0.032061877650267, 0.003701711523874], 3761 [0.032049592170778, 0.003806613764680], 3762 [0.032036963465906, 0.003911475239711], 3763 [0.032023991670893, 0.004016294825985], 3764 [0.032010676924657, 0.004121071400967], 3765 [0.031997019369789, 0.004225803842586], 3766 [0.031983019152549, 0.004330491029241], 3767 [0.031968676422869, 0.004435131839816], 3768 [0.031953991334348, 0.004539725153692], 3769 [0.031938964044252, 0.004644269850758], 3770 [0.031923594713510, 0.004748764811426], 3771 [0.031907883506716, 0.004853208916638], 3772 [0.031891830592124, 0.004957601047881], 3773 [0.031875436141648, 0.005061940087200], 3774 [0.031858700330859, 0.005166224917208], 3775 [0.031841623338985, 0.005270454421097], 3776 [0.031824205348907, 0.005374627482653], 3777 [0.031806446547156, 0.005478742986267], 3778 [0.031788347123916, 0.005582799816945], 3779 [0.031769907273017, 0.005686796860323], 3780 [0.031751127191935, 0.005790733002674], 3781 [0.031732007081789, 0.005894607130928], 3782 [0.031712547147340, 0.005998418132675], 3783 [0.031692747596989, 0.006102164896182], 3784 [0.031672608642773, 0.006205846310406], 3785 [0.031652130500364, 0.006309461265002], 3786 [0.031631313389067, 0.006413008650337], 3787 [0.031610157531816, 0.006516487357501], 3788 [0.031588663155172, 0.006619896278321], 3789 [0.031566830489325, 0.006723234305370], 3790 [0.031544659768083, 0.006826500331981], 3791 [0.031522151228878, 0.006929693252258], 3792 [0.031499305112758, 0.007032811961088], 3793 [0.031476121664387, 0.007135855354151], 3794 [0.031452601132040, 0.007238822327937], 3795 [0.031428743767604, 0.007341711779751], 3796 [0.031404549826572, 0.007444522607730], 3797 [0.031380019568042, 0.007547253710853], 3798 [0.031355153254712, 0.007649903988952], 3799 [0.031329951152882, 0.007752472342725], 3800 [0.031304413532445, 0.007854957673748], 3801 [0.031278540666888, 0.007957358884484], 3802 [0.031252332833290, 0.008059674878300], 3803 [0.031225790312316, 0.008161904559473], 3804 [0.031198913388214, 0.008264046833205], 3805 [0.031171702348814, 0.008366100605636], 3806 [0.031144157485525, 0.008468064783849], 3807 [0.031116279093331, 0.008569938275893], 3808 [0.031088067470786, 0.008671719990782], 3809 [0.031059522920014, 0.008773408838517], 3810 [0.031030645746705, 0.008875003730092], 3811 [0.031001436260110, 0.008976503577507], 3812 [0.030971894773039, 0.009077907293780], 3813 [0.030942021601857, 0.009179213792959], 3814 [0.030911817066483, 0.009280421990133], 3815 [0.030881281490382, 0.009381530801444], 3816 [0.030850415200566, 0.009482539144097], 3817 [0.030819218527589, 0.009583445936373], 3818 [0.030787691805541, 0.009684250097643], 3819 [0.030755835372048, 0.009784950548375], 3820 [0.030723649568268, 0.009885546210147], 3821 [0.030691134738883, 0.009986036005661], 3822 [0.030658291232103, 0.010086418858753], 3823 [0.030625119399655, 0.010186693694402], 3824 [0.030591619596781, 0.010286859438745], 3825 [0.030557792182239, 0.010386915019088], 3826 [0.030523637518292, 0.010486859363916], 3827 [0.030489155970710, 0.010586691402906], 3828 [0.030454347908763, 0.010686410066936], 3829 [0.030419213705216, 0.010786014288099], 3830 [0.030383753736329, 0.010885502999714], 3831 [0.030347968381849, 0.010984875136338], 3832 [0.030311858025010, 0.011084129633775], 3833 [0.030275423052523, 0.011183265429088], 3834 [0.030238663854579, 0.011282281460612], 3835 [0.030201580824838, 0.011381176667967], 3836 [0.030164174360430, 0.011479949992062], 3837 [0.030126444861948, 0.011578600375117], 3838 [0.030088392733446, 0.011677126760663], 3839 [0.030050018382430, 0.011775528093563], 3840 [0.030011322219859, 0.011873803320018], 3841 [0.029972304660138, 0.011971951387578], 3842 [0.029932966121114, 0.012069971245157], 3843 [0.029893307024070, 0.012167861843041], 3844 [0.029853327793724, 0.012265622132901], 3845 [0.029813028858222, 0.012363251067801], 3846 [0.029772410649132, 0.012460747602215], 3847 [0.029731473601443, 0.012558110692033], 3848 [0.029690218153558, 0.012655339294575], 3849 [0.029648644747289, 0.012752432368600], 3850 [0.029606753827855, 0.012849388874320], 3851 [0.029564545843872, 0.012946207773407], 3852 [0.029522021247356, 0.013042888029011], 3853 [0.029479180493710, 0.013139428605762], 3854 [0.029436024041725, 0.013235828469789], 3855 [0.029392552353570, 0.013332086588727], 3856 [0.029348765894794, 0.013428201931728], 3857 [0.029304665134313, 0.013524173469475], 3858 [0.029260250544412, 0.013620000174189], 3859 [0.029215522600735, 0.013715681019643], 3860 [0.029170481782283, 0.013811214981173], 3861 [0.029125128571406, 0.013906601035686], 3862 [0.029079463453801, 0.014001838161674], 3863 [0.029033486918505, 0.014096925339225], 3864 [0.028987199457889, 0.014191861550031], 3865 [0.028940601567655, 0.014286645777401], 3866 [0.028893693746829, 0.014381277006273], 3867 [0.028846476497755, 0.014475754223221], 3868 [0.028798950326094, 0.014570076416472], 3869 [0.028751115740811, 0.014664242575910], 3870 [0.028702973254178, 0.014758251693091], 3871 [0.028654523381760, 0.014852102761253], 3872 [0.028605766642418, 0.014945794775326], 3873 [0.028556703558297, 0.015039326731945], 3874 [0.028507334654823, 0.015132697629457], 3875 [0.028457660460698, 0.015225906467935], 3876 [0.028407681507891, 0.015318952249187], 3877 [0.028357398331639, 0.015411833976768], 3878 [0.028306811470432, 0.015504550655988], 3879 [0.028255921466016, 0.015597101293927], 3880 [0.028204728863381, 0.015689484899442], 3881 [0.028153234210760, 0.015781700483179], 3882 [0.028101438059619, 0.015873747057582], 3883 [0.028049340964652, 0.015965623636907], 3884 [0.027996943483779, 0.016057329237229], 3885 [0.027944246178133, 0.016148862876456], 3886 [0.027891249612061, 0.016240223574335], 3887 [0.027837954353113, 0.016331410352467], 3888 [0.027784360972039, 0.016422422234315], 3889 [0.027730470042780, 0.016513258245214], 3890 [0.027676282142466, 0.016603917412384], 3891 [0.027621797851405, 0.016694398764938], 3892 [0.027567017753080, 0.016784701333894], 3893 [0.027511942434143, 0.016874824152183], 3894 [0.027456572484404, 0.016964766254662], 3895 [0.027400908496833, 0.017054526678124], 3896 [0.027344951067546, 0.017144104461307], 3897 [0.027288700795801, 0.017233498644904], 3898 [0.027232158283994, 0.017322708271577], 3899 [0.027175324137651, 0.017411732385960], 3900 [0.027118198965418, 0.017500570034678], 3901 [0.027060783379060, 0.017589220266351], 3902 [0.027003077993454, 0.017677682131607], 3903 [0.026945083426576, 0.017765954683088], 3904 [0.026886800299502, 0.017854036975468], 3905 [0.026828229236397, 0.017941928065456], 3906 [0.026769370864511, 0.018029627011808], 3907 [0.026710225814170, 0.018117132875340], 3908 [0.026650794718768, 0.018204444718934], 3909 [0.026591078214767, 0.018291561607551], 3910 [0.026531076941680, 0.018378482608238], 3911 [0.026470791542075, 0.018465206790142], 3912 [0.026410222661558, 0.018551733224515], 3913 [0.026349370948775, 0.018638060984730], 3914 [0.026288237055398, 0.018724189146286], 3915 [0.026226821636121, 0.018810116786819], 3916 [0.026165125348656, 0.018895842986112], 3917 [0.026103148853718, 0.018981366826109], 3918 [0.026040892815028, 0.019066687390916], 3919 [0.025978357899296, 0.019151803766819], 3920 [0.025915544776223, 0.019236715042290], 3921 [0.025852454118485, 0.019321420307998], 3922 [0.025789086601733, 0.019405918656817], 3923 [0.025725442904582, 0.019490209183837], 3924 [0.025661523708606, 0.019574290986376], 3925 [0.025597329698327, 0.019658163163984], 3926 [0.025532861561211, 0.019741824818458], 3927 [0.025468119987662, 0.019825275053848], 3928 [0.025403105671008, 0.019908512976470], 3929 [0.025337819307501, 0.019991537694913], 3930 [0.025272261596305, 0.020074348320047], 3931 [0.025206433239491, 0.020156943965039], 3932 [0.025140334942028, 0.020239323745355], 3933 [0.025073967411776, 0.020321486778774], 3934 [0.025007331359476, 0.020403432185395], 3935 [0.024940427498748, 0.020485159087650], 3936 [0.024873256546079, 0.020566666610309], 3937 [0.024805819220816, 0.020647953880491], 3938 [0.024738116245157, 0.020729020027676], 3939 [0.024670148344147, 0.020809864183709], 3940 [0.024601916245669, 0.020890485482816], 3941 [0.024533420680433, 0.020970883061607], 3942 [0.024464662381971, 0.021051056059087], 3943 [0.024395642086630, 0.021131003616670], 3944 [0.024326360533561, 0.021210724878181], 3945 [0.024256818464715, 0.021290218989868], 3946 [0.024187016624830, 0.021369485100415], 3947 [0.024116955761430, 0.021448522360944], 3948 [0.024046636624808, 0.021527329925030], 3949 [0.023976059968027, 0.021605906948708], 3950 [0.023905226546906, 0.021684252590480], 3951 [0.023834137120014, 0.021762366011328], 3952 [0.023762792448662, 0.021840246374720], 3953 [0.023691193296893, 0.021917892846620], 3954 [0.023619340431478, 0.021995304595495], 3955 [0.023547234621902, 0.022072480792330], 3956 [0.023474876640361, 0.022149420610628], 3957 [0.023402267261751, 0.022226123226426], 3958 [0.023329407263659, 0.022302587818300], 3959 [0.023256297426359, 0.022378813567377], 3960 [0.023182938532797, 0.022454799657339], 3961 [0.023109331368588, 0.022530545274437], 3962 [0.023035476722006, 0.022606049607496], 3963 [0.022961375383975, 0.022681311847926], 3964 [0.022887028148061, 0.022756331189727], 3965 [0.022812435810462, 0.022831106829504], 3966 [0.022737599170003, 0.022905637966469], 3967 [0.022662519028125, 0.022979923802453], 3968 [0.022587196188874, 0.023053963541915], 3969 [0.022511631458899, 0.023127756391950], 3970 [0.022435825647437, 0.023201301562294], 3971 [0.022359779566306, 0.023274598265338], 3972 [0.022283494029900, 0.023347645716133], 3973 [0.022206969855176, 0.023420443132400], 3974 [0.022130207861645, 0.023492989734537], 3975 [0.022053208871367, 0.023565284745628], 3976 [0.021975973708940, 0.023637327391451], 3977 [0.021898503201489, 0.023709116900488], 3978 [0.021820798178663, 0.023780652503931], 3979 [0.021742859472618, 0.023851933435691], 3980 [0.021664687918017, 0.023922958932406], 3981 [0.021586284352013, 0.023993728233451], 3982 [0.021507649614247, 0.024064240580942], 3983 [0.021428784546832, 0.024134495219750], 3984 [0.021349689994350, 0.024204491397504], 3985 [0.021270366803840, 0.024274228364600], 3986 [0.021190815824791, 0.024343705374213], 3987 [0.021111037909128, 0.024412921682298], 3988 [0.021031033911210, 0.024481876547605], 3989 [0.020950804687815, 0.024550569231683], 3990 [0.020870351098134, 0.024618998998889], 3991 [0.020789674003759, 0.024687165116394], 3992 [0.020708774268678, 0.024755066854194], 3993 [0.020627652759262, 0.024822703485116], 3994 [0.020546310344257, 0.024890074284826], 3995 [0.020464747894775, 0.024957178531837], 3996 [0.020382966284284, 0.025024015507516], 3997 [0.020300966388600, 0.025090584496093], 3998 [0.020218749085876, 0.025156884784668], 3999 [0.020136315256592, 0.025222915663218], 4000 [0.020053665783549, 0.025288676424605], 4001 [0.019970801551857, 0.025354166364584], 4002 [0.019887723448925, 0.025419384781811], 4003 [0.019804432364452, 0.025484330977848], 4004 [0.019720929190419, 0.025549004257175], 4005 [0.019637214821078, 0.025613403927192], 4006 [0.019553290152943, 0.025677529298230], 4007 [0.019469156084779, 0.025741379683559], 4008 [0.019384813517595, 0.025804954399392], 4009 [0.019300263354632, 0.025868252764895], 4010 [0.019215506501354, 0.025931274102193], 4011 [0.019130543865439, 0.025994017736379], 4012 [0.019045376356769, 0.026056482995518], 4013 [0.018960004887419, 0.026118669210657], 4014 [0.018874430371648, 0.026180575715833], 4015 [0.018788653725892, 0.026242201848076], 4016 [0.018702675868750, 0.026303546947421], 4017 [0.018616497720974, 0.026364610356909], 4018 [0.018530120205464, 0.026425391422602], 4019 [0.018443544247254, 0.026485889493583], 4020 [0.018356770773502, 0.026546103921965], 4021 [0.018269800713483, 0.026606034062902], 4022 [0.018182634998576, 0.026665679274589], 4023 [0.018095274562256, 0.026725038918274], 4024 [0.018007720340083, 0.026784112358263], 4025 [0.017919973269692, 0.026842898961926], 4026 [0.017832034290785, 0.026901398099707], 4027 [0.017743904345116, 0.026959609145127], 4028 [0.017655584376488, 0.027017531474792], 4029 [0.017567075330734, 0.027075164468401], 4030 [0.017478378155718, 0.027132507508750], 4031 [0.017389493801313, 0.027189559981742], 4032 [0.017300423219401, 0.027246321276391], 4033 [0.017211167363854, 0.027302790784828], 4034 [0.017121727190533, 0.027358967902310], 4035 [0.017032103657269, 0.027414852027226], 4036 [0.016942297723858, 0.027470442561102], 4037 [0.016852310352050, 0.027525738908608], 4038 [0.016762142505537, 0.027580740477564], 4039 [0.016671795149944, 0.027635446678948], 4040 [0.016581269252819, 0.027689856926900], 4041 [0.016490565783622, 0.027743970638730], 4042 [0.016399685713714, 0.027797787234924], 4043 [0.016308630016347, 0.027851306139149], 4044 [0.016217399666655, 0.027904526778260], 4045 [0.016125995641641, 0.027957448582309], 4046 [0.016034418920170, 0.028010070984544], 4047 [0.015942670482954, 0.028062393421421], 4048 [0.015850751312545, 0.028114415332610], 4049 [0.015758662393324, 0.028166136160998], 4050 [0.015666404711489, 0.028217555352697], 4051 [0.015573979255046, 0.028268672357047], 4052 [0.015481387013797, 0.028319486626627], 4053 [0.015388628979331, 0.028369997617257], 4054 [0.015295706145012, 0.028420204788004], 4055 [0.015202619505968, 0.028470107601191], 4056 [0.015109370059084, 0.028519705522399], 4057 [0.015015958802984, 0.028568998020472], 4058 [0.014922386738030, 0.028617984567529], 4059 [0.014828654866302, 0.028666664638963], 4060 [0.014734764191593, 0.028715037713449], 4061 [0.014640715719398, 0.028763103272951], 4062 [0.014546510456900, 0.028810860802724], 4063 [0.014452149412962, 0.028858309791325], 4064 [0.014357633598114, 0.028905449730613], 4065 [0.014262964024545, 0.028952280115756], 4066 [0.014168141706090, 0.028998800445240], 4067 [0.014073167658220, 0.029045010220868], 4068 [0.013978042898030, 0.029090908947771], 4069 [0.013882768444231, 0.029136496134411], 4070 [0.013787345317136, 0.029181771292585], 4071 [0.013691774538648, 0.029226733937433], 4072 [0.013596057132255, 0.029271383587441], 4073 [0.013500194123014, 0.029315719764447], 4074 [0.013404186537539, 0.029359741993647], 4075 [0.013308035403995, 0.029403449803598], 4076 [0.013211741752084, 0.029446842726223], 4077 [0.013115306613032, 0.029489920296820], 4078 [0.013018731019584, 0.029532682054063], 4079 [0.012922016005985, 0.029575127540008], 4080 [0.012825162607977, 0.029617256300097], 4081 [0.012728171862781, 0.029659067883165], 4082 [0.012631044809089, 0.029700561841444], 4083 [0.012533782487056, 0.029741737730567], 4084 [0.012436385938281, 0.029782595109573], 4085 [0.012338856205805, 0.029823133540913], 4086 [0.012241194334091, 0.029863352590452], 4087 [0.012143401369021, 0.029903251827477], 4088 [0.012045478357878, 0.029942830824699], 4089 [0.011947426349339, 0.029982089158259], 4090 [0.011849246393462, 0.030021026407731], 4091 [0.011750939541676, 0.030059642156129], 4092 [0.011652506846768, 0.030097935989909], 4093 [0.011553949362874, 0.030135907498976], 4094 [0.011455268145464, 0.030173556276684], 4095 [0.011356464251335, 0.030210881919845], 4096 [0.011257538738598, 0.030247884028732], 4097 [0.011158492666665, 0.030284562207083], 4098 [0.011059327096240, 0.030320916062102], 4099 [0.010960043089307, 0.030356945204470], 4100 [0.010860641709118, 0.030392649248343], 4101 [0.010761124020182, 0.030428027811361], 4102 [0.010661491088253, 0.030463080514646], 4103 [0.010561743980319, 0.030497806982812], 4104 [0.010461883764593, 0.030532206843968], 4105 [0.010361911510496, 0.030566279729717], 4106 [0.010261828288652, 0.030600025275167], 4107 [0.010161635170872, 0.030633443118931], 4108 [0.010061333230142, 0.030666532903129], 4109 [0.009960923540617, 0.030699294273397], 4110 [0.009860407177603, 0.030731726878888], 4111 [0.009759785217550, 0.030763830372273], 4112 [0.009659058738038, 0.030795604409750], 4113 [0.009558228817767, 0.030827048651045], 4114 [0.009457296536545, 0.030858162759415], 4115 [0.009356262975275, 0.030888946401653], 4116 [0.009255129215945, 0.030919399248091], 4117 [0.009153896341616, 0.030949520972603], 4118 [0.009052565436412, 0.030979311252611], 4119 [0.008951137585505, 0.031008769769084], 4120 [0.008849613875105, 0.031037896206544], 4121 [0.008747995392451, 0.031066690253072], 4122 [0.008646283225794, 0.031095151600306], 4123 [0.008544478464390, 0.031123279943448], 4124 [0.008442582198486, 0.031151074981266], 4125 [0.008340595519310, 0.031178536416098], 4126 [0.008238519519057, 0.031205663953853], 4127 [0.008136355290878, 0.031232457304017], 4128 [0.008034103928871, 0.031258916179656], 4129 [0.007931766528065, 0.031285040297416], 4130 [0.007829344184412, 0.031310829377528], 4131 [0.007726837994772, 0.031336283143813], 4132 [0.007624249056906, 0.031361401323680], 4133 [0.007521578469457, 0.031386183648135], 4134 [0.007418827331946, 0.031410629851778], 4135 [0.007315996744755, 0.031434739672811], 4136 [0.007213087809115, 0.031458512853036], 4137 [0.007110101627101, 0.031481949137863], 4138 [0.007007039301610, 0.031505048276306], 4139 [0.006903901936357, 0.031527810020993], 4140 [0.006800690635862, 0.031550234128164], 4141 [0.006697406505433, 0.031572320357675], 4142 [0.006594050651161, 0.031594068473000], 4143 [0.006490624179905, 0.031615478241233], 4144 [0.006387128199278, 0.031636549433095], 4145 [0.006283563817639, 0.031657281822929], 4146 [0.006179932144080, 0.031677675188707], 4147 [0.006076234288412, 0.031697729312034], 4148 [0.005972471361157, 0.031717443978146], 4149 [0.005868644473532, 0.031736818975914], 4150 [0.005764754737440, 0.031755854097848], 4151 [0.005660803265456, 0.031774549140098], 4152 [0.005556791170816, 0.031792903902453], 4153 [0.005452719567407, 0.031810918188350], 4154 [0.005348589569753, 0.031828591804869], 4155 [0.005244402293001, 0.031845924562742], 4156 [0.005140158852914, 0.031862916276347], 4157 [0.005035860365855, 0.031879566763717], 4158 [0.004931507948778, 0.031895875846539], 4159 [0.004827102719212, 0.031911843350155], 4160 [0.004722645795254, 0.031927469103567], 4161 [0.004618138295554, 0.031942752939435], 4162 [0.004513581339303, 0.031957694694082], 4163 [0.004408976046222, 0.031972294207493], 4164 [0.004304323536549, 0.031986551323320], 4165 [0.004199624931030, 0.032000465888879], 4166 [0.004094881350902, 0.032014037755158], 4167 [0.003990093917884, 0.032027266776813], 4168 [0.003885263754166, 0.032040152812170], 4169 [0.003780391982394, 0.032052695723232], 4170 [0.003675479725661, 0.032064895375674], 4171 [0.003570528107494, 0.032076751638847], 4172 [0.003465538251839, 0.032088264385780], 4173 [0.003360511283053, 0.032099433493181], 4174 [0.003255448325892, 0.032110258841438], 4175 [0.003150350505494, 0.032120740314619], 4176 [0.003045218947373, 0.032130877800478], 4177 [0.002940054777404, 0.032140671190449], 4178 [0.002834859121810, 0.032150120379653], 4179 [0.002729633107153, 0.032159225266897], 4180 [0.002624377860318, 0.032167985754674], 4181 [0.002519094508504, 0.032176401749168], 4182 [0.002413784179212, 0.032184473160250], 4183 [0.002308448000231, 0.032192199901481], 4184 [0.002203087099626, 0.032199581890114], 4185 [0.002097702605728, 0.032206619047093], 4186 [0.001992295647121, 0.032213311297057], 4187 [0.001886867352628, 0.032219658568338], 4188 [0.001781418851302, 0.032225660792960], 4189 [0.001675951272410, 0.032231317906644], 4190 [0.001570465745428, 0.032236629848809], 4191 [0.001464963400018, 0.032241596562566], 4192 [0.001359445366028, 0.032246217994727], 4193 [0.001253912773470, 0.032250494095799], 4194 [0.001148366752513, 0.032254424819990], 4195 [0.001042808433471, 0.032258010125204], 4196 [0.000937238946789, 0.032261249973045], 4197 [0.000831659423030, 0.032264144328817], 4198 [0.000726070992868, 0.032266693161525], 4199 [0.000620474787068, 0.032268896443871], 4200 [0.000514871936481, 0.032270754152261], 4201 [0.000409263572030, 0.032272266266801], 4202 [0.000303650824695, 0.032273432771295], 4203 [0.000198034825504, 0.032274253653254], 4204 [0.000092416705518, 0.032274728903884] 4205]; 4206 4207exports.MDCT_TABLE_240 = [ 4208 [0.091286604111815, 0.000298735779793], 4209 [0.091247502481454, 0.002688238127538], 4210 [0.091145864370807, 0.005075898091152], 4211 [0.090981759437558, 0.007460079287760], 4212 [0.090755300151030, 0.009839147718664], 4213 [0.090466641715108, 0.012211472889198], 4214 [0.090115981961863, 0.014575428926191], 4215 [0.089703561215976, 0.016929395692256], 4216 [0.089229662130024, 0.019271759896156], 4217 [0.088694609490769, 0.021600916198470], 4218 [0.088098769996564, 0.023915268311810], 4219 [0.087442552006035, 0.026213230094844], 4220 [0.086726405258214, 0.028493226639351], 4221 [0.085950820564309, 0.030753695349588], 4222 [0.085116329471329, 0.032993087013213], 4223 [0.084223503897785, 0.035209866863042], 4224 [0.083272955741727, 0.037402515628894], 4225 [0.082265336461381, 0.039569530578832], 4226 [0.081201336628670, 0.041709426549053], 4227 [0.080081685455930, 0.043820736961749], 4228 [0.078907150296148, 0.045902014830227], 4229 [0.077678536117054, 0.047951833750597], 4230 [0.076396684949434, 0.049968788879362], 4231 [0.075062475310050, 0.051951497896226], 4232 [0.073676821599542, 0.053898601951466], 4233 [0.072240673475749, 0.055808766597225], 4234 [0.070755015202858, 0.057680682702068], 4235 [0.069220864976840, 0.059513067348201], 4236 [0.067639274227625, 0.061304664710718], 4237 [0.066011326898512, 0.063054246918278], 4238 [0.064338138703282, 0.064760614894630], 4239 [0.062620856361546, 0.066422599180399], 4240 [0.060860656812842, 0.068039060734572], 4241 [0.059058746410016, 0.069608891715145], 4242 [0.057216360092450, 0.071131016238378], 4243 [0.055334760539699, 0.072604391116154], 4244 [0.053415237306106, 0.074028006570930], 4245 [0.051459105937014, 0.075400886927784], 4246 [0.049467707067153, 0.076722091283096], 4247 [0.047442405501835, 0.077990714149396], 4248 [0.045384589281588, 0.079205886075941], 4249 [0.043295668730857, 0.080366774244592], 4250 [0.041177075491445, 0.081472583040586], 4251 [0.039030261541332, 0.082522554597810], 4252 [0.036856698199564, 0.083515969318206], 4253 [0.034657875117883, 0.084452146364948], 4254 [0.032435299259796, 0.085330444129049], 4255 [0.030190493867775, 0.086150260669096], 4256 [0.027924997419306, 0.086911034123781], 4257 [0.025640362572491, 0.087612243096981], 4258 [0.023338155101933, 0.088253407015092], 4259 [0.021019952825636, 0.088834086456390], 4260 [0.018687344523641, 0.089353883452193], 4261 [0.016341928849164, 0.089812441759604], 4262 [0.013985313232951, 0.090209447105664], 4263 [0.011619112781631, 0.090544627402740], 4264 [0.009244949170797, 0.090817752935000], 4265 [0.006864449533597, 0.091028636515846], 4266 [0.004479245345574, 0.091177133616206], 4267 [0.002090971306534, 0.091263142463585] 4268]; 4269},{}],11:[function(require,module,exports){ 4270/* 4271 * AAC.js - Advanced Audio Coding decoder in JavaScript 4272 * Created by Devon Govett 4273 * Copyright (c) 2012, Official.fm Labs 4274 * 4275 * AAC.js is free software; you can redistribute it and/or modify it 4276 * under the terms of the GNU Lesser General Public License as 4277 * published by the Free Software Foundation; either version 3 of the 4278 * License, or (at your option) any later version. 4279 * 4280 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 4281 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 4282 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 4283 * Public License for more details. 4284 * 4285 * You should have received a copy of the GNU Lesser General Public 4286 * License along with this library. 4287 * If not, see <http://www.gnu.org/licenses/>. 4288 */ 4289 4290/******************************************************************************** 4291 * Sample offset into the window indicating the beginning of a scalefactor 4292 * window band 4293 * 4294 * scalefactor window band - term for scalefactor bands within a window, 4295 * given in Table 4.110 to Table 4.128. 4296 * 4297 * scalefactor band - a set of spectral coefficients which are scaled by one 4298 * scalefactor. In case of EIGHT_SHORT_SEQUENCE and grouping a scalefactor band 4299 * may contain several scalefactor window bands of corresponding frequency. For 4300 * all other window_sequences scalefactor bands and scalefactor window bands are 4301 * identical. 4302 *******************************************************************************/ 4303const SWB_OFFSET_1024_96 = new Uint16Array([ 4304 0, 4, 8, 12, 16, 20, 24, 28, 4305 32, 36, 40, 44, 48, 52, 56, 64, 4306 72, 80, 88, 96, 108, 120, 132, 144, 4307 156, 172, 188, 212, 240, 276, 320, 384, 4308 448, 512, 576, 640, 704, 768, 832, 896, 4309 960, 1024 4310]); 4311 4312const SWB_OFFSET_128_96 = new Uint16Array([ 4313 0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128 4314]); 4315 4316const SWB_OFFSET_1024_64 = new Uint16Array([ 4317 0, 4, 8, 12, 16, 20, 24, 28, 4318 32, 36, 40, 44, 48, 52, 56, 64, 4319 72, 80, 88, 100, 112, 124, 140, 156, 4320 172, 192, 216, 240, 268, 304, 344, 384, 4321 424, 464, 504, 544, 584, 624, 664, 704, 4322 744, 784, 824, 864, 904, 944, 984, 1024 4323]); 4324 4325const SWB_OFFSET_128_64 = new Uint16Array([ 4326 0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128 4327]); 4328 4329const SWB_OFFSET_1024_48 = new Uint16Array([ 4330 0, 4, 8, 12, 16, 20, 24, 28, 4331 32, 36, 40, 48, 56, 64, 72, 80, 4332 88, 96, 108, 120, 132, 144, 160, 176, 4333 196, 216, 240, 264, 292, 320, 352, 384, 4334 416, 448, 480, 512, 544, 576, 608, 640, 4335 672, 704, 736, 768, 800, 832, 864, 896, 4336 928, 1024 4337]); 4338 4339const SWB_OFFSET_128_48 = new Uint16Array([ 4340 0, 4, 8, 12, 16, 20, 28, 36, 4341 44, 56, 68, 80, 96, 112, 128 4342]); 4343 4344const SWB_OFFSET_1024_32 = new Uint16Array([ 4345 0, 4, 8, 12, 16, 20, 24, 28, 4346 32, 36, 40, 48, 56, 64, 72, 80, 4347 88, 96, 108, 120, 132, 144, 160, 176, 4348 196, 216, 240, 264, 292, 320, 352, 384, 4349 416, 448, 480, 512, 544, 576, 608, 640, 4350 672, 704, 736, 768, 800, 832, 864, 896, 4351 928, 960, 992, 1024 4352]); 4353 4354const SWB_OFFSET_1024_24 = new Uint16Array([ 4355 0, 4, 8, 12, 16, 20, 24, 28, 4356 32, 36, 40, 44, 52, 60, 68, 76, 4357 84, 92, 100, 108, 116, 124, 136, 148, 4358 160, 172, 188, 204, 220, 240, 260, 284, 4359 308, 336, 364, 396, 432, 468, 508, 552, 4360 600, 652, 704, 768, 832, 896, 960, 1024 4361]); 4362 4363const SWB_OFFSET_128_24 = new Uint16Array([ 4364 0, 4, 8, 12, 16, 20, 24, 28, 4365 36, 44, 52, 64, 76, 92, 108, 128 4366]); 4367 4368const SWB_OFFSET_1024_16 = new Uint16Array([ 4369 0, 8, 16, 24, 32, 40, 48, 56, 4370 64, 72, 80, 88, 100, 112, 124, 136, 4371 148, 160, 172, 184, 196, 212, 228, 244, 4372 260, 280, 300, 320, 344, 368, 396, 424, 4373 456, 492, 532, 572, 616, 664, 716, 772, 4374 832, 896, 960, 1024 4375]); 4376 4377const SWB_OFFSET_128_16 = new Uint16Array([ 4378 0, 4, 8, 12, 16, 20, 24, 28, 4379 32, 40, 48, 60, 72, 88, 108, 128 4380]); 4381 4382const SWB_OFFSET_1024_8 = new Uint16Array([ 4383 0, 12, 24, 36, 48, 60, 72, 84, 4384 96, 108, 120, 132, 144, 156, 172, 188, 4385 204, 220, 236, 252, 268, 288, 308, 328, 4386 348, 372, 396, 420, 448, 476, 508, 544, 4387 580, 620, 664, 712, 764, 820, 880, 944, 4388 1024 4389]); 4390 4391const SWB_OFFSET_128_8 = new Uint16Array([ 4392 0, 4, 8, 12, 16, 20, 24, 28, 4393 36, 44, 52, 60, 72, 88, 108, 128 4394]); 4395 4396exports.SWB_OFFSET_1024 = [ 4397 SWB_OFFSET_1024_96, 4398 SWB_OFFSET_1024_96, 4399 SWB_OFFSET_1024_64, 4400 SWB_OFFSET_1024_48, 4401 SWB_OFFSET_1024_48, 4402 SWB_OFFSET_1024_32, 4403 SWB_OFFSET_1024_24, 4404 SWB_OFFSET_1024_24, 4405 SWB_OFFSET_1024_16, 4406 SWB_OFFSET_1024_16, 4407 SWB_OFFSET_1024_16, 4408 SWB_OFFSET_1024_8 4409]; 4410 4411exports.SWB_OFFSET_128 = [ 4412 SWB_OFFSET_128_96, 4413 SWB_OFFSET_128_96, 4414 SWB_OFFSET_128_64, 4415 SWB_OFFSET_128_48, 4416 SWB_OFFSET_128_48, 4417 SWB_OFFSET_128_48, 4418 SWB_OFFSET_128_24, 4419 SWB_OFFSET_128_24, 4420 SWB_OFFSET_128_16, 4421 SWB_OFFSET_128_16, 4422 SWB_OFFSET_128_16, 4423 SWB_OFFSET_128_8 4424]; 4425 4426exports.SWB_SHORT_WINDOW_COUNT = new Uint8Array([ 4427 12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15 4428]); 4429 4430exports.SWB_LONG_WINDOW_COUNT = new Uint8Array([ 4431 41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40 4432]); 4433 4434/* 4435 * Scalefactor lookup table 4436 */ 4437exports.SCALEFACTOR_TABLE = (function() { 4438 var table = new Float32Array(428); 4439 4440 for (var i = 0; i < 428; i++) { 4441 table[i] = Math.pow(2, (i - 200) / 4); 4442 } 4443 4444 return table; 4445})(); 4446 4447 4448/** 4449 * Inverse quantization lookup table 4450 */ 4451exports.IQ_TABLE = (function() { 4452 var table = new Float32Array(8191), 4453 four_thirds = 4/3; 4454 4455 for (var i = 0; i < 8191; i++) { 4456 table[i] = Math.pow(i, four_thirds); 4457 } 4458 4459 return table; 4460})(); 4461 4462exports.SAMPLE_RATES = new Int32Array([ 4463 96000, 88200, 64000, 48000, 44100, 32000, 4464 24000, 22050, 16000, 12000, 11025, 8000, 7350 4465]); 4466 4467},{}],12:[function(require,module,exports){ 4468/* 4469 * AAC.js - Advanced Audio Coding decoder in JavaScript 4470 * Created by Devon Govett 4471 * Copyright (c) 2012, Official.fm Labs 4472 * 4473 * AAC.js is free software; you can redistribute it and/or modify it 4474 * under the terms of the GNU Lesser General Public License as 4475 * published by the Free Software Foundation; either version 3 of the 4476 * License, or (at your option) any later version. 4477 * 4478 * AAC.js is distributed in the hope that it will be useful, but WITHOUT 4479 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 4480 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 4481 * Public License for more details. 4482 * 4483 * You should have received a copy of the GNU Lesser General Public 4484 * License along with this library. 4485 * If not, see <http://www.gnu.org/licenses/>. 4486 */ 4487 4488// Temporal Noise Shaping 4489function TNS(config) { 4490 this.maxBands = TNS_MAX_BANDS_1024[config.sampleIndex] 4491 this.nFilt = new Int32Array(8); 4492 this.length = new Array(8); 4493 this.direction = new Array(8); 4494 this.order = new Array(8); 4495 this.coef = new Array(8); 4496 4497 // Probably could allocate these as needed 4498 for (var w = 0; w < 8; w++) { 4499 this.length[w] = new Int32Array(4); 4500 this.direction[w] = new Array(4); 4501 this.order[w] = new Int32Array(4); 4502 this.coef[w] = new Array(4); 4503 4504 for (var filt = 0; filt < 4; filt++) { 4505 this.coef[w][filt] = new Float32Array(TNS_MAX_ORDER); 4506 } 4507 } 4508 4509 this.lpc = new Float32Array(TNS_MAX_ORDER); 4510 this.tmp = new Float32Array(TNS_MAX_ORDER); 4511} 4512 4513const TNS_MAX_ORDER = 20, 4514 SHORT_BITS = [1, 4, 3], 4515 LONG_BITS = [2, 6, 5]; 4516 4517const TNS_COEF_1_3 = [0.00000000, -0.43388373, 0.64278758, 0.34202015], 4518 4519 TNS_COEF_0_3 = [0.00000000, -0.43388373, -0.78183150, -0.97492790, 4520 0.98480773, 0.86602539, 0.64278758, 0.34202015], 4521 4522 TNS_COEF_1_4 = [0.00000000, -0.20791170, -0.40673664, -0.58778524, 4523 0.67369562, 0.52643216, 0.36124167, 0.18374951], 4524 4525 TNS_COEF_0_4 = [0.00000000, -0.20791170, -0.40673664, -0.58778524, 4526 -0.74314481, -0.86602539, -0.95105654, -0.99452192, 4527 0.99573416, 0.96182561, 0.89516330, 0.79801720, 4528 0.67369562, 0.52643216, 0.36124167, 0.18374951], 4529 4530 TNS_TABLES = [TNS_COEF_0_3, TNS_COEF_0_4, TNS_COEF_1_3, TNS_COEF_1_4]; 4531 4532const TNS_MAX_BANDS_1024 = [31, 31, 34, 40, 42, 51, 46, 46, 42, 42, 42, 39, 39], 4533 TNS_MAX_BANDS_128 = [9, 9, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14]; 4534 4535TNS.prototype.decode = function(stream, info) { 4536 var windowCount = info.windowCount, 4537 bits = info.windowSequence === 2 ? SHORT_BITS : LONG_BITS; 4538 4539 for (var w = 0; w < windowCount; w++) { 4540 if (this.nFilt[w] = stream.read(bits[0])) { 4541 var coefRes = stream.read(1), 4542 nFilt_w = this.nFilt[w], 4543 length_w = this.length[w], 4544 order_w = this.order[w], 4545 direction_w = this.direction[w], 4546 coef_w = this.coef[w]; 4547 4548 for (var filt = 0; filt < nFilt_w; filt++) { 4549 length_w[filt] = stream.read(bits[1]); 4550 4551 if ((order_w[filt] = stream.read(bits[2])) > 20) 4552 throw new Error("TNS filter out of range: " + order_w[filt]); 4553 4554 if (order_w[filt]) { 4555 direction_w[filt] = !!stream.read(1); 4556 var coefCompress = stream.read(1), 4557 coefLen = coefRes + 3 - coefCompress, 4558 tmp = 2 * coefCompress + coefRes, 4559 table = TNS_TABLES[tmp], 4560 order_w_filt = order_w[filt], 4561 coef_w_filt = coef_w[filt]; 4562 4563 for (var i = 0; i < order_w_filt; i++) 4564 coef_w_filt[i] = table[stream.read(coefLen)]; 4565 } 4566 4567 } 4568 } 4569 } 4570}; 4571 4572TNS.prototype.process = function(ics, data, decode) { 4573 var mmm = Math.min(this.maxBands, ics.maxSFB), 4574 lpc = this.lpc, 4575 tmp = this.tmp, 4576 info = ics.info, 4577 windowCount = info.windowCount; 4578 4579 for (var w = 0; w < windowCount; w++) { 4580 var bottom = info.swbCount, 4581 nFilt_w = this.nFilt[w], 4582 length_w = this.length[w], 4583 order_w = this.order[w], 4584 coef_w = this.coef[w], 4585 direction_w = this.direction[w]; 4586 4587 for (var filt = 0; filt < nFilt_w; filt++) { 4588 var top = bottom, 4589 bottom = Math.max(0, tmp - length_w[filt]), 4590 order = order_w[filt]; 4591 4592 if (order === 0) continue; 4593 4594 // calculate lpc coefficients 4595 var autoc = coef_w[filt]; 4596 for (var i = 0; i < order; i++) { 4597 var r = -autoc[i]; 4598 lpc[i] = r; 4599 4600 for (var j = 0, len = (i + 1) >> 1; j < len; j++) { 4601 var f = lpc[j], 4602 b = lpc[i - 1 - j]; 4603 4604 lpc[j] = f + r * b; 4605 lpc[i - 1 - j] = b + r * f; 4606 } 4607 } 4608 4609 var start = info.swbOffsets[Math.min(bottom, mmm)], 4610 end = info.swbOffsets[Math.min(top, mmm)], 4611 size, 4612 inc = 1; 4613 4614 if ((size = end - start) <= 0) continue; 4615 4616 if (direction_w[filt]) { 4617 inc = -1; 4618 start = end - 1; 4619 } 4620 4621 start += w * 128; 4622 4623 if (decode) { 4624 // ar filter 4625 for (var m = 0; m < size; m++, start += inc) { 4626 for (var i = 1; i <= Math.min(m, order); i++) { 4627 data[start] -= data[start - i * inc] * lpc[i - 1]; 4628 } 4629 } 4630 } else { 4631 // ma filter 4632 for (var m = 0; m < size; m++, start += inc) { 4633 tmp[0] = data[start]; 4634 4635 for (var i = 1; i <= Math.min(m, order); i++) 4636 data[start] += tmp[i] * lpc[i - 1]; 4637 4638 for (var i = order; i > 0; i--) 4639 tmp[i] = tmp[i - 1]; 4640 } 4641 } 4642 } 4643 } 4644}; 4645 4646module.exports = TNS; 4647 4648},{}]},{},[4]) 4649 4650 4651//# sourceMappingURL=aac.js.map